deck.gl.js 2.5 MB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593235942359523596235972359823599236002360123602236032360423605236062360723608236092361023611236122361323614236152361623617236182361923620236212362223623236242362523626236272362823629236302363123632236332363423635236362363723638236392364023641236422364323644236452364623647236482364923650236512365223653236542365523656236572365823659236602366123662236632366423665236662366723668236692367023671236722367323674236752367623677236782367923680236812368223683236842368523686236872368823689236902369123692236932369423695236962369723698236992370023701237022370323704237052370623707237082370923710237112371223713237142371523716237172371823719237202372123722237232372423725237262372723728237292373023731237322373323734237352373623737237382373923740237412374223743237442374523746237472374823749237502375123752237532375423755237562375723758237592376023761237622376323764237652376623767237682376923770237712377223773237742377523776237772377823779237802378123782237832378423785237862378723788237892379023791237922379323794237952379623797237982379923800238012380223803238042380523806238072380823809238102381123812238132381423815238162381723818238192382023821238222382323824238252382623827238282382923830238312383223833238342383523836238372383823839238402384123842238432384423845238462384723848238492385023851238522385323854238552385623857238582385923860238612386223863238642386523866238672386823869238702387123872238732387423875238762387723878238792388023881238822388323884238852388623887238882388923890238912389223893238942389523896238972389823899239002390123902239032390423905239062390723908239092391023911239122391323914239152391623917239182391923920239212392223923239242392523926239272392823929239302393123932239332393423935239362393723938239392394023941239422394323944239452394623947239482394923950239512395223953239542395523956239572395823959239602396123962239632396423965239662396723968239692397023971239722397323974239752397623977239782397923980239812398223983239842398523986239872398823989239902399123992239932399423995239962399723998239992400024001240022400324004240052400624007240082400924010240112401224013240142401524016240172401824019240202402124022240232402424025240262402724028240292403024031240322403324034240352403624037240382403924040240412404224043240442404524046240472404824049240502405124052240532405424055240562405724058240592406024061240622406324064240652406624067240682406924070240712407224073240742407524076240772407824079240802408124082240832408424085240862408724088240892409024091240922409324094240952409624097240982409924100241012410224103241042410524106241072410824109241102411124112241132411424115241162411724118241192412024121241222412324124241252412624127241282412924130241312413224133241342413524136241372413824139241402414124142241432414424145241462414724148241492415024151241522415324154241552415624157241582415924160241612416224163241642416524166241672416824169241702417124172241732417424175241762417724178241792418024181241822418324184241852418624187241882418924190241912419224193241942419524196241972419824199242002420124202242032420424205242062420724208242092421024211242122421324214242152421624217242182421924220242212422224223242242422524226242272422824229242302423124232242332423424235242362423724238242392424024241242422424324244242452424624247242482424924250242512425224253242542425524256242572425824259242602426124262242632426424265242662426724268242692427024271242722427324274242752427624277242782427924280242812428224283242842428524286242872428824289242902429124292242932429424295242962429724298242992430024301243022430324304243052430624307243082430924310243112431224313243142431524316243172431824319243202432124322243232432424325243262432724328243292433024331243322433324334243352433624337243382433924340243412434224343243442434524346243472434824349243502435124352243532435424355243562435724358243592436024361243622436324364243652436624367243682436924370243712437224373243742437524376243772437824379243802438124382243832438424385243862438724388243892439024391243922439324394243952439624397243982439924400244012440224403244042440524406244072440824409244102441124412244132441424415244162441724418244192442024421244222442324424244252442624427244282442924430244312443224433244342443524436244372443824439244402444124442244432444424445244462444724448244492445024451244522445324454244552445624457244582445924460244612446224463244642446524466244672446824469244702447124472244732447424475244762447724478244792448024481244822448324484244852448624487244882448924490244912449224493244942449524496244972449824499245002450124502245032450424505245062450724508245092451024511245122451324514245152451624517245182451924520245212452224523245242452524526245272452824529245302453124532245332453424535245362453724538245392454024541245422454324544245452454624547245482454924550245512455224553245542455524556245572455824559245602456124562245632456424565245662456724568245692457024571245722457324574245752457624577245782457924580245812458224583245842458524586245872458824589245902459124592245932459424595245962459724598245992460024601246022460324604246052460624607246082460924610246112461224613246142461524616246172461824619246202462124622246232462424625246262462724628246292463024631246322463324634246352463624637246382463924640246412464224643246442464524646246472464824649246502465124652246532465424655246562465724658246592466024661246622466324664246652466624667246682466924670246712467224673246742467524676246772467824679246802468124682246832468424685246862468724688246892469024691246922469324694246952469624697246982469924700247012470224703247042470524706247072470824709247102471124712247132471424715247162471724718247192472024721247222472324724247252472624727247282472924730247312473224733247342473524736247372473824739247402474124742247432474424745247462474724748247492475024751247522475324754247552475624757247582475924760247612476224763247642476524766247672476824769247702477124772247732477424775247762477724778247792478024781247822478324784247852478624787247882478924790247912479224793247942479524796247972479824799248002480124802248032480424805248062480724808248092481024811248122481324814248152481624817248182481924820248212482224823248242482524826248272482824829248302483124832248332483424835248362483724838248392484024841248422484324844248452484624847248482484924850248512485224853248542485524856248572485824859248602486124862248632486424865248662486724868248692487024871248722487324874248752487624877248782487924880248812488224883248842488524886248872488824889248902489124892248932489424895248962489724898248992490024901249022490324904249052490624907249082490924910249112491224913249142491524916249172491824919249202492124922249232492424925249262492724928249292493024931249322493324934249352493624937249382493924940249412494224943249442494524946249472494824949249502495124952249532495424955249562495724958249592496024961249622496324964249652496624967249682496924970249712497224973249742497524976249772497824979249802498124982249832498424985249862498724988249892499024991249922499324994249952499624997249982499925000250012500225003250042500525006250072500825009250102501125012250132501425015250162501725018250192502025021250222502325024250252502625027250282502925030250312503225033250342503525036250372503825039250402504125042250432504425045250462504725048250492505025051250522505325054250552505625057250582505925060250612506225063250642506525066250672506825069250702507125072250732507425075250762507725078250792508025081250822508325084250852508625087250882508925090250912509225093250942509525096250972509825099251002510125102251032510425105251062510725108251092511025111251122511325114251152511625117251182511925120251212512225123251242512525126251272512825129251302513125132251332513425135251362513725138251392514025141251422514325144251452514625147251482514925150251512515225153251542515525156251572515825159251602516125162251632516425165251662516725168251692517025171251722517325174251752517625177251782517925180251812518225183251842518525186251872518825189251902519125192251932519425195251962519725198251992520025201252022520325204252052520625207252082520925210252112521225213252142521525216252172521825219252202522125222252232522425225252262522725228252292523025231252322523325234252352523625237252382523925240252412524225243252442524525246252472524825249252502525125252252532525425255252562525725258252592526025261252622526325264252652526625267252682526925270252712527225273252742527525276252772527825279252802528125282252832528425285252862528725288252892529025291252922529325294252952529625297252982529925300253012530225303253042530525306253072530825309253102531125312253132531425315253162531725318253192532025321253222532325324253252532625327253282532925330253312533225333253342533525336253372533825339253402534125342253432534425345253462534725348253492535025351253522535325354253552535625357253582535925360253612536225363253642536525366253672536825369253702537125372253732537425375253762537725378253792538025381253822538325384253852538625387253882538925390253912539225393253942539525396253972539825399254002540125402254032540425405254062540725408254092541025411254122541325414254152541625417254182541925420254212542225423254242542525426254272542825429254302543125432254332543425435254362543725438254392544025441254422544325444254452544625447254482544925450254512545225453254542545525456254572545825459254602546125462254632546425465254662546725468254692547025471254722547325474254752547625477254782547925480254812548225483254842548525486254872548825489254902549125492254932549425495254962549725498254992550025501255022550325504255052550625507255082550925510255112551225513255142551525516255172551825519255202552125522255232552425525255262552725528255292553025531255322553325534255352553625537255382553925540255412554225543255442554525546255472554825549255502555125552255532555425555255562555725558255592556025561255622556325564255652556625567255682556925570255712557225573255742557525576255772557825579255802558125582255832558425585255862558725588255892559025591255922559325594255952559625597255982559925600256012560225603256042560525606256072560825609256102561125612256132561425615256162561725618256192562025621256222562325624256252562625627256282562925630256312563225633256342563525636256372563825639256402564125642256432564425645256462564725648256492565025651256522565325654256552565625657256582565925660256612566225663256642566525666256672566825669256702567125672256732567425675256762567725678256792568025681256822568325684256852568625687256882568925690256912569225693256942569525696256972569825699257002570125702257032570425705257062570725708257092571025711257122571325714257152571625717257182571925720257212572225723257242572525726257272572825729257302573125732257332573425735257362573725738257392574025741257422574325744257452574625747257482574925750257512575225753257542575525756257572575825759257602576125762257632576425765257662576725768257692577025771257722577325774257752577625777257782577925780257812578225783257842578525786257872578825789257902579125792257932579425795257962579725798257992580025801258022580325804258052580625807258082580925810258112581225813258142581525816258172581825819258202582125822258232582425825258262582725828258292583025831258322583325834258352583625837258382583925840258412584225843258442584525846258472584825849258502585125852258532585425855258562585725858258592586025861258622586325864258652586625867258682586925870258712587225873258742587525876258772587825879258802588125882258832588425885258862588725888258892589025891258922589325894258952589625897258982589925900259012590225903259042590525906259072590825909259102591125912259132591425915259162591725918259192592025921259222592325924259252592625927259282592925930259312593225933259342593525936259372593825939259402594125942259432594425945259462594725948259492595025951259522595325954259552595625957259582595925960259612596225963259642596525966259672596825969259702597125972259732597425975259762597725978259792598025981259822598325984259852598625987259882598925990259912599225993259942599525996259972599825999260002600126002260032600426005260062600726008260092601026011260122601326014260152601626017260182601926020260212602226023260242602526026260272602826029260302603126032260332603426035260362603726038260392604026041260422604326044260452604626047260482604926050260512605226053260542605526056260572605826059260602606126062260632606426065260662606726068260692607026071260722607326074260752607626077260782607926080260812608226083260842608526086260872608826089260902609126092260932609426095260962609726098260992610026101261022610326104261052610626107261082610926110261112611226113261142611526116261172611826119261202612126122261232612426125261262612726128261292613026131261322613326134261352613626137261382613926140261412614226143261442614526146261472614826149261502615126152261532615426155261562615726158261592616026161261622616326164261652616626167261682616926170261712617226173261742617526176261772617826179261802618126182261832618426185261862618726188261892619026191261922619326194261952619626197261982619926200262012620226203262042620526206262072620826209262102621126212262132621426215262162621726218262192622026221262222622326224262252622626227262282622926230262312623226233262342623526236262372623826239262402624126242262432624426245262462624726248262492625026251262522625326254262552625626257262582625926260262612626226263262642626526266262672626826269262702627126272262732627426275262762627726278262792628026281262822628326284262852628626287262882628926290262912629226293262942629526296262972629826299263002630126302263032630426305263062630726308263092631026311263122631326314263152631626317263182631926320263212632226323263242632526326263272632826329263302633126332263332633426335263362633726338263392634026341263422634326344263452634626347263482634926350263512635226353263542635526356263572635826359263602636126362263632636426365263662636726368263692637026371263722637326374263752637626377263782637926380263812638226383263842638526386263872638826389263902639126392263932639426395263962639726398263992640026401264022640326404264052640626407264082640926410264112641226413264142641526416264172641826419264202642126422264232642426425264262642726428264292643026431264322643326434264352643626437264382643926440264412644226443264442644526446264472644826449264502645126452264532645426455264562645726458264592646026461264622646326464264652646626467264682646926470264712647226473264742647526476264772647826479264802648126482264832648426485264862648726488264892649026491264922649326494264952649626497264982649926500265012650226503265042650526506265072650826509265102651126512265132651426515265162651726518265192652026521265222652326524265252652626527265282652926530265312653226533265342653526536265372653826539265402654126542265432654426545265462654726548265492655026551265522655326554265552655626557265582655926560265612656226563265642656526566265672656826569265702657126572265732657426575265762657726578265792658026581265822658326584265852658626587265882658926590265912659226593265942659526596265972659826599266002660126602266032660426605266062660726608266092661026611266122661326614266152661626617266182661926620266212662226623266242662526626266272662826629266302663126632266332663426635266362663726638266392664026641266422664326644266452664626647266482664926650266512665226653266542665526656266572665826659266602666126662266632666426665266662666726668266692667026671266722667326674266752667626677266782667926680266812668226683266842668526686266872668826689266902669126692266932669426695266962669726698266992670026701267022670326704267052670626707267082670926710267112671226713267142671526716267172671826719267202672126722267232672426725267262672726728267292673026731267322673326734267352673626737267382673926740267412674226743267442674526746267472674826749267502675126752267532675426755267562675726758267592676026761267622676326764267652676626767267682676926770267712677226773267742677526776267772677826779267802678126782267832678426785267862678726788267892679026791267922679326794267952679626797267982679926800268012680226803268042680526806268072680826809268102681126812268132681426815268162681726818268192682026821268222682326824268252682626827268282682926830268312683226833268342683526836268372683826839268402684126842268432684426845268462684726848268492685026851268522685326854268552685626857268582685926860268612686226863268642686526866268672686826869268702687126872268732687426875268762687726878268792688026881268822688326884268852688626887268882688926890268912689226893268942689526896268972689826899269002690126902269032690426905269062690726908269092691026911269122691326914269152691626917269182691926920269212692226923269242692526926269272692826929269302693126932269332693426935269362693726938269392694026941269422694326944269452694626947269482694926950269512695226953269542695526956269572695826959269602696126962269632696426965269662696726968269692697026971269722697326974269752697626977269782697926980269812698226983269842698526986269872698826989269902699126992269932699426995269962699726998269992700027001270022700327004270052700627007270082700927010270112701227013270142701527016270172701827019270202702127022270232702427025270262702727028270292703027031270322703327034270352703627037270382703927040270412704227043270442704527046270472704827049270502705127052270532705427055270562705727058270592706027061270622706327064270652706627067270682706927070270712707227073270742707527076270772707827079270802708127082270832708427085270862708727088270892709027091270922709327094270952709627097270982709927100271012710227103271042710527106271072710827109271102711127112271132711427115271162711727118271192712027121271222712327124271252712627127271282712927130271312713227133271342713527136271372713827139271402714127142271432714427145271462714727148271492715027151271522715327154271552715627157271582715927160271612716227163271642716527166271672716827169271702717127172271732717427175271762717727178271792718027181271822718327184271852718627187271882718927190271912719227193271942719527196271972719827199272002720127202272032720427205272062720727208272092721027211272122721327214272152721627217272182721927220272212722227223272242722527226272272722827229272302723127232272332723427235272362723727238272392724027241272422724327244272452724627247272482724927250272512725227253272542725527256272572725827259272602726127262272632726427265272662726727268272692727027271272722727327274272752727627277272782727927280272812728227283272842728527286272872728827289272902729127292272932729427295272962729727298272992730027301273022730327304273052730627307273082730927310273112731227313273142731527316273172731827319273202732127322273232732427325273262732727328273292733027331273322733327334273352733627337273382733927340273412734227343273442734527346273472734827349273502735127352273532735427355273562735727358273592736027361273622736327364273652736627367273682736927370273712737227373273742737527376273772737827379273802738127382273832738427385273862738727388273892739027391273922739327394273952739627397273982739927400274012740227403274042740527406274072740827409274102741127412274132741427415274162741727418274192742027421274222742327424274252742627427274282742927430274312743227433274342743527436274372743827439274402744127442274432744427445274462744727448274492745027451274522745327454274552745627457274582745927460274612746227463274642746527466274672746827469274702747127472274732747427475274762747727478274792748027481274822748327484274852748627487274882748927490274912749227493274942749527496274972749827499275002750127502275032750427505275062750727508275092751027511275122751327514275152751627517275182751927520275212752227523275242752527526275272752827529275302753127532275332753427535275362753727538275392754027541275422754327544275452754627547275482754927550275512755227553275542755527556275572755827559275602756127562275632756427565275662756727568275692757027571275722757327574275752757627577275782757927580275812758227583275842758527586275872758827589275902759127592275932759427595275962759727598275992760027601276022760327604276052760627607276082760927610276112761227613276142761527616276172761827619276202762127622276232762427625276262762727628276292763027631276322763327634276352763627637276382763927640276412764227643276442764527646276472764827649276502765127652276532765427655276562765727658276592766027661276622766327664276652766627667276682766927670276712767227673276742767527676276772767827679276802768127682276832768427685276862768727688276892769027691276922769327694276952769627697276982769927700277012770227703277042770527706277072770827709277102771127712277132771427715277162771727718277192772027721277222772327724277252772627727277282772927730277312773227733277342773527736277372773827739277402774127742277432774427745277462774727748277492775027751277522775327754277552775627757277582775927760277612776227763277642776527766277672776827769277702777127772277732777427775277762777727778277792778027781277822778327784277852778627787277882778927790277912779227793277942779527796277972779827799278002780127802278032780427805278062780727808278092781027811278122781327814278152781627817278182781927820278212782227823278242782527826278272782827829278302783127832278332783427835278362783727838278392784027841278422784327844278452784627847278482784927850278512785227853278542785527856278572785827859278602786127862278632786427865278662786727868278692787027871278722787327874278752787627877278782787927880278812788227883278842788527886278872788827889278902789127892278932789427895278962789727898278992790027901279022790327904279052790627907279082790927910279112791227913279142791527916279172791827919279202792127922279232792427925279262792727928279292793027931279322793327934279352793627937279382793927940279412794227943279442794527946279472794827949279502795127952279532795427955279562795727958279592796027961279622796327964279652796627967279682796927970279712797227973279742797527976279772797827979279802798127982279832798427985279862798727988279892799027991279922799327994279952799627997279982799928000280012800228003280042800528006280072800828009280102801128012280132801428015280162801728018280192802028021280222802328024280252802628027280282802928030280312803228033280342803528036280372803828039280402804128042280432804428045280462804728048280492805028051280522805328054280552805628057280582805928060280612806228063280642806528066280672806828069280702807128072280732807428075280762807728078280792808028081280822808328084280852808628087280882808928090280912809228093280942809528096280972809828099281002810128102281032810428105281062810728108281092811028111281122811328114281152811628117281182811928120281212812228123281242812528126281272812828129281302813128132281332813428135281362813728138281392814028141281422814328144281452814628147281482814928150281512815228153281542815528156281572815828159281602816128162281632816428165281662816728168281692817028171281722817328174281752817628177281782817928180281812818228183281842818528186281872818828189281902819128192281932819428195281962819728198281992820028201282022820328204282052820628207282082820928210282112821228213282142821528216282172821828219282202822128222282232822428225282262822728228282292823028231282322823328234282352823628237282382823928240282412824228243282442824528246282472824828249282502825128252282532825428255282562825728258282592826028261282622826328264282652826628267282682826928270282712827228273282742827528276282772827828279282802828128282282832828428285282862828728288282892829028291282922829328294282952829628297282982829928300283012830228303283042830528306283072830828309283102831128312283132831428315283162831728318283192832028321283222832328324283252832628327283282832928330283312833228333283342833528336283372833828339283402834128342283432834428345283462834728348283492835028351283522835328354283552835628357283582835928360283612836228363283642836528366283672836828369283702837128372283732837428375283762837728378283792838028381283822838328384283852838628387283882838928390283912839228393283942839528396283972839828399284002840128402284032840428405284062840728408284092841028411284122841328414284152841628417284182841928420284212842228423284242842528426284272842828429284302843128432284332843428435284362843728438284392844028441284422844328444284452844628447284482844928450284512845228453284542845528456284572845828459284602846128462284632846428465284662846728468284692847028471284722847328474284752847628477284782847928480284812848228483284842848528486284872848828489284902849128492284932849428495284962849728498284992850028501285022850328504285052850628507285082850928510285112851228513285142851528516285172851828519285202852128522285232852428525285262852728528285292853028531285322853328534285352853628537285382853928540285412854228543285442854528546285472854828549285502855128552285532855428555285562855728558285592856028561285622856328564285652856628567285682856928570285712857228573285742857528576285772857828579285802858128582285832858428585285862858728588285892859028591285922859328594285952859628597285982859928600286012860228603286042860528606286072860828609286102861128612286132861428615286162861728618286192862028621286222862328624286252862628627286282862928630286312863228633286342863528636286372863828639286402864128642286432864428645286462864728648286492865028651286522865328654286552865628657286582865928660286612866228663286642866528666286672866828669286702867128672286732867428675286762867728678286792868028681286822868328684286852868628687286882868928690286912869228693286942869528696286972869828699287002870128702287032870428705287062870728708287092871028711287122871328714287152871628717287182871928720287212872228723287242872528726287272872828729287302873128732287332873428735287362873728738287392874028741287422874328744287452874628747287482874928750287512875228753287542875528756287572875828759287602876128762287632876428765287662876728768287692877028771287722877328774287752877628777287782877928780287812878228783287842878528786287872878828789287902879128792287932879428795287962879728798287992880028801288022880328804288052880628807288082880928810288112881228813288142881528816288172881828819288202882128822288232882428825288262882728828288292883028831288322883328834288352883628837288382883928840288412884228843288442884528846288472884828849288502885128852288532885428855288562885728858288592886028861288622886328864288652886628867288682886928870288712887228873288742887528876288772887828879288802888128882288832888428885288862888728888288892889028891288922889328894288952889628897288982889928900289012890228903289042890528906289072890828909289102891128912289132891428915289162891728918289192892028921289222892328924289252892628927289282892928930289312893228933289342893528936289372893828939289402894128942289432894428945289462894728948289492895028951289522895328954289552895628957289582895928960289612896228963289642896528966289672896828969289702897128972289732897428975289762897728978289792898028981289822898328984289852898628987289882898928990289912899228993289942899528996289972899828999290002900129002290032900429005290062900729008290092901029011290122901329014290152901629017290182901929020290212902229023290242902529026290272902829029290302903129032290332903429035290362903729038290392904029041290422904329044290452904629047290482904929050290512905229053290542905529056290572905829059290602906129062290632906429065290662906729068290692907029071290722907329074290752907629077290782907929080290812908229083290842908529086290872908829089290902909129092290932909429095290962909729098290992910029101291022910329104291052910629107291082910929110291112911229113291142911529116291172911829119291202912129122291232912429125291262912729128291292913029131291322913329134291352913629137291382913929140291412914229143291442914529146291472914829149291502915129152291532915429155291562915729158291592916029161291622916329164291652916629167291682916929170291712917229173291742917529176291772917829179291802918129182291832918429185291862918729188291892919029191291922919329194291952919629197291982919929200292012920229203292042920529206292072920829209292102921129212292132921429215292162921729218292192922029221292222922329224292252922629227292282922929230292312923229233292342923529236292372923829239292402924129242292432924429245292462924729248292492925029251292522925329254292552925629257292582925929260292612926229263292642926529266292672926829269292702927129272292732927429275292762927729278292792928029281292822928329284292852928629287292882928929290292912929229293292942929529296292972929829299293002930129302293032930429305293062930729308293092931029311293122931329314293152931629317293182931929320293212932229323293242932529326293272932829329293302933129332293332933429335293362933729338293392934029341293422934329344293452934629347293482934929350293512935229353293542935529356293572935829359293602936129362293632936429365293662936729368293692937029371293722937329374293752937629377293782937929380293812938229383293842938529386293872938829389293902939129392293932939429395293962939729398293992940029401294022940329404294052940629407294082940929410294112941229413294142941529416294172941829419294202942129422294232942429425294262942729428294292943029431294322943329434294352943629437294382943929440294412944229443294442944529446294472944829449294502945129452294532945429455294562945729458294592946029461294622946329464294652946629467294682946929470294712947229473294742947529476294772947829479294802948129482294832948429485294862948729488294892949029491294922949329494294952949629497294982949929500295012950229503295042950529506295072950829509295102951129512295132951429515295162951729518295192952029521295222952329524295252952629527295282952929530295312953229533295342953529536295372953829539295402954129542295432954429545295462954729548295492955029551295522955329554295552955629557295582955929560295612956229563295642956529566295672956829569295702957129572295732957429575295762957729578295792958029581295822958329584295852958629587295882958929590295912959229593295942959529596295972959829599296002960129602296032960429605296062960729608296092961029611296122961329614296152961629617296182961929620296212962229623296242962529626296272962829629296302963129632296332963429635296362963729638296392964029641296422964329644296452964629647296482964929650296512965229653296542965529656296572965829659296602966129662296632966429665296662966729668296692967029671296722967329674296752967629677296782967929680296812968229683296842968529686296872968829689296902969129692296932969429695296962969729698296992970029701297022970329704297052970629707297082970929710297112971229713297142971529716297172971829719297202972129722297232972429725297262972729728297292973029731297322973329734297352973629737297382973929740297412974229743297442974529746297472974829749297502975129752297532975429755297562975729758297592976029761297622976329764297652976629767297682976929770297712977229773297742977529776297772977829779297802978129782297832978429785297862978729788297892979029791297922979329794297952979629797297982979929800298012980229803298042980529806298072980829809298102981129812298132981429815298162981729818298192982029821298222982329824298252982629827298282982929830298312983229833298342983529836298372983829839298402984129842298432984429845298462984729848298492985029851298522985329854298552985629857298582985929860298612986229863298642986529866298672986829869298702987129872298732987429875298762987729878298792988029881298822988329884298852988629887298882988929890298912989229893298942989529896298972989829899299002990129902299032990429905299062990729908299092991029911299122991329914299152991629917299182991929920299212992229923299242992529926299272992829929299302993129932299332993429935299362993729938299392994029941299422994329944299452994629947299482994929950299512995229953299542995529956299572995829959299602996129962299632996429965299662996729968299692997029971299722997329974299752997629977299782997929980299812998229983299842998529986299872998829989299902999129992299932999429995299962999729998299993000030001300023000330004300053000630007300083000930010300113001230013300143001530016300173001830019300203002130022300233002430025300263002730028300293003030031300323003330034300353003630037300383003930040300413004230043300443004530046300473004830049300503005130052300533005430055300563005730058300593006030061300623006330064300653006630067300683006930070300713007230073300743007530076300773007830079300803008130082300833008430085300863008730088300893009030091300923009330094300953009630097300983009930100301013010230103301043010530106301073010830109301103011130112301133011430115301163011730118301193012030121301223012330124301253012630127301283012930130301313013230133301343013530136301373013830139301403014130142301433014430145301463014730148301493015030151301523015330154301553015630157301583015930160301613016230163301643016530166301673016830169301703017130172301733017430175301763017730178301793018030181301823018330184301853018630187301883018930190301913019230193301943019530196301973019830199302003020130202302033020430205302063020730208302093021030211302123021330214302153021630217302183021930220302213022230223302243022530226302273022830229302303023130232302333023430235302363023730238302393024030241302423024330244302453024630247302483024930250302513025230253302543025530256302573025830259302603026130262302633026430265302663026730268302693027030271302723027330274302753027630277302783027930280302813028230283302843028530286302873028830289302903029130292302933029430295302963029730298302993030030301303023030330304303053030630307303083030930310303113031230313303143031530316303173031830319303203032130322303233032430325303263032730328303293033030331303323033330334303353033630337303383033930340303413034230343303443034530346303473034830349303503035130352303533035430355303563035730358303593036030361303623036330364303653036630367303683036930370303713037230373303743037530376303773037830379303803038130382303833038430385303863038730388303893039030391303923039330394303953039630397303983039930400304013040230403304043040530406304073040830409304103041130412304133041430415304163041730418304193042030421304223042330424304253042630427304283042930430304313043230433304343043530436304373043830439304403044130442304433044430445304463044730448304493045030451304523045330454304553045630457304583045930460304613046230463304643046530466304673046830469304703047130472304733047430475304763047730478304793048030481304823048330484304853048630487304883048930490304913049230493304943049530496304973049830499305003050130502305033050430505305063050730508305093051030511305123051330514305153051630517305183051930520305213052230523305243052530526305273052830529305303053130532305333053430535305363053730538305393054030541305423054330544305453054630547305483054930550305513055230553305543055530556305573055830559305603056130562305633056430565305663056730568305693057030571305723057330574305753057630577305783057930580305813058230583305843058530586305873058830589305903059130592305933059430595305963059730598305993060030601306023060330604306053060630607306083060930610306113061230613306143061530616306173061830619306203062130622306233062430625306263062730628306293063030631306323063330634306353063630637306383063930640306413064230643306443064530646306473064830649306503065130652306533065430655306563065730658306593066030661306623066330664306653066630667306683066930670306713067230673306743067530676306773067830679306803068130682306833068430685306863068730688306893069030691306923069330694306953069630697306983069930700307013070230703307043070530706307073070830709307103071130712307133071430715307163071730718307193072030721307223072330724307253072630727307283072930730307313073230733307343073530736307373073830739307403074130742307433074430745307463074730748307493075030751307523075330754307553075630757307583075930760307613076230763307643076530766307673076830769307703077130772307733077430775307763077730778307793078030781307823078330784307853078630787307883078930790307913079230793307943079530796307973079830799308003080130802308033080430805308063080730808308093081030811308123081330814308153081630817308183081930820308213082230823308243082530826308273082830829308303083130832308333083430835308363083730838308393084030841308423084330844308453084630847308483084930850308513085230853308543085530856308573085830859308603086130862308633086430865308663086730868308693087030871308723087330874308753087630877308783087930880308813088230883308843088530886308873088830889308903089130892308933089430895308963089730898308993090030901309023090330904309053090630907309083090930910309113091230913309143091530916309173091830919309203092130922309233092430925309263092730928309293093030931309323093330934309353093630937309383093930940309413094230943309443094530946309473094830949309503095130952309533095430955309563095730958309593096030961309623096330964309653096630967309683096930970309713097230973309743097530976309773097830979309803098130982309833098430985309863098730988309893099030991309923099330994309953099630997309983099931000310013100231003310043100531006310073100831009310103101131012310133101431015310163101731018310193102031021310223102331024310253102631027310283102931030310313103231033310343103531036310373103831039310403104131042310433104431045310463104731048310493105031051310523105331054310553105631057310583105931060310613106231063310643106531066310673106831069310703107131072310733107431075310763107731078310793108031081310823108331084310853108631087310883108931090310913109231093310943109531096310973109831099311003110131102311033110431105311063110731108311093111031111311123111331114311153111631117311183111931120311213112231123311243112531126311273112831129311303113131132311333113431135311363113731138311393114031141311423114331144311453114631147311483114931150311513115231153311543115531156311573115831159311603116131162311633116431165311663116731168311693117031171311723117331174311753117631177311783117931180311813118231183311843118531186311873118831189311903119131192311933119431195311963119731198311993120031201312023120331204312053120631207312083120931210312113121231213312143121531216312173121831219312203122131222312233122431225312263122731228312293123031231312323123331234312353123631237312383123931240312413124231243312443124531246312473124831249312503125131252312533125431255312563125731258312593126031261312623126331264312653126631267312683126931270312713127231273312743127531276312773127831279312803128131282312833128431285312863128731288312893129031291312923129331294312953129631297312983129931300313013130231303313043130531306313073130831309313103131131312313133131431315313163131731318313193132031321313223132331324313253132631327313283132931330313313133231333313343133531336313373133831339313403134131342313433134431345313463134731348313493135031351313523135331354313553135631357313583135931360313613136231363313643136531366313673136831369313703137131372313733137431375313763137731378313793138031381313823138331384313853138631387313883138931390313913139231393313943139531396313973139831399314003140131402314033140431405314063140731408314093141031411314123141331414314153141631417314183141931420314213142231423314243142531426314273142831429314303143131432314333143431435314363143731438314393144031441314423144331444314453144631447314483144931450314513145231453314543145531456314573145831459314603146131462314633146431465314663146731468314693147031471314723147331474314753147631477314783147931480314813148231483314843148531486314873148831489314903149131492314933149431495314963149731498314993150031501315023150331504315053150631507315083150931510315113151231513315143151531516315173151831519315203152131522315233152431525315263152731528315293153031531315323153331534315353153631537315383153931540315413154231543315443154531546315473154831549315503155131552315533155431555315563155731558315593156031561315623156331564315653156631567315683156931570315713157231573315743157531576315773157831579315803158131582315833158431585315863158731588315893159031591315923159331594315953159631597315983159931600316013160231603316043160531606316073160831609316103161131612316133161431615316163161731618316193162031621316223162331624316253162631627316283162931630316313163231633316343163531636316373163831639316403164131642316433164431645316463164731648316493165031651316523165331654316553165631657316583165931660316613166231663316643166531666316673166831669316703167131672316733167431675316763167731678316793168031681316823168331684316853168631687316883168931690316913169231693316943169531696316973169831699317003170131702317033170431705317063170731708317093171031711317123171331714317153171631717317183171931720317213172231723317243172531726317273172831729317303173131732317333173431735317363173731738317393174031741317423174331744317453174631747317483174931750317513175231753317543175531756317573175831759317603176131762317633176431765317663176731768317693177031771317723177331774317753177631777317783177931780317813178231783317843178531786317873178831789317903179131792317933179431795317963179731798317993180031801318023180331804318053180631807318083180931810318113181231813318143181531816318173181831819318203182131822318233182431825318263182731828318293183031831318323183331834318353183631837318383183931840318413184231843318443184531846318473184831849318503185131852318533185431855318563185731858318593186031861318623186331864318653186631867318683186931870318713187231873318743187531876318773187831879318803188131882318833188431885318863188731888318893189031891318923189331894318953189631897318983189931900319013190231903319043190531906319073190831909319103191131912319133191431915319163191731918319193192031921319223192331924319253192631927319283192931930319313193231933319343193531936319373193831939319403194131942319433194431945319463194731948319493195031951319523195331954319553195631957319583195931960319613196231963319643196531966319673196831969319703197131972319733197431975319763197731978319793198031981319823198331984319853198631987319883198931990319913199231993319943199531996319973199831999320003200132002320033200432005320063200732008320093201032011320123201332014320153201632017320183201932020320213202232023320243202532026320273202832029320303203132032320333203432035320363203732038320393204032041320423204332044320453204632047320483204932050320513205232053320543205532056320573205832059320603206132062320633206432065320663206732068320693207032071320723207332074320753207632077320783207932080320813208232083320843208532086320873208832089320903209132092320933209432095320963209732098320993210032101321023210332104321053210632107321083210932110321113211232113321143211532116321173211832119321203212132122321233212432125321263212732128321293213032131321323213332134321353213632137321383213932140321413214232143321443214532146321473214832149321503215132152321533215432155321563215732158321593216032161321623216332164321653216632167321683216932170321713217232173321743217532176321773217832179321803218132182321833218432185321863218732188321893219032191321923219332194321953219632197321983219932200322013220232203322043220532206322073220832209322103221132212322133221432215322163221732218322193222032221322223222332224322253222632227322283222932230322313223232233322343223532236322373223832239322403224132242322433224432245322463224732248322493225032251322523225332254322553225632257322583225932260322613226232263322643226532266322673226832269322703227132272322733227432275322763227732278322793228032281322823228332284322853228632287322883228932290322913229232293322943229532296322973229832299323003230132302323033230432305323063230732308323093231032311323123231332314323153231632317323183231932320323213232232323323243232532326323273232832329323303233132332323333233432335323363233732338323393234032341323423234332344323453234632347323483234932350323513235232353323543235532356323573235832359323603236132362323633236432365323663236732368323693237032371323723237332374323753237632377323783237932380323813238232383323843238532386323873238832389323903239132392323933239432395323963239732398323993240032401324023240332404324053240632407324083240932410324113241232413324143241532416324173241832419324203242132422324233242432425324263242732428324293243032431324323243332434324353243632437324383243932440324413244232443324443244532446324473244832449324503245132452324533245432455324563245732458324593246032461324623246332464324653246632467324683246932470324713247232473324743247532476324773247832479324803248132482324833248432485324863248732488324893249032491324923249332494324953249632497324983249932500325013250232503325043250532506325073250832509325103251132512325133251432515325163251732518325193252032521325223252332524325253252632527325283252932530325313253232533325343253532536325373253832539325403254132542325433254432545325463254732548325493255032551325523255332554325553255632557325583255932560325613256232563325643256532566325673256832569325703257132572325733257432575325763257732578325793258032581325823258332584325853258632587325883258932590325913259232593325943259532596325973259832599326003260132602326033260432605326063260732608326093261032611326123261332614326153261632617326183261932620326213262232623326243262532626326273262832629326303263132632326333263432635326363263732638326393264032641326423264332644326453264632647326483264932650326513265232653326543265532656326573265832659326603266132662326633266432665326663266732668326693267032671326723267332674326753267632677326783267932680326813268232683326843268532686326873268832689326903269132692326933269432695326963269732698326993270032701327023270332704327053270632707327083270932710327113271232713327143271532716327173271832719327203272132722327233272432725327263272732728327293273032731327323273332734327353273632737327383273932740327413274232743327443274532746327473274832749327503275132752327533275432755327563275732758327593276032761327623276332764327653276632767327683276932770327713277232773327743277532776327773277832779327803278132782327833278432785327863278732788327893279032791327923279332794327953279632797327983279932800328013280232803328043280532806328073280832809328103281132812328133281432815328163281732818328193282032821328223282332824328253282632827328283282932830328313283232833328343283532836328373283832839328403284132842328433284432845328463284732848328493285032851328523285332854328553285632857328583285932860328613286232863328643286532866328673286832869328703287132872328733287432875328763287732878328793288032881328823288332884328853288632887328883288932890328913289232893328943289532896328973289832899329003290132902329033290432905329063290732908329093291032911329123291332914329153291632917329183291932920329213292232923329243292532926329273292832929329303293132932329333293432935329363293732938329393294032941329423294332944329453294632947329483294932950329513295232953329543295532956329573295832959329603296132962329633296432965329663296732968329693297032971329723297332974329753297632977329783297932980329813298232983329843298532986329873298832989329903299132992329933299432995329963299732998329993300033001330023300333004330053300633007330083300933010330113301233013330143301533016330173301833019330203302133022330233302433025330263302733028330293303033031330323303333034330353303633037330383303933040330413304233043330443304533046330473304833049330503305133052330533305433055330563305733058330593306033061330623306333064330653306633067330683306933070330713307233073330743307533076330773307833079330803308133082330833308433085330863308733088330893309033091330923309333094330953309633097330983309933100331013310233103331043310533106331073310833109331103311133112331133311433115331163311733118331193312033121331223312333124331253312633127331283312933130331313313233133331343313533136331373313833139331403314133142331433314433145331463314733148331493315033151331523315333154331553315633157331583315933160331613316233163331643316533166331673316833169331703317133172331733317433175331763317733178331793318033181331823318333184331853318633187331883318933190331913319233193331943319533196331973319833199332003320133202332033320433205332063320733208332093321033211332123321333214332153321633217332183321933220332213322233223332243322533226332273322833229332303323133232332333323433235332363323733238332393324033241332423324333244332453324633247332483324933250332513325233253332543325533256332573325833259332603326133262332633326433265332663326733268332693327033271332723327333274332753327633277332783327933280332813328233283332843328533286332873328833289332903329133292332933329433295332963329733298332993330033301333023330333304333053330633307333083330933310333113331233313333143331533316333173331833319333203332133322333233332433325333263332733328333293333033331333323333333334333353333633337333383333933340333413334233343333443334533346333473334833349333503335133352333533335433355333563335733358333593336033361333623336333364333653336633367333683336933370333713337233373333743337533376333773337833379333803338133382333833338433385333863338733388333893339033391333923339333394333953339633397333983339933400334013340233403334043340533406334073340833409334103341133412334133341433415334163341733418334193342033421334223342333424334253342633427334283342933430334313343233433334343343533436334373343833439334403344133442334433344433445334463344733448334493345033451334523345333454334553345633457334583345933460334613346233463334643346533466334673346833469334703347133472334733347433475334763347733478334793348033481334823348333484334853348633487334883348933490334913349233493334943349533496334973349833499335003350133502335033350433505335063350733508335093351033511335123351333514335153351633517335183351933520335213352233523335243352533526335273352833529335303353133532335333353433535335363353733538335393354033541335423354333544335453354633547335483354933550335513355233553335543355533556335573355833559335603356133562335633356433565335663356733568335693357033571335723357333574335753357633577335783357933580335813358233583335843358533586335873358833589335903359133592335933359433595335963359733598335993360033601336023360333604336053360633607336083360933610336113361233613336143361533616336173361833619336203362133622336233362433625336263362733628336293363033631336323363333634336353363633637336383363933640336413364233643336443364533646336473364833649336503365133652336533365433655336563365733658336593366033661336623366333664336653366633667336683366933670336713367233673336743367533676336773367833679336803368133682336833368433685336863368733688336893369033691336923369333694336953369633697336983369933700337013370233703337043370533706337073370833709337103371133712337133371433715337163371733718337193372033721337223372333724337253372633727337283372933730337313373233733337343373533736337373373833739337403374133742337433374433745337463374733748337493375033751337523375333754337553375633757337583375933760337613376233763337643376533766337673376833769337703377133772337733377433775337763377733778337793378033781337823378333784337853378633787337883378933790337913379233793337943379533796337973379833799338003380133802338033380433805338063380733808338093381033811338123381333814338153381633817338183381933820338213382233823338243382533826338273382833829338303383133832338333383433835338363383733838338393384033841338423384333844338453384633847338483384933850338513385233853338543385533856338573385833859338603386133862338633386433865338663386733868338693387033871338723387333874338753387633877338783387933880338813388233883338843388533886338873388833889338903389133892338933389433895338963389733898338993390033901339023390333904339053390633907339083390933910339113391233913339143391533916339173391833919339203392133922339233392433925339263392733928339293393033931339323393333934339353393633937339383393933940339413394233943339443394533946339473394833949339503395133952339533395433955339563395733958339593396033961339623396333964339653396633967339683396933970339713397233973339743397533976339773397833979339803398133982339833398433985339863398733988339893399033991339923399333994339953399633997339983399934000340013400234003340043400534006340073400834009340103401134012340133401434015340163401734018340193402034021340223402334024340253402634027340283402934030340313403234033340343403534036340373403834039340403404134042340433404434045340463404734048340493405034051340523405334054340553405634057340583405934060340613406234063340643406534066340673406834069340703407134072340733407434075340763407734078340793408034081340823408334084340853408634087340883408934090340913409234093340943409534096340973409834099341003410134102341033410434105341063410734108341093411034111341123411334114341153411634117341183411934120341213412234123341243412534126341273412834129341303413134132341333413434135341363413734138341393414034141341423414334144341453414634147341483414934150341513415234153341543415534156341573415834159341603416134162341633416434165341663416734168341693417034171341723417334174341753417634177341783417934180341813418234183341843418534186341873418834189341903419134192341933419434195341963419734198341993420034201342023420334204342053420634207342083420934210342113421234213342143421534216342173421834219342203422134222342233422434225342263422734228342293423034231342323423334234342353423634237342383423934240342413424234243342443424534246342473424834249342503425134252342533425434255342563425734258342593426034261342623426334264342653426634267342683426934270342713427234273342743427534276342773427834279342803428134282342833428434285342863428734288342893429034291342923429334294342953429634297342983429934300343013430234303343043430534306343073430834309343103431134312343133431434315343163431734318343193432034321343223432334324343253432634327343283432934330343313433234333343343433534336343373433834339343403434134342343433434434345343463434734348343493435034351343523435334354343553435634357343583435934360343613436234363343643436534366343673436834369343703437134372343733437434375343763437734378343793438034381343823438334384343853438634387343883438934390343913439234393343943439534396343973439834399344003440134402344033440434405344063440734408344093441034411344123441334414344153441634417344183441934420344213442234423344243442534426344273442834429344303443134432344333443434435344363443734438344393444034441344423444334444344453444634447344483444934450344513445234453344543445534456344573445834459344603446134462344633446434465344663446734468344693447034471344723447334474344753447634477344783447934480344813448234483344843448534486344873448834489344903449134492344933449434495344963449734498344993450034501345023450334504345053450634507345083450934510345113451234513345143451534516345173451834519345203452134522345233452434525345263452734528345293453034531345323453334534345353453634537345383453934540345413454234543345443454534546345473454834549345503455134552345533455434555345563455734558345593456034561345623456334564345653456634567345683456934570345713457234573345743457534576345773457834579345803458134582345833458434585345863458734588345893459034591345923459334594345953459634597345983459934600346013460234603346043460534606346073460834609346103461134612346133461434615346163461734618346193462034621346223462334624346253462634627346283462934630346313463234633346343463534636346373463834639346403464134642346433464434645346463464734648346493465034651346523465334654346553465634657346583465934660346613466234663346643466534666346673466834669346703467134672346733467434675346763467734678346793468034681346823468334684346853468634687346883468934690346913469234693346943469534696346973469834699347003470134702347033470434705347063470734708347093471034711347123471334714347153471634717347183471934720347213472234723347243472534726347273472834729347303473134732347333473434735347363473734738347393474034741347423474334744347453474634747347483474934750347513475234753347543475534756347573475834759347603476134762347633476434765347663476734768347693477034771347723477334774347753477634777347783477934780347813478234783347843478534786347873478834789347903479134792347933479434795347963479734798347993480034801348023480334804348053480634807348083480934810348113481234813348143481534816348173481834819348203482134822348233482434825348263482734828348293483034831348323483334834348353483634837348383483934840348413484234843348443484534846348473484834849348503485134852348533485434855348563485734858348593486034861348623486334864348653486634867348683486934870348713487234873348743487534876348773487834879348803488134882348833488434885348863488734888348893489034891348923489334894348953489634897348983489934900349013490234903349043490534906349073490834909349103491134912349133491434915349163491734918349193492034921349223492334924349253492634927349283492934930349313493234933349343493534936349373493834939349403494134942349433494434945349463494734948349493495034951349523495334954349553495634957349583495934960349613496234963349643496534966349673496834969349703497134972349733497434975349763497734978349793498034981349823498334984349853498634987349883498934990349913499234993349943499534996349973499834999350003500135002350033500435005350063500735008350093501035011350123501335014350153501635017350183501935020350213502235023350243502535026350273502835029350303503135032350333503435035350363503735038350393504035041350423504335044350453504635047350483504935050350513505235053350543505535056350573505835059350603506135062350633506435065350663506735068350693507035071350723507335074350753507635077350783507935080350813508235083350843508535086350873508835089350903509135092350933509435095350963509735098350993510035101351023510335104351053510635107351083510935110351113511235113351143511535116351173511835119351203512135122351233512435125351263512735128351293513035131351323513335134351353513635137351383513935140351413514235143351443514535146351473514835149351503515135152351533515435155351563515735158351593516035161351623516335164351653516635167351683516935170351713517235173351743517535176351773517835179351803518135182351833518435185351863518735188351893519035191351923519335194351953519635197351983519935200352013520235203352043520535206352073520835209352103521135212352133521435215352163521735218352193522035221352223522335224352253522635227352283522935230352313523235233352343523535236352373523835239352403524135242352433524435245352463524735248352493525035251352523525335254352553525635257352583525935260352613526235263352643526535266352673526835269352703527135272352733527435275352763527735278352793528035281352823528335284352853528635287352883528935290352913529235293352943529535296352973529835299353003530135302353033530435305353063530735308353093531035311353123531335314353153531635317353183531935320353213532235323353243532535326353273532835329353303533135332353333533435335353363533735338353393534035341353423534335344353453534635347353483534935350353513535235353353543535535356353573535835359353603536135362353633536435365353663536735368353693537035371353723537335374353753537635377353783537935380353813538235383353843538535386353873538835389353903539135392353933539435395353963539735398353993540035401354023540335404354053540635407354083540935410354113541235413354143541535416354173541835419354203542135422354233542435425354263542735428354293543035431354323543335434354353543635437354383543935440354413544235443354443544535446354473544835449354503545135452354533545435455354563545735458354593546035461354623546335464354653546635467354683546935470354713547235473354743547535476354773547835479354803548135482354833548435485354863548735488354893549035491354923549335494354953549635497354983549935500355013550235503355043550535506355073550835509355103551135512355133551435515355163551735518355193552035521355223552335524355253552635527355283552935530355313553235533355343553535536355373553835539355403554135542355433554435545355463554735548355493555035551355523555335554355553555635557355583555935560355613556235563355643556535566355673556835569355703557135572355733557435575355763557735578355793558035581355823558335584355853558635587355883558935590355913559235593355943559535596355973559835599356003560135602356033560435605356063560735608356093561035611356123561335614356153561635617356183561935620356213562235623356243562535626356273562835629356303563135632356333563435635356363563735638356393564035641356423564335644356453564635647356483564935650356513565235653356543565535656356573565835659356603566135662356633566435665356663566735668356693567035671356723567335674356753567635677356783567935680356813568235683356843568535686356873568835689356903569135692356933569435695356963569735698356993570035701357023570335704357053570635707357083570935710357113571235713357143571535716357173571835719357203572135722357233572435725357263572735728357293573035731357323573335734357353573635737357383573935740357413574235743357443574535746357473574835749357503575135752357533575435755357563575735758357593576035761357623576335764357653576635767357683576935770357713577235773357743577535776357773577835779357803578135782357833578435785357863578735788357893579035791357923579335794357953579635797357983579935800358013580235803358043580535806358073580835809358103581135812358133581435815358163581735818358193582035821358223582335824358253582635827358283582935830358313583235833358343583535836358373583835839358403584135842358433584435845358463584735848358493585035851358523585335854358553585635857358583585935860358613586235863358643586535866358673586835869358703587135872358733587435875358763587735878358793588035881358823588335884358853588635887358883588935890358913589235893358943589535896358973589835899359003590135902359033590435905359063590735908359093591035911359123591335914359153591635917359183591935920359213592235923359243592535926359273592835929359303593135932359333593435935359363593735938359393594035941359423594335944359453594635947359483594935950359513595235953359543595535956359573595835959359603596135962359633596435965359663596735968359693597035971359723597335974359753597635977359783597935980359813598235983359843598535986359873598835989359903599135992359933599435995359963599735998359993600036001360023600336004360053600636007360083600936010360113601236013360143601536016360173601836019360203602136022360233602436025360263602736028360293603036031360323603336034360353603636037360383603936040360413604236043360443604536046360473604836049360503605136052360533605436055360563605736058360593606036061360623606336064360653606636067360683606936070360713607236073360743607536076360773607836079360803608136082360833608436085360863608736088360893609036091360923609336094360953609636097360983609936100361013610236103361043610536106361073610836109361103611136112361133611436115361163611736118361193612036121361223612336124361253612636127361283612936130361313613236133361343613536136361373613836139361403614136142361433614436145361463614736148361493615036151361523615336154361553615636157361583615936160361613616236163361643616536166361673616836169361703617136172361733617436175361763617736178361793618036181361823618336184361853618636187361883618936190361913619236193361943619536196361973619836199362003620136202362033620436205362063620736208362093621036211362123621336214362153621636217362183621936220362213622236223362243622536226362273622836229362303623136232362333623436235362363623736238362393624036241362423624336244362453624636247362483624936250362513625236253362543625536256362573625836259362603626136262362633626436265362663626736268362693627036271362723627336274362753627636277362783627936280362813628236283362843628536286362873628836289362903629136292362933629436295362963629736298362993630036301363023630336304363053630636307363083630936310363113631236313363143631536316363173631836319363203632136322363233632436325363263632736328363293633036331363323633336334363353633636337363383633936340363413634236343363443634536346363473634836349363503635136352363533635436355363563635736358363593636036361363623636336364363653636636367363683636936370363713637236373363743637536376363773637836379363803638136382363833638436385363863638736388363893639036391363923639336394363953639636397363983639936400364013640236403364043640536406364073640836409364103641136412364133641436415364163641736418364193642036421364223642336424364253642636427364283642936430364313643236433364343643536436364373643836439364403644136442364433644436445364463644736448364493645036451364523645336454364553645636457364583645936460364613646236463364643646536466364673646836469364703647136472364733647436475364763647736478364793648036481364823648336484364853648636487364883648936490364913649236493364943649536496364973649836499365003650136502365033650436505365063650736508365093651036511365123651336514365153651636517365183651936520365213652236523365243652536526365273652836529365303653136532365333653436535365363653736538365393654036541365423654336544365453654636547365483654936550365513655236553365543655536556365573655836559365603656136562365633656436565365663656736568365693657036571365723657336574365753657636577365783657936580365813658236583365843658536586365873658836589365903659136592365933659436595365963659736598365993660036601366023660336604366053660636607366083660936610366113661236613366143661536616366173661836619366203662136622366233662436625366263662736628366293663036631366323663336634366353663636637366383663936640366413664236643366443664536646366473664836649366503665136652366533665436655366563665736658366593666036661366623666336664366653666636667366683666936670366713667236673366743667536676366773667836679366803668136682366833668436685366863668736688366893669036691366923669336694366953669636697366983669936700367013670236703367043670536706367073670836709367103671136712367133671436715367163671736718367193672036721367223672336724367253672636727367283672936730367313673236733367343673536736367373673836739367403674136742367433674436745367463674736748367493675036751367523675336754367553675636757367583675936760367613676236763367643676536766367673676836769367703677136772367733677436775367763677736778367793678036781367823678336784367853678636787367883678936790367913679236793367943679536796367973679836799368003680136802368033680436805368063680736808368093681036811368123681336814368153681636817368183681936820368213682236823368243682536826368273682836829368303683136832368333683436835368363683736838368393684036841368423684336844368453684636847368483684936850368513685236853368543685536856368573685836859368603686136862368633686436865368663686736868368693687036871368723687336874368753687636877368783687936880368813688236883368843688536886368873688836889368903689136892368933689436895368963689736898368993690036901369023690336904369053690636907369083690936910369113691236913369143691536916369173691836919369203692136922369233692436925369263692736928369293693036931369323693336934369353693636937369383693936940369413694236943369443694536946369473694836949369503695136952369533695436955369563695736958369593696036961369623696336964369653696636967369683696936970369713697236973369743697536976369773697836979369803698136982369833698436985369863698736988369893699036991369923699336994369953699636997369983699937000370013700237003370043700537006370073700837009370103701137012370133701437015370163701737018370193702037021370223702337024370253702637027370283702937030370313703237033370343703537036370373703837039370403704137042370433704437045370463704737048370493705037051370523705337054370553705637057370583705937060370613706237063370643706537066370673706837069370703707137072370733707437075370763707737078370793708037081370823708337084370853708637087370883708937090370913709237093370943709537096370973709837099371003710137102371033710437105371063710737108371093711037111371123711337114371153711637117371183711937120371213712237123371243712537126371273712837129371303713137132371333713437135371363713737138371393714037141371423714337144371453714637147371483714937150371513715237153371543715537156371573715837159371603716137162371633716437165371663716737168371693717037171371723717337174371753717637177371783717937180371813718237183371843718537186371873718837189371903719137192371933719437195371963719737198371993720037201372023720337204372053720637207372083720937210372113721237213372143721537216372173721837219372203722137222372233722437225372263722737228372293723037231372323723337234372353723637237372383723937240372413724237243372443724537246372473724837249372503725137252372533725437255372563725737258372593726037261372623726337264372653726637267372683726937270372713727237273372743727537276372773727837279372803728137282372833728437285372863728737288372893729037291372923729337294372953729637297372983729937300373013730237303373043730537306373073730837309373103731137312373133731437315373163731737318373193732037321373223732337324373253732637327373283732937330373313733237333373343733537336373373733837339373403734137342373433734437345373463734737348373493735037351373523735337354373553735637357373583735937360373613736237363373643736537366373673736837369373703737137372373733737437375373763737737378373793738037381373823738337384373853738637387373883738937390373913739237393373943739537396373973739837399374003740137402374033740437405374063740737408374093741037411374123741337414374153741637417374183741937420374213742237423374243742537426374273742837429374303743137432374333743437435374363743737438374393744037441374423744337444374453744637447374483744937450374513745237453374543745537456374573745837459374603746137462374633746437465374663746737468374693747037471374723747337474374753747637477374783747937480374813748237483374843748537486374873748837489374903749137492374933749437495374963749737498374993750037501375023750337504375053750637507375083750937510375113751237513375143751537516375173751837519375203752137522375233752437525375263752737528375293753037531375323753337534375353753637537375383753937540375413754237543375443754537546375473754837549375503755137552375533755437555375563755737558375593756037561375623756337564375653756637567375683756937570375713757237573375743757537576375773757837579375803758137582375833758437585375863758737588375893759037591375923759337594375953759637597375983759937600376013760237603376043760537606376073760837609376103761137612376133761437615376163761737618376193762037621376223762337624376253762637627376283762937630376313763237633376343763537636376373763837639376403764137642376433764437645376463764737648376493765037651376523765337654376553765637657376583765937660376613766237663376643766537666376673766837669376703767137672376733767437675376763767737678376793768037681376823768337684376853768637687376883768937690376913769237693376943769537696376973769837699377003770137702377033770437705377063770737708377093771037711377123771337714377153771637717377183771937720377213772237723377243772537726377273772837729377303773137732377333773437735377363773737738377393774037741377423774337744377453774637747377483774937750377513775237753377543775537756377573775837759377603776137762377633776437765377663776737768377693777037771377723777337774377753777637777377783777937780377813778237783377843778537786377873778837789377903779137792377933779437795377963779737798377993780037801378023780337804378053780637807378083780937810378113781237813378143781537816378173781837819378203782137822378233782437825378263782737828378293783037831378323783337834378353783637837378383783937840378413784237843378443784537846378473784837849378503785137852378533785437855378563785737858378593786037861378623786337864378653786637867378683786937870378713787237873378743787537876378773787837879378803788137882378833788437885378863788737888378893789037891378923789337894378953789637897378983789937900379013790237903379043790537906379073790837909379103791137912379133791437915379163791737918379193792037921379223792337924379253792637927379283792937930379313793237933379343793537936379373793837939379403794137942379433794437945379463794737948379493795037951379523795337954379553795637957379583795937960379613796237963379643796537966379673796837969379703797137972379733797437975379763797737978379793798037981379823798337984379853798637987379883798937990379913799237993379943799537996379973799837999380003800138002380033800438005380063800738008380093801038011380123801338014380153801638017380183801938020380213802238023380243802538026380273802838029380303803138032380333803438035380363803738038380393804038041380423804338044380453804638047380483804938050380513805238053380543805538056380573805838059380603806138062380633806438065380663806738068380693807038071380723807338074380753807638077380783807938080380813808238083380843808538086380873808838089380903809138092380933809438095380963809738098380993810038101381023810338104381053810638107381083810938110381113811238113381143811538116381173811838119381203812138122381233812438125381263812738128381293813038131381323813338134381353813638137381383813938140381413814238143381443814538146381473814838149381503815138152381533815438155381563815738158381593816038161381623816338164381653816638167381683816938170381713817238173381743817538176381773817838179381803818138182381833818438185381863818738188381893819038191381923819338194381953819638197381983819938200382013820238203382043820538206382073820838209382103821138212382133821438215382163821738218382193822038221382223822338224382253822638227382283822938230382313823238233382343823538236382373823838239382403824138242382433824438245382463824738248382493825038251382523825338254382553825638257382583825938260382613826238263382643826538266382673826838269382703827138272382733827438275382763827738278382793828038281382823828338284382853828638287382883828938290382913829238293382943829538296382973829838299383003830138302383033830438305383063830738308383093831038311383123831338314383153831638317383183831938320383213832238323383243832538326383273832838329383303833138332383333833438335383363833738338383393834038341383423834338344383453834638347383483834938350383513835238353383543835538356383573835838359383603836138362383633836438365383663836738368383693837038371383723837338374383753837638377383783837938380383813838238383383843838538386383873838838389383903839138392383933839438395383963839738398383993840038401384023840338404384053840638407384083840938410384113841238413384143841538416384173841838419384203842138422384233842438425384263842738428384293843038431384323843338434384353843638437384383843938440384413844238443384443844538446384473844838449384503845138452384533845438455384563845738458384593846038461384623846338464384653846638467384683846938470384713847238473384743847538476384773847838479384803848138482384833848438485384863848738488384893849038491384923849338494384953849638497384983849938500385013850238503385043850538506385073850838509385103851138512385133851438515385163851738518385193852038521385223852338524385253852638527385283852938530385313853238533385343853538536385373853838539385403854138542385433854438545385463854738548385493855038551385523855338554385553855638557385583855938560385613856238563385643856538566385673856838569385703857138572385733857438575385763857738578385793858038581385823858338584385853858638587385883858938590385913859238593385943859538596385973859838599386003860138602386033860438605386063860738608386093861038611386123861338614386153861638617386183861938620386213862238623386243862538626386273862838629386303863138632386333863438635386363863738638386393864038641386423864338644386453864638647386483864938650386513865238653386543865538656386573865838659386603866138662386633866438665386663866738668386693867038671386723867338674386753867638677386783867938680386813868238683386843868538686386873868838689386903869138692386933869438695386963869738698386993870038701387023870338704387053870638707387083870938710387113871238713387143871538716387173871838719387203872138722387233872438725387263872738728387293873038731387323873338734387353873638737387383873938740387413874238743387443874538746387473874838749387503875138752387533875438755387563875738758387593876038761387623876338764387653876638767387683876938770387713877238773387743877538776387773877838779387803878138782387833878438785387863878738788387893879038791387923879338794387953879638797387983879938800388013880238803388043880538806388073880838809388103881138812388133881438815388163881738818388193882038821388223882338824388253882638827388283882938830388313883238833388343883538836388373883838839388403884138842388433884438845388463884738848388493885038851388523885338854388553885638857388583885938860388613886238863388643886538866388673886838869388703887138872388733887438875388763887738878388793888038881388823888338884388853888638887388883888938890388913889238893388943889538896388973889838899389003890138902389033890438905389063890738908389093891038911389123891338914389153891638917389183891938920389213892238923389243892538926389273892838929389303893138932389333893438935389363893738938389393894038941389423894338944389453894638947389483894938950389513895238953389543895538956389573895838959389603896138962389633896438965389663896738968389693897038971389723897338974389753897638977389783897938980389813898238983389843898538986389873898838989389903899138992389933899438995389963899738998389993900039001390023900339004390053900639007390083900939010390113901239013390143901539016390173901839019390203902139022390233902439025390263902739028390293903039031390323903339034390353903639037390383903939040390413904239043390443904539046390473904839049390503905139052390533905439055390563905739058390593906039061390623906339064390653906639067390683906939070390713907239073390743907539076390773907839079390803908139082390833908439085390863908739088390893909039091390923909339094390953909639097390983909939100391013910239103391043910539106391073910839109391103911139112391133911439115391163911739118391193912039121391223912339124391253912639127391283912939130391313913239133391343913539136391373913839139391403914139142391433914439145391463914739148391493915039151391523915339154391553915639157391583915939160391613916239163391643916539166391673916839169391703917139172391733917439175391763917739178391793918039181391823918339184391853918639187391883918939190391913919239193391943919539196391973919839199392003920139202392033920439205392063920739208392093921039211392123921339214392153921639217392183921939220392213922239223392243922539226392273922839229392303923139232392333923439235392363923739238392393924039241392423924339244392453924639247392483924939250392513925239253392543925539256392573925839259392603926139262392633926439265392663926739268392693927039271392723927339274392753927639277392783927939280392813928239283392843928539286392873928839289392903929139292392933929439295392963929739298392993930039301393023930339304393053930639307393083930939310393113931239313393143931539316393173931839319393203932139322393233932439325393263932739328393293933039331393323933339334393353933639337393383933939340393413934239343393443934539346393473934839349393503935139352393533935439355393563935739358393593936039361393623936339364393653936639367393683936939370393713937239373393743937539376393773937839379393803938139382393833938439385393863938739388393893939039391393923939339394393953939639397393983939939400394013940239403394043940539406394073940839409394103941139412394133941439415394163941739418394193942039421394223942339424394253942639427394283942939430394313943239433394343943539436394373943839439394403944139442394433944439445394463944739448394493945039451394523945339454394553945639457394583945939460394613946239463394643946539466394673946839469394703947139472394733947439475394763947739478394793948039481394823948339484394853948639487394883948939490394913949239493394943949539496394973949839499395003950139502395033950439505395063950739508395093951039511395123951339514395153951639517395183951939520395213952239523395243952539526395273952839529395303953139532395333953439535395363953739538395393954039541395423954339544395453954639547395483954939550395513955239553395543955539556395573955839559395603956139562395633956439565395663956739568395693957039571395723957339574395753957639577395783957939580395813958239583395843958539586395873958839589395903959139592395933959439595395963959739598395993960039601396023960339604396053960639607396083960939610396113961239613396143961539616396173961839619396203962139622396233962439625396263962739628396293963039631396323963339634396353963639637396383963939640396413964239643396443964539646396473964839649396503965139652396533965439655396563965739658396593966039661396623966339664396653966639667396683966939670396713967239673396743967539676396773967839679396803968139682396833968439685396863968739688396893969039691396923969339694396953969639697396983969939700397013970239703397043970539706397073970839709397103971139712397133971439715397163971739718397193972039721397223972339724397253972639727397283972939730397313973239733397343973539736397373973839739397403974139742397433974439745397463974739748397493975039751397523975339754397553975639757397583975939760397613976239763397643976539766397673976839769397703977139772397733977439775397763977739778397793978039781397823978339784397853978639787397883978939790397913979239793397943979539796397973979839799398003980139802398033980439805398063980739808398093981039811398123981339814398153981639817398183981939820398213982239823398243982539826398273982839829398303983139832398333983439835398363983739838398393984039841398423984339844398453984639847398483984939850398513985239853398543985539856398573985839859398603986139862398633986439865398663986739868398693987039871398723987339874398753987639877398783987939880398813988239883398843988539886398873988839889398903989139892398933989439895398963989739898398993990039901399023990339904399053990639907399083990939910399113991239913399143991539916399173991839919399203992139922399233992439925399263992739928399293993039931399323993339934399353993639937399383993939940399413994239943399443994539946399473994839949399503995139952399533995439955399563995739958399593996039961399623996339964399653996639967399683996939970399713997239973399743997539976399773997839979399803998139982399833998439985399863998739988399893999039991399923999339994399953999639997399983999940000400014000240003400044000540006400074000840009400104001140012400134001440015400164001740018400194002040021400224002340024400254002640027400284002940030400314003240033400344003540036400374003840039400404004140042400434004440045400464004740048400494005040051400524005340054400554005640057400584005940060400614006240063400644006540066400674006840069400704007140072400734007440075400764007740078400794008040081400824008340084400854008640087400884008940090400914009240093400944009540096400974009840099401004010140102401034010440105401064010740108401094011040111401124011340114401154011640117401184011940120401214012240123401244012540126401274012840129401304013140132401334013440135401364013740138401394014040141401424014340144401454014640147401484014940150401514015240153401544015540156401574015840159401604016140162401634016440165401664016740168401694017040171401724017340174401754017640177401784017940180401814018240183401844018540186401874018840189401904019140192401934019440195401964019740198401994020040201402024020340204402054020640207402084020940210402114021240213402144021540216402174021840219402204022140222402234022440225402264022740228402294023040231402324023340234402354023640237402384023940240402414024240243402444024540246402474024840249402504025140252402534025440255402564025740258402594026040261402624026340264402654026640267402684026940270402714027240273402744027540276402774027840279402804028140282402834028440285402864028740288402894029040291402924029340294402954029640297402984029940300403014030240303403044030540306403074030840309403104031140312403134031440315403164031740318403194032040321403224032340324403254032640327403284032940330403314033240333403344033540336403374033840339403404034140342403434034440345403464034740348403494035040351403524035340354403554035640357403584035940360403614036240363403644036540366403674036840369403704037140372403734037440375403764037740378403794038040381403824038340384403854038640387403884038940390403914039240393403944039540396403974039840399404004040140402404034040440405404064040740408404094041040411404124041340414404154041640417404184041940420404214042240423404244042540426404274042840429404304043140432404334043440435404364043740438404394044040441404424044340444404454044640447404484044940450404514045240453404544045540456404574045840459404604046140462404634046440465404664046740468404694047040471404724047340474404754047640477404784047940480404814048240483404844048540486404874048840489404904049140492404934049440495404964049740498404994050040501405024050340504405054050640507405084050940510405114051240513405144051540516405174051840519405204052140522405234052440525405264052740528405294053040531405324053340534405354053640537405384053940540405414054240543405444054540546405474054840549405504055140552405534055440555405564055740558405594056040561405624056340564405654056640567405684056940570405714057240573405744057540576405774057840579405804058140582405834058440585405864058740588405894059040591405924059340594405954059640597405984059940600406014060240603406044060540606406074060840609406104061140612406134061440615406164061740618406194062040621406224062340624406254062640627406284062940630406314063240633406344063540636406374063840639406404064140642406434064440645406464064740648406494065040651406524065340654406554065640657406584065940660406614066240663406644066540666406674066840669406704067140672406734067440675406764067740678406794068040681406824068340684406854068640687406884068940690406914069240693406944069540696406974069840699407004070140702407034070440705407064070740708407094071040711407124071340714407154071640717407184071940720407214072240723407244072540726407274072840729407304073140732407334073440735407364073740738407394074040741407424074340744407454074640747407484074940750407514075240753407544075540756407574075840759407604076140762407634076440765407664076740768407694077040771407724077340774407754077640777407784077940780407814078240783407844078540786407874078840789407904079140792407934079440795407964079740798407994080040801408024080340804408054080640807408084080940810408114081240813408144081540816408174081840819408204082140822408234082440825408264082740828408294083040831408324083340834408354083640837408384083940840408414084240843408444084540846408474084840849408504085140852408534085440855408564085740858408594086040861408624086340864408654086640867408684086940870408714087240873408744087540876408774087840879408804088140882408834088440885408864088740888408894089040891408924089340894408954089640897408984089940900409014090240903409044090540906409074090840909409104091140912409134091440915409164091740918409194092040921409224092340924409254092640927409284092940930409314093240933409344093540936409374093840939409404094140942409434094440945409464094740948409494095040951409524095340954409554095640957409584095940960409614096240963409644096540966409674096840969409704097140972409734097440975409764097740978409794098040981409824098340984409854098640987409884098940990409914099240993409944099540996409974099840999410004100141002410034100441005410064100741008410094101041011410124101341014410154101641017410184101941020410214102241023410244102541026410274102841029410304103141032410334103441035410364103741038410394104041041410424104341044410454104641047410484104941050410514105241053410544105541056410574105841059410604106141062410634106441065410664106741068410694107041071410724107341074410754107641077410784107941080410814108241083410844108541086410874108841089410904109141092410934109441095410964109741098410994110041101411024110341104411054110641107411084110941110411114111241113411144111541116411174111841119411204112141122411234112441125411264112741128411294113041131411324113341134411354113641137411384113941140411414114241143411444114541146411474114841149411504115141152411534115441155411564115741158411594116041161411624116341164411654116641167411684116941170411714117241173411744117541176411774117841179411804118141182411834118441185411864118741188411894119041191411924119341194411954119641197411984119941200412014120241203412044120541206412074120841209412104121141212412134121441215412164121741218412194122041221412224122341224412254122641227412284122941230412314123241233412344123541236412374123841239412404124141242412434124441245412464124741248412494125041251412524125341254412554125641257412584125941260412614126241263412644126541266412674126841269412704127141272412734127441275412764127741278412794128041281412824128341284412854128641287412884128941290412914129241293412944129541296412974129841299413004130141302413034130441305413064130741308413094131041311413124131341314413154131641317413184131941320413214132241323413244132541326413274132841329413304133141332413334133441335413364133741338413394134041341413424134341344413454134641347413484134941350413514135241353413544135541356413574135841359413604136141362413634136441365413664136741368413694137041371413724137341374413754137641377413784137941380413814138241383413844138541386413874138841389413904139141392413934139441395413964139741398413994140041401414024140341404414054140641407414084140941410414114141241413414144141541416414174141841419414204142141422414234142441425414264142741428414294143041431414324143341434414354143641437414384143941440414414144241443414444144541446414474144841449414504145141452414534145441455414564145741458414594146041461414624146341464414654146641467414684146941470414714147241473414744147541476414774147841479414804148141482414834148441485414864148741488414894149041491414924149341494414954149641497414984149941500415014150241503415044150541506415074150841509415104151141512415134151441515415164151741518415194152041521415224152341524415254152641527415284152941530415314153241533415344153541536415374153841539415404154141542415434154441545415464154741548415494155041551415524155341554415554155641557415584155941560415614156241563415644156541566415674156841569415704157141572415734157441575415764157741578415794158041581415824158341584415854158641587415884158941590415914159241593415944159541596415974159841599416004160141602416034160441605416064160741608416094161041611416124161341614416154161641617416184161941620416214162241623416244162541626416274162841629416304163141632416334163441635416364163741638416394164041641416424164341644416454164641647416484164941650416514165241653416544165541656416574165841659416604166141662416634166441665416664166741668416694167041671416724167341674416754167641677416784167941680416814168241683416844168541686416874168841689416904169141692416934169441695416964169741698416994170041701417024170341704417054170641707417084170941710417114171241713417144171541716417174171841719417204172141722417234172441725417264172741728417294173041731417324173341734417354173641737417384173941740417414174241743417444174541746417474174841749417504175141752417534175441755417564175741758417594176041761417624176341764417654176641767417684176941770417714177241773417744177541776417774177841779417804178141782417834178441785417864178741788417894179041791417924179341794417954179641797417984179941800418014180241803418044180541806418074180841809418104181141812418134181441815418164181741818418194182041821418224182341824418254182641827418284182941830418314183241833418344183541836418374183841839418404184141842418434184441845418464184741848418494185041851418524185341854418554185641857418584185941860418614186241863418644186541866418674186841869418704187141872418734187441875418764187741878418794188041881418824188341884418854188641887418884188941890418914189241893418944189541896418974189841899419004190141902419034190441905419064190741908419094191041911419124191341914419154191641917419184191941920419214192241923419244192541926419274192841929419304193141932419334193441935419364193741938419394194041941419424194341944419454194641947419484194941950419514195241953419544195541956419574195841959419604196141962419634196441965419664196741968419694197041971419724197341974419754197641977419784197941980419814198241983419844198541986419874198841989419904199141992419934199441995419964199741998419994200042001420024200342004420054200642007420084200942010420114201242013420144201542016420174201842019420204202142022420234202442025420264202742028420294203042031420324203342034420354203642037420384203942040420414204242043420444204542046420474204842049420504205142052420534205442055420564205742058420594206042061420624206342064420654206642067420684206942070420714207242073420744207542076420774207842079420804208142082420834208442085420864208742088420894209042091420924209342094420954209642097420984209942100421014210242103421044210542106421074210842109421104211142112421134211442115421164211742118421194212042121421224212342124421254212642127421284212942130421314213242133421344213542136421374213842139421404214142142421434214442145421464214742148421494215042151421524215342154421554215642157421584215942160421614216242163421644216542166421674216842169421704217142172421734217442175421764217742178421794218042181421824218342184421854218642187421884218942190421914219242193421944219542196421974219842199422004220142202422034220442205422064220742208422094221042211422124221342214422154221642217422184221942220422214222242223422244222542226422274222842229422304223142232422334223442235422364223742238422394224042241422424224342244422454224642247422484224942250422514225242253422544225542256422574225842259422604226142262422634226442265422664226742268422694227042271422724227342274422754227642277422784227942280422814228242283422844228542286422874228842289422904229142292422934229442295422964229742298422994230042301423024230342304423054230642307423084230942310423114231242313423144231542316423174231842319423204232142322423234232442325423264232742328423294233042331423324233342334423354233642337423384233942340423414234242343423444234542346423474234842349423504235142352423534235442355423564235742358423594236042361423624236342364423654236642367423684236942370423714237242373423744237542376423774237842379423804238142382423834238442385423864238742388423894239042391423924239342394423954239642397423984239942400424014240242403424044240542406424074240842409424104241142412424134241442415424164241742418424194242042421424224242342424424254242642427424284242942430424314243242433424344243542436424374243842439424404244142442424434244442445424464244742448424494245042451424524245342454424554245642457424584245942460424614246242463424644246542466424674246842469424704247142472424734247442475424764247742478424794248042481424824248342484424854248642487424884248942490424914249242493424944249542496424974249842499425004250142502425034250442505425064250742508425094251042511425124251342514425154251642517425184251942520425214252242523425244252542526425274252842529425304253142532425334253442535425364253742538425394254042541425424254342544425454254642547425484254942550425514255242553425544255542556425574255842559425604256142562425634256442565425664256742568425694257042571425724257342574425754257642577425784257942580425814258242583425844258542586425874258842589425904259142592425934259442595425964259742598425994260042601426024260342604426054260642607426084260942610426114261242613426144261542616426174261842619426204262142622426234262442625426264262742628426294263042631426324263342634426354263642637426384263942640426414264242643426444264542646426474264842649426504265142652426534265442655426564265742658426594266042661426624266342664426654266642667426684266942670426714267242673426744267542676426774267842679426804268142682426834268442685426864268742688426894269042691426924269342694426954269642697426984269942700427014270242703427044270542706427074270842709427104271142712427134271442715427164271742718427194272042721427224272342724427254272642727427284272942730427314273242733427344273542736427374273842739427404274142742427434274442745427464274742748427494275042751427524275342754427554275642757427584275942760427614276242763427644276542766427674276842769427704277142772427734277442775427764277742778427794278042781427824278342784427854278642787427884278942790427914279242793427944279542796427974279842799428004280142802428034280442805428064280742808428094281042811428124281342814428154281642817428184281942820428214282242823428244282542826428274282842829428304283142832428334283442835428364283742838428394284042841428424284342844428454284642847428484284942850428514285242853428544285542856428574285842859428604286142862428634286442865428664286742868428694287042871428724287342874428754287642877428784287942880428814288242883428844288542886428874288842889428904289142892428934289442895428964289742898428994290042901429024290342904429054290642907429084290942910429114291242913429144291542916429174291842919429204292142922429234292442925429264292742928429294293042931429324293342934429354293642937429384293942940429414294242943429444294542946429474294842949429504295142952429534295442955429564295742958429594296042961429624296342964429654296642967429684296942970429714297242973429744297542976429774297842979429804298142982429834298442985429864298742988429894299042991429924299342994429954299642997429984299943000430014300243003430044300543006430074300843009430104301143012430134301443015430164301743018430194302043021430224302343024430254302643027430284302943030430314303243033430344303543036430374303843039430404304143042430434304443045430464304743048430494305043051430524305343054430554305643057430584305943060430614306243063430644306543066430674306843069430704307143072430734307443075430764307743078430794308043081430824308343084430854308643087430884308943090430914309243093430944309543096430974309843099431004310143102431034310443105431064310743108431094311043111431124311343114431154311643117431184311943120431214312243123431244312543126431274312843129431304313143132431334313443135431364313743138431394314043141431424314343144431454314643147431484314943150431514315243153431544315543156431574315843159431604316143162431634316443165431664316743168431694317043171431724317343174431754317643177431784317943180431814318243183431844318543186431874318843189431904319143192431934319443195431964319743198431994320043201432024320343204432054320643207432084320943210432114321243213432144321543216432174321843219432204322143222432234322443225432264322743228432294323043231432324323343234432354323643237432384323943240432414324243243432444324543246432474324843249432504325143252432534325443255432564325743258432594326043261432624326343264432654326643267432684326943270432714327243273432744327543276432774327843279432804328143282432834328443285432864328743288432894329043291432924329343294432954329643297432984329943300433014330243303433044330543306433074330843309433104331143312433134331443315433164331743318433194332043321433224332343324433254332643327433284332943330433314333243333433344333543336433374333843339433404334143342433434334443345433464334743348433494335043351433524335343354433554335643357433584335943360433614336243363433644336543366433674336843369433704337143372433734337443375433764337743378433794338043381433824338343384433854338643387433884338943390433914339243393433944339543396433974339843399434004340143402434034340443405434064340743408434094341043411434124341343414434154341643417434184341943420434214342243423434244342543426434274342843429434304343143432434334343443435434364343743438434394344043441434424344343444434454344643447434484344943450434514345243453434544345543456434574345843459434604346143462434634346443465434664346743468434694347043471434724347343474434754347643477434784347943480434814348243483434844348543486434874348843489434904349143492434934349443495434964349743498434994350043501435024350343504435054350643507435084350943510435114351243513435144351543516435174351843519435204352143522435234352443525435264352743528435294353043531435324353343534435354353643537435384353943540435414354243543435444354543546435474354843549435504355143552435534355443555435564355743558435594356043561435624356343564435654356643567435684356943570435714357243573435744357543576435774357843579435804358143582435834358443585435864358743588435894359043591435924359343594435954359643597435984359943600436014360243603436044360543606436074360843609436104361143612436134361443615436164361743618436194362043621436224362343624436254362643627436284362943630436314363243633436344363543636436374363843639436404364143642436434364443645436464364743648436494365043651436524365343654436554365643657436584365943660436614366243663436644366543666436674366843669436704367143672436734367443675436764367743678436794368043681436824368343684436854368643687436884368943690436914369243693436944369543696436974369843699437004370143702437034370443705437064370743708437094371043711437124371343714437154371643717437184371943720437214372243723437244372543726437274372843729437304373143732437334373443735437364373743738437394374043741437424374343744437454374643747437484374943750437514375243753437544375543756437574375843759437604376143762437634376443765437664376743768437694377043771437724377343774437754377643777437784377943780437814378243783437844378543786437874378843789437904379143792437934379443795437964379743798437994380043801438024380343804438054380643807438084380943810438114381243813438144381543816438174381843819438204382143822438234382443825438264382743828438294383043831438324383343834438354383643837438384383943840438414384243843438444384543846438474384843849438504385143852438534385443855438564385743858438594386043861438624386343864438654386643867438684386943870438714387243873438744387543876438774387843879438804388143882438834388443885438864388743888438894389043891438924389343894438954389643897438984389943900439014390243903439044390543906439074390843909439104391143912439134391443915439164391743918439194392043921439224392343924439254392643927439284392943930439314393243933439344393543936439374393843939439404394143942439434394443945439464394743948439494395043951439524395343954439554395643957439584395943960439614396243963439644396543966439674396843969439704397143972439734397443975439764397743978439794398043981439824398343984439854398643987439884398943990439914399243993439944399543996439974399843999440004400144002440034400444005440064400744008440094401044011440124401344014440154401644017440184401944020440214402244023440244402544026440274402844029440304403144032440334403444035440364403744038440394404044041440424404344044440454404644047440484404944050440514405244053440544405544056440574405844059440604406144062440634406444065440664406744068440694407044071440724407344074440754407644077440784407944080440814408244083440844408544086440874408844089440904409144092440934409444095440964409744098440994410044101441024410344104441054410644107441084410944110441114411244113441144411544116441174411844119441204412144122441234412444125441264412744128441294413044131441324413344134441354413644137441384413944140441414414244143441444414544146441474414844149441504415144152441534415444155441564415744158441594416044161441624416344164441654416644167441684416944170441714417244173441744417544176441774417844179441804418144182441834418444185441864418744188441894419044191441924419344194441954419644197441984419944200442014420244203442044420544206442074420844209442104421144212442134421444215442164421744218442194422044221442224422344224442254422644227442284422944230442314423244233442344423544236442374423844239442404424144242442434424444245442464424744248442494425044251442524425344254442554425644257442584425944260442614426244263442644426544266442674426844269442704427144272442734427444275442764427744278442794428044281442824428344284442854428644287442884428944290442914429244293442944429544296442974429844299443004430144302443034430444305443064430744308443094431044311443124431344314443154431644317443184431944320443214432244323443244432544326443274432844329443304433144332443334433444335443364433744338443394434044341443424434344344443454434644347443484434944350443514435244353443544435544356443574435844359443604436144362443634436444365443664436744368443694437044371443724437344374443754437644377443784437944380443814438244383443844438544386443874438844389443904439144392443934439444395443964439744398443994440044401444024440344404444054440644407444084440944410444114441244413444144441544416444174441844419444204442144422444234442444425444264442744428444294443044431444324443344434444354443644437444384443944440444414444244443444444444544446444474444844449444504445144452444534445444455444564445744458444594446044461444624446344464444654446644467444684446944470444714447244473444744447544476444774447844479444804448144482444834448444485444864448744488444894449044491444924449344494444954449644497444984449944500445014450244503445044450544506445074450844509445104451144512445134451444515445164451744518445194452044521445224452344524445254452644527445284452944530445314453244533445344453544536445374453844539445404454144542445434454444545445464454744548445494455044551445524455344554445554455644557445584455944560445614456244563445644456544566445674456844569445704457144572445734457444575445764457744578445794458044581445824458344584445854458644587445884458944590445914459244593445944459544596445974459844599446004460144602446034460444605446064460744608446094461044611446124461344614446154461644617446184461944620446214462244623446244462544626446274462844629446304463144632446334463444635446364463744638446394464044641446424464344644446454464644647446484464944650446514465244653446544465544656446574465844659446604466144662446634466444665446664466744668446694467044671446724467344674446754467644677446784467944680446814468244683446844468544686446874468844689446904469144692446934469444695446964469744698446994470044701447024470344704447054470644707447084470944710447114471244713447144471544716447174471844719447204472144722447234472444725447264472744728447294473044731447324473344734447354473644737447384473944740447414474244743447444474544746447474474844749447504475144752447534475444755447564475744758447594476044761447624476344764447654476644767447684476944770447714477244773447744477544776447774477844779447804478144782447834478444785447864478744788447894479044791447924479344794447954479644797447984479944800448014480244803448044480544806448074480844809448104481144812448134481444815448164481744818448194482044821448224482344824448254482644827448284482944830448314483244833448344483544836448374483844839448404484144842448434484444845448464484744848448494485044851448524485344854448554485644857448584485944860448614486244863448644486544866448674486844869448704487144872448734487444875448764487744878448794488044881448824488344884448854488644887448884488944890448914489244893448944489544896448974489844899449004490144902449034490444905449064490744908449094491044911449124491344914449154491644917449184491944920449214492244923449244492544926449274492844929449304493144932449334493444935449364493744938449394494044941449424494344944449454494644947449484494944950449514495244953449544495544956449574495844959449604496144962449634496444965449664496744968449694497044971449724497344974449754497644977449784497944980449814498244983449844498544986449874498844989449904499144992449934499444995449964499744998449994500045001450024500345004450054500645007450084500945010450114501245013450144501545016450174501845019450204502145022450234502445025450264502745028450294503045031450324503345034450354503645037450384503945040450414504245043450444504545046450474504845049450504505145052450534505445055450564505745058450594506045061450624506345064450654506645067450684506945070450714507245073450744507545076450774507845079450804508145082450834508445085450864508745088450894509045091450924509345094450954509645097450984509945100451014510245103451044510545106451074510845109451104511145112451134511445115451164511745118451194512045121451224512345124451254512645127451284512945130451314513245133451344513545136451374513845139451404514145142451434514445145451464514745148451494515045151451524515345154451554515645157451584515945160451614516245163451644516545166451674516845169451704517145172451734517445175451764517745178451794518045181451824518345184451854518645187451884518945190451914519245193451944519545196451974519845199452004520145202452034520445205452064520745208452094521045211452124521345214452154521645217452184521945220452214522245223452244522545226452274522845229452304523145232452334523445235452364523745238452394524045241452424524345244452454524645247452484524945250452514525245253452544525545256452574525845259452604526145262452634526445265452664526745268452694527045271452724527345274452754527645277452784527945280452814528245283452844528545286452874528845289452904529145292452934529445295452964529745298452994530045301453024530345304453054530645307453084530945310453114531245313453144531545316453174531845319453204532145322453234532445325453264532745328453294533045331453324533345334453354533645337453384533945340453414534245343453444534545346453474534845349453504535145352453534535445355453564535745358453594536045361453624536345364453654536645367453684536945370453714537245373453744537545376453774537845379453804538145382453834538445385453864538745388453894539045391453924539345394453954539645397453984539945400454014540245403454044540545406454074540845409454104541145412454134541445415454164541745418454194542045421454224542345424454254542645427454284542945430454314543245433454344543545436454374543845439454404544145442454434544445445454464544745448454494545045451454524545345454454554545645457454584545945460454614546245463454644546545466454674546845469454704547145472454734547445475454764547745478454794548045481454824548345484454854548645487454884548945490454914549245493454944549545496454974549845499455004550145502455034550445505455064550745508455094551045511455124551345514455154551645517455184551945520455214552245523455244552545526455274552845529455304553145532455334553445535455364553745538455394554045541455424554345544455454554645547455484554945550455514555245553455544555545556455574555845559455604556145562455634556445565455664556745568455694557045571455724557345574455754557645577455784557945580455814558245583455844558545586455874558845589455904559145592455934559445595455964559745598455994560045601456024560345604456054560645607456084560945610456114561245613456144561545616456174561845619456204562145622456234562445625456264562745628456294563045631456324563345634456354563645637456384563945640456414564245643456444564545646456474564845649456504565145652456534565445655456564565745658456594566045661456624566345664456654566645667456684566945670456714567245673456744567545676456774567845679456804568145682456834568445685456864568745688456894569045691456924569345694456954569645697456984569945700457014570245703457044570545706457074570845709457104571145712457134571445715457164571745718457194572045721457224572345724457254572645727457284572945730457314573245733457344573545736457374573845739457404574145742457434574445745457464574745748457494575045751457524575345754457554575645757457584575945760457614576245763457644576545766457674576845769457704577145772457734577445775457764577745778457794578045781457824578345784457854578645787457884578945790457914579245793457944579545796457974579845799458004580145802458034580445805458064580745808458094581045811458124581345814458154581645817458184581945820458214582245823458244582545826458274582845829458304583145832458334583445835458364583745838458394584045841458424584345844458454584645847458484584945850458514585245853458544585545856458574585845859458604586145862458634586445865458664586745868458694587045871458724587345874458754587645877458784587945880458814588245883458844588545886458874588845889458904589145892458934589445895458964589745898458994590045901459024590345904459054590645907459084590945910459114591245913459144591545916459174591845919459204592145922459234592445925459264592745928459294593045931459324593345934459354593645937459384593945940459414594245943459444594545946459474594845949459504595145952459534595445955459564595745958459594596045961459624596345964459654596645967459684596945970459714597245973459744597545976459774597845979459804598145982459834598445985459864598745988459894599045991459924599345994459954599645997459984599946000460014600246003460044600546006460074600846009460104601146012460134601446015460164601746018460194602046021460224602346024460254602646027460284602946030460314603246033460344603546036460374603846039460404604146042460434604446045460464604746048460494605046051460524605346054460554605646057460584605946060460614606246063460644606546066460674606846069460704607146072460734607446075460764607746078460794608046081460824608346084460854608646087460884608946090460914609246093460944609546096460974609846099461004610146102461034610446105461064610746108461094611046111461124611346114461154611646117461184611946120461214612246123461244612546126461274612846129461304613146132461334613446135461364613746138461394614046141461424614346144461454614646147461484614946150461514615246153461544615546156461574615846159461604616146162461634616446165461664616746168461694617046171461724617346174461754617646177461784617946180461814618246183461844618546186461874618846189461904619146192461934619446195461964619746198461994620046201462024620346204462054620646207462084620946210462114621246213462144621546216462174621846219462204622146222462234622446225462264622746228462294623046231462324623346234462354623646237462384623946240462414624246243462444624546246462474624846249462504625146252462534625446255462564625746258462594626046261462624626346264462654626646267462684626946270462714627246273462744627546276462774627846279462804628146282462834628446285462864628746288462894629046291462924629346294462954629646297462984629946300463014630246303463044630546306463074630846309463104631146312463134631446315463164631746318463194632046321463224632346324463254632646327463284632946330463314633246333463344633546336463374633846339463404634146342463434634446345463464634746348463494635046351463524635346354463554635646357463584635946360463614636246363463644636546366463674636846369463704637146372463734637446375463764637746378463794638046381463824638346384463854638646387463884638946390463914639246393463944639546396463974639846399464004640146402464034640446405464064640746408464094641046411464124641346414464154641646417464184641946420464214642246423464244642546426464274642846429464304643146432464334643446435464364643746438464394644046441464424644346444464454644646447464484644946450464514645246453464544645546456464574645846459464604646146462464634646446465464664646746468464694647046471464724647346474464754647646477464784647946480464814648246483464844648546486464874648846489464904649146492464934649446495464964649746498464994650046501465024650346504465054650646507465084650946510465114651246513465144651546516465174651846519465204652146522465234652446525465264652746528465294653046531465324653346534465354653646537465384653946540465414654246543465444654546546465474654846549465504655146552465534655446555465564655746558465594656046561465624656346564465654656646567465684656946570465714657246573465744657546576465774657846579465804658146582465834658446585465864658746588465894659046591465924659346594465954659646597465984659946600466014660246603466044660546606466074660846609466104661146612466134661446615466164661746618466194662046621466224662346624466254662646627466284662946630466314663246633466344663546636466374663846639466404664146642466434664446645466464664746648466494665046651466524665346654466554665646657466584665946660466614666246663466644666546666466674666846669466704667146672466734667446675466764667746678466794668046681466824668346684466854668646687466884668946690466914669246693466944669546696466974669846699467004670146702467034670446705467064670746708467094671046711467124671346714467154671646717467184671946720467214672246723467244672546726467274672846729467304673146732467334673446735467364673746738467394674046741467424674346744467454674646747467484674946750467514675246753467544675546756467574675846759467604676146762467634676446765467664676746768467694677046771467724677346774467754677646777467784677946780467814678246783467844678546786467874678846789467904679146792467934679446795467964679746798467994680046801468024680346804468054680646807468084680946810468114681246813468144681546816468174681846819468204682146822468234682446825468264682746828468294683046831468324683346834468354683646837468384683946840468414684246843468444684546846468474684846849468504685146852468534685446855468564685746858468594686046861468624686346864468654686646867468684686946870468714687246873468744687546876468774687846879468804688146882468834688446885468864688746888468894689046891468924689346894468954689646897468984689946900469014690246903469044690546906469074690846909469104691146912469134691446915469164691746918469194692046921469224692346924469254692646927469284692946930469314693246933469344693546936469374693846939469404694146942469434694446945469464694746948469494695046951469524695346954469554695646957469584695946960469614696246963469644696546966469674696846969469704697146972469734697446975469764697746978469794698046981469824698346984469854698646987469884698946990469914699246993469944699546996469974699846999470004700147002470034700447005470064700747008470094701047011470124701347014470154701647017470184701947020470214702247023470244702547026470274702847029470304703147032470334703447035470364703747038470394704047041470424704347044470454704647047470484704947050470514705247053470544705547056470574705847059470604706147062470634706447065470664706747068470694707047071470724707347074470754707647077470784707947080470814708247083470844708547086470874708847089470904709147092470934709447095470964709747098470994710047101471024710347104471054710647107471084710947110471114711247113471144711547116471174711847119471204712147122471234712447125471264712747128471294713047131471324713347134471354713647137471384713947140471414714247143471444714547146471474714847149471504715147152471534715447155471564715747158471594716047161471624716347164471654716647167471684716947170471714717247173471744717547176471774717847179471804718147182471834718447185471864718747188471894719047191471924719347194471954719647197471984719947200472014720247203472044720547206472074720847209472104721147212472134721447215472164721747218472194722047221472224722347224472254722647227472284722947230472314723247233472344723547236472374723847239472404724147242472434724447245472464724747248472494725047251472524725347254472554725647257472584725947260472614726247263472644726547266472674726847269472704727147272472734727447275472764727747278472794728047281472824728347284472854728647287472884728947290472914729247293472944729547296472974729847299473004730147302473034730447305473064730747308473094731047311473124731347314473154731647317473184731947320473214732247323473244732547326473274732847329473304733147332473334733447335473364733747338473394734047341473424734347344473454734647347473484734947350473514735247353473544735547356473574735847359473604736147362473634736447365473664736747368473694737047371473724737347374473754737647377473784737947380473814738247383473844738547386473874738847389473904739147392473934739447395473964739747398473994740047401474024740347404474054740647407474084740947410474114741247413474144741547416474174741847419474204742147422474234742447425474264742747428474294743047431474324743347434474354743647437474384743947440474414744247443474444744547446474474744847449474504745147452474534745447455474564745747458474594746047461474624746347464474654746647467474684746947470474714747247473474744747547476474774747847479474804748147482474834748447485474864748747488474894749047491474924749347494474954749647497474984749947500475014750247503475044750547506475074750847509475104751147512475134751447515475164751747518475194752047521475224752347524475254752647527475284752947530475314753247533475344753547536475374753847539475404754147542475434754447545475464754747548475494755047551475524755347554475554755647557475584755947560475614756247563475644756547566475674756847569475704757147572475734757447575475764757747578475794758047581475824758347584475854758647587475884758947590475914759247593475944759547596475974759847599476004760147602476034760447605476064760747608476094761047611476124761347614476154761647617476184761947620476214762247623476244762547626476274762847629476304763147632476334763447635476364763747638476394764047641476424764347644476454764647647476484764947650476514765247653476544765547656476574765847659476604766147662476634766447665476664766747668476694767047671476724767347674476754767647677476784767947680476814768247683476844768547686476874768847689476904769147692476934769447695476964769747698476994770047701477024770347704477054770647707477084770947710477114771247713477144771547716477174771847719477204772147722477234772447725477264772747728477294773047731477324773347734477354773647737477384773947740477414774247743477444774547746477474774847749477504775147752477534775447755477564775747758477594776047761477624776347764477654776647767477684776947770477714777247773477744777547776477774777847779477804778147782477834778447785477864778747788477894779047791477924779347794477954779647797477984779947800478014780247803478044780547806478074780847809478104781147812478134781447815478164781747818478194782047821478224782347824478254782647827478284782947830478314783247833478344783547836478374783847839478404784147842478434784447845478464784747848478494785047851478524785347854478554785647857478584785947860478614786247863478644786547866478674786847869478704787147872478734787447875478764787747878478794788047881478824788347884478854788647887478884788947890478914789247893478944789547896478974789847899479004790147902479034790447905479064790747908479094791047911479124791347914479154791647917479184791947920479214792247923479244792547926479274792847929479304793147932479334793447935479364793747938479394794047941479424794347944479454794647947479484794947950479514795247953479544795547956479574795847959479604796147962479634796447965479664796747968479694797047971479724797347974479754797647977479784797947980479814798247983479844798547986479874798847989479904799147992479934799447995479964799747998479994800048001480024800348004480054800648007480084800948010480114801248013480144801548016480174801848019480204802148022480234802448025480264802748028480294803048031480324803348034480354803648037480384803948040480414804248043480444804548046480474804848049480504805148052480534805448055480564805748058480594806048061480624806348064480654806648067480684806948070480714807248073480744807548076480774807848079480804808148082480834808448085480864808748088480894809048091480924809348094480954809648097480984809948100481014810248103481044810548106481074810848109481104811148112481134811448115481164811748118481194812048121481224812348124481254812648127481284812948130481314813248133481344813548136481374813848139481404814148142481434814448145481464814748148481494815048151481524815348154481554815648157481584815948160481614816248163481644816548166481674816848169481704817148172481734817448175481764817748178481794818048181481824818348184481854818648187481884818948190481914819248193481944819548196481974819848199482004820148202482034820448205482064820748208482094821048211482124821348214482154821648217482184821948220482214822248223482244822548226482274822848229482304823148232482334823448235482364823748238482394824048241482424824348244482454824648247482484824948250482514825248253482544825548256482574825848259482604826148262482634826448265482664826748268482694827048271482724827348274482754827648277482784827948280482814828248283482844828548286482874828848289482904829148292482934829448295482964829748298482994830048301483024830348304483054830648307483084830948310483114831248313483144831548316483174831848319483204832148322483234832448325483264832748328483294833048331483324833348334483354833648337483384833948340483414834248343483444834548346483474834848349483504835148352483534835448355483564835748358483594836048361483624836348364483654836648367483684836948370483714837248373483744837548376483774837848379483804838148382483834838448385483864838748388483894839048391483924839348394483954839648397483984839948400484014840248403484044840548406484074840848409484104841148412484134841448415484164841748418484194842048421484224842348424484254842648427484284842948430484314843248433484344843548436484374843848439484404844148442484434844448445484464844748448484494845048451484524845348454484554845648457484584845948460484614846248463484644846548466484674846848469484704847148472484734847448475484764847748478484794848048481484824848348484484854848648487484884848948490484914849248493484944849548496484974849848499485004850148502485034850448505485064850748508485094851048511485124851348514485154851648517485184851948520485214852248523485244852548526485274852848529485304853148532485334853448535485364853748538485394854048541485424854348544485454854648547485484854948550485514855248553485544855548556485574855848559485604856148562485634856448565485664856748568485694857048571485724857348574485754857648577485784857948580485814858248583485844858548586485874858848589485904859148592485934859448595485964859748598485994860048601486024860348604486054860648607486084860948610486114861248613486144861548616486174861848619486204862148622486234862448625486264862748628486294863048631486324863348634486354863648637486384863948640486414864248643486444864548646486474864848649486504865148652486534865448655486564865748658486594866048661486624866348664486654866648667486684866948670486714867248673486744867548676486774867848679486804868148682486834868448685486864868748688486894869048691486924869348694486954869648697486984869948700487014870248703487044870548706487074870848709487104871148712487134871448715487164871748718487194872048721487224872348724487254872648727487284872948730487314873248733487344873548736487374873848739487404874148742487434874448745487464874748748487494875048751487524875348754487554875648757487584875948760487614876248763487644876548766487674876848769487704877148772487734877448775487764877748778487794878048781487824878348784487854878648787487884878948790487914879248793487944879548796487974879848799488004880148802488034880448805488064880748808488094881048811488124881348814488154881648817488184881948820488214882248823488244882548826488274882848829488304883148832488334883448835488364883748838488394884048841488424884348844488454884648847488484884948850488514885248853488544885548856488574885848859488604886148862488634886448865488664886748868488694887048871488724887348874488754887648877488784887948880488814888248883488844888548886488874888848889488904889148892488934889448895488964889748898488994890048901489024890348904489054890648907489084890948910489114891248913489144891548916489174891848919489204892148922489234892448925489264892748928489294893048931489324893348934489354893648937489384893948940489414894248943489444894548946489474894848949489504895148952489534895448955489564895748958489594896048961489624896348964489654896648967489684896948970489714897248973489744897548976489774897848979489804898148982489834898448985489864898748988489894899048991489924899348994489954899648997489984899949000490014900249003490044900549006490074900849009490104901149012490134901449015490164901749018490194902049021490224902349024490254902649027490284902949030490314903249033490344903549036490374903849039490404904149042490434904449045490464904749048490494905049051490524905349054490554905649057490584905949060490614906249063490644906549066490674906849069490704907149072490734907449075490764907749078490794908049081490824908349084490854908649087490884908949090490914909249093490944909549096490974909849099491004910149102491034910449105491064910749108491094911049111491124911349114491154911649117491184911949120491214912249123491244912549126491274912849129491304913149132491334913449135491364913749138491394914049141491424914349144491454914649147491484914949150491514915249153491544915549156491574915849159491604916149162491634916449165491664916749168491694917049171491724917349174491754917649177491784917949180491814918249183491844918549186491874918849189491904919149192491934919449195491964919749198491994920049201492024920349204492054920649207492084920949210492114921249213492144921549216492174921849219492204922149222492234922449225492264922749228492294923049231492324923349234492354923649237492384923949240492414924249243492444924549246492474924849249492504925149252492534925449255492564925749258492594926049261492624926349264492654926649267492684926949270492714927249273492744927549276492774927849279492804928149282492834928449285492864928749288492894929049291492924929349294492954929649297492984929949300493014930249303493044930549306493074930849309493104931149312493134931449315493164931749318493194932049321493224932349324493254932649327493284932949330493314933249333493344933549336493374933849339493404934149342493434934449345493464934749348493494935049351493524935349354493554935649357493584935949360493614936249363493644936549366493674936849369493704937149372493734937449375493764937749378493794938049381493824938349384493854938649387493884938949390493914939249393493944939549396493974939849399494004940149402494034940449405494064940749408494094941049411494124941349414494154941649417494184941949420494214942249423494244942549426494274942849429494304943149432494334943449435494364943749438494394944049441494424944349444494454944649447494484944949450494514945249453494544945549456494574945849459494604946149462494634946449465494664946749468494694947049471494724947349474494754947649477494784947949480494814948249483494844948549486494874948849489494904949149492494934949449495494964949749498494994950049501495024950349504495054950649507495084950949510495114951249513495144951549516495174951849519495204952149522495234952449525495264952749528495294953049531495324953349534495354953649537495384953949540495414954249543495444954549546495474954849549495504955149552495534955449555495564955749558495594956049561495624956349564495654956649567495684956949570495714957249573495744957549576495774957849579495804958149582495834958449585495864958749588495894959049591495924959349594495954959649597495984959949600496014960249603496044960549606496074960849609496104961149612496134961449615496164961749618496194962049621496224962349624496254962649627496284962949630496314963249633496344963549636496374963849639496404964149642496434964449645496464964749648496494965049651496524965349654496554965649657496584965949660496614966249663496644966549666496674966849669496704967149672496734967449675496764967749678496794968049681496824968349684496854968649687496884968949690496914969249693496944969549696496974969849699497004970149702497034970449705497064970749708497094971049711497124971349714497154971649717497184971949720497214972249723497244972549726497274972849729497304973149732497334973449735497364973749738497394974049741497424974349744497454974649747497484974949750497514975249753497544975549756497574975849759497604976149762497634976449765497664976749768497694977049771497724977349774497754977649777497784977949780497814978249783497844978549786497874978849789497904979149792497934979449795497964979749798497994980049801498024980349804498054980649807498084980949810498114981249813498144981549816498174981849819498204982149822498234982449825498264982749828498294983049831498324983349834498354983649837498384983949840498414984249843498444984549846498474984849849498504985149852498534985449855498564985749858498594986049861498624986349864498654986649867498684986949870498714987249873498744987549876498774987849879498804988149882498834988449885498864988749888498894989049891498924989349894498954989649897498984989949900499014990249903499044990549906499074990849909499104991149912499134991449915499164991749918499194992049921499224992349924499254992649927499284992949930499314993249933499344993549936499374993849939499404994149942499434994449945499464994749948499494995049951499524995349954499554995649957499584995949960499614996249963499644996549966499674996849969499704997149972499734997449975499764997749978499794998049981499824998349984499854998649987499884998949990499914999249993499944999549996499974999849999500005000150002500035000450005500065000750008500095001050011500125001350014500155001650017500185001950020500215002250023500245002550026500275002850029500305003150032500335003450035500365003750038500395004050041500425004350044500455004650047500485004950050500515005250053500545005550056500575005850059500605006150062500635006450065500665006750068500695007050071500725007350074500755007650077500785007950080500815008250083500845008550086500875008850089500905009150092500935009450095500965009750098500995010050101501025010350104501055010650107501085010950110501115011250113501145011550116501175011850119501205012150122501235012450125501265012750128501295013050131501325013350134501355013650137501385013950140501415014250143501445014550146501475014850149501505015150152501535015450155501565015750158501595016050161501625016350164501655016650167501685016950170501715017250173501745017550176501775017850179501805018150182501835018450185501865018750188501895019050191501925019350194501955019650197501985019950200502015020250203502045020550206502075020850209502105021150212502135021450215502165021750218502195022050221502225022350224502255022650227502285022950230502315023250233502345023550236502375023850239502405024150242502435024450245502465024750248502495025050251502525025350254502555025650257502585025950260502615026250263502645026550266502675026850269502705027150272502735027450275502765027750278502795028050281502825028350284502855028650287502885028950290502915029250293502945029550296502975029850299503005030150302503035030450305503065030750308503095031050311503125031350314503155031650317503185031950320503215032250323503245032550326503275032850329503305033150332503335033450335503365033750338503395034050341503425034350344503455034650347503485034950350503515035250353503545035550356503575035850359503605036150362503635036450365503665036750368503695037050371503725037350374503755037650377503785037950380503815038250383503845038550386503875038850389503905039150392503935039450395503965039750398503995040050401504025040350404504055040650407504085040950410504115041250413504145041550416504175041850419504205042150422504235042450425504265042750428504295043050431504325043350434504355043650437504385043950440504415044250443504445044550446504475044850449504505045150452504535045450455504565045750458504595046050461504625046350464504655046650467504685046950470504715047250473504745047550476504775047850479504805048150482504835048450485504865048750488504895049050491504925049350494504955049650497504985049950500505015050250503505045050550506505075050850509505105051150512505135051450515505165051750518505195052050521505225052350524505255052650527505285052950530505315053250533505345053550536505375053850539505405054150542505435054450545505465054750548505495055050551505525055350554505555055650557505585055950560505615056250563505645056550566505675056850569505705057150572505735057450575505765057750578505795058050581505825058350584505855058650587505885058950590505915059250593505945059550596505975059850599506005060150602506035060450605506065060750608506095061050611506125061350614506155061650617506185061950620506215062250623506245062550626506275062850629506305063150632506335063450635506365063750638506395064050641506425064350644506455064650647506485064950650506515065250653506545065550656506575065850659506605066150662506635066450665506665066750668506695067050671506725067350674506755067650677506785067950680506815068250683506845068550686506875068850689506905069150692506935069450695506965069750698506995070050701507025070350704507055070650707507085070950710507115071250713507145071550716507175071850719507205072150722507235072450725507265072750728507295073050731507325073350734507355073650737507385073950740507415074250743507445074550746507475074850749507505075150752507535075450755507565075750758507595076050761507625076350764507655076650767507685076950770507715077250773507745077550776507775077850779507805078150782507835078450785507865078750788507895079050791507925079350794507955079650797507985079950800508015080250803508045080550806508075080850809508105081150812508135081450815508165081750818508195082050821508225082350824508255082650827508285082950830508315083250833508345083550836508375083850839508405084150842508435084450845508465084750848508495085050851508525085350854508555085650857508585085950860508615086250863508645086550866508675086850869508705087150872508735087450875508765087750878508795088050881508825088350884508855088650887508885088950890508915089250893508945089550896508975089850899509005090150902509035090450905509065090750908509095091050911509125091350914509155091650917509185091950920509215092250923509245092550926509275092850929509305093150932509335093450935509365093750938509395094050941509425094350944509455094650947509485094950950509515095250953509545095550956509575095850959509605096150962509635096450965509665096750968509695097050971509725097350974509755097650977509785097950980509815098250983509845098550986509875098850989509905099150992509935099450995509965099750998509995100051001510025100351004510055100651007510085100951010510115101251013510145101551016510175101851019510205102151022510235102451025510265102751028510295103051031510325103351034510355103651037510385103951040510415104251043510445104551046510475104851049510505105151052510535105451055510565105751058510595106051061510625106351064510655106651067510685106951070510715107251073510745107551076510775107851079510805108151082510835108451085510865108751088510895109051091510925109351094510955109651097510985109951100511015110251103511045110551106511075110851109511105111151112511135111451115511165111751118511195112051121511225112351124511255112651127511285112951130511315113251133511345113551136511375113851139511405114151142511435114451145511465114751148511495115051151511525115351154511555115651157511585115951160511615116251163511645116551166511675116851169511705117151172511735117451175511765117751178511795118051181511825118351184511855118651187511885118951190511915119251193511945119551196511975119851199512005120151202512035120451205512065120751208512095121051211512125121351214512155121651217512185121951220512215122251223512245122551226512275122851229512305123151232512335123451235512365123751238512395124051241512425124351244512455124651247512485124951250512515125251253512545125551256512575125851259512605126151262512635126451265512665126751268512695127051271512725127351274512755127651277512785127951280512815128251283512845128551286512875128851289512905129151292512935129451295512965129751298512995130051301513025130351304513055130651307513085130951310513115131251313513145131551316513175131851319513205132151322513235132451325513265132751328513295133051331513325133351334513355133651337513385133951340513415134251343513445134551346513475134851349513505135151352513535135451355513565135751358513595136051361513625136351364513655136651367513685136951370513715137251373513745137551376513775137851379513805138151382513835138451385513865138751388513895139051391513925139351394513955139651397513985139951400514015140251403514045140551406514075140851409514105141151412514135141451415514165141751418514195142051421514225142351424514255142651427514285142951430514315143251433514345143551436514375143851439514405144151442514435144451445514465144751448514495145051451514525145351454514555145651457514585145951460514615146251463514645146551466514675146851469514705147151472514735147451475514765147751478514795148051481514825148351484514855148651487514885148951490514915149251493514945149551496514975149851499515005150151502515035150451505515065150751508515095151051511515125151351514515155151651517515185151951520515215152251523515245152551526515275152851529515305153151532515335153451535515365153751538515395154051541515425154351544515455154651547515485154951550515515155251553515545155551556515575155851559515605156151562515635156451565515665156751568515695157051571515725157351574515755157651577515785157951580515815158251583515845158551586515875158851589515905159151592515935159451595515965159751598515995160051601516025160351604516055160651607516085160951610516115161251613516145161551616516175161851619516205162151622516235162451625516265162751628516295163051631516325163351634516355163651637516385163951640516415164251643516445164551646516475164851649516505165151652516535165451655516565165751658516595166051661516625166351664516655166651667516685166951670516715167251673516745167551676516775167851679516805168151682516835168451685516865168751688516895169051691516925169351694516955169651697516985169951700517015170251703517045170551706517075170851709517105171151712517135171451715517165171751718517195172051721517225172351724517255172651727517285172951730517315173251733517345173551736517375173851739517405174151742517435174451745517465174751748517495175051751517525175351754517555175651757517585175951760517615176251763517645176551766517675176851769517705177151772517735177451775517765177751778517795178051781517825178351784517855178651787517885178951790517915179251793517945179551796517975179851799518005180151802518035180451805518065180751808518095181051811518125181351814518155181651817518185181951820518215182251823518245182551826518275182851829518305183151832518335183451835518365183751838518395184051841518425184351844518455184651847518485184951850518515185251853518545185551856518575185851859518605186151862518635186451865518665186751868518695187051871518725187351874518755187651877518785187951880518815188251883518845188551886518875188851889518905189151892518935189451895518965189751898518995190051901519025190351904519055190651907519085190951910519115191251913519145191551916519175191851919519205192151922519235192451925519265192751928519295193051931519325193351934519355193651937519385193951940519415194251943519445194551946519475194851949519505195151952519535195451955519565195751958519595196051961519625196351964519655196651967519685196951970519715197251973519745197551976519775197851979519805198151982519835198451985519865198751988519895199051991519925199351994519955199651997519985199952000520015200252003520045200552006520075200852009520105201152012520135201452015520165201752018520195202052021520225202352024520255202652027520285202952030520315203252033520345203552036520375203852039520405204152042520435204452045520465204752048520495205052051520525205352054520555205652057520585205952060520615206252063520645206552066520675206852069520705207152072520735207452075520765207752078520795208052081520825208352084520855208652087520885208952090520915209252093520945209552096520975209852099521005210152102521035210452105521065210752108521095211052111521125211352114521155211652117521185211952120521215212252123521245212552126521275212852129521305213152132521335213452135521365213752138521395214052141521425214352144521455214652147521485214952150521515215252153521545215552156521575215852159521605216152162521635216452165521665216752168521695217052171521725217352174521755217652177521785217952180521815218252183521845218552186521875218852189521905219152192521935219452195521965219752198521995220052201522025220352204522055220652207522085220952210522115221252213522145221552216522175221852219522205222152222522235222452225522265222752228522295223052231522325223352234522355223652237522385223952240522415224252243522445224552246522475224852249522505225152252522535225452255522565225752258522595226052261522625226352264522655226652267522685226952270522715227252273522745227552276522775227852279522805228152282522835228452285522865228752288522895229052291522925229352294522955229652297522985229952300523015230252303523045230552306523075230852309523105231152312523135231452315523165231752318523195232052321523225232352324523255232652327523285232952330523315233252333523345233552336523375233852339523405234152342523435234452345523465234752348523495235052351523525235352354523555235652357523585235952360523615236252363523645236552366523675236852369523705237152372523735237452375523765237752378523795238052381523825238352384523855238652387523885238952390523915239252393523945239552396523975239852399524005240152402524035240452405524065240752408524095241052411524125241352414524155241652417524185241952420524215242252423524245242552426524275242852429524305243152432524335243452435524365243752438524395244052441524425244352444524455244652447524485244952450524515245252453524545245552456524575245852459524605246152462524635246452465524665246752468524695247052471524725247352474524755247652477524785247952480524815248252483524845248552486524875248852489524905249152492524935249452495524965249752498524995250052501525025250352504525055250652507525085250952510525115251252513525145251552516525175251852519525205252152522525235252452525525265252752528525295253052531525325253352534525355253652537525385253952540525415254252543525445254552546525475254852549525505255152552525535255452555525565255752558525595256052561525625256352564525655256652567525685256952570525715257252573525745257552576525775257852579525805258152582525835258452585525865258752588525895259052591525925259352594525955259652597525985259952600526015260252603526045260552606526075260852609526105261152612526135261452615526165261752618526195262052621526225262352624526255262652627526285262952630526315263252633526345263552636526375263852639526405264152642526435264452645526465264752648526495265052651526525265352654526555265652657526585265952660526615266252663526645266552666526675266852669526705267152672526735267452675526765267752678526795268052681526825268352684526855268652687526885268952690526915269252693526945269552696526975269852699527005270152702527035270452705527065270752708527095271052711527125271352714527155271652717527185271952720527215272252723527245272552726527275272852729527305273152732527335273452735527365273752738527395274052741527425274352744527455274652747527485274952750527515275252753527545275552756527575275852759527605276152762527635276452765527665276752768527695277052771527725277352774527755277652777527785277952780527815278252783527845278552786527875278852789527905279152792527935279452795527965279752798527995280052801528025280352804528055280652807528085280952810528115281252813528145281552816528175281852819528205282152822528235282452825528265282752828528295283052831528325283352834528355283652837528385283952840528415284252843528445284552846528475284852849528505285152852528535285452855528565285752858528595286052861528625286352864528655286652867528685286952870528715287252873528745287552876528775287852879528805288152882528835288452885528865288752888528895289052891528925289352894528955289652897528985289952900529015290252903529045290552906529075290852909529105291152912529135291452915529165291752918529195292052921529225292352924529255292652927529285292952930529315293252933529345293552936529375293852939529405294152942529435294452945529465294752948529495295052951529525295352954529555295652957529585295952960529615296252963529645296552966529675296852969529705297152972529735297452975529765297752978529795298052981529825298352984529855298652987529885298952990529915299252993529945299552996529975299852999530005300153002530035300453005530065300753008530095301053011530125301353014530155301653017530185301953020530215302253023530245302553026530275302853029530305303153032530335303453035530365303753038530395304053041530425304353044530455304653047530485304953050530515305253053530545305553056530575305853059530605306153062530635306453065530665306753068530695307053071530725307353074530755307653077530785307953080530815308253083530845308553086530875308853089530905309153092530935309453095530965309753098530995310053101531025310353104531055310653107531085310953110531115311253113531145311553116531175311853119531205312153122531235312453125531265312753128531295313053131531325313353134531355313653137531385313953140531415314253143531445314553146531475314853149531505315153152531535315453155531565315753158531595316053161531625316353164531655316653167531685316953170531715317253173531745317553176531775317853179531805318153182531835318453185531865318753188531895319053191531925319353194531955319653197531985319953200532015320253203532045320553206532075320853209532105321153212532135321453215532165321753218532195322053221532225322353224532255322653227532285322953230532315323253233532345323553236532375323853239532405324153242532435324453245532465324753248532495325053251532525325353254532555325653257532585325953260532615326253263532645326553266532675326853269532705327153272532735327453275532765327753278532795328053281532825328353284532855328653287532885328953290532915329253293532945329553296532975329853299533005330153302533035330453305533065330753308533095331053311533125331353314533155331653317533185331953320533215332253323533245332553326533275332853329533305333153332533335333453335533365333753338533395334053341533425334353344533455334653347533485334953350533515335253353533545335553356533575335853359533605336153362533635336453365533665336753368533695337053371533725337353374533755337653377533785337953380533815338253383533845338553386533875338853389533905339153392533935339453395533965339753398533995340053401534025340353404534055340653407534085340953410534115341253413534145341553416534175341853419534205342153422534235342453425534265342753428534295343053431534325343353434534355343653437534385343953440534415344253443534445344553446534475344853449534505345153452534535345453455534565345753458534595346053461534625346353464534655346653467534685346953470534715347253473534745347553476534775347853479534805348153482534835348453485534865348753488534895349053491534925349353494534955349653497534985349953500535015350253503535045350553506535075350853509535105351153512535135351453515535165351753518535195352053521535225352353524535255352653527535285352953530535315353253533535345353553536535375353853539535405354153542535435354453545535465354753548535495355053551535525355353554535555355653557535585355953560535615356253563535645356553566535675356853569535705357153572535735357453575535765357753578535795358053581535825358353584535855358653587535885358953590535915359253593535945359553596535975359853599536005360153602536035360453605536065360753608536095361053611536125361353614536155361653617536185361953620536215362253623536245362553626536275362853629536305363153632536335363453635536365363753638536395364053641536425364353644536455364653647536485364953650536515365253653536545365553656536575365853659536605366153662536635366453665536665366753668536695367053671536725367353674536755367653677536785367953680536815368253683536845368553686536875368853689536905369153692536935369453695536965369753698536995370053701537025370353704537055370653707537085370953710537115371253713537145371553716537175371853719537205372153722537235372453725537265372753728537295373053731537325373353734537355373653737537385373953740537415374253743537445374553746537475374853749537505375153752537535375453755537565375753758537595376053761537625376353764537655376653767537685376953770537715377253773537745377553776537775377853779537805378153782537835378453785537865378753788537895379053791537925379353794537955379653797537985379953800538015380253803538045380553806538075380853809538105381153812538135381453815538165381753818538195382053821538225382353824538255382653827538285382953830538315383253833538345383553836538375383853839538405384153842538435384453845538465384753848538495385053851538525385353854538555385653857538585385953860538615386253863538645386553866538675386853869538705387153872538735387453875538765387753878538795388053881538825388353884538855388653887538885388953890538915389253893538945389553896538975389853899539005390153902539035390453905539065390753908539095391053911539125391353914539155391653917539185391953920539215392253923539245392553926539275392853929539305393153932539335393453935539365393753938539395394053941539425394353944539455394653947539485394953950539515395253953539545395553956539575395853959539605396153962539635396453965539665396753968539695397053971539725397353974539755397653977539785397953980539815398253983539845398553986539875398853989539905399153992539935399453995539965399753998539995400054001540025400354004540055400654007540085400954010540115401254013540145401554016540175401854019540205402154022540235402454025540265402754028540295403054031540325403354034540355403654037540385403954040540415404254043540445404554046540475404854049540505405154052540535405454055540565405754058540595406054061540625406354064540655406654067540685406954070540715407254073540745407554076540775407854079540805408154082540835408454085540865408754088540895409054091540925409354094540955409654097540985409954100541015410254103541045410554106541075410854109541105411154112541135411454115541165411754118541195412054121541225412354124541255412654127541285412954130541315413254133541345413554136541375413854139541405414154142541435414454145541465414754148541495415054151541525415354154541555415654157541585415954160541615416254163541645416554166541675416854169541705417154172541735417454175541765417754178541795418054181541825418354184541855418654187541885418954190541915419254193541945419554196541975419854199542005420154202542035420454205542065420754208542095421054211542125421354214542155421654217542185421954220542215422254223542245422554226542275422854229542305423154232542335423454235542365423754238542395424054241542425424354244542455424654247542485424954250542515425254253542545425554256542575425854259542605426154262542635426454265542665426754268542695427054271542725427354274542755427654277542785427954280542815428254283542845428554286542875428854289542905429154292542935429454295542965429754298542995430054301543025430354304543055430654307543085430954310543115431254313543145431554316543175431854319543205432154322543235432454325543265432754328543295433054331543325433354334543355433654337543385433954340543415434254343543445434554346543475434854349543505435154352543535435454355543565435754358543595436054361543625436354364543655436654367543685436954370543715437254373543745437554376543775437854379543805438154382543835438454385543865438754388543895439054391543925439354394543955439654397543985439954400544015440254403544045440554406544075440854409544105441154412544135441454415544165441754418544195442054421544225442354424544255442654427544285442954430544315443254433544345443554436544375443854439544405444154442544435444454445544465444754448544495445054451544525445354454544555445654457544585445954460544615446254463544645446554466544675446854469544705447154472544735447454475544765447754478544795448054481544825448354484544855448654487544885448954490544915449254493544945449554496544975449854499545005450154502545035450454505545065450754508545095451054511545125451354514545155451654517545185451954520545215452254523545245452554526545275452854529545305453154532545335453454535545365453754538545395454054541545425454354544545455454654547545485454954550545515455254553545545455554556545575455854559545605456154562545635456454565545665456754568545695457054571545725457354574545755457654577545785457954580545815458254583545845458554586545875458854589545905459154592545935459454595545965459754598545995460054601546025460354604546055460654607546085460954610546115461254613546145461554616546175461854619546205462154622546235462454625546265462754628546295463054631546325463354634546355463654637546385463954640546415464254643546445464554646546475464854649546505465154652546535465454655546565465754658546595466054661546625466354664546655466654667546685466954670546715467254673546745467554676546775467854679546805468154682546835468454685546865468754688546895469054691546925469354694546955469654697546985469954700547015470254703547045470554706547075470854709547105471154712547135471454715547165471754718547195472054721547225472354724547255472654727547285472954730547315473254733547345473554736547375473854739547405474154742547435474454745547465474754748547495475054751547525475354754547555475654757547585475954760547615476254763547645476554766547675476854769547705477154772547735477454775547765477754778547795478054781547825478354784547855478654787547885478954790547915479254793547945479554796547975479854799548005480154802548035480454805548065480754808548095481054811548125481354814548155481654817548185481954820548215482254823548245482554826548275482854829548305483154832548335483454835548365483754838548395484054841548425484354844548455484654847548485484954850548515485254853548545485554856548575485854859548605486154862548635486454865548665486754868548695487054871548725487354874548755487654877548785487954880548815488254883548845488554886548875488854889548905489154892548935489454895548965489754898548995490054901549025490354904549055490654907549085490954910549115491254913549145491554916549175491854919549205492154922549235492454925549265492754928549295493054931549325493354934549355493654937549385493954940549415494254943549445494554946549475494854949549505495154952549535495454955549565495754958549595496054961549625496354964549655496654967549685496954970549715497254973549745497554976549775497854979549805498154982549835498454985549865498754988549895499054991549925499354994549955499654997549985499955000550015500255003550045500555006550075500855009550105501155012550135501455015550165501755018550195502055021550225502355024550255502655027550285502955030550315503255033550345503555036550375503855039550405504155042550435504455045550465504755048550495505055051550525505355054550555505655057550585505955060550615506255063550645506555066550675506855069550705507155072550735507455075550765507755078550795508055081550825508355084550855508655087550885508955090550915509255093550945509555096550975509855099551005510155102551035510455105551065510755108551095511055111551125511355114551155511655117551185511955120551215512255123551245512555126551275512855129551305513155132551335513455135551365513755138551395514055141551425514355144551455514655147551485514955150551515515255153551545515555156551575515855159551605516155162551635516455165551665516755168551695517055171551725517355174551755517655177551785517955180551815518255183551845518555186551875518855189551905519155192551935519455195551965519755198551995520055201552025520355204552055520655207552085520955210552115521255213552145521555216552175521855219552205522155222552235522455225552265522755228552295523055231552325523355234552355523655237552385523955240552415524255243552445524555246552475524855249552505525155252552535525455255552565525755258552595526055261552625526355264552655526655267552685526955270552715527255273552745527555276552775527855279552805528155282552835528455285552865528755288552895529055291552925529355294552955529655297552985529955300553015530255303553045530555306553075530855309553105531155312553135531455315553165531755318553195532055321553225532355324553255532655327553285532955330553315533255333553345533555336553375533855339553405534155342553435534455345553465534755348553495535055351553525535355354553555535655357553585535955360553615536255363553645536555366553675536855369553705537155372553735537455375553765537755378553795538055381553825538355384553855538655387553885538955390553915539255393553945539555396553975539855399554005540155402554035540455405554065540755408554095541055411554125541355414554155541655417554185541955420554215542255423554245542555426554275542855429554305543155432554335543455435554365543755438554395544055441554425544355444554455544655447554485544955450554515545255453554545545555456554575545855459554605546155462554635546455465554665546755468554695547055471554725547355474554755547655477554785547955480554815548255483554845548555486554875548855489554905549155492554935549455495554965549755498554995550055501555025550355504555055550655507555085550955510555115551255513555145551555516555175551855519555205552155522555235552455525555265552755528555295553055531555325553355534555355553655537555385553955540555415554255543555445554555546555475554855549555505555155552555535555455555555565555755558555595556055561555625556355564555655556655567555685556955570555715557255573555745557555576555775557855579555805558155582555835558455585555865558755588555895559055591555925559355594555955559655597555985559955600556015560255603556045560555606556075560855609556105561155612556135561455615556165561755618556195562055621556225562355624556255562655627556285562955630556315563255633556345563555636556375563855639556405564155642556435564455645556465564755648556495565055651556525565355654556555565655657556585565955660556615566255663556645566555666556675566855669556705567155672556735567455675556765567755678556795568055681556825568355684556855568655687556885568955690556915569255693556945569555696556975569855699557005570155702557035570455705557065570755708557095571055711557125571355714557155571655717557185571955720557215572255723557245572555726557275572855729557305573155732557335573455735557365573755738557395574055741557425574355744557455574655747557485574955750557515575255753557545575555756557575575855759557605576155762557635576455765557665576755768557695577055771557725577355774557755577655777557785577955780557815578255783557845578555786557875578855789557905579155792557935579455795557965579755798557995580055801558025580355804558055580655807558085580955810558115581255813558145581555816558175581855819558205582155822558235582455825558265582755828558295583055831558325583355834558355583655837558385583955840558415584255843558445584555846558475584855849558505585155852558535585455855558565585755858558595586055861558625586355864558655586655867558685586955870558715587255873558745587555876558775587855879558805588155882558835588455885558865588755888558895589055891558925589355894558955589655897558985589955900559015590255903559045590555906559075590855909559105591155912559135591455915559165591755918559195592055921559225592355924559255592655927559285592955930559315593255933559345593555936559375593855939559405594155942559435594455945559465594755948559495595055951559525595355954559555595655957559585595955960559615596255963559645596555966559675596855969559705597155972559735597455975559765597755978559795598055981559825598355984559855598655987559885598955990559915599255993559945599555996559975599855999560005600156002560035600456005560065600756008560095601056011560125601356014560155601656017560185601956020560215602256023560245602556026560275602856029560305603156032560335603456035560365603756038560395604056041560425604356044560455604656047560485604956050560515605256053560545605556056560575605856059560605606156062560635606456065560665606756068560695607056071560725607356074560755607656077560785607956080560815608256083560845608556086560875608856089560905609156092560935609456095560965609756098560995610056101561025610356104561055610656107561085610956110561115611256113561145611556116561175611856119561205612156122561235612456125561265612756128561295613056131561325613356134561355613656137561385613956140561415614256143561445614556146561475614856149561505615156152561535615456155561565615756158561595616056161561625616356164561655616656167561685616956170561715617256173561745617556176561775617856179561805618156182561835618456185561865618756188561895619056191561925619356194561955619656197561985619956200562015620256203562045620556206562075620856209562105621156212562135621456215562165621756218562195622056221562225622356224562255622656227562285622956230562315623256233562345623556236562375623856239562405624156242562435624456245562465624756248562495625056251562525625356254562555625656257562585625956260562615626256263562645626556266562675626856269562705627156272562735627456275562765627756278562795628056281562825628356284562855628656287562885628956290562915629256293562945629556296562975629856299563005630156302563035630456305563065630756308563095631056311563125631356314563155631656317563185631956320563215632256323563245632556326563275632856329563305633156332563335633456335563365633756338563395634056341563425634356344563455634656347563485634956350563515635256353563545635556356563575635856359563605636156362563635636456365563665636756368563695637056371563725637356374563755637656377563785637956380563815638256383563845638556386563875638856389563905639156392563935639456395563965639756398563995640056401564025640356404564055640656407564085640956410564115641256413564145641556416564175641856419564205642156422564235642456425564265642756428564295643056431564325643356434564355643656437564385643956440564415644256443564445644556446564475644856449564505645156452564535645456455564565645756458564595646056461564625646356464564655646656467564685646956470564715647256473564745647556476564775647856479564805648156482564835648456485564865648756488564895649056491564925649356494564955649656497564985649956500565015650256503565045650556506565075650856509565105651156512565135651456515565165651756518565195652056521565225652356524565255652656527565285652956530565315653256533565345653556536565375653856539565405654156542565435654456545565465654756548565495655056551565525655356554565555655656557565585655956560565615656256563565645656556566565675656856569565705657156572565735657456575565765657756578565795658056581565825658356584565855658656587565885658956590565915659256593565945659556596565975659856599566005660156602566035660456605566065660756608566095661056611566125661356614566155661656617566185661956620566215662256623566245662556626566275662856629566305663156632566335663456635566365663756638566395664056641566425664356644566455664656647566485664956650566515665256653566545665556656566575665856659566605666156662566635666456665566665666756668566695667056671566725667356674566755667656677566785667956680566815668256683566845668556686566875668856689566905669156692566935669456695566965669756698566995670056701567025670356704567055670656707567085670956710567115671256713567145671556716567175671856719567205672156722567235672456725567265672756728567295673056731567325673356734567355673656737567385673956740567415674256743567445674556746567475674856749567505675156752567535675456755567565675756758567595676056761567625676356764567655676656767567685676956770567715677256773567745677556776567775677856779567805678156782567835678456785567865678756788567895679056791567925679356794567955679656797567985679956800568015680256803568045680556806568075680856809568105681156812568135681456815568165681756818568195682056821568225682356824568255682656827568285682956830568315683256833568345683556836568375683856839568405684156842568435684456845568465684756848568495685056851568525685356854568555685656857568585685956860568615686256863568645686556866568675686856869568705687156872568735687456875568765687756878568795688056881568825688356884568855688656887568885688956890568915689256893568945689556896568975689856899569005690156902569035690456905569065690756908569095691056911569125691356914569155691656917569185691956920569215692256923569245692556926569275692856929569305693156932569335693456935569365693756938569395694056941569425694356944569455694656947569485694956950569515695256953569545695556956569575695856959569605696156962569635696456965569665696756968569695697056971569725697356974569755697656977569785697956980569815698256983569845698556986569875698856989569905699156992569935699456995569965699756998569995700057001570025700357004570055700657007570085700957010570115701257013570145701557016570175701857019570205702157022570235702457025570265702757028570295703057031570325703357034570355703657037570385703957040570415704257043570445704557046570475704857049570505705157052570535705457055570565705757058570595706057061570625706357064570655706657067570685706957070570715707257073570745707557076570775707857079570805708157082570835708457085570865708757088570895709057091570925709357094570955709657097570985709957100571015710257103571045710557106571075710857109571105711157112571135711457115571165711757118571195712057121571225712357124571255712657127571285712957130571315713257133571345713557136571375713857139571405714157142571435714457145571465714757148571495715057151571525715357154571555715657157571585715957160571615716257163571645716557166571675716857169571705717157172571735717457175571765717757178571795718057181571825718357184571855718657187571885718957190571915719257193571945719557196571975719857199572005720157202572035720457205572065720757208572095721057211572125721357214572155721657217572185721957220572215722257223572245722557226572275722857229572305723157232572335723457235572365723757238572395724057241572425724357244572455724657247572485724957250572515725257253572545725557256572575725857259572605726157262572635726457265572665726757268572695727057271572725727357274572755727657277572785727957280572815728257283572845728557286572875728857289572905729157292572935729457295572965729757298572995730057301573025730357304573055730657307573085730957310573115731257313573145731557316573175731857319573205732157322573235732457325573265732757328573295733057331573325733357334573355733657337573385733957340573415734257343573445734557346573475734857349573505735157352573535735457355573565735757358573595736057361573625736357364573655736657367573685736957370573715737257373573745737557376573775737857379573805738157382573835738457385573865738757388573895739057391573925739357394573955739657397573985739957400574015740257403574045740557406574075740857409574105741157412574135741457415574165741757418574195742057421574225742357424574255742657427574285742957430574315743257433574345743557436574375743857439574405744157442574435744457445574465744757448574495745057451574525745357454574555745657457574585745957460574615746257463574645746557466574675746857469574705747157472574735747457475574765747757478574795748057481574825748357484574855748657487574885748957490574915749257493574945749557496574975749857499575005750157502575035750457505575065750757508575095751057511575125751357514575155751657517575185751957520575215752257523575245752557526575275752857529575305753157532575335753457535575365753757538575395754057541575425754357544575455754657547575485754957550575515755257553575545755557556575575755857559575605756157562575635756457565575665756757568575695757057571575725757357574575755757657577575785757957580575815758257583575845758557586575875758857589575905759157592575935759457595575965759757598575995760057601576025760357604576055760657607576085760957610576115761257613576145761557616576175761857619576205762157622576235762457625576265762757628576295763057631576325763357634576355763657637576385763957640576415764257643576445764557646576475764857649576505765157652576535765457655576565765757658576595766057661576625766357664576655766657667576685766957670576715767257673576745767557676576775767857679576805768157682576835768457685576865768757688576895769057691576925769357694576955769657697576985769957700577015770257703577045770557706577075770857709577105771157712577135771457715577165771757718577195772057721577225772357724577255772657727577285772957730577315773257733577345773557736577375773857739577405774157742577435774457745577465774757748577495775057751577525775357754577555775657757577585775957760577615776257763577645776557766577675776857769577705777157772577735777457775577765777757778577795778057781577825778357784577855778657787577885778957790577915779257793577945779557796577975779857799578005780157802578035780457805578065780757808578095781057811578125781357814578155781657817578185781957820578215782257823578245782557826578275782857829578305783157832578335783457835578365783757838578395784057841578425784357844578455784657847578485784957850578515785257853578545785557856578575785857859578605786157862578635786457865578665786757868578695787057871578725787357874578755787657877578785787957880578815788257883578845788557886578875788857889578905789157892578935789457895578965789757898578995790057901579025790357904579055790657907579085790957910579115791257913579145791557916579175791857919579205792157922579235792457925579265792757928579295793057931579325793357934579355793657937579385793957940579415794257943579445794557946579475794857949579505795157952579535795457955579565795757958579595796057961579625796357964579655796657967579685796957970579715797257973579745797557976579775797857979579805798157982579835798457985579865798757988579895799057991579925799357994579955799657997579985799958000580015800258003580045800558006580075800858009580105801158012580135801458015580165801758018580195802058021580225802358024580255802658027580285802958030580315803258033580345803558036580375803858039580405804158042580435804458045580465804758048580495805058051580525805358054580555805658057580585805958060580615806258063580645806558066580675806858069580705807158072580735807458075580765807758078580795808058081580825808358084580855808658087580885808958090580915809258093580945809558096580975809858099581005810158102581035810458105581065810758108581095811058111581125811358114581155811658117581185811958120581215812258123581245812558126581275812858129581305813158132581335813458135581365813758138581395814058141581425814358144581455814658147581485814958150581515815258153581545815558156581575815858159581605816158162581635816458165581665816758168581695817058171581725817358174581755817658177581785817958180581815818258183581845818558186581875818858189581905819158192581935819458195581965819758198581995820058201582025820358204582055820658207582085820958210582115821258213582145821558216582175821858219582205822158222582235822458225582265822758228582295823058231582325823358234582355823658237582385823958240582415824258243582445824558246582475824858249582505825158252582535825458255582565825758258582595826058261582625826358264582655826658267582685826958270582715827258273582745827558276582775827858279582805828158282582835828458285582865828758288582895829058291582925829358294582955829658297582985829958300583015830258303583045830558306583075830858309583105831158312583135831458315583165831758318583195832058321583225832358324583255832658327583285832958330583315833258333583345833558336583375833858339583405834158342583435834458345583465834758348583495835058351583525835358354583555835658357583585835958360583615836258363583645836558366583675836858369583705837158372583735837458375583765837758378583795838058381583825838358384583855838658387583885838958390583915839258393583945839558396583975839858399584005840158402584035840458405584065840758408584095841058411584125841358414584155841658417584185841958420584215842258423584245842558426584275842858429584305843158432584335843458435584365843758438584395844058441584425844358444584455844658447584485844958450584515845258453584545845558456584575845858459584605846158462584635846458465584665846758468584695847058471584725847358474584755847658477584785847958480584815848258483584845848558486584875848858489584905849158492584935849458495584965849758498584995850058501585025850358504585055850658507585085850958510585115851258513585145851558516585175851858519585205852158522585235852458525585265852758528585295853058531585325853358534585355853658537585385853958540585415854258543585445854558546585475854858549585505855158552585535855458555585565855758558585595856058561585625856358564585655856658567585685856958570585715857258573585745857558576585775857858579585805858158582585835858458585585865858758588585895859058591585925859358594585955859658597585985859958600586015860258603586045860558606586075860858609586105861158612586135861458615586165861758618586195862058621586225862358624586255862658627586285862958630586315863258633586345863558636586375863858639586405864158642586435864458645586465864758648586495865058651586525865358654586555865658657586585865958660586615866258663586645866558666586675866858669586705867158672586735867458675586765867758678586795868058681586825868358684586855868658687586885868958690586915869258693586945869558696586975869858699587005870158702587035870458705587065870758708587095871058711587125871358714587155871658717587185871958720587215872258723587245872558726587275872858729587305873158732587335873458735587365873758738587395874058741587425874358744587455874658747587485874958750587515875258753587545875558756587575875858759587605876158762587635876458765587665876758768587695877058771587725877358774587755877658777587785877958780587815878258783587845878558786587875878858789587905879158792587935879458795587965879758798587995880058801588025880358804588055880658807588085880958810588115881258813588145881558816588175881858819588205882158822588235882458825588265882758828588295883058831588325883358834588355883658837588385883958840588415884258843588445884558846588475884858849588505885158852588535885458855588565885758858588595886058861588625886358864588655886658867588685886958870588715887258873588745887558876588775887858879588805888158882588835888458885588865888758888588895889058891588925889358894588955889658897588985889958900589015890258903589045890558906589075890858909589105891158912589135891458915589165891758918589195892058921589225892358924589255892658927589285892958930589315893258933589345893558936589375893858939589405894158942589435894458945589465894758948589495895058951589525895358954589555895658957589585895958960589615896258963589645896558966589675896858969589705897158972589735897458975589765897758978589795898058981589825898358984589855898658987589885898958990589915899258993589945899558996589975899858999590005900159002590035900459005590065900759008590095901059011590125901359014590155901659017590185901959020590215902259023590245902559026590275902859029590305903159032590335903459035590365903759038590395904059041590425904359044590455904659047590485904959050590515905259053590545905559056590575905859059590605906159062590635906459065590665906759068590695907059071590725907359074590755907659077590785907959080590815908259083590845908559086590875908859089590905909159092590935909459095590965909759098590995910059101591025910359104591055910659107591085910959110591115911259113591145911559116591175911859119591205912159122591235912459125591265912759128591295913059131591325913359134591355913659137591385913959140591415914259143591445914559146591475914859149591505915159152591535915459155591565915759158591595916059161591625916359164591655916659167591685916959170591715917259173591745917559176591775917859179591805918159182591835918459185591865918759188591895919059191591925919359194591955919659197591985919959200592015920259203592045920559206592075920859209592105921159212592135921459215592165921759218592195922059221592225922359224592255922659227592285922959230592315923259233592345923559236592375923859239592405924159242592435924459245592465924759248592495925059251592525925359254592555925659257592585925959260592615926259263592645926559266592675926859269592705927159272592735927459275592765927759278592795928059281592825928359284592855928659287592885928959290592915929259293592945929559296592975929859299593005930159302593035930459305593065930759308593095931059311593125931359314593155931659317593185931959320593215932259323593245932559326593275932859329593305933159332593335933459335593365933759338593395934059341593425934359344593455934659347593485934959350593515935259353593545935559356593575935859359593605936159362593635936459365593665936759368593695937059371593725937359374593755937659377593785937959380593815938259383593845938559386593875938859389593905939159392593935939459395593965939759398593995940059401594025940359404594055940659407594085940959410594115941259413594145941559416594175941859419594205942159422594235942459425594265942759428594295943059431594325943359434594355943659437594385943959440594415944259443594445944559446594475944859449594505945159452594535945459455594565945759458594595946059461594625946359464594655946659467594685946959470594715947259473594745947559476594775947859479594805948159482594835948459485594865948759488594895949059491594925949359494594955949659497594985949959500595015950259503595045950559506595075950859509595105951159512595135951459515595165951759518595195952059521595225952359524595255952659527595285952959530595315953259533595345953559536595375953859539595405954159542595435954459545595465954759548595495955059551595525955359554595555955659557595585955959560595615956259563595645956559566595675956859569595705957159572595735957459575595765957759578595795958059581595825958359584595855958659587595885958959590595915959259593595945959559596595975959859599596005960159602596035960459605596065960759608596095961059611596125961359614596155961659617596185961959620596215962259623596245962559626596275962859629596305963159632596335963459635596365963759638596395964059641596425964359644596455964659647596485964959650596515965259653596545965559656596575965859659596605966159662596635966459665596665966759668596695967059671596725967359674596755967659677596785967959680596815968259683596845968559686596875968859689596905969159692596935969459695596965969759698596995970059701597025970359704597055970659707597085970959710597115971259713597145971559716597175971859719597205972159722597235972459725597265972759728597295973059731597325973359734597355973659737597385973959740597415974259743597445974559746597475974859749597505975159752597535975459755597565975759758597595976059761597625976359764597655976659767597685976959770597715977259773597745977559776597775977859779597805978159782597835978459785597865978759788597895979059791597925979359794597955979659797597985979959800598015980259803598045980559806598075980859809598105981159812598135981459815598165981759818598195982059821598225982359824598255982659827598285982959830598315983259833598345983559836598375983859839598405984159842598435984459845598465984759848598495985059851598525985359854598555985659857598585985959860598615986259863598645986559866598675986859869598705987159872598735987459875598765987759878598795988059881598825988359884598855988659887598885988959890598915989259893598945989559896598975989859899599005990159902599035990459905599065990759908599095991059911599125991359914599155991659917599185991959920599215992259923599245992559926599275992859929599305993159932599335993459935599365993759938599395994059941599425994359944599455994659947599485994959950599515995259953599545995559956599575995859959599605996159962599635996459965599665996759968599695997059971599725997359974599755997659977599785997959980599815998259983599845998559986599875998859989599905999159992599935999459995599965999759998599996000060001600026000360004600056000660007600086000960010600116001260013600146001560016600176001860019600206002160022600236002460025600266002760028600296003060031600326003360034600356003660037600386003960040600416004260043600446004560046600476004860049600506005160052600536005460055600566005760058600596006060061600626006360064600656006660067600686006960070600716007260073600746007560076600776007860079600806008160082600836008460085600866008760088600896009060091600926009360094600956009660097600986009960100601016010260103601046010560106601076010860109601106011160112601136011460115601166011760118601196012060121601226012360124601256012660127601286012960130601316013260133601346013560136601376013860139601406014160142601436014460145601466014760148601496015060151601526015360154601556015660157601586015960160601616016260163601646016560166601676016860169601706017160172601736017460175601766017760178601796018060181601826018360184601856018660187601886018960190601916019260193601946019560196601976019860199602006020160202602036020460205602066020760208602096021060211602126021360214602156021660217602186021960220602216022260223602246022560226602276022860229602306023160232602336023460235602366023760238602396024060241602426024360244602456024660247602486024960250602516025260253602546025560256602576025860259602606026160262602636026460265602666026760268602696027060271602726027360274602756027660277602786027960280602816028260283602846028560286602876028860289602906029160292602936029460295602966029760298602996030060301603026030360304603056030660307603086030960310603116031260313603146031560316603176031860319603206032160322603236032460325603266032760328603296033060331603326033360334603356033660337603386033960340603416034260343603446034560346603476034860349603506035160352603536035460355603566035760358603596036060361603626036360364603656036660367603686036960370603716037260373603746037560376603776037860379603806038160382603836038460385603866038760388603896039060391603926039360394603956039660397603986039960400604016040260403604046040560406604076040860409604106041160412604136041460415604166041760418604196042060421604226042360424604256042660427604286042960430604316043260433604346043560436604376043860439604406044160442604436044460445604466044760448604496045060451604526045360454604556045660457604586045960460604616046260463604646046560466604676046860469604706047160472604736047460475604766047760478604796048060481604826048360484604856048660487604886048960490604916049260493604946049560496604976049860499605006050160502605036050460505605066050760508605096051060511605126051360514605156051660517605186051960520605216052260523605246052560526605276052860529605306053160532605336053460535605366053760538605396054060541605426054360544605456054660547605486054960550605516055260553605546055560556605576055860559605606056160562605636056460565605666056760568605696057060571605726057360574605756057660577605786057960580605816058260583605846058560586605876058860589605906059160592605936059460595605966059760598605996060060601606026060360604606056060660607606086060960610606116061260613606146061560616606176061860619606206062160622606236062460625606266062760628606296063060631606326063360634606356063660637606386063960640606416064260643606446064560646606476064860649606506065160652606536065460655606566065760658606596066060661606626066360664606656066660667606686066960670606716067260673606746067560676606776067860679606806068160682606836068460685606866068760688606896069060691606926069360694606956069660697606986069960700607016070260703607046070560706607076070860709607106071160712607136071460715607166071760718607196072060721607226072360724607256072660727607286072960730607316073260733607346073560736607376073860739607406074160742607436074460745607466074760748607496075060751607526075360754607556075660757607586075960760607616076260763607646076560766607676076860769607706077160772607736077460775607766077760778607796078060781607826078360784607856078660787607886078960790607916079260793607946079560796607976079860799608006080160802608036080460805608066080760808608096081060811608126081360814608156081660817608186081960820608216082260823608246082560826608276082860829608306083160832608336083460835608366083760838608396084060841608426084360844608456084660847608486084960850608516085260853608546085560856608576085860859608606086160862608636086460865608666086760868608696087060871608726087360874608756087660877608786087960880608816088260883608846088560886608876088860889608906089160892608936089460895608966089760898608996090060901609026090360904609056090660907609086090960910609116091260913609146091560916609176091860919609206092160922609236092460925609266092760928609296093060931609326093360934609356093660937609386093960940609416094260943609446094560946609476094860949609506095160952609536095460955609566095760958609596096060961609626096360964609656096660967609686096960970609716097260973609746097560976609776097860979609806098160982609836098460985609866098760988609896099060991609926099360994609956099660997609986099961000610016100261003610046100561006610076100861009610106101161012610136101461015610166101761018610196102061021610226102361024610256102661027610286102961030610316103261033610346103561036610376103861039610406104161042610436104461045610466104761048610496105061051610526105361054610556105661057610586105961060610616106261063610646106561066610676106861069610706107161072610736107461075610766107761078610796108061081610826108361084610856108661087610886108961090610916109261093610946109561096610976109861099611006110161102611036110461105611066110761108611096111061111611126111361114611156111661117611186111961120611216112261123611246112561126611276112861129611306113161132611336113461135611366113761138611396114061141611426114361144611456114661147611486114961150611516115261153611546115561156611576115861159611606116161162611636116461165611666116761168611696117061171611726117361174611756117661177611786117961180611816118261183611846118561186611876118861189611906119161192611936119461195611966119761198611996120061201612026120361204612056120661207612086120961210612116121261213612146121561216612176121861219612206122161222612236122461225612266122761228612296123061231612326123361234612356123661237612386123961240612416124261243612446124561246612476124861249612506125161252612536125461255612566125761258612596126061261612626126361264612656126661267612686126961270612716127261273612746127561276612776127861279612806128161282612836128461285612866128761288612896129061291612926129361294612956129661297612986129961300613016130261303613046130561306613076130861309613106131161312613136131461315613166131761318613196132061321613226132361324613256132661327613286132961330613316133261333613346133561336613376133861339613406134161342613436134461345613466134761348613496135061351613526135361354613556135661357613586135961360613616136261363613646136561366613676136861369613706137161372613736137461375613766137761378613796138061381613826138361384613856138661387613886138961390613916139261393613946139561396613976139861399614006140161402614036140461405614066140761408614096141061411614126141361414614156141661417614186141961420614216142261423614246142561426614276142861429614306143161432614336143461435614366143761438614396144061441614426144361444614456144661447614486144961450614516145261453614546145561456614576145861459614606146161462614636146461465614666146761468614696147061471614726147361474614756147661477614786147961480614816148261483614846148561486614876148861489614906149161492614936149461495614966149761498614996150061501615026150361504615056150661507615086150961510615116151261513615146151561516615176151861519615206152161522615236152461525615266152761528615296153061531615326153361534615356153661537615386153961540615416154261543615446154561546615476154861549615506155161552615536155461555615566155761558615596156061561615626156361564615656156661567615686156961570615716157261573615746157561576615776157861579615806158161582615836158461585615866158761588615896159061591615926159361594615956159661597615986159961600616016160261603616046160561606616076160861609616106161161612616136161461615616166161761618616196162061621616226162361624616256162661627616286162961630616316163261633616346163561636616376163861639616406164161642616436164461645616466164761648616496165061651616526165361654616556165661657616586165961660616616166261663616646166561666616676166861669616706167161672616736167461675616766167761678616796168061681616826168361684616856168661687616886168961690616916169261693616946169561696616976169861699617006170161702617036170461705617066170761708617096171061711617126171361714617156171661717617186171961720617216172261723617246172561726617276172861729617306173161732617336173461735617366173761738617396174061741617426174361744617456174661747617486174961750617516175261753617546175561756617576175861759617606176161762617636176461765617666176761768617696177061771617726177361774617756177661777617786177961780617816178261783617846178561786617876178861789617906179161792617936179461795617966179761798617996180061801618026180361804618056180661807618086180961810618116181261813618146181561816618176181861819618206182161822618236182461825618266182761828618296183061831618326183361834618356183661837618386183961840618416184261843618446184561846618476184861849618506185161852618536185461855618566185761858618596186061861618626186361864618656186661867618686186961870618716187261873618746187561876618776187861879618806188161882618836188461885618866188761888618896189061891618926189361894618956189661897618986189961900619016190261903619046190561906619076190861909619106191161912619136191461915619166191761918619196192061921619226192361924619256192661927619286192961930619316193261933619346193561936619376193861939619406194161942619436194461945619466194761948619496195061951619526195361954619556195661957619586195961960619616196261963619646196561966619676196861969619706197161972619736197461975619766197761978619796198061981619826198361984619856198661987619886198961990619916199261993619946199561996619976199861999620006200162002620036200462005620066200762008620096201062011620126201362014620156201662017620186201962020620216202262023620246202562026620276202862029620306203162032620336203462035620366203762038620396204062041620426204362044620456204662047620486204962050620516205262053620546205562056620576205862059620606206162062620636206462065620666206762068620696207062071620726207362074620756207662077620786207962080620816208262083620846208562086620876208862089620906209162092620936209462095620966209762098620996210062101621026210362104621056210662107621086210962110621116211262113621146211562116621176211862119621206212162122621236212462125621266212762128621296213062131621326213362134621356213662137621386213962140621416214262143621446214562146621476214862149621506215162152621536215462155621566215762158621596216062161621626216362164621656216662167621686216962170621716217262173621746217562176621776217862179621806218162182621836218462185621866218762188621896219062191621926219362194621956219662197621986219962200622016220262203622046220562206622076220862209622106221162212622136221462215622166221762218622196222062221622226222362224622256222662227622286222962230622316223262233622346223562236622376223862239622406224162242622436224462245622466224762248622496225062251622526225362254622556225662257622586225962260622616226262263622646226562266622676226862269622706227162272622736227462275622766227762278622796228062281622826228362284622856228662287622886228962290622916229262293622946229562296622976229862299623006230162302623036230462305623066230762308623096231062311623126231362314623156231662317623186231962320623216232262323623246232562326623276232862329623306233162332623336233462335623366233762338623396234062341623426234362344623456234662347623486234962350
  1. /*!
  2. *
  3. * deck.gl.js (https://github.com/SuperMap/deck.gl.git)
  4. * license: MIT
  5. *
  6. * origin: 'https://github.com/uber/deck.gl.git'
  7. * fork: 'https://github.com/SuperMap/deck.gl.git'
  8. * branch: 'https://github.com/SuperMap/deck.gl/tree/deck.gl-for-iclient'
  9. *
  10. *
  11. */
  12. (function webpackUniversalModuleDefinition(root, factory) {
  13. if(typeof exports === 'object' && typeof module === 'object')
  14. module.exports = factory();
  15. else if(typeof define === 'function' && define.amd)
  16. define([], factory);
  17. else if(typeof exports === 'object')
  18. exports["deckgl"] = factory();
  19. else
  20. root["deckgl"] = factory();
  21. })(this, function() {
  22. return /******/ (function(modules) { // webpackBootstrap
  23. /******/ // The module cache
  24. /******/ var installedModules = {};
  25. /******/
  26. /******/ // The require function
  27. /******/ function __webpack_require__(moduleId) {
  28. /******/
  29. /******/ // Check if module is in cache
  30. /******/ if(installedModules[moduleId]) {
  31. /******/ return installedModules[moduleId].exports;
  32. /******/ }
  33. /******/ // Create a new module (and put it into the cache)
  34. /******/ var module = installedModules[moduleId] = {
  35. /******/ i: moduleId,
  36. /******/ l: false,
  37. /******/ exports: {}
  38. /******/ };
  39. /******/
  40. /******/ // Execute the module function
  41. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  42. /******/
  43. /******/ // Flag the module as loaded
  44. /******/ module.l = true;
  45. /******/
  46. /******/ // Return the exports of the module
  47. /******/ return module.exports;
  48. /******/ }
  49. /******/
  50. /******/
  51. /******/ // expose the modules object (__webpack_modules__)
  52. /******/ __webpack_require__.m = modules;
  53. /******/
  54. /******/ // expose the module cache
  55. /******/ __webpack_require__.c = installedModules;
  56. /******/
  57. /******/ // identity function for calling harmony imports with the correct context
  58. /******/ __webpack_require__.i = function(value) { return value; };
  59. /******/
  60. /******/ // define getter function for harmony exports
  61. /******/ __webpack_require__.d = function(exports, name, getter) {
  62. /******/ if(!__webpack_require__.o(exports, name)) {
  63. /******/ Object.defineProperty(exports, name, {
  64. /******/ configurable: false,
  65. /******/ enumerable: true,
  66. /******/ get: getter
  67. /******/ });
  68. /******/ }
  69. /******/ };
  70. /******/
  71. /******/ // getDefaultExport function for compatibility with non-harmony modules
  72. /******/ __webpack_require__.n = function(module) {
  73. /******/ var getter = module && module.__esModule ?
  74. /******/ function getDefault() { return module['default']; } :
  75. /******/ function getModuleExports() { return module; };
  76. /******/ __webpack_require__.d(getter, 'a', getter);
  77. /******/ return getter;
  78. /******/ };
  79. /******/
  80. /******/ // Object.prototype.hasOwnProperty.call
  81. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  82. /******/
  83. /******/ // __webpack_public_path__
  84. /******/ __webpack_require__.p = "";
  85. /******/
  86. /******/ // Load entry module and return exports
  87. /******/ return __webpack_require__(__webpack_require__.s = 288);
  88. /******/ })
  89. /************************************************************************/
  90. /******/ ([
  91. /* 0 */
  92. /***/ (function(module, exports, __webpack_require__) {
  93. var global = __webpack_require__(3);
  94. var core = __webpack_require__(33);
  95. var hide = __webpack_require__(19);
  96. var redefine = __webpack_require__(20);
  97. var ctx = __webpack_require__(28);
  98. var PROTOTYPE = 'prototype';
  99. var $export = function (type, name, source) {
  100. var IS_FORCED = type & $export.F;
  101. var IS_GLOBAL = type & $export.G;
  102. var IS_STATIC = type & $export.S;
  103. var IS_PROTO = type & $export.P;
  104. var IS_BIND = type & $export.B;
  105. var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];
  106. var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
  107. var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
  108. var key, own, out, exp;
  109. if (IS_GLOBAL) source = name;
  110. for (key in source) {
  111. // contains in native
  112. own = !IS_FORCED && target && target[key] !== undefined;
  113. // export native or passed
  114. out = (own ? target : source)[key];
  115. // bind timers to global for call from export context
  116. exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
  117. // extend global
  118. if (target) redefine(target, key, out, type & $export.U);
  119. // export
  120. if (exports[key] != out) hide(exports, key, exp);
  121. if (IS_PROTO && expProto[key] != out) expProto[key] = out;
  122. }
  123. };
  124. global.core = core;
  125. // type bitmap
  126. $export.F = 1; // forced
  127. $export.G = 2; // global
  128. $export.S = 4; // static
  129. $export.P = 8; // proto
  130. $export.B = 16; // bind
  131. $export.W = 32; // wrap
  132. $export.U = 64; // safe
  133. $export.R = 128; // real proto method for `library`
  134. module.exports = $export;
  135. /***/ }),
  136. /* 1 */
  137. /***/ (function(module, exports, __webpack_require__) {
  138. "use strict";
  139. /* WEBPACK VAR INJECTION */(function(global) {
  140. // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
  141. // original notice:
  142. /*!
  143. * The buffer module from node.js, for the browser.
  144. *
  145. * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
  146. * @license MIT
  147. */
  148. function compare(a, b) {
  149. if (a === b) {
  150. return 0;
  151. }
  152. var x = a.length;
  153. var y = b.length;
  154. for (var i = 0, len = Math.min(x, y); i < len; ++i) {
  155. if (a[i] !== b[i]) {
  156. x = a[i];
  157. y = b[i];
  158. break;
  159. }
  160. }
  161. if (x < y) {
  162. return -1;
  163. }
  164. if (y < x) {
  165. return 1;
  166. }
  167. return 0;
  168. }
  169. function isBuffer(b) {
  170. if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
  171. return global.Buffer.isBuffer(b);
  172. }
  173. return !!(b != null && b._isBuffer);
  174. }
  175. // based on node assert, original notice:
  176. // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
  177. //
  178. // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
  179. //
  180. // Originally from narwhal.js (http://narwhaljs.org)
  181. // Copyright (c) 2009 Thomas Robinson <280north.com>
  182. //
  183. // Permission is hereby granted, free of charge, to any person obtaining a copy
  184. // of this software and associated documentation files (the 'Software'), to
  185. // deal in the Software without restriction, including without limitation the
  186. // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  187. // sell copies of the Software, and to permit persons to whom the Software is
  188. // furnished to do so, subject to the following conditions:
  189. //
  190. // The above copyright notice and this permission notice shall be included in
  191. // all copies or substantial portions of the Software.
  192. //
  193. // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  194. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  195. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  196. // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  197. // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  198. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  199. var util = __webpack_require__(684);
  200. var hasOwn = Object.prototype.hasOwnProperty;
  201. var pSlice = Array.prototype.slice;
  202. var functionsHaveNames = (function () {
  203. return function foo() {}.name === 'foo';
  204. }());
  205. function pToString (obj) {
  206. return Object.prototype.toString.call(obj);
  207. }
  208. function isView(arrbuf) {
  209. if (isBuffer(arrbuf)) {
  210. return false;
  211. }
  212. if (typeof global.ArrayBuffer !== 'function') {
  213. return false;
  214. }
  215. if (typeof ArrayBuffer.isView === 'function') {
  216. return ArrayBuffer.isView(arrbuf);
  217. }
  218. if (!arrbuf) {
  219. return false;
  220. }
  221. if (arrbuf instanceof DataView) {
  222. return true;
  223. }
  224. if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
  225. return true;
  226. }
  227. return false;
  228. }
  229. // 1. The assert module provides functions that throw
  230. // AssertionError's when particular conditions are not met. The
  231. // assert module must conform to the following interface.
  232. var assert = module.exports = ok;
  233. // 2. The AssertionError is defined in assert.
  234. // new assert.AssertionError({ message: message,
  235. // actual: actual,
  236. // expected: expected })
  237. var regex = /\s*function\s+([^\(\s]*)\s*/;
  238. // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
  239. function getName(func) {
  240. if (!util.isFunction(func)) {
  241. return;
  242. }
  243. if (functionsHaveNames) {
  244. return func.name;
  245. }
  246. var str = func.toString();
  247. var match = str.match(regex);
  248. return match && match[1];
  249. }
  250. assert.AssertionError = function AssertionError(options) {
  251. this.name = 'AssertionError';
  252. this.actual = options.actual;
  253. this.expected = options.expected;
  254. this.operator = options.operator;
  255. if (options.message) {
  256. this.message = options.message;
  257. this.generatedMessage = false;
  258. } else {
  259. this.message = getMessage(this);
  260. this.generatedMessage = true;
  261. }
  262. var stackStartFunction = options.stackStartFunction || fail;
  263. if (Error.captureStackTrace) {
  264. Error.captureStackTrace(this, stackStartFunction);
  265. } else {
  266. // non v8 browsers so we can have a stacktrace
  267. var err = new Error();
  268. if (err.stack) {
  269. var out = err.stack;
  270. // try to strip useless frames
  271. var fn_name = getName(stackStartFunction);
  272. var idx = out.indexOf('\n' + fn_name);
  273. if (idx >= 0) {
  274. // once we have located the function frame
  275. // we need to strip out everything before it (and its line)
  276. var next_line = out.indexOf('\n', idx + 1);
  277. out = out.substring(next_line + 1);
  278. }
  279. this.stack = out;
  280. }
  281. }
  282. };
  283. // assert.AssertionError instanceof Error
  284. util.inherits(assert.AssertionError, Error);
  285. function truncate(s, n) {
  286. if (typeof s === 'string') {
  287. return s.length < n ? s : s.slice(0, n);
  288. } else {
  289. return s;
  290. }
  291. }
  292. function inspect(something) {
  293. if (functionsHaveNames || !util.isFunction(something)) {
  294. return util.inspect(something);
  295. }
  296. var rawname = getName(something);
  297. var name = rawname ? ': ' + rawname : '';
  298. return '[Function' + name + ']';
  299. }
  300. function getMessage(self) {
  301. return truncate(inspect(self.actual), 128) + ' ' +
  302. self.operator + ' ' +
  303. truncate(inspect(self.expected), 128);
  304. }
  305. // At present only the three keys mentioned above are used and
  306. // understood by the spec. Implementations or sub modules can pass
  307. // other keys to the AssertionError's constructor - they will be
  308. // ignored.
  309. // 3. All of the following functions must throw an AssertionError
  310. // when a corresponding condition is not met, with a message that
  311. // may be undefined if not provided. All assertion methods provide
  312. // both the actual and expected values to the assertion error for
  313. // display purposes.
  314. function fail(actual, expected, message, operator, stackStartFunction) {
  315. throw new assert.AssertionError({
  316. message: message,
  317. actual: actual,
  318. expected: expected,
  319. operator: operator,
  320. stackStartFunction: stackStartFunction
  321. });
  322. }
  323. // EXTENSION! allows for well behaved errors defined elsewhere.
  324. assert.fail = fail;
  325. // 4. Pure assertion tests whether a value is truthy, as determined
  326. // by !!guard.
  327. // assert.ok(guard, message_opt);
  328. // This statement is equivalent to assert.equal(true, !!guard,
  329. // message_opt);. To test strictly for the value true, use
  330. // assert.strictEqual(true, guard, message_opt);.
  331. function ok(value, message) {
  332. if (!value) fail(value, true, message, '==', assert.ok);
  333. }
  334. assert.ok = ok;
  335. // 5. The equality assertion tests shallow, coercive equality with
  336. // ==.
  337. // assert.equal(actual, expected, message_opt);
  338. assert.equal = function equal(actual, expected, message) {
  339. if (actual != expected) fail(actual, expected, message, '==', assert.equal);
  340. };
  341. // 6. The non-equality assertion tests for whether two objects are not equal
  342. // with != assert.notEqual(actual, expected, message_opt);
  343. assert.notEqual = function notEqual(actual, expected, message) {
  344. if (actual == expected) {
  345. fail(actual, expected, message, '!=', assert.notEqual);
  346. }
  347. };
  348. // 7. The equivalence assertion tests a deep equality relation.
  349. // assert.deepEqual(actual, expected, message_opt);
  350. assert.deepEqual = function deepEqual(actual, expected, message) {
  351. if (!_deepEqual(actual, expected, false)) {
  352. fail(actual, expected, message, 'deepEqual', assert.deepEqual);
  353. }
  354. };
  355. assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
  356. if (!_deepEqual(actual, expected, true)) {
  357. fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
  358. }
  359. };
  360. function _deepEqual(actual, expected, strict, memos) {
  361. // 7.1. All identical values are equivalent, as determined by ===.
  362. if (actual === expected) {
  363. return true;
  364. } else if (isBuffer(actual) && isBuffer(expected)) {
  365. return compare(actual, expected) === 0;
  366. // 7.2. If the expected value is a Date object, the actual value is
  367. // equivalent if it is also a Date object that refers to the same time.
  368. } else if (util.isDate(actual) && util.isDate(expected)) {
  369. return actual.getTime() === expected.getTime();
  370. // 7.3 If the expected value is a RegExp object, the actual value is
  371. // equivalent if it is also a RegExp object with the same source and
  372. // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
  373. } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
  374. return actual.source === expected.source &&
  375. actual.global === expected.global &&
  376. actual.multiline === expected.multiline &&
  377. actual.lastIndex === expected.lastIndex &&
  378. actual.ignoreCase === expected.ignoreCase;
  379. // 7.4. Other pairs that do not both pass typeof value == 'object',
  380. // equivalence is determined by ==.
  381. } else if ((actual === null || typeof actual !== 'object') &&
  382. (expected === null || typeof expected !== 'object')) {
  383. return strict ? actual === expected : actual == expected;
  384. // If both values are instances of typed arrays, wrap their underlying
  385. // ArrayBuffers in a Buffer each to increase performance
  386. // This optimization requires the arrays to have the same type as checked by
  387. // Object.prototype.toString (aka pToString). Never perform binary
  388. // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
  389. // bit patterns are not identical.
  390. } else if (isView(actual) && isView(expected) &&
  391. pToString(actual) === pToString(expected) &&
  392. !(actual instanceof Float32Array ||
  393. actual instanceof Float64Array)) {
  394. return compare(new Uint8Array(actual.buffer),
  395. new Uint8Array(expected.buffer)) === 0;
  396. // 7.5 For all other Object pairs, including Array objects, equivalence is
  397. // determined by having the same number of owned properties (as verified
  398. // with Object.prototype.hasOwnProperty.call), the same set of keys
  399. // (although not necessarily the same order), equivalent values for every
  400. // corresponding key, and an identical 'prototype' property. Note: this
  401. // accounts for both named and indexed properties on Arrays.
  402. } else if (isBuffer(actual) !== isBuffer(expected)) {
  403. return false;
  404. } else {
  405. memos = memos || {actual: [], expected: []};
  406. var actualIndex = memos.actual.indexOf(actual);
  407. if (actualIndex !== -1) {
  408. if (actualIndex === memos.expected.indexOf(expected)) {
  409. return true;
  410. }
  411. }
  412. memos.actual.push(actual);
  413. memos.expected.push(expected);
  414. return objEquiv(actual, expected, strict, memos);
  415. }
  416. }
  417. function isArguments(object) {
  418. return Object.prototype.toString.call(object) == '[object Arguments]';
  419. }
  420. function objEquiv(a, b, strict, actualVisitedObjects) {
  421. if (a === null || a === undefined || b === null || b === undefined)
  422. return false;
  423. // if one is a primitive, the other must be same
  424. if (util.isPrimitive(a) || util.isPrimitive(b))
  425. return a === b;
  426. if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
  427. return false;
  428. var aIsArgs = isArguments(a);
  429. var bIsArgs = isArguments(b);
  430. if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
  431. return false;
  432. if (aIsArgs) {
  433. a = pSlice.call(a);
  434. b = pSlice.call(b);
  435. return _deepEqual(a, b, strict);
  436. }
  437. var ka = objectKeys(a);
  438. var kb = objectKeys(b);
  439. var key, i;
  440. // having the same number of owned properties (keys incorporates
  441. // hasOwnProperty)
  442. if (ka.length !== kb.length)
  443. return false;
  444. //the same set of keys (although not necessarily the same order),
  445. ka.sort();
  446. kb.sort();
  447. //~~~cheap key test
  448. for (i = ka.length - 1; i >= 0; i--) {
  449. if (ka[i] !== kb[i])
  450. return false;
  451. }
  452. //equivalent values for every corresponding key, and
  453. //~~~possibly expensive deep test
  454. for (i = ka.length - 1; i >= 0; i--) {
  455. key = ka[i];
  456. if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
  457. return false;
  458. }
  459. return true;
  460. }
  461. // 8. The non-equivalence assertion tests for any deep inequality.
  462. // assert.notDeepEqual(actual, expected, message_opt);
  463. assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
  464. if (_deepEqual(actual, expected, false)) {
  465. fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
  466. }
  467. };
  468. assert.notDeepStrictEqual = notDeepStrictEqual;
  469. function notDeepStrictEqual(actual, expected, message) {
  470. if (_deepEqual(actual, expected, true)) {
  471. fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
  472. }
  473. }
  474. // 9. The strict equality assertion tests strict equality, as determined by ===.
  475. // assert.strictEqual(actual, expected, message_opt);
  476. assert.strictEqual = function strictEqual(actual, expected, message) {
  477. if (actual !== expected) {
  478. fail(actual, expected, message, '===', assert.strictEqual);
  479. }
  480. };
  481. // 10. The strict non-equality assertion tests for strict inequality, as
  482. // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
  483. assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
  484. if (actual === expected) {
  485. fail(actual, expected, message, '!==', assert.notStrictEqual);
  486. }
  487. };
  488. function expectedException(actual, expected) {
  489. if (!actual || !expected) {
  490. return false;
  491. }
  492. if (Object.prototype.toString.call(expected) == '[object RegExp]') {
  493. return expected.test(actual);
  494. }
  495. try {
  496. if (actual instanceof expected) {
  497. return true;
  498. }
  499. } catch (e) {
  500. // Ignore. The instanceof check doesn't work for arrow functions.
  501. }
  502. if (Error.isPrototypeOf(expected)) {
  503. return false;
  504. }
  505. return expected.call({}, actual) === true;
  506. }
  507. function _tryBlock(block) {
  508. var error;
  509. try {
  510. block();
  511. } catch (e) {
  512. error = e;
  513. }
  514. return error;
  515. }
  516. function _throws(shouldThrow, block, expected, message) {
  517. var actual;
  518. if (typeof block !== 'function') {
  519. throw new TypeError('"block" argument must be a function');
  520. }
  521. if (typeof expected === 'string') {
  522. message = expected;
  523. expected = null;
  524. }
  525. actual = _tryBlock(block);
  526. message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
  527. (message ? ' ' + message : '.');
  528. if (shouldThrow && !actual) {
  529. fail(actual, expected, 'Missing expected exception' + message);
  530. }
  531. var userProvidedMessage = typeof message === 'string';
  532. var isUnwantedException = !shouldThrow && util.isError(actual);
  533. var isUnexpectedException = !shouldThrow && actual && !expected;
  534. if ((isUnwantedException &&
  535. userProvidedMessage &&
  536. expectedException(actual, expected)) ||
  537. isUnexpectedException) {
  538. fail(actual, expected, 'Got unwanted exception' + message);
  539. }
  540. if ((shouldThrow && actual && expected &&
  541. !expectedException(actual, expected)) || (!shouldThrow && actual)) {
  542. throw actual;
  543. }
  544. }
  545. // 11. Expected to throw an error:
  546. // assert.throws(block, Error_opt, message_opt);
  547. assert.throws = function(block, /*optional*/error, /*optional*/message) {
  548. _throws(true, block, error, message);
  549. };
  550. // EXTENSION! This is annoying to write outside this module.
  551. assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
  552. _throws(false, block, error, message);
  553. };
  554. assert.ifError = function(err) { if (err) throw err; };
  555. var objectKeys = Object.keys || function (obj) {
  556. var keys = [];
  557. for (var key in obj) {
  558. if (hasOwn.call(obj, key)) keys.push(key);
  559. }
  560. return keys;
  561. };
  562. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(47)))
  563. /***/ }),
  564. /* 2 */
  565. /***/ (function(module, exports, __webpack_require__) {
  566. var isObject = __webpack_require__(5);
  567. module.exports = function (it) {
  568. if (!isObject(it)) throw TypeError(it + ' is not an object!');
  569. return it;
  570. };
  571. /***/ }),
  572. /* 3 */
  573. /***/ (function(module, exports) {
  574. // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
  575. var global = module.exports = typeof window != 'undefined' && window.Math == Math
  576. ? window : typeof self != 'undefined' && self.Math == Math ? self
  577. // eslint-disable-next-line no-new-func
  578. : Function('return this')();
  579. if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
  580. /***/ }),
  581. /* 4 */
  582. /***/ (function(module, exports) {
  583. module.exports = function (exec) {
  584. try {
  585. return !!exec();
  586. } catch (e) {
  587. return true;
  588. }
  589. };
  590. /***/ }),
  591. /* 5 */
  592. /***/ (function(module, exports) {
  593. module.exports = function (it) {
  594. return typeof it === 'object' ? it !== null : typeof it === 'function';
  595. };
  596. /***/ }),
  597. /* 6 */
  598. /***/ (function(module, exports, __webpack_require__) {
  599. var store = __webpack_require__(98)('wks');
  600. var uid = __webpack_require__(58);
  601. var Symbol = __webpack_require__(3).Symbol;
  602. var USE_SYMBOL = typeof Symbol == 'function';
  603. var $exports = module.exports = function (name) {
  604. return store[name] || (store[name] =
  605. USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
  606. };
  607. $exports.store = store;
  608. /***/ }),
  609. /* 7 */
  610. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  611. "use strict";
  612. /* unused harmony export ERR_CONTEXT */
  613. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return ERR_WEBGL; });
  614. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return ERR_WEBGL2; });
  615. /* harmony export (immutable) */ __webpack_exports__["a"] = isWebGL;
  616. /* harmony export (immutable) */ __webpack_exports__["b"] = isWebGL2;
  617. /* harmony export (immutable) */ __webpack_exports__["j"] = assertWebGLContext;
  618. /* harmony export (immutable) */ __webpack_exports__["g"] = assertWebGL2Context;
  619. /* harmony export (immutable) */ __webpack_exports__["c"] = setContextDefaults;
  620. /* harmony export (immutable) */ __webpack_exports__["d"] = createGLContext;
  621. /* harmony export (immutable) */ __webpack_exports__["e"] = deleteGLContext;
  622. /* harmony export (immutable) */ __webpack_exports__["f"] = pollContext;
  623. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(38);
  624. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_utils_track_context_state__ = __webpack_require__(164);
  625. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__webgl_utils__ = __webpack_require__(60);
  626. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__context_debug__ = __webpack_require__(269);
  627. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__context_limits__ = __webpack_require__(165);
  628. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__helpers_query_manager__ = __webpack_require__(166);
  629. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__utils__ = __webpack_require__(8);
  630. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__init__ = __webpack_require__(106);
  631. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_assert__ = __webpack_require__(1);
  632. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_assert__);
  633. // WebGLRenderingContext related methods
  634. // Heuristic testing of contexts (to indentify debug wrappers around gl contexts)
  635. var GL_ARRAY_BUFFER = 0x8892;
  636. var GL_TEXTURE_BINDING_3D = 0x806A;
  637. var ERR_CONTEXT = 'Invalid WebGLRenderingContext';
  638. var ERR_WEBGL = ERR_CONTEXT;
  639. var ERR_WEBGL2 = 'Requires WebGL2';
  640. var ERR_WEBGL_MISSING_NODE = 'WebGL API is missing. To run luma.gl under Node.js, please "npm install gl"\nand import \'luma.gl/headless\' before importing \'luma.gl\'.';
  641. var ERR_HEADLESSGL_NOT_AVAILABLE = 'Cannot create headless WebGL context, headlessGL not available';
  642. var ERR_HEADLESSGL_FAILED = 'headlessGL failed to create headless WebGL context';
  643. function isWebGL(gl) {
  644. return Boolean(gl && (gl instanceof __WEBPACK_IMPORTED_MODULE_0__api__["b" /* WebGLRenderingContext */] || gl.ARRAY_BUFFER === GL_ARRAY_BUFFER));
  645. }
  646. function isWebGL2(gl) {
  647. return Boolean(gl && (gl instanceof __WEBPACK_IMPORTED_MODULE_0__api__["c" /* WebGL2RenderingContext */] || gl.TEXTURE_BINDING_3D === GL_TEXTURE_BINDING_3D));
  648. }
  649. function assertWebGLContext(gl) {
  650. // Need to handle debug context
  651. __WEBPACK_IMPORTED_MODULE_8_assert___default()(isWebGL(gl), ERR_CONTEXT);
  652. }
  653. function assertWebGL2Context(gl) {
  654. // Need to handle debug context
  655. __WEBPACK_IMPORTED_MODULE_8_assert___default()(isWebGL2(gl), ERR_WEBGL2);
  656. }
  657. var contextDefaults = {
  658. // COMMON CONTEXT PARAMETERS
  659. // Attempt to allocate WebGL2 context
  660. webgl2: true, // Attempt to create a WebGL2 context (false to force webgl1)
  661. webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)
  662. throwOnFailure: true,
  663. manageState: true,
  664. // BROWSER CONTEXT PARAMETERS
  665. canvas: null, // A canvas element or a canvas string id
  666. debug: false, // Instrument context (at the expense of performance)
  667. // HEADLESS CONTEXT PARAMETERS
  668. width: 800, // width are height are only used by headless gl
  669. height: 600
  670. // WEBGL/HEADLESS CONTEXT PARAMETERS
  671. // Remaining options are passed through to context creator
  672. };
  673. /*
  674. * Change default context creation parameters.
  675. * Main use case is regression test suite.
  676. */
  677. function setContextDefaults() {
  678. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  679. Object.assign(contextDefaults, { width: 1, height: 1 }, opts);
  680. }
  681. /*
  682. * Creates a context giving access to the WebGL API
  683. */
  684. /* eslint-disable complexity, max-statements */
  685. function createGLContext() {
  686. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  687. opts = Object.assign({}, contextDefaults, opts);
  688. var _opts = opts,
  689. canvas = _opts.canvas,
  690. width = _opts.width,
  691. height = _opts.height,
  692. throwOnError = _opts.throwOnError,
  693. manageState = _opts.manageState,
  694. debug = _opts.debug;
  695. // Error reporting function, enables exceptions to be disabled
  696. function onError(message) {
  697. if (throwOnError) {
  698. throw new Error(message);
  699. }
  700. // log.log(0, message);
  701. return null;
  702. }
  703. var gl = void 0;
  704. if (__WEBPACK_IMPORTED_MODULE_6__utils__["a" /* isBrowser */]) {
  705. // Make sure we have a real canvas ("canvas" can a string, a canvas or null)
  706. var realCanvas = void 0;
  707. if (!canvas) {
  708. realCanvas = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__webgl_utils__["c" /* createCanvas */])({ id: 'lumagl-canvas', width: width, height: height, onError: onError });
  709. } else if (typeof canvas === 'string') {
  710. realCanvas = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__webgl_utils__["d" /* getCanvas */])({ id: canvas });
  711. } else {
  712. realCanvas = canvas;
  713. }
  714. // Create a WebGL context in the canvas
  715. gl = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__webgl_utils__["e" /* createContext */])({ canvas: realCanvas, opts: opts });
  716. } else {
  717. // Create a headless-gl context under Node.js
  718. gl = _createHeadlessContext({ width: width, height: height, opts: opts, onError: onError });
  719. }
  720. if (!gl) {
  721. return null;
  722. }
  723. // Install context state tracking
  724. if (manageState) {
  725. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_utils_track_context_state__["a" /* default */])(gl, {
  726. copyState: false,
  727. log: function log() {
  728. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  729. args[_key] = arguments[_key];
  730. }
  731. return __WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].log.apply(__WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */], [1].concat(args));
  732. }
  733. });
  734. }
  735. // Add debug instrumentation to the context
  736. if (__WEBPACK_IMPORTED_MODULE_6__utils__["a" /* isBrowser */] && debug) {
  737. gl = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__context_debug__["a" /* makeDebugContext */])(gl, { debug: debug });
  738. // Debug forces log level to at least 1
  739. __WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].priority = Math.max(__WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].priority, 1);
  740. // Log some debug info about the context
  741. }
  742. logInfo(gl);
  743. // Add to seer integration
  744. return gl;
  745. }
  746. function deleteGLContext(gl) {}
  747. // Remove from seer integration
  748. // POLLING FOR PENDING QUERIES
  749. // Calling this function checks all pending queries for completion
  750. function pollContext(gl) {
  751. __WEBPACK_IMPORTED_MODULE_5__helpers_query_manager__["a" /* default */].poll(gl);
  752. }
  753. function logInfo(gl) {
  754. var webGL = isWebGL2(gl) ? 'WebGL2' : 'WebGL1';
  755. var info = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__context_limits__["d" /* glGetDebugInfo */])(gl);
  756. var driver = info ? '(' + info.vendor + ',' + info.renderer + ')' : '';
  757. var debug = gl.debug ? ' debug' : '';
  758. __WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].once(0, '' + webGL + debug + ' context ' + driver);
  759. }
  760. // Create headless gl context (for running under Node.js)
  761. function _createHeadlessContext(_ref) {
  762. var width = _ref.width,
  763. height = _ref.height,
  764. opts = _ref.opts,
  765. onError = _ref.onError;
  766. var webgl1 = opts.webgl1,
  767. webgl2 = opts.webgl2;
  768. if (webgl2 && !webgl1) {
  769. return onError('headless-gl does not support WebGL2');
  770. }
  771. if (!__WEBPACK_IMPORTED_MODULE_0__api__["d" /* webGLTypesAvailable */]) {
  772. return onError(ERR_WEBGL_MISSING_NODE);
  773. }
  774. if (!__WEBPACK_IMPORTED_MODULE_7__init__["default"].globals.headlessGL) {
  775. return onError(ERR_HEADLESSGL_NOT_AVAILABLE);
  776. }
  777. var gl = __WEBPACK_IMPORTED_MODULE_7__init__["default"].globals.headlessGL(width, height, opts);
  778. if (!gl) {
  779. return onError(ERR_HEADLESSGL_FAILED);
  780. }
  781. return gl;
  782. }
  783. //# sourceMappingURL=context.js.map
  784. /***/ }),
  785. /* 8 */
  786. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  787. "use strict";
  788. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_browser__ = __webpack_require__(262);
  789. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__is_browser__["a"]; });
  790. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__promise_utils__ = __webpack_require__(660);
  791. /* unused harmony reexport promisify */
  792. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils__ = __webpack_require__(661);
  793. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_2__utils__["a"]; });
  794. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_2__utils__["b"]; });
  795. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_2__utils__["c"]; });
  796. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__log__ = __webpack_require__(263);
  797. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_3__log__["a"]; });
  798. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_3__log__["b"]; });
  799. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__typed_array_utils__ = __webpack_require__(163);
  800. /* unused harmony reexport getGLTypeFromTypedArray */
  801. /* unused harmony reexport getTypedArrayFromGLType */
  802. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_4__typed_array_utils__["c"]; });
  803. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_4__typed_array_utils__["d"]; });
  804. //# sourceMappingURL=index.js.map
  805. /***/ }),
  806. /* 9 */
  807. /***/ (function(module, exports, __webpack_require__) {
  808. // Thank's IE8 for his funny defineProperty
  809. module.exports = !__webpack_require__(4)(function () {
  810. return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
  811. });
  812. /***/ }),
  813. /* 10 */
  814. /***/ (function(module, exports, __webpack_require__) {
  815. var anObject = __webpack_require__(2);
  816. var IE8_DOM_DEFINE = __webpack_require__(207);
  817. var toPrimitive = __webpack_require__(37);
  818. var dP = Object.defineProperty;
  819. exports.f = __webpack_require__(9) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
  820. anObject(O);
  821. P = toPrimitive(P, true);
  822. anObject(Attributes);
  823. if (IE8_DOM_DEFINE) try {
  824. return dP(O, P, Attributes);
  825. } catch (e) { /* empty */ }
  826. if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
  827. if ('value' in Attributes) O[P] = Attributes.value;
  828. return O;
  829. };
  830. /***/ }),
  831. /* 11 */
  832. /***/ (function(module, exports, __webpack_require__) {
  833. // 7.1.15 ToLength
  834. var toInteger = __webpack_require__(36);
  835. var min = Math.min;
  836. module.exports = function (it) {
  837. return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
  838. };
  839. /***/ }),
  840. /* 12 */
  841. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  842. "use strict";
  843. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  844. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "experimental", function() { return experimental; });
  845. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__webgl_gl_constants__ = __webpack_require__(25);
  846. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "GL", function() { return __WEBPACK_IMPORTED_MODULE_0__webgl_gl_constants__["a"]; });
  847. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "glGet", function() { return __WEBPACK_IMPORTED_MODULE_0__webgl_gl_constants__["b"]; });
  848. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "glKey", function() { return __WEBPACK_IMPORTED_MODULE_0__webgl_gl_constants__["c"]; });
  849. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_utils__ = __webpack_require__(60);
  850. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "trackContextCreation", function() { return __WEBPACK_IMPORTED_MODULE_1__webgl_utils__["a"]; });
  851. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "trackContextState", function() { return __WEBPACK_IMPORTED_MODULE_1__webgl_utils__["b"]; });
  852. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__webgl_context__ = __webpack_require__(7);
  853. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isWebGL", function() { return __WEBPACK_IMPORTED_MODULE_2__webgl_context__["a"]; });
  854. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isWebGL2", function() { return __WEBPACK_IMPORTED_MODULE_2__webgl_context__["b"]; });
  855. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "setContextDefaults", function() { return __WEBPACK_IMPORTED_MODULE_2__webgl_context__["c"]; });
  856. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createGLContext", function() { return __WEBPACK_IMPORTED_MODULE_2__webgl_context__["d"]; });
  857. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "deleteGLContext", function() { return __WEBPACK_IMPORTED_MODULE_2__webgl_context__["e"]; });
  858. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "pollContext", function() { return __WEBPACK_IMPORTED_MODULE_2__webgl_context__["f"]; });
  859. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__webgl_context_state__ = __webpack_require__(68);
  860. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "resetParameters", function() { return __WEBPACK_IMPORTED_MODULE_3__webgl_context_state__["a"]; });
  861. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getParameter", function() { return __WEBPACK_IMPORTED_MODULE_3__webgl_context_state__["b"]; });
  862. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getParameters", function() { return __WEBPACK_IMPORTED_MODULE_3__webgl_context_state__["c"]; });
  863. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "setParameter", function() { return __WEBPACK_IMPORTED_MODULE_3__webgl_context_state__["d"]; });
  864. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "setParameters", function() { return __WEBPACK_IMPORTED_MODULE_3__webgl_context_state__["e"]; });
  865. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "withParameters", function() { return __WEBPACK_IMPORTED_MODULE_3__webgl_context_state__["f"]; });
  866. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getModifiedParameters", function() { return __WEBPACK_IMPORTED_MODULE_3__webgl_context_state__["g"]; });
  867. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__webgl_context_limits__ = __webpack_require__(165);
  868. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getContextInfo", function() { return __WEBPACK_IMPORTED_MODULE_4__webgl_context_limits__["a"]; });
  869. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getGLContextInfo", function() { return __WEBPACK_IMPORTED_MODULE_4__webgl_context_limits__["b"]; });
  870. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getContextLimits", function() { return __WEBPACK_IMPORTED_MODULE_4__webgl_context_limits__["c"]; });
  871. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "glGetDebugInfo", function() { return __WEBPACK_IMPORTED_MODULE_4__webgl_context_limits__["d"]; });
  872. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__webgl_context_features__ = __webpack_require__(108);
  873. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "FEATURES", function() { return __WEBPACK_IMPORTED_MODULE_5__webgl_context_features__["a"]; });
  874. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "hasFeature", function() { return __WEBPACK_IMPORTED_MODULE_5__webgl_context_features__["b"]; });
  875. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "hasFeatures", function() { return __WEBPACK_IMPORTED_MODULE_5__webgl_context_features__["c"]; });
  876. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getFeatures", function() { return __WEBPACK_IMPORTED_MODULE_5__webgl_context_features__["d"]; });
  877. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__webgl_context_debug__ = __webpack_require__(269);
  878. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "makeDebugContext", function() { return __WEBPACK_IMPORTED_MODULE_6__webgl_context_debug__["a"]; });
  879. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__webgl_api_debug_parameters__ = __webpack_require__(267);
  880. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "installParameterDefinitions", function() { return __WEBPACK_IMPORTED_MODULE_7__webgl_api_debug_parameters__["a"]; });
  881. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__webgl_buffer__ = __webpack_require__(67);
  882. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Buffer", function() { return __WEBPACK_IMPORTED_MODULE_8__webgl_buffer__["a"]; });
  883. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__webgl_shader__ = __webpack_require__(111);
  884. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Shader", function() { return __WEBPACK_IMPORTED_MODULE_9__webgl_shader__["a"]; });
  885. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "VertexShader", function() { return __WEBPACK_IMPORTED_MODULE_9__webgl_shader__["b"]; });
  886. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "FragmentShader", function() { return __WEBPACK_IMPORTED_MODULE_9__webgl_shader__["c"]; });
  887. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__webgl_program__ = __webpack_require__(109);
  888. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Program", function() { return __WEBPACK_IMPORTED_MODULE_10__webgl_program__["a"]; });
  889. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__webgl_framebuffer__ = __webpack_require__(69);
  890. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Framebuffer", function() { return __WEBPACK_IMPORTED_MODULE_11__webgl_framebuffer__["a"]; });
  891. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__webgl_renderbuffer__ = __webpack_require__(110);
  892. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Renderbuffer", function() { return __WEBPACK_IMPORTED_MODULE_12__webgl_renderbuffer__["a"]; });
  893. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__webgl_texture_2d__ = __webpack_require__(167);
  894. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Texture2D", function() { return __WEBPACK_IMPORTED_MODULE_13__webgl_texture_2d__["a"]; });
  895. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__webgl_texture_cube__ = __webpack_require__(275);
  896. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TextureCube", function() { return __WEBPACK_IMPORTED_MODULE_14__webgl_texture_cube__["a"]; });
  897. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__webgl_draw__ = __webpack_require__(270);
  898. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return __WEBPACK_IMPORTED_MODULE_15__webgl_draw__["a"]; });
  899. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__webgl_clear__ = __webpack_require__(107);
  900. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return __WEBPACK_IMPORTED_MODULE_16__webgl_clear__["a"]; });
  901. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "clearBuffer", function() { return __WEBPACK_IMPORTED_MODULE_16__webgl_clear__["b"]; });
  902. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__webgl_fence_sync__ = __webpack_require__(271);
  903. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "FenceSync", function() { return __WEBPACK_IMPORTED_MODULE_17__webgl_fence_sync__["a"]; });
  904. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__webgl_query__ = __webpack_require__(273);
  905. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Query", function() { return __WEBPACK_IMPORTED_MODULE_18__webgl_query__["a"]; });
  906. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__webgl_sampler__ = __webpack_require__(274);
  907. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Sampler", function() { return __WEBPACK_IMPORTED_MODULE_19__webgl_sampler__["a"]; });
  908. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__webgl_texture_3d__ = __webpack_require__(668);
  909. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Texture3D", function() { return __WEBPACK_IMPORTED_MODULE_20__webgl_texture_3d__["a"]; });
  910. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__webgl_texture_2d_array__ = __webpack_require__(667);
  911. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Texture2DArray", function() { return __WEBPACK_IMPORTED_MODULE_21__webgl_texture_2d_array__["a"]; });
  912. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__webgl_transform_feedback__ = __webpack_require__(276);
  913. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TransformFeedback", function() { return __WEBPACK_IMPORTED_MODULE_22__webgl_transform_feedback__["a"]; });
  914. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__webgl_vertex_array__ = __webpack_require__(169);
  915. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "VertexArray", function() { return __WEBPACK_IMPORTED_MODULE_23__webgl_vertex_array__["a"]; });
  916. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__webgl_uniform_buffer_layout__ = __webpack_require__(669);
  917. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "UniformBufferLayout", function() { return __WEBPACK_IMPORTED_MODULE_24__webgl_uniform_buffer_layout__["a"]; });
  918. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__core_model__ = __webpack_require__(104);
  919. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Model", function() { return __WEBPACK_IMPORTED_MODULE_25__core_model__["a"]; });
  920. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__core_animation_loop__ = __webpack_require__(249);
  921. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationLoop", function() { return __WEBPACK_IMPORTED_MODULE_26__core_animation_loop__["a"]; });
  922. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__core_pick_models__ = __webpack_require__(626);
  923. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "pickModels", function() { return __WEBPACK_IMPORTED_MODULE_27__core_pick_models__["a"]; });
  924. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__core_picking_colors__ = __webpack_require__(627);
  925. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "encodePickingColor", function() { return __WEBPACK_IMPORTED_MODULE_28__core_picking_colors__["a"]; });
  926. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "decodePickingColor", function() { return __WEBPACK_IMPORTED_MODULE_28__core_picking_colors__["b"]; });
  927. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getNullPickingColor", function() { return __WEBPACK_IMPORTED_MODULE_28__core_picking_colors__["c"]; });
  928. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__packages_events__ = __webpack_require__(641);
  929. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "addEvents", function() { return __WEBPACK_IMPORTED_MODULE_29__packages_events__["a"]; });
  930. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__geometry_geometry__ = __webpack_require__(45);
  931. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Geometry", function() { return __WEBPACK_IMPORTED_MODULE_30__geometry_geometry__["a"]; });
  932. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__geometry_cone_geometry__ = __webpack_require__(251);
  933. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ConeGeometry", function() { return __WEBPACK_IMPORTED_MODULE_31__geometry_cone_geometry__["a"]; });
  934. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__geometry_cube_geometry__ = __webpack_require__(252);
  935. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "CubeGeometry", function() { return __WEBPACK_IMPORTED_MODULE_32__geometry_cube_geometry__["a"]; });
  936. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__geometry_cylinder_geometry__ = __webpack_require__(253);
  937. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "CylinderGeometry", function() { return __WEBPACK_IMPORTED_MODULE_33__geometry_cylinder_geometry__["a"]; });
  938. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__geometry_ico_sphere_geometry__ = __webpack_require__(254);
  939. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "IcoSphereGeometry", function() { return __WEBPACK_IMPORTED_MODULE_34__geometry_ico_sphere_geometry__["a"]; });
  940. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__geometry_plane_geometry__ = __webpack_require__(255);
  941. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "PlaneGeometry", function() { return __WEBPACK_IMPORTED_MODULE_35__geometry_plane_geometry__["a"]; });
  942. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__geometry_sphere_geometry__ = __webpack_require__(256);
  943. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SphereGeometry", function() { return __WEBPACK_IMPORTED_MODULE_36__geometry_sphere_geometry__["a"]; });
  944. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__geometry_truncated_cone_geometry__ = __webpack_require__(105);
  945. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TruncatedConeGeometry", function() { return __WEBPACK_IMPORTED_MODULE_37__geometry_truncated_cone_geometry__["a"]; });
  946. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__models_cone__ = __webpack_require__(633);
  947. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Cone", function() { return __WEBPACK_IMPORTED_MODULE_38__models_cone__["a"]; });
  948. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_39__models_cube__ = __webpack_require__(634);
  949. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Cube", function() { return __WEBPACK_IMPORTED_MODULE_39__models_cube__["a"]; });
  950. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_40__models_cylinder__ = __webpack_require__(635);
  951. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Cylinder", function() { return __WEBPACK_IMPORTED_MODULE_40__models_cylinder__["a"]; });
  952. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_41__models_ico_sphere__ = __webpack_require__(636);
  953. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "IcoSphere", function() { return __WEBPACK_IMPORTED_MODULE_41__models_ico_sphere__["a"]; });
  954. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_42__models_plane__ = __webpack_require__(637);
  955. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Plane", function() { return __WEBPACK_IMPORTED_MODULE_42__models_plane__["a"]; });
  956. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_43__models_sphere__ = __webpack_require__(638);
  957. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Sphere", function() { return __WEBPACK_IMPORTED_MODULE_43__models_sphere__["a"]; });
  958. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_44__models_truncated_cone__ = __webpack_require__(639);
  959. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TruncatedCone", function() { return __WEBPACK_IMPORTED_MODULE_44__models_truncated_cone__["a"]; });
  960. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_45__models_clip_space_quad__ = __webpack_require__(632);
  961. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ClipSpaceQuad", function() { return __WEBPACK_IMPORTED_MODULE_45__models_clip_space_quad__["a"]; });
  962. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__io__ = __webpack_require__(630);
  963. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__io___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_46__io__);
  964. /* harmony reexport (binding) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_46__io__, "setPathPrefix")) __webpack_require__.d(__webpack_exports__, "setPathPrefix", function() { return __WEBPACK_IMPORTED_MODULE_46__io__["setPathPrefix"]; });
  965. /* harmony reexport (binding) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_46__io__, "loadFile")) __webpack_require__.d(__webpack_exports__, "loadFile", function() { return __WEBPACK_IMPORTED_MODULE_46__io__["loadFile"]; });
  966. /* harmony reexport (binding) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_46__io__, "loadImage")) __webpack_require__.d(__webpack_exports__, "loadImage", function() { return __WEBPACK_IMPORTED_MODULE_46__io__["loadImage"]; });
  967. /* harmony reexport (binding) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_46__io__, "loadFiles")) __webpack_require__.d(__webpack_exports__, "loadFiles", function() { return __WEBPACK_IMPORTED_MODULE_46__io__["loadFiles"]; });
  968. /* harmony reexport (binding) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_46__io__, "loadImages")) __webpack_require__.d(__webpack_exports__, "loadImages", function() { return __WEBPACK_IMPORTED_MODULE_46__io__["loadImages"]; });
  969. /* harmony reexport (binding) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_46__io__, "loadTextures")) __webpack_require__.d(__webpack_exports__, "loadTextures", function() { return __WEBPACK_IMPORTED_MODULE_46__io__["loadTextures"]; });
  970. /* harmony reexport (binding) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_46__io__, "loadProgram")) __webpack_require__.d(__webpack_exports__, "loadProgram", function() { return __WEBPACK_IMPORTED_MODULE_46__io__["loadProgram"]; });
  971. /* harmony reexport (binding) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_46__io__, "loadModel")) __webpack_require__.d(__webpack_exports__, "loadModel", function() { return __WEBPACK_IMPORTED_MODULE_46__io__["loadModel"]; });
  972. /* harmony reexport (binding) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_46__io__, "parseModel")) __webpack_require__.d(__webpack_exports__, "parseModel", function() { return __WEBPACK_IMPORTED_MODULE_46__io__["parseModel"]; });
  973. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_47__shadertools_lib_shader_cache__ = __webpack_require__(259);
  974. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ShaderCache", function() { return __WEBPACK_IMPORTED_MODULE_47__shadertools_lib_shader_cache__["a"]; });
  975. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_48__shadertools_lib_assemble_shaders__ = __webpack_require__(258);
  976. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "assembleShaders", function() { return __WEBPACK_IMPORTED_MODULE_48__shadertools_lib_assemble_shaders__["a"]; });
  977. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_49__shadertools_lib_shader_modules__ = __webpack_require__(162);
  978. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "registerShaderModules", function() { return __WEBPACK_IMPORTED_MODULE_49__shadertools_lib_shader_modules__["a"]; });
  979. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "setDefaultShaderModules", function() { return __WEBPACK_IMPORTED_MODULE_49__shadertools_lib_shader_modules__["b"]; });
  980. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_50__shadertools_modules_fp32_fp32__ = __webpack_require__(646);
  981. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "fp32", function() { return __WEBPACK_IMPORTED_MODULE_50__shadertools_modules_fp32_fp32__["a"]; });
  982. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_51__shadertools_modules_fp64_fp64__ = __webpack_require__(650);
  983. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "fp64", function() { return __WEBPACK_IMPORTED_MODULE_51__shadertools_modules_fp64_fp64__["a"]; });
  984. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_52__shadertools_modules_project_project__ = __webpack_require__(260);
  985. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "project", function() { return __WEBPACK_IMPORTED_MODULE_52__shadertools_modules_project_project__["a"]; });
  986. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_53__shadertools_modules_lighting_lighting__ = __webpack_require__(654);
  987. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "lighting", function() { return __WEBPACK_IMPORTED_MODULE_53__shadertools_modules_lighting_lighting__["a"]; });
  988. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_54__shadertools_modules_dirlight_dirlight__ = __webpack_require__(645);
  989. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "dirlight", function() { return __WEBPACK_IMPORTED_MODULE_54__shadertools_modules_dirlight_dirlight__["a"]; });
  990. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_55__shadertools_modules_picking_picking__ = __webpack_require__(656);
  991. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "picking", function() { return __WEBPACK_IMPORTED_MODULE_55__shadertools_modules_picking_picking__["a"]; });
  992. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_56__shadertools_modules_diffuse_diffuse__ = __webpack_require__(644);
  993. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "diffuse", function() { return __WEBPACK_IMPORTED_MODULE_56__shadertools_modules_diffuse_diffuse__["a"]; });
  994. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_57_math_gl__ = __webpack_require__(16);
  995. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "radians", function() { return __WEBPACK_IMPORTED_MODULE_57_math_gl__["radians"]; });
  996. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "degrees", function() { return __WEBPACK_IMPORTED_MODULE_57_math_gl__["degrees"]; });
  997. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Vector2", function() { return __WEBPACK_IMPORTED_MODULE_57_math_gl__["Vector2"]; });
  998. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Vector3", function() { return __WEBPACK_IMPORTED_MODULE_57_math_gl__["Vector3"]; });
  999. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Vector4", function() { return __WEBPACK_IMPORTED_MODULE_57_math_gl__["Vector4"]; });
  1000. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Matrix4", function() { return __WEBPACK_IMPORTED_MODULE_57_math_gl__["Matrix4"]; });
  1001. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Quaternion", function() { return __WEBPACK_IMPORTED_MODULE_57_math_gl__["Quaternion"]; });
  1002. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_58__webgl_functions__ = __webpack_require__(272);
  1003. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "readPixels", function() { return __WEBPACK_IMPORTED_MODULE_58__webgl_functions__["a"]; });
  1004. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "FramebufferObject", function() { return __WEBPACK_IMPORTED_MODULE_11__webgl_framebuffer__["a"]; });
  1005. // Export core modules for luma.gl
  1006. // Initialize any global state
  1007. __webpack_require__(106);
  1008. // WebGL
  1009. // WebGL2 & Extensions
  1010. // Core Classes
  1011. // export {default as Object3D} from './core/object-3d';
  1012. // export {default as Group} from './core/group';
  1013. // Addons
  1014. // Geometry
  1015. // Models
  1016. // IO
  1017. // shadertools
  1018. // shader modules
  1019. // EXPERIMENTAL EXPORTS
  1020. var experimental = {
  1021. clearBuffer: __WEBPACK_IMPORTED_MODULE_16__webgl_clear__["b" /* clearBuffer */]
  1022. };
  1023. // DEPRECATED EXPORTS
  1024. // DEPRECATED IN V4.1
  1025. // DEPRECATED IN V3.0
  1026. // Alias FramebufferObject to Framebuffer - API is fairly similar
  1027. //# sourceMappingURL=index.js.map
  1028. /***/ }),
  1029. /* 13 */
  1030. /***/ (function(module, exports, __webpack_require__) {
  1031. "use strict";
  1032. Object.defineProperty(exports, "__esModule", {
  1033. value: true
  1034. });
  1035. exports.experimental = exports.lighting = exports.project64 = exports.project = exports.OrthographicViewport = exports.PerspectiveViewport = exports.WebMercatorViewport = exports.Viewport = exports.CompositeLayer = exports.Layer = exports.AttributeManager = exports.LayerManager = exports.COORDINATE_SYSTEM = undefined;
  1036. var _constants = __webpack_require__(70);
  1037. Object.defineProperty(exports, 'COORDINATE_SYSTEM', {
  1038. enumerable: true,
  1039. get: function get() {
  1040. return _constants.COORDINATE_SYSTEM;
  1041. }
  1042. });
  1043. var _layerManager = __webpack_require__(184);
  1044. Object.defineProperty(exports, 'LayerManager', {
  1045. enumerable: true,
  1046. get: function get() {
  1047. return _interopRequireDefault(_layerManager).default;
  1048. }
  1049. });
  1050. var _attributeManager = __webpack_require__(182);
  1051. Object.defineProperty(exports, 'AttributeManager', {
  1052. enumerable: true,
  1053. get: function get() {
  1054. return _interopRequireDefault(_attributeManager).default;
  1055. }
  1056. });
  1057. var _layer = __webpack_require__(123);
  1058. Object.defineProperty(exports, 'Layer', {
  1059. enumerable: true,
  1060. get: function get() {
  1061. return _interopRequireDefault(_layer).default;
  1062. }
  1063. });
  1064. var _compositeLayer = __webpack_require__(337);
  1065. Object.defineProperty(exports, 'CompositeLayer', {
  1066. enumerable: true,
  1067. get: function get() {
  1068. return _interopRequireDefault(_compositeLayer).default;
  1069. }
  1070. });
  1071. var _viewport = __webpack_require__(42);
  1072. Object.defineProperty(exports, 'Viewport', {
  1073. enumerable: true,
  1074. get: function get() {
  1075. return _interopRequireDefault(_viewport).default;
  1076. }
  1077. });
  1078. var _webMercatorViewport = __webpack_require__(86);
  1079. Object.defineProperty(exports, 'WebMercatorViewport', {
  1080. enumerable: true,
  1081. get: function get() {
  1082. return _interopRequireDefault(_webMercatorViewport).default;
  1083. }
  1084. });
  1085. var _perspectiveViewport = __webpack_require__(355);
  1086. Object.defineProperty(exports, 'PerspectiveViewport', {
  1087. enumerable: true,
  1088. get: function get() {
  1089. return _interopRequireDefault(_perspectiveViewport).default;
  1090. }
  1091. });
  1092. var _orthographicViewport = __webpack_require__(354);
  1093. Object.defineProperty(exports, 'OrthographicViewport', {
  1094. enumerable: true,
  1095. get: function get() {
  1096. return _interopRequireDefault(_orthographicViewport).default;
  1097. }
  1098. });
  1099. var _project = __webpack_require__(83);
  1100. Object.defineProperty(exports, 'project', {
  1101. enumerable: true,
  1102. get: function get() {
  1103. return _interopRequireDefault(_project).default;
  1104. }
  1105. });
  1106. var _project2 = __webpack_require__(192);
  1107. Object.defineProperty(exports, 'project64', {
  1108. enumerable: true,
  1109. get: function get() {
  1110. return _interopRequireDefault(_project2).default;
  1111. }
  1112. });
  1113. var _lighting = __webpack_require__(191);
  1114. Object.defineProperty(exports, 'lighting', {
  1115. enumerable: true,
  1116. get: function get() {
  1117. return _interopRequireDefault(_lighting).default;
  1118. }
  1119. });
  1120. __webpack_require__(338);
  1121. __webpack_require__(190);
  1122. var _firstPersonState = __webpack_require__(333);
  1123. var _firstPersonState2 = _interopRequireDefault(_firstPersonState);
  1124. var _orbitState = __webpack_require__(179);
  1125. var _orbitState2 = _interopRequireDefault(_orbitState);
  1126. var _mapState = __webpack_require__(82);
  1127. var _mapState2 = _interopRequireDefault(_mapState);
  1128. var _viewportControls = __webpack_require__(121);
  1129. var _viewportControls2 = _interopRequireDefault(_viewportControls);
  1130. var _mapControls = __webpack_require__(178);
  1131. var _mapControls2 = _interopRequireDefault(_mapControls);
  1132. var _firstPersonViewport = __webpack_require__(353);
  1133. var _firstPersonViewport2 = _interopRequireDefault(_firstPersonViewport);
  1134. var _thirdPersonViewport = __webpack_require__(356);
  1135. var _thirdPersonViewport2 = _interopRequireDefault(_thirdPersonViewport);
  1136. var _orbitViewport = __webpack_require__(85);
  1137. var _orbitViewport2 = _interopRequireDefault(_orbitViewport);
  1138. var _deckJs = __webpack_require__(341);
  1139. var _deckJs2 = _interopRequireDefault(_deckJs);
  1140. var _mapControllerJs = __webpack_require__(188);
  1141. var _mapControllerJs2 = _interopRequireDefault(_mapControllerJs);
  1142. var _orbitControllerJs = __webpack_require__(189);
  1143. var _orbitControllerJs2 = _interopRequireDefault(_orbitControllerJs);
  1144. var _effectManager = __webpack_require__(181);
  1145. var _effectManager2 = _interopRequireDefault(_effectManager);
  1146. var _effect = __webpack_require__(122);
  1147. var _effect2 = _interopRequireDefault(_effect);
  1148. var _transitionManager = __webpack_require__(186);
  1149. var _transitionManager2 = _interopRequireDefault(_transitionManager);
  1150. var _linearInterpolator = __webpack_require__(125);
  1151. var _linearInterpolator2 = _interopRequireDefault(_linearInterpolator);
  1152. var _viewportFlyToInterpolator = __webpack_require__(346);
  1153. var _viewportFlyToInterpolator2 = _interopRequireDefault(_viewportFlyToInterpolator);
  1154. var _transitionUtils = __webpack_require__(84);
  1155. var _log = __webpack_require__(17);
  1156. var _log2 = _interopRequireDefault(_log);
  1157. var _get = __webpack_require__(349);
  1158. var _count = __webpack_require__(194);
  1159. var _binSorter = __webpack_require__(347);
  1160. var _binSorter2 = _interopRequireDefault(_binSorter);
  1161. var _colorUtils = __webpack_require__(348);
  1162. var _scaleUtils = __webpack_require__(352);
  1163. var _flatten = __webpack_require__(126);
  1164. var _fp = __webpack_require__(195);
  1165. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  1166. // EXPERIMENTAL EXPORTS
  1167. // Experimental Features (May change in minor version bumps, use at your own risk)
  1168. // Experimental Controllers
  1169. // Experimental Pure JS (non-React) bindings
  1170. // Experimental Effects (non-React) bindings
  1171. // Eperimental Transitions
  1172. // INTERNAL EXPORTS
  1173. // Layer utilities
  1174. // Layer utilities
  1175. // TODO - just expose as layer methods instead?
  1176. var experimental = exports.experimental = {
  1177. ViewportControls: _viewportControls2.default,
  1178. FirstPersonState: _firstPersonState2.default,
  1179. OrbitState: _orbitState2.default,
  1180. MapState: _mapState2.default,
  1181. Controller: _viewportControls2.default,
  1182. MapController: _mapControls2.default,
  1183. // FirstPersonController,
  1184. // OrbitController,
  1185. FirstPersonViewport: _firstPersonViewport2.default,
  1186. ThirdPersonViewport: _thirdPersonViewport2.default,
  1187. OrbitViewport: _orbitViewport2.default,
  1188. DeckGLJS: _deckJs2.default,
  1189. MapControllerJS: _mapControllerJs2.default,
  1190. OrbitControllerJS: _orbitControllerJs2.default,
  1191. EffectManager: _effectManager2.default,
  1192. Effect: _effect2.default,
  1193. // Transitions
  1194. TRANSITION_EVENTS: _transitionManager.TRANSITION_EVENTS,
  1195. LinearInterpolator: _linearInterpolator2.default,
  1196. ViewportFlyToInterpolator: _viewportFlyToInterpolator2.default,
  1197. // For react module
  1198. TransitionManager: _transitionManager2.default,
  1199. extractViewportFrom: _transitionUtils.extractViewportFrom,
  1200. // For layers
  1201. BinSorter: _binSorter2.default,
  1202. linearScale: _scaleUtils.linearScale,
  1203. getLinearScale: _scaleUtils.getLinearScale,
  1204. quantizeScale: _scaleUtils.quantizeScale,
  1205. getQuantizeScale: _scaleUtils.getQuantizeScale,
  1206. clamp: _scaleUtils.clamp,
  1207. defaultColorRange: _colorUtils.defaultColorRange,
  1208. log: _log2.default,
  1209. get: _get.get,
  1210. count: _count.count,
  1211. flatten: _flatten.flatten,
  1212. countVertices: _flatten.countVertices,
  1213. flattenVertices: _flatten.flattenVertices,
  1214. fillArray: _flatten.fillArray,
  1215. enable64bitSupport: _fp.enable64bitSupport,
  1216. fp64ify: _fp.fp64ify,
  1217. fp64LowPart: _fp.fp64LowPart
  1218. };
  1219. /***/ }),
  1220. /* 14 */
  1221. /***/ (function(module, exports, __webpack_require__) {
  1222. // 7.1.13 ToObject(argument)
  1223. var defined = __webpack_require__(34);
  1224. module.exports = function (it) {
  1225. return Object(defined(it));
  1226. };
  1227. /***/ }),
  1228. /* 15 */
  1229. /***/ (function(module, exports) {
  1230. module.exports = function (it) {
  1231. if (typeof it != 'function') throw TypeError(it + ' is not a function!');
  1232. return it;
  1233. };
  1234. /***/ }),
  1235. /* 16 */
  1236. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1237. "use strict";
  1238. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  1239. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "experimental", function() { return experimental; });
  1240. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vector2__ = __webpack_require__(280);
  1241. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Vector2", function() { return __WEBPACK_IMPORTED_MODULE_0__vector2__["a"]; });
  1242. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__vector3__ = __webpack_require__(113);
  1243. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Vector3", function() { return __WEBPACK_IMPORTED_MODULE_1__vector3__["a"]; });
  1244. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__vector4__ = __webpack_require__(281);
  1245. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Vector4", function() { return __WEBPACK_IMPORTED_MODULE_2__vector4__["a"]; });
  1246. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__matrix4__ = __webpack_require__(278);
  1247. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Matrix4", function() { return __WEBPACK_IMPORTED_MODULE_3__matrix4__["a"]; });
  1248. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__quaternion__ = __webpack_require__(279);
  1249. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Quaternion", function() { return __WEBPACK_IMPORTED_MODULE_4__quaternion__["a"]; });
  1250. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__common__ = __webpack_require__(31);
  1251. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["a"]; });
  1252. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "checkNumber", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["g"]; });
  1253. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "configure", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["h"]; });
  1254. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "formatValue", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["b"]; });
  1255. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isArray", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["i"]; });
  1256. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["j"]; });
  1257. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "radians", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["d"]; });
  1258. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "degrees", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["f"]; });
  1259. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "sin", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["k"]; });
  1260. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "cos", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["l"]; });
  1261. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "tan", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["m"]; });
  1262. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "asin", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["n"]; });
  1263. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "acos", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["o"]; });
  1264. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "atan", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["p"]; });
  1265. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "clamp", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["e"]; });
  1266. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "equals", function() { return __WEBPACK_IMPORTED_MODULE_5__common__["c"]; });
  1267. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__euler__ = __webpack_require__(670);
  1268. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__spherical_coordinates__ = __webpack_require__(671);
  1269. var experimental={Euler:__WEBPACK_IMPORTED_MODULE_6__euler__["a" /* default */],SphericalCoordinates:__WEBPACK_IMPORTED_MODULE_7__spherical_coordinates__["a" /* default */]};
  1270. //# sourceMappingURL=index.js.map
  1271. /***/ }),
  1272. /* 17 */
  1273. /***/ (function(module, exports, __webpack_require__) {
  1274. "use strict";
  1275. Object.defineProperty(exports, "__esModule", {
  1276. value: true
  1277. });
  1278. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  1279. var _assert = __webpack_require__(1);
  1280. var _assert2 = _interopRequireDefault(_assert);
  1281. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  1282. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  1283. //
  1284. // Permission is hereby granted, free of charge, to any person obtaining a copy
  1285. // of this software and associated documentation files (the "Software"), to deal
  1286. // in the Software without restriction, including without limitation the rights
  1287. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  1288. // copies of the Software, and to permit persons to whom the Software is
  1289. // furnished to do so, subject to the following conditions:
  1290. //
  1291. // The above copyright notice and this permission notice shall be included in
  1292. // all copies or substantial portions of the Software.
  1293. //
  1294. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  1295. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  1296. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  1297. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  1298. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  1299. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  1300. // THE SOFTWARE.
  1301. /* eslint-disable no-console */
  1302. /* global console */
  1303. var cache = {};
  1304. function log(priority, arg) {
  1305. for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
  1306. args[_key - 2] = arguments[_key];
  1307. }
  1308. (0, _assert2.default)(Number.isFinite(priority), 'log priority must be a number');
  1309. if (priority <= log.priority) {
  1310. // Node doesn't have console.debug, but using it looks better in browser consoles
  1311. args = formatArgs.apply(undefined, [arg].concat(_toConsumableArray(args)));
  1312. if (console.debug) {
  1313. var _console;
  1314. (_console = console).debug.apply(_console, _toConsumableArray(args));
  1315. } else {
  1316. var _console2;
  1317. (_console2 = console).info.apply(_console2, _toConsumableArray(args));
  1318. }
  1319. }
  1320. }
  1321. function once(priority, arg) {
  1322. for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
  1323. args[_key2 - 2] = arguments[_key2];
  1324. }
  1325. if (!cache[arg] && priority <= log.priority) {
  1326. var _console3;
  1327. args = checkForAssertionErrors(args);
  1328. (_console3 = console).error.apply(_console3, _toConsumableArray(formatArgs.apply(undefined, [arg].concat(_toConsumableArray(args)))));
  1329. cache[arg] = true;
  1330. }
  1331. }
  1332. function warn(arg) {
  1333. if (!cache[arg]) {
  1334. var _console4;
  1335. for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
  1336. args[_key3 - 1] = arguments[_key3];
  1337. }
  1338. (_console4 = console).warn.apply(_console4, ['deck.gl: ' + arg].concat(args));
  1339. cache[arg] = true;
  1340. }
  1341. }
  1342. function error(arg) {
  1343. var _console5;
  1344. for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
  1345. args[_key4 - 1] = arguments[_key4];
  1346. }
  1347. (_console5 = console).error.apply(_console5, ['deck.gl: ' + arg].concat(args));
  1348. }
  1349. function deprecated(oldUsage, newUsage) {
  1350. log.warn('`' + oldUsage + '` is deprecated and will be removed in a later version. Use `' + newUsage + '` instead');
  1351. }
  1352. function removed(oldUsage, newUsage) {
  1353. log.error('`' + oldUsage + '` is no longer supported. Use `' + newUsage + '` instead, check our upgrade-guide.md for more details');
  1354. }
  1355. // Logs a message with a time
  1356. function time(priority, label) {
  1357. (0, _assert2.default)(Number.isFinite(priority), 'log priority must be a number');
  1358. if (priority <= log.priority) {
  1359. // In case the platform doesn't have console.time
  1360. if (console.time) {
  1361. console.time(label);
  1362. } else {
  1363. console.info(label);
  1364. }
  1365. }
  1366. }
  1367. function timeEnd(priority, label) {
  1368. (0, _assert2.default)(Number.isFinite(priority), 'log priority must be a number');
  1369. if (priority <= log.priority) {
  1370. // In case the platform doesn't have console.timeEnd
  1371. if (console.timeEnd) {
  1372. console.timeEnd(label);
  1373. } else {
  1374. console.info(label);
  1375. }
  1376. }
  1377. }
  1378. function group(priority, arg) {
  1379. var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
  1380. _ref$collapsed = _ref.collapsed,
  1381. collapsed = _ref$collapsed === undefined ? false : _ref$collapsed;
  1382. if (priority <= log.priority) {
  1383. if (collapsed) {
  1384. console.groupCollapsed('luma.gl: ' + arg);
  1385. } else {
  1386. console.group('luma.gl: ' + arg);
  1387. }
  1388. }
  1389. }
  1390. function groupEnd(priority, arg) {
  1391. if (priority <= log.priority) {
  1392. console.groupEnd('luma.gl: ' + arg);
  1393. }
  1394. }
  1395. // Helper functions
  1396. function formatArgs(firstArg) {
  1397. if (typeof firstArg === 'function') {
  1398. firstArg = firstArg();
  1399. }
  1400. for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
  1401. args[_key5 - 1] = arguments[_key5];
  1402. }
  1403. if (typeof firstArg === 'string') {
  1404. args.unshift('deck.gl ' + firstArg);
  1405. } else {
  1406. args.unshift(firstArg);
  1407. args.unshift('deck.gl');
  1408. }
  1409. return args;
  1410. }
  1411. // Assertions don't generate standard exceptions and don't print nicely
  1412. function checkForAssertionErrors(args) {
  1413. var isAssertion = args && args.length > 0 && _typeof(args[0]) === 'object' && args[0] !== null && args[0].name === 'AssertionError';
  1414. if (isAssertion) {
  1415. args = Array.prototype.slice.call(args);
  1416. args.unshift('assert(' + args[0].message + ')');
  1417. }
  1418. return args;
  1419. }
  1420. log.priority = 0;
  1421. log.log = log;
  1422. log.once = once;
  1423. log.time = time;
  1424. log.timeEnd = timeEnd;
  1425. log.warn = warn;
  1426. log.error = error;
  1427. log.deprecated = deprecated;
  1428. log.removed = removed;
  1429. log.group = group;
  1430. log.groupEnd = groupEnd;
  1431. exports.default = log;
  1432. /***/ }),
  1433. /* 18 */
  1434. /***/ (function(module, exports) {
  1435. var hasOwnProperty = {}.hasOwnProperty;
  1436. module.exports = function (it, key) {
  1437. return hasOwnProperty.call(it, key);
  1438. };
  1439. /***/ }),
  1440. /* 19 */
  1441. /***/ (function(module, exports, __webpack_require__) {
  1442. var dP = __webpack_require__(10);
  1443. var createDesc = __webpack_require__(54);
  1444. module.exports = __webpack_require__(9) ? function (object, key, value) {
  1445. return dP.f(object, key, createDesc(1, value));
  1446. } : function (object, key, value) {
  1447. object[key] = value;
  1448. return object;
  1449. };
  1450. /***/ }),
  1451. /* 20 */
  1452. /***/ (function(module, exports, __webpack_require__) {
  1453. var global = __webpack_require__(3);
  1454. var hide = __webpack_require__(19);
  1455. var has = __webpack_require__(18);
  1456. var SRC = __webpack_require__(58)('src');
  1457. var TO_STRING = 'toString';
  1458. var $toString = Function[TO_STRING];
  1459. var TPL = ('' + $toString).split(TO_STRING);
  1460. __webpack_require__(33).inspectSource = function (it) {
  1461. return $toString.call(it);
  1462. };
  1463. (module.exports = function (O, key, val, safe) {
  1464. var isFunction = typeof val == 'function';
  1465. if (isFunction) has(val, 'name') || hide(val, 'name', key);
  1466. if (O[key] === val) return;
  1467. if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
  1468. if (O === global) {
  1469. O[key] = val;
  1470. } else if (!safe) {
  1471. delete O[key];
  1472. hide(O, key, val);
  1473. } else if (O[key]) {
  1474. O[key] = val;
  1475. } else {
  1476. hide(O, key, val);
  1477. }
  1478. // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
  1479. })(Function.prototype, TO_STRING, function toString() {
  1480. return typeof this == 'function' && this[SRC] || $toString.call(this);
  1481. });
  1482. /***/ }),
  1483. /* 21 */
  1484. /***/ (function(module, exports, __webpack_require__) {
  1485. var $export = __webpack_require__(0);
  1486. var fails = __webpack_require__(4);
  1487. var defined = __webpack_require__(34);
  1488. var quot = /"/g;
  1489. // B.2.3.2.1 CreateHTML(string, tag, attribute, value)
  1490. var createHTML = function (string, tag, attribute, value) {
  1491. var S = String(defined(string));
  1492. var p1 = '<' + tag;
  1493. if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
  1494. return p1 + '>' + S + '</' + tag + '>';
  1495. };
  1496. module.exports = function (NAME, exec) {
  1497. var O = {};
  1498. O[NAME] = exec(createHTML);
  1499. $export($export.P + $export.F * fails(function () {
  1500. var test = ''[NAME]('"');
  1501. return test !== test.toLowerCase() || test.split('"').length > 3;
  1502. }), 'String', O);
  1503. };
  1504. /***/ }),
  1505. /* 22 */
  1506. /***/ (function(module, exports, __webpack_require__) {
  1507. var pIE = __webpack_require__(73);
  1508. var createDesc = __webpack_require__(54);
  1509. var toIObject = __webpack_require__(24);
  1510. var toPrimitive = __webpack_require__(37);
  1511. var has = __webpack_require__(18);
  1512. var IE8_DOM_DEFINE = __webpack_require__(207);
  1513. var gOPD = Object.getOwnPropertyDescriptor;
  1514. exports.f = __webpack_require__(9) ? gOPD : function getOwnPropertyDescriptor(O, P) {
  1515. O = toIObject(O);
  1516. P = toPrimitive(P, true);
  1517. if (IE8_DOM_DEFINE) try {
  1518. return gOPD(O, P);
  1519. } catch (e) { /* empty */ }
  1520. if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
  1521. };
  1522. /***/ }),
  1523. /* 23 */
  1524. /***/ (function(module, exports, __webpack_require__) {
  1525. // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
  1526. var has = __webpack_require__(18);
  1527. var toObject = __webpack_require__(14);
  1528. var IE_PROTO = __webpack_require__(144)('IE_PROTO');
  1529. var ObjectProto = Object.prototype;
  1530. module.exports = Object.getPrototypeOf || function (O) {
  1531. O = toObject(O);
  1532. if (has(O, IE_PROTO)) return O[IE_PROTO];
  1533. if (typeof O.constructor == 'function' && O instanceof O.constructor) {
  1534. return O.constructor.prototype;
  1535. } return O instanceof Object ? ObjectProto : null;
  1536. };
  1537. /***/ }),
  1538. /* 24 */
  1539. /***/ (function(module, exports, __webpack_require__) {
  1540. // to indexed object, toObject with fallback for non-array-like ES3 strings
  1541. var IObject = __webpack_require__(72);
  1542. var defined = __webpack_require__(34);
  1543. module.exports = function (it) {
  1544. return IObject(defined(it));
  1545. };
  1546. /***/ }),
  1547. /* 25 */
  1548. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1549. "use strict";
  1550. /* harmony export (immutable) */ __webpack_exports__["b"] = glGet;
  1551. /* harmony export (immutable) */ __webpack_exports__["c"] = glKey;
  1552. /* unused harmony export glKeyType */
  1553. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__ = __webpack_require__(46);
  1554. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_utils_constants_to_keys__ = __webpack_require__(662);
  1555. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a"]; });
  1556. // WEBGL BUILT-IN CONSTANTS
  1557. /* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */]);
  1558. // Resolve a WebGL enumeration name (returns itself if already a number)
  1559. function glGet(name) {
  1560. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_utils_constants_to_keys__["a" /* getKeyValue */])(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */], name);
  1561. }
  1562. function glKey(value) {
  1563. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_utils_constants_to_keys__["b" /* getKey */])(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */], value);
  1564. }
  1565. function glKeyType(value) {
  1566. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_utils_constants_to_keys__["c" /* getKeyType */])(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */], value);
  1567. }
  1568. //# sourceMappingURL=gl-constants.js.map
  1569. /***/ }),
  1570. /* 26 */
  1571. /***/ (function(module, exports) {
  1572. // shim for using process in browser
  1573. var process = module.exports = {};
  1574. // cached from whatever global is present so that test runners that stub it
  1575. // don't break things. But we need to wrap it in a try catch in case it is
  1576. // wrapped in strict mode code which doesn't define any globals. It's inside a
  1577. // function because try/catches deoptimize in certain engines.
  1578. var cachedSetTimeout;
  1579. var cachedClearTimeout;
  1580. function defaultSetTimout() {
  1581. throw new Error('setTimeout has not been defined');
  1582. }
  1583. function defaultClearTimeout () {
  1584. throw new Error('clearTimeout has not been defined');
  1585. }
  1586. (function () {
  1587. try {
  1588. if (typeof setTimeout === 'function') {
  1589. cachedSetTimeout = setTimeout;
  1590. } else {
  1591. cachedSetTimeout = defaultSetTimout;
  1592. }
  1593. } catch (e) {
  1594. cachedSetTimeout = defaultSetTimout;
  1595. }
  1596. try {
  1597. if (typeof clearTimeout === 'function') {
  1598. cachedClearTimeout = clearTimeout;
  1599. } else {
  1600. cachedClearTimeout = defaultClearTimeout;
  1601. }
  1602. } catch (e) {
  1603. cachedClearTimeout = defaultClearTimeout;
  1604. }
  1605. } ())
  1606. function runTimeout(fun) {
  1607. if (cachedSetTimeout === setTimeout) {
  1608. //normal enviroments in sane situations
  1609. return setTimeout(fun, 0);
  1610. }
  1611. // if setTimeout wasn't available but was latter defined
  1612. if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
  1613. cachedSetTimeout = setTimeout;
  1614. return setTimeout(fun, 0);
  1615. }
  1616. try {
  1617. // when when somebody has screwed with setTimeout but no I.E. maddness
  1618. return cachedSetTimeout(fun, 0);
  1619. } catch(e){
  1620. try {
  1621. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  1622. return cachedSetTimeout.call(null, fun, 0);
  1623. } catch(e){
  1624. // 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
  1625. return cachedSetTimeout.call(this, fun, 0);
  1626. }
  1627. }
  1628. }
  1629. function runClearTimeout(marker) {
  1630. if (cachedClearTimeout === clearTimeout) {
  1631. //normal enviroments in sane situations
  1632. return clearTimeout(marker);
  1633. }
  1634. // if clearTimeout wasn't available but was latter defined
  1635. if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
  1636. cachedClearTimeout = clearTimeout;
  1637. return clearTimeout(marker);
  1638. }
  1639. try {
  1640. // when when somebody has screwed with setTimeout but no I.E. maddness
  1641. return cachedClearTimeout(marker);
  1642. } catch (e){
  1643. try {
  1644. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  1645. return cachedClearTimeout.call(null, marker);
  1646. } catch (e){
  1647. // 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.
  1648. // Some versions of I.E. have different rules for clearTimeout vs setTimeout
  1649. return cachedClearTimeout.call(this, marker);
  1650. }
  1651. }
  1652. }
  1653. var queue = [];
  1654. var draining = false;
  1655. var currentQueue;
  1656. var queueIndex = -1;
  1657. function cleanUpNextTick() {
  1658. if (!draining || !currentQueue) {
  1659. return;
  1660. }
  1661. draining = false;
  1662. if (currentQueue.length) {
  1663. queue = currentQueue.concat(queue);
  1664. } else {
  1665. queueIndex = -1;
  1666. }
  1667. if (queue.length) {
  1668. drainQueue();
  1669. }
  1670. }
  1671. function drainQueue() {
  1672. if (draining) {
  1673. return;
  1674. }
  1675. var timeout = runTimeout(cleanUpNextTick);
  1676. draining = true;
  1677. var len = queue.length;
  1678. while(len) {
  1679. currentQueue = queue;
  1680. queue = [];
  1681. while (++queueIndex < len) {
  1682. if (currentQueue) {
  1683. currentQueue[queueIndex].run();
  1684. }
  1685. }
  1686. queueIndex = -1;
  1687. len = queue.length;
  1688. }
  1689. currentQueue = null;
  1690. draining = false;
  1691. runClearTimeout(timeout);
  1692. }
  1693. process.nextTick = function (fun) {
  1694. var args = new Array(arguments.length - 1);
  1695. if (arguments.length > 1) {
  1696. for (var i = 1; i < arguments.length; i++) {
  1697. args[i - 1] = arguments[i];
  1698. }
  1699. }
  1700. queue.push(new Item(fun, args));
  1701. if (queue.length === 1 && !draining) {
  1702. runTimeout(drainQueue);
  1703. }
  1704. };
  1705. // v8 likes predictible objects
  1706. function Item(fun, array) {
  1707. this.fun = fun;
  1708. this.array = array;
  1709. }
  1710. Item.prototype.run = function () {
  1711. this.fun.apply(null, this.array);
  1712. };
  1713. process.title = 'browser';
  1714. process.browser = true;
  1715. process.env = {};
  1716. process.argv = [];
  1717. process.version = ''; // empty string to avoid regexp issues
  1718. process.versions = {};
  1719. function noop() {}
  1720. process.on = noop;
  1721. process.addListener = noop;
  1722. process.once = noop;
  1723. process.off = noop;
  1724. process.removeListener = noop;
  1725. process.removeAllListeners = noop;
  1726. process.emit = noop;
  1727. process.prependListener = noop;
  1728. process.prependOnceListener = noop;
  1729. process.listeners = function (name) { return [] }
  1730. process.binding = function (name) {
  1731. throw new Error('process.binding is not supported');
  1732. };
  1733. process.cwd = function () { return '/' };
  1734. process.chdir = function (dir) {
  1735. throw new Error('process.chdir is not supported');
  1736. };
  1737. process.umask = function() { return 0; };
  1738. /***/ }),
  1739. /* 27 */
  1740. /***/ (function(module, exports) {
  1741. var toString = {}.toString;
  1742. module.exports = function (it) {
  1743. return toString.call(it).slice(8, -1);
  1744. };
  1745. /***/ }),
  1746. /* 28 */
  1747. /***/ (function(module, exports, __webpack_require__) {
  1748. // optional / simple context binding
  1749. var aFunction = __webpack_require__(15);
  1750. module.exports = function (fn, that, length) {
  1751. aFunction(fn);
  1752. if (that === undefined) return fn;
  1753. switch (length) {
  1754. case 1: return function (a) {
  1755. return fn.call(that, a);
  1756. };
  1757. case 2: return function (a, b) {
  1758. return fn.call(that, a, b);
  1759. };
  1760. case 3: return function (a, b, c) {
  1761. return fn.call(that, a, b, c);
  1762. };
  1763. }
  1764. return function (/* ...args */) {
  1765. return fn.apply(that, arguments);
  1766. };
  1767. };
  1768. /***/ }),
  1769. /* 29 */
  1770. /***/ (function(module, exports, __webpack_require__) {
  1771. "use strict";
  1772. var fails = __webpack_require__(4);
  1773. module.exports = function (method, arg) {
  1774. return !!method && fails(function () {
  1775. // eslint-disable-next-line no-useless-call
  1776. arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);
  1777. });
  1778. };
  1779. /***/ }),
  1780. /* 30 */
  1781. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1782. "use strict";
  1783. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__init__ = __webpack_require__(106);
  1784. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  1785. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__gl_constants__ = __webpack_require__(25);
  1786. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils__ = __webpack_require__(8);
  1787. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_assert__ = __webpack_require__(1);
  1788. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_assert__);
  1789. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__webgl_utils__ = __webpack_require__(60);
  1790. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  1791. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  1792. var ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';
  1793. // TODO - Handle context loss
  1794. // function glGetContextLossCount(gl) {
  1795. // return (gl.luma && gl.luma.glCount) || 0;
  1796. // }
  1797. var Resource = /*#__PURE__*/function () {
  1798. function Resource(gl) {
  1799. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  1800. _classCallCheck(this, Resource);
  1801. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["j" /* assertWebGLContext */])(gl);
  1802. var id = opts.id,
  1803. _opts$userData = opts.userData,
  1804. userData = _opts$userData === undefined ? {} : _opts$userData;
  1805. this.gl = gl;
  1806. this.ext = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__webgl_utils__["f" /* polyfillContext */])(gl);
  1807. this.id = id || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__utils__["d" /* uid */])(this.constructor.name);
  1808. this.userData = userData;
  1809. this.opts = opts;
  1810. // Set the handle
  1811. // If handle was provided, use it, otherwise create a new handle
  1812. // TODO - Stores the handle with context loss information
  1813. // this.glCount = glGetContextLossCount(this.gl);
  1814. // Default VertexArray needs to be created with null handle, so compare against undefined
  1815. this._handle = opts.handle;
  1816. if (this._handle === undefined) {
  1817. this._handle = this._createHandle();
  1818. }
  1819. this._addStats();
  1820. }
  1821. _createClass(Resource, [{
  1822. key: 'toString',
  1823. value: function toString() {
  1824. return this.constructor.name + '(' + this.id + ')';
  1825. }
  1826. }, {
  1827. key: 'delete',
  1828. value: function _delete() {
  1829. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  1830. _ref$deleteChildren = _ref.deleteChildren,
  1831. deleteChildren = _ref$deleteChildren === undefined ? false : _ref$deleteChildren;
  1832. // Delete this object, and get refs to any children
  1833. var children = this._handle && this._deleteHandle(this._handle);
  1834. this._handle = null;
  1835. // Optionally, recursively delete the children
  1836. if (children && deleteChildren) {
  1837. children.filter(Boolean).forEach(function (child) {
  1838. child.delete();
  1839. });
  1840. }
  1841. return this;
  1842. }
  1843. }, {
  1844. key: 'unbind',
  1845. value: function unbind() {
  1846. this.bind(null);
  1847. }
  1848. /**
  1849. * Query a Resource parameter
  1850. *
  1851. * @param {GLenum} pname
  1852. * @return {GLint|GLfloat|GLenum} param
  1853. */
  1854. }, {
  1855. key: 'getParameter',
  1856. value: function getParameter(pname) {
  1857. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  1858. pname = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__gl_constants__["b" /* glGet */])(pname);
  1859. __WEBPACK_IMPORTED_MODULE_4_assert___default()(pname);
  1860. var parameters = this.constructor.PARAMETERS || {};
  1861. // Use parameter definitions to handle unsupported parameters
  1862. var parameter = parameters[pname];
  1863. if (parameter) {
  1864. var isWebgl2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(this.gl);
  1865. // Check if we can query for this parameter
  1866. var parameterAvailable = (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
  1867. if (!parameterAvailable) {
  1868. var webgl1Default = parameter.webgl1;
  1869. var webgl2Default = 'webgl2' in parameter ? parameter.webgl2 : parameter.webgl1;
  1870. var defaultValue = isWebgl2 ? webgl2Default : webgl1Default;
  1871. return defaultValue;
  1872. }
  1873. }
  1874. // If unknown parameter - Could be a valid parameter not covered by PARAMS
  1875. // Attempt to query for it and let WebGL report errors
  1876. return this._getParameter(pname, opts);
  1877. }
  1878. // Many resources support a getParameter call -
  1879. // getParameters will get all parameters - slow but useful for debugging
  1880. }, {
  1881. key: 'getParameters',
  1882. value: function getParameters() {
  1883. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  1884. var _ref2 = {},
  1885. parameters = _ref2.parameters,
  1886. keys = _ref2.keys;
  1887. // Get parameter definitions for this Resource
  1888. var PARAMETERS = this.constructor.PARAMETERS || {};
  1889. var isWebgl2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(this.gl);
  1890. var values = {};
  1891. // Query all parameters if no list provided
  1892. var parameterKeys = parameters || Object.keys(PARAMETERS);
  1893. // WEBGL limits
  1894. var _iteratorNormalCompletion = true;
  1895. var _didIteratorError = false;
  1896. var _iteratorError = undefined;
  1897. try {
  1898. for (var _iterator = parameterKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  1899. var pname = _step.value;
  1900. var parameter = PARAMETERS[pname];
  1901. // Check if this parameter is available on this platform
  1902. var parameterAvailable = parameter && (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
  1903. if (parameterAvailable) {
  1904. var key = keys ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__gl_constants__["c" /* glKey */])(pname) : pname;
  1905. values[key] = this.getParameter(pname, opts);
  1906. if (keys && parameter.type === 'GLenum') {
  1907. values[key] = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__gl_constants__["c" /* glKey */])(values[key]);
  1908. }
  1909. }
  1910. }
  1911. } catch (err) {
  1912. _didIteratorError = true;
  1913. _iteratorError = err;
  1914. } finally {
  1915. try {
  1916. if (!_iteratorNormalCompletion && _iterator.return) {
  1917. _iterator.return();
  1918. }
  1919. } finally {
  1920. if (_didIteratorError) {
  1921. throw _iteratorError;
  1922. }
  1923. }
  1924. }
  1925. return values;
  1926. }
  1927. /**
  1928. * Update a Resource setting
  1929. *
  1930. * @todo - cache parameter to avoid issuing WebGL calls?
  1931. *
  1932. * @param {GLenum} pname - parameter (GL constant, value or key)
  1933. * @param {GLint|GLfloat|GLenum} value
  1934. * @return {Resource} returns self to enable chaining
  1935. */
  1936. }, {
  1937. key: 'setParameter',
  1938. value: function setParameter(pname, value) {
  1939. pname = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__gl_constants__["b" /* glGet */])(pname);
  1940. __WEBPACK_IMPORTED_MODULE_4_assert___default()(pname);
  1941. var parameters = this.constructor.PARAMETERS || {};
  1942. var parameter = parameters[pname];
  1943. if (parameter) {
  1944. var isWebgl2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(this.gl);
  1945. // Check if this parameter is available on this platform
  1946. var parameterAvailable = (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
  1947. if (!parameterAvailable) {
  1948. throw new Error('Parameter not available on this platform');
  1949. }
  1950. // Handle string keys
  1951. if (parameter.type === 'GLenum') {
  1952. value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__gl_constants__["b" /* glGet */])(value);
  1953. }
  1954. }
  1955. // If unknown parameter - Could be a valid parameter not covered by PARAMS
  1956. // attempt to set it and let WebGL report errors
  1957. this._setParameter(pname, value);
  1958. return this;
  1959. }
  1960. /*
  1961. * Batch update resource parameters
  1962. * Assumes the subclass supports a setParameter call
  1963. */
  1964. }, {
  1965. key: 'setParameters',
  1966. value: function setParameters(parameters) {
  1967. for (var pname in parameters) {
  1968. this.setParameter(pname, parameters[pname]);
  1969. }
  1970. return this;
  1971. }
  1972. // PUBLIC VIRTUAL METHODS
  1973. }, {
  1974. key: 'initialize',
  1975. value: function initialize(opts) {}
  1976. // PROTECTED METHODS - These must be overridden by subclass
  1977. }, {
  1978. key: '_createHandle',
  1979. value: function _createHandle() {
  1980. throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
  1981. }
  1982. }, {
  1983. key: '_deleteHandle',
  1984. value: function _deleteHandle() {
  1985. throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
  1986. }
  1987. }, {
  1988. key: '_getOptsFromHandle',
  1989. value: function _getOptsFromHandle() {
  1990. throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
  1991. }
  1992. }, {
  1993. key: '_getParameter',
  1994. value: function _getParameter(pname, opts) {
  1995. throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
  1996. }
  1997. /**
  1998. * @param {GLenum} pname
  1999. * @param {GLint|GLfloat|GLenum} param
  2000. * @return {Sampler} returns self to enable chaining
  2001. */
  2002. }, {
  2003. key: '_setParameter',
  2004. value: function _setParameter(pname, value) {
  2005. throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
  2006. }
  2007. // PRIVATE METHODS
  2008. }, {
  2009. key: '_context',
  2010. value: function _context() {
  2011. this.gl.luma = this.gl.luma || {};
  2012. return this.gl.luma;
  2013. }
  2014. }, {
  2015. key: '_addStats',
  2016. value: function _addStats() {
  2017. var name = this.constructor.name;
  2018. var stats = __WEBPACK_IMPORTED_MODULE_0__init__["default"].stats;
  2019. stats.resourceCount = stats.resourceCount || 0;
  2020. stats.resourceMap = stats.resourceMap || {};
  2021. // Resource creation stats
  2022. stats.resourceCount++;
  2023. stats.resourceMap[name] = stats.resourceMap[name] || { count: 0 };
  2024. stats.resourceMap[name].count++;
  2025. }
  2026. }, {
  2027. key: 'handle',
  2028. get: function get() {
  2029. // TODO - Add context loss handling
  2030. // Will regenerate and reinitialize the handle if necessary
  2031. // const glCount = glGetContextLossCount(this.gl);
  2032. // if (this.glCount !== glCount) {
  2033. // this._handle = this._createHandle(this.opts);
  2034. // this._glCount = glCount;
  2035. // // Reinitialize object
  2036. // this.initialize(this.opts);
  2037. // }
  2038. return this._handle;
  2039. }
  2040. }]);
  2041. return Resource;
  2042. }();
  2043. /* harmony default export */ __webpack_exports__["a"] = (Resource);
  2044. //# sourceMappingURL=resource.js.map
  2045. /***/ }),
  2046. /* 31 */
  2047. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2048. "use strict";
  2049. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return config; });
  2050. /* harmony export (immutable) */ __webpack_exports__["h"] = configure;
  2051. /* harmony export (immutable) */ __webpack_exports__["g"] = checkNumber;
  2052. /* harmony export (immutable) */ __webpack_exports__["b"] = formatValue;
  2053. /* unused harmony export formatAngle */
  2054. /* harmony export (immutable) */ __webpack_exports__["i"] = isArray;
  2055. /* harmony export (immutable) */ __webpack_exports__["j"] = clone;
  2056. /* harmony export (immutable) */ __webpack_exports__["d"] = radians;
  2057. /* harmony export (immutable) */ __webpack_exports__["f"] = degrees;
  2058. /* harmony export (immutable) */ __webpack_exports__["k"] = sin;
  2059. /* harmony export (immutable) */ __webpack_exports__["l"] = cos;
  2060. /* harmony export (immutable) */ __webpack_exports__["m"] = tan;
  2061. /* harmony export (immutable) */ __webpack_exports__["n"] = asin;
  2062. /* harmony export (immutable) */ __webpack_exports__["o"] = acos;
  2063. /* harmony export (immutable) */ __webpack_exports__["p"] = atan;
  2064. /* harmony export (immutable) */ __webpack_exports__["e"] = clamp;
  2065. /* harmony export (immutable) */ __webpack_exports__["c"] = equals;
  2066. var config={EPSILON:1e-12,debug:!0,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0};function configure(options){'epsilon'in options&&(config.EPSILON=options.epsilon),'debug'in options&&(config.debug=options.debug)}function checkNumber(value){if(!Number.isFinite(value))throw new Error('Invalid number '+value);return value}function round(value){return Math.round(value/config.EPSILON)*config.EPSILON}function formatValue(value){var _ref=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},_ref$precision=_ref.precision,precision=void 0===_ref$precision?config.precision||4:_ref$precision;return value=round(value),parseFloat(value.toPrecision(precision))}function formatAngle(value){var _ref2=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},_ref2$precision=_ref2.precision,precision=void 0===_ref2$precision?config.precision||4:_ref2$precision,_ref2$printDegrees=_ref2.printDegrees,printDegrees=void 0===_ref2$printDegrees?config.printAngles:_ref2$printDegrees;return value=printDegrees?degrees(value):value,value=round(value),''+parseFloat(value.toPrecision(precision))+(printDegrees?'\xB0':'')}function isArray(value){return Array.isArray(value)||ArrayBuffer.isView(value)&&value.length!==void 0}function clone(array){return array.clone?array.clone():Array(array)}function map(value,func){if(isArray(value)){for(var result=clone(value),i=0;i<result.length;++i)result[i]=func(result[i],i,result);return result}return func(value)}function radians(degrees){return map(degrees,function(degrees){return degrees/180*Math.PI})}function degrees(radians){return map(radians,function(radians){return 180*radians/Math.PI})}function sin(radians){return map(radians,function(angle){return Math.sin(angle)})}function cos(radians){return map(radians,function(angle){return Math.cos(angle)})}function tan(radians){return map(radians,function(angle){return Math.tan(angle)})}function asin(radians){return map(radians,function(angle){return Math.asin(angle)})}function acos(radians){return map(radians,function(angle){return Math.acos(angle)})}function atan(radians){return map(radians,function(angle){return Math.atan(angle)})}function clamp(value,min,max){return map(value,function(value){return Math.max(min,Math.min(max,value))})}function equals(a,b){var _Mathabs=Math.abs;if(Array.isArray(a)&&Array.isArray(b)){if(a===b)return!0;if(a.length!==b.length)return!1;for(var i=0;i<a.length;++i)if(!equals(a[i],b[i]))return!1;return!0}return _Mathabs(a-b)<=config.EPSILON*Math.max(1,_Mathabs(a),_Mathabs(b))}
  2067. //# sourceMappingURL=common.js.map
  2068. /***/ }),
  2069. /* 32 */
  2070. /***/ (function(module, exports, __webpack_require__) {
  2071. // 0 -> Array#forEach
  2072. // 1 -> Array#map
  2073. // 2 -> Array#filter
  2074. // 3 -> Array#some
  2075. // 4 -> Array#every
  2076. // 5 -> Array#find
  2077. // 6 -> Array#findIndex
  2078. var ctx = __webpack_require__(28);
  2079. var IObject = __webpack_require__(72);
  2080. var toObject = __webpack_require__(14);
  2081. var toLength = __webpack_require__(11);
  2082. var asc = __webpack_require__(129);
  2083. module.exports = function (TYPE, $create) {
  2084. var IS_MAP = TYPE == 1;
  2085. var IS_FILTER = TYPE == 2;
  2086. var IS_SOME = TYPE == 3;
  2087. var IS_EVERY = TYPE == 4;
  2088. var IS_FIND_INDEX = TYPE == 6;
  2089. var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
  2090. var create = $create || asc;
  2091. return function ($this, callbackfn, that) {
  2092. var O = toObject($this);
  2093. var self = IObject(O);
  2094. var f = ctx(callbackfn, that, 3);
  2095. var length = toLength(self.length);
  2096. var index = 0;
  2097. var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
  2098. var val, res;
  2099. for (;length > index; index++) if (NO_HOLES || index in self) {
  2100. val = self[index];
  2101. res = f(val, index, O);
  2102. if (TYPE) {
  2103. if (IS_MAP) result[index] = res; // map
  2104. else if (res) switch (TYPE) {
  2105. case 3: return true; // some
  2106. case 5: return val; // find
  2107. case 6: return index; // findIndex
  2108. case 2: result.push(val); // filter
  2109. } else if (IS_EVERY) return false; // every
  2110. }
  2111. }
  2112. return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
  2113. };
  2114. };
  2115. /***/ }),
  2116. /* 33 */
  2117. /***/ (function(module, exports) {
  2118. var core = module.exports = { version: '2.5.3' };
  2119. if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
  2120. /***/ }),
  2121. /* 34 */
  2122. /***/ (function(module, exports) {
  2123. // 7.2.1 RequireObjectCoercible(argument)
  2124. module.exports = function (it) {
  2125. if (it == undefined) throw TypeError("Can't call method on " + it);
  2126. return it;
  2127. };
  2128. /***/ }),
  2129. /* 35 */
  2130. /***/ (function(module, exports, __webpack_require__) {
  2131. // most Object methods by ES6 should accept primitives
  2132. var $export = __webpack_require__(0);
  2133. var core = __webpack_require__(33);
  2134. var fails = __webpack_require__(4);
  2135. module.exports = function (KEY, exec) {
  2136. var fn = (core.Object || {})[KEY] || Object[KEY];
  2137. var exp = {};
  2138. exp[KEY] = exec(fn);
  2139. $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
  2140. };
  2141. /***/ }),
  2142. /* 36 */
  2143. /***/ (function(module, exports) {
  2144. // 7.1.4 ToInteger
  2145. var ceil = Math.ceil;
  2146. var floor = Math.floor;
  2147. module.exports = function (it) {
  2148. return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
  2149. };
  2150. /***/ }),
  2151. /* 37 */
  2152. /***/ (function(module, exports, __webpack_require__) {
  2153. // 7.1.1 ToPrimitive(input [, PreferredType])
  2154. var isObject = __webpack_require__(5);
  2155. // instead of the ES6 spec version, we didn't implement @@toPrimitive case
  2156. // and the second argument - flag - preferred type is a string
  2157. module.exports = function (it, S) {
  2158. if (!isObject(it)) return it;
  2159. var fn, val;
  2160. if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  2161. if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
  2162. if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  2163. throw TypeError("Can't convert object to primitive value");
  2164. };
  2165. /***/ }),
  2166. /* 38 */
  2167. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2168. "use strict";
  2169. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__types__ = __webpack_require__(268);
  2170. /* unused harmony reexport Image */
  2171. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__types__["a"]; });
  2172. /* unused harmony reexport WebGLProgram */
  2173. /* unused harmony reexport WebGLShader */
  2174. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_0__types__["d"]; });
  2175. /* unused harmony reexport WebGLFramebuffer */
  2176. /* unused harmony reexport WebGLRenderbuffer */
  2177. /* unused harmony reexport WebGLTexture */
  2178. /* unused harmony reexport WebGLUniformLocation */
  2179. /* unused harmony reexport WebGLActiveInfo */
  2180. /* unused harmony reexport WebGLShaderPrecisionFormat */
  2181. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__types__["b"]; });
  2182. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_0__types__["c"]; });
  2183. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_utils__ = __webpack_require__(60);
  2184. /* unused harmony reexport formatGLSLCompilerError */
  2185. /* unused harmony reexport getShaderName */
  2186. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__webgl_utils_constants__ = __webpack_require__(46);
  2187. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_2__webgl_utils_constants__["a"]; });
  2188. // Exports WebGL API constants and types, plus some basic type checks
  2189. // TODO - avoid importing GL as it is a big file
  2190. /* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_2__webgl_utils_constants__["a" /* default */]);
  2191. //# sourceMappingURL=index.js.map
  2192. /***/ }),
  2193. /* 39 */
  2194. /***/ (function(module, exports, __webpack_require__) {
  2195. var Map = __webpack_require__(228);
  2196. var $export = __webpack_require__(0);
  2197. var shared = __webpack_require__(98)('metadata');
  2198. var store = shared.store || (shared.store = new (__webpack_require__(231))());
  2199. var getOrCreateMetadataMap = function (target, targetKey, create) {
  2200. var targetMetadata = store.get(target);
  2201. if (!targetMetadata) {
  2202. if (!create) return undefined;
  2203. store.set(target, targetMetadata = new Map());
  2204. }
  2205. var keyMetadata = targetMetadata.get(targetKey);
  2206. if (!keyMetadata) {
  2207. if (!create) return undefined;
  2208. targetMetadata.set(targetKey, keyMetadata = new Map());
  2209. } return keyMetadata;
  2210. };
  2211. var ordinaryHasOwnMetadata = function (MetadataKey, O, P) {
  2212. var metadataMap = getOrCreateMetadataMap(O, P, false);
  2213. return metadataMap === undefined ? false : metadataMap.has(MetadataKey);
  2214. };
  2215. var ordinaryGetOwnMetadata = function (MetadataKey, O, P) {
  2216. var metadataMap = getOrCreateMetadataMap(O, P, false);
  2217. return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);
  2218. };
  2219. var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {
  2220. getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);
  2221. };
  2222. var ordinaryOwnMetadataKeys = function (target, targetKey) {
  2223. var metadataMap = getOrCreateMetadataMap(target, targetKey, false);
  2224. var keys = [];
  2225. if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });
  2226. return keys;
  2227. };
  2228. var toMetaKey = function (it) {
  2229. return it === undefined || typeof it == 'symbol' ? it : String(it);
  2230. };
  2231. var exp = function (O) {
  2232. $export($export.S, 'Reflect', O);
  2233. };
  2234. module.exports = {
  2235. store: store,
  2236. map: getOrCreateMetadataMap,
  2237. has: ordinaryHasOwnMetadata,
  2238. get: ordinaryGetOwnMetadata,
  2239. set: ordinaryDefineOwnMetadata,
  2240. keys: ordinaryOwnMetadataKeys,
  2241. key: toMetaKey,
  2242. exp: exp
  2243. };
  2244. /***/ }),
  2245. /* 40 */
  2246. /***/ (function(module, exports, __webpack_require__) {
  2247. "use strict";
  2248. if (__webpack_require__(9)) {
  2249. var LIBRARY = __webpack_require__(50);
  2250. var global = __webpack_require__(3);
  2251. var fails = __webpack_require__(4);
  2252. var $export = __webpack_require__(0);
  2253. var $typed = __webpack_require__(100);
  2254. var $buffer = __webpack_require__(150);
  2255. var ctx = __webpack_require__(28);
  2256. var anInstance = __webpack_require__(48);
  2257. var propertyDesc = __webpack_require__(54);
  2258. var hide = __webpack_require__(19);
  2259. var redefineAll = __webpack_require__(55);
  2260. var toInteger = __webpack_require__(36);
  2261. var toLength = __webpack_require__(11);
  2262. var toIndex = __webpack_require__(226);
  2263. var toAbsoluteIndex = __webpack_require__(57);
  2264. var toPrimitive = __webpack_require__(37);
  2265. var has = __webpack_require__(18);
  2266. var classof = __webpack_require__(71);
  2267. var isObject = __webpack_require__(5);
  2268. var toObject = __webpack_require__(14);
  2269. var isArrayIter = __webpack_require__(136);
  2270. var create = __webpack_require__(51);
  2271. var getPrototypeOf = __webpack_require__(23);
  2272. var gOPN = __webpack_require__(52).f;
  2273. var getIterFn = __webpack_require__(153);
  2274. var uid = __webpack_require__(58);
  2275. var wks = __webpack_require__(6);
  2276. var createArrayMethod = __webpack_require__(32);
  2277. var createArrayIncludes = __webpack_require__(87);
  2278. var speciesConstructor = __webpack_require__(99);
  2279. var ArrayIterators = __webpack_require__(154);
  2280. var Iterators = __webpack_require__(63);
  2281. var $iterDetect = __webpack_require__(93);
  2282. var setSpecies = __webpack_require__(56);
  2283. var arrayFill = __webpack_require__(128);
  2284. var arrayCopyWithin = __webpack_require__(199);
  2285. var $DP = __webpack_require__(10);
  2286. var $GOPD = __webpack_require__(22);
  2287. var dP = $DP.f;
  2288. var gOPD = $GOPD.f;
  2289. var RangeError = global.RangeError;
  2290. var TypeError = global.TypeError;
  2291. var Uint8Array = global.Uint8Array;
  2292. var ARRAY_BUFFER = 'ArrayBuffer';
  2293. var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;
  2294. var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
  2295. var PROTOTYPE = 'prototype';
  2296. var ArrayProto = Array[PROTOTYPE];
  2297. var $ArrayBuffer = $buffer.ArrayBuffer;
  2298. var $DataView = $buffer.DataView;
  2299. var arrayForEach = createArrayMethod(0);
  2300. var arrayFilter = createArrayMethod(2);
  2301. var arraySome = createArrayMethod(3);
  2302. var arrayEvery = createArrayMethod(4);
  2303. var arrayFind = createArrayMethod(5);
  2304. var arrayFindIndex = createArrayMethod(6);
  2305. var arrayIncludes = createArrayIncludes(true);
  2306. var arrayIndexOf = createArrayIncludes(false);
  2307. var arrayValues = ArrayIterators.values;
  2308. var arrayKeys = ArrayIterators.keys;
  2309. var arrayEntries = ArrayIterators.entries;
  2310. var arrayLastIndexOf = ArrayProto.lastIndexOf;
  2311. var arrayReduce = ArrayProto.reduce;
  2312. var arrayReduceRight = ArrayProto.reduceRight;
  2313. var arrayJoin = ArrayProto.join;
  2314. var arraySort = ArrayProto.sort;
  2315. var arraySlice = ArrayProto.slice;
  2316. var arrayToString = ArrayProto.toString;
  2317. var arrayToLocaleString = ArrayProto.toLocaleString;
  2318. var ITERATOR = wks('iterator');
  2319. var TAG = wks('toStringTag');
  2320. var TYPED_CONSTRUCTOR = uid('typed_constructor');
  2321. var DEF_CONSTRUCTOR = uid('def_constructor');
  2322. var ALL_CONSTRUCTORS = $typed.CONSTR;
  2323. var TYPED_ARRAY = $typed.TYPED;
  2324. var VIEW = $typed.VIEW;
  2325. var WRONG_LENGTH = 'Wrong length!';
  2326. var $map = createArrayMethod(1, function (O, length) {
  2327. return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
  2328. });
  2329. var LITTLE_ENDIAN = fails(function () {
  2330. // eslint-disable-next-line no-undef
  2331. return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
  2332. });
  2333. var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {
  2334. new Uint8Array(1).set({});
  2335. });
  2336. var toOffset = function (it, BYTES) {
  2337. var offset = toInteger(it);
  2338. if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');
  2339. return offset;
  2340. };
  2341. var validate = function (it) {
  2342. if (isObject(it) && TYPED_ARRAY in it) return it;
  2343. throw TypeError(it + ' is not a typed array!');
  2344. };
  2345. var allocate = function (C, length) {
  2346. if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {
  2347. throw TypeError('It is not a typed array constructor!');
  2348. } return new C(length);
  2349. };
  2350. var speciesFromList = function (O, list) {
  2351. return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
  2352. };
  2353. var fromList = function (C, list) {
  2354. var index = 0;
  2355. var length = list.length;
  2356. var result = allocate(C, length);
  2357. while (length > index) result[index] = list[index++];
  2358. return result;
  2359. };
  2360. var addGetter = function (it, key, internal) {
  2361. dP(it, key, { get: function () { return this._d[internal]; } });
  2362. };
  2363. var $from = function from(source /* , mapfn, thisArg */) {
  2364. var O = toObject(source);
  2365. var aLen = arguments.length;
  2366. var mapfn = aLen > 1 ? arguments[1] : undefined;
  2367. var mapping = mapfn !== undefined;
  2368. var iterFn = getIterFn(O);
  2369. var i, length, values, result, step, iterator;
  2370. if (iterFn != undefined && !isArrayIter(iterFn)) {
  2371. for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {
  2372. values.push(step.value);
  2373. } O = values;
  2374. }
  2375. if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
  2376. for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {
  2377. result[i] = mapping ? mapfn(O[i], i) : O[i];
  2378. }
  2379. return result;
  2380. };
  2381. var $of = function of(/* ...items */) {
  2382. var index = 0;
  2383. var length = arguments.length;
  2384. var result = allocate(this, length);
  2385. while (length > index) result[index] = arguments[index++];
  2386. return result;
  2387. };
  2388. // iOS Safari 6.x fails here
  2389. var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });
  2390. var $toLocaleString = function toLocaleString() {
  2391. return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
  2392. };
  2393. var proto = {
  2394. copyWithin: function copyWithin(target, start /* , end */) {
  2395. return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
  2396. },
  2397. every: function every(callbackfn /* , thisArg */) {
  2398. return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  2399. },
  2400. fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars
  2401. return arrayFill.apply(validate(this), arguments);
  2402. },
  2403. filter: function filter(callbackfn /* , thisArg */) {
  2404. return speciesFromList(this, arrayFilter(validate(this), callbackfn,
  2405. arguments.length > 1 ? arguments[1] : undefined));
  2406. },
  2407. find: function find(predicate /* , thisArg */) {
  2408. return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
  2409. },
  2410. findIndex: function findIndex(predicate /* , thisArg */) {
  2411. return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
  2412. },
  2413. forEach: function forEach(callbackfn /* , thisArg */) {
  2414. arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  2415. },
  2416. indexOf: function indexOf(searchElement /* , fromIndex */) {
  2417. return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
  2418. },
  2419. includes: function includes(searchElement /* , fromIndex */) {
  2420. return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
  2421. },
  2422. join: function join(separator) { // eslint-disable-line no-unused-vars
  2423. return arrayJoin.apply(validate(this), arguments);
  2424. },
  2425. lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars
  2426. return arrayLastIndexOf.apply(validate(this), arguments);
  2427. },
  2428. map: function map(mapfn /* , thisArg */) {
  2429. return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
  2430. },
  2431. reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
  2432. return arrayReduce.apply(validate(this), arguments);
  2433. },
  2434. reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
  2435. return arrayReduceRight.apply(validate(this), arguments);
  2436. },
  2437. reverse: function reverse() {
  2438. var that = this;
  2439. var length = validate(that).length;
  2440. var middle = Math.floor(length / 2);
  2441. var index = 0;
  2442. var value;
  2443. while (index < middle) {
  2444. value = that[index];
  2445. that[index++] = that[--length];
  2446. that[length] = value;
  2447. } return that;
  2448. },
  2449. some: function some(callbackfn /* , thisArg */) {
  2450. return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  2451. },
  2452. sort: function sort(comparefn) {
  2453. return arraySort.call(validate(this), comparefn);
  2454. },
  2455. subarray: function subarray(begin, end) {
  2456. var O = validate(this);
  2457. var length = O.length;
  2458. var $begin = toAbsoluteIndex(begin, length);
  2459. return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
  2460. O.buffer,
  2461. O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
  2462. toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)
  2463. );
  2464. }
  2465. };
  2466. var $slice = function slice(start, end) {
  2467. return speciesFromList(this, arraySlice.call(validate(this), start, end));
  2468. };
  2469. var $set = function set(arrayLike /* , offset */) {
  2470. validate(this);
  2471. var offset = toOffset(arguments[1], 1);
  2472. var length = this.length;
  2473. var src = toObject(arrayLike);
  2474. var len = toLength(src.length);
  2475. var index = 0;
  2476. if (len + offset > length) throw RangeError(WRONG_LENGTH);
  2477. while (index < len) this[offset + index] = src[index++];
  2478. };
  2479. var $iterators = {
  2480. entries: function entries() {
  2481. return arrayEntries.call(validate(this));
  2482. },
  2483. keys: function keys() {
  2484. return arrayKeys.call(validate(this));
  2485. },
  2486. values: function values() {
  2487. return arrayValues.call(validate(this));
  2488. }
  2489. };
  2490. var isTAIndex = function (target, key) {
  2491. return isObject(target)
  2492. && target[TYPED_ARRAY]
  2493. && typeof key != 'symbol'
  2494. && key in target
  2495. && String(+key) == String(key);
  2496. };
  2497. var $getDesc = function getOwnPropertyDescriptor(target, key) {
  2498. return isTAIndex(target, key = toPrimitive(key, true))
  2499. ? propertyDesc(2, target[key])
  2500. : gOPD(target, key);
  2501. };
  2502. var $setDesc = function defineProperty(target, key, desc) {
  2503. if (isTAIndex(target, key = toPrimitive(key, true))
  2504. && isObject(desc)
  2505. && has(desc, 'value')
  2506. && !has(desc, 'get')
  2507. && !has(desc, 'set')
  2508. // TODO: add validation descriptor w/o calling accessors
  2509. && !desc.configurable
  2510. && (!has(desc, 'writable') || desc.writable)
  2511. && (!has(desc, 'enumerable') || desc.enumerable)
  2512. ) {
  2513. target[key] = desc.value;
  2514. return target;
  2515. } return dP(target, key, desc);
  2516. };
  2517. if (!ALL_CONSTRUCTORS) {
  2518. $GOPD.f = $getDesc;
  2519. $DP.f = $setDesc;
  2520. }
  2521. $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {
  2522. getOwnPropertyDescriptor: $getDesc,
  2523. defineProperty: $setDesc
  2524. });
  2525. if (fails(function () { arrayToString.call({}); })) {
  2526. arrayToString = arrayToLocaleString = function toString() {
  2527. return arrayJoin.call(this);
  2528. };
  2529. }
  2530. var $TypedArrayPrototype$ = redefineAll({}, proto);
  2531. redefineAll($TypedArrayPrototype$, $iterators);
  2532. hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
  2533. redefineAll($TypedArrayPrototype$, {
  2534. slice: $slice,
  2535. set: $set,
  2536. constructor: function () { /* noop */ },
  2537. toString: arrayToString,
  2538. toLocaleString: $toLocaleString
  2539. });
  2540. addGetter($TypedArrayPrototype$, 'buffer', 'b');
  2541. addGetter($TypedArrayPrototype$, 'byteOffset', 'o');
  2542. addGetter($TypedArrayPrototype$, 'byteLength', 'l');
  2543. addGetter($TypedArrayPrototype$, 'length', 'e');
  2544. dP($TypedArrayPrototype$, TAG, {
  2545. get: function () { return this[TYPED_ARRAY]; }
  2546. });
  2547. // eslint-disable-next-line max-statements
  2548. module.exports = function (KEY, BYTES, wrapper, CLAMPED) {
  2549. CLAMPED = !!CLAMPED;
  2550. var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';
  2551. var GETTER = 'get' + KEY;
  2552. var SETTER = 'set' + KEY;
  2553. var TypedArray = global[NAME];
  2554. var Base = TypedArray || {};
  2555. var TAC = TypedArray && getPrototypeOf(TypedArray);
  2556. var FORCED = !TypedArray || !$typed.ABV;
  2557. var O = {};
  2558. var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];
  2559. var getter = function (that, index) {
  2560. var data = that._d;
  2561. return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
  2562. };
  2563. var setter = function (that, index, value) {
  2564. var data = that._d;
  2565. if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
  2566. data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
  2567. };
  2568. var addElement = function (that, index) {
  2569. dP(that, index, {
  2570. get: function () {
  2571. return getter(this, index);
  2572. },
  2573. set: function (value) {
  2574. return setter(this, index, value);
  2575. },
  2576. enumerable: true
  2577. });
  2578. };
  2579. if (FORCED) {
  2580. TypedArray = wrapper(function (that, data, $offset, $length) {
  2581. anInstance(that, TypedArray, NAME, '_d');
  2582. var index = 0;
  2583. var offset = 0;
  2584. var buffer, byteLength, length, klass;
  2585. if (!isObject(data)) {
  2586. length = toIndex(data);
  2587. byteLength = length * BYTES;
  2588. buffer = new $ArrayBuffer(byteLength);
  2589. } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
  2590. buffer = data;
  2591. offset = toOffset($offset, BYTES);
  2592. var $len = data.byteLength;
  2593. if ($length === undefined) {
  2594. if ($len % BYTES) throw RangeError(WRONG_LENGTH);
  2595. byteLength = $len - offset;
  2596. if (byteLength < 0) throw RangeError(WRONG_LENGTH);
  2597. } else {
  2598. byteLength = toLength($length) * BYTES;
  2599. if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);
  2600. }
  2601. length = byteLength / BYTES;
  2602. } else if (TYPED_ARRAY in data) {
  2603. return fromList(TypedArray, data);
  2604. } else {
  2605. return $from.call(TypedArray, data);
  2606. }
  2607. hide(that, '_d', {
  2608. b: buffer,
  2609. o: offset,
  2610. l: byteLength,
  2611. e: length,
  2612. v: new $DataView(buffer)
  2613. });
  2614. while (index < length) addElement(that, index++);
  2615. });
  2616. TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
  2617. hide(TypedArrayPrototype, 'constructor', TypedArray);
  2618. } else if (!fails(function () {
  2619. TypedArray(1);
  2620. }) || !fails(function () {
  2621. new TypedArray(-1); // eslint-disable-line no-new
  2622. }) || !$iterDetect(function (iter) {
  2623. new TypedArray(); // eslint-disable-line no-new
  2624. new TypedArray(null); // eslint-disable-line no-new
  2625. new TypedArray(1.5); // eslint-disable-line no-new
  2626. new TypedArray(iter); // eslint-disable-line no-new
  2627. }, true)) {
  2628. TypedArray = wrapper(function (that, data, $offset, $length) {
  2629. anInstance(that, TypedArray, NAME);
  2630. var klass;
  2631. // `ws` module bug, temporarily remove validation length for Uint8Array
  2632. // https://github.com/websockets/ws/pull/645
  2633. if (!isObject(data)) return new Base(toIndex(data));
  2634. if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
  2635. return $length !== undefined
  2636. ? new Base(data, toOffset($offset, BYTES), $length)
  2637. : $offset !== undefined
  2638. ? new Base(data, toOffset($offset, BYTES))
  2639. : new Base(data);
  2640. }
  2641. if (TYPED_ARRAY in data) return fromList(TypedArray, data);
  2642. return $from.call(TypedArray, data);
  2643. });
  2644. arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {
  2645. if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
  2646. });
  2647. TypedArray[PROTOTYPE] = TypedArrayPrototype;
  2648. if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;
  2649. }
  2650. var $nativeIterator = TypedArrayPrototype[ITERATOR];
  2651. var CORRECT_ITER_NAME = !!$nativeIterator
  2652. && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);
  2653. var $iterator = $iterators.values;
  2654. hide(TypedArray, TYPED_CONSTRUCTOR, true);
  2655. hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
  2656. hide(TypedArrayPrototype, VIEW, true);
  2657. hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
  2658. if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {
  2659. dP(TypedArrayPrototype, TAG, {
  2660. get: function () { return NAME; }
  2661. });
  2662. }
  2663. O[NAME] = TypedArray;
  2664. $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
  2665. $export($export.S, NAME, {
  2666. BYTES_PER_ELEMENT: BYTES
  2667. });
  2668. $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {
  2669. from: $from,
  2670. of: $of
  2671. });
  2672. if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
  2673. $export($export.P, NAME, proto);
  2674. setSpecies(NAME);
  2675. $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });
  2676. $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
  2677. if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
  2678. $export($export.P + $export.F * fails(function () {
  2679. new TypedArray(1).slice();
  2680. }), NAME, { slice: $slice });
  2681. $export($export.P + $export.F * (fails(function () {
  2682. return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();
  2683. }) || !fails(function () {
  2684. TypedArrayPrototype.toLocaleString.call([1, 2]);
  2685. })), NAME, { toLocaleString: $toLocaleString });
  2686. Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
  2687. if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
  2688. };
  2689. } else module.exports = function () { /* empty */ };
  2690. /***/ }),
  2691. /* 41 */
  2692. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2693. "use strict";
  2694. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  2695. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(45);
  2696. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Geometry", function() { return __WEBPACK_IMPORTED_MODULE_0__geometry__["a"]; });
  2697. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__cone_geometry__ = __webpack_require__(251);
  2698. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ConeGeometry", function() { return __WEBPACK_IMPORTED_MODULE_1__cone_geometry__["a"]; });
  2699. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__cube_geometry__ = __webpack_require__(252);
  2700. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "CubeGeometry", function() { return __WEBPACK_IMPORTED_MODULE_2__cube_geometry__["a"]; });
  2701. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__cylinder_geometry__ = __webpack_require__(253);
  2702. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "CylinderGeometry", function() { return __WEBPACK_IMPORTED_MODULE_3__cylinder_geometry__["a"]; });
  2703. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__ico_sphere_geometry__ = __webpack_require__(254);
  2704. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "IcoSphereGeometry", function() { return __WEBPACK_IMPORTED_MODULE_4__ico_sphere_geometry__["a"]; });
  2705. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__plane_geometry__ = __webpack_require__(255);
  2706. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "PlaneGeometry", function() { return __WEBPACK_IMPORTED_MODULE_5__plane_geometry__["a"]; });
  2707. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__sphere_geometry__ = __webpack_require__(256);
  2708. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SphereGeometry", function() { return __WEBPACK_IMPORTED_MODULE_6__sphere_geometry__["a"]; });
  2709. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__truncated_cone_geometry__ = __webpack_require__(105);
  2710. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TruncatedConeGeometry", function() { return __WEBPACK_IMPORTED_MODULE_7__truncated_cone_geometry__["a"]; });
  2711. //# sourceMappingURL=index.js.map
  2712. /***/ }),
  2713. /* 42 */
  2714. /***/ (function(module, exports, __webpack_require__) {
  2715. "use strict";
  2716. Object.defineProperty(exports, "__esModule", {
  2717. value: true
  2718. });
  2719. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  2720. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  2721. //
  2722. // Permission is hereby granted, free of charge, to any person obtaining a copy
  2723. // of this software and associated documentation files (the "Software"), to deal
  2724. // in the Software without restriction, including without limitation the rights
  2725. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  2726. // copies of the Software, and to permit persons to whom the Software is
  2727. // furnished to do so, subject to the following conditions:
  2728. //
  2729. // The above copyright notice and this permission notice shall be included in
  2730. // all copies or substantial portions of the Software.
  2731. //
  2732. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  2733. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  2734. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  2735. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  2736. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  2737. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  2738. // THE SOFTWARE.
  2739. var _log = __webpack_require__(17);
  2740. var _log2 = _interopRequireDefault(_log);
  2741. var _mathUtils = __webpack_require__(127);
  2742. var _math = __webpack_require__(16);
  2743. var _scale = __webpack_require__(77);
  2744. var _scale2 = _interopRequireDefault(_scale);
  2745. var _translate = __webpack_require__(78);
  2746. var _translate2 = _interopRequireDefault(_translate);
  2747. var _multiply = __webpack_require__(75);
  2748. var _multiply2 = _interopRequireDefault(_multiply);
  2749. var _invert = __webpack_require__(156);
  2750. var _invert2 = _interopRequireDefault(_invert);
  2751. var _perspective = __webpack_require__(76);
  2752. var _perspective2 = _interopRequireDefault(_perspective);
  2753. var _viewportMercatorProject = __webpack_require__(79);
  2754. var _assert = __webpack_require__(1);
  2755. var _assert2 = _interopRequireDefault(_assert);
  2756. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  2757. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  2758. var ZERO_VECTOR = [0, 0, 0];
  2759. var IDENTITY = (0, _mathUtils.createMat4)();
  2760. var DEFAULT_DISTANCE_SCALES = {
  2761. pixelsPerMeter: [1, 1, 1],
  2762. metersPerPixel: [1, 1, 1],
  2763. pixelsPerDegree: [1, 1, 1],
  2764. degreesPerPixel: [1, 1, 1]
  2765. };
  2766. var DEFAULT_ZOOM = 0;
  2767. var ERR_ARGUMENT = 'Illegal argument to Viewport';
  2768. var Viewport = function () {
  2769. /**
  2770. * @classdesc
  2771. * Manages coordinate system transformations for deck.gl.
  2772. *
  2773. * Note: The Viewport is immutable in the sense that it only has accessors.
  2774. * A new viewport instance should be created if any parameters have changed.
  2775. */
  2776. /* eslint-disable complexity, max-statements */
  2777. function Viewport() {
  2778. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  2779. _classCallCheck(this, Viewport);
  2780. var _opts$id = opts.id,
  2781. id = _opts$id === undefined ? null : _opts$id,
  2782. _opts$x = opts.x,
  2783. x = _opts$x === undefined ? 0 : _opts$x,
  2784. _opts$y = opts.y,
  2785. y = _opts$y === undefined ? 0 : _opts$y,
  2786. _opts$width = opts.width,
  2787. width = _opts$width === undefined ? 1 : _opts$width,
  2788. _opts$height = opts.height,
  2789. height = _opts$height === undefined ? 1 : _opts$height,
  2790. _opts$viewMatrix = opts.viewMatrix,
  2791. viewMatrix = _opts$viewMatrix === undefined ? IDENTITY : _opts$viewMatrix,
  2792. _opts$projectionMatri = opts.projectionMatrix,
  2793. projectionMatrix = _opts$projectionMatri === undefined ? null : _opts$projectionMatri,
  2794. _opts$fovy = opts.fovy,
  2795. fovy = _opts$fovy === undefined ? 75 : _opts$fovy,
  2796. _opts$near = opts.near,
  2797. near = _opts$near === undefined ? 0.1 : _opts$near,
  2798. _opts$far = opts.far,
  2799. far = _opts$far === undefined ? 1000 : _opts$far,
  2800. _opts$longitude = opts.longitude,
  2801. longitude = _opts$longitude === undefined ? null : _opts$longitude,
  2802. _opts$latitude = opts.latitude,
  2803. latitude = _opts$latitude === undefined ? null : _opts$latitude,
  2804. _opts$zoom = opts.zoom,
  2805. zoom = _opts$zoom === undefined ? null : _opts$zoom,
  2806. _opts$position = opts.position,
  2807. position = _opts$position === undefined ? null : _opts$position,
  2808. _opts$modelMatrix = opts.modelMatrix,
  2809. modelMatrix = _opts$modelMatrix === undefined ? null : _opts$modelMatrix,
  2810. _opts$distanceScales = opts.distanceScales,
  2811. distanceScales = _opts$distanceScales === undefined ? null : _opts$distanceScales;
  2812. //iclient
  2813. this.isGeographicCoordinateSystem=opts.isGeographicCoordinateSystem;
  2814. this.id = id || this.constructor.displayName || 'viewport';
  2815. // Check if we have a geospatial anchor
  2816. this.isGeospatial = Number.isFinite(latitude) && Number.isFinite(longitude);
  2817. // Silently allow apps to send in w,h = 0,0
  2818. this.x = x;
  2819. this.y = y;
  2820. this.width = width || 1;
  2821. this.height = height || 1;
  2822. this.zoom = zoom;
  2823. if (!Number.isFinite(this.zoom)) {
  2824. this.zoom = this.isGeospatial ? (0, _viewportMercatorProject.getMeterZoom)({ latitude: latitude }) : DEFAULT_ZOOM;
  2825. }
  2826. this.scale = Math.pow(2, this.zoom);
  2827. // Calculate distance scales if lng/lat/zoom are provided
  2828. this.distanceScales = this.isGeospatial ? (0, _viewportMercatorProject.getDistanceScales)({ latitude: latitude, longitude: longitude, scale: this.scale,isGeographicCoordinateSystem:this.isGeographicCoordinateSystem }) : distanceScales || DEFAULT_DISTANCE_SCALES;
  2829. this.focalDistance = opts.focalDistance || 1;
  2830. this.distanceScales.metersPerPixel = new _math.Vector3(this.distanceScales.metersPerPixel);
  2831. this.distanceScales.pixelsPerMeter = new _math.Vector3(this.distanceScales.pixelsPerMeter);
  2832. this.position = ZERO_VECTOR;
  2833. this.meterOffset = ZERO_VECTOR;
  2834. if (position) {
  2835. // Apply model matrix if supplied
  2836. this.position = position;
  2837. this.modelMatrix = modelMatrix;
  2838. this.meterOffset = modelMatrix ? modelMatrix.transformVector(position) : position;
  2839. }
  2840. this.viewMatrixUncentered = viewMatrix;
  2841. if (this.isGeospatial) {
  2842. // Determine camera center
  2843. this.center = (0, _viewportMercatorProject.getWorldPosition)({
  2844. longitude: longitude,
  2845. latitude: latitude,
  2846. scale: this.scale,
  2847. distanceScales: this.distanceScales,
  2848. meterOffset: this.meterOffset
  2849. });
  2850. // Make a centered version of the matrix for projection modes without an offset
  2851. this.viewMatrix = new _math.Matrix4()
  2852. // Apply the uncentered view matrix
  2853. .multiplyRight(this.viewMatrixUncentered)
  2854. // The Mercator world coordinate system is upper left,
  2855. // but GL expects lower left, so we flip it around the center after all transforms are done
  2856. .scale([1, -1, 1])
  2857. // And center it
  2858. .translate(new _math.Vector3(this.center || ZERO_VECTOR).negate());
  2859. } else {
  2860. this.center = position;
  2861. this.viewMatrix = viewMatrix;
  2862. }
  2863. // Create a projection matrix if not supplied
  2864. if (projectionMatrix) {
  2865. this.projectionMatrix = projectionMatrix;
  2866. } else {
  2867. (0, _assert2.default)(Number.isFinite(fovy));
  2868. var DEGREES_TO_RADIANS = Math.PI / 180;
  2869. var fovyRadians = fovy * DEGREES_TO_RADIANS;
  2870. var aspect = this.width / this.height;
  2871. this.projectionMatrix = (0, _perspective2.default)([], fovyRadians, aspect, near, far);
  2872. }
  2873. // Init pixel matrices
  2874. this._initMatrices();
  2875. // Bind methods for easy access
  2876. this.equals = this.equals.bind(this);
  2877. this.project = this.project.bind(this);
  2878. this.unproject = this.unproject.bind(this);
  2879. this.projectFlat = this.projectFlat.bind(this);
  2880. this.unprojectFlat = this.unprojectFlat.bind(this);
  2881. this.getMatrices = this.getMatrices.bind(this);
  2882. }
  2883. /* eslint-enable complexity, max-statements */
  2884. // Two viewports are equal if width and height are identical, and if
  2885. // their view and projection matrices are (approximately) equal.
  2886. _createClass(Viewport, [{
  2887. key: 'equals',
  2888. value: function equals(viewport) {
  2889. if (!(viewport instanceof Viewport)) {
  2890. return false;
  2891. }
  2892. return viewport.width === this.width && viewport.height === this.height && (0, _math.equals)(viewport.projectionMatrix, this.projectionMatrix) && (0, _math.equals)(viewport.viewMatrix, this.viewMatrix);
  2893. // TODO - check distance scales?
  2894. }
  2895. /**
  2896. * Projects xyz (possibly latitude and longitude) to pixel coordinates in window
  2897. * using viewport projection parameters
  2898. * - [longitude, latitude] to [x, y]
  2899. * - [longitude, latitude, Z] => [x, y, z]
  2900. * Note: By default, returns top-left coordinates for canvas/SVG type render
  2901. *
  2902. * @param {Array} lngLatZ - [lng, lat] or [lng, lat, Z]
  2903. * @param {Object} opts - options
  2904. * @param {Object} opts.topLeft=true - Whether projected coords are top left
  2905. * @return {Array} - [x, y] or [x, y, z] in top left coords
  2906. */
  2907. }, {
  2908. key: 'project',
  2909. value: function project(xyz) {
  2910. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  2911. _ref$topLeft = _ref.topLeft,
  2912. topLeft = _ref$topLeft === undefined ? true : _ref$topLeft;
  2913. var _xyz = _slicedToArray(xyz, 3),
  2914. x0 = _xyz[0],
  2915. y0 = _xyz[1],
  2916. _xyz$ = _xyz[2],
  2917. z0 = _xyz$ === undefined ? 0 : _xyz$;
  2918. var _projectFlat2 = this.projectFlat([x0, y0]),
  2919. _projectFlat3 = _slicedToArray(_projectFlat2, 2),
  2920. X = _projectFlat3[0],
  2921. Y = _projectFlat3[1];
  2922. var coord = (0, _viewportMercatorProject.worldToPixels)([X, Y, z0], this.pixelProjectionMatrix);
  2923. var _coord = _slicedToArray(coord, 2),
  2924. x = _coord[0],
  2925. y = _coord[1];
  2926. var y2 = topLeft ? y : this.height - y;
  2927. return xyz.length === 2 ? [x, y2] : [x, y2, coord[2]];
  2928. }
  2929. /**
  2930. * Unproject pixel coordinates on screen onto world coordinates,
  2931. * (possibly [lon, lat]) on map.
  2932. * - [x, y] => [lng, lat]
  2933. * - [x, y, z] => [lng, lat, Z]
  2934. * @param {Array} xyz -
  2935. * @param {Object} opts - options
  2936. * @param {Object} opts.topLeft=true - Whether origin is top left
  2937. * @return {Array|null} - [lng, lat, Z] or [X, Y, Z]
  2938. */
  2939. }, {
  2940. key: 'unproject',
  2941. value: function unproject(xyz) {
  2942. var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  2943. _ref2$topLeft = _ref2.topLeft,
  2944. topLeft = _ref2$topLeft === undefined ? true : _ref2$topLeft,
  2945. targetZ = _ref2.targetZ;
  2946. var _xyz2 = _slicedToArray(xyz, 3),
  2947. x = _xyz2[0],
  2948. y = _xyz2[1],
  2949. z = _xyz2[2];
  2950. var y2 = topLeft ? y : this.height - y;
  2951. var coord = (0, _viewportMercatorProject.pixelsToWorld)([x, y2, z], this.pixelUnprojectionMatrix, targetZ);
  2952. var _unprojectFlat2 = this.unprojectFlat(coord),
  2953. _unprojectFlat3 = _slicedToArray(_unprojectFlat2, 2),
  2954. X = _unprojectFlat3[0],
  2955. Y = _unprojectFlat3[1];
  2956. if (Number.isFinite(z)) {
  2957. // Has depth component
  2958. return [X, Y, coord[2]];
  2959. }
  2960. return Number.isFinite(targetZ) ? [X, Y, targetZ] : [X, Y];
  2961. }
  2962. // NON_LINEAR PROJECTION HOOKS
  2963. // Used for web meractor projection
  2964. /**
  2965. * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.
  2966. * Performs the nonlinear part of the web mercator projection.
  2967. * Remaining projection is done with 4x4 matrices which also handles
  2968. * perspective.
  2969. * @param {Array} lngLat - [lng, lat] coordinates
  2970. * Specifies a point on the sphere to project onto the map.
  2971. * @return {Array} [x,y] coordinates.
  2972. */
  2973. }, {
  2974. key: 'projectFlat',
  2975. value: function projectFlat(_ref3) {
  2976. var _ref4 = _slicedToArray(_ref3, 2),
  2977. x = _ref4[0],
  2978. y = _ref4[1];
  2979. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  2980. return this._projectFlat.apply(this, arguments);
  2981. }
  2982. /**
  2983. * Unproject world point [x,y] on map onto {lat, lon} on sphere
  2984. * @param {object|Vector} xy - object with {x,y} members
  2985. * representing point on projected map plane
  2986. * @return {GeoCoordinates} - object with {lat,lon} of point on sphere.
  2987. * Has toArray method if you need a GeoJSON Array.
  2988. * Per cartographic tradition, lat and lon are specified as degrees.
  2989. */
  2990. }, {
  2991. key: 'unprojectFlat',
  2992. value: function unprojectFlat(xyz) {
  2993. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  2994. return this._unprojectFlat.apply(this, arguments);
  2995. }
  2996. // TODO - why do we need these?
  2997. }, {
  2998. key: '_projectFlat',
  2999. value: function _projectFlat(xyz) {
  3000. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  3001. return xyz;
  3002. }
  3003. }, {
  3004. key: '_unprojectFlat',
  3005. value: function _unprojectFlat(xyz) {
  3006. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  3007. return xyz;
  3008. }
  3009. }, {
  3010. key: 'getMercatorParams',
  3011. value: function getMercatorParams() {
  3012. var lngLat = this._addMetersToLngLat([this.longitude || 0, this.latitude || 0], this.meterOffset);
  3013. return {
  3014. longitude: lngLat[0],
  3015. latitude: lngLat[1]
  3016. };
  3017. }
  3018. }, {
  3019. key: 'isMapSynched',
  3020. value: function isMapSynched() {
  3021. return false;
  3022. }
  3023. }, {
  3024. key: 'getDistanceScales',
  3025. value: function getDistanceScales() {
  3026. var coordinateOrigin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
  3027. if (coordinateOrigin) {
  3028. return (0, _viewportMercatorProject.getDistanceScales)({
  3029. longitude: coordinateOrigin[0],
  3030. latitude: coordinateOrigin[1],
  3031. scale: this.scale,
  3032. highPrecision: true
  3033. });
  3034. }
  3035. return this.distanceScales;
  3036. }
  3037. }, {
  3038. key: 'getMatrices',
  3039. value: function getMatrices() {
  3040. var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  3041. _ref5$modelMatrix = _ref5.modelMatrix,
  3042. modelMatrix = _ref5$modelMatrix === undefined ? null : _ref5$modelMatrix;
  3043. var modelViewProjectionMatrix = this.viewProjectionMatrix;
  3044. var pixelProjectionMatrix = this.pixelProjectionMatrix;
  3045. var pixelUnprojectionMatrix = this.pixelUnprojectionMatrix;
  3046. if (modelMatrix) {
  3047. modelViewProjectionMatrix = (0, _multiply2.default)([], this.viewProjectionMatrix, modelMatrix);
  3048. pixelProjectionMatrix = (0, _multiply2.default)([], this.pixelProjectionMatrix, modelMatrix);
  3049. pixelUnprojectionMatrix = (0, _invert2.default)([], pixelProjectionMatrix);
  3050. }
  3051. var matrices = Object.assign({
  3052. modelViewProjectionMatrix: modelViewProjectionMatrix,
  3053. viewProjectionMatrix: this.viewProjectionMatrix,
  3054. viewMatrix: this.viewMatrix,
  3055. projectionMatrix: this.projectionMatrix,
  3056. // project/unproject between pixels and world
  3057. pixelProjectionMatrix: pixelProjectionMatrix,
  3058. pixelUnprojectionMatrix: pixelUnprojectionMatrix,
  3059. width: this.width,
  3060. height: this.height,
  3061. scale: this.scale
  3062. });
  3063. return matrices;
  3064. }
  3065. // EXPERIMENTAL METHODS
  3066. }, {
  3067. key: 'getCameraPosition',
  3068. value: function getCameraPosition() {
  3069. return this.cameraPosition;
  3070. }
  3071. }, {
  3072. key: 'getCameraDirection',
  3073. value: function getCameraDirection() {
  3074. return this.cameraDirection;
  3075. }
  3076. }, {
  3077. key: 'getCameraUp',
  3078. value: function getCameraUp() {
  3079. return this.cameraUp;
  3080. }
  3081. // TODO - these are duplicating WebMercator methods
  3082. }, {
  3083. key: '_addMetersToLngLat',
  3084. value: function _addMetersToLngLat(lngLatZ, xyz) {
  3085. var _lngLatZ = _slicedToArray(lngLatZ, 3),
  3086. lng = _lngLatZ[0],
  3087. lat = _lngLatZ[1],
  3088. _lngLatZ$ = _lngLatZ[2],
  3089. Z = _lngLatZ$ === undefined ? 0 : _lngLatZ$;
  3090. var _metersToLngLatDelta2 = this._metersToLngLatDelta(xyz),
  3091. _metersToLngLatDelta3 = _slicedToArray(_metersToLngLatDelta2, 3),
  3092. deltaLng = _metersToLngLatDelta3[0],
  3093. deltaLat = _metersToLngLatDelta3[1],
  3094. _metersToLngLatDelta4 = _metersToLngLatDelta3[2],
  3095. deltaZ = _metersToLngLatDelta4 === undefined ? 0 : _metersToLngLatDelta4;
  3096. return lngLatZ.length === 2 ? [lng + deltaLng, lat + deltaLat] : [lng + deltaLng, lat + deltaLat, Z + deltaZ];
  3097. }
  3098. }, {
  3099. key: '_metersToLngLatDelta',
  3100. value: function _metersToLngLatDelta(xyz) {
  3101. var _xyz3 = _slicedToArray(xyz, 3),
  3102. x = _xyz3[0],
  3103. y = _xyz3[1],
  3104. _xyz3$ = _xyz3[2],
  3105. z = _xyz3$ === undefined ? 0 : _xyz3$;
  3106. (0, _assert2.default)(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z), ERR_ARGUMENT);
  3107. var _distanceScales = this.distanceScales,
  3108. pixelsPerMeter = _distanceScales.pixelsPerMeter,
  3109. degreesPerPixel = _distanceScales.degreesPerPixel;
  3110. var deltaLng = x * pixelsPerMeter[0] * degreesPerPixel[0];
  3111. var deltaLat = y * pixelsPerMeter[1] * degreesPerPixel[1];
  3112. return xyz.length === 2 ? [deltaLng, deltaLat] : [deltaLng, deltaLat, z];
  3113. }
  3114. // INTERNAL METHODS
  3115. }, {
  3116. key: '_initMatrices',
  3117. value: function _initMatrices() {
  3118. // Note: As usual, matrix operations should be applied in "reverse" order
  3119. // since vectors will be multiplied in from the right during transformation
  3120. var vpm = (0, _mathUtils.createMat4)();
  3121. (0, _multiply2.default)(vpm, vpm, this.projectionMatrix);
  3122. (0, _multiply2.default)(vpm, vpm, this.viewMatrix);
  3123. this.viewProjectionMatrix = vpm;
  3124. // console.log('VPM', this.viewMatrix, this.projectionMatrix, this.viewProjectionMatrix);
  3125. // Calculate inverse view matrix
  3126. this.viewMatrixInverse = (0, _invert2.default)([], this.viewMatrix) || this.viewMatrix;
  3127. // Decompose camera directions
  3128. var _extractCameraVectors = (0, _mathUtils.extractCameraVectors)({
  3129. viewMatrix: this.viewMatrix,
  3130. viewMatrixInverse: this.viewMatrixInverse
  3131. }),
  3132. eye = _extractCameraVectors.eye,
  3133. direction = _extractCameraVectors.direction,
  3134. up = _extractCameraVectors.up;
  3135. this.cameraPosition = eye;
  3136. this.cameraDirection = direction;
  3137. this.cameraUp = up;
  3138. // console.log(this.cameraPosition, this.cameraDirection, this.cameraUp);
  3139. /*
  3140. * Builds matrices that converts preprojected lngLats to screen pixels
  3141. * and vice versa.
  3142. * Note: Currently returns bottom-left coordinates!
  3143. * Note: Starts with the GL projection matrix and adds steps to the
  3144. * scale and translate that matrix onto the window.
  3145. * Note: WebGL controls clip space to screen projection with gl.viewport
  3146. * and does not need this step.
  3147. */
  3148. // matrix for conversion from world location to screen (pixel) coordinates
  3149. var m = (0, _mathUtils.createMat4)();
  3150. (0, _scale2.default)(m, m, [this.width / 2, -this.height / 2, 1]);
  3151. (0, _translate2.default)(m, m, [1, -1, 0]);
  3152. (0, _multiply2.default)(m, m, this.viewProjectionMatrix);
  3153. this.pixelProjectionMatrix = m;
  3154. this.pixelUnprojectionMatrix = (0, _invert2.default)((0, _mathUtils.createMat4)(), this.pixelProjectionMatrix);
  3155. if (!this.pixelUnprojectionMatrix) {
  3156. _log2.default.warn('Pixel project matrix not invertible');
  3157. // throw new Error('Pixel project matrix not invertible');
  3158. }
  3159. }
  3160. }]);
  3161. return Viewport;
  3162. }();
  3163. exports.default = Viewport;
  3164. Viewport.displayName = 'Viewport';
  3165. /***/ }),
  3166. /* 43 */
  3167. /***/ (function(module, exports, __webpack_require__) {
  3168. // 22.1.3.31 Array.prototype[@@unscopables]
  3169. var UNSCOPABLES = __webpack_require__(6)('unscopables');
  3170. var ArrayProto = Array.prototype;
  3171. if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(19)(ArrayProto, UNSCOPABLES, {});
  3172. module.exports = function (key) {
  3173. ArrayProto[UNSCOPABLES][key] = true;
  3174. };
  3175. /***/ }),
  3176. /* 44 */
  3177. /***/ (function(module, exports, __webpack_require__) {
  3178. var META = __webpack_require__(58)('meta');
  3179. var isObject = __webpack_require__(5);
  3180. var has = __webpack_require__(18);
  3181. var setDesc = __webpack_require__(10).f;
  3182. var id = 0;
  3183. var isExtensible = Object.isExtensible || function () {
  3184. return true;
  3185. };
  3186. var FREEZE = !__webpack_require__(4)(function () {
  3187. return isExtensible(Object.preventExtensions({}));
  3188. });
  3189. var setMeta = function (it) {
  3190. setDesc(it, META, { value: {
  3191. i: 'O' + ++id, // object ID
  3192. w: {} // weak collections IDs
  3193. } });
  3194. };
  3195. var fastKey = function (it, create) {
  3196. // return primitive with prefix
  3197. if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
  3198. if (!has(it, META)) {
  3199. // can't set metadata to uncaught frozen object
  3200. if (!isExtensible(it)) return 'F';
  3201. // not necessary to add metadata
  3202. if (!create) return 'E';
  3203. // add missing metadata
  3204. setMeta(it);
  3205. // return object ID
  3206. } return it[META].i;
  3207. };
  3208. var getWeak = function (it, create) {
  3209. if (!has(it, META)) {
  3210. // can't set metadata to uncaught frozen object
  3211. if (!isExtensible(it)) return true;
  3212. // not necessary to add metadata
  3213. if (!create) return false;
  3214. // add missing metadata
  3215. setMeta(it);
  3216. // return hash weak collections IDs
  3217. } return it[META].w;
  3218. };
  3219. // add metadata on freeze-family methods calling
  3220. var onFreeze = function (it) {
  3221. if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
  3222. return it;
  3223. };
  3224. var meta = module.exports = {
  3225. KEY: META,
  3226. NEED: false,
  3227. fastKey: fastKey,
  3228. getWeak: getWeak,
  3229. onFreeze: onFreeze
  3230. };
  3231. /***/ }),
  3232. /* 45 */
  3233. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  3234. "use strict";
  3235. /* unused harmony export DRAW_MODE */
  3236. /* harmony export (immutable) */ __webpack_exports__["b"] = getDrawMode;
  3237. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(8);
  3238. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_assert__ = __webpack_require__(1);
  3239. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_assert__);
  3240. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  3241. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  3242. // Rendering primitives - specify how to extract primitives from vertices.
  3243. // NOTE: These are numerically identical to the corresponding WebGL/OpenGL constants
  3244. var DRAW_MODE = {
  3245. POINTS: 0x0000, // draw single points.
  3246. LINES: 0x0001, // draw lines. Each vertex connects to the one after it.
  3247. LINE_LOOP: 0x0002, // draw lines. Each set of two vertices is treated as a separate line segment.
  3248. LINE_STRIP: 0x0003, // draw a connected group of line segments from the first vertex to the last
  3249. TRIANGLES: 0x0004, // draw triangles. Each set of three vertices creates a separate triangle.
  3250. TRIANGLE_STRIP: 0x0005, // draw a connected group of triangles.
  3251. TRIANGLE_FAN: 0x0006 // draw a connected group of triangles.
  3252. // Each vertex connects to the previous and the first vertex in the fan.
  3253. };
  3254. // Helper function to handle string draw modes - when using this library without WebGL constants
  3255. function getDrawMode(drawMode) {
  3256. var mode = typeof drawMode === 'string' ? DRAW_MODE[drawMode] || DRAW_MODE.TRIANGLES : drawMode;
  3257. __WEBPACK_IMPORTED_MODULE_1_assert___default()(mode >= 0 && mode <= DRAW_MODE.TRIANGLE_FAN, 'Illegal drawMode');
  3258. return mode;
  3259. }
  3260. var Geometry = /*#__PURE__*/function () {
  3261. function Geometry() {
  3262. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  3263. _classCallCheck(this, Geometry);
  3264. var id = opts.id,
  3265. _opts$drawMode = opts.drawMode,
  3266. drawMode = _opts$drawMode === undefined ? DRAW_MODE.TRIANGLES : _opts$drawMode,
  3267. _opts$vertexCount = opts.vertexCount,
  3268. vertexCount = _opts$vertexCount === undefined ? undefined : _opts$vertexCount,
  3269. attributes = opts.attributes;
  3270. this.id = id || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["d" /* uid */])(this.constructor.name);
  3271. this.drawMode = getDrawMode(drawMode);
  3272. this.vertexCount = vertexCount;
  3273. this.attributes = {};
  3274. this.needsRedraw = true;
  3275. this.userData = {};
  3276. Object.seal(this);
  3277. if (attributes) {
  3278. this.setAttributes(attributes);
  3279. }
  3280. }
  3281. _createClass(Geometry, [{
  3282. key: 'setNeedsRedraw',
  3283. value: function setNeedsRedraw() {
  3284. var redraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  3285. this.needsRedraw = redraw;
  3286. return this;
  3287. }
  3288. }, {
  3289. key: 'getNeedsRedraw',
  3290. value: function getNeedsRedraw() {
  3291. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  3292. _ref$clearRedrawFlags = _ref.clearRedrawFlags,
  3293. clearRedrawFlags = _ref$clearRedrawFlags === undefined ? false : _ref$clearRedrawFlags;
  3294. var redraw = false;
  3295. redraw = redraw || this.needsRedraw;
  3296. this.needsRedraw = this.needsRedraw && !clearRedrawFlags;
  3297. return redraw;
  3298. }
  3299. }, {
  3300. key: 'setVertexCount',
  3301. value: function setVertexCount(vertexCount) {
  3302. this.vertexCount = vertexCount;
  3303. }
  3304. }, {
  3305. key: 'getVertexCount',
  3306. value: function getVertexCount() {
  3307. if (this.vertexCount !== undefined) {
  3308. return this.vertexCount;
  3309. } else if (this.attributes.indices) {
  3310. return this.attributes.indices.value.length;
  3311. } else if (this.attributes.vertices) {
  3312. return this.attributes.vertices.value.length / 3;
  3313. } else if (this.attributes.positions) {
  3314. return this.attributes.positions.value.length / 3;
  3315. }
  3316. return false;
  3317. }
  3318. }, {
  3319. key: 'hasAttribute',
  3320. value: function hasAttribute(attributeName) {
  3321. return Boolean(this.attributes[attributeName]);
  3322. }
  3323. }, {
  3324. key: 'getAttribute',
  3325. value: function getAttribute(attributeName) {
  3326. var attribute = this.attributes[attributeName];
  3327. __WEBPACK_IMPORTED_MODULE_1_assert___default()(attribute);
  3328. return attribute.value;
  3329. }
  3330. }, {
  3331. key: 'getArray',
  3332. value: function getArray(attributeName) {
  3333. var attribute = this.attributes[attributeName];
  3334. __WEBPACK_IMPORTED_MODULE_1_assert___default()(attribute);
  3335. return attribute.value;
  3336. }
  3337. }, {
  3338. key: 'getAttributes',
  3339. value: function getAttributes() {
  3340. return this.attributes;
  3341. }
  3342. // Attribute
  3343. // value: typed array
  3344. // type: indices, vertices, uvs
  3345. // size: elements per vertex
  3346. // target: WebGL buffer type (string or constant)
  3347. }, {
  3348. key: 'setAttributes',
  3349. value: function setAttributes(attributes) {
  3350. for (var attributeName in attributes) {
  3351. var attribute = attributes[attributeName];
  3352. // Wrap "unwrapped" arrays and try to autodetect their type
  3353. attribute = ArrayBuffer.isView(attribute) ? { value: attribute } : attribute;
  3354. __WEBPACK_IMPORTED_MODULE_1_assert___default()(ArrayBuffer.isView(attribute.value), this._print(attributeName) + ': must be typed array or object with value as typed array');
  3355. this._autoDetectAttribute(attributeName, attribute);
  3356. this.attributes[attributeName] = Object.assign({}, attribute, {
  3357. instanced: attribute.instanced || 0
  3358. });
  3359. }
  3360. this.setNeedsRedraw();
  3361. return this;
  3362. }
  3363. // Check for well known attribute names
  3364. /* eslint-disable default-case, complexity */
  3365. }, {
  3366. key: '_autoDetectAttribute',
  3367. value: function _autoDetectAttribute(attributeName, attribute) {
  3368. var category = void 0;
  3369. switch (attributeName) {
  3370. case 'indices':
  3371. category = category || 'indices';
  3372. break;
  3373. case 'texCoords':
  3374. case 'texCoord1':
  3375. case 'texCoord2':
  3376. case 'texCoord3':
  3377. category = 'uvs';
  3378. break;
  3379. case 'vertices':
  3380. case 'positions':
  3381. case 'normals':
  3382. case 'pickingColors':
  3383. category = 'vectors';
  3384. break;
  3385. }
  3386. // Check for categorys
  3387. switch (category) {
  3388. case 'vectors':
  3389. attribute.size = attribute.size || 3;
  3390. break;
  3391. case 'uvs':
  3392. attribute.size = attribute.size || 2;
  3393. break;
  3394. case 'indices':
  3395. attribute.size = attribute.size || 1;
  3396. attribute.isIndexed = attribute.isIndexed || true;
  3397. __WEBPACK_IMPORTED_MODULE_1_assert___default()(attribute.value instanceof Uint16Array || attribute.value instanceof Uint32Array, 'attribute array for "indices" must be of integer type');
  3398. break;
  3399. }
  3400. __WEBPACK_IMPORTED_MODULE_1_assert___default()(attribute.size, 'attribute ' + attributeName + ' needs size');
  3401. }
  3402. /* eslint-enable default-case, complexity */
  3403. }, {
  3404. key: '_print',
  3405. value: function _print(attributeName) {
  3406. return 'Geometry ' + this.id + ' attribute ' + attributeName;
  3407. }
  3408. }]);
  3409. return Geometry;
  3410. }();
  3411. /* harmony default export */ __webpack_exports__["a"] = (Geometry);
  3412. //# sourceMappingURL=geometry.js.map
  3413. /***/ }),
  3414. /* 46 */
  3415. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  3416. "use strict";
  3417. // GL constants, copied from Mozilla documentation
  3418. // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants
  3419. // Standard WebGL 1 constants
  3420. // These constants are defined on the WebGLRenderingContext interface.
  3421. /* eslint-disable key-spacing, max-len, no-inline-comments, camelcase */
  3422. /* harmony default export */ __webpack_exports__["a"] = ({
  3423. // Clearing buffers
  3424. // Constants passed to clear() to clear buffer masks.
  3425. DEPTH_BUFFER_BIT: 0x00000100,
  3426. STENCIL_BUFFER_BIT: 0x00000400,
  3427. COLOR_BUFFER_BIT: 0x00004000,
  3428. // Rendering primitives
  3429. // Constants passed to drawElements() or drawArrays() to specify what kind of primitive to render.
  3430. POINTS: 0x0000,
  3431. LINES: 0x0001,
  3432. LINE_LOOP: 0x0002,
  3433. LINE_STRIP: 0x0003,
  3434. TRIANGLES: 0x0004,
  3435. TRIANGLE_STRIP: 0x0005,
  3436. TRIANGLE_FAN: 0x0006,
  3437. // Blending modes
  3438. // Constants passed to blendFunc() or blendFuncSeparate() to specify the blending mode (for both, RBG and alpha, or separately).
  3439. ZERO: 0,
  3440. ONE: 1,
  3441. SRC_COLOR: 0x0300,
  3442. ONE_MINUS_SRC_COLOR: 0x0301,
  3443. SRC_ALPHA: 0x0302,
  3444. ONE_MINUS_SRC_ALPHA: 0x0303,
  3445. DST_ALPHA: 0x0304,
  3446. ONE_MINUS_DST_ALPHA: 0x0305,
  3447. DST_COLOR: 0x0306,
  3448. ONE_MINUS_DST_COLOR: 0x0307,
  3449. SRC_ALPHA_SATURATE: 0x0308,
  3450. CONSTANT_COLOR: 0x8001,
  3451. ONE_MINUS_CONSTANT_COLOR: 0x8002,
  3452. CONSTANT_ALPHA: 0x8003,
  3453. ONE_MINUS_CONSTANT_ALPHA: 0x8004,
  3454. // Blending equations
  3455. // Constants passed to blendEquation() or blendEquationSeparate() to control
  3456. // how the blending is calculated (for both, RBG and alpha, or separately).
  3457. FUNC_ADD: 0x8006,
  3458. FUNC_SUBTRACT: 0x800A,
  3459. FUNC_REVERSE_SUBTRACT: 0x800B,
  3460. // Getting GL parameter information
  3461. // Constants passed to getParameter() to specify what information to return.
  3462. BLEND_EQUATION: 0x8009,
  3463. BLEND_EQUATION_RGB: 0x8009,
  3464. BLEND_EQUATION_ALPHA: 0x883D,
  3465. BLEND_DST_RGB: 0x80C8,
  3466. BLEND_SRC_RGB: 0x80C9,
  3467. BLEND_DST_ALPHA: 0x80CA,
  3468. BLEND_SRC_ALPHA: 0x80CB,
  3469. BLEND_COLOR: 0x8005,
  3470. ARRAY_BUFFER_BINDING: 0x8894,
  3471. ELEMENT_ARRAY_BUFFER_BINDING: 0x8895,
  3472. LINE_WIDTH: 0x0B21,
  3473. ALIASED_POINT_SIZE_RANGE: 0x846D,
  3474. ALIASED_LINE_WIDTH_RANGE: 0x846E,
  3475. CULL_FACE_MODE: 0x0B45,
  3476. FRONT_FACE: 0x0B46,
  3477. DEPTH_RANGE: 0x0B70,
  3478. DEPTH_WRITEMASK: 0x0B72,
  3479. DEPTH_CLEAR_VALUE: 0x0B73,
  3480. DEPTH_FUNC: 0x0B74,
  3481. STENCIL_CLEAR_VALUE: 0x0B91,
  3482. STENCIL_FUNC: 0x0B92,
  3483. STENCIL_FAIL: 0x0B94,
  3484. STENCIL_PASS_DEPTH_FAIL: 0x0B95,
  3485. STENCIL_PASS_DEPTH_PASS: 0x0B96,
  3486. STENCIL_REF: 0x0B97,
  3487. STENCIL_VALUE_MASK: 0x0B93,
  3488. STENCIL_WRITEMASK: 0x0B98,
  3489. STENCIL_BACK_FUNC: 0x8800,
  3490. STENCIL_BACK_FAIL: 0x8801,
  3491. STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802,
  3492. STENCIL_BACK_PASS_DEPTH_PASS: 0x8803,
  3493. STENCIL_BACK_REF: 0x8CA3,
  3494. STENCIL_BACK_VALUE_MASK: 0x8CA4,
  3495. STENCIL_BACK_WRITEMASK: 0x8CA5,
  3496. VIEWPORT: 0x0BA2,
  3497. SCISSOR_BOX: 0x0C10,
  3498. COLOR_CLEAR_VALUE: 0x0C22,
  3499. COLOR_WRITEMASK: 0x0C23,
  3500. UNPACK_ALIGNMENT: 0x0CF5,
  3501. PACK_ALIGNMENT: 0x0D05,
  3502. MAX_TEXTURE_SIZE: 0x0D33,
  3503. MAX_VIEWPORT_DIMS: 0x0D3A,
  3504. SUBPIXEL_BITS: 0x0D50,
  3505. RED_BITS: 0x0D52,
  3506. GREEN_BITS: 0x0D53,
  3507. BLUE_BITS: 0x0D54,
  3508. ALPHA_BITS: 0x0D55,
  3509. DEPTH_BITS: 0x0D56,
  3510. STENCIL_BITS: 0x0D57,
  3511. POLYGON_OFFSET_UNITS: 0x2A00,
  3512. POLYGON_OFFSET_FACTOR: 0x8038,
  3513. TEXTURE_BINDING_2D: 0x8069,
  3514. SAMPLE_BUFFERS: 0x80A8,
  3515. SAMPLES: 0x80A9,
  3516. SAMPLE_COVERAGE_VALUE: 0x80AA,
  3517. SAMPLE_COVERAGE_INVERT: 0x80AB,
  3518. COMPRESSED_TEXTURE_FORMATS: 0x86A3,
  3519. VENDOR: 0x1F00,
  3520. RENDERER: 0x1F01,
  3521. VERSION: 0x1F02,
  3522. IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A,
  3523. IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B,
  3524. BROWSER_DEFAULT_WEBGL: 0x9244,
  3525. // Buffers
  3526. // Constants passed to bufferData(), bufferSubData(), bindBuffer(), or
  3527. // getBufferParameter().
  3528. STATIC_DRAW: 0x88E4,
  3529. STREAM_DRAW: 0x88E0,
  3530. DYNAMIC_DRAW: 0x88E8,
  3531. ARRAY_BUFFER: 0x8892,
  3532. ELEMENT_ARRAY_BUFFER: 0x8893,
  3533. BUFFER_SIZE: 0x8764,
  3534. BUFFER_USAGE: 0x8765,
  3535. // Vertex attributes
  3536. // Constants passed to getVertexAttrib().
  3537. CURRENT_VERTEX_ATTRIB: 0x8626,
  3538. VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622,
  3539. VERTEX_ATTRIB_ARRAY_SIZE: 0x8623,
  3540. VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624,
  3541. VERTEX_ATTRIB_ARRAY_TYPE: 0x8625,
  3542. VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A,
  3543. VERTEX_ATTRIB_ARRAY_POINTER: 0x8645,
  3544. VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F,
  3545. // Culling
  3546. // Constants passed to cullFace().
  3547. CULL_FACE: 0x0B44,
  3548. FRONT: 0x0404,
  3549. BACK: 0x0405,
  3550. FRONT_AND_BACK: 0x0408,
  3551. // Enabling and disabling
  3552. // Constants passed to enable() or disable().
  3553. BLEND: 0x0BE2,
  3554. DEPTH_TEST: 0x0B71,
  3555. DITHER: 0x0BD0,
  3556. POLYGON_OFFSET_FILL: 0x8037,
  3557. SAMPLE_ALPHA_TO_COVERAGE: 0x809E,
  3558. SAMPLE_COVERAGE: 0x80A0,
  3559. SCISSOR_TEST: 0x0C11,
  3560. STENCIL_TEST: 0x0B90,
  3561. // Errors
  3562. // Constants returned from getError().
  3563. NO_ERROR: 0,
  3564. INVALID_ENUM: 0x0500,
  3565. INVALID_VALUE: 0x0501,
  3566. INVALID_OPERATION: 0x0502,
  3567. OUT_OF_MEMORY: 0x0505,
  3568. CONTEXT_LOST_WEBGL: 0x9242,
  3569. // Front face directions
  3570. // Constants passed to frontFace().
  3571. CW: 0x0900,
  3572. CCW: 0x0901,
  3573. // Hints
  3574. // Constants passed to hint()
  3575. DONT_CARE: 0x1100,
  3576. FASTEST: 0x1101,
  3577. NICEST: 0x1102,
  3578. GENERATE_MIPMAP_HINT: 0x8192,
  3579. // Data types
  3580. BYTE: 0x1400,
  3581. UNSIGNED_BYTE: 0x1401,
  3582. SHORT: 0x1402,
  3583. UNSIGNED_SHORT: 0x1403,
  3584. INT: 0x1404,
  3585. UNSIGNED_INT: 0x1405,
  3586. FLOAT: 0x1406,
  3587. // Pixel formats
  3588. DEPTH_COMPONENT: 0x1902,
  3589. ALPHA: 0x1906,
  3590. RGB: 0x1907,
  3591. RGBA: 0x1908,
  3592. LUMINANCE: 0x1909,
  3593. LUMINANCE_ALPHA: 0x190A,
  3594. // Pixel types
  3595. // UNSIGNED_BYTE: 0x1401,
  3596. UNSIGNED_SHORT_4_4_4_4: 0x8033,
  3597. UNSIGNED_SHORT_5_5_5_1: 0x8034,
  3598. UNSIGNED_SHORT_5_6_5: 0x8363,
  3599. // Shaders
  3600. // Constants passed to createShader() or getShaderParameter()
  3601. FRAGMENT_SHADER: 0x8B30,
  3602. VERTEX_SHADER: 0x8B31,
  3603. COMPILE_STATUS: 0x8B81,
  3604. DELETE_STATUS: 0x8B80,
  3605. LINK_STATUS: 0x8B82,
  3606. VALIDATE_STATUS: 0x8B83,
  3607. ATTACHED_SHADERS: 0x8B85,
  3608. ACTIVE_ATTRIBUTES: 0x8B89,
  3609. ACTIVE_UNIFORMS: 0x8B86,
  3610. MAX_VERTEX_ATTRIBS: 0x8869,
  3611. MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB,
  3612. MAX_VARYING_VECTORS: 0x8DFC,
  3613. MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D,
  3614. MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C,
  3615. MAX_TEXTURE_IMAGE_UNITS: 0x8872,
  3616. MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD,
  3617. SHADER_TYPE: 0x8B4F,
  3618. SHADING_LANGUAGE_VERSION: 0x8B8C,
  3619. CURRENT_PROGRAM: 0x8B8D,
  3620. // Depth or stencil tests
  3621. // Constants passed to depthFunc() or stencilFunc().
  3622. NEVER: 0x0200,
  3623. ALWAYS: 0x0207,
  3624. LESS: 0x0201,
  3625. EQUAL: 0x0202,
  3626. LEQUAL: 0x0203,
  3627. GREATER: 0x0204,
  3628. GEQUAL: 0x0206,
  3629. NOTEQUAL: 0x0205,
  3630. // Stencil actions
  3631. // Constants passed to stencilOp().
  3632. KEEP: 0x1E00,
  3633. REPLACE: 0x1E01,
  3634. INCR: 0x1E02,
  3635. DECR: 0x1E03,
  3636. INVERT: 0x150A,
  3637. INCR_WRAP: 0x8507,
  3638. DECR_WRAP: 0x8508,
  3639. // Textures
  3640. // Constants passed to texParameteri(),
  3641. // texParameterf(), bindTexture(), texImage2D(), and others.
  3642. NEAREST: 0x2600,
  3643. LINEAR: 0x2601,
  3644. NEAREST_MIPMAP_NEAREST: 0x2700,
  3645. LINEAR_MIPMAP_NEAREST: 0x2701,
  3646. NEAREST_MIPMAP_LINEAR: 0x2702,
  3647. LINEAR_MIPMAP_LINEAR: 0x2703,
  3648. TEXTURE_MAG_FILTER: 0x2800,
  3649. TEXTURE_MIN_FILTER: 0x2801,
  3650. TEXTURE_WRAP_S: 0x2802,
  3651. TEXTURE_WRAP_T: 0x2803,
  3652. TEXTURE_2D: 0x0DE1,
  3653. TEXTURE: 0x1702,
  3654. TEXTURE_CUBE_MAP: 0x8513,
  3655. TEXTURE_BINDING_CUBE_MAP: 0x8514,
  3656. TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515,
  3657. TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516,
  3658. TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517,
  3659. TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518,
  3660. TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519,
  3661. TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A,
  3662. MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C,
  3663. // TEXTURE0 - 31 0x84C0 - 0x84DF A texture unit.
  3664. TEXTURE0: 0x84C0,
  3665. ACTIVE_TEXTURE: 0x84E0,
  3666. REPEAT: 0x2901,
  3667. CLAMP_TO_EDGE: 0x812F,
  3668. MIRRORED_REPEAT: 0x8370,
  3669. // Emulation
  3670. TEXTURE_WIDTH: 0x1000,
  3671. TEXTURE_HEIGHT: 0x1001,
  3672. // Uniform types
  3673. FLOAT_VEC2: 0x8B50,
  3674. FLOAT_VEC3: 0x8B51,
  3675. FLOAT_VEC4: 0x8B52,
  3676. INT_VEC2: 0x8B53,
  3677. INT_VEC3: 0x8B54,
  3678. INT_VEC4: 0x8B55,
  3679. BOOL: 0x8B56,
  3680. BOOL_VEC2: 0x8B57,
  3681. BOOL_VEC3: 0x8B58,
  3682. BOOL_VEC4: 0x8B59,
  3683. FLOAT_MAT2: 0x8B5A,
  3684. FLOAT_MAT3: 0x8B5B,
  3685. FLOAT_MAT4: 0x8B5C,
  3686. SAMPLER_2D: 0x8B5E,
  3687. SAMPLER_CUBE: 0x8B60,
  3688. // Shader precision-specified types
  3689. LOW_FLOAT: 0x8DF0,
  3690. MEDIUM_FLOAT: 0x8DF1,
  3691. HIGH_FLOAT: 0x8DF2,
  3692. LOW_INT: 0x8DF3,
  3693. MEDIUM_INT: 0x8DF4,
  3694. HIGH_INT: 0x8DF5,
  3695. // Framebuffers and renderbuffers
  3696. FRAMEBUFFER: 0x8D40,
  3697. RENDERBUFFER: 0x8D41,
  3698. RGBA4: 0x8056,
  3699. RGB5_A1: 0x8057,
  3700. RGB565: 0x8D62,
  3701. DEPTH_COMPONENT16: 0x81A5,
  3702. STENCIL_INDEX: 0x1901,
  3703. STENCIL_INDEX8: 0x8D48,
  3704. DEPTH_STENCIL: 0x84F9,
  3705. RENDERBUFFER_WIDTH: 0x8D42,
  3706. RENDERBUFFER_HEIGHT: 0x8D43,
  3707. RENDERBUFFER_INTERNAL_FORMAT: 0x8D44,
  3708. RENDERBUFFER_RED_SIZE: 0x8D50,
  3709. RENDERBUFFER_GREEN_SIZE: 0x8D51,
  3710. RENDERBUFFER_BLUE_SIZE: 0x8D52,
  3711. RENDERBUFFER_ALPHA_SIZE: 0x8D53,
  3712. RENDERBUFFER_DEPTH_SIZE: 0x8D54,
  3713. RENDERBUFFER_STENCIL_SIZE: 0x8D55,
  3714. FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0,
  3715. FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1,
  3716. FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2,
  3717. FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3,
  3718. COLOR_ATTACHMENT0: 0x8CE0,
  3719. DEPTH_ATTACHMENT: 0x8D00,
  3720. STENCIL_ATTACHMENT: 0x8D20,
  3721. DEPTH_STENCIL_ATTACHMENT: 0x821A,
  3722. NONE: 0,
  3723. FRAMEBUFFER_COMPLETE: 0x8CD5,
  3724. FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6,
  3725. FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7,
  3726. FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9,
  3727. FRAMEBUFFER_UNSUPPORTED: 0x8CDD,
  3728. FRAMEBUFFER_BINDING: 0x8CA6,
  3729. RENDERBUFFER_BINDING: 0x8CA7,
  3730. READ_FRAMEBUFFER: 0x8CA8,
  3731. DRAW_FRAMEBUFFER: 0x8CA9,
  3732. MAX_RENDERBUFFER_SIZE: 0x84E8,
  3733. INVALID_FRAMEBUFFER_OPERATION: 0x0506,
  3734. // Pixel storage modes
  3735. // Constants passed to pixelStorei().
  3736. UNPACK_FLIP_Y_WEBGL: 0x9240,
  3737. UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241,
  3738. UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243,
  3739. // /////////////////////////////////////////////////////
  3740. // Additional constants defined WebGL 2
  3741. // These constants are defined on the WebGL2RenderingContext interface.
  3742. // All WebGL 1 constants are also available in a WebGL 2 context.
  3743. // /////////////////////////////////////////////////////
  3744. // Getting GL parameter information
  3745. // Constants passed to getParameter()
  3746. // to specify what information to return.
  3747. READ_BUFFER: 0x0C02,
  3748. UNPACK_ROW_LENGTH: 0x0CF2,
  3749. UNPACK_SKIP_ROWS: 0x0CF3,
  3750. UNPACK_SKIP_PIXELS: 0x0CF4,
  3751. PACK_ROW_LENGTH: 0x0D02,
  3752. PACK_SKIP_ROWS: 0x0D03,
  3753. PACK_SKIP_PIXELS: 0x0D04,
  3754. TEXTURE_BINDING_3D: 0x806A,
  3755. UNPACK_SKIP_IMAGES: 0x806D,
  3756. UNPACK_IMAGE_HEIGHT: 0x806E,
  3757. MAX_3D_TEXTURE_SIZE: 0x8073,
  3758. MAX_ELEMENTS_VERTICES: 0x80E8,
  3759. MAX_ELEMENTS_INDICES: 0x80E9,
  3760. MAX_TEXTURE_LOD_BIAS: 0x84FD,
  3761. MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8B49,
  3762. MAX_VERTEX_UNIFORM_COMPONENTS: 0x8B4A,
  3763. MAX_ARRAY_TEXTURE_LAYERS: 0x88FF,
  3764. MIN_PROGRAM_TEXEL_OFFSET: 0x8904,
  3765. MAX_PROGRAM_TEXEL_OFFSET: 0x8905,
  3766. MAX_VARYING_COMPONENTS: 0x8B4B,
  3767. FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8B8B,
  3768. RASTERIZER_DISCARD: 0x8C89,
  3769. VERTEX_ARRAY_BINDING: 0x85B5,
  3770. MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122,
  3771. MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125,
  3772. MAX_SERVER_WAIT_TIMEOUT: 0x9111,
  3773. MAX_ELEMENT_INDEX: 0x8D6B,
  3774. // Textures
  3775. // Constants passed to texParameteri(),
  3776. // texParameterf(), bindTexture(), texImage2D(), and others.
  3777. RED: 0x1903,
  3778. RGB8: 0x8051,
  3779. RGBA8: 0x8058,
  3780. RGB10_A2: 0x8059,
  3781. TEXTURE_3D: 0x806F,
  3782. TEXTURE_WRAP_R: 0x8072,
  3783. TEXTURE_MIN_LOD: 0x813A,
  3784. TEXTURE_MAX_LOD: 0x813B,
  3785. TEXTURE_BASE_LEVEL: 0x813C,
  3786. TEXTURE_MAX_LEVEL: 0x813D,
  3787. TEXTURE_COMPARE_MODE: 0x884C,
  3788. TEXTURE_COMPARE_FUNC: 0x884D,
  3789. SRGB: 0x8C40,
  3790. SRGB8: 0x8C41,
  3791. SRGB8_ALPHA8: 0x8C43,
  3792. COMPARE_REF_TO_TEXTURE: 0x884E,
  3793. RGBA32F: 0x8814,
  3794. RGB32F: 0x8815,
  3795. RGBA16F: 0x881A,
  3796. RGB16F: 0x881B,
  3797. TEXTURE_2D_ARRAY: 0x8C1A,
  3798. TEXTURE_BINDING_2D_ARRAY: 0x8C1D,
  3799. R11F_G11F_B10F: 0x8C3A,
  3800. RGB9_E5: 0x8C3D,
  3801. RGBA32UI: 0x8D70,
  3802. RGB32UI: 0x8D71,
  3803. RGBA16UI: 0x8D76,
  3804. RGB16UI: 0x8D77,
  3805. RGBA8UI: 0x8D7C,
  3806. RGB8UI: 0x8D7D,
  3807. RGBA32I: 0x8D82,
  3808. RGB32I: 0x8D83,
  3809. RGBA16I: 0x8D88,
  3810. RGB16I: 0x8D89,
  3811. RGBA8I: 0x8D8E,
  3812. RGB8I: 0x8D8F,
  3813. RED_INTEGER: 0x8D94,
  3814. RGB_INTEGER: 0x8D98,
  3815. RGBA_INTEGER: 0x8D99,
  3816. R8: 0x8229,
  3817. RG8: 0x822B,
  3818. R16F: 0x822D,
  3819. R32F: 0x822E,
  3820. RG16F: 0x822F,
  3821. RG32F: 0x8230,
  3822. R8I: 0x8231,
  3823. R8UI: 0x8232,
  3824. R16I: 0x8233,
  3825. R16UI: 0x8234,
  3826. R32I: 0x8235,
  3827. R32UI: 0x8236,
  3828. RG8I: 0x8237,
  3829. RG8UI: 0x8238,
  3830. RG16I: 0x8239,
  3831. RG16UI: 0x823A,
  3832. RG32I: 0x823B,
  3833. RG32UI: 0x823C,
  3834. R8_SNORM: 0x8F94,
  3835. RG8_SNORM: 0x8F95,
  3836. RGB8_SNORM: 0x8F96,
  3837. RGBA8_SNORM: 0x8F97,
  3838. RGB10_A2UI: 0x906F,
  3839. /* covered by extension
  3840. COMPRESSED_R11_EAC : 0x9270,
  3841. COMPRESSED_SIGNED_R11_EAC: 0x9271,
  3842. COMPRESSED_RG11_EAC: 0x9272,
  3843. COMPRESSED_SIGNED_RG11_EAC : 0x9273,
  3844. COMPRESSED_RGB8_ETC2 : 0x9274,
  3845. COMPRESSED_SRGB8_ETC2: 0x9275,
  3846. COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 : 0x9276,
  3847. COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC : 0x9277,
  3848. COMPRESSED_RGBA8_ETC2_EAC: 0x9278,
  3849. COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : 0x9279,
  3850. */
  3851. TEXTURE_IMMUTABLE_FORMAT: 0x912F,
  3852. TEXTURE_IMMUTABLE_LEVELS: 0x82DF,
  3853. // Pixel types
  3854. UNSIGNED_INT_2_10_10_10_REV: 0x8368,
  3855. UNSIGNED_INT_10F_11F_11F_REV: 0x8C3B,
  3856. UNSIGNED_INT_5_9_9_9_REV: 0x8C3E,
  3857. FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8DAD,
  3858. UNSIGNED_INT_24_8: 0x84FA,
  3859. HALF_FLOAT: 0x140B,
  3860. RG: 0x8227,
  3861. RG_INTEGER: 0x8228,
  3862. INT_2_10_10_10_REV: 0x8D9F,
  3863. // Queries
  3864. CURRENT_QUERY: 0x8865,
  3865. QUERY_RESULT: 0x8866,
  3866. QUERY_RESULT_AVAILABLE: 0x8867,
  3867. ANY_SAMPLES_PASSED: 0x8C2F,
  3868. ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8D6A,
  3869. // Draw buffers
  3870. MAX_DRAW_BUFFERS: 0x8824,
  3871. DRAW_BUFFER0: 0x8825,
  3872. DRAW_BUFFER1: 0x8826,
  3873. DRAW_BUFFER2: 0x8827,
  3874. DRAW_BUFFER3: 0x8828,
  3875. DRAW_BUFFER4: 0x8829,
  3876. DRAW_BUFFER5: 0x882A,
  3877. DRAW_BUFFER6: 0x882B,
  3878. DRAW_BUFFER7: 0x882C,
  3879. DRAW_BUFFER8: 0x882D,
  3880. DRAW_BUFFER9: 0x882E,
  3881. DRAW_BUFFER10: 0x882F,
  3882. DRAW_BUFFER11: 0x8830,
  3883. DRAW_BUFFER12: 0x8831,
  3884. DRAW_BUFFER13: 0x8832,
  3885. DRAW_BUFFER14: 0x8833,
  3886. DRAW_BUFFER15: 0x8834,
  3887. MAX_COLOR_ATTACHMENTS: 0x8CDF,
  3888. COLOR_ATTACHMENT1: 0x8CE1,
  3889. COLOR_ATTACHMENT2: 0x8CE2,
  3890. COLOR_ATTACHMENT3: 0x8CE3,
  3891. COLOR_ATTACHMENT4: 0x8CE4,
  3892. COLOR_ATTACHMENT5: 0x8CE5,
  3893. COLOR_ATTACHMENT6: 0x8CE6,
  3894. COLOR_ATTACHMENT7: 0x8CE7,
  3895. COLOR_ATTACHMENT8: 0x8CE8,
  3896. COLOR_ATTACHMENT9: 0x8CE9,
  3897. COLOR_ATTACHMENT10: 0x8CEA,
  3898. COLOR_ATTACHMENT11: 0x8CEB,
  3899. COLOR_ATTACHMENT12: 0x8CEC,
  3900. COLOR_ATTACHMENT13: 0x8CED,
  3901. COLOR_ATTACHMENT14: 0x8CEE,
  3902. COLOR_ATTACHMENT15: 0x8CEF,
  3903. // Samplers
  3904. SAMPLER_3D: 0x8B5F,
  3905. SAMPLER_2D_SHADOW: 0x8B62,
  3906. SAMPLER_2D_ARRAY: 0x8DC1,
  3907. SAMPLER_2D_ARRAY_SHADOW: 0x8DC4,
  3908. SAMPLER_CUBE_SHADOW: 0x8DC5,
  3909. INT_SAMPLER_2D: 0x8DCA,
  3910. INT_SAMPLER_3D: 0x8DCB,
  3911. INT_SAMPLER_CUBE: 0x8DCC,
  3912. INT_SAMPLER_2D_ARRAY: 0x8DCF,
  3913. UNSIGNED_INT_SAMPLER_2D: 0x8DD2,
  3914. UNSIGNED_INT_SAMPLER_3D: 0x8DD3,
  3915. UNSIGNED_INT_SAMPLER_CUBE: 0x8DD4,
  3916. UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8DD7,
  3917. MAX_SAMPLES: 0x8D57,
  3918. SAMPLER_BINDING: 0x8919,
  3919. // Buffers
  3920. PIXEL_PACK_BUFFER: 0x88EB,
  3921. PIXEL_UNPACK_BUFFER: 0x88EC,
  3922. PIXEL_PACK_BUFFER_BINDING: 0x88ED,
  3923. PIXEL_UNPACK_BUFFER_BINDING: 0x88EF,
  3924. COPY_READ_BUFFER: 0x8F36,
  3925. COPY_WRITE_BUFFER: 0x8F37,
  3926. COPY_READ_BUFFER_BINDING: 0x8F36,
  3927. COPY_WRITE_BUFFER_BINDING: 0x8F37,
  3928. // Data types
  3929. FLOAT_MAT2x3: 0x8B65,
  3930. FLOAT_MAT2x4: 0x8B66,
  3931. FLOAT_MAT3x2: 0x8B67,
  3932. FLOAT_MAT3x4: 0x8B68,
  3933. FLOAT_MAT4x2: 0x8B69,
  3934. FLOAT_MAT4x3: 0x8B6A,
  3935. UNSIGNED_INT_VEC2: 0x8DC6,
  3936. UNSIGNED_INT_VEC3: 0x8DC7,
  3937. UNSIGNED_INT_VEC4: 0x8DC8,
  3938. UNSIGNED_NORMALIZED: 0x8C17,
  3939. SIGNED_NORMALIZED: 0x8F9C,
  3940. // Vertex attributes
  3941. VERTEX_ATTRIB_ARRAY_INTEGER: 0x88FD,
  3942. VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88FE,
  3943. // Transform feedback
  3944. TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8C7F,
  3945. MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8C80,
  3946. TRANSFORM_FEEDBACK_VARYINGS: 0x8C83,
  3947. TRANSFORM_FEEDBACK_BUFFER_START: 0x8C84,
  3948. TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8C85,
  3949. TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8C88,
  3950. MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8C8A,
  3951. MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8C8B,
  3952. INTERLEAVED_ATTRIBS: 0x8C8C,
  3953. SEPARATE_ATTRIBS: 0x8C8D,
  3954. TRANSFORM_FEEDBACK_BUFFER: 0x8C8E,
  3955. TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8C8F,
  3956. TRANSFORM_FEEDBACK: 0x8E22,
  3957. TRANSFORM_FEEDBACK_PAUSED: 0x8E23,
  3958. TRANSFORM_FEEDBACK_ACTIVE: 0x8E24,
  3959. TRANSFORM_FEEDBACK_BINDING: 0x8E25,
  3960. // Framebuffers and renderbuffers
  3961. FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210,
  3962. FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211,
  3963. FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212,
  3964. FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213,
  3965. FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214,
  3966. FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215,
  3967. FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216,
  3968. FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217,
  3969. FRAMEBUFFER_DEFAULT: 0x8218,
  3970. // DEPTH_STENCIL_ATTACHMENT : 0x821A,
  3971. // DEPTH_STENCIL: 0x84F9,
  3972. DEPTH24_STENCIL8: 0x88F0,
  3973. DRAW_FRAMEBUFFER_BINDING: 0x8CA6,
  3974. READ_FRAMEBUFFER_BINDING: 0x8CAA,
  3975. RENDERBUFFER_SAMPLES: 0x8CAB,
  3976. FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8CD4,
  3977. FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8D56,
  3978. // Uniforms
  3979. UNIFORM_BUFFER: 0x8A11,
  3980. UNIFORM_BUFFER_BINDING: 0x8A28,
  3981. UNIFORM_BUFFER_START: 0x8A29,
  3982. UNIFORM_BUFFER_SIZE: 0x8A2A,
  3983. MAX_VERTEX_UNIFORM_BLOCKS: 0x8A2B,
  3984. MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8A2D,
  3985. MAX_COMBINED_UNIFORM_BLOCKS: 0x8A2E,
  3986. MAX_UNIFORM_BUFFER_BINDINGS: 0x8A2F,
  3987. MAX_UNIFORM_BLOCK_SIZE: 0x8A30,
  3988. MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8A31,
  3989. MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8A33,
  3990. UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8A34,
  3991. ACTIVE_UNIFORM_BLOCKS: 0x8A36,
  3992. UNIFORM_TYPE: 0x8A37,
  3993. UNIFORM_SIZE: 0x8A38,
  3994. UNIFORM_BLOCK_INDEX: 0x8A3A,
  3995. UNIFORM_OFFSET: 0x8A3B,
  3996. UNIFORM_ARRAY_STRIDE: 0x8A3C,
  3997. UNIFORM_MATRIX_STRIDE: 0x8A3D,
  3998. UNIFORM_IS_ROW_MAJOR: 0x8A3E,
  3999. UNIFORM_BLOCK_BINDING: 0x8A3F,
  4000. UNIFORM_BLOCK_DATA_SIZE: 0x8A40,
  4001. UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8A42,
  4002. UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8A43,
  4003. UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8A44,
  4004. UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8A46,
  4005. // Sync objects
  4006. OBJECT_TYPE: 0x9112,
  4007. SYNC_CONDITION: 0x9113,
  4008. SYNC_STATUS: 0x9114,
  4009. SYNC_FLAGS: 0x9115,
  4010. SYNC_FENCE: 0x9116,
  4011. SYNC_GPU_COMMANDS_COMPLETE: 0x9117,
  4012. UNSIGNALED: 0x9118,
  4013. SIGNALED: 0x9119,
  4014. ALREADY_SIGNALED: 0x911A,
  4015. TIMEOUT_EXPIRED: 0x911B,
  4016. CONDITION_SATISFIED: 0x911C,
  4017. WAIT_FAILED: 0x911D,
  4018. SYNC_FLUSH_COMMANDS_BIT: 0x00000001,
  4019. // Miscellaneous constants
  4020. COLOR: 0x1800,
  4021. DEPTH: 0x1801,
  4022. STENCIL: 0x1802,
  4023. MIN: 0x8007,
  4024. MAX: 0x8008,
  4025. DEPTH_COMPONENT24: 0x81A6,
  4026. STREAM_READ: 0x88E1,
  4027. STREAM_COPY: 0x88E2,
  4028. STATIC_READ: 0x88E5,
  4029. STATIC_COPY: 0x88E6,
  4030. DYNAMIC_READ: 0x88E9,
  4031. DYNAMIC_COPY: 0x88EA,
  4032. DEPTH_COMPONENT32F: 0x8CAC,
  4033. DEPTH32F_STENCIL8: 0x8CAD,
  4034. INVALID_INDEX: 0xFFFFFFFF,
  4035. TIMEOUT_IGNORED: -1,
  4036. MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247,
  4037. // Constants defined in WebGL extensions
  4038. // ANGLE_instanced_arrays
  4039. VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88FE,
  4040. // WEBGL_debug_renderer_info
  4041. UNMASKED_VENDOR_WEBGL: 0x9245,
  4042. UNMASKED_RENDERER_WEBGL: 0x9246,
  4043. // EXT_texture_filter_anisotropic
  4044. MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84FF,
  4045. TEXTURE_MAX_ANISOTROPY_EXT: 0x84FE,
  4046. // WEBGL_compressed_texture_s3tc
  4047. COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83F0,
  4048. COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83F1,
  4049. COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83F2,
  4050. COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83F3,
  4051. // WEBGL_compressed_texture_es3
  4052. COMPRESSED_R11_EAC: 0x9270,
  4053. COMPRESSED_SIGNED_R11_EAC: 0x9271,
  4054. COMPRESSED_RG11_EAC: 0x9272,
  4055. COMPRESSED_SIGNED_RG11_EAC: 0x9273,
  4056. COMPRESSED_RGB8_ETC2: 0x9274,
  4057. COMPRESSED_RGBA8_ETC2_EAC: 0x9275,
  4058. COMPRESSED_SRGB8_ETC2: 0x9276,
  4059. COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9277,
  4060. COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9278,
  4061. COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9279,
  4062. // WEBGL_compressed_texture_pvrtc
  4063. COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8C00,
  4064. COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8C02,
  4065. COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8C01,
  4066. COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8C03,
  4067. // WEBGL_compressed_texture_etc1
  4068. COMPRESSED_RGB_ETC1_WEBGL: 0x8D64,
  4069. // WEBGL_compressed_texture_atc
  4070. COMPRESSED_RGB_ATC_WEBGL: 0x8C92,
  4071. COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 0x8C92,
  4072. COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 0x87EE,
  4073. // WEBGL_depth_texture
  4074. UNSIGNED_INT_24_8_WEBGL: 0x84FA,
  4075. // OES_texture_half_float
  4076. HALF_FLOAT_OES: 0x8D61,
  4077. // WEBGL_color_buffer_float
  4078. RGBA32F_EXT: 0x8814,
  4079. RGB32F_EXT: 0x8815,
  4080. FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211,
  4081. UNSIGNED_NORMALIZED_EXT: 0x8C17,
  4082. // EXT_blend_minmax
  4083. MIN_EXT: 0x8007,
  4084. MAX_EXT: 0x8008,
  4085. // EXT_sRGB
  4086. SRGB_EXT: 0x8C40,
  4087. SRGB_ALPHA_EXT: 0x8C42,
  4088. SRGB8_ALPHA8_EXT: 0x8C43,
  4089. FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: 0x8210,
  4090. // OES_standard_derivatives
  4091. FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 0x8B8B,
  4092. // WEBGL_draw_buffers
  4093. COLOR_ATTACHMENT0_WEBGL: 0x8CE0,
  4094. COLOR_ATTACHMENT1_WEBGL: 0x8CE1,
  4095. COLOR_ATTACHMENT2_WEBGL: 0x8CE2,
  4096. COLOR_ATTACHMENT3_WEBGL: 0x8CE3,
  4097. COLOR_ATTACHMENT4_WEBGL: 0x8CE4,
  4098. COLOR_ATTACHMENT5_WEBGL: 0x8CE5,
  4099. COLOR_ATTACHMENT6_WEBGL: 0x8CE6,
  4100. COLOR_ATTACHMENT7_WEBGL: 0x8CE7,
  4101. COLOR_ATTACHMENT8_WEBGL: 0x8CE8,
  4102. COLOR_ATTACHMENT9_WEBGL: 0x8CE9,
  4103. COLOR_ATTACHMENT10_WEBGL: 0x8CEA,
  4104. COLOR_ATTACHMENT11_WEBGL: 0x8CEB,
  4105. COLOR_ATTACHMENT12_WEBGL: 0x8CEC,
  4106. COLOR_ATTACHMENT13_WEBGL: 0x8CED,
  4107. COLOR_ATTACHMENT14_WEBGL: 0x8CEE,
  4108. COLOR_ATTACHMENT15_WEBGL: 0x8CEF,
  4109. DRAW_BUFFER0_WEBGL: 0x8825,
  4110. DRAW_BUFFER1_WEBGL: 0x8826,
  4111. DRAW_BUFFER2_WEBGL: 0x8827,
  4112. DRAW_BUFFER3_WEBGL: 0x8828,
  4113. DRAW_BUFFER4_WEBGL: 0x8829,
  4114. DRAW_BUFFER5_WEBGL: 0x882A,
  4115. DRAW_BUFFER6_WEBGL: 0x882B,
  4116. DRAW_BUFFER7_WEBGL: 0x882C,
  4117. DRAW_BUFFER8_WEBGL: 0x882D,
  4118. DRAW_BUFFER9_WEBGL: 0x882E,
  4119. DRAW_BUFFER10_WEBGL: 0x882F,
  4120. DRAW_BUFFER11_WEBGL: 0x8830,
  4121. DRAW_BUFFER12_WEBGL: 0x8831,
  4122. DRAW_BUFFER13_WEBGL: 0x8832,
  4123. DRAW_BUFFER14_WEBGL: 0x8833,
  4124. DRAW_BUFFER15_WEBGL: 0x8834,
  4125. MAX_COLOR_ATTACHMENTS_WEBGL: 0x8CDF,
  4126. MAX_DRAW_BUFFERS_WEBGL: 0x8824,
  4127. // OES_vertex_array_object
  4128. VERTEX_ARRAY_BINDING_OES: 0x85B5,
  4129. // EXT_disjoint_timer_query
  4130. QUERY_COUNTER_BITS_EXT: 0x8864,
  4131. CURRENT_QUERY_EXT: 0x8865,
  4132. QUERY_RESULT_EXT: 0x8866,
  4133. QUERY_RESULT_AVAILABLE_EXT: 0x8867,
  4134. TIME_ELAPSED_EXT: 0x88BF,
  4135. TIMESTAMP_EXT: 0x8E28,
  4136. GPU_DISJOINT_EXT: 0x8FBB // A Boolean indicating whether or not the GPU performed any disjoint operation.
  4137. });
  4138. //# sourceMappingURL=constants.js.map
  4139. /***/ }),
  4140. /* 47 */
  4141. /***/ (function(module, exports) {
  4142. var g;
  4143. // This works in non-strict mode
  4144. g = (function() {
  4145. return this;
  4146. })();
  4147. try {
  4148. // This works if eval is allowed (see CSP)
  4149. g = g || Function("return this")() || (1,eval)("this");
  4150. } catch(e) {
  4151. // This works if the window reference is available
  4152. if(typeof window === "object")
  4153. g = window;
  4154. }
  4155. // g can still be undefined, but nothing to do about it...
  4156. // We return undefined, instead of nothing here, so it's
  4157. // easier to handle this case. if(!global) { ...}
  4158. module.exports = g;
  4159. /***/ }),
  4160. /* 48 */
  4161. /***/ (function(module, exports) {
  4162. module.exports = function (it, Constructor, name, forbiddenField) {
  4163. if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
  4164. throw TypeError(name + ': incorrect invocation!');
  4165. } return it;
  4166. };
  4167. /***/ }),
  4168. /* 49 */
  4169. /***/ (function(module, exports, __webpack_require__) {
  4170. var ctx = __webpack_require__(28);
  4171. var call = __webpack_require__(210);
  4172. var isArrayIter = __webpack_require__(136);
  4173. var anObject = __webpack_require__(2);
  4174. var toLength = __webpack_require__(11);
  4175. var getIterFn = __webpack_require__(153);
  4176. var BREAK = {};
  4177. var RETURN = {};
  4178. var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
  4179. var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
  4180. var f = ctx(fn, that, entries ? 2 : 1);
  4181. var index = 0;
  4182. var length, step, iterator, result;
  4183. if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
  4184. // fast case for arrays with default iterator
  4185. if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
  4186. result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
  4187. if (result === BREAK || result === RETURN) return result;
  4188. } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
  4189. result = call(iterator, f, step.value, entries);
  4190. if (result === BREAK || result === RETURN) return result;
  4191. }
  4192. };
  4193. exports.BREAK = BREAK;
  4194. exports.RETURN = RETURN;
  4195. /***/ }),
  4196. /* 50 */
  4197. /***/ (function(module, exports) {
  4198. module.exports = false;
  4199. /***/ }),
  4200. /* 51 */
  4201. /***/ (function(module, exports, __webpack_require__) {
  4202. // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
  4203. var anObject = __webpack_require__(2);
  4204. var dPs = __webpack_require__(216);
  4205. var enumBugKeys = __webpack_require__(132);
  4206. var IE_PROTO = __webpack_require__(144)('IE_PROTO');
  4207. var Empty = function () { /* empty */ };
  4208. var PROTOTYPE = 'prototype';
  4209. // Create object with fake `null` prototype: use iframe Object with cleared prototype
  4210. var createDict = function () {
  4211. // Thrash, waste and sodomy: IE GC bug
  4212. var iframe = __webpack_require__(131)('iframe');
  4213. var i = enumBugKeys.length;
  4214. var lt = '<';
  4215. var gt = '>';
  4216. var iframeDocument;
  4217. iframe.style.display = 'none';
  4218. __webpack_require__(134).appendChild(iframe);
  4219. iframe.src = 'javascript:'; // eslint-disable-line no-script-url
  4220. // createDict = iframe.contentWindow.Object;
  4221. // html.removeChild(iframe);
  4222. iframeDocument = iframe.contentWindow.document;
  4223. iframeDocument.open();
  4224. iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
  4225. iframeDocument.close();
  4226. createDict = iframeDocument.F;
  4227. while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
  4228. return createDict();
  4229. };
  4230. module.exports = Object.create || function create(O, Properties) {
  4231. var result;
  4232. if (O !== null) {
  4233. Empty[PROTOTYPE] = anObject(O);
  4234. result = new Empty();
  4235. Empty[PROTOTYPE] = null;
  4236. // add "__proto__" for Object.getPrototypeOf polyfill
  4237. result[IE_PROTO] = O;
  4238. } else result = createDict();
  4239. return Properties === undefined ? result : dPs(result, Properties);
  4240. };
  4241. /***/ }),
  4242. /* 52 */
  4243. /***/ (function(module, exports, __webpack_require__) {
  4244. // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
  4245. var $keys = __webpack_require__(218);
  4246. var hiddenKeys = __webpack_require__(132).concat('length', 'prototype');
  4247. exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  4248. return $keys(O, hiddenKeys);
  4249. };
  4250. /***/ }),
  4251. /* 53 */
  4252. /***/ (function(module, exports, __webpack_require__) {
  4253. // 19.1.2.14 / 15.2.3.14 Object.keys(O)
  4254. var $keys = __webpack_require__(218);
  4255. var enumBugKeys = __webpack_require__(132);
  4256. module.exports = Object.keys || function keys(O) {
  4257. return $keys(O, enumBugKeys);
  4258. };
  4259. /***/ }),
  4260. /* 54 */
  4261. /***/ (function(module, exports) {
  4262. module.exports = function (bitmap, value) {
  4263. return {
  4264. enumerable: !(bitmap & 1),
  4265. configurable: !(bitmap & 2),
  4266. writable: !(bitmap & 4),
  4267. value: value
  4268. };
  4269. };
  4270. /***/ }),
  4271. /* 55 */
  4272. /***/ (function(module, exports, __webpack_require__) {
  4273. var redefine = __webpack_require__(20);
  4274. module.exports = function (target, src, safe) {
  4275. for (var key in src) redefine(target, key, src[key], safe);
  4276. return target;
  4277. };
  4278. /***/ }),
  4279. /* 56 */
  4280. /***/ (function(module, exports, __webpack_require__) {
  4281. "use strict";
  4282. var global = __webpack_require__(3);
  4283. var dP = __webpack_require__(10);
  4284. var DESCRIPTORS = __webpack_require__(9);
  4285. var SPECIES = __webpack_require__(6)('species');
  4286. module.exports = function (KEY) {
  4287. var C = global[KEY];
  4288. if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
  4289. configurable: true,
  4290. get: function () { return this; }
  4291. });
  4292. };
  4293. /***/ }),
  4294. /* 57 */
  4295. /***/ (function(module, exports, __webpack_require__) {
  4296. var toInteger = __webpack_require__(36);
  4297. var max = Math.max;
  4298. var min = Math.min;
  4299. module.exports = function (index, length) {
  4300. index = toInteger(index);
  4301. return index < 0 ? max(index + length, 0) : min(index, length);
  4302. };
  4303. /***/ }),
  4304. /* 58 */
  4305. /***/ (function(module, exports) {
  4306. var id = 0;
  4307. var px = Math.random();
  4308. module.exports = function (key) {
  4309. return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
  4310. };
  4311. /***/ }),
  4312. /* 59 */
  4313. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4314. "use strict";
  4315. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  4316. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__animation_loop__ = __webpack_require__(249);
  4317. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationLoop", function() { return __WEBPACK_IMPORTED_MODULE_0__animation_loop__["a"]; });
  4318. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "requestAnimationFrame", function() { return __WEBPACK_IMPORTED_MODULE_0__animation_loop__["b"]; });
  4319. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "cancelAnimationFrame", function() { return __WEBPACK_IMPORTED_MODULE_0__animation_loop__["c"]; });
  4320. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__model__ = __webpack_require__(104);
  4321. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Model", function() { return __WEBPACK_IMPORTED_MODULE_1__model__["a"]; });
  4322. //# sourceMappingURL=index.js.map
  4323. /***/ }),
  4324. /* 60 */
  4325. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4326. "use strict";
  4327. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__create_canvas__ = __webpack_require__(663);
  4328. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_0__create_canvas__["c"]; });
  4329. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__create_canvas__["a"]; });
  4330. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_0__create_canvas__["b"]; });
  4331. /* unused harmony reexport resizeCanvas */
  4332. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_0__create_canvas__["d"]; });
  4333. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__create_context__ = __webpack_require__(664);
  4334. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_1__create_context__["a"]; });
  4335. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_1__create_context__["b"]; });
  4336. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__polyfill_context__ = __webpack_require__(265);
  4337. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_2__polyfill_context__["a"]; });
  4338. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__track_context_state__ = __webpack_require__(164);
  4339. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_3__track_context_state__["a"]; });
  4340. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__format_glsl_error__ = __webpack_require__(665);
  4341. /* unused harmony reexport formatGLSLCompilerError */
  4342. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_4__format_glsl_error__["a"]; });
  4343. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__get_shader_name__ = __webpack_require__(264);
  4344. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_5__get_shader_name__["a"]; });
  4345. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__constants__ = __webpack_require__(46);
  4346. /* unused harmony reexport GL */
  4347. // TODO - avoid uncondsitionally importing GL as it adds a lot to bundle size?
  4348. //# sourceMappingURL=index.js.map
  4349. /***/ }),
  4350. /* 61 */
  4351. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4352. "use strict";
  4353. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  4354. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gl_constants__ = __webpack_require__(25);
  4355. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "GL", function() { return __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d"]; });
  4356. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d"]; });
  4357. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__api_types__ = __webpack_require__(268);
  4358. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Image", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["e"]; });
  4359. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLRenderingContext", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["a"]; });
  4360. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLProgram", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["f"]; });
  4361. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLShader", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["g"]; });
  4362. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLBuffer", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["d"]; });
  4363. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLFramebuffer", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["h"]; });
  4364. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLRenderbuffer", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["i"]; });
  4365. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLTexture", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["j"]; });
  4366. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLUniformLocation", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["k"]; });
  4367. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLActiveInfo", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["l"]; });
  4368. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLShaderPrecisionFormat", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["m"]; });
  4369. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebGL2RenderingContext", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["b"]; });
  4370. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "webGLTypesAvailable", function() { return __WEBPACK_IMPORTED_MODULE_1__api_types__["c"]; });
  4371. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__context__ = __webpack_require__(7);
  4372. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isWebGL", function() { return __WEBPACK_IMPORTED_MODULE_2__context__["a"]; });
  4373. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isWebGL2", function() { return __WEBPACK_IMPORTED_MODULE_2__context__["b"]; });
  4374. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createGLContext", function() { return __WEBPACK_IMPORTED_MODULE_2__context__["d"]; });
  4375. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "deleteGLContext", function() { return __WEBPACK_IMPORTED_MODULE_2__context__["e"]; });
  4376. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__context_state__ = __webpack_require__(68);
  4377. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "withParameters", function() { return __WEBPACK_IMPORTED_MODULE_3__context_state__["f"]; });
  4378. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "resetParameters", function() { return __WEBPACK_IMPORTED_MODULE_3__context_state__["a"]; });
  4379. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__context_limits__ = __webpack_require__(165);
  4380. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getContextInfo", function() { return __WEBPACK_IMPORTED_MODULE_4__context_limits__["a"]; });
  4381. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__buffer__ = __webpack_require__(67);
  4382. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Buffer", function() { return __WEBPACK_IMPORTED_MODULE_5__buffer__["a"]; });
  4383. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__shader__ = __webpack_require__(111);
  4384. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Shader", function() { return __WEBPACK_IMPORTED_MODULE_6__shader__["a"]; });
  4385. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "VertexShader", function() { return __WEBPACK_IMPORTED_MODULE_6__shader__["b"]; });
  4386. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "FragmentShader", function() { return __WEBPACK_IMPORTED_MODULE_6__shader__["c"]; });
  4387. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__program__ = __webpack_require__(109);
  4388. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Program", function() { return __WEBPACK_IMPORTED_MODULE_7__program__["a"]; });
  4389. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__framebuffer__ = __webpack_require__(69);
  4390. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Framebuffer", function() { return __WEBPACK_IMPORTED_MODULE_8__framebuffer__["a"]; });
  4391. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__renderbuffer__ = __webpack_require__(110);
  4392. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Renderbuffer", function() { return __WEBPACK_IMPORTED_MODULE_9__renderbuffer__["a"]; });
  4393. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__texture_2d__ = __webpack_require__(167);
  4394. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Texture2D", function() { return __WEBPACK_IMPORTED_MODULE_10__texture_2d__["a"]; });
  4395. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__texture_cube__ = __webpack_require__(275);
  4396. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TextureCube", function() { return __WEBPACK_IMPORTED_MODULE_11__texture_cube__["a"]; });
  4397. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__draw__ = __webpack_require__(270);
  4398. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return __WEBPACK_IMPORTED_MODULE_12__draw__["a"]; });
  4399. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__clear__ = __webpack_require__(107);
  4400. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return __WEBPACK_IMPORTED_MODULE_13__clear__["a"]; });
  4401. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__functions__ = __webpack_require__(272);
  4402. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "readPixels", function() { return __WEBPACK_IMPORTED_MODULE_14__functions__["a"]; });
  4403. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__uniforms__ = __webpack_require__(168);
  4404. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "parseUniformName", function() { return __WEBPACK_IMPORTED_MODULE_15__uniforms__["a"]; });
  4405. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getUniformSetter", function() { return __WEBPACK_IMPORTED_MODULE_15__uniforms__["b"]; });
  4406. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "checkUniformValues", function() { return __WEBPACK_IMPORTED_MODULE_15__uniforms__["c"]; });
  4407. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__vertex_array__ = __webpack_require__(169);
  4408. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "VertexArray", function() { return __WEBPACK_IMPORTED_MODULE_16__vertex_array__["a"]; });
  4409. // luma.gl Base WebGL wrapper library
  4410. // Provides simple class/function wrappers around the low level webgl objects
  4411. // These classes are intentionally close to the WebGL API
  4412. // but make it easier to use.
  4413. // Higher level abstractions can be built on these classes
  4414. // Exports WebGL API constants and types, plus some basic type checks
  4415. // WebGL1 objects
  4416. // Functions
  4417. // WebGL2
  4418. //# sourceMappingURL=index.js.map
  4419. /***/ }),
  4420. /* 62 */
  4421. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4422. "use strict";
  4423. /* unused harmony export TEXTURE_FORMATS */
  4424. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gl_constants__ = __webpack_require__(25);
  4425. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__api__ = __webpack_require__(38);
  4426. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__context__ = __webpack_require__(7);
  4427. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__context_state__ = __webpack_require__(68);
  4428. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__resource__ = __webpack_require__(30);
  4429. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__buffer__ = __webpack_require__(67);
  4430. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__utils__ = __webpack_require__(8);
  4431. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_assert__ = __webpack_require__(1);
  4432. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_assert__);
  4433. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  4434. var _TEXTURE_FORMATS;
  4435. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  4436. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  4437. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  4438. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  4439. /* eslint-disable no-inline-comments, max-len */
  4440. // Supported min filters for NPOT texture.
  4441. var NPOT_MIN_FILTERS = [__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINEAR, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].NEAREST];
  4442. // const S3TC = 'WEBGL_compressed_texture_s3tc';
  4443. // const PVRTC = 'WEBGL_compressed_texture_pvrtc';
  4444. // const ES3 = 'WEBGL_compressed_texture_es3';
  4445. // const ETC1 = 'WEBGL_compressed_texture_etc1';
  4446. // const SRGB = 'EXT_sRGB';
  4447. // const DEPTH = 'WEBGL_depth_texture';
  4448. // Legal combinations for internalFormat, format and type
  4449. var TEXTURE_FORMATS = (_TEXTURE_FORMATS = {}, _defineProperty(_TEXTURE_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGB, { dataFormat: __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGB, types: [__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_BYTE, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_SHORT_5_6_5] }), _defineProperty(_TEXTURE_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA, { dataFormat: __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA, types: [__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_BYTE, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_SHORT_4_4_4_4, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_SHORT_5_5_5_1] }), _defineProperty(_TEXTURE_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].ALPHA, { dataFormat: __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].ALPHA, types: [__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_BYTE] }), _defineProperty(_TEXTURE_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LUMINANCE, { dataFormat: __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LUMINANCE, types: [__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_BYTE] }), _defineProperty(_TEXTURE_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LUMINANCE_ALPHA, { dataFormat: __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LUMINANCE_ALPHA, types: [__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_BYTE]
  4450. // [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8], gl1: DEPTH},
  4451. // [GL.DEPTH_STENCIL]: {gl1: DEPTH},
  4452. // Sized texture format - more performance
  4453. // R
  4454. // [GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},
  4455. // [GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
  4456. // [GL.R32F]: {dataFormat: GL.RED, types: [GL.FLOAT], gl2: true},
  4457. // [GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
  4458. // // RG
  4459. // [GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},
  4460. // [GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
  4461. // [GL.RG32F]: {dataFormat: GL.RG, types: [GL.FLOAT], gl2: true},
  4462. // [GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
  4463. // // RGB
  4464. // [GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1: SRGB},
  4465. // [GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1: SRGB},
  4466. // [GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},
  4467. // [GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},
  4468. // [GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1: 'WEBGL_color_buffer_half_float'},
  4469. // [GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1: 'WEBGL_color_buffer_float'},
  4470. // [GL.RGB32F]: {dataFormat: GL.RGB, types: [GL.FLOAT], gl2: true},
  4471. // [GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},
  4472. // // RGBA
  4473. // [GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1: SRGB},
  4474. // [GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1: SRGB},
  4475. // [GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},
  4476. // [GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},
  4477. // [GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},
  4478. // [GL.RGBA32F]: {dataFormat: GL.RGBA, types: [GL.FLOAT], gl2: true},
  4479. // [GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}
  4480. // Compressed formats
  4481. // WEBGL_compressed_texture_s3tc
  4482. // [GL.COMPRESSED_RGB_S3TC_DXT1_EXT]: {compressed: true, gl1: S3TC},
  4483. // [GL.COMPRESSED_RGBA_S3TC_DXT1_EXT]: {compressed: true, gl1: S3TC},
  4484. // [GL.COMPRESSED_RGBA_S3TC_DXT3_EXT]: {compressed: true, gl1: S3TC},
  4485. // [GL.COMPRESSED_RGBA_S3TC_DXT5_EXT]: {compressed: true, gl1: S3TC},
  4486. // WEBGL_compressed_texture_es3
  4487. // [GL.COMPRESSED_R11_EAC]: {compressed: true, gl1: ES3}, // RED
  4488. // [GL.COMPRESSED_SIGNED_R11_EAC]: {compressed: true, gl1: ES3}, // RED
  4489. // [GL.COMPRESSED_RG11_EAC]: {compressed: true, gl1: ES3}, // RG
  4490. // [GL.COMPRESSED_SIGNED_RG11_EAC]: {compressed: true, gl1: ES3}, // RG
  4491. // [GL.COMPRESSED_RGB8_ETC2]: {compressed: true, gl1: ES3}, // RGB
  4492. // [GL.COMPRESSED_RGBA8_ETC2_EAC]: {compressed: true, gl1: ES3}, // RBG
  4493. // [GL.COMPRESSED_SRGB8_ETC2]: {compressed: true, gl1: ES3}, // RGB
  4494. // [GL.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC]: {compressed: true, gl1: ES3}, // RGBA
  4495. // [GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2]: {compressed: true, gl1: ES3}, // RGBA
  4496. // [GL.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2]: {compressed: true, gl1: ES3}, // RGBA
  4497. /* WebGL2 guaranteed availability compressed formats?
  4498. COMPRESSED_R11_EAC RED
  4499. COMPRESSED_SIGNED_R11_EAC RED
  4500. COMPRESSED_RG11_EAC RG
  4501. COMPRESSED_SIGNED_RG11_EAC RG
  4502. COMPRESSED_RGB8_ETC2 RGB
  4503. COMPRESSED_SRGB8_ETC2 RGB
  4504. COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 RGBA
  4505. COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 RGBA
  4506. COMPRESSED_RGBA8_ETC2_EAC RGBA
  4507. COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
  4508. */
  4509. // WEBGL_compressed_texture_pvrtc
  4510. // [GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG]: {compressed: true, gl1: PVRTC},
  4511. // [GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG]: {compressed: true, gl1: PVRTC},
  4512. // [GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG]: {compressed: true, gl1: PVRTC},
  4513. // [GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG]: {compressed: true, gl1: PVRTC},
  4514. // WEBGL_compressed_texture_etc1
  4515. // [GL.COMPRESSED_RGB_ETC1_WEBGL]: {compressed: true, gl1: ETC1},
  4516. // WEBGL_compressed_texture_atc
  4517. // [GL.COMPRESSED_RGB_ATC_WEBGL]: {compressed: true, gl1: ETC1},
  4518. // [GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL]: {compressed: true, gl1: ETC1},
  4519. // [GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL]: {compressed: true, gl1: ETC1}
  4520. }), _TEXTURE_FORMATS);
  4521. function isFormatSupported(gl, format) {
  4522. __WEBPACK_IMPORTED_MODULE_7_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context__["a" /* isWebGL */])(gl), __WEBPACK_IMPORTED_MODULE_2__context__["h" /* ERR_WEBGL */]);
  4523. var info = TEXTURE_FORMATS[format];
  4524. if (!info) {
  4525. return false;
  4526. }
  4527. if (info.gl1 === undefined && info.gl2 === undefined) {
  4528. // No info - always supported
  4529. return true;
  4530. }
  4531. var value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context__["b" /* isWebGL2 */])(gl) ? info.gl2 || info.gl1 : info.gl1;
  4532. return typeof value === 'string' ? gl.getExtension(value) : value;
  4533. }
  4534. function isLinearFilteringSupported(gl, format) {
  4535. var info = TEXTURE_FORMATS[format];
  4536. switch (info && info.types[0]) {
  4537. // Both WebGL1 and WebGL2?
  4538. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].FLOAT:
  4539. return gl.getExtension('OES_texture_float_linear');
  4540. // Not in WebGL2?
  4541. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].HALF_FLOAT:
  4542. return gl.getExtension('OES_texture_half_float_linear');
  4543. default:
  4544. return true;
  4545. }
  4546. }
  4547. var Texture = /*#__PURE__*/function (_Resource) {
  4548. _inherits(Texture, _Resource);
  4549. _createClass(Texture, null, [{
  4550. key: 'isSupported',
  4551. value: function isSupported(gl) {
  4552. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  4553. format = _ref.format,
  4554. linearFiltering = _ref.linearFiltering;
  4555. __WEBPACK_IMPORTED_MODULE_7_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context__["a" /* isWebGL */])(gl), __WEBPACK_IMPORTED_MODULE_2__context__["h" /* ERR_WEBGL */]);
  4556. var supported = true;
  4557. if (format) {
  4558. supported = supported && isFormatSupported(gl, format);
  4559. supported = supported && (!linearFiltering || isLinearFilteringSupported(gl, format));
  4560. }
  4561. return supported;
  4562. }
  4563. // target cannot be modified by bind:
  4564. // textures are special because when you first bind them to a target,
  4565. // they get special information. When you first bind a texture as a
  4566. // GL_TEXTURE_2D, you are actually setting special state in the texture.
  4567. // You are saying that this texture is a 2D texture.
  4568. // And it will always be a 2D texture; this state cannot be changed ever.
  4569. // If you have a texture that was first bound as a GL_TEXTURE_2D,
  4570. // you must always bind it as a GL_TEXTURE_2D;
  4571. // attempting to bind it as GL_TEXTURE_1D will give rise to an error
  4572. // (while run-time).
  4573. }]);
  4574. function Texture(gl, opts) {
  4575. _classCallCheck(this, Texture);
  4576. var _opts$id = opts.id,
  4577. id = _opts$id === undefined ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__utils__["d" /* uid */])('texture') : _opts$id,
  4578. handle = opts.handle,
  4579. target = opts.target;
  4580. var _this = _possibleConstructorReturn(this, (Texture.__proto__ || Object.getPrototypeOf(Texture)).call(this, gl, { id: id, handle: handle }));
  4581. _this.target = target;
  4582. _this.hasFloatTexture = gl.getExtension('OES_texture_float');
  4583. _this.textureUnit = undefined;
  4584. return _this;
  4585. }
  4586. _createClass(Texture, [{
  4587. key: 'toString',
  4588. value: function toString() {
  4589. return 'Texture(' + this.id + ',' + this.width + 'x' + this.height + ')';
  4590. }
  4591. /* eslint-disable max-len, max-statements */
  4592. }, {
  4593. key: 'initialize',
  4594. value: function initialize() {
  4595. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  4596. var data = opts.data;
  4597. var _opts$pixels = opts.pixels,
  4598. pixels = _opts$pixels === undefined ? null : _opts$pixels,
  4599. _opts$format = opts.format,
  4600. format = _opts$format === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA : _opts$format,
  4601. _opts$type = opts.type,
  4602. type = _opts$type === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_BYTE : _opts$type,
  4603. _opts$border = opts.border,
  4604. border = _opts$border === undefined ? 0 : _opts$border,
  4605. _opts$recreate = opts.recreate,
  4606. recreate = _opts$recreate === undefined ? false : _opts$recreate,
  4607. _opts$parameters = opts.parameters,
  4608. parameters = _opts$parameters === undefined ? {} : _opts$parameters,
  4609. _opts$pixelStore = opts.pixelStore,
  4610. pixelStore = _opts$pixelStore === undefined ? {} : _opts$pixelStore,
  4611. _opts$unpackFlipY = opts.unpackFlipY,
  4612. unpackFlipY = _opts$unpackFlipY === undefined ? true : _opts$unpackFlipY;
  4613. var _opts$mipmaps = opts.mipmaps,
  4614. mipmaps = _opts$mipmaps === undefined ? true : _opts$mipmaps;
  4615. // pixels variable is for API compatibility purpose
  4616. if (!data) {
  4617. // TODO - This looks backwards? Commenting out for now until we decide
  4618. // which prop to use
  4619. // log.deprecated('data', 'pixels');
  4620. data = pixels;
  4621. }
  4622. var width = opts.width,
  4623. height = opts.height,
  4624. dataFormat = opts.dataFormat;
  4625. // Deduce width and height
  4626. // Store opts for accessors
  4627. var _deduceParameters2 = this._deduceParameters({
  4628. format: format, type: type, dataFormat: dataFormat, compressed: false, data: data, width: width, height: height
  4629. });
  4630. width = _deduceParameters2.width;
  4631. height = _deduceParameters2.height;
  4632. dataFormat = _deduceParameters2.dataFormat;
  4633. this.width = width;
  4634. this.height = height;
  4635. this.format = format;
  4636. this.type = type;
  4637. this.dataFormat = dataFormat;
  4638. this.border = border;
  4639. this.mipmaps = mipmaps;
  4640. // Note: luma.gl defaults to GL.UNPACK_FLIP_Y_WEBGL = true;
  4641. // TODO - compare v4 and v3
  4642. var DEFAULT_TEXTURE_SETTINGS = _defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNPACK_FLIP_Y_WEBGL, unpackFlipY);
  4643. var glSettings = Object.assign({}, DEFAULT_TEXTURE_SETTINGS, pixelStore);
  4644. if (this._isNPOT()) {
  4645. __WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].warn('texture: ' + this + ' is Non-Power-Of-Two, disabling mipmaping');
  4646. mipmaps = false;
  4647. this._updateForNPOT(parameters);
  4648. }
  4649. this.setImageData({ data: data, width: width, height: height, format: format, type: type, dataFormat: dataFormat, border: border, mipmaps: mipmaps, parameters: glSettings });
  4650. if (mipmaps) {
  4651. this.generateMipmap();
  4652. }
  4653. // Set texture sampler parameters
  4654. this.setParameters(parameters);
  4655. // TODO - Store data to enable auto recreate on context loss
  4656. if (recreate) {
  4657. this.data = data;
  4658. }
  4659. }
  4660. // If size has changed, reinitializes with current format
  4661. // note clears image and mipmaps
  4662. }, {
  4663. key: 'resize',
  4664. value: function resize(_ref2) {
  4665. var width = _ref2.width,
  4666. height = _ref2.height;
  4667. if (width !== this.width || height !== this.height) {
  4668. return this.initialize({
  4669. width: width,
  4670. height: height,
  4671. format: this.format,
  4672. type: this.type,
  4673. dataFormat: this.dataFormat,
  4674. border: this.border,
  4675. mipmaps: false
  4676. });
  4677. }
  4678. return this;
  4679. }
  4680. // Call to regenerate mipmaps after modifying texture(s)
  4681. }, {
  4682. key: 'generateMipmap',
  4683. value: function generateMipmap() {
  4684. var _this2 = this;
  4685. var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  4686. this.gl.bindTexture(this.target, this.handle);
  4687. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__context_state__["f" /* withParameters */])(this.gl, params, function () {
  4688. _this2.gl.generateMipmap(_this2.target);
  4689. });
  4690. this.gl.bindTexture(this.target, null);
  4691. return this;
  4692. }
  4693. /*
  4694. * Allocates storage
  4695. * @param {*} pixels -
  4696. * null - create empty texture of specified format
  4697. * Typed array - init from image data in typed array
  4698. * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer
  4699. * HTMLImageElement|Image - Inits with content of image. Auto width/height
  4700. * HTMLCanvasElement - Inits with contents of canvas. Auto width/height
  4701. * HTMLVideoElement - Creates video texture. Auto width/height
  4702. *
  4703. * @param {GLint} width -
  4704. * @param {GLint} height -
  4705. * @param {GLint} mipMapLevel -
  4706. * @param {GLenum} format - format of image data.
  4707. * @param {GLenum} type
  4708. * - format of array (autodetect from type) or
  4709. * - (WEBGL2) format of buffer
  4710. * @param {Number} offset - (WEBGL2) offset from start of buffer
  4711. * @param {GLint} border - must be 0.
  4712. * @parameters - temporary settings to be applied, can be used to supply pixel store settings.
  4713. */
  4714. /* eslint-disable max-len, max-statements, complexity */
  4715. }, {
  4716. key: 'setImageData',
  4717. value: function setImageData(_ref3) {
  4718. var _this3 = this;
  4719. var _ref3$target = _ref3.target,
  4720. target = _ref3$target === undefined ? this.target : _ref3$target,
  4721. _ref3$pixels = _ref3.pixels,
  4722. pixels = _ref3$pixels === undefined ? null : _ref3$pixels,
  4723. _ref3$data = _ref3.data,
  4724. data = _ref3$data === undefined ? null : _ref3$data,
  4725. width = _ref3.width,
  4726. height = _ref3.height,
  4727. _ref3$level = _ref3.level,
  4728. level = _ref3$level === undefined ? 0 : _ref3$level,
  4729. _ref3$format = _ref3.format,
  4730. format = _ref3$format === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA : _ref3$format,
  4731. type = _ref3.type,
  4732. dataFormat = _ref3.dataFormat,
  4733. _ref3$offset = _ref3.offset,
  4734. offset = _ref3$offset === undefined ? 0 : _ref3$offset,
  4735. _ref3$border = _ref3.border,
  4736. border = _ref3$border === undefined ? 0 : _ref3$border,
  4737. _ref3$compressed = _ref3.compressed,
  4738. compressed = _ref3$compressed === undefined ? false : _ref3$compressed,
  4739. _ref3$parameters = _ref3.parameters,
  4740. parameters = _ref3$parameters === undefined ? {} : _ref3$parameters;
  4741. // pixels variable is for API compatibility purpose
  4742. if (!data) {
  4743. data = pixels;
  4744. }
  4745. var _deduceParameters3 = this._deduceParameters({
  4746. format: format, type: type, dataFormat: dataFormat, compressed: compressed, data: data, width: width, height: height });
  4747. type = _deduceParameters3.type;
  4748. dataFormat = _deduceParameters3.dataFormat;
  4749. compressed = _deduceParameters3.compressed;
  4750. width = _deduceParameters3.width;
  4751. height = _deduceParameters3.height;
  4752. var gl = this.gl;
  4753. gl.bindTexture(this.target, this.handle);
  4754. var dataType = null;
  4755. var _getDataType2 = this._getDataType({ data: data, compressed: compressed });
  4756. data = _getDataType2.data;
  4757. dataType = _getDataType2.dataType;
  4758. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__context_state__["f" /* withParameters */])(this.gl, parameters, function () {
  4759. switch (dataType) {
  4760. case 'null':
  4761. gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);
  4762. break;
  4763. case 'typed-array':
  4764. // Looks like this assert is not necessary, as offset is ignored under WebGL1
  4765. // assert((offset === 0 || isWebGL2(gl)), 'offset supported in WebGL2 only');
  4766. gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data, offset);
  4767. break;
  4768. case 'buffer':
  4769. // WebGL2 enables creating textures directly from a WebGL buffer
  4770. __WEBPACK_IMPORTED_MODULE_7_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context__["b" /* isWebGL2 */])(gl), __WEBPACK_IMPORTED_MODULE_2__context__["i" /* ERR_WEBGL2 */]);
  4771. gl.bindBuffer(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].PIXEL_UNPACK_BUFFER, data.handle || data);
  4772. gl.texImage2D(target, level, format, width, height, border, format, type, offset);
  4773. break;
  4774. case 'browser-object':
  4775. gl.texImage2D(target, level, format, format, type, data);
  4776. break;
  4777. case 'compressed':
  4778. gl.compressedTexImage2D(_this3.target, level, format, width, height, border, data);
  4779. break;
  4780. default:
  4781. __WEBPACK_IMPORTED_MODULE_7_assert___default()(false, 'Unknown image data type');
  4782. }
  4783. });
  4784. }
  4785. /* eslint-enable max-len, max-statements, complexity */
  4786. /**
  4787. * Redefines an area of an existing texture
  4788. * Note: does not allocate storage
  4789. */
  4790. /*
  4791. * Redefines an area of an existing texture
  4792. * @param {*} pixels, data -
  4793. * null - create empty texture of specified format
  4794. * Typed array - init from image data in typed array
  4795. * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer
  4796. * HTMLImageElement|Image - Inits with content of image. Auto width/height
  4797. * HTMLCanvasElement - Inits with contents of canvas. Auto width/height
  4798. * HTMLVideoElement - Creates video texture. Auto width/height
  4799. *
  4800. * @param {GLint} x - xOffset from where texture to be updated
  4801. * @param {GLint} y - yOffset from where texture to be updated
  4802. * @param {GLint} width - width of the sub image to be updated
  4803. * @param {GLint} height - height of the sub image to be updated
  4804. * @param {GLint} level - mip level to be updated
  4805. * @param {GLenum} format - internal format of image data.
  4806. * @param {GLenum} type
  4807. * - format of array (autodetect from type) or
  4808. * - (WEBGL2) format of buffer or ArrayBufferView
  4809. * @param {GLenum} dataFormat - format of image data.
  4810. * @param {Number} offset - (WEBGL2) offset from start of buffer
  4811. * @param {GLint} border - must be 0.
  4812. * @parameters - temporary settings to be applied, can be used to supply pixel store settings.
  4813. */
  4814. }, {
  4815. key: 'setSubImageData',
  4816. value: function setSubImageData(_ref4) {
  4817. var _this4 = this;
  4818. var _ref4$target = _ref4.target,
  4819. target = _ref4$target === undefined ? this.target : _ref4$target,
  4820. _ref4$pixels = _ref4.pixels,
  4821. pixels = _ref4$pixels === undefined ? null : _ref4$pixels,
  4822. _ref4$data = _ref4.data,
  4823. data = _ref4$data === undefined ? null : _ref4$data,
  4824. _ref4$x = _ref4.x,
  4825. x = _ref4$x === undefined ? 0 : _ref4$x,
  4826. _ref4$y = _ref4.y,
  4827. y = _ref4$y === undefined ? 0 : _ref4$y,
  4828. width = _ref4.width,
  4829. height = _ref4.height,
  4830. _ref4$level = _ref4.level,
  4831. level = _ref4$level === undefined ? 0 : _ref4$level,
  4832. _ref4$format = _ref4.format,
  4833. format = _ref4$format === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA : _ref4$format,
  4834. type = _ref4.type,
  4835. dataFormat = _ref4.dataFormat,
  4836. _ref4$compressed = _ref4.compressed,
  4837. compressed = _ref4$compressed === undefined ? false : _ref4$compressed,
  4838. _ref4$offset = _ref4.offset,
  4839. offset = _ref4$offset === undefined ? 0 : _ref4$offset,
  4840. _ref4$border = _ref4.border,
  4841. border = _ref4$border === undefined ? 0 : _ref4$border,
  4842. _ref4$parameters = _ref4.parameters,
  4843. parameters = _ref4$parameters === undefined ? {} : _ref4$parameters;
  4844. // pixels variable is for API compatibility purpose
  4845. var _deduceParameters4 = this._deduceParameters({
  4846. format: format, type: type, dataFormat: dataFormat, compressed: compressed, data: data, width: width, height: height });
  4847. type = _deduceParameters4.type;
  4848. dataFormat = _deduceParameters4.dataFormat;
  4849. compressed = _deduceParameters4.compressed;
  4850. width = _deduceParameters4.width;
  4851. height = _deduceParameters4.height;
  4852. if (!data) {
  4853. data = pixels;
  4854. }
  4855. // Support ndarrays
  4856. if (data && data.data) {
  4857. var ndarray = data;
  4858. data = ndarray.data;
  4859. width = ndarray.shape[0];
  4860. height = ndarray.shape[1];
  4861. }
  4862. // Support buffers
  4863. if (data instanceof __WEBPACK_IMPORTED_MODULE_5__buffer__["a" /* default */]) {
  4864. data = data.handle;
  4865. }
  4866. this.gl.bindTexture(this.target, this.handle);
  4867. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__context_state__["f" /* withParameters */])(this.gl, parameters, function () {
  4868. // TODO - x,y parameters
  4869. if (compressed) {
  4870. _this4.gl.compressedTexSubImage2D(target, level, x, y, width, height, format, data);
  4871. } else if (data === null) {
  4872. _this4.gl.texSubImage2D(target, level, format, width, height, border, dataFormat, type, null);
  4873. } else if (ArrayBuffer.isView(data)) {
  4874. _this4.gl.texSubImage2D(target, level, x, y, width, height, format, type, data, offset);
  4875. } else if (data instanceof __WEBPACK_IMPORTED_MODULE_1__api__["e" /* WebGLBuffer */]) {
  4876. // WebGL2 allows us to create texture directly from a WebGL buffer
  4877. __WEBPACK_IMPORTED_MODULE_7_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context__["b" /* isWebGL2 */])(_this4.gl), __WEBPACK_IMPORTED_MODULE_2__context__["i" /* ERR_WEBGL2 */]);
  4878. // This texImage2D signature uses currently bound GL_PIXEL_UNPACK_BUFFER
  4879. _this4.gl.bindBuffer(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].PIXEL_UNPACK_BUFFER, data);
  4880. _this4.gl.texSubImage2D(target, level, format, width, height, border, format, type, offset);
  4881. _this4.gl.bindBuffer(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].GL_PIXEL_UNPACK_BUFFER, null);
  4882. } else {
  4883. // Assume data is a browser supported object (ImageData, Canvas, ...)
  4884. _this4.gl.texSubImage2D(target, level, x, y, format, type, data);
  4885. }
  4886. });
  4887. this.gl.bindTexture(this.target, null);
  4888. }
  4889. /* eslint-enable max-len, max-statements, complexity */
  4890. /**
  4891. * Defines a two-dimensional texture image or cube-map texture image with
  4892. * pixels from the current framebuffer (rather than from client memory).
  4893. * (gl.copyTexImage2D wrapper)
  4894. *
  4895. * Note that binding a texture into a Framebuffer's color buffer and
  4896. * rendering can be faster.
  4897. */
  4898. }, {
  4899. key: 'copyFramebuffer',
  4900. value: function copyFramebuffer(_ref5) {
  4901. var _ref5$target = _ref5.target,
  4902. target = _ref5$target === undefined ? this.target : _ref5$target,
  4903. framebuffer = _ref5.framebuffer,
  4904. _ref5$offset = _ref5.offset,
  4905. offset = _ref5$offset === undefined ? 0 : _ref5$offset,
  4906. _ref5$x = _ref5.x,
  4907. x = _ref5$x === undefined ? 0 : _ref5$x,
  4908. _ref5$y = _ref5.y,
  4909. y = _ref5$y === undefined ? 0 : _ref5$y,
  4910. width = _ref5.width,
  4911. height = _ref5.height,
  4912. _ref5$level = _ref5.level,
  4913. level = _ref5$level === undefined ? 0 : _ref5$level,
  4914. _ref5$internalFormat = _ref5.internalFormat,
  4915. internalFormat = _ref5$internalFormat === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA : _ref5$internalFormat,
  4916. _ref5$border = _ref5.border,
  4917. border = _ref5$border === undefined ? 0 : _ref5$border;
  4918. if (framebuffer) {
  4919. framebuffer.bind();
  4920. }
  4921. // target
  4922. this.bind();
  4923. this.gl.copyTexImage2D(this.target, level, internalFormat, x, y, width, height, border);
  4924. this.unbind();
  4925. if (framebuffer) {
  4926. framebuffer.unbind();
  4927. }
  4928. }
  4929. }, {
  4930. key: 'getActiveUnit',
  4931. value: function getActiveUnit() {
  4932. return this.gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].ACTIVE_TEXTURE) - __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE0;
  4933. }
  4934. // target cannot be modified by bind:
  4935. // textures are special because when you first bind them to a target,
  4936. // they get special information. When you first bind a texture as a
  4937. // GL_TEXTURE_2D, you are actually setting special state in the texture.
  4938. // You are saying that this texture is a 2D texture.
  4939. // And it will always be a 2D texture; this state cannot be changed ever.
  4940. // If you have a texture that was first bound as a GL_TEXTURE_2D,
  4941. // you must always bind it as a GL_TEXTURE_2D;
  4942. // attempting to bind it as GL_TEXTURE_1D will give rise to an error
  4943. // (while run-time).
  4944. }, {
  4945. key: 'bind',
  4946. value: function bind() {
  4947. var textureUnit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.textureUnit;
  4948. if (textureUnit === undefined) {
  4949. throw new Error('Texture.bind: must specify texture unit');
  4950. }
  4951. this.textureUnit = textureUnit;
  4952. this.gl.activeTexture(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE0 + textureUnit);
  4953. this.gl.bindTexture(this.target, this.handle);
  4954. return textureUnit;
  4955. }
  4956. }, {
  4957. key: 'unbind',
  4958. value: function unbind() {
  4959. if (this.textureUnit === undefined) {
  4960. throw new Error('Texture.unbind: texture unit not specified');
  4961. }
  4962. this.gl.activeTexture(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE0 + this.textureUnit);
  4963. this.gl.bindTexture(this.target, null);
  4964. return this.textureUnit;
  4965. }
  4966. // PRIVATE METHODS
  4967. }, {
  4968. key: '_getDataType',
  4969. value: function _getDataType(_ref6) {
  4970. var data = _ref6.data,
  4971. _ref6$compressed = _ref6.compressed,
  4972. compressed = _ref6$compressed === undefined ? false : _ref6$compressed;
  4973. if (compressed) {
  4974. return { data: data, dataType: 'compressed' };
  4975. }
  4976. if (data === null) {
  4977. return { data: data, dataType: 'null' };
  4978. }
  4979. if (ArrayBuffer.isView(data)) {
  4980. return { data: data, dataType: 'typed-array' };
  4981. }
  4982. if (data instanceof __WEBPACK_IMPORTED_MODULE_5__buffer__["a" /* default */]) {
  4983. return { data: data.handle, dataType: 'buffer' };
  4984. }
  4985. if (data instanceof __WEBPACK_IMPORTED_MODULE_1__api__["e" /* WebGLBuffer */]) {
  4986. return { data: data, dataType: 'buffer' };
  4987. }
  4988. // Assume data is a browser supported object (ImageData, Canvas, ...)
  4989. return { data: data, dataType: 'browser-object' };
  4990. }
  4991. // Image 3D copies from Typed Array or WebGLBuffer
  4992. }, {
  4993. key: 'setImage3D',
  4994. value: function setImage3D(_ref7) {
  4995. var _ref7$level = _ref7.level,
  4996. level = _ref7$level === undefined ? 0 : _ref7$level,
  4997. _ref7$internalformat = _ref7.internalformat,
  4998. internalformat = _ref7$internalformat === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA : _ref7$internalformat,
  4999. width = _ref7.width,
  5000. height = _ref7.height,
  5001. _ref7$depth = _ref7.depth,
  5002. depth = _ref7$depth === undefined ? 1 : _ref7$depth,
  5003. _ref7$border = _ref7.border,
  5004. border = _ref7$border === undefined ? 0 : _ref7$border,
  5005. format = _ref7.format,
  5006. _ref7$type = _ref7.type,
  5007. type = _ref7$type === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_BYTE : _ref7$type,
  5008. _ref7$offset = _ref7.offset,
  5009. offset = _ref7$offset === undefined ? 0 : _ref7$offset,
  5010. pixels = _ref7.pixels;
  5011. if (ArrayBuffer.isView(pixels)) {
  5012. this.gl.texImage3D(this.target, level, internalformat, width, height, depth, border, format, type, pixels);
  5013. return this;
  5014. }
  5015. if (pixels instanceof __WEBPACK_IMPORTED_MODULE_5__buffer__["a" /* default */]) {
  5016. this.gl.bindBuffer(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].PIXEL_UNPACK_BUFFER, pixels.handle);
  5017. this.gl.texImage3D(this.target, level, internalformat, width, height, depth, border, format, type, offset);
  5018. }
  5019. return this;
  5020. }
  5021. /* Copied from texture-2d.js
  5022. // WebGL2
  5023. setPixels(opts = {}) {
  5024. const {
  5025. buffer,
  5026. width = null,
  5027. height = null,
  5028. mipmapLevel = 0,
  5029. format = GL.RGBA,
  5030. type = GL.UNSIGNED_BYTE,
  5031. border = 0
  5032. } = opts;
  5033. const {gl} = this;
  5034. // This signature of texImage2D uses currently bound GL_PIXEL_UNPACK_BUFFER
  5035. gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, buffer.target);
  5036. // And as always, we must also bind the texture itself
  5037. this.bind();
  5038. gl.texImage2D(gl.TEXTURE_2D,
  5039. mipmapLevel, format, width, height, border, format, type, buffer.target);
  5040. this.unbind();
  5041. gl.bindBuffer(GL.GL_PIXEL_UNPACK_BUFFER, null);
  5042. return this;
  5043. }
  5044. setImageDataFromCompressedBuffer(opts) {
  5045. const {
  5046. buffer,
  5047. // offset = 0,
  5048. width = null,
  5049. height = null,
  5050. mipmapLevel = 0,
  5051. internalFormat = GL.RGBA,
  5052. // format = GL.RGBA,
  5053. // type = GL.UNSIGNED_BYTE,
  5054. border = 0
  5055. } = opts;
  5056. const {gl} = this;
  5057. gl.compressedTexImage2D(this.target,
  5058. mipmapLevel, internalFormat, width, height, border, buffer);
  5059. // gl.compressedTexSubImage2D(target,
  5060. // level, xoffset, yoffset, width, height, format, ArrayBufferView? pixels);
  5061. return this;
  5062. }
  5063. copySubImage(opts) {
  5064. const {
  5065. // pixels,
  5066. // offset = 0,
  5067. // x,
  5068. // y,
  5069. // width,
  5070. // height,
  5071. // mipmapLevel = 0,
  5072. // internalFormat = GL.RGBA,
  5073. // type = GL.UNSIGNED_BYTE,
  5074. // border = 0
  5075. } = opts;
  5076. // if (pixels instanceof ArrayBufferView) {
  5077. // gl.texSubImage2D(target, level, x, y, width, height, format, type, pixels);
  5078. // }
  5079. // gl.texSubImage2D(target, level, x, y, format, type, ? pixels);
  5080. // gl.texSubImage2D(target, level, x, y, format, type, HTMLImageElement pixels);
  5081. // gl.texSubImage2D(target, level, x, y, format, type, HTMLCanvasElement pixels);
  5082. // gl.texSubImage2D(target, level, x, y, format, type, HTMLVideoElement pixels);
  5083. // // Additional signature in a WebGL 2 context:
  5084. // gl.texSubImage2D(target, level, x, y, format, type, GLintptr offset);
  5085. }
  5086. */
  5087. // HELPER METHODS
  5088. }, {
  5089. key: '_deduceParameters',
  5090. value: function _deduceParameters(opts) {
  5091. var format = opts.format,
  5092. data = opts.data;
  5093. var width = opts.width,
  5094. height = opts.height,
  5095. dataFormat = opts.dataFormat,
  5096. type = opts.type,
  5097. compressed = opts.compressed;
  5098. // Deduce format and type from format
  5099. var textureFormat = TEXTURE_FORMATS[format];
  5100. dataFormat = dataFormat || textureFormat && textureFormat.dataFormat;
  5101. type = type || textureFormat && textureFormat.types[0];
  5102. // Deduce compression from format
  5103. compressed = compressed || textureFormat && textureFormat.compressed;
  5104. var _deduceImageSize2 = this._deduceImageSize({ data: data, width: width, height: height });
  5105. width = _deduceImageSize2.width;
  5106. height = _deduceImageSize2.height;
  5107. return { dataFormat: dataFormat, type: type, compressed: compressed, width: width, height: height, format: format, data: data };
  5108. }
  5109. /* global ImageData, HTMLImageElement, HTMLCanvasElement, HTMLVideoElement */
  5110. }, {
  5111. key: '_deduceImageSize',
  5112. value: function _deduceImageSize(_ref8) {
  5113. var data = _ref8.data,
  5114. width = _ref8.width,
  5115. height = _ref8.height;
  5116. var size = void 0;
  5117. if (typeof ImageData !== 'undefined' && data instanceof ImageData) {
  5118. size = { width: data.width, height: data.height };
  5119. } else if (typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) {
  5120. size = { width: data.naturalWidth, height: data.naturalHeight };
  5121. } else if (typeof HTMLCanvasElement !== 'undefined' && data instanceof HTMLCanvasElement) {
  5122. size = { width: data.width, height: data.height };
  5123. } else if (typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement) {
  5124. size = { width: data.videoWidth, height: data.videoHeight };
  5125. } else if (!data) {
  5126. size = { width: width >= 0 ? width : 1, height: height >= 0 ? height : 1 };
  5127. } else {
  5128. size = { width: width, height: height };
  5129. }
  5130. __WEBPACK_IMPORTED_MODULE_7_assert___default()(size, 'Could not deduced texture size');
  5131. __WEBPACK_IMPORTED_MODULE_7_assert___default()(width === undefined || size.width === width, 'Deduced texture width does not match supplied width');
  5132. __WEBPACK_IMPORTED_MODULE_7_assert___default()(height === undefined || size.height === height, 'Deduced texture height does not match supplied height');
  5133. return size;
  5134. }
  5135. // RESOURCE METHODS
  5136. }, {
  5137. key: '_createHandle',
  5138. value: function _createHandle() {
  5139. return this.gl.createTexture();
  5140. }
  5141. }, {
  5142. key: '_deleteHandle',
  5143. value: function _deleteHandle() {
  5144. this.gl.deleteTexture(this.handle);
  5145. }
  5146. }, {
  5147. key: '_getParameter',
  5148. value: function _getParameter(pname) {
  5149. switch (pname) {
  5150. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE_WIDTH:
  5151. return this.width;
  5152. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE_HEIGHT:
  5153. return this.height;
  5154. default:
  5155. this.gl.bindTexture(this.target, this.handle);
  5156. var value = this.gl.getTexParameter(this.target, pname);
  5157. this.gl.bindTexture(this.target, null);
  5158. return value;
  5159. }
  5160. }
  5161. }, {
  5162. key: '_setParameter',
  5163. value: function _setParameter(pname, param) {
  5164. this.gl.bindTexture(this.target, this.handle);
  5165. // NOTE: Apply NPOT workaround
  5166. param = this._getNPOTParam(pname, param);
  5167. // Apparently there are some integer/float conversion rules that made
  5168. // the WebGL committe expose two parameter setting functions in JavaScript.
  5169. // For now, pick the float version for parameters specified as GLfloat.
  5170. switch (pname) {
  5171. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE_MIN_LOD:
  5172. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE_MAX_LOD:
  5173. this.gl.texParameterf(this.handle, pname, param);
  5174. break;
  5175. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE_WIDTH:
  5176. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE_HEIGHT:
  5177. throw new Error('Cannot set emulated parameter');
  5178. default:
  5179. this.gl.texParameteri(this.target, pname, param);
  5180. break;
  5181. }
  5182. this.gl.bindTexture(this.target, null);
  5183. return this;
  5184. }
  5185. }, {
  5186. key: '_isNPOT',
  5187. value: function _isNPOT() {
  5188. return !__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context__["b" /* isWebGL2 */])(this.gl) && (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__utils__["e" /* isPowerOfTwo */])(this.width) || !__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__utils__["e" /* isPowerOfTwo */])(this.height));
  5189. }
  5190. // Update default settings which are not supported by NPOT textures.
  5191. }, {
  5192. key: '_updateForNPOT',
  5193. value: function _updateForNPOT(parameters) {
  5194. if (parameters[this.gl.TEXTURE_MIN_FILTER] === undefined) {
  5195. __WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].warn('texture: ' + this + ' is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR');
  5196. parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.LINEAR;
  5197. }
  5198. if (parameters[this.gl.TEXTURE_WRAP_S] === undefined) {
  5199. __WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].warn('texture: ' + this + ' is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE');
  5200. parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;
  5201. }
  5202. if (parameters[this.gl.TEXTURE_WRAP_T] === undefined) {
  5203. __WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].warn('texture: ' + this + ' is Non-Power-Of-Two, forcing TEXTURE_WRAP_T to CLAMP_TO_EDGE');
  5204. parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;
  5205. }
  5206. }
  5207. }, {
  5208. key: '_getNPOTParam',
  5209. value: function _getNPOTParam(pname, param) {
  5210. if (this._isNPOT()) {
  5211. switch (pname) {
  5212. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE_MIN_FILTER:
  5213. if (NPOT_MIN_FILTERS.indexOf(param) === -1) {
  5214. __WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].warn('texture: ' + this + ' is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR');
  5215. param = __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINEAR;
  5216. }
  5217. break;
  5218. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE_WRAP_S:
  5219. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TEXTURE_WRAP_T:
  5220. if (param !== __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].CLAMP_TO_EDGE) {
  5221. __WEBPACK_IMPORTED_MODULE_6__utils__["b" /* log */].warn('texture: ' + this + ' is Non-Power-Of-Two, ' + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["c" /* glKey */])(pname) + ' to CLAMP_TO_EDGE');
  5222. param = __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].CLAMP_TO_EDGE;
  5223. }
  5224. break;
  5225. default:
  5226. break;
  5227. }
  5228. }
  5229. return param;
  5230. }
  5231. }]);
  5232. return Texture;
  5233. }(__WEBPACK_IMPORTED_MODULE_4__resource__["a" /* default */]);
  5234. /* harmony default export */ __webpack_exports__["a"] = (Texture);
  5235. //# sourceMappingURL=texture.js.map
  5236. /***/ }),
  5237. /* 63 */
  5238. /***/ (function(module, exports) {
  5239. module.exports = {};
  5240. /***/ }),
  5241. /* 64 */
  5242. /***/ (function(module, exports, __webpack_require__) {
  5243. var def = __webpack_require__(10).f;
  5244. var has = __webpack_require__(18);
  5245. var TAG = __webpack_require__(6)('toStringTag');
  5246. module.exports = function (it, tag, stat) {
  5247. if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
  5248. };
  5249. /***/ }),
  5250. /* 65 */
  5251. /***/ (function(module, exports, __webpack_require__) {
  5252. var $export = __webpack_require__(0);
  5253. var defined = __webpack_require__(34);
  5254. var fails = __webpack_require__(4);
  5255. var spaces = __webpack_require__(148);
  5256. var space = '[' + spaces + ']';
  5257. var non = '\u200b\u0085';
  5258. var ltrim = RegExp('^' + space + space + '*');
  5259. var rtrim = RegExp(space + space + '*$');
  5260. var exporter = function (KEY, exec, ALIAS) {
  5261. var exp = {};
  5262. var FORCE = fails(function () {
  5263. return !!spaces[KEY]() || non[KEY]() != non;
  5264. });
  5265. var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
  5266. if (ALIAS) exp[ALIAS] = fn;
  5267. $export($export.P + $export.F * FORCE, 'String', exp);
  5268. };
  5269. // 1 -> String#trimLeft
  5270. // 2 -> String#trimRight
  5271. // 3 -> String#trim
  5272. var trim = exporter.trim = function (string, TYPE) {
  5273. string = String(defined(string));
  5274. if (TYPE & 1) string = string.replace(ltrim, '');
  5275. if (TYPE & 2) string = string.replace(rtrim, '');
  5276. return string;
  5277. };
  5278. module.exports = exporter;
  5279. /***/ }),
  5280. /* 66 */
  5281. /***/ (function(module, exports, __webpack_require__) {
  5282. var isObject = __webpack_require__(5);
  5283. module.exports = function (it, TYPE) {
  5284. if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
  5285. return it;
  5286. };
  5287. /***/ }),
  5288. /* 67 */
  5289. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5290. "use strict";
  5291. /* unused harmony export BufferLayout */
  5292. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(38);
  5293. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  5294. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_typed_array_utils__ = __webpack_require__(163);
  5295. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__resource__ = __webpack_require__(30);
  5296. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_assert__ = __webpack_require__(1);
  5297. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_assert__);
  5298. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  5299. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  5300. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  5301. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  5302. var ERR_BUFFER_PARAMS = 'Illegal or missing parameter to Buffer';
  5303. var GL_COPY_READ_BUFFER = 0x8F36;
  5304. var GL_COPY_WRITE_BUFFER = 0x8F37;
  5305. var GL_TRANSFORM_FEEDBACK_BUFFER = 0x8C8E;
  5306. var BufferLayout = /*#__PURE__*/
  5307. /**
  5308. * @classdesc
  5309. * Store characteristics of a data layout
  5310. * This data can be used when updating vertex attributes with
  5311. * the associated buffer, freeing the application from keeping
  5312. * track of this metadata.
  5313. *
  5314. * @class
  5315. * @param {GLuint} size - number of values per element (1-4)
  5316. * @param {GLuint} type - type of values (e.g. gl.FLOAT)
  5317. * @param {GLbool} normalized=false - normalize integers to [-1,1] or [0,1]
  5318. * @param {GLuint} integer=false - WebGL2 only, int-to-float conversion
  5319. * @param {GLuint} stride=0 - supports strided arrays
  5320. * @param {GLuint} offset=0 - supports strided arrays
  5321. */
  5322. function BufferLayout() {
  5323. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  5324. type = _ref.type,
  5325. _ref$size = _ref.size,
  5326. size = _ref$size === undefined ? 1 : _ref$size,
  5327. _ref$offset = _ref.offset,
  5328. offset = _ref$offset === undefined ? 0 : _ref$offset,
  5329. _ref$stride = _ref.stride,
  5330. stride = _ref$stride === undefined ? 0 : _ref$stride,
  5331. _ref$normalized = _ref.normalized,
  5332. normalized = _ref$normalized === undefined ? false : _ref$normalized,
  5333. _ref$integer = _ref.integer,
  5334. integer = _ref$integer === undefined ? false : _ref$integer,
  5335. _ref$instanced = _ref.instanced,
  5336. instanced = _ref$instanced === undefined ? 0 : _ref$instanced;
  5337. _classCallCheck(this, BufferLayout);
  5338. this.type = type;
  5339. this.size = size;
  5340. this.offset = offset;
  5341. this.stride = stride;
  5342. this.normalized = normalized;
  5343. this.integer = integer;
  5344. this.instanced = instanced;
  5345. };
  5346. var Buffer = /*#__PURE__*/function (_Resource) {
  5347. _inherits(Buffer, _Resource);
  5348. function Buffer(gl) {
  5349. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  5350. _classCallCheck(this, Buffer);
  5351. // In WebGL1, we need to make sure we use GL.ELEMENT_ARRAY_BUFFER when
  5352. // initializing element buffers, otherwise the buffer type will be locked
  5353. // to a generic (non-element) buffer.
  5354. // In WebGL2, we can use GL_COPY_READ_BUFFER which avoids locking the type here
  5355. var _this = _possibleConstructorReturn(this, (Buffer.__proto__ || Object.getPrototypeOf(Buffer)).call(this, gl, opts));
  5356. _this.target = opts.target || (_this.gl.webgl2 ? GL_COPY_READ_BUFFER : __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].ARRAY_BUFFER);
  5357. _this.index = null;
  5358. _this.setData(opts);
  5359. Object.seal(_this);
  5360. return _this;
  5361. }
  5362. // Stores the layout of data with the buffer, makes it easy to e.g. set it as an attribute later
  5363. _createClass(Buffer, [{
  5364. key: 'setDataLayout',
  5365. value: function setDataLayout(_ref2) {
  5366. var layout = _ref2.layout,
  5367. type = _ref2.type,
  5368. _ref2$size = _ref2.size,
  5369. size = _ref2$size === undefined ? 1 : _ref2$size,
  5370. _ref2$offset = _ref2.offset,
  5371. offset = _ref2$offset === undefined ? 0 : _ref2$offset,
  5372. _ref2$stride = _ref2.stride,
  5373. stride = _ref2$stride === undefined ? 0 : _ref2$stride,
  5374. _ref2$normalized = _ref2.normalized,
  5375. normalized = _ref2$normalized === undefined ? false : _ref2$normalized,
  5376. _ref2$integer = _ref2.integer,
  5377. integer = _ref2$integer === undefined ? false : _ref2$integer,
  5378. _ref2$instanced = _ref2.instanced,
  5379. instanced = _ref2$instanced === undefined ? 0 : _ref2$instanced;
  5380. this.layout = layout || new BufferLayout({
  5381. type: type || this.type, // Use autodeduced type if available
  5382. size: size,
  5383. offset: offset,
  5384. stride: stride,
  5385. normalized: normalized,
  5386. integer: integer,
  5387. instanced: instanced
  5388. });
  5389. return this;
  5390. }
  5391. // Creates and initializes the buffer object's data store.
  5392. }, {
  5393. key: 'initialize',
  5394. value: function initialize() {
  5395. var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  5396. data = _ref3.data,
  5397. bytes = _ref3.bytes,
  5398. _ref3$usage = _ref3.usage,
  5399. usage = _ref3$usage === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].STATIC_DRAW : _ref3$usage,
  5400. layout = _ref3.layout,
  5401. type = _ref3.type,
  5402. _ref3$size = _ref3.size,
  5403. size = _ref3$size === undefined ? 1 : _ref3$size,
  5404. _ref3$offset = _ref3.offset,
  5405. offset = _ref3$offset === undefined ? 0 : _ref3$offset,
  5406. _ref3$stride = _ref3.stride,
  5407. stride = _ref3$stride === undefined ? 0 : _ref3$stride,
  5408. _ref3$normalized = _ref3.normalized,
  5409. normalized = _ref3$normalized === undefined ? false : _ref3$normalized,
  5410. _ref3$integer = _ref3.integer,
  5411. integer = _ref3$integer === undefined ? false : _ref3$integer,
  5412. _ref3$instanced = _ref3.instanced,
  5413. instanced = _ref3$instanced === undefined ? 0 : _ref3$instanced;
  5414. var opts = arguments[0];
  5415. if (!data) {
  5416. type = type || __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FLOAT;
  5417. // Workaround needed for Safari (#291):
  5418. // gl.bufferData with size (second argument) equal to 0 crashes.
  5419. // hence create zero sized array.
  5420. if (!bytes || bytes === 0) {
  5421. bytes = 0;
  5422. data = new Float32Array(0);
  5423. }
  5424. } else {
  5425. type = type || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils_typed_array_utils__["b" /* getGLTypeFromTypedArray */])(data);
  5426. bytes = data.byteLength;
  5427. __WEBPACK_IMPORTED_MODULE_4_assert___default()(type, ERR_BUFFER_PARAMS);
  5428. }
  5429. this.bytes = bytes;
  5430. this.bytesUsed = bytes;
  5431. this.data = data;
  5432. this.type = type;
  5433. this.usage = usage;
  5434. // Call after type is set
  5435. this.setDataLayout(Object.assign(opts));
  5436. // Create the buffer - binding it here for the first time locks the type
  5437. // In WebGL2, use GL_COPY_WRITE_BUFFER to avoid locking the type
  5438. var target = this.gl.webgl2 ? GL_COPY_WRITE_BUFFER : this.target;
  5439. this.gl.bindBuffer(target, this.handle);
  5440. this.gl.bufferData(target, data || bytes, usage);
  5441. this.gl.bindBuffer(target, null);
  5442. return this;
  5443. }
  5444. // DEPRECATED - Can we change to call `subData`?
  5445. }, {
  5446. key: 'setData',
  5447. value: function setData(options) {
  5448. return this.initialize(options);
  5449. }
  5450. // Updates a subset of a buffer object's data store.
  5451. }, {
  5452. key: 'subData',
  5453. value: function subData() {
  5454. var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  5455. data = _ref4.data,
  5456. _ref4$offset = _ref4.offset,
  5457. offset = _ref4$offset === undefined ? 0 : _ref4$offset,
  5458. _ref4$srcOffset = _ref4.srcOffset,
  5459. srcOffset = _ref4$srcOffset === undefined ? 0 : _ref4$srcOffset,
  5460. length = _ref4.length;
  5461. __WEBPACK_IMPORTED_MODULE_4_assert___default()(data, ERR_BUFFER_PARAMS);
  5462. // Create the buffer - binding it here for the first time locks the type
  5463. // In WebGL2, use GL_COPY_WRITE_BUFFER to avoid locking the type
  5464. var target = this.gl.webgl2 ? GL_COPY_WRITE_BUFFER : this.target;
  5465. this.gl.bindBuffer(target, this.handle);
  5466. // WebGL2: subData supports additional srcOffset and length parameters
  5467. if (srcOffset !== 0 || length !== undefined) {
  5468. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(this.gl);
  5469. this.gl.bufferSubData(this.target, offset, data, srcOffset, length || 0);
  5470. } else {
  5471. this.gl.bufferSubData(target, offset, data);
  5472. }
  5473. this.gl.bindBuffer(target, null);
  5474. return this;
  5475. }
  5476. // WEBGL2 ONLY: Copies part of the data of another buffer into this buffer
  5477. }, {
  5478. key: 'copyData',
  5479. value: function copyData(_ref5) {
  5480. var sourceBuffer = _ref5.sourceBuffer,
  5481. _ref5$readOffset = _ref5.readOffset,
  5482. readOffset = _ref5$readOffset === undefined ? 0 : _ref5$readOffset,
  5483. _ref5$writeOffset = _ref5.writeOffset,
  5484. writeOffset = _ref5$writeOffset === undefined ? 0 : _ref5$writeOffset,
  5485. size = _ref5.size;
  5486. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(this.gl);
  5487. // Use GL_COPY_READ_BUFFER+GL_COPY_WRITE_BUFFER avoid disturbing other targets and locking type
  5488. this.gl.bindBuffer(GL_COPY_READ_BUFFER, sourceBuffer.handle);
  5489. this.gl.bindBuffer(GL_COPY_WRITE_BUFFER, this.handle);
  5490. this.gl.copyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, readOffset, writeOffset, size);
  5491. this.gl.bindBuffer(GL_COPY_READ_BUFFER, null);
  5492. this.gl.bindBuffer(GL_COPY_WRITE_BUFFER, null);
  5493. return this;
  5494. }
  5495. // WEBGL2 ONLY: Reads data from buffer into an ArrayBufferView or SharedArrayBuffer.
  5496. }, {
  5497. key: 'getData',
  5498. value: function getData() {
  5499. var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  5500. _ref6$dstData = _ref6.dstData,
  5501. dstData = _ref6$dstData === undefined ? null : _ref6$dstData,
  5502. _ref6$srcByteOffset = _ref6.srcByteOffset,
  5503. srcByteOffset = _ref6$srcByteOffset === undefined ? 0 : _ref6$srcByteOffset,
  5504. _ref6$dstOffset = _ref6.dstOffset,
  5505. dstOffset = _ref6$dstOffset === undefined ? 0 : _ref6$dstOffset,
  5506. _ref6$length = _ref6.length,
  5507. length = _ref6$length === undefined ? 0 : _ref6$length;
  5508. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(this.gl);
  5509. var ArrayType = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils_typed_array_utils__["a" /* getTypedArrayFromGLType */])(this.type, { clamped: false });
  5510. var sourceAvailableElementCount = this._getAvailableElementCount(srcByteOffset);
  5511. var dstAvailableElementCount = void 0;
  5512. var dstElementCount = void 0;
  5513. var dstElementOffset = dstOffset;
  5514. if (dstData) {
  5515. dstElementCount = dstData.length;
  5516. dstAvailableElementCount = dstElementCount - dstElementOffset;
  5517. } else {
  5518. // Allocate ArrayBufferView with enough size to copy all eligible data.
  5519. dstAvailableElementCount = Math.min(sourceAvailableElementCount, length || sourceAvailableElementCount);
  5520. dstElementCount = dstElementOffset + dstAvailableElementCount;
  5521. }
  5522. var copyElementCount = Math.min(sourceAvailableElementCount, dstAvailableElementCount);
  5523. length = length || copyElementCount;
  5524. __WEBPACK_IMPORTED_MODULE_4_assert___default()(length <= copyElementCount, 'Invalid srcByteOffset, dstOffset and length combination');
  5525. dstData = dstData || new ArrayType(dstElementCount);
  5526. // Use GL_COPY_READ_BUFFER to avoid disturbing other targets and locking type
  5527. this.gl.bindBuffer(GL_COPY_READ_BUFFER, this.handle);
  5528. this.gl.getBufferSubData(GL_COPY_READ_BUFFER, srcByteOffset, dstData, dstOffset, length);
  5529. this.gl.bindBuffer(GL_COPY_READ_BUFFER, null);
  5530. return dstData;
  5531. }
  5532. /**
  5533. * Binds a buffer to a given binding point (target).
  5534. * GL_TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER take an index, and optionally a range.
  5535. *
  5536. * @param {Glenum} target - target for the bind operation.
  5537. *
  5538. * @param {GLuint} index= - the index of the target.
  5539. * - GL_TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER need an index to affect state
  5540. * @param {GLuint} offset=0 - the index of the target.
  5541. * - GL.UNIFORM_BUFFER: `offset` must be aligned to GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT.
  5542. * @param {GLuint} size= - the index of the target.
  5543. * - GL.UNIFORM_BUFFER: `size` must be a minimum of GL.UNIFORM_BLOCK_SIZE_DATA.
  5544. * @returns {Buffer} - Returns itself for chaining.
  5545. */
  5546. }, {
  5547. key: 'bind',
  5548. value: function bind() {
  5549. var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  5550. _ref7$target = _ref7.target,
  5551. target = _ref7$target === undefined ? this.target : _ref7$target,
  5552. _ref7$index = _ref7.index,
  5553. index = _ref7$index === undefined ? this.index : _ref7$index,
  5554. _ref7$offset = _ref7.offset,
  5555. offset = _ref7$offset === undefined ? 0 : _ref7$offset,
  5556. size = _ref7.size;
  5557. // NOTE: While GL_TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER could
  5558. // be used as direct binding points, they will not affect transform feedback or
  5559. // uniform buffer state. Instead indexed bindings need to be made.
  5560. var type = target === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].UNIFORM_BUFFER || target === GL_TRANSFORM_FEEDBACK_BUFFER ? size !== undefined ? 'ranged' : ' indexed' : 'non-indexed';
  5561. switch (type) {
  5562. case 'non-indexed':
  5563. this.gl.bindBuffer(target, this.handle);
  5564. break;
  5565. case 'indexed':
  5566. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(this.gl);
  5567. __WEBPACK_IMPORTED_MODULE_4_assert___default()(offset === 0, ERR_BUFFER_PARAMS); // Make sure offset wasn't supplied
  5568. this.gl.bindBufferBase(target, index, this.handle);
  5569. break;
  5570. case 'ranged':
  5571. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(this.gl);
  5572. this.gl.bindBufferRange(target, index, this.handle, offset, size);
  5573. break;
  5574. default:
  5575. throw new Error(ERR_BUFFER_PARAMS);
  5576. }
  5577. return this;
  5578. }
  5579. }, {
  5580. key: 'unbind',
  5581. value: function unbind() {
  5582. var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  5583. _ref8$target = _ref8.target,
  5584. target = _ref8$target === undefined ? this.target : _ref8$target,
  5585. _ref8$index = _ref8.index,
  5586. index = _ref8$index === undefined ? this.index : _ref8$index;
  5587. var isIndexedBuffer = target === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].UNIFORM_BUFFER || target === GL_TRANSFORM_FEEDBACK_BUFFER;
  5588. if (isIndexedBuffer) {
  5589. this.gl.bindBufferBase(target, index, null);
  5590. } else {
  5591. this.gl.bindBuffer(target, null);
  5592. }
  5593. return this;
  5594. }
  5595. // TODO - is this the right place?
  5596. // gl.TRANSFORM_FEEDBACK_BUFFER_BINDING: Returns a WebGLBuffer.
  5597. // gl.TRANSFORM_FEEDBACK_BUFFER_SIZE: Returns a GLsizeiptr.
  5598. // gl.TRANSFORM_FEEDBACK_BUFFER_START: Returns a GLintptr.
  5599. // gl.UNIFORM_BUFFER_BINDING: Returns a WebGLBuffer.
  5600. // gl.UNIFORM_BUFFER_SIZE: Returns a GLsizeiptr.
  5601. // gl.UNIFORM_BUFFER_START: Returns a GLintptr.
  5602. }, {
  5603. key: 'getIndexedParameter',
  5604. value: function getIndexedParameter(binding, index) {
  5605. // Create the buffer - if binding it here for the first time, this locks the type
  5606. // In WebGL2, use GL_COPY_READ_BUFFER to avoid locking the type
  5607. var target = this.gl.webgl2 ? GL_COPY_READ_BUFFER : this.target;
  5608. this.gl.bindBuffer(target, index);
  5609. return this.gl.getIndexedParameter(binding, index);
  5610. }
  5611. // RESOURCE METHODS
  5612. }, {
  5613. key: '_createHandle',
  5614. value: function _createHandle() {
  5615. return this.gl.createBuffer();
  5616. }
  5617. }, {
  5618. key: '_deleteHandle',
  5619. value: function _deleteHandle() {
  5620. this.gl.deleteBuffer(this.handle);
  5621. }
  5622. }, {
  5623. key: '_getParameter',
  5624. value: function _getParameter(pname) {
  5625. this.gl.bindBuffer(this.target, this.handle);
  5626. var value = this.gl.getBufferParameter(this.target, pname);
  5627. this.gl.bindBuffer(this.target, null);
  5628. return value;
  5629. }
  5630. }, {
  5631. key: '_getAvailableElementCount',
  5632. value: function _getAvailableElementCount(srcByteOffset) {
  5633. var ArrayType = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils_typed_array_utils__["a" /* getTypedArrayFromGLType */])(this.type, { clamped: false });
  5634. var sourceElementCount = this.bytes / ArrayType.BYTES_PER_ELEMENT;
  5635. var sourceElementOffset = srcByteOffset / ArrayType.BYTES_PER_ELEMENT;
  5636. return sourceElementCount - sourceElementOffset;
  5637. }
  5638. }]);
  5639. return Buffer;
  5640. }(__WEBPACK_IMPORTED_MODULE_3__resource__["a" /* default */]);
  5641. /* harmony default export */ __webpack_exports__["a"] = (Buffer);
  5642. //# sourceMappingURL=buffer.js.map
  5643. /***/ }),
  5644. /* 68 */
  5645. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5646. "use strict";
  5647. /* unused harmony export LUMA_SETTERS */
  5648. /* harmony export (immutable) */ __webpack_exports__["e"] = setParameters;
  5649. /* harmony export (immutable) */ __webpack_exports__["f"] = withParameters;
  5650. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__ = __webpack_require__(46);
  5651. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_utils_track_context_state__ = __webpack_require__(164);
  5652. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert__ = __webpack_require__(1);
  5653. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_assert__);
  5654. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils__ = __webpack_require__(8);
  5655. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__webgl_utils_set_parameters__ = __webpack_require__(266);
  5656. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_4__webgl_utils_set_parameters__["d"]; });
  5657. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_4__webgl_utils_set_parameters__["a"]; });
  5658. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_4__webgl_utils_set_parameters__["e"]; });
  5659. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_4__webgl_utils_set_parameters__["f"]; });
  5660. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_4__webgl_utils_set_parameters__["g"]; });
  5661. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  5662. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  5663. /* eslint-disable no-inline-comments, max-len */
  5664. // map of parameter setter function names, parameter constants, default values and types
  5665. // - Uses gl function names, except when setter function exist that are named differently
  5666. // - When the WebGL api offers <setter> and <setter>Separate (e.g. blendEquation and
  5667. // blendEquationSeparate, we use non-separate name, but accept both non-separate and
  5668. // separate arguments. Thus, a `getParameter` call will always return all the separate values
  5669. // in an array, in a form that can be accepted by the setter.
  5670. var LUMA_SETTERS = {
  5671. framebuffer: function framebuffer(gl, _framebuffer) {
  5672. var handle = _framebuffer && _framebuffer.handle ? _framebuffer.handle : _framebuffer;
  5673. return gl.bindFramebuffer(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER, handle);
  5674. },
  5675. blend: function blend(gl, value) {
  5676. return value ? gl.enable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].BLEND) : gl.disable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].BLEND);
  5677. },
  5678. blendColor: function blendColor(gl, value) {
  5679. return gl.blendColor.apply(gl, _toConsumableArray(value));
  5680. },
  5681. blendEquation: function blendEquation(gl, args) {
  5682. args = isArray(args) ? args : [args, args];
  5683. gl.blendEquationSeparate.apply(gl, _toConsumableArray(args));
  5684. },
  5685. blendFunc: function blendFunc(gl, args) {
  5686. args = isArray(args) && args.length === 2 ? [].concat(_toConsumableArray(args), _toConsumableArray(args)) : args;
  5687. gl.blendFuncSeparate.apply(gl, _toConsumableArray(args));
  5688. },
  5689. clearColor: function clearColor(gl, value) {
  5690. return gl.clearColor.apply(gl, _toConsumableArray(value));
  5691. },
  5692. clearDepth: function clearDepth(gl, value) {
  5693. return gl.clearDepth(value);
  5694. },
  5695. clearStencil: function clearStencil(gl, value) {
  5696. return gl.clearStencil(value);
  5697. },
  5698. colorMask: function colorMask(gl, value) {
  5699. return gl.colorMask.apply(gl, _toConsumableArray(value));
  5700. },
  5701. cull: function cull(gl, value) {
  5702. return value ? gl.enable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].CULL_FACE) : gl.disable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].CULL_FACE);
  5703. },
  5704. cullFace: function cullFace(gl, value) {
  5705. return gl.cullFace(value);
  5706. },
  5707. depthTest: function depthTest(gl, value) {
  5708. return value ? gl.enable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].DEPTH_TEST) : gl.disable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].DEPTH_TEST);
  5709. },
  5710. depthFunc: function depthFunc(gl, value) {
  5711. return gl.depthFunc(value);
  5712. },
  5713. depthMask: function depthMask(gl, value) {
  5714. return gl.depthMask(value);
  5715. },
  5716. depthRange: function depthRange(gl, value) {
  5717. return gl.depthRange.apply(gl, _toConsumableArray(value));
  5718. },
  5719. dither: function dither(gl, value) {
  5720. return value ? gl.enable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].DITHER) : gl.disable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].DITHER);
  5721. },
  5722. derivativeHint: function derivativeHint(gl, value) {
  5723. // gl1: 'OES_standard_derivatives'
  5724. gl.hint(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAGMENT_SHADER_DERIVATIVE_HINT, value);
  5725. },
  5726. frontFace: function frontFace(gl, value) {
  5727. return gl.frontFace(value);
  5728. },
  5729. mipmapHint: function mipmapHint(gl, value) {
  5730. return gl.hint(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].GENERATE_MIPMAP_HINT, value);
  5731. },
  5732. lineWidth: function lineWidth(gl, value) {
  5733. return gl.lineWidth(value);
  5734. },
  5735. polygonOffsetFill: function polygonOffsetFill(gl, value) {
  5736. return value ? gl.enable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].POLYGON_OFFSET_FILL) : gl.disable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].POLYGON_OFFSET_FILL);
  5737. },
  5738. polygonOffset: function polygonOffset(gl, value) {
  5739. return gl.polygonOffset.apply(gl, _toConsumableArray(value));
  5740. },
  5741. sampleCoverage: function sampleCoverage(gl, value) {
  5742. return gl.sampleCoverage.apply(gl, _toConsumableArray(value));
  5743. },
  5744. scissorTest: function scissorTest(gl, value) {
  5745. return value ? gl.enable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].SCISSOR_TEST) : gl.disable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].SCISSOR_TEST);
  5746. },
  5747. scissor: function scissor(gl, value) {
  5748. return gl.scissor.apply(gl, _toConsumableArray(value));
  5749. },
  5750. stencilTest: function stencilTest(gl, value) {
  5751. return value ? gl.enable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].STENCIL_TEST) : gl.disable(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].STENCIL_TEST);
  5752. },
  5753. stencilMask: function stencilMask(gl, value) {
  5754. value = isArray(value) ? value : [value, value];
  5755. var _value = value,
  5756. _value2 = _slicedToArray(_value, 2),
  5757. mask = _value2[0],
  5758. backMask = _value2[1];
  5759. gl.stencilMaskSeparate(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRONT, mask);
  5760. gl.stencilMaskSeparate(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].BACK, backMask);
  5761. },
  5762. stencilFunc: function stencilFunc(gl, args) {
  5763. args = isArray(args) && args.length === 3 ? [].concat(_toConsumableArray(args), _toConsumableArray(args)) : args;
  5764. var _args = args,
  5765. _args2 = _slicedToArray(_args, 6),
  5766. func = _args2[0],
  5767. ref = _args2[1],
  5768. mask = _args2[2],
  5769. backFunc = _args2[3],
  5770. backRef = _args2[4],
  5771. backMask = _args2[5];
  5772. gl.stencilFuncSeparate(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRONT, func, ref, mask);
  5773. gl.stencilFuncSeparate(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].BACK, backFunc, backRef, backMask);
  5774. },
  5775. stencilOp: function stencilOp(gl, args) {
  5776. args = isArray(args) && args.length === 3 ? [].concat(_toConsumableArray(args), _toConsumableArray(args)) : args;
  5777. var _args3 = args,
  5778. _args4 = _slicedToArray(_args3, 6),
  5779. sfail = _args4[0],
  5780. dpfail = _args4[1],
  5781. dppass = _args4[2],
  5782. backSfail = _args4[3],
  5783. backDpfail = _args4[4],
  5784. backDppass = _args4[5];
  5785. gl.stencilOpSeparate(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRONT, sfail, dpfail, dppass);
  5786. gl.stencilOpSeparate(__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].BACK, backSfail, backDpfail, backDppass);
  5787. },
  5788. viewport: function viewport(gl, value) {
  5789. return gl.viewport.apply(gl, _toConsumableArray(value));
  5790. }
  5791. };
  5792. // HELPERS
  5793. function isArray(array) {
  5794. return Array.isArray(array) || ArrayBuffer.isView(array);
  5795. }
  5796. // GETTERS AND SETTERS
  5797. // Get the parameter value(s) from the context
  5798. // from '../webgl-utils/set-parameters'
  5799. // Get the parameters from the context
  5800. // from '../webgl-utils/set-parameters'
  5801. // Resets gl state to default values.
  5802. // from '../webgl-utils/set-parameters'
  5803. // Resets gl state to default values.
  5804. // from '../webgl-utils/set-parameters'
  5805. // Get a map of modified parameters
  5806. // Note: "setParameters" is given extra treatment below
  5807. // Set the parameter value(s) by key to the context
  5808. // Sets value with key to context.
  5809. // Value may be "normalized" (in case a short form is supported). In that case
  5810. // the normalized value is retured.
  5811. function setParameters(gl, parameters) {
  5812. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__webgl_utils_set_parameters__["c" /* setParameters */])(gl, parameters);
  5813. for (var key in parameters) {
  5814. var setter = LUMA_SETTERS[key];
  5815. if (setter) {
  5816. setter(gl, parameters[key], key);
  5817. }
  5818. }
  5819. }
  5820. // VERY LIMITED / BASIC GL STATE MANAGEMENT
  5821. // Executes a function with gl states temporarily set, exception safe
  5822. // Currently support pixelStorage, scissor test and framebuffer binding
  5823. function withParameters(gl, parameters, func) {
  5824. // assertWebGLContext(gl);
  5825. if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__utils__["f" /* isObjectEmpty */])(parameters)) {
  5826. // Avoid setting state if no parameters provided. Just call and return
  5827. return func(gl);
  5828. }
  5829. var _parameters$nocatch = parameters.nocatch,
  5830. nocatch = _parameters$nocatch === undefined ? true : _parameters$nocatch;
  5831. // frameBuffer not supported use framebuffer
  5832. __WEBPACK_IMPORTED_MODULE_2_assert___default()(!parameters.frameBuffer);
  5833. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_utils_track_context_state__["b" /* pushContextState */])(gl);
  5834. setParameters(gl, parameters);
  5835. // Setup is done, call the function
  5836. var value = void 0;
  5837. if (nocatch) {
  5838. // Avoid try catch to minimize stack size impact for safe execution paths
  5839. value = func(gl);
  5840. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_utils_track_context_state__["c" /* popContextState */])(gl);
  5841. } else {
  5842. // Wrap in a try-catch to ensure that parameters are restored on exceptions
  5843. try {
  5844. value = func(gl);
  5845. } finally {
  5846. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_utils_track_context_state__["c" /* popContextState */])(gl);
  5847. }
  5848. }
  5849. return value;
  5850. }
  5851. //# sourceMappingURL=context-state.js.map
  5852. /***/ }),
  5853. /* 69 */
  5854. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5855. "use strict";
  5856. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(38);
  5857. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  5858. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__context_features__ = __webpack_require__(108);
  5859. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__clear__ = __webpack_require__(107);
  5860. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__resource__ = __webpack_require__(30);
  5861. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__texture_2d__ = __webpack_require__(167);
  5862. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__renderbuffer__ = __webpack_require__(110);
  5863. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__utils_typed_array_utils__ = __webpack_require__(163);
  5864. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__utils__ = __webpack_require__(8);
  5865. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_assert__ = __webpack_require__(1);
  5866. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_assert__);
  5867. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  5868. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  5869. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  5870. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  5871. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  5872. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  5873. // Local constants - will collapse during minification
  5874. var GL_FRAMEBUFFER = 0x8D40;
  5875. var GL_DRAW_FRAMEBUFFER = 0x8CA8;
  5876. var GL_READ_FRAMEBUFFER = 0x8CA9;
  5877. var GL_COLOR_ATTACHMENT0 = 0x8CE0;
  5878. var GL_DEPTH_ATTACHMENT = 0x8D00;
  5879. var GL_STENCIL_ATTACHMENT = 0x8D20;
  5880. // const GL_DEPTH_STENCIL_ATTACHMENT = 0x821A;
  5881. var GL_RENDERBUFFER = 0x8D41;
  5882. var GL_TEXTURE_3D = 0x806F;
  5883. var GL_TEXTURE_2D_ARRAY = 0x8C1A;
  5884. var GL_TEXTURE_2D = 0x0DE1;
  5885. var GL_TEXTURE_CUBE_MAP = 0x8513;
  5886. var GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
  5887. var GL_DEPTH_BUFFER_BIT = 0x00000100;
  5888. var GL_STENCIL_BUFFER_BIT = 0x00000400;
  5889. var GL_COLOR_BUFFER_BIT = 0x00004000;
  5890. var ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';
  5891. var Framebuffer = /*#__PURE__*/function (_Resource) {
  5892. _inherits(Framebuffer, _Resource);
  5893. _createClass(Framebuffer, [{
  5894. key: 'MAX_COLOR_ATTACHMENTS',
  5895. get: function get() {
  5896. return this.gl.getParameter(this.gl.MAX_COLOR_ATTACHMENTS);
  5897. }
  5898. }, {
  5899. key: 'MAX_DRAW_BUFFERS',
  5900. get: function get() {
  5901. return this.gl.getParameter(this.gl.MAX_DRAW_BUFFERS);
  5902. }
  5903. }], [{
  5904. key: 'isSupported',
  5905. value: function isSupported(gl) {
  5906. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  5907. colorBufferFloat = _ref.colorBufferFloat,
  5908. colorBufferHalfFloat = _ref.colorBufferHalfFloat;
  5909. var supported = true;
  5910. supported = colorBufferFloat && gl.getExtension(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl) ? 'EXT_color_buffer_float' : 'WEBGL_color_buffer_float');
  5911. supported = colorBufferHalfFloat && gl.getExtension(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl) ? 'EXT_color_buffer_float' : 'EXT_color_buffer_half_float');
  5912. return supported;
  5913. }
  5914. // Create a Framebuffer wrapper for the default framebuffer (target === null)
  5915. }, {
  5916. key: 'getDefaultFramebuffer',
  5917. value: function getDefaultFramebuffer(gl) {
  5918. gl.luma = gl.luma || {};
  5919. if (!gl.luma.defaultFramebuffer) {
  5920. gl.luma.defaultFramebuffer = new Framebuffer(gl, { handle: null, attachments: {} });
  5921. }
  5922. // TODO - can we query for and get a handle to the GL.FRONT renderbuffer?
  5923. return gl.luma.defaultFramebuffer;
  5924. }
  5925. }]);
  5926. function Framebuffer(gl) {
  5927. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  5928. _classCallCheck(this, Framebuffer);
  5929. // Public members
  5930. var _this = _possibleConstructorReturn(this, (Framebuffer.__proto__ || Object.getPrototypeOf(Framebuffer)).call(this, gl, opts));
  5931. _this.width = null;
  5932. _this.height = null;
  5933. _this.attachments = {};
  5934. _this.readBuffer = GL_COLOR_ATTACHMENT0;
  5935. _this.drawBuffers = [GL_COLOR_ATTACHMENT0];
  5936. _this.initialize(opts);
  5937. Object.seal(_this);
  5938. return _this;
  5939. }
  5940. _createClass(Framebuffer, [{
  5941. key: 'initialize',
  5942. value: function initialize(_ref2) {
  5943. var _ref2$width = _ref2.width,
  5944. width = _ref2$width === undefined ? 1 : _ref2$width,
  5945. _ref2$height = _ref2.height,
  5946. height = _ref2$height === undefined ? 1 : _ref2$height,
  5947. _ref2$attachments = _ref2.attachments,
  5948. attachments = _ref2$attachments === undefined ? null : _ref2$attachments,
  5949. _ref2$color = _ref2.color,
  5950. color = _ref2$color === undefined ? true : _ref2$color,
  5951. _ref2$depth = _ref2.depth,
  5952. depth = _ref2$depth === undefined ? true : _ref2$depth,
  5953. _ref2$stencil = _ref2.stencil,
  5954. stencil = _ref2$stencil === undefined ? false : _ref2$stencil,
  5955. _ref2$check = _ref2.check,
  5956. check = _ref2$check === undefined ? true : _ref2$check,
  5957. readBuffer = _ref2.readBuffer,
  5958. drawBuffers = _ref2.drawBuffers;
  5959. __WEBPACK_IMPORTED_MODULE_9_assert___default()(width >= 0 && height >= 0, 'Width and height need to be integers');
  5960. // Store actual width and height for diffing
  5961. this.width = width;
  5962. this.height = height;
  5963. // Resize any provided attachments - note that resize only resizes if needed
  5964. // Note: A framebuffer has no separate size, it is defined by its attachments (which must agree)
  5965. if (attachments) {
  5966. for (var attachment in attachments) {
  5967. var target = attachments[attachment];
  5968. var object = Array.isArray(target) ? target[0] : target;
  5969. object.resize({ width: width, height: height });
  5970. }
  5971. } else {
  5972. // Create any requested default attachments
  5973. attachments = this._createDefaultAttachments({ color: color, depth: depth, stencil: stencil, width: width, height: height });
  5974. }
  5975. this.update({ clearAttachments: true, attachments: attachments, readBuffer: readBuffer, drawBuffers: drawBuffers });
  5976. // Checks that framebuffer was properly set up, if not, throws an explanatory error
  5977. if (attachments && check) {
  5978. this.checkStatus();
  5979. }
  5980. }
  5981. }, {
  5982. key: 'update',
  5983. value: function update(_ref3) {
  5984. var _ref3$attachments = _ref3.attachments,
  5985. attachments = _ref3$attachments === undefined ? {} : _ref3$attachments,
  5986. readBuffer = _ref3.readBuffer,
  5987. drawBuffers = _ref3.drawBuffers,
  5988. _ref3$clearAttachment = _ref3.clearAttachments,
  5989. clearAttachments = _ref3$clearAttachment === undefined ? false : _ref3$clearAttachment;
  5990. this.attach(attachments, { clearAttachments: clearAttachments });
  5991. var gl = this.gl;
  5992. // Multiple render target support, set read buffer and draw buffers
  5993. var prevHandle = gl.bindFramebuffer(GL_FRAMEBUFFER, this.handle);
  5994. if (readBuffer) {
  5995. this._setReadBuffer(readBuffer);
  5996. }
  5997. if (drawBuffers) {
  5998. this._setDrawBuffers(drawBuffers);
  5999. }
  6000. gl.bindFramebuffer(GL_FRAMEBUFFER, prevHandle);
  6001. return this;
  6002. }
  6003. // Attachment resize is expected to be a noop if size is same
  6004. }, {
  6005. key: 'resize',
  6006. value: function resize() {
  6007. var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  6008. width = _ref4.width,
  6009. height = _ref4.height;
  6010. // for default framebuffer, just update the stored size
  6011. if (this.handle === null) {
  6012. __WEBPACK_IMPORTED_MODULE_9_assert___default()(width === undefined && height === undefined);
  6013. this.width = this.gl.drawingBufferWidth;
  6014. this.height = this.gl.drawingBufferHeight;
  6015. return this;
  6016. }
  6017. if (width === undefined) {
  6018. width = this.gl.drawingBufferWidth;
  6019. }
  6020. if (height === undefined) {
  6021. height = this.gl.drawingBufferHeight;
  6022. }
  6023. if (width !== this.width && height !== this.height) {
  6024. __WEBPACK_IMPORTED_MODULE_8__utils__["b" /* log */].log(2, 'Resizing framebuffer ' + this.id + ' to ' + width + 'x' + height);
  6025. }
  6026. for (var attachmentPoint in this.attachments) {
  6027. this.attachments[attachmentPoint].resize({ width: width, height: height });
  6028. }
  6029. this.width = width;
  6030. this.height = height;
  6031. return this;
  6032. }
  6033. // Attach from a map of attachments
  6034. }, {
  6035. key: 'attach',
  6036. value: function attach(attachments) {
  6037. var _this2 = this;
  6038. var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  6039. _ref5$clearAttachment = _ref5.clearAttachments,
  6040. clearAttachments = _ref5$clearAttachment === undefined ? false : _ref5$clearAttachment;
  6041. var newAttachments = {};
  6042. // Any current attachments need to be removed, add null values to map
  6043. if (clearAttachments) {
  6044. Object.keys(this.attachments).forEach(function (key) {
  6045. newAttachments[key] = null;
  6046. });
  6047. }
  6048. // Overlay the new attachments
  6049. Object.assign(newAttachments, attachments);
  6050. var prevHandle = this.gl.bindFramebuffer(GL_FRAMEBUFFER, this.handle);
  6051. // Walk the attachments
  6052. for (var attachment in newAttachments) {
  6053. // Ensure key is not undefined
  6054. __WEBPACK_IMPORTED_MODULE_9_assert___default()(attachment !== 'undefined', 'Misspelled framebuffer binding point?');
  6055. var descriptor = newAttachments[attachment];
  6056. var object = descriptor;
  6057. if (!object) {
  6058. this._unattach({ attachment: attachment });
  6059. } else if (object instanceof __WEBPACK_IMPORTED_MODULE_6__renderbuffer__["a" /* default */]) {
  6060. this._attachRenderbuffer({ attachment: attachment, renderbuffer: object });
  6061. } else if (Array.isArray(descriptor)) {
  6062. var _descriptor = _slicedToArray(descriptor, 3),
  6063. texture = _descriptor[0],
  6064. _descriptor$ = _descriptor[1],
  6065. layer = _descriptor$ === undefined ? 0 : _descriptor$,
  6066. _descriptor$2 = _descriptor[2],
  6067. level = _descriptor$2 === undefined ? 0 : _descriptor$2;
  6068. object = texture;
  6069. this._attachTexture({ attachment: attachment, texture: texture, layer: layer, level: level });
  6070. } else {
  6071. this._attachTexture({ attachment: attachment, texture: object, layer: 0, level: 0 });
  6072. }
  6073. // Resize objects
  6074. if (object) {
  6075. object.resize({ width: this.width, height: this.height });
  6076. }
  6077. }
  6078. this.gl.bindFramebuffer(GL_FRAMEBUFFER, prevHandle);
  6079. // Assign to attachments and remove any nulls to get a clean attachment map
  6080. Object.assign(this.attachments, attachments);
  6081. Object.keys(this.attachments).filter(function (key) {
  6082. return !_this2.attachments[key];
  6083. }).forEach(function (key) {
  6084. delete _this2.attachments[key];
  6085. });
  6086. }
  6087. }, {
  6088. key: 'checkStatus',
  6089. value: function checkStatus() {
  6090. var gl = this.gl;
  6091. var prevHandle = gl.bindFramebuffer(GL_FRAMEBUFFER, this.handle);
  6092. var status = gl.checkFramebufferStatus(GL_FRAMEBUFFER);
  6093. gl.bindFramebuffer(GL_FRAMEBUFFER, prevHandle);
  6094. if (status !== gl.FRAMEBUFFER_COMPLETE) {
  6095. throw new Error(_getFrameBufferStatus(status));
  6096. }
  6097. return this;
  6098. }
  6099. }, {
  6100. key: 'clear',
  6101. value: function clear() {
  6102. var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  6103. color = _ref6.color,
  6104. depth = _ref6.depth,
  6105. stencil = _ref6.stencil,
  6106. _ref6$drawBuffers = _ref6.drawBuffers,
  6107. drawBuffers = _ref6$drawBuffers === undefined ? [] : _ref6$drawBuffers;
  6108. // Bind framebuffer and delegate to global clear functions
  6109. var prevHandle = this.gl.bindFramebuffer(GL_FRAMEBUFFER, this.handle);
  6110. if (color || depth || stencil) {
  6111. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__clear__["a" /* clear */])(this.gl, { color: color, depth: depth, stencil: stencil });
  6112. }
  6113. drawBuffers.forEach(function (value, drawBuffer) {
  6114. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__clear__["b" /* clearBuffer */])({ drawBuffer: drawBuffer, value: value });
  6115. });
  6116. this.gl.bindFramebuffer(GL_FRAMEBUFFER, prevHandle);
  6117. return this;
  6118. }
  6119. // NOTE: Slow requires roundtrip to GPU
  6120. // App can provide pixelArray or have it auto allocated by this method
  6121. // @returns {Uint8Array|Uint16Array|FloatArray} - pixel array,
  6122. // newly allocated by this method unless provided by app.
  6123. }, {
  6124. key: 'readPixels',
  6125. value: function readPixels(_ref7) {
  6126. var _ref7$x = _ref7.x,
  6127. x = _ref7$x === undefined ? 0 : _ref7$x,
  6128. _ref7$y = _ref7.y,
  6129. y = _ref7$y === undefined ? 0 : _ref7$y,
  6130. _ref7$width = _ref7.width,
  6131. width = _ref7$width === undefined ? this.width : _ref7$width,
  6132. _ref7$height = _ref7.height,
  6133. height = _ref7$height === undefined ? this.height : _ref7$height,
  6134. _ref7$format = _ref7.format,
  6135. format = _ref7$format === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].RGBA : _ref7$format,
  6136. type = _ref7.type,
  6137. _ref7$pixelArray = _ref7.pixelArray,
  6138. pixelArray = _ref7$pixelArray === undefined ? null : _ref7$pixelArray,
  6139. _ref7$attachment = _ref7.attachment,
  6140. attachment = _ref7$attachment === undefined ? GL_COLOR_ATTACHMENT0 : _ref7$attachment;
  6141. var gl = this.gl;
  6142. // TODO - Set and unset gl.readBuffer
  6143. if (attachment === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].COLOR_ATTACHMENT0 && this.handle === null) {
  6144. attachment = __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRONT;
  6145. }
  6146. // Deduce type and allocated pixelArray if needed
  6147. if (!pixelArray) {
  6148. // Allocate pixel array if not already available, using supplied type
  6149. type = type || gl.UNSIGNED_BYTE;
  6150. var ArrayType = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__utils_typed_array_utils__["a" /* getTypedArrayFromGLType */])(type, { clamped: false });
  6151. var components = glFormatToComponents(format);
  6152. // TODO - check for composite type (components = 1).
  6153. pixelArray = pixelArray || new ArrayType(width * height * components);
  6154. }
  6155. // Pixel array available, if necessary, deduce type from it.
  6156. type = type || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__utils_typed_array_utils__["b" /* getGLTypeFromTypedArray */])(pixelArray);
  6157. var prevHandle = this.gl.bindFramebuffer(GL_FRAMEBUFFER, this.handle);
  6158. this.gl.readPixels(x, y, width, height, format, type, pixelArray);
  6159. this.gl.bindFramebuffer(GL_FRAMEBUFFER, prevHandle);
  6160. return pixelArray;
  6161. }
  6162. // Reads pixels as a dataUrl
  6163. }, {
  6164. key: 'copyToDataUrl',
  6165. value: function copyToDataUrl() {
  6166. var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  6167. _ref8$attachment = _ref8.attachment,
  6168. attachment = _ref8$attachment === undefined ? GL_COLOR_ATTACHMENT0 : _ref8$attachment,
  6169. _ref8$maxHeight = _ref8.maxHeight,
  6170. maxHeight = _ref8$maxHeight === undefined ? Number.MAX_SAFE_INTEGER : _ref8$maxHeight;
  6171. var data = this.readPixels({ attachment: attachment });
  6172. // Scale down
  6173. var width = this.width,
  6174. height = this.height;
  6175. while (height > maxHeight) {
  6176. var _scalePixels = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__utils__["g" /* scalePixels */])({ data: data, width: width, height: height });
  6177. data = _scalePixels.data;
  6178. width = _scalePixels.width;
  6179. height = _scalePixels.height;
  6180. }
  6181. // Flip to top down coordinate system
  6182. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__utils__["h" /* flipRows */])({ data: data, width: width, height: height });
  6183. /* global document */
  6184. var canvas = document.createElement('canvas');
  6185. canvas.width = width;
  6186. canvas.height = height;
  6187. var context = canvas.getContext('2d');
  6188. // Copy the pixels to a 2D canvas
  6189. var imageData = context.createImageData(width, height);
  6190. imageData.data.set(data);
  6191. context.putImageData(imageData, 0, 0);
  6192. return canvas.toDataURL();
  6193. }
  6194. // Reads pixels into an HTML Image
  6195. }, {
  6196. key: 'copyToImage',
  6197. value: function copyToImage() {
  6198. var _ref9 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  6199. _ref9$image = _ref9.image,
  6200. image = _ref9$image === undefined ? null : _ref9$image,
  6201. _ref9$attachment = _ref9.attachment,
  6202. attachment = _ref9$attachment === undefined ? GL_COLOR_ATTACHMENT0 : _ref9$attachment,
  6203. _ref9$maxHeight = _ref9.maxHeight,
  6204. maxHeight = _ref9$maxHeight === undefined ? Number.MAX_SAFE_INTEGER : _ref9$maxHeight;
  6205. /* global Image */
  6206. var dataUrl = this.readDataUrl({ attachment: attachment });
  6207. image = image || new Image();
  6208. image.src = dataUrl;
  6209. return image;
  6210. }
  6211. // copyToFramebuffer({width, height}) {
  6212. // const scaleX = width / this.width;
  6213. // const scaleY = height / this.height;
  6214. // const scale = Math.min(scaleX, scaleY);
  6215. // width = width * scale;
  6216. // height = height * scale;
  6217. // const scaledFramebuffer = new Framebuffer(this.gl, {width, height});
  6218. // this.blit();
  6219. // }
  6220. // Copy a rectangle from a framebuffer attachment into a texture (at an offset)
  6221. }, {
  6222. key: 'copyToTexture',
  6223. value: function copyToTexture(_ref10) {
  6224. var texture = _ref10.texture,
  6225. target = _ref10.target,
  6226. _ref10$xoffset = _ref10.xoffset,
  6227. xoffset = _ref10$xoffset === undefined ? 0 : _ref10$xoffset,
  6228. _ref10$yoffset = _ref10.yoffset,
  6229. yoffset = _ref10$yoffset === undefined ? 0 : _ref10$yoffset,
  6230. _ref10$zoffset = _ref10.zoffset,
  6231. zoffset = _ref10$zoffset === undefined ? 0 : _ref10$zoffset,
  6232. _ref10$mipmapLevel = _ref10.mipmapLevel,
  6233. mipmapLevel = _ref10$mipmapLevel === undefined ? 0 : _ref10$mipmapLevel,
  6234. _ref10$attachment = _ref10.attachment,
  6235. attachment = _ref10$attachment === undefined ? GL_COLOR_ATTACHMENT0 : _ref10$attachment,
  6236. _ref10$x = _ref10.x,
  6237. x = _ref10$x === undefined ? 0 : _ref10$x,
  6238. _ref10$y = _ref10.y,
  6239. y = _ref10$y === undefined ? 0 : _ref10$y,
  6240. width = _ref10.width,
  6241. height = _ref10.height;
  6242. var gl = this.gl;
  6243. var prevHandle = gl.bindFramebuffer(GL_FRAMEBUFFER, this.handle);
  6244. var prevBuffer = gl.readBuffer(attachment);
  6245. width = Number.isFinite(width) ? width : texture.width;
  6246. height = Number.isFinite(height) ? height : texture.height;
  6247. // target
  6248. switch (texture.target) {
  6249. case GL_TEXTURE_2D:
  6250. case GL_TEXTURE_CUBE_MAP:
  6251. gl.copyTexSubImage2D(target || texture.target, mipmapLevel, xoffset, yoffset, x, y, width, height);
  6252. break;
  6253. case GL_TEXTURE_2D_ARRAY:
  6254. case GL_TEXTURE_3D:
  6255. gl.copyTexSubImage3D(target || texture.target, mipmapLevel, xoffset, yoffset, zoffset, x, y, width, height);
  6256. break;
  6257. default:
  6258. }
  6259. gl.readBuffer(prevBuffer);
  6260. gl.bindFramebuffer(GL_FRAMEBUFFER, prevHandle);
  6261. return texture;
  6262. }
  6263. // WEBGL2 INTERFACE
  6264. // Copies a rectangle of pixels between framebuffers
  6265. }, {
  6266. key: 'blit',
  6267. value: function blit(_ref11) {
  6268. var srcFramebuffer = _ref11.srcFramebuffer,
  6269. _ref11$attachment = _ref11.attachment,
  6270. attachment = _ref11$attachment === undefined ? GL_COLOR_ATTACHMENT0 : _ref11$attachment,
  6271. _ref11$srcX = _ref11.srcX0,
  6272. srcX0 = _ref11$srcX === undefined ? 0 : _ref11$srcX,
  6273. _ref11$srcY = _ref11.srcY0,
  6274. srcY0 = _ref11$srcY === undefined ? 0 : _ref11$srcY,
  6275. srcX1 = _ref11.srcX1,
  6276. srcY1 = _ref11.srcY1,
  6277. _ref11$dstX = _ref11.dstX0,
  6278. dstX0 = _ref11$dstX === undefined ? 0 : _ref11$dstX,
  6279. _ref11$dstY = _ref11.dstY0,
  6280. dstY0 = _ref11$dstY === undefined ? 0 : _ref11$dstY,
  6281. dstX1 = _ref11.dstX1,
  6282. dstY1 = _ref11.dstY1,
  6283. _ref11$color = _ref11.color,
  6284. color = _ref11$color === undefined ? true : _ref11$color,
  6285. _ref11$depth = _ref11.depth,
  6286. depth = _ref11$depth === undefined ? false : _ref11$depth,
  6287. _ref11$stencil = _ref11.stencil,
  6288. stencil = _ref11$stencil === undefined ? false : _ref11$stencil,
  6289. _ref11$mask = _ref11.mask,
  6290. mask = _ref11$mask === undefined ? 0 : _ref11$mask,
  6291. _ref11$filter = _ref11.filter,
  6292. filter = _ref11$filter === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].NEAREST : _ref11$filter;
  6293. var gl = this.gl;
  6294. __WEBPACK_IMPORTED_MODULE_9_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl), __WEBPACK_IMPORTED_MODULE_1__context__["i" /* ERR_WEBGL2 */]);
  6295. if (!srcFramebuffer.handle && attachment === GL_COLOR_ATTACHMENT0) {
  6296. attachment = __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRONT;
  6297. }
  6298. if (color) {
  6299. mask |= GL_COLOR_BUFFER_BIT;
  6300. }
  6301. if (depth) {
  6302. mask |= GL_DEPTH_BUFFER_BIT;
  6303. }
  6304. if (stencil) {
  6305. mask |= GL_STENCIL_BUFFER_BIT;
  6306. }
  6307. __WEBPACK_IMPORTED_MODULE_9_assert___default()(mask);
  6308. srcX1 = srcX1 === undefined ? srcFramebuffer.width : srcX1;
  6309. srcY1 = srcY1 === undefined ? srcFramebuffer.height : srcY1;
  6310. dstX1 = dstX1 === undefined ? this.width : dstX1;
  6311. dstY1 = dstY1 === undefined ? this.height : dstY1;
  6312. var prevDrawHandle = gl.bindFramebuffer(GL_DRAW_FRAMEBUFFER, this.handle);
  6313. var prevReadHandle = gl.bindFramebuffer(GL_READ_FRAMEBUFFER, srcFramebuffer.handle);
  6314. var prevReadBuffer = gl.readBuffer(attachment);
  6315. gl.blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
  6316. gl.readBuffer(prevReadBuffer);
  6317. gl.bindFramebuffer(GL_READ_FRAMEBUFFER, prevReadHandle);
  6318. gl.bindFramebuffer(GL_DRAW_FRAMEBUFFER, prevDrawHandle);
  6319. return this;
  6320. }
  6321. // signals to the GL that it need not preserve all pixels of a specified region
  6322. // of the framebuffer
  6323. }, {
  6324. key: 'invalidate',
  6325. value: function invalidate(_ref12) {
  6326. var _ref12$attachments = _ref12.attachments,
  6327. attachments = _ref12$attachments === undefined ? [] : _ref12$attachments,
  6328. _ref12$x = _ref12.x,
  6329. x = _ref12$x === undefined ? 0 : _ref12$x,
  6330. _ref12$y = _ref12.y,
  6331. y = _ref12$y === undefined ? 0 : _ref12$y,
  6332. width = _ref12.width,
  6333. height = _ref12.height;
  6334. var gl = this.gl;
  6335. __WEBPACK_IMPORTED_MODULE_9_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl, __WEBPACK_IMPORTED_MODULE_1__context__["i" /* ERR_WEBGL2 */]));
  6336. var prevHandle = gl.bindFramebuffer(GL_READ_FRAMEBUFFER, this.handle);
  6337. var invalidateAll = x === 0 && y === 0 && width === undefined && height === undefined;
  6338. if (invalidateAll) {
  6339. gl.invalidateFramebuffer(GL_READ_FRAMEBUFFER, attachments);
  6340. } else {
  6341. gl.invalidateFramebuffer(GL_READ_FRAMEBUFFER, attachments, x, y, width, height);
  6342. }
  6343. gl.bindFramebuffer(GL_READ_FRAMEBUFFER, prevHandle);
  6344. return this;
  6345. }
  6346. // Return the value for `pname` of the specified attachment.
  6347. // The type returned is the type of the requested pname
  6348. }, {
  6349. key: 'getAttachmentParameter',
  6350. value: function getAttachmentParameter() {
  6351. var _ref13 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  6352. _ref13$attachment = _ref13.attachment,
  6353. attachment = _ref13$attachment === undefined ? GL_COLOR_ATTACHMENT0 : _ref13$attachment,
  6354. pname = _ref13.pname;
  6355. var value = this._getAttachmentParameterFallback(pname);
  6356. if (value === null) {
  6357. this.gl.bindTexture(GL_FRAMEBUFFER, this.handle);
  6358. value = this.gl.getFramebufferAttachmentParameter(GL_FRAMEBUFFER, attachment, pname);
  6359. this.gl.bindTexture(GL_FRAMEBUFFER, null);
  6360. }
  6361. return value;
  6362. }
  6363. }, {
  6364. key: 'getAttachmentParameters',
  6365. value: function getAttachmentParameters() {
  6366. var attachment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : GL_COLOR_ATTACHMENT0;
  6367. var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.constructor.ATTACHMENT_PARAMETERS || {};
  6368. var values = {};
  6369. for (var pname in parameters) {
  6370. values[pname] = this.getAttachmentParameter(pname);
  6371. }
  6372. return this;
  6373. }
  6374. // DEBUG
  6375. // Note: Will only work when called in an event handler
  6376. }, {
  6377. key: 'show',
  6378. value: function show() {
  6379. /* global window */
  6380. if (typeof window !== 'undefined') {
  6381. window.open(this.copyToDataUrl(), 'luma-debug-texture');
  6382. }
  6383. return this;
  6384. }
  6385. }, {
  6386. key: 'log',
  6387. value: function log() {
  6388. var _ref14 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  6389. _ref14$priority = _ref14.priority,
  6390. priority = _ref14$priority === undefined ? 0 : _ref14$priority,
  6391. _ref14$message = _ref14.message,
  6392. message = _ref14$message === undefined ? '' : _ref14$message;
  6393. if (priority > __WEBPACK_IMPORTED_MODULE_8__utils__["b" /* log */].priority || typeof window === 'undefined') {
  6394. return this;
  6395. }
  6396. message = message || 'Framebuffer ' + this.id;
  6397. var image = this.copyToDataUrl({ maxHeight: 100 });
  6398. __WEBPACK_IMPORTED_MODULE_8__utils__["b" /* log */].image({ priority: priority, message: message, image: image }, message);
  6399. return this;
  6400. }
  6401. // WEBGL INTERFACE
  6402. }, {
  6403. key: 'bind',
  6404. value: function bind() {
  6405. var _ref15 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  6406. _ref15$target = _ref15.target,
  6407. target = _ref15$target === undefined ? GL_FRAMEBUFFER : _ref15$target;
  6408. this.gl.bindFramebuffer(target, this.handle);
  6409. return this;
  6410. }
  6411. }, {
  6412. key: 'unbind',
  6413. value: function unbind() {
  6414. var _ref16 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  6415. _ref16$target = _ref16.target,
  6416. target = _ref16$target === undefined ? GL_FRAMEBUFFER : _ref16$target;
  6417. this.gl.bindFramebuffer(target, null);
  6418. return this;
  6419. }
  6420. // PRIVATE METHODS
  6421. }, {
  6422. key: '_createDefaultAttachments',
  6423. value: function _createDefaultAttachments(_ref17) {
  6424. var color = _ref17.color,
  6425. depth = _ref17.depth,
  6426. stencil = _ref17.stencil,
  6427. width = _ref17.width,
  6428. height = _ref17.height;
  6429. var defaultAttachments = null;
  6430. // Add a color buffer if requested and not supplied
  6431. if (color) {
  6432. var _parameters;
  6433. defaultAttachments = defaultAttachments || {};
  6434. defaultAttachments[GL_COLOR_ATTACHMENT0] = new __WEBPACK_IMPORTED_MODULE_5__texture_2d__["a" /* default */](this.gl, {
  6435. pixels: null, // reserves texture memory, but texels are undefined
  6436. format: __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].RGBA,
  6437. type: __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].UNSIGNED_BYTE,
  6438. width: width,
  6439. height: height,
  6440. // Note: Mipmapping can be disabled by texture resource when we resize the texture
  6441. // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant
  6442. // behavior we always disable mipmaps.
  6443. mipmaps: false,
  6444. // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.
  6445. // Set WRAP modes that support NPOT textures too.
  6446. parameters: (_parameters = {}, _defineProperty(_parameters, __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TEXTURE_MIN_FILTER, __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].NEAREST), _defineProperty(_parameters, __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TEXTURE_MAG_FILTER, __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].NEAREST), _defineProperty(_parameters, __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TEXTURE_WRAP_S, __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].CLAMP_TO_EDGE), _defineProperty(_parameters, __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TEXTURE_WRAP_T, __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].CLAMP_TO_EDGE), _parameters)
  6447. });
  6448. }
  6449. // Add a depth buffer if requested and not supplied
  6450. if (depth) {
  6451. defaultAttachments = defaultAttachments || {};
  6452. defaultAttachments[GL_DEPTH_ATTACHMENT] = new __WEBPACK_IMPORTED_MODULE_6__renderbuffer__["a" /* default */](this.gl, { format: __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].DEPTH_COMPONENT16, width: width, height: height });
  6453. }
  6454. // TODO - handle stencil and combined depth and stencil
  6455. return defaultAttachments;
  6456. }
  6457. }, {
  6458. key: '_unattach',
  6459. value: function _unattach(_ref18) {
  6460. var attachment = _ref18.attachment;
  6461. this.gl.bindRenderbuffer(GL_RENDERBUFFER, this.handle);
  6462. this.gl.framebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, null);
  6463. delete this.attachments[attachment];
  6464. }
  6465. }, {
  6466. key: '_attachRenderbuffer',
  6467. value: function _attachRenderbuffer(_ref19) {
  6468. var _ref19$attachment = _ref19.attachment,
  6469. attachment = _ref19$attachment === undefined ? GL_COLOR_ATTACHMENT0 : _ref19$attachment,
  6470. renderbuffer = _ref19.renderbuffer;
  6471. var gl = this.gl;
  6472. // TODO - is the bind needed?
  6473. // gl.bindRenderbuffer(GL_RENDERBUFFER, renderbuffer.handle);
  6474. gl.framebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, renderbuffer.handle);
  6475. // TODO - is the unbind needed?
  6476. // gl.bindRenderbuffer(GL_RENDERBUFFER, null);
  6477. this.attachments[attachment] = renderbuffer;
  6478. }
  6479. // layer = 0 - index into Texture2DArray and Texture3D or face for `TextureCubeMap`
  6480. // level = 0 - mipmapLevel (must be 0 in WebGL1)
  6481. }, {
  6482. key: '_attachTexture',
  6483. value: function _attachTexture(_ref20) {
  6484. var _ref20$attachment = _ref20.attachment,
  6485. attachment = _ref20$attachment === undefined ? GL_COLOR_ATTACHMENT0 : _ref20$attachment,
  6486. texture = _ref20.texture,
  6487. layer = _ref20.layer,
  6488. level = _ref20.level;
  6489. var gl = this.gl;
  6490. gl.bindTexture(texture.target, texture.handle);
  6491. switch (texture.target) {
  6492. case GL_TEXTURE_2D_ARRAY:
  6493. case GL_TEXTURE_3D:
  6494. gl.framebufferTextureLayer(GL_FRAMEBUFFER, attachment, texture.target, level, layer);
  6495. break;
  6496. case GL_TEXTURE_CUBE_MAP:
  6497. // layer must be a cubemap face (or if index, converted to cube map face)
  6498. var face = mapIndexToCubeMapFace(layer);
  6499. gl.framebufferTexture2D(GL_FRAMEBUFFER, attachment, face, texture.handle, level);
  6500. break;
  6501. case GL_TEXTURE_2D:
  6502. gl.framebufferTexture2D(GL_FRAMEBUFFER, attachment, GL_TEXTURE_2D, texture.handle, level);
  6503. break;
  6504. default:
  6505. __WEBPACK_IMPORTED_MODULE_9_assert___default()(false, 'Illegal texture type');
  6506. }
  6507. gl.bindTexture(texture.target, null);
  6508. this.attachments[attachment] = texture;
  6509. }
  6510. // Expects framebuffer to be bound
  6511. }, {
  6512. key: '_setReadBuffer',
  6513. value: function _setReadBuffer(gl, readBuffer) {
  6514. if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl)) {
  6515. gl.readBuffer(readBuffer);
  6516. } else {
  6517. // Setting to color attachment 0 is a noop, so allow it in WebGL1
  6518. __WEBPACK_IMPORTED_MODULE_9_assert___default()(readBuffer === GL_COLOR_ATTACHMENT0 || readBuffer === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].BACK, ERR_MULTIPLE_RENDERTARGETS);
  6519. }
  6520. this.readBuffer = readBuffer;
  6521. }
  6522. // Expects framebuffer to be bound
  6523. }, {
  6524. key: '_setDrawBuffers',
  6525. value: function _setDrawBuffers(gl, drawBuffers) {
  6526. if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl)) {
  6527. gl.drawBuffers(drawBuffers);
  6528. } else {
  6529. var ext = gl.getExtension('WEBGL_draw_buffers');
  6530. if (ext) {
  6531. ext.drawBuffersWEBGL(drawBuffers);
  6532. } else {
  6533. // Setting a single draw buffer to color attachment 0 is a noop, allow in WebGL1
  6534. __WEBPACK_IMPORTED_MODULE_9_assert___default()(drawBuffers.length === 1 && (drawBuffers[0] === GL_COLOR_ATTACHMENT0 || drawBuffers[0] === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].BACK), ERR_MULTIPLE_RENDERTARGETS);
  6535. }
  6536. }
  6537. this.drawBuffers = drawBuffers;
  6538. }
  6539. // Attempt to provide workable defaults for WebGL2 symbols under WebGL1
  6540. // null means OK to query
  6541. /* eslint-disable complexity */
  6542. }, {
  6543. key: '_getAttachmentParameterFallback',
  6544. value: function _getAttachmentParameterFallback(pname) {
  6545. var caps = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context_features__["d" /* getFeatures */])(this.gl);
  6546. switch (pname) {
  6547. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
  6548. // GLint
  6549. return !caps.webgl2 ? 0 : null;
  6550. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAMEBUFFER_ATTACHMENT_RED_SIZE: // GLint
  6551. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: // GLint
  6552. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: // GLint
  6553. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: // GLint
  6554. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: // GLint
  6555. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
  6556. // GLint
  6557. return !caps.webgl2 ? 8 : null;
  6558. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
  6559. // GLenum
  6560. return !caps.webgl2 ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].UNSIGNED_INT : null;
  6561. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
  6562. return !caps.webgl2 && !caps.EXT_sRGB ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].LINEAR : null;
  6563. default:
  6564. return null;
  6565. }
  6566. }
  6567. /* eslint-enable complexity */
  6568. // RESOURCE METHODS
  6569. }, {
  6570. key: '_createHandle',
  6571. value: function _createHandle() {
  6572. return this.gl.createFramebuffer();
  6573. }
  6574. }, {
  6575. key: '_deleteHandle',
  6576. value: function _deleteHandle() {
  6577. this.gl.deleteFramebuffer(this.handle);
  6578. }
  6579. }, {
  6580. key: 'color',
  6581. get: function get() {
  6582. return this.attachments[GL_COLOR_ATTACHMENT0] || null;
  6583. }
  6584. }, {
  6585. key: 'texture',
  6586. get: function get() {
  6587. return this.attachments[GL_COLOR_ATTACHMENT0] || null;
  6588. }
  6589. }, {
  6590. key: 'depth',
  6591. get: function get() {
  6592. return this.attachments[GL_DEPTH_ATTACHMENT] || null;
  6593. }
  6594. }, {
  6595. key: 'stencil',
  6596. get: function get() {
  6597. return this.attachments[GL_STENCIL_ATTACHMENT] || null;
  6598. }
  6599. }]);
  6600. return Framebuffer;
  6601. }(__WEBPACK_IMPORTED_MODULE_4__resource__["a" /* default */]);
  6602. // PUBLIC METHODS
  6603. // Map an index to a cube map face constant
  6604. /* harmony default export */ __webpack_exports__["a"] = (Framebuffer);
  6605. function mapIndexToCubeMapFace(layer) {
  6606. // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)
  6607. // if smaller assume layer is index, otherwise assume it is already a cube map face constant
  6608. return layer < GL_TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL_TEXTURE_CUBE_MAP_POSITIVE_X : layer;
  6609. }
  6610. // Returns number of components in a specific WebGL format
  6611. function glFormatToComponents(format) {
  6612. switch (format) {
  6613. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].ALPHA:
  6614. return 1;
  6615. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].RGB:
  6616. return 3;
  6617. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].RGBA:
  6618. return 4;
  6619. default:
  6620. throw new Error('Unknown format');
  6621. }
  6622. }
  6623. // Get a string describing the framebuffer error if installed
  6624. function _getFrameBufferStatus(status) {
  6625. // Use error mapping if installed
  6626. var STATUS = Framebuffer.STATUS || {};
  6627. return STATUS[status] || 'Framebuffer error ' + status;
  6628. }
  6629. //# sourceMappingURL=framebuffer.js.map
  6630. /***/ }),
  6631. /* 70 */
  6632. /***/ (function(module, exports, __webpack_require__) {
  6633. "use strict";
  6634. Object.defineProperty(exports, "__esModule", {
  6635. value: true
  6636. });
  6637. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  6638. //
  6639. // Permission is hereby granted, free of charge, to any person obtaining a copy
  6640. // of this software and associated documentation files (the "Software"), to deal
  6641. // in the Software without restriction, including without limitation the rights
  6642. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  6643. // copies of the Software, and to permit persons to whom the Software is
  6644. // furnished to do so, subject to the following conditions:
  6645. //
  6646. // The above copyright notice and this permission notice shall be included in
  6647. // all copies or substantial portions of the Software.
  6648. //
  6649. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  6650. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  6651. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  6652. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  6653. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  6654. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  6655. // THE SOFTWARE.
  6656. // Note: The numeric values here are matched by shader code in the
  6657. // "project" and "project64" shader modules. Both places need to be
  6658. // updated.
  6659. // TODO: Maybe "POSITIONS" would be a better name?
  6660. var COORDINATE_SYSTEM = exports.COORDINATE_SYSTEM = {
  6661. // Positions are interpreted as [lng, lat, elevation]
  6662. // lng lat are degrees, elevation is meters. distances as meters.
  6663. LNGLAT: 1.0,
  6664. // Positions are interpreted as meter offsets, distances as meters
  6665. // Planned to deprecate in later versions
  6666. METER_OFFSETS: 2.0,
  6667. METERS: 2.0,
  6668. // Positions are interpreted as lng lat offsets: [deltaLng, deltaLat, elevation]
  6669. // deltaLng, deltaLat are delta degrees, elevation is meters.
  6670. // distances as meters.
  6671. LNGLAT_OFFSETS: 3.0,
  6672. // Positions and distances are not transformed: [x, y, z] in unit coordinates
  6673. IDENTITY: 0.0
  6674. };
  6675. var LIFECYCLE = exports.LIFECYCLE = {
  6676. NO_STATE: 'Awaiting state',
  6677. MATCHED: 'Matched. State transferred from previous layer',
  6678. INITIALIZED: 'Intialized',
  6679. AWAITING_GC: 'Discarded. Awaiting garbage collection',
  6680. AWAITING_FINALIZATION: 'No longer matched. Awaiting garbage collection',
  6681. FINALIZED: 'Finalized! Awaiting garbage collection'
  6682. };
  6683. /***/ }),
  6684. /* 71 */
  6685. /***/ (function(module, exports, __webpack_require__) {
  6686. // getting tag from 19.1.3.6 Object.prototype.toString()
  6687. var cof = __webpack_require__(27);
  6688. var TAG = __webpack_require__(6)('toStringTag');
  6689. // ES3 wrong here
  6690. var ARG = cof(function () { return arguments; }()) == 'Arguments';
  6691. // fallback for IE11 Script Access Denied error
  6692. var tryGet = function (it, key) {
  6693. try {
  6694. return it[key];
  6695. } catch (e) { /* empty */ }
  6696. };
  6697. module.exports = function (it) {
  6698. var O, T, B;
  6699. return it === undefined ? 'Undefined' : it === null ? 'Null'
  6700. // @@toStringTag case
  6701. : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
  6702. // builtinTag case
  6703. : ARG ? cof(O)
  6704. // ES3 arguments fallback
  6705. : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
  6706. };
  6707. /***/ }),
  6708. /* 72 */
  6709. /***/ (function(module, exports, __webpack_require__) {
  6710. // fallback for non-array-like ES3 and non-enumerable old V8 strings
  6711. var cof = __webpack_require__(27);
  6712. // eslint-disable-next-line no-prototype-builtins
  6713. module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
  6714. return cof(it) == 'String' ? it.split('') : Object(it);
  6715. };
  6716. /***/ }),
  6717. /* 73 */
  6718. /***/ (function(module, exports) {
  6719. exports.f = {}.propertyIsEnumerable;
  6720. /***/ }),
  6721. /* 74 */
  6722. /***/ (function(module, exports, __webpack_require__) {
  6723. "use strict";
  6724. /**
  6725. * Copyright (c) 2013-present, Facebook, Inc.
  6726. *
  6727. * This source code is licensed under the MIT license found in the
  6728. * LICENSE file in the root directory of this source tree.
  6729. *
  6730. *
  6731. */
  6732. function makeEmptyFunction(arg) {
  6733. return function () {
  6734. return arg;
  6735. };
  6736. }
  6737. /**
  6738. * This function accepts and discards inputs; it has no side effects. This is
  6739. * primarily useful idiomatically for overridable function endpoints which
  6740. * always need to be callable, since JS lacks a null-call idiom ala Cocoa.
  6741. */
  6742. var emptyFunction = function emptyFunction() {};
  6743. emptyFunction.thatReturns = makeEmptyFunction;
  6744. emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
  6745. emptyFunction.thatReturnsTrue = makeEmptyFunction(true);
  6746. emptyFunction.thatReturnsNull = makeEmptyFunction(null);
  6747. emptyFunction.thatReturnsThis = function () {
  6748. return this;
  6749. };
  6750. emptyFunction.thatReturnsArgument = function (arg) {
  6751. return arg;
  6752. };
  6753. module.exports = emptyFunction;
  6754. /***/ }),
  6755. /* 75 */
  6756. /***/ (function(module, exports) {
  6757. module.exports = multiply;
  6758. /**
  6759. * Multiplies two mat4's
  6760. *
  6761. * @param {mat4} out the receiving matrix
  6762. * @param {mat4} a the first operand
  6763. * @param {mat4} b the second operand
  6764. * @returns {mat4} out
  6765. */
  6766. function multiply(out, a, b) {
  6767. var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],
  6768. a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],
  6769. a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],
  6770. a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
  6771. // Cache only the current line of the second matrix
  6772. var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];
  6773. out[0] = b0*a00 + b1*a10 + b2*a20 + b3*a30;
  6774. out[1] = b0*a01 + b1*a11 + b2*a21 + b3*a31;
  6775. out[2] = b0*a02 + b1*a12 + b2*a22 + b3*a32;
  6776. out[3] = b0*a03 + b1*a13 + b2*a23 + b3*a33;
  6777. b0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7];
  6778. out[4] = b0*a00 + b1*a10 + b2*a20 + b3*a30;
  6779. out[5] = b0*a01 + b1*a11 + b2*a21 + b3*a31;
  6780. out[6] = b0*a02 + b1*a12 + b2*a22 + b3*a32;
  6781. out[7] = b0*a03 + b1*a13 + b2*a23 + b3*a33;
  6782. b0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11];
  6783. out[8] = b0*a00 + b1*a10 + b2*a20 + b3*a30;
  6784. out[9] = b0*a01 + b1*a11 + b2*a21 + b3*a31;
  6785. out[10] = b0*a02 + b1*a12 + b2*a22 + b3*a32;
  6786. out[11] = b0*a03 + b1*a13 + b2*a23 + b3*a33;
  6787. b0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15];
  6788. out[12] = b0*a00 + b1*a10 + b2*a20 + b3*a30;
  6789. out[13] = b0*a01 + b1*a11 + b2*a21 + b3*a31;
  6790. out[14] = b0*a02 + b1*a12 + b2*a22 + b3*a32;
  6791. out[15] = b0*a03 + b1*a13 + b2*a23 + b3*a33;
  6792. return out;
  6793. };
  6794. /***/ }),
  6795. /* 76 */
  6796. /***/ (function(module, exports) {
  6797. module.exports = perspective;
  6798. /**
  6799. * Generates a perspective projection matrix with the given bounds
  6800. *
  6801. * @param {mat4} out mat4 frustum matrix will be written into
  6802. * @param {number} fovy Vertical field of view in radians
  6803. * @param {number} aspect Aspect ratio. typically viewport width/height
  6804. * @param {number} near Near bound of the frustum
  6805. * @param {number} far Far bound of the frustum
  6806. * @returns {mat4} out
  6807. */
  6808. function perspective(out, fovy, aspect, near, far) {
  6809. var f = 1.0 / Math.tan(fovy / 2),
  6810. nf = 1 / (near - far);
  6811. out[0] = f / aspect;
  6812. out[1] = 0;
  6813. out[2] = 0;
  6814. out[3] = 0;
  6815. out[4] = 0;
  6816. out[5] = f;
  6817. out[6] = 0;
  6818. out[7] = 0;
  6819. out[8] = 0;
  6820. out[9] = 0;
  6821. out[10] = (far + near) * nf;
  6822. out[11] = -1;
  6823. out[12] = 0;
  6824. out[13] = 0;
  6825. out[14] = (2 * far * near) * nf;
  6826. out[15] = 0;
  6827. return out;
  6828. };
  6829. /***/ }),
  6830. /* 77 */
  6831. /***/ (function(module, exports) {
  6832. module.exports = scale;
  6833. /**
  6834. * Scales the mat4 by the dimensions in the given vec3
  6835. *
  6836. * @param {mat4} out the receiving matrix
  6837. * @param {mat4} a the matrix to scale
  6838. * @param {vec3} v the vec3 to scale the matrix by
  6839. * @returns {mat4} out
  6840. **/
  6841. function scale(out, a, v) {
  6842. var x = v[0], y = v[1], z = v[2];
  6843. out[0] = a[0] * x;
  6844. out[1] = a[1] * x;
  6845. out[2] = a[2] * x;
  6846. out[3] = a[3] * x;
  6847. out[4] = a[4] * y;
  6848. out[5] = a[5] * y;
  6849. out[6] = a[6] * y;
  6850. out[7] = a[7] * y;
  6851. out[8] = a[8] * z;
  6852. out[9] = a[9] * z;
  6853. out[10] = a[10] * z;
  6854. out[11] = a[11] * z;
  6855. out[12] = a[12];
  6856. out[13] = a[13];
  6857. out[14] = a[14];
  6858. out[15] = a[15];
  6859. return out;
  6860. };
  6861. /***/ }),
  6862. /* 78 */
  6863. /***/ (function(module, exports) {
  6864. module.exports = translate;
  6865. /**
  6866. * Translate a mat4 by the given vector
  6867. *
  6868. * @param {mat4} out the receiving matrix
  6869. * @param {mat4} a the matrix to translate
  6870. * @param {vec3} v vector to translate by
  6871. * @returns {mat4} out
  6872. */
  6873. function translate(out, a, v) {
  6874. var x = v[0], y = v[1], z = v[2],
  6875. a00, a01, a02, a03,
  6876. a10, a11, a12, a13,
  6877. a20, a21, a22, a23;
  6878. if (a === out) {
  6879. out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];
  6880. out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];
  6881. out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];
  6882. out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];
  6883. } else {
  6884. a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];
  6885. a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];
  6886. a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];
  6887. out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03;
  6888. out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13;
  6889. out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23;
  6890. out[12] = a00 * x + a10 * y + a20 * z + a[12];
  6891. out[13] = a01 * x + a11 * y + a21 * z + a[13];
  6892. out[14] = a02 * x + a12 * y + a22 * z + a[14];
  6893. out[15] = a03 * x + a13 * y + a23 * z + a[15];
  6894. }
  6895. return out;
  6896. };
  6897. /***/ }),
  6898. /* 79 */
  6899. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6900. "use strict";
  6901. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  6902. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__web_mercator_viewport__ = __webpack_require__(81);
  6903. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return __WEBPACK_IMPORTED_MODULE_0__web_mercator_viewport__["a"]; });
  6904. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "WebMercatorViewport", function() { return __WEBPACK_IMPORTED_MODULE_0__web_mercator_viewport__["a"]; });
  6905. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__fit_bounds__ = __webpack_require__(285);
  6906. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "fitBounds", function() { return __WEBPACK_IMPORTED_MODULE_1__fit_bounds__["a"]; });
  6907. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__normalize_viewport_props__ = __webpack_require__(686);
  6908. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "normalizeViewportProps", function() { return __WEBPACK_IMPORTED_MODULE_2__normalize_viewport_props__["a"]; });
  6909. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__fly_to_viewport__ = __webpack_require__(685);
  6910. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "flyToViewport", function() { return __WEBPACK_IMPORTED_MODULE_3__fly_to_viewport__["a"]; });
  6911. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__ = __webpack_require__(80);
  6912. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "lngLatToWorld", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["a"]; });
  6913. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "worldToLngLat", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["b"]; });
  6914. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "worldToPixels", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["c"]; });
  6915. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "pixelsToWorld", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["d"]; });
  6916. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getMeterZoom", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["e"]; });
  6917. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getDistanceScales", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["f"]; });
  6918. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getWorldPosition", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["g"]; });
  6919. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getViewMatrix", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["h"]; });
  6920. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getProjectionMatrix", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["i"]; });
  6921. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "PerspectiveMercatorViewport", function() { return __WEBPACK_IMPORTED_MODULE_0__web_mercator_viewport__["a"]; });
  6922. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getUncenteredViewMatrix", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["h"]; });
  6923. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "projectFlat", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["a"]; });
  6924. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "unprojectFlat", function() { return __WEBPACK_IMPORTED_MODULE_4__web_mercator_utils__["b"]; });
  6925. // Classic web-mercator-project
  6926. // Deprecated
  6927. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0IiwiV2ViTWVyY2F0b3JWaWV3cG9ydCIsImZpdEJvdW5kcyIsIm5vcm1hbGl6ZVZpZXdwb3J0UHJvcHMiLCJmbHlUb1ZpZXdwb3J0IiwibG5nTGF0VG9Xb3JsZCIsIndvcmxkVG9MbmdMYXQiLCJ3b3JsZFRvUGl4ZWxzIiwicGl4ZWxzVG9Xb3JsZCIsImdldE1ldGVyWm9vbSIsImdldERpc3RhbmNlU2NhbGVzIiwiZ2V0V29ybGRQb3NpdGlvbiIsImdldFZpZXdNYXRyaXgiLCJnZXRQcm9qZWN0aW9uTWF0cml4IiwiUGVyc3BlY3RpdmVNZXJjYXRvclZpZXdwb3J0IiwiZ2V0VW5jZW50ZXJlZFZpZXdNYXRyaXgiLCJwcm9qZWN0RmxhdCIsInVucHJvamVjdEZsYXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsU0FBUUEsT0FBUixRQUFpQyx5QkFBakM7QUFDQSxTQUFRQSxXQUFXQyxtQkFBbkIsUUFBNkMseUJBQTdDOztBQUVBLFNBQVFELFdBQVdFLFNBQW5CLFFBQW1DLGNBQW5DO0FBQ0EsU0FBUUYsV0FBV0csc0JBQW5CLFFBQWdELDRCQUFoRDtBQUNBLFNBQVFILFdBQVdJLGFBQW5CLFFBQXVDLG1CQUF2Qzs7QUFFQSxTQUNFQyxhQURGLEVBRUVDLGFBRkYsRUFHRUMsYUFIRixFQUlFQyxhQUpGLEVBS0VDLFlBTEYsRUFNRUMsaUJBTkYsRUFPRUMsZ0JBUEYsRUFRRUMsYUFSRixFQVNFQyxtQkFURixRQVVPLHNCQVZQOztBQVlBO0FBQ0EsU0FBUWIsV0FBV2MsMkJBQW5CLFFBQXFELHlCQUFyRDtBQUNBLFNBQ0VGLGlCQUFpQkcsdUJBRG5CLEVBRUVWLGlCQUFpQlcsV0FGbkIsRUFHRVYsaUJBQWlCVyxhQUhuQixRQUlPLHNCQUpQIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ2xhc3NpYyB3ZWItbWVyY2F0b3ItcHJvamVjdFxuZXhwb3J0IHtkZWZhdWx0IGFzIGRlZmF1bHR9IGZyb20gJy4vd2ViLW1lcmNhdG9yLXZpZXdwb3J0JztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBXZWJNZXJjYXRvclZpZXdwb3J0fSBmcm9tICcuL3dlYi1tZXJjYXRvci12aWV3cG9ydCc7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBmaXRCb3VuZHN9IGZyb20gJy4vZml0LWJvdW5kcyc7XG5leHBvcnQge2RlZmF1bHQgYXMgbm9ybWFsaXplVmlld3BvcnRQcm9wc30gZnJvbSAnLi9ub3JtYWxpemUtdmlld3BvcnQtcHJvcHMnO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZseVRvVmlld3BvcnR9IGZyb20gJy4vZmx5LXRvLXZpZXdwb3J0JztcblxuZXhwb3J0IHtcbiAgbG5nTGF0VG9Xb3JsZCxcbiAgd29ybGRUb0xuZ0xhdCxcbiAgd29ybGRUb1BpeGVscyxcbiAgcGl4ZWxzVG9Xb3JsZCxcbiAgZ2V0TWV0ZXJab29tLFxuICBnZXREaXN0YW5jZVNjYWxlcyxcbiAgZ2V0V29ybGRQb3NpdGlvbixcbiAgZ2V0Vmlld01hdHJpeCxcbiAgZ2V0UHJvamVjdGlvbk1hdHJpeFxufSBmcm9tICcuL3dlYi1tZXJjYXRvci11dGlscyc7XG5cbi8vIERlcHJlY2F0ZWRcbmV4cG9ydCB7ZGVmYXVsdCBhcyBQZXJzcGVjdGl2ZU1lcmNhdG9yVmlld3BvcnR9IGZyb20gJy4vd2ViLW1lcmNhdG9yLXZpZXdwb3J0JztcbmV4cG9ydCB7XG4gIGdldFZpZXdNYXRyaXggYXMgZ2V0VW5jZW50ZXJlZFZpZXdNYXRyaXgsXG4gIGxuZ0xhdFRvV29ybGQgYXMgcHJvamVjdEZsYXQsXG4gIHdvcmxkVG9MbmdMYXQgYXMgdW5wcm9qZWN0RmxhdFxufSBmcm9tICcuL3dlYi1tZXJjYXRvci11dGlscyc7XG4iXX0=
  6928. /***/ }),
  6929. /* 80 */
  6930. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6931. "use strict";
  6932. /* harmony export (immutable) */ __webpack_exports__["j"] = zoomToScale;
  6933. /* harmony export (immutable) */ __webpack_exports__["k"] = scaleToZoom;
  6934. /* harmony export (immutable) */ __webpack_exports__["a"] = lngLatToWorld;
  6935. /* harmony export (immutable) */ __webpack_exports__["b"] = worldToLngLat;
  6936. /* harmony export (immutable) */ __webpack_exports__["e"] = getMeterZoom;
  6937. /* harmony export (immutable) */ __webpack_exports__["f"] = getDistanceScales;
  6938. /* harmony export (immutable) */ __webpack_exports__["g"] = getWorldPosition;
  6939. /* harmony export (immutable) */ __webpack_exports__["h"] = getViewMatrix;
  6940. /* harmony export (immutable) */ __webpack_exports__["i"] = getProjectionMatrix;
  6941. /* harmony export (immutable) */ __webpack_exports__["c"] = worldToPixels;
  6942. /* harmony export (immutable) */ __webpack_exports__["d"] = pixelsToWorld;
  6943. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_math_gl__ = __webpack_require__(16);
  6944. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math_utils__ = __webpack_require__(118);
  6945. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_mat4_perspective__ = __webpack_require__(76);
  6946. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_mat4_perspective___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_gl_mat4_perspective__);
  6947. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_mat4_scale__ = __webpack_require__(77);
  6948. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_mat4_scale___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_gl_mat4_scale__);
  6949. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_mat4_translate__ = __webpack_require__(78);
  6950. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_mat4_translate___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_gl_mat4_translate__);
  6951. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_mat4_rotateX__ = __webpack_require__(157);
  6952. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_mat4_rotateX___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_gl_mat4_rotateX__);
  6953. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_mat4_rotateZ__ = __webpack_require__(158);
  6954. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_mat4_rotateZ___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_gl_mat4_rotateZ__);
  6955. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_vec2_lerp__ = __webpack_require__(238);
  6956. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_vec2_lerp___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_gl_vec2_lerp__);
  6957. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_assert__ = __webpack_require__(1);
  6958. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_assert__);
  6959. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  6960. // TODO - THE UTILITIES IN THIS FILE SHOULD BE IMPORTED FROM WEB-MERCATOR-VIEWPORT MODULE
  6961. // CONSTANTS
  6962. var PI = Math.PI;
  6963. var PI_4 = PI / 4;
  6964. var DEGREES_TO_RADIANS = PI / 180;
  6965. var RADIANS_TO_DEGREES = 180 / PI;
  6966. var TILE_SIZE = 512;
  6967. // Average circumference (40075 km equatorial, 40007 km meridional)
  6968. var EARTH_CIRCUMFERENCE = 40.03e6;
  6969. /** Util functions **/
  6970. function zoomToScale(zoom) {
  6971. return Math.pow(2, zoom);
  6972. }
  6973. function scaleToZoom(scale) {
  6974. return Math.log2(scale);
  6975. }
  6976. /**
  6977. * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.
  6978. * Performs the nonlinear part of the web mercator projection.
  6979. * Remaining projection is done with 4x4 matrices which also handles
  6980. * perspective.
  6981. *
  6982. * @param {Array} lngLat - [lng, lat] coordinates
  6983. * Specifies a point on the sphere to project onto the map.
  6984. * @return {Array} [x,y] coordinates.
  6985. */
  6986. function lngLatToWorld(_ref, scale,isGeographicCoordinateSystem) {
  6987. var _ref2 = _slicedToArray(_ref, 2),
  6988. lng = _ref2[0],
  6989. lat = _ref2[1];
  6990. scale *= TILE_SIZE;
  6991. var lambda2 = lng * DEGREES_TO_RADIANS;
  6992. var phi2 = lat * DEGREES_TO_RADIANS;
  6993. var x = scale * (lambda2 + PI) / (2 * PI);
  6994. var y ;
  6995. if(isGeographicCoordinateSystem===true){
  6996. y = scale * (PI - phi2) / (2 * PI);
  6997. }else{
  6998. y = scale * (PI - Math.log(Math.tan(PI_4 + phi2 * 0.5))) / (2 * PI);
  6999. }
  7000. // y = scale * (PI - phi2) / (2 * PI);
  7001. //iclient
  7002. return [x, y];
  7003. }
  7004. /**
  7005. * Unproject world point [x,y] on map onto {lat, lon} on sphere
  7006. *
  7007. * @param {object|Vector} xy - object with {x,y} members
  7008. * representing point on projected map plane
  7009. * @return {GeoCoordinates} - object with {lat,lon} of point on sphere.
  7010. * Has toArray method if you need a GeoJSON Array.
  7011. * Per cartographic tradition, lat and lon are specified as degrees.
  7012. */
  7013. function worldToLngLat(_ref3, scale,isGeographicCoordinateSystem) {
  7014. var _ref4 = _slicedToArray(_ref3, 2),
  7015. x = _ref4[0],
  7016. y = _ref4[1];
  7017. scale *= TILE_SIZE;
  7018. var lambda2 = x / scale * (2 * PI) - PI;
  7019. var phi2;
  7020. if(isGeographicCoordinateSystem===true){
  7021. phi2=PI- (y*2*PI/scale);
  7022. }else{
  7023. phi2 = 2 * (Math.atan(Math.exp(PI - y / scale * (2 * PI))) - PI_4);//90-y*360/scale;
  7024. }
  7025. //var phi2 =(PI/2)- y / scale*(2 * PI);
  7026. //var phi2 =2 * (Math.atan(Math.exp(PI - y / scale * (2 * PI))) - PI_4);
  7027. return [lambda2 * RADIANS_TO_DEGREES, phi2* RADIANS_TO_DEGREES ];
  7028. }
  7029. // Returns the zoom level that gives a 1 meter pixel at a certain latitude
  7030. // S=C*cos(y)/2^(z+8)
  7031. function getMeterZoom(_ref5) {
  7032. var latitude = _ref5.latitude;
  7033. __WEBPACK_IMPORTED_MODULE_8_assert___default()(Number.isFinite(latitude));
  7034. var latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);
  7035. return scaleToZoom(EARTH_CIRCUMFERENCE * latCosine) - 8;
  7036. }
  7037. /**
  7038. * Calculate distance scales in meters around current lat/lon, both for
  7039. * degrees and pixels.
  7040. * In mercator projection mode, the distance scales vary significantly
  7041. * with latitude.
  7042. */
  7043. function getDistanceScales(_ref6) {
  7044. var latitude = _ref6.latitude,
  7045. longitude = _ref6.longitude,
  7046. zoom = _ref6.zoom,
  7047. scale = _ref6.scale,
  7048. _ref6$highPrecision = _ref6.highPrecision,
  7049. isGeographicCoordinateSystem = _ref6.isGeographicCoordinateSystem,
  7050. highPrecision = _ref6$highPrecision === undefined ? false : _ref6$highPrecision;
  7051. // Calculate scale from zoom if not provided
  7052. scale = scale !== undefined ? scale : zoomToScale(zoom);
  7053. __WEBPACK_IMPORTED_MODULE_8_assert___default()(Number.isFinite(latitude) && Number.isFinite(longitude) && Number.isFinite(scale));
  7054. var result = {};
  7055. var worldSize = TILE_SIZE * scale;
  7056. var latCosine =Math.cos(latitude * DEGREES_TO_RADIANS);
  7057. /**
  7058. * Number of pixels occupied by one degree longitude around current lat/lon:
  7059. pixelsPerDegreeX = d(lngLatToWorld([lng, lat])[0])/d(lng)
  7060. = scale * TILE_SIZE * DEGREES_TO_RADIANS / (2 * PI)
  7061. pixelsPerDegreeY = d(lngLatToWorld([lng, lat])[1])/d(lat)
  7062. = -scale * TILE_SIZE * DEGREES_TO_RADIANS / cos(lat * DEGREES_TO_RADIANS) / (2 * PI)
  7063. */
  7064. var pixelsPerDegreeX = worldSize / 360;
  7065. var pixelsPerDegreeY = pixelsPerDegreeX / latCosine;
  7066. /**
  7067. * Number of pixels occupied by one meter around current lat/lon:
  7068. */
  7069. var altPixelsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;
  7070. result.pixelsPerMeter = [altPixelsPerMeter, altPixelsPerMeter, altPixelsPerMeter];
  7071. result.metersPerPixel = [1 / altPixelsPerMeter, 1 / altPixelsPerMeter, 1 / altPixelsPerMeter];
  7072. result.pixelsPerDegree = [pixelsPerDegreeX, pixelsPerDegreeY, altPixelsPerMeter];
  7073. result.degreesPerPixel = [1 / pixelsPerDegreeX, 1 / pixelsPerDegreeY, 1 / altPixelsPerMeter];
  7074. /**
  7075. * Taylor series 2nd order for 1/latCosine
  7076. f'(a) * (x - a)
  7077. = d(1/cos(lat * DEGREES_TO_RADIANS))/d(lat) * dLat
  7078. = DEGREES_TO_RADIANS * tan(lat * DEGREES_TO_RADIANS) / cos(lat * DEGREES_TO_RADIANS) * dLat
  7079. */
  7080. if (highPrecision) {
  7081. var latCosine2 = DEGREES_TO_RADIANS * Math.tan(latitude * DEGREES_TO_RADIANS) / latCosine;
  7082. var pixelsPerDegreeY2 = pixelsPerDegreeX * latCosine2 / 2;
  7083. var altPixelsPerDegree2 = worldSize / EARTH_CIRCUMFERENCE * latCosine2;
  7084. var altPixelsPerMeter2 = altPixelsPerDegree2 / pixelsPerDegreeY * altPixelsPerMeter;
  7085. result.pixelsPerDegree2 = [0, pixelsPerDegreeY2, altPixelsPerDegree2];
  7086. result.pixelsPerMeter2 = [altPixelsPerMeter2, 0, altPixelsPerMeter2];
  7087. }
  7088. //iclient
  7089. result.isGeographicCoordinateSystem=isGeographicCoordinateSystem;
  7090. // Main results, used for converting meters to latlng deltas and scaling offsets
  7091. return result;
  7092. }
  7093. /**
  7094. * Calculates a mercator world position ("pixels" in given zoom level)
  7095. * from a lng/lat and meterOffset
  7096. */
  7097. function getWorldPosition(_ref7) {
  7098. var longitude = _ref7.longitude,
  7099. latitude = _ref7.latitude,
  7100. zoom = _ref7.zoom,
  7101. scale = _ref7.scale,
  7102. meterOffset = _ref7.meterOffset,
  7103. _ref7$distanceScales = _ref7.distanceScales,
  7104. distanceScales = _ref7$distanceScales === undefined ? null : _ref7$distanceScales;
  7105. // Calculate scale from zoom if not provided
  7106. scale = scale !== undefined ? scale : zoomToScale(zoom);
  7107. // Make a centered version of the matrix for projection modes without an offset
  7108. var center2d = lngLatToWorld([longitude, latitude], scale,distanceScales?distanceScales.isGeographicCoordinateSystem:false);
  7109. var center = new __WEBPACK_IMPORTED_MODULE_0_math_gl__["Vector3"](center2d[0], center2d[1], 0);
  7110. if (meterOffset) {
  7111. // Calculate distance scales if lng/lat/zoom are provided
  7112. distanceScales = distanceScales || getDistanceScales({ latitude: latitude, longitude: longitude, scale: scale });
  7113. var pixelPosition = new __WEBPACK_IMPORTED_MODULE_0_math_gl__["Vector3"](meterOffset)
  7114. // Convert to pixels in current zoom
  7115. .scale(distanceScales.pixelsPerMeter)
  7116. // We want positive Y to represent an offset towards north,
  7117. // but web mercator world coordinates is top-left
  7118. .scale([1, -1, 1]);
  7119. center.add(pixelPosition);
  7120. }
  7121. return center;
  7122. }
  7123. // ATTRIBUTION:
  7124. // view and projection matrix creation is intentionally kept compatible with
  7125. // mapbox-gl's implementation to ensure that seamless interoperation
  7126. // with mapbox and react-map-gl. See: https://github.com/mapbox/mapbox-gl-js
  7127. // Variable fov (in radians)
  7128. function getFov(_ref8) {
  7129. var height = _ref8.height,
  7130. altitude = _ref8.altitude;
  7131. return 2 * Math.atan(height / 2 / altitude);
  7132. }
  7133. function getClippingPlanes(_ref9) {
  7134. var altitude = _ref9.altitude,
  7135. pitch = _ref9.pitch;
  7136. // Find the distance from the center point to the center top
  7137. // in altitude units using law of sines.
  7138. var pitchRadians = pitch * DEGREES_TO_RADIANS;
  7139. var halfFov = Math.atan(0.5 / altitude);
  7140. var topHalfSurfaceDistance = Math.sin(halfFov) * altitude / Math.sin(Math.PI / 2 - pitchRadians - halfFov);
  7141. // Calculate z value of the farthest fragment that should be rendered.
  7142. var farZ = Math.cos(Math.PI / 2 - pitchRadians) * topHalfSurfaceDistance + altitude;
  7143. return { farZ: farZ, nearZ: 0.1 };
  7144. }
  7145. function getViewMatrix(_ref10) {
  7146. var height = _ref10.height,
  7147. pitch = _ref10.pitch,
  7148. bearing = _ref10.bearing,
  7149. altitude = _ref10.altitude,
  7150. _ref10$center = _ref10.center,
  7151. center = _ref10$center === undefined ? null : _ref10$center,
  7152. _ref10$flipY = _ref10.flipY,
  7153. flipY = _ref10$flipY === undefined ? false : _ref10$flipY;
  7154. // VIEW MATRIX: PROJECTS MERCATOR WORLD COORDINATES
  7155. // Note that mercator world coordinates typically need to be flipped
  7156. //
  7157. // Note: As usual, matrix operation orders should be read in reverse
  7158. // since vectors will be multiplied from the right during transformation
  7159. var vm = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["a" /* createMat4 */])();
  7160. // Move camera to altitude (along the pitch & bearing direction)
  7161. __WEBPACK_IMPORTED_MODULE_4_gl_mat4_translate___default()(vm, vm, [0, 0, -altitude]);
  7162. // After the rotateX, z values are in pixel units. Convert them to
  7163. // altitude units. 1 altitude unit = the screen height.
  7164. __WEBPACK_IMPORTED_MODULE_3_gl_mat4_scale___default()(vm, vm, [1, 1, 1 / height]);
  7165. // Rotate by bearing, and then by pitch (which tilts the view)
  7166. __WEBPACK_IMPORTED_MODULE_5_gl_mat4_rotateX___default()(vm, vm, -pitch * DEGREES_TO_RADIANS);
  7167. __WEBPACK_IMPORTED_MODULE_6_gl_mat4_rotateZ___default()(vm, vm, bearing * DEGREES_TO_RADIANS);
  7168. if (flipY) {
  7169. __WEBPACK_IMPORTED_MODULE_3_gl_mat4_scale___default()(vm, vm, [1, -1, 1]);
  7170. }
  7171. if (center) {
  7172. __WEBPACK_IMPORTED_MODULE_4_gl_mat4_translate___default()(vm, vm, new __WEBPACK_IMPORTED_MODULE_0_math_gl__["Vector3"](center).negate());
  7173. }
  7174. return vm;
  7175. }
  7176. // PROJECTION MATRIX: PROJECTS FROM CAMERA (VIEW) SPACE TO CLIPSPACE
  7177. // This is a "Mapbox" projection matrix - matches mapbox exactly if farZMultiplier === 1
  7178. function getProjectionMatrix(_ref11) {
  7179. var width = _ref11.width,
  7180. height = _ref11.height,
  7181. pitch = _ref11.pitch,
  7182. altitude = _ref11.altitude,
  7183. _ref11$farZMultiplier = _ref11.farZMultiplier,
  7184. farZMultiplier = _ref11$farZMultiplier === undefined ? 10 : _ref11$farZMultiplier;
  7185. var _getClippingPlanes = getClippingPlanes({ altitude: altitude, pitch: pitch }),
  7186. nearZ = _getClippingPlanes.nearZ,
  7187. farZ = _getClippingPlanes.farZ;
  7188. var fov = getFov({ height: height, altitude: altitude });
  7189. var projectionMatrix = __WEBPACK_IMPORTED_MODULE_2_gl_mat4_perspective___default()([], fov, // fov in radians
  7190. width / height, // aspect ratio
  7191. nearZ, // near plane
  7192. farZ * farZMultiplier // far plane
  7193. );
  7194. return projectionMatrix;
  7195. }
  7196. /**
  7197. * Project flat coordinates to pixels on screen.
  7198. *
  7199. * @param {Array} xyz - flat coordinate on 512*512 Mercator Zoom 0 tile
  7200. * @param {Matrix4} pixelProjectionMatrix - projection matrix
  7201. * @return {Array} [x, y, depth] pixel coordinate on screen.
  7202. */
  7203. function worldToPixels(xyz, pixelProjectionMatrix) {
  7204. var _xyz = _slicedToArray(xyz, 3),
  7205. x = _xyz[0],
  7206. y = _xyz[1],
  7207. _xyz$ = _xyz[2],
  7208. z = _xyz$ === undefined ? 0 : _xyz$;
  7209. __WEBPACK_IMPORTED_MODULE_8_assert___default()(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z));
  7210. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["b" /* transformVector */])(pixelProjectionMatrix, [x, y, z, 1]);
  7211. }
  7212. /**
  7213. * Unproject pixels on screen to flat coordinates.
  7214. *
  7215. * @param {Array} xyz - pixel coordinate on screen.
  7216. * @param {Matrix4} pixelUnprojectionMatrix - unprojection matrix
  7217. * @param {Number} targetZ - if pixel coordinate does not have a 3rd component (depth),
  7218. * targetZ is used as the elevation plane to unproject onto
  7219. * @return {Array} [x, y, Z] flat coordinates on 512*512 Mercator Zoom 0 tile.
  7220. */
  7221. function pixelsToWorld(xyz, pixelUnprojectionMatrix) {
  7222. var targetZ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
  7223. var _xyz2 = _slicedToArray(xyz, 3),
  7224. x = _xyz2[0],
  7225. y = _xyz2[1],
  7226. z = _xyz2[2];
  7227. __WEBPACK_IMPORTED_MODULE_8_assert___default()(Number.isFinite(x) && Number.isFinite(y));
  7228. if (Number.isFinite(z)) {
  7229. // Has depth component
  7230. var coord = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["b" /* transformVector */])(pixelUnprojectionMatrix, [x, y, z, 1]);
  7231. return coord;
  7232. }
  7233. // since we don't know the correct projected z value for the point,
  7234. // unproject two points to get a line and then find the point on that line with z=0
  7235. var coord0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["b" /* transformVector */])(pixelUnprojectionMatrix, [x, y, 0, 1]);
  7236. var coord1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["b" /* transformVector */])(pixelUnprojectionMatrix, [x, y, 1, 1]);
  7237. var z0 = coord0[2];
  7238. var z1 = coord1[2];
  7239. var t = z0 === z1 ? 0 : ((targetZ || 0) - z0) / (z1 - z0);
  7240. return __WEBPACK_IMPORTED_MODULE_7_gl_vec2_lerp___default()([], coord0, coord1, t);
  7241. }
  7242. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWItbWVyY2F0b3ItdXRpbHMuanMiXSwibmFtZXMiOlsiVmVjdG9yMyIsImNyZWF0ZU1hdDQiLCJ0cmFuc2Zvcm1WZWN0b3IiLCJtYXQ0X3BlcnNwZWN0aXZlIiwibWF0NF9zY2FsZSIsIm1hdDRfdHJhbnNsYXRlIiwibWF0NF9yb3RhdGVYIiwibWF0NF9yb3RhdGVaIiwidmVjMl9sZXJwIiwiYXNzZXJ0IiwiUEkiLCJNYXRoIiwiUElfNCIsIkRFR1JFRVNfVE9fUkFESUFOUyIsIlJBRElBTlNfVE9fREVHUkVFUyIsIlRJTEVfU0laRSIsIkVBUlRIX0NJUkNVTUZFUkVOQ0UiLCJ6b29tVG9TY2FsZSIsInpvb20iLCJwb3ciLCJzY2FsZVRvWm9vbSIsInNjYWxlIiwibG9nMiIsImxuZ0xhdFRvV29ybGQiLCJsbmciLCJsYXQiLCJsYW1iZGEyIiwicGhpMiIsIngiLCJ5IiwibG9nIiwidGFuIiwid29ybGRUb0xuZ0xhdCIsImF0YW4iLCJleHAiLCJnZXRNZXRlclpvb20iLCJsYXRpdHVkZSIsIk51bWJlciIsImlzRmluaXRlIiwibGF0Q29zaW5lIiwiY29zIiwiZ2V0RGlzdGFuY2VTY2FsZXMiLCJsb25naXR1ZGUiLCJoaWdoUHJlY2lzaW9uIiwidW5kZWZpbmVkIiwicmVzdWx0Iiwid29ybGRTaXplIiwicGl4ZWxzUGVyRGVncmVlWCIsInBpeGVsc1BlckRlZ3JlZVkiLCJhbHRQaXhlbHNQZXJNZXRlciIsInBpeGVsc1Blck1ldGVyIiwibWV0ZXJzUGVyUGl4ZWwiLCJwaXhlbHNQZXJEZWdyZWUiLCJkZWdyZWVzUGVyUGl4ZWwiLCJsYXRDb3NpbmUyIiwicGl4ZWxzUGVyRGVncmVlWTIiLCJhbHRQaXhlbHNQZXJEZWdyZWUyIiwiYWx0UGl4ZWxzUGVyTWV0ZXIyIiwicGl4ZWxzUGVyRGVncmVlMiIsInBpeGVsc1Blck1ldGVyMiIsImdldFdvcmxkUG9zaXRpb24iLCJtZXRlck9mZnNldCIsImRpc3RhbmNlU2NhbGVzIiwiY2VudGVyMmQiLCJjZW50ZXIiLCJwaXhlbFBvc2l0aW9uIiwiYWRkIiwiZ2V0Rm92IiwiaGVpZ2h0IiwiYWx0aXR1ZGUiLCJnZXRDbGlwcGluZ1BsYW5lcyIsInBpdGNoIiwicGl0Y2hSYWRpYW5zIiwiaGFsZkZvdiIsInRvcEhhbGZTdXJmYWNlRGlzdGFuY2UiLCJzaW4iLCJmYXJaIiwibmVhcloiLCJnZXRWaWV3TWF0cml4IiwiYmVhcmluZyIsImZsaXBZIiwidm0iLCJuZWdhdGUiLCJnZXRQcm9qZWN0aW9uTWF0cml4Iiwid2lkdGgiLCJmYXJaTXVsdGlwbGllciIsImZvdiIsInByb2plY3Rpb25NYXRyaXgiLCJ3b3JsZFRvUGl4ZWxzIiwieHl6IiwicGl4ZWxQcm9qZWN0aW9uTWF0cml4IiwieiIsInBpeGVsc1RvV29ybGQiLCJwaXhlbFVucHJvamVjdGlvbk1hdHJpeCIsInRhcmdldFoiLCJjb29yZCIsImNvb3JkMCIsImNvb3JkMSIsInowIiwiejEiLCJ0Il0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUVBLFNBQVFBLE9BQVIsUUFBc0IsU0FBdEI7QUFDQSxTQUFRQyxVQUFSLEVBQW9CQyxlQUFwQixRQUEwQyxjQUExQzs7QUFFQSxPQUFPQyxnQkFBUCxNQUE2QixxQkFBN0I7QUFDQSxPQUFPQyxVQUFQLE1BQXVCLGVBQXZCO0FBQ0EsT0FBT0MsY0FBUCxNQUEyQixtQkFBM0I7QUFDQSxPQUFPQyxZQUFQLE1BQXlCLGlCQUF6QjtBQUNBLE9BQU9DLFlBQVAsTUFBeUIsaUJBQXpCO0FBQ0EsT0FBT0MsU0FBUCxNQUFzQixjQUF0QjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIsUUFBbkI7O0FBRUE7QUFDQSxJQUFNQyxLQUFLQyxLQUFLRCxFQUFoQjtBQUNBLElBQU1FLE9BQU9GLEtBQUssQ0FBbEI7QUFDQSxJQUFNRyxxQkFBcUJILEtBQUssR0FBaEM7QUFDQSxJQUFNSSxxQkFBcUIsTUFBTUosRUFBakM7QUFDQSxJQUFNSyxZQUFZLEdBQWxCO0FBQ0E7QUFDQSxJQUFNQyxzQkFBc0IsT0FBNUI7O0FBRUE7QUFDQSxPQUFPLFNBQVNDLFdBQVQsQ0FBcUJDLElBQXJCLEVBQTJCO0FBQ2hDLFNBQU9QLEtBQUtRLEdBQUwsQ0FBUyxDQUFULEVBQVlELElBQVosQ0FBUDtBQUNEOztBQUVELE9BQU8sU0FBU0UsV0FBVCxDQUFxQkMsS0FBckIsRUFBNEI7QUFDakMsU0FBT1YsS0FBS1csSUFBTCxDQUFVRCxLQUFWLENBQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7OztBQVVBLE9BQU8sU0FBU0UsYUFBVCxPQUFtQ0YsS0FBbkMsRUFBMEM7QUFBQTtBQUFBLE1BQWxCRyxHQUFrQjtBQUFBLE1BQWJDLEdBQWE7O0FBQy9DSixXQUFTTixTQUFUO0FBQ0EsTUFBTVcsVUFBVUYsTUFBTVgsa0JBQXRCO0FBQ0EsTUFBTWMsT0FBT0YsTUFBTVosa0JBQW5CO0FBQ0EsTUFBTWUsSUFBSVAsU0FBU0ssVUFBVWhCLEVBQW5CLEtBQTBCLElBQUlBLEVBQTlCLENBQVY7QUFDQSxNQUFNbUIsSUFBSVIsU0FBU1gsS0FBS0MsS0FBS21CLEdBQUwsQ0FBU25CLEtBQUtvQixHQUFMLENBQVNuQixPQUFPZSxPQUFPLEdBQXZCLENBQVQsQ0FBZCxLQUF3RCxJQUFJakIsRUFBNUQsQ0FBVjtBQUNBLFNBQU8sQ0FBQ2tCLENBQUQsRUFBSUMsQ0FBSixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7OztBQVNBLE9BQU8sU0FBU0csYUFBVCxRQUErQlgsS0FBL0IsRUFBc0M7QUFBQTtBQUFBLE1BQWRPLENBQWM7QUFBQSxNQUFYQyxDQUFXOztBQUMzQ1IsV0FBU04sU0FBVDtBQUNBLE1BQU1XLFVBQVdFLElBQUlQLEtBQUwsSUFBZSxJQUFJWCxFQUFuQixJQUF5QkEsRUFBekM7QUFDQSxNQUFNaUIsT0FBTyxLQUFLaEIsS0FBS3NCLElBQUwsQ0FBVXRCLEtBQUt1QixHQUFMLENBQVN4QixLQUFNbUIsSUFBSVIsS0FBTCxJQUFlLElBQUlYLEVBQW5CLENBQWQsQ0FBVixJQUFtREUsSUFBeEQsQ0FBYjtBQUNBLFNBQU8sQ0FBQ2MsVUFBVVosa0JBQVgsRUFBK0JhLE9BQU9iLGtCQUF0QyxDQUFQO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBLE9BQU8sU0FBU3FCLFlBQVQsUUFBa0M7QUFBQSxNQUFYQyxRQUFXLFNBQVhBLFFBQVc7O0FBQ3ZDM0IsU0FBTzRCLE9BQU9DLFFBQVAsQ0FBZ0JGLFFBQWhCLENBQVA7QUFDQSxNQUFNRyxZQUFZNUIsS0FBSzZCLEdBQUwsQ0FBU0osV0FBV3ZCLGtCQUFwQixDQUFsQjtBQUNBLFNBQU9PLFlBQVlKLHNCQUFzQnVCLFNBQWxDLElBQStDLENBQXREO0FBQ0Q7O0FBRUQ7Ozs7OztBQU1BLE9BQU8sU0FBU0UsaUJBQVQsUUFBc0Y7QUFBQSxNQUExREwsUUFBMEQsU0FBMURBLFFBQTBEO0FBQUEsTUFBaERNLFNBQWdELFNBQWhEQSxTQUFnRDtBQUFBLE1BQXJDeEIsSUFBcUMsU0FBckNBLElBQXFDO0FBQUEsTUFBL0JHLEtBQStCLFNBQS9CQSxLQUErQjtBQUFBLGtDQUF4QnNCLGFBQXdCO0FBQUEsTUFBeEJBLGFBQXdCLHVDQUFSLEtBQVE7O0FBQzNGO0FBQ0F0QixVQUFRQSxVQUFVdUIsU0FBVixHQUFzQnZCLEtBQXRCLEdBQThCSixZQUFZQyxJQUFaLENBQXRDOztBQUVBVCxTQUFPNEIsT0FBT0MsUUFBUCxDQUFnQkYsUUFBaEIsS0FBNkJDLE9BQU9DLFFBQVAsQ0FBZ0JJLFNBQWhCLENBQTdCLElBQTJETCxPQUFPQyxRQUFQLENBQWdCakIsS0FBaEIsQ0FBbEU7O0FBRUEsTUFBTXdCLFNBQVMsRUFBZjtBQUNBLE1BQU1DLFlBQVkvQixZQUFZTSxLQUE5QjtBQUNBLE1BQU1rQixZQUFZNUIsS0FBSzZCLEdBQUwsQ0FBU0osV0FBV3ZCLGtCQUFwQixDQUFsQjs7QUFFQTs7Ozs7OztBQU9BLE1BQU1rQyxtQkFBbUJELFlBQVksR0FBckM7QUFDQSxNQUFNRSxtQkFBbUJELG1CQUFtQlIsU0FBNUM7O0FBRUE7OztBQUdBLE1BQU1VLG9CQUFvQkgsWUFBWTlCLG1CQUFaLEdBQWtDdUIsU0FBNUQ7O0FBRUFNLFNBQU9LLGNBQVAsR0FBd0IsQ0FBQ0QsaUJBQUQsRUFBb0JBLGlCQUFwQixFQUF1Q0EsaUJBQXZDLENBQXhCO0FBQ0FKLFNBQU9NLGNBQVAsR0FBd0IsQ0FBQyxJQUFJRixpQkFBTCxFQUF3QixJQUFJQSxpQkFBNUIsRUFBK0MsSUFBSUEsaUJBQW5ELENBQXhCOztBQUVBSixTQUFPTyxlQUFQLEdBQXlCLENBQUNMLGdCQUFELEVBQW1CQyxnQkFBbkIsRUFBcUNDLGlCQUFyQyxDQUF6QjtBQUNBSixTQUFPUSxlQUFQLEdBQXlCLENBQUMsSUFBSU4sZ0JBQUwsRUFBdUIsSUFBSUMsZ0JBQTNCLEVBQTZDLElBQUlDLGlCQUFqRCxDQUF6Qjs7QUFFQTs7Ozs7O0FBTUEsTUFBSU4sYUFBSixFQUFtQjtBQUNqQixRQUFNVyxhQUFhekMscUJBQXFCRixLQUFLb0IsR0FBTCxDQUFTSyxXQUFXdkIsa0JBQXBCLENBQXJCLEdBQStEMEIsU0FBbEY7QUFDQSxRQUFNZ0Isb0JBQW9CUixtQkFBbUJPLFVBQW5CLEdBQWdDLENBQTFEO0FBQ0EsUUFBTUUsc0JBQXNCVixZQUFZOUIsbUJBQVosR0FBa0NzQyxVQUE5RDtBQUNBLFFBQU1HLHFCQUFxQkQsc0JBQXNCUixnQkFBdEIsR0FBeUNDLGlCQUFwRTs7QUFFQUosV0FBT2EsZ0JBQVAsR0FBMEIsQ0FBQyxDQUFELEVBQUlILGlCQUFKLEVBQXVCQyxtQkFBdkIsQ0FBMUI7QUFDQVgsV0FBT2MsZUFBUCxHQUF5QixDQUFDRixrQkFBRCxFQUFxQixDQUFyQixFQUF3QkEsa0JBQXhCLENBQXpCO0FBQ0Q7O0FBRUQ7QUFDQSxTQUFPWixNQUFQO0FBQ0Q7O0FBRUQ7Ozs7QUFJQSxPQUFPLFNBQVNlLGdCQUFULFFBT0o7QUFBQSxNQU5EbEIsU0FNQyxTQU5EQSxTQU1DO0FBQUEsTUFMRE4sUUFLQyxTQUxEQSxRQUtDO0FBQUEsTUFKRGxCLElBSUMsU0FKREEsSUFJQztBQUFBLE1BSERHLEtBR0MsU0FIREEsS0FHQztBQUFBLE1BRkR3QyxXQUVDLFNBRkRBLFdBRUM7QUFBQSxtQ0FEREMsY0FDQztBQUFBLE1BRERBLGNBQ0Msd0NBRGdCLElBQ2hCOztBQUNEO0FBQ0F6QyxVQUFRQSxVQUFVdUIsU0FBVixHQUFzQnZCLEtBQXRCLEdBQThCSixZQUFZQyxJQUFaLENBQXRDOztBQUVBO0FBQ0EsTUFBTTZDLFdBQVd4QyxjQUFjLENBQUNtQixTQUFELEVBQVlOLFFBQVosQ0FBZCxFQUFxQ2YsS0FBckMsQ0FBakI7QUFDQSxNQUFNMkMsU0FBUyxJQUFJaEUsT0FBSixDQUFZK0QsU0FBUyxDQUFULENBQVosRUFBeUJBLFNBQVMsQ0FBVCxDQUF6QixFQUFzQyxDQUF0QyxDQUFmOztBQUVBLE1BQUlGLFdBQUosRUFBaUI7QUFDZjtBQUNBQyxxQkFBaUJBLGtCQUFrQnJCLGtCQUFrQixFQUFDTCxrQkFBRCxFQUFXTSxvQkFBWCxFQUFzQnJCLFlBQXRCLEVBQWxCLENBQW5DOztBQUVBLFFBQU00QyxnQkFBZ0IsSUFBSWpFLE9BQUosQ0FBWTZELFdBQVo7QUFDcEI7QUFEb0IsS0FFbkJ4QyxLQUZtQixDQUVieUMsZUFBZVosY0FGRjtBQUdwQjtBQUNBO0FBSm9CLEtBS25CN0IsS0FMbUIsQ0FLYixDQUFDLENBQUQsRUFBSSxDQUFDLENBQUwsRUFBUSxDQUFSLENBTGEsQ0FBdEI7QUFNQTJDLFdBQU9FLEdBQVAsQ0FBV0QsYUFBWDtBQUNEOztBQUVELFNBQU9ELE1BQVA7QUFDRDs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVNHLE1BQVQsUUFBb0M7QUFBQSxNQUFuQkMsTUFBbUIsU0FBbkJBLE1BQW1CO0FBQUEsTUFBWEMsUUFBVyxTQUFYQSxRQUFXOztBQUNsQyxTQUFPLElBQUkxRCxLQUFLc0IsSUFBTCxDQUFXbUMsU0FBUyxDQUFWLEdBQWVDLFFBQXpCLENBQVg7QUFDRDs7QUFFRCxTQUFTQyxpQkFBVCxRQUE4QztBQUFBLE1BQWxCRCxRQUFrQixTQUFsQkEsUUFBa0I7QUFBQSxNQUFSRSxLQUFRLFNBQVJBLEtBQVE7O0FBQzVDO0FBQ0E7QUFDQSxNQUFNQyxlQUFlRCxRQUFRMUQsa0JBQTdCO0FBQ0EsTUFBTTRELFVBQVU5RCxLQUFLc0IsSUFBTCxDQUFVLE1BQU1vQyxRQUFoQixDQUFoQjtBQUNBLE1BQU1LLHlCQUNKL0QsS0FBS2dFLEdBQUwsQ0FBU0YsT0FBVCxJQUFvQkosUUFBcEIsR0FBK0IxRCxLQUFLZ0UsR0FBTCxDQUFTaEUsS0FBS0QsRUFBTCxHQUFVLENBQVYsR0FBYzhELFlBQWQsR0FBNkJDLE9BQXRDLENBRGpDOztBQUdBO0FBQ0EsTUFBTUcsT0FBT2pFLEtBQUs2QixHQUFMLENBQVM3QixLQUFLRCxFQUFMLEdBQVUsQ0FBVixHQUFjOEQsWUFBdkIsSUFBdUNFLHNCQUF2QyxHQUFnRUwsUUFBN0U7O0FBRUEsU0FBTyxFQUFDTyxVQUFELEVBQU9DLE9BQU8sR0FBZCxFQUFQO0FBQ0Q7O0FBRUQsT0FBTyxTQUFTQyxhQUFULFNBVUo7QUFBQSxNQVJEVixNQVFDLFVBUkRBLE1BUUM7QUFBQSxNQVBERyxLQU9DLFVBUERBLEtBT0M7QUFBQSxNQU5EUSxPQU1DLFVBTkRBLE9BTUM7QUFBQSxNQUxEVixRQUtDLFVBTERBLFFBS0M7QUFBQSw2QkFIREwsTUFHQztBQUFBLE1BSERBLE1BR0MsaUNBSFEsSUFHUjtBQUFBLDRCQUREZ0IsS0FDQztBQUFBLE1BRERBLEtBQ0MsZ0NBRE8sS0FDUDs7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLEtBQUtoRixZQUFYOztBQUVBO0FBQ0FJLGlCQUFlNEUsRUFBZixFQUFtQkEsRUFBbkIsRUFBdUIsQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQUNaLFFBQVIsQ0FBdkI7O0FBRUE7QUFDQTtBQUNBakUsYUFBVzZFLEVBQVgsRUFBZUEsRUFBZixFQUFtQixDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sSUFBSWIsTUFBWCxDQUFuQjs7QUFFQTtBQUNBOUQsZUFBYTJFLEVBQWIsRUFBaUJBLEVBQWpCLEVBQXFCLENBQUNWLEtBQUQsR0FBUzFELGtCQUE5QjtBQUNBTixlQUFhMEUsRUFBYixFQUFpQkEsRUFBakIsRUFBcUJGLFVBQVVsRSxrQkFBL0I7O0FBRUEsTUFBSW1FLEtBQUosRUFBVztBQUNUNUUsZUFBVzZFLEVBQVgsRUFBZUEsRUFBZixFQUFtQixDQUFDLENBQUQsRUFBSSxDQUFDLENBQUwsRUFBUSxDQUFSLENBQW5CO0FBQ0Q7O0FBRUQsTUFBSWpCLE1BQUosRUFBWTtBQUNWM0QsbUJBQWU0RSxFQUFmLEVBQW1CQSxFQUFuQixFQUF1QixJQUFJakYsT0FBSixDQUFZZ0UsTUFBWixFQUFvQmtCLE1BQXBCLEVBQXZCO0FBQ0Q7O0FBRUQsU0FBT0QsRUFBUDtBQUNEOztBQUVEO0FBQ0E7QUFDQSxPQUFPLFNBQVNFLG1CQUFULFNBTUo7QUFBQSxNQUxEQyxLQUtDLFVBTERBLEtBS0M7QUFBQSxNQUpEaEIsTUFJQyxVQUpEQSxNQUlDO0FBQUEsTUFIREcsS0FHQyxVQUhEQSxLQUdDO0FBQUEsTUFGREYsUUFFQyxVQUZEQSxRQUVDO0FBQUEscUNBRERnQixjQUNDO0FBQUEsTUFEREEsY0FDQyx5Q0FEZ0IsRUFDaEI7O0FBQUEsMkJBQ3FCZixrQkFBa0IsRUFBQ0Qsa0JBQUQsRUFBV0UsWUFBWCxFQUFsQixDQURyQjtBQUFBLE1BQ01NLEtBRE4sc0JBQ01BLEtBRE47QUFBQSxNQUNhRCxJQURiLHNCQUNhQSxJQURiOztBQUVELE1BQU1VLE1BQU1uQixPQUFPLEVBQUNDLGNBQUQsRUFBU0Msa0JBQVQsRUFBUCxDQUFaOztBQUVBLE1BQU1rQixtQkFBbUJwRixpQkFDdkIsRUFEdUIsRUFFdkJtRixHQUZ1QixFQUVMO0FBQ2xCRixVQUFRaEIsTUFIZSxFQUdMO0FBQ2xCUyxPQUp1QixFQUlMO0FBQ2xCRCxTQUFPUyxjQUxnQixDQUtEO0FBTEMsR0FBekI7O0FBUUEsU0FBT0UsZ0JBQVA7QUFDRDs7QUFFRDs7Ozs7OztBQU9BLE9BQU8sU0FBU0MsYUFBVCxDQUF1QkMsR0FBdkIsRUFBNEJDLHFCQUE1QixFQUFtRDtBQUFBLDRCQUNsQ0QsR0FEa0M7QUFBQSxNQUNqRDdELENBRGlEO0FBQUEsTUFDOUNDLENBRDhDO0FBQUE7QUFBQSxNQUMzQzhELENBRDJDLHlCQUN2QyxDQUR1Qzs7QUFFeERsRixTQUFPNEIsT0FBT0MsUUFBUCxDQUFnQlYsQ0FBaEIsS0FBc0JTLE9BQU9DLFFBQVAsQ0FBZ0JULENBQWhCLENBQXRCLElBQTRDUSxPQUFPQyxRQUFQLENBQWdCcUQsQ0FBaEIsQ0FBbkQ7O0FBRUEsU0FBT3pGLGdCQUFnQndGLHFCQUFoQixFQUF1QyxDQUFDOUQsQ0FBRCxFQUFJQyxDQUFKLEVBQU84RCxDQUFQLEVBQVUsQ0FBVixDQUF2QyxDQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7OztBQVNBLE9BQU8sU0FBU0MsYUFBVCxDQUF1QkgsR0FBdkIsRUFBNEJJLHVCQUE1QixFQUFrRTtBQUFBLE1BQWJDLE9BQWEsdUVBQUgsQ0FBRzs7QUFBQSw2QkFDckRMLEdBRHFEO0FBQUEsTUFDaEU3RCxDQURnRTtBQUFBLE1BQzdEQyxDQUQ2RDtBQUFBLE1BQzFEOEQsQ0FEMEQ7O0FBRXZFbEYsU0FBTzRCLE9BQU9DLFFBQVAsQ0FBZ0JWLENBQWhCLEtBQXNCUyxPQUFPQyxRQUFQLENBQWdCVCxDQUFoQixDQUE3Qjs7QUFFQSxNQUFJUSxPQUFPQyxRQUFQLENBQWdCcUQsQ0FBaEIsQ0FBSixFQUF3QjtBQUN0QjtBQUNBLFFBQU1JLFFBQVE3RixnQkFBZ0IyRix1QkFBaEIsRUFBeUMsQ0FBQ2pFLENBQUQsRUFBSUMsQ0FBSixFQUFPOEQsQ0FBUCxFQUFVLENBQVYsQ0FBekMsQ0FBZDtBQUNBLFdBQU9JLEtBQVA7QUFDRDs7QUFFRDtBQUNBO0FBQ0EsTUFBTUMsU0FBUzlGLGdCQUFnQjJGLHVCQUFoQixFQUF5QyxDQUFDakUsQ0FBRCxFQUFJQyxDQUFKLEVBQU8sQ0FBUCxFQUFVLENBQVYsQ0FBekMsQ0FBZjtBQUNBLE1BQU1vRSxTQUFTL0YsZ0JBQWdCMkYsdUJBQWhCLEVBQXlDLENBQUNqRSxDQUFELEVBQUlDLENBQUosRUFBTyxDQUFQLEVBQVUsQ0FBVixDQUF6QyxDQUFmOztBQUVBLE1BQU1xRSxLQUFLRixPQUFPLENBQVAsQ0FBWDtBQUNBLE1BQU1HLEtBQUtGLE9BQU8sQ0FBUCxDQUFYOztBQUVBLE1BQU1HLElBQUlGLE9BQU9DLEVBQVAsR0FBWSxDQUFaLEdBQWdCLENBQUMsQ0FBQ0wsV0FBVyxDQUFaLElBQWlCSSxFQUFsQixLQUF5QkMsS0FBS0QsRUFBOUIsQ0FBMUI7QUFDQSxTQUFPMUYsVUFBVSxFQUFWLEVBQWN3RixNQUFkLEVBQXNCQyxNQUF0QixFQUE4QkcsQ0FBOUIsQ0FBUDtBQUNEIiwiZmlsZSI6IndlYi1tZXJjYXRvci11dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE8gLSBUSEUgVVRJTElUSUVTIElOIFRISVMgRklMRSBTSE9VTEQgQkUgSU1QT1JURUQgRlJPTSBXRUItTUVSQ0FUT1ItVklFV1BPUlQgTU9EVUxFXG5cbmltcG9ydCB7VmVjdG9yM30gZnJvbSAnbWF0aC5nbCc7XG5pbXBvcnQge2NyZWF0ZU1hdDQsIHRyYW5zZm9ybVZlY3Rvcn0gZnJvbSAnLi9tYXRoLXV0aWxzJztcblxuaW1wb3J0IG1hdDRfcGVyc3BlY3RpdmUgZnJvbSAnZ2wtbWF0NC9wZXJzcGVjdGl2ZSc7XG5pbXBvcnQgbWF0NF9zY2FsZSBmcm9tICdnbC1tYXQ0L3NjYWxlJztcbmltcG9ydCBtYXQ0X3RyYW5zbGF0ZSBmcm9tICdnbC1tYXQ0L3RyYW5zbGF0ZSc7XG5pbXBvcnQgbWF0NF9yb3RhdGVYIGZyb20gJ2dsLW1hdDQvcm90YXRlWCc7XG5pbXBvcnQgbWF0NF9yb3RhdGVaIGZyb20gJ2dsLW1hdDQvcm90YXRlWic7XG5pbXBvcnQgdmVjMl9sZXJwIGZyb20gJ2dsLXZlYzIvbGVycCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbi8vIENPTlNUQU5UU1xuY29uc3QgUEkgPSBNYXRoLlBJO1xuY29uc3QgUElfNCA9IFBJIC8gNDtcbmNvbnN0IERFR1JFRVNfVE9fUkFESUFOUyA9IFBJIC8gMTgwO1xuY29uc3QgUkFESUFOU19UT19ERUdSRUVTID0gMTgwIC8gUEk7XG5jb25zdCBUSUxFX1NJWkUgPSA1MTI7XG4vLyBBdmVyYWdlIGNpcmN1bWZlcmVuY2UgKDQwMDc1IGttIGVxdWF0b3JpYWwsIDQwMDA3IGttIG1lcmlkaW9uYWwpXG5jb25zdCBFQVJUSF9DSVJDVU1GRVJFTkNFID0gNDAuMDNlNjtcblxuLyoqIFV0aWwgZnVuY3Rpb25zICoqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvb21Ub1NjYWxlKHpvb20pIHtcbiAgcmV0dXJuIE1hdGgucG93KDIsIHpvb20pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVUb1pvb20oc2NhbGUpIHtcbiAgcmV0dXJuIE1hdGgubG9nMihzY2FsZSk7XG59XG5cbi8qKlxuICogUHJvamVjdCBbbG5nLGxhdF0gb24gc3BoZXJlIG9udG8gW3gseV0gb24gNTEyKjUxMiBNZXJjYXRvciBab29tIDAgdGlsZS5cbiAqIFBlcmZvcm1zIHRoZSBub25saW5lYXIgcGFydCBvZiB0aGUgd2ViIG1lcmNhdG9yIHByb2plY3Rpb24uXG4gKiBSZW1haW5pbmcgcHJvamVjdGlvbiBpcyBkb25lIHdpdGggNHg0IG1hdHJpY2VzIHdoaWNoIGFsc28gaGFuZGxlc1xuICogcGVyc3BlY3RpdmUuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gbG5nTGF0IC0gW2xuZywgbGF0XSBjb29yZGluYXRlc1xuICogICBTcGVjaWZpZXMgYSBwb2ludCBvbiB0aGUgc3BoZXJlIHRvIHByb2plY3Qgb250byB0aGUgbWFwLlxuICogQHJldHVybiB7QXJyYXl9IFt4LHldIGNvb3JkaW5hdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG5nTGF0VG9Xb3JsZChbbG5nLCBsYXRdLCBzY2FsZSkge1xuICBzY2FsZSAqPSBUSUxFX1NJWkU7XG4gIGNvbnN0IGxhbWJkYTIgPSBsbmcgKiBERUdSRUVTX1RPX1JBRElBTlM7XG4gIGNvbnN0IHBoaTIgPSBsYXQgKiBERUdSRUVTX1RPX1JBRElBTlM7XG4gIGNvbnN0IHggPSBzY2FsZSAqIChsYW1iZGEyICsgUEkpIC8gKDIgKiBQSSk7XG4gIGNvbnN0IHkgPSBzY2FsZSAqIChQSSAtIE1hdGgubG9nKE1hdGgudGFuKFBJXzQgKyBwaGkyICogMC41KSkpIC8gKDIgKiBQSSk7XG4gIHJldHVybiBbeCwgeV07XG59XG5cbi8qKlxuICogVW5wcm9qZWN0IHdvcmxkIHBvaW50IFt4LHldIG9uIG1hcCBvbnRvIHtsYXQsIGxvbn0gb24gc3BoZXJlXG4gKlxuICogQHBhcmFtIHtvYmplY3R8VmVjdG9yfSB4eSAtIG9iamVjdCB3aXRoIHt4LHl9IG1lbWJlcnNcbiAqICByZXByZXNlbnRpbmcgcG9pbnQgb24gcHJvamVjdGVkIG1hcCBwbGFuZVxuICogQHJldHVybiB7R2VvQ29vcmRpbmF0ZXN9IC0gb2JqZWN0IHdpdGgge2xhdCxsb259IG9mIHBvaW50IG9uIHNwaGVyZS5cbiAqICAgSGFzIHRvQXJyYXkgbWV0aG9kIGlmIHlvdSBuZWVkIGEgR2VvSlNPTiBBcnJheS5cbiAqICAgUGVyIGNhcnRvZ3JhcGhpYyB0cmFkaXRpb24sIGxhdCBhbmQgbG9uIGFyZSBzcGVjaWZpZWQgYXMgZGVncmVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdvcmxkVG9MbmdMYXQoW3gsIHldLCBzY2FsZSkge1xuICBzY2FsZSAqPSBUSUxFX1NJWkU7XG4gIGNvbnN0IGxhbWJkYTIgPSAoeCAvIHNjYWxlKSAqICgyICogUEkpIC0gUEk7XG4gIGNvbnN0IHBoaTIgPSAyICogKE1hdGguYXRhbihNYXRoLmV4cChQSSAtICh5IC8gc2NhbGUpICogKDIgKiBQSSkpKSAtIFBJXzQpO1xuICByZXR1cm4gW2xhbWJkYTIgKiBSQURJQU5TX1RPX0RFR1JFRVMsIHBoaTIgKiBSQURJQU5TX1RPX0RFR1JFRVNdO1xufVxuXG4vLyBSZXR1cm5zIHRoZSB6b29tIGxldmVsIHRoYXQgZ2l2ZXMgYSAxIG1ldGVyIHBpeGVsIGF0IGEgY2VydGFpbiBsYXRpdHVkZVxuLy8gUz1DKmNvcyh5KS8yXih6KzgpXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0ZXJab29tKHtsYXRpdHVkZX0pIHtcbiAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShsYXRpdHVkZSkpO1xuICBjb25zdCBsYXRDb3NpbmUgPSBNYXRoLmNvcyhsYXRpdHVkZSAqIERFR1JFRVNfVE9fUkFESUFOUyk7XG4gIHJldHVybiBzY2FsZVRvWm9vbShFQVJUSF9DSVJDVU1GRVJFTkNFICogbGF0Q29zaW5lKSAtIDg7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRpc3RhbmNlIHNjYWxlcyBpbiBtZXRlcnMgYXJvdW5kIGN1cnJlbnQgbGF0L2xvbiwgYm90aCBmb3JcbiAqIGRlZ3JlZXMgYW5kIHBpeGVscy5cbiAqIEluIG1lcmNhdG9yIHByb2plY3Rpb24gbW9kZSwgdGhlIGRpc3RhbmNlIHNjYWxlcyB2YXJ5IHNpZ25pZmljYW50bHlcbiAqIHdpdGggbGF0aXR1ZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXN0YW5jZVNjYWxlcyh7bGF0aXR1ZGUsIGxvbmdpdHVkZSwgem9vbSwgc2NhbGUsIGhpZ2hQcmVjaXNpb24gPSBmYWxzZX0pIHtcbiAgLy8gQ2FsY3VsYXRlIHNjYWxlIGZyb20gem9vbSBpZiBub3QgcHJvdmlkZWRcbiAgc2NhbGUgPSBzY2FsZSAhPT0gdW5kZWZpbmVkID8gc2NhbGUgOiB6b29tVG9TY2FsZSh6b29tKTtcblxuICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKGxhdGl0dWRlKSAmJiBOdW1iZXIuaXNGaW5pdGUobG9uZ2l0dWRlKSAmJiBOdW1iZXIuaXNGaW5pdGUoc2NhbGUpKTtcblxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3Qgd29ybGRTaXplID0gVElMRV9TSVpFICogc2NhbGU7XG4gIGNvbnN0IGxhdENvc2luZSA9IE1hdGguY29zKGxhdGl0dWRlICogREVHUkVFU19UT19SQURJQU5TKTtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHBpeGVscyBvY2N1cGllZCBieSBvbmUgZGVncmVlIGxvbmdpdHVkZSBhcm91bmQgY3VycmVudCBsYXQvbG9uOlxuICAgICBwaXhlbHNQZXJEZWdyZWVYID0gZChsbmdMYXRUb1dvcmxkKFtsbmcsIGxhdF0pWzBdKS9kKGxuZylcbiAgICAgICA9IHNjYWxlICogVElMRV9TSVpFICogREVHUkVFU19UT19SQURJQU5TIC8gKDIgKiBQSSlcbiAgICAgcGl4ZWxzUGVyRGVncmVlWSA9IGQobG5nTGF0VG9Xb3JsZChbbG5nLCBsYXRdKVsxXSkvZChsYXQpXG4gICAgICAgPSAtc2NhbGUgKiBUSUxFX1NJWkUgKiBERUdSRUVTX1RPX1JBRElBTlMgLyBjb3MobGF0ICogREVHUkVFU19UT19SQURJQU5TKSAgLyAoMiAqIFBJKVxuICAgKi9cbiAgY29uc3QgcGl4ZWxzUGVyRGVncmVlWCA9IHdvcmxkU2l6ZSAvIDM2MDtcbiAgY29uc3QgcGl4ZWxzUGVyRGVncmVlWSA9IHBpeGVsc1BlckRlZ3JlZVggLyBsYXRDb3NpbmU7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBwaXhlbHMgb2NjdXBpZWQgYnkgb25lIG1ldGVyIGFyb3VuZCBjdXJyZW50IGxhdC9sb246XG4gICAqL1xuICBjb25zdCBhbHRQaXhlbHNQZXJNZXRlciA9IHdvcmxkU2l6ZSAvIEVBUlRIX0NJUkNVTUZFUkVOQ0UgLyBsYXRDb3NpbmU7XG5cbiAgcmVzdWx0LnBpeGVsc1Blck1ldGVyID0gW2FsdFBpeGVsc1Blck1ldGVyLCBhbHRQaXhlbHNQZXJNZXRlciwgYWx0UGl4ZWxzUGVyTWV0ZXJdO1xuICByZXN1bHQubWV0ZXJzUGVyUGl4ZWwgPSBbMSAvIGFsdFBpeGVsc1Blck1ldGVyLCAxIC8gYWx0UGl4ZWxzUGVyTWV0ZXIsIDEgLyBhbHRQaXhlbHNQZXJNZXRlcl07XG5cbiAgcmVzdWx0LnBpeGVsc1BlckRlZ3JlZSA9IFtwaXhlbHNQZXJEZWdyZWVYLCBwaXhlbHNQZXJEZWdyZWVZLCBhbHRQaXhlbHNQZXJNZXRlcl07XG4gIHJlc3VsdC5kZWdyZWVzUGVyUGl4ZWwgPSBbMSAvIHBpeGVsc1BlckRlZ3JlZVgsIDEgLyBwaXhlbHNQZXJEZWdyZWVZLCAxIC8gYWx0UGl4ZWxzUGVyTWV0ZXJdO1xuXG4gIC8qKlxuICAgKiBUYXlsb3Igc2VyaWVzIDJuZCBvcmRlciBmb3IgMS9sYXRDb3NpbmVcbiAgICAgZicoYSkgKiAoeCAtIGEpXG4gICAgICAgPSBkKDEvY29zKGxhdCAqIERFR1JFRVNfVE9fUkFESUFOUykpL2QobGF0KSAqIGRMYXRcbiAgICAgICA9IERFR1JFRVNfVE9fUkFESUFOUyAqIHRhbihsYXQgKiBERUdSRUVTX1RPX1JBRElBTlMpIC8gY29zKGxhdCAqIERFR1JFRVNfVE9fUkFESUFOUykgKiBkTGF0XG4gICAqL1xuICBpZiAoaGlnaFByZWNpc2lvbikge1xuICAgIGNvbnN0IGxhdENvc2luZTIgPSBERUdSRUVTX1RPX1JBRElBTlMgKiBNYXRoLnRhbihsYXRpdHVkZSAqIERFR1JFRVNfVE9fUkFESUFOUykgLyBsYXRDb3NpbmU7XG4gICAgY29uc3QgcGl4ZWxzUGVyRGVncmVlWTIgPSBwaXhlbHNQZXJEZWdyZWVYICogbGF0Q29zaW5lMiAvIDI7XG4gICAgY29uc3QgYWx0UGl4ZWxzUGVyRGVncmVlMiA9IHdvcmxkU2l6ZSAvIEVBUlRIX0NJUkNVTUZFUkVOQ0UgKiBsYXRDb3NpbmUyO1xuICAgIGNvbnN0IGFsdFBpeGVsc1Blck1ldGVyMiA9IGFsdFBpeGVsc1BlckRlZ3JlZTIgLyBwaXhlbHNQZXJEZWdyZWVZICogYWx0UGl4ZWxzUGVyTWV0ZXI7XG5cbiAgICByZXN1bHQucGl4ZWxzUGVyRGVncmVlMiA9IFswLCBwaXhlbHNQZXJEZWdyZWVZMiwgYWx0UGl4ZWxzUGVyRGVncmVlMl07XG4gICAgcmVzdWx0LnBpeGVsc1Blck1ldGVyMiA9IFthbHRQaXhlbHNQZXJNZXRlcjIsIDAsIGFsdFBpeGVsc1Blck1ldGVyMl07XG4gIH1cblxuICAvLyBNYWluIHJlc3VsdHMsIHVzZWQgZm9yIGNvbnZlcnRpbmcgbWV0ZXJzIHRvIGxhdGxuZyBkZWx0YXMgYW5kIHNjYWxpbmcgb2Zmc2V0c1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgYSBtZXJjYXRvciB3b3JsZCBwb3NpdGlvbiAoXCJwaXhlbHNcIiBpbiBnaXZlbiB6b29tIGxldmVsKVxuICogZnJvbSBhIGxuZy9sYXQgYW5kIG1ldGVyT2Zmc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JsZFBvc2l0aW9uKHtcbiAgbG9uZ2l0dWRlLFxuICBsYXRpdHVkZSxcbiAgem9vbSxcbiAgc2NhbGUsXG4gIG1ldGVyT2Zmc2V0LFxuICBkaXN0YW5jZVNjYWxlcyA9IG51bGxcbn0pIHtcbiAgLy8gQ2FsY3VsYXRlIHNjYWxlIGZyb20gem9vbSBpZiBub3QgcHJvdmlkZWRcbiAgc2NhbGUgPSBzY2FsZSAhPT0gdW5kZWZpbmVkID8gc2NhbGUgOiB6b29tVG9TY2FsZSh6b29tKTtcblxuICAvLyBNYWtlIGEgY2VudGVyZWQgdmVyc2lvbiBvZiB0aGUgbWF0cml4IGZvciBwcm9qZWN0aW9uIG1vZGVzIHdpdGhvdXQgYW4gb2Zmc2V0XG4gIGNvbnN0IGNlbnRlcjJkID0gbG5nTGF0VG9Xb3JsZChbbG9uZ2l0dWRlLCBsYXRpdHVkZV0sIHNjYWxlKTtcbiAgY29uc3QgY2VudGVyID0gbmV3IFZlY3RvcjMoY2VudGVyMmRbMF0sIGNlbnRlcjJkWzFdLCAwKTtcblxuICBpZiAobWV0ZXJPZmZzZXQpIHtcbiAgICAvLyBDYWxjdWxhdGUgZGlzdGFuY2Ugc2NhbGVzIGlmIGxuZy9sYXQvem9vbSBhcmUgcHJvdmlkZWRcbiAgICBkaXN0YW5jZVNjYWxlcyA9IGRpc3RhbmNlU2NhbGVzIHx8IGdldERpc3RhbmNlU2NhbGVzKHtsYXRpdHVkZSwgbG9uZ2l0dWRlLCBzY2FsZX0pO1xuXG4gICAgY29uc3QgcGl4ZWxQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKG1ldGVyT2Zmc2V0KVxuICAgICAgLy8gQ29udmVydCB0byBwaXhlbHMgaW4gY3VycmVudCB6b29tXG4gICAgICAuc2NhbGUoZGlzdGFuY2VTY2FsZXMucGl4ZWxzUGVyTWV0ZXIpXG4gICAgICAvLyBXZSB3YW50IHBvc2l0aXZlIFkgdG8gcmVwcmVzZW50IGFuIG9mZnNldCB0b3dhcmRzIG5vcnRoLFxuICAgICAgLy8gYnV0IHdlYiBtZXJjYXRvciB3b3JsZCBjb29yZGluYXRlcyBpcyB0b3AtbGVmdFxuICAgICAgLnNjYWxlKFsxLCAtMSwgMV0pO1xuICAgIGNlbnRlci5hZGQocGl4ZWxQb3NpdGlvbik7XG4gIH1cblxuICByZXR1cm4gY2VudGVyO1xufVxuXG4vLyBBVFRSSUJVVElPTjpcbi8vIHZpZXcgYW5kIHByb2plY3Rpb24gbWF0cml4IGNyZWF0aW9uIGlzIGludGVudGlvbmFsbHkga2VwdCBjb21wYXRpYmxlIHdpdGhcbi8vIG1hcGJveC1nbCdzIGltcGxlbWVudGF0aW9uIHRvIGVuc3VyZSB0aGF0IHNlYW1sZXNzIGludGVyb3BlcmF0aW9uXG4vLyB3aXRoIG1hcGJveCBhbmQgcmVhY3QtbWFwLWdsLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzXG5cbi8vIFZhcmlhYmxlIGZvdiAoaW4gcmFkaWFucylcbmZ1bmN0aW9uIGdldEZvdih7aGVpZ2h0LCBhbHRpdHVkZX0pIHtcbiAgcmV0dXJuIDIgKiBNYXRoLmF0YW4oKGhlaWdodCAvIDIpIC8gYWx0aXR1ZGUpO1xufVxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BsYW5lcyh7YWx0aXR1ZGUsIHBpdGNofSkge1xuICAvLyBGaW5kIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBjZW50ZXIgcG9pbnQgdG8gdGhlIGNlbnRlciB0b3BcbiAgLy8gaW4gYWx0aXR1ZGUgdW5pdHMgdXNpbmcgbGF3IG9mIHNpbmVzLlxuICBjb25zdCBwaXRjaFJhZGlhbnMgPSBwaXRjaCAqIERFR1JFRVNfVE9fUkFESUFOUztcbiAgY29uc3QgaGFsZkZvdiA9IE1hdGguYXRhbigwLjUgLyBhbHRpdHVkZSk7XG4gIGNvbnN0IHRvcEhhbGZTdXJmYWNlRGlzdGFuY2UgPVxuICAgIE1hdGguc2luKGhhbGZGb3YpICogYWx0aXR1ZGUgLyBNYXRoLnNpbihNYXRoLlBJIC8gMiAtIHBpdGNoUmFkaWFucyAtIGhhbGZGb3YpO1xuXG4gIC8vIENhbGN1bGF0ZSB6IHZhbHVlIG9mIHRoZSBmYXJ0aGVzdCBmcmFnbWVudCB0aGF0IHNob3VsZCBiZSByZW5kZXJlZC5cbiAgY29uc3QgZmFyWiA9IE1hdGguY29zKE1hdGguUEkgLyAyIC0gcGl0Y2hSYWRpYW5zKSAqIHRvcEhhbGZTdXJmYWNlRGlzdGFuY2UgKyBhbHRpdHVkZTtcblxuICByZXR1cm4ge2ZhclosIG5lYXJaOiAwLjF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld01hdHJpeCh7XG4gIC8vIFZpZXdwb3J0IHByb3BzXG4gIGhlaWdodCxcbiAgcGl0Y2gsXG4gIGJlYXJpbmcsXG4gIGFsdGl0dWRlLFxuICAvLyBQcmUtY2FsY3VsYXRlZCBwYXJhbWV0ZXJzXG4gIGNlbnRlciA9IG51bGwsXG4gIC8vIE9wdGlvbnNcbiAgZmxpcFkgPSBmYWxzZVxufSkge1xuXG4gIC8vIFZJRVcgTUFUUklYOiBQUk9KRUNUUyBNRVJDQVRPUiBXT1JMRCBDT09SRElOQVRFU1xuICAvLyBOb3RlIHRoYXQgbWVyY2F0b3Igd29ybGQgY29vcmRpbmF0ZXMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgZmxpcHBlZFxuICAvL1xuICAvLyBOb3RlOiBBcyB1c3VhbCwgbWF0cml4IG9wZXJhdGlvbiBvcmRlcnMgc2hvdWxkIGJlIHJlYWQgaW4gcmV2ZXJzZVxuICAvLyBzaW5jZSB2ZWN0b3JzIHdpbGwgYmUgbXVsdGlwbGllZCBmcm9tIHRoZSByaWdodCBkdXJpbmcgdHJhbnNmb3JtYXRpb25cbiAgY29uc3Qgdm0gPSBjcmVhdGVNYXQ0KCk7XG5cbiAgLy8gTW92ZSBjYW1lcmEgdG8gYWx0aXR1ZGUgKGFsb25nIHRoZSBwaXRjaCAmIGJlYXJpbmcgZGlyZWN0aW9uKVxuICBtYXQ0X3RyYW5zbGF0ZSh2bSwgdm0sIFswLCAwLCAtYWx0aXR1ZGVdKTtcblxuICAvLyBBZnRlciB0aGUgcm90YXRlWCwgeiB2YWx1ZXMgYXJlIGluIHBpeGVsIHVuaXRzLiBDb252ZXJ0IHRoZW0gdG9cbiAgLy8gYWx0aXR1ZGUgdW5pdHMuIDEgYWx0aXR1ZGUgdW5pdCA9IHRoZSBzY3JlZW4gaGVpZ2h0LlxuICBtYXQ0X3NjYWxlKHZtLCB2bSwgWzEsIDEsIDEgLyBoZWlnaHRdKTtcblxuICAvLyBSb3RhdGUgYnkgYmVhcmluZywgYW5kIHRoZW4gYnkgcGl0Y2ggKHdoaWNoIHRpbHRzIHRoZSB2aWV3KVxuICBtYXQ0X3JvdGF0ZVgodm0sIHZtLCAtcGl0Y2ggKiBERUdSRUVTX1RPX1JBRElBTlMpO1xuICBtYXQ0X3JvdGF0ZVoodm0sIHZtLCBiZWFyaW5nICogREVHUkVFU19UT19SQURJQU5TKTtcblxuICBpZiAoZmxpcFkpIHtcbiAgICBtYXQ0X3NjYWxlKHZtLCB2bSwgWzEsIC0xLCAxXSk7XG4gIH1cblxuICBpZiAoY2VudGVyKSB7XG4gICAgbWF0NF90cmFuc2xhdGUodm0sIHZtLCBuZXcgVmVjdG9yMyhjZW50ZXIpLm5lZ2F0ZSgpKTtcbiAgfVxuXG4gIHJldHVybiB2bTtcbn1cblxuLy8gUFJPSkVDVElPTiBNQVRSSVg6IFBST0pFQ1RTIEZST00gQ0FNRVJBIChWSUVXKSBTUEFDRSBUTyBDTElQU1BBQ0Vcbi8vIFRoaXMgaXMgYSBcIk1hcGJveFwiIHByb2plY3Rpb24gbWF0cml4IC0gbWF0Y2hlcyBtYXBib3ggZXhhY3RseSBpZiBmYXJaTXVsdGlwbGllciA9PT0gMVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2plY3Rpb25NYXRyaXgoe1xuICB3aWR0aCxcbiAgaGVpZ2h0LFxuICBwaXRjaCxcbiAgYWx0aXR1ZGUsXG4gIGZhclpNdWx0aXBsaWVyID0gMTBcbn0pIHtcbiAgY29uc3Qge25lYXJaLCBmYXJafSA9IGdldENsaXBwaW5nUGxhbmVzKHthbHRpdHVkZSwgcGl0Y2h9KTtcbiAgY29uc3QgZm92ID0gZ2V0Rm92KHtoZWlnaHQsIGFsdGl0dWRlfSk7XG5cbiAgY29uc3QgcHJvamVjdGlvbk1hdHJpeCA9IG1hdDRfcGVyc3BlY3RpdmUoXG4gICAgW10sXG4gICAgZm92LCAgICAgICAgICAgICAgLy8gZm92IGluIHJhZGlhbnNcbiAgICB3aWR0aCAvIGhlaWdodCwgICAvLyBhc3BlY3QgcmF0aW9cbiAgICBuZWFyWiwgICAgICAgICAgICAvLyBuZWFyIHBsYW5lXG4gICAgZmFyWiAqIGZhclpNdWx0aXBsaWVyIC8vIGZhciBwbGFuZVxuICApO1xuXG4gIHJldHVybiBwcm9qZWN0aW9uTWF0cml4O1xufVxuXG4vKipcbiAqIFByb2plY3QgZmxhdCBjb29yZGluYXRlcyB0byBwaXhlbHMgb24gc2NyZWVuLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHh5eiAtIGZsYXQgY29vcmRpbmF0ZSBvbiA1MTIqNTEyIE1lcmNhdG9yIFpvb20gMCB0aWxlXG4gKiBAcGFyYW0ge01hdHJpeDR9IHBpeGVsUHJvamVjdGlvbk1hdHJpeCAtIHByb2plY3Rpb24gbWF0cml4XG4gKiBAcmV0dXJuIHtBcnJheX0gW3gsIHksIGRlcHRoXSBwaXhlbCBjb29yZGluYXRlIG9uIHNjcmVlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdvcmxkVG9QaXhlbHMoeHl6LCBwaXhlbFByb2plY3Rpb25NYXRyaXgpIHtcbiAgY29uc3QgW3gsIHksIHogPSAwXSA9IHh5ejtcbiAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh4KSAmJiBOdW1iZXIuaXNGaW5pdGUoeSkgJiYgTnVtYmVyLmlzRmluaXRlKHopKTtcblxuICByZXR1cm4gdHJhbnNmb3JtVmVjdG9yKHBpeGVsUHJvamVjdGlvbk1hdHJpeCwgW3gsIHksIHosIDFdKTtcbn1cblxuLyoqXG4gKiBVbnByb2plY3QgcGl4ZWxzIG9uIHNjcmVlbiB0byBmbGF0IGNvb3JkaW5hdGVzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHh5eiAtIHBpeGVsIGNvb3JkaW5hdGUgb24gc2NyZWVuLlxuICogQHBhcmFtIHtNYXRyaXg0fSBwaXhlbFVucHJvamVjdGlvbk1hdHJpeCAtIHVucHJvamVjdGlvbiBtYXRyaXhcbiAqIEBwYXJhbSB7TnVtYmVyfSB0YXJnZXRaIC0gaWYgcGl4ZWwgY29vcmRpbmF0ZSBkb2VzIG5vdCBoYXZlIGEgM3JkIGNvbXBvbmVudCAoZGVwdGgpLFxuICogICAgdGFyZ2V0WiBpcyB1c2VkIGFzIHRoZSBlbGV2YXRpb24gcGxhbmUgdG8gdW5wcm9qZWN0IG9udG9cbiAqIEByZXR1cm4ge0FycmF5fSBbeCwgeSwgWl0gZmxhdCBjb29yZGluYXRlcyBvbiA1MTIqNTEyIE1lcmNhdG9yIFpvb20gMCB0aWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGl4ZWxzVG9Xb3JsZCh4eXosIHBpeGVsVW5wcm9qZWN0aW9uTWF0cml4LCB0YXJnZXRaID0gMCkge1xuICBjb25zdCBbeCwgeSwgel0gPSB4eXo7XG4gIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoeCkgJiYgTnVtYmVyLmlzRmluaXRlKHkpKTtcblxuICBpZiAoTnVtYmVyLmlzRmluaXRlKHopKSB7XG4gICAgLy8gSGFzIGRlcHRoIGNvbXBvbmVudFxuICAgIGNvbnN0IGNvb3JkID0gdHJhbnNmb3JtVmVjdG9yKHBpeGVsVW5wcm9qZWN0aW9uTWF0cml4LCBbeCwgeSwgeiwgMV0pO1xuICAgIHJldHVybiBjb29yZDtcbiAgfVxuXG4gIC8vIHNpbmNlIHdlIGRvbid0IGtub3cgdGhlIGNvcnJlY3QgcHJvamVjdGVkIHogdmFsdWUgZm9yIHRoZSBwb2ludCxcbiAgLy8gdW5wcm9qZWN0IHR3byBwb2ludHMgdG8gZ2V0IGEgbGluZSBhbmQgdGhlbiBmaW5kIHRoZSBwb2ludCBvbiB0aGF0IGxpbmUgd2l0aCB6PTBcbiAgY29uc3QgY29vcmQwID0gdHJhbnNmb3JtVmVjdG9yKHBpeGVsVW5wcm9qZWN0aW9uTWF0cml4LCBbeCwgeSwgMCwgMV0pO1xuICBjb25zdCBjb29yZDEgPSB0cmFuc2Zvcm1WZWN0b3IocGl4ZWxVbnByb2plY3Rpb25NYXRyaXgsIFt4LCB5LCAxLCAxXSk7XG5cbiAgY29uc3QgejAgPSBjb29yZDBbMl07XG4gIGNvbnN0IHoxID0gY29vcmQxWzJdO1xuXG4gIGNvbnN0IHQgPSB6MCA9PT0gejEgPyAwIDogKCh0YXJnZXRaIHx8IDApIC0gejApIC8gKHoxIC0gejApO1xuICByZXR1cm4gdmVjMl9sZXJwKFtdLCBjb29yZDAsIGNvb3JkMSwgdCk7XG59XG4iXX0=
  7243. /***/ }),
  7244. /* 81 */
  7245. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7246. "use strict";
  7247. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__viewport__ = __webpack_require__(687);
  7248. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__ = __webpack_require__(80);
  7249. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__fit_bounds__ = __webpack_require__(285);
  7250. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_vec2_add__ = __webpack_require__(159);
  7251. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_vec2_add___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_gl_vec2_add__);
  7252. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_vec2_negate__ = __webpack_require__(160);
  7253. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_vec2_negate___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_gl_vec2_negate__);
  7254. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  7255. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  7256. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  7257. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  7258. // View and Projection Matrix calculations for mapbox-js style map view properties
  7259. var WebMercatorViewport = function (_Viewport) {
  7260. _inherits(WebMercatorViewport, _Viewport);
  7261. /**
  7262. * @classdesc
  7263. * Creates view/projection matrices from mercator params
  7264. * Note: The Viewport is immutable in the sense that it only has accessors.
  7265. * A new viewport instance should be created if any parameters have changed.
  7266. *
  7267. * @class
  7268. * @param {Object} opt - options
  7269. *
  7270. * @param {Number} opt.width=1 - Width of "viewport" or window
  7271. * @param {Number} opt.height=1 - Height of "viewport" or window
  7272. * @param {Number} opt.scale=1 - Either use scale or zoom
  7273. * @param {Number} opt.pitch=0 - Camera angle in degrees (0 is straight down)
  7274. * @param {Number} opt.bearing=0 - Map rotation in degrees (0 means north is up)
  7275. * @param {Number} opt.altitude= - Altitude of camera in screen units
  7276. *
  7277. * Web mercator projection short-hand parameters
  7278. * @param {Number} opt.latitude - Center of viewport on map (alternative to opt.center)
  7279. * @param {Number} opt.longitude - Center of viewport on map (alternative to opt.center)
  7280. * @param {Number} opt.zoom - Scale = Math.pow(2,zoom) on map (alternative to opt.scale)
  7281. * Notes:
  7282. * - Only one of center or [latitude, longitude] can be specified
  7283. * - [latitude, longitude] can only be specified when "mercator" is true
  7284. * - Altitude has a default value that matches assumptions in mapbox-gl
  7285. * - width and height are forced to 1 if supplied as 0, to avoid
  7286. * division by zero. This is intended to reduce the burden of apps to
  7287. * to check values before instantiating a Viewport.
  7288. */
  7289. /* eslint-disable complexity */
  7290. function WebMercatorViewport() {
  7291. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  7292. width = _ref.width,
  7293. height = _ref.height,
  7294. _ref$latitude = _ref.latitude,
  7295. latitude = _ref$latitude === undefined ? 0 : _ref$latitude,
  7296. _ref$longitude = _ref.longitude,
  7297. longitude = _ref$longitude === undefined ? 0 : _ref$longitude,
  7298. _ref$zoom = _ref.zoom,
  7299. zoom = _ref$zoom === undefined ? 0 : _ref$zoom,
  7300. _ref$pitch = _ref.pitch,
  7301. pitch = _ref$pitch === undefined ? 0 : _ref$pitch,
  7302. _ref$bearing = _ref.bearing,
  7303. bearing = _ref$bearing === undefined ? 0 : _ref$bearing,
  7304. _ref$altitude = _ref.altitude,
  7305. altitude = _ref$altitude === undefined ? 1.5 : _ref$altitude,
  7306. //iclient
  7307. isGeographicCoordinateSystem = _ref.isGeographicCoordinateSystem,
  7308. farZMultiplier = _ref$farZMultiplier === undefined ? 10 : _ref$farZMultiplier;
  7309. _ref$farZMultiplier = _ref.farZMultiplier,
  7310. farZMultiplier = _ref$farZMultiplier === undefined ? 10 : _ref$farZMultiplier;
  7311. _classCallCheck(this, WebMercatorViewport);
  7312. // Silently allow apps to send in 0,0 to facilitate isomorphic render etc
  7313. width = width || 1;
  7314. height = height || 1;
  7315. var scale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__["j" /* zoomToScale */])(zoom);
  7316. // Altitude - prevent division by 0
  7317. // TODO - just throw an Error instead?
  7318. altitude = Math.max(0.75, altitude);
  7319. var center = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__["g" /* getWorldPosition */])({ longitude: longitude, latitude: latitude, scale: scale });
  7320. var projectionMatrix = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__["i" /* getProjectionMatrix */])({
  7321. width: width,
  7322. height: height,
  7323. pitch: pitch,
  7324. bearing: bearing,
  7325. altitude: altitude,
  7326. farZMultiplier: farZMultiplier
  7327. });
  7328. var viewMatrix = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__["h" /* getViewMatrix */])({
  7329. height: height,
  7330. center: center,
  7331. pitch: pitch,
  7332. bearing: bearing,
  7333. altitude: altitude,
  7334. flipY: true
  7335. });
  7336. // Save parameters
  7337. var _this = _possibleConstructorReturn(this, (WebMercatorViewport.__proto__ || Object.getPrototypeOf(WebMercatorViewport)).call(this, { width: width, height: height, viewMatrix: viewMatrix, projectionMatrix: projectionMatrix,isGeographicCoordinateSystem:isGeographicCoordinateSystem }));
  7338. _this.latitude = latitude;
  7339. _this.longitude = longitude;
  7340. _this.zoom = zoom;
  7341. _this.pitch = pitch;
  7342. _this.bearing = bearing;
  7343. _this.altitude = altitude;
  7344. _this.scale = scale;
  7345. _this.center = center;
  7346. Object.freeze(_this);
  7347. return _this;
  7348. }
  7349. /* eslint-enable complexity */
  7350. /**
  7351. * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.
  7352. * Performs the nonlinear part of the web mercator projection.
  7353. * Remaining projection is done with 4x4 matrices which also handles
  7354. * perspective.
  7355. *
  7356. * @param {Array} lngLat - [lng, lat] coordinates
  7357. * Specifies a point on the sphere to project onto the map.
  7358. * @return {Array} [x,y] coordinates.
  7359. */
  7360. _createClass(WebMercatorViewport, [{
  7361. key: 'projectFlat',
  7362. value: function projectFlat(lngLat) {
  7363. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  7364. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__["a" /* lngLatToWorld */])(lngLat, scale);
  7365. }
  7366. /**
  7367. * Unproject world point [x,y] on map onto {lat, lon} on sphere
  7368. *
  7369. * @param {object|Vector} xy - object with {x,y} members
  7370. * representing point on projected map plane
  7371. * @return {GeoCoordinates} - object with {lat,lon} of point on sphere.
  7372. * Has toArray method if you need a GeoJSON Array.
  7373. * Per cartographic tradition, lat and lon are specified as degrees.
  7374. */
  7375. }, {
  7376. key: 'unprojectFlat',
  7377. value: function unprojectFlat(xy) {
  7378. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  7379. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__["b" /* worldToLngLat */])(xy, scale);
  7380. }
  7381. /**
  7382. * Get the map center that place a given [lng, lat] coordinate at screen
  7383. * point [x, y]
  7384. *
  7385. * @param {Array} lngLat - [lng,lat] coordinates
  7386. * Specifies a point on the sphere.
  7387. * @param {Array} pos - [x,y] coordinates
  7388. * Specifies a point on the screen.
  7389. * @return {Array} [lng,lat] new map center.
  7390. */
  7391. }, {
  7392. key: 'getMapCenterByLngLatPosition',
  7393. value: function getMapCenterByLngLatPosition(_ref2) {
  7394. var lngLat = _ref2.lngLat,
  7395. pos = _ref2.pos;
  7396. var fromLocation = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__["d" /* pixelsToWorld */])(pos, this.pixelUnprojectionMatrix);
  7397. var toLocation = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__["a" /* lngLatToWorld */])(lngLat, this.scale);
  7398. var translate = __WEBPACK_IMPORTED_MODULE_3_gl_vec2_add___default()([], toLocation, __WEBPACK_IMPORTED_MODULE_4_gl_vec2_negate___default()([], fromLocation));
  7399. var newCenter = __WEBPACK_IMPORTED_MODULE_3_gl_vec2_add___default()([], this.center, translate);
  7400. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__web_mercator_utils__["b" /* worldToLngLat */])(newCenter, this.scale);
  7401. }
  7402. // Legacy method name
  7403. }, {
  7404. key: 'getLocationAtPoint',
  7405. value: function getLocationAtPoint(_ref3) {
  7406. var lngLat = _ref3.lngLat,
  7407. pos = _ref3.pos;
  7408. return this.getMapCenterByLngLatPosition({ lngLat: lngLat, pos: pos });
  7409. }
  7410. /**
  7411. * Returns a new viewport that fit around the given rectangle.
  7412. * Only supports non-perspective mode.
  7413. * @param {Array} bounds - [[lon, lat], [lon, lat]]
  7414. * @param {Number} [options.padding] - The amount of padding in pixels to add to the given bounds.
  7415. * @param {Array} [options.offset] - The center of the given bounds relative to the map's center,
  7416. * [x, y] measured in pixels.
  7417. * @returns {WebMercatorViewport}
  7418. */
  7419. }, {
  7420. key: 'fitBounds',
  7421. value: function fitBounds(bounds) {
  7422. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  7423. var width = this.width,
  7424. height = this.height;
  7425. var _fitBounds2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__fit_bounds__["a" /* default */])(Object.assign({ width: width, height: height, bounds: bounds }, options)),
  7426. longitude = _fitBounds2.longitude,
  7427. latitude = _fitBounds2.latitude,
  7428. zoom = _fitBounds2.zoom;
  7429. return new WebMercatorViewport({ width: width, height: height, longitude: longitude, latitude: latitude, zoom: zoom });
  7430. }
  7431. }]);
  7432. return WebMercatorViewport;
  7433. }(__WEBPACK_IMPORTED_MODULE_0__viewport__["a" /* default */]);
  7434. /* harmony default export */ __webpack_exports__["a"] = (WebMercatorViewport);
  7435. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWItbWVyY2F0b3Itdmlld3BvcnQuanMiXSwibmFtZXMiOlsiVmlld3BvcnQiLCJ6b29tVG9TY2FsZSIsImdldFdvcmxkUG9zaXRpb24iLCJwaXhlbHNUb1dvcmxkIiwibG5nTGF0VG9Xb3JsZCIsIndvcmxkVG9MbmdMYXQiLCJnZXRQcm9qZWN0aW9uTWF0cml4IiwiZ2V0Vmlld01hdHJpeCIsImZpdEJvdW5kcyIsInZlYzJfYWRkIiwidmVjMl9uZWdhdGUiLCJXZWJNZXJjYXRvclZpZXdwb3J0Iiwid2lkdGgiLCJoZWlnaHQiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInpvb20iLCJwaXRjaCIsImJlYXJpbmciLCJhbHRpdHVkZSIsImZhclpNdWx0aXBsaWVyIiwic2NhbGUiLCJNYXRoIiwibWF4IiwiY2VudGVyIiwicHJvamVjdGlvbk1hdHJpeCIsInZpZXdNYXRyaXgiLCJmbGlwWSIsIk9iamVjdCIsImZyZWV6ZSIsImxuZ0xhdCIsInh5IiwicG9zIiwiZnJvbUxvY2F0aW9uIiwicGl4ZWxVbnByb2plY3Rpb25NYXRyaXgiLCJ0b0xvY2F0aW9uIiwidHJhbnNsYXRlIiwibmV3Q2VudGVyIiwiZ2V0TWFwQ2VudGVyQnlMbmdMYXRQb3NpdGlvbiIsImJvdW5kcyIsIm9wdGlvbnMiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQSxPQUFPQSxRQUFQLE1BQXFCLFlBQXJCOztBQUVBLFNBQ0VDLFdBREYsRUFFRUMsZ0JBRkYsRUFHRUMsYUFIRixFQUlFQyxhQUpGLEVBS0VDLGFBTEYsRUFNRUMsbUJBTkYsRUFPRUMsYUFQRixRQVFPLHNCQVJQO0FBU0EsT0FBT0MsVUFBUCxNQUFzQixjQUF0Qjs7QUFFQSxPQUFPQyxRQUFQLE1BQXFCLGFBQXJCO0FBQ0EsT0FBT0MsV0FBUCxNQUF3QixnQkFBeEI7O0lBRXFCQyxtQjs7O0FBQ25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBO0FBQ0EsaUNBV1E7QUFBQSxtRkFBSixFQUFJO0FBQUEsUUFUTkMsS0FTTSxRQVROQSxLQVNNO0FBQUEsUUFSTkMsTUFRTSxRQVJOQSxNQVFNO0FBQUEsNkJBUE5DLFFBT007QUFBQSxRQVBOQSxRQU9NLGlDQVBLLENBT0w7QUFBQSw4QkFOTkMsU0FNTTtBQUFBLFFBTk5BLFNBTU0sa0NBTk0sQ0FNTjtBQUFBLHlCQUxOQyxJQUtNO0FBQUEsUUFMTkEsSUFLTSw2QkFMQyxDQUtEO0FBQUEsMEJBSk5DLEtBSU07QUFBQSxRQUpOQSxLQUlNLDhCQUpFLENBSUY7QUFBQSw0QkFITkMsT0FHTTtBQUFBLFFBSE5BLE9BR00sZ0NBSEksQ0FHSjtBQUFBLDZCQUZOQyxRQUVNO0FBQUEsUUFGTkEsUUFFTSxpQ0FGSyxHQUVMO0FBQUEsbUNBRE5DLGNBQ007QUFBQSxRQUROQSxjQUNNLHVDQURXLEVBQ1g7O0FBQUE7O0FBQ047QUFDQVIsWUFBUUEsU0FBUyxDQUFqQjtBQUNBQyxhQUFTQSxVQUFVLENBQW5COztBQUVBLFFBQU1RLFFBQVFwQixZQUFZZSxJQUFaLENBQWQ7QUFDQTtBQUNBO0FBQ0FHLGVBQVdHLEtBQUtDLEdBQUwsQ0FBUyxJQUFULEVBQWVKLFFBQWYsQ0FBWDs7QUFFQSxRQUFNSyxTQUFTdEIsaUJBQWlCLEVBQUNhLG9CQUFELEVBQVlELGtCQUFaLEVBQXNCTyxZQUF0QixFQUFqQixDQUFmOztBQUVBLFFBQU1JLG1CQUFtQm5CLG9CQUFvQjtBQUMzQ00sa0JBRDJDO0FBRTNDQyxvQkFGMkM7QUFHM0NJLGtCQUgyQztBQUkzQ0Msc0JBSjJDO0FBSzNDQyx3QkFMMkM7QUFNM0NDO0FBTjJDLEtBQXBCLENBQXpCOztBQVNBLFFBQU1NLGFBQWFuQixjQUFjO0FBQy9CTSxvQkFEK0I7QUFFL0JXLG9CQUYrQjtBQUcvQlAsa0JBSCtCO0FBSS9CQyxzQkFKK0I7QUFLL0JDLHdCQUwrQjtBQU0vQlEsYUFBTztBQU53QixLQUFkLENBQW5COztBQVdBO0FBaENNLDBJQThCQSxFQUFDZixZQUFELEVBQVFDLGNBQVIsRUFBZ0JhLHNCQUFoQixFQUE0QkQsa0NBQTVCLEVBOUJBOztBQWlDTixVQUFLWCxRQUFMLEdBQWdCQSxRQUFoQjtBQUNBLFVBQUtDLFNBQUwsR0FBaUJBLFNBQWpCO0FBQ0EsVUFBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsVUFBS0MsS0FBTCxHQUFhQSxLQUFiO0FBQ0EsVUFBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsVUFBS0MsUUFBTCxHQUFnQkEsUUFBaEI7O0FBRUEsVUFBS0UsS0FBTCxHQUFhQSxLQUFiO0FBQ0EsVUFBS0csTUFBTCxHQUFjQSxNQUFkOztBQUVBSSxXQUFPQyxNQUFQO0FBM0NNO0FBNENQO0FBQ0Q7O0FBRUE7Ozs7Ozs7Ozs7Ozs7O2dDQVVZQyxNLEVBQTRCO0FBQUEsVUFBcEJULEtBQW9CLHVFQUFaLEtBQUtBLEtBQU87O0FBQ3RDLGFBQU9qQixjQUFjMEIsTUFBZCxFQUFzQlQsS0FBdEIsQ0FBUDtBQUNEOztBQUVEOzs7Ozs7Ozs7Ozs7a0NBU2NVLEUsRUFBd0I7QUFBQSxVQUFwQlYsS0FBb0IsdUVBQVosS0FBS0EsS0FBTzs7QUFDcEMsYUFBT2hCLGNBQWMwQixFQUFkLEVBQWtCVixLQUFsQixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7d0RBVTRDO0FBQUEsVUFBZFMsTUFBYyxTQUFkQSxNQUFjO0FBQUEsVUFBTkUsR0FBTSxTQUFOQSxHQUFNOztBQUMxQyxVQUFNQyxlQUFlOUIsY0FBYzZCLEdBQWQsRUFBbUIsS0FBS0UsdUJBQXhCLENBQXJCO0FBQ0EsVUFBTUMsYUFBYS9CLGNBQWMwQixNQUFkLEVBQXNCLEtBQUtULEtBQTNCLENBQW5COztBQUVBLFVBQU1lLFlBQVkzQixTQUFTLEVBQVQsRUFBYTBCLFVBQWIsRUFBeUJ6QixZQUFZLEVBQVosRUFBZ0J1QixZQUFoQixDQUF6QixDQUFsQjtBQUNBLFVBQU1JLFlBQVk1QixTQUFTLEVBQVQsRUFBYSxLQUFLZSxNQUFsQixFQUEwQlksU0FBMUIsQ0FBbEI7O0FBRUEsYUFBTy9CLGNBQWNnQyxTQUFkLEVBQXlCLEtBQUtoQixLQUE5QixDQUFQO0FBQ0Q7O0FBRUQ7Ozs7OENBQ2tDO0FBQUEsVUFBZFMsTUFBYyxTQUFkQSxNQUFjO0FBQUEsVUFBTkUsR0FBTSxTQUFOQSxHQUFNOztBQUNoQyxhQUFPLEtBQUtNLDRCQUFMLENBQWtDLEVBQUNSLGNBQUQsRUFBU0UsUUFBVCxFQUFsQyxDQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7Ozs4QkFTVU8sTSxFQUFzQjtBQUFBLFVBQWRDLE9BQWMsdUVBQUosRUFBSTtBQUFBLFVBQ3ZCNUIsS0FEdUIsR0FDTixJQURNLENBQ3ZCQSxLQUR1QjtBQUFBLFVBQ2hCQyxNQURnQixHQUNOLElBRE0sQ0FDaEJBLE1BRGdCOztBQUFBLHdCQUVNTCxXQUFVb0IsT0FBT2EsTUFBUCxDQUFjLEVBQUM3QixZQUFELEVBQVFDLGNBQVIsRUFBZ0IwQixjQUFoQixFQUFkLEVBQXVDQyxPQUF2QyxDQUFWLENBRk47QUFBQSxVQUV2QnpCLFNBRnVCLGVBRXZCQSxTQUZ1QjtBQUFBLFVBRVpELFFBRlksZUFFWkEsUUFGWTtBQUFBLFVBRUZFLElBRkUsZUFFRkEsSUFGRTs7QUFHOUIsYUFBTyxJQUFJTCxtQkFBSixDQUF3QixFQUFDQyxZQUFELEVBQVFDLGNBQVIsRUFBZ0JFLG9CQUFoQixFQUEyQkQsa0JBQTNCLEVBQXFDRSxVQUFyQyxFQUF4QixDQUFQO0FBQ0Q7Ozs7RUExSjhDaEIsUTs7ZUFBNUJXLG1CIiwiZmlsZSI6IndlYi1tZXJjYXRvci12aWV3cG9ydC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFZpZXcgYW5kIFByb2plY3Rpb24gTWF0cml4IGNhbGN1bGF0aW9ucyBmb3IgbWFwYm94LWpzIHN0eWxlIG1hcCB2aWV3IHByb3BlcnRpZXNcbmltcG9ydCBWaWV3cG9ydCBmcm9tICcuL3ZpZXdwb3J0JztcblxuaW1wb3J0IHtcbiAgem9vbVRvU2NhbGUsXG4gIGdldFdvcmxkUG9zaXRpb24sXG4gIHBpeGVsc1RvV29ybGQsXG4gIGxuZ0xhdFRvV29ybGQsXG4gIHdvcmxkVG9MbmdMYXQsXG4gIGdldFByb2plY3Rpb25NYXRyaXgsXG4gIGdldFZpZXdNYXRyaXhcbn0gZnJvbSAnLi93ZWItbWVyY2F0b3ItdXRpbHMnO1xuaW1wb3J0IGZpdEJvdW5kcyBmcm9tICcuL2ZpdC1ib3VuZHMnO1xuXG5pbXBvcnQgdmVjMl9hZGQgZnJvbSAnZ2wtdmVjMi9hZGQnO1xuaW1wb3J0IHZlYzJfbmVnYXRlIGZyb20gJ2dsLXZlYzIvbmVnYXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViTWVyY2F0b3JWaWV3cG9ydCBleHRlbmRzIFZpZXdwb3J0IHtcbiAgLyoqXG4gICAqIEBjbGFzc2Rlc2NcbiAgICogQ3JlYXRlcyB2aWV3L3Byb2plY3Rpb24gbWF0cmljZXMgZnJvbSBtZXJjYXRvciBwYXJhbXNcbiAgICogTm90ZTogVGhlIFZpZXdwb3J0IGlzIGltbXV0YWJsZSBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBvbmx5IGhhcyBhY2Nlc3NvcnMuXG4gICAqIEEgbmV3IHZpZXdwb3J0IGluc3RhbmNlIHNob3VsZCBiZSBjcmVhdGVkIGlmIGFueSBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZC5cbiAgICpcbiAgICogQGNsYXNzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHQgLSBvcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcHQud2lkdGg9MSAtIFdpZHRoIG9mIFwidmlld3BvcnRcIiBvciB3aW5kb3dcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdC5oZWlnaHQ9MSAtIEhlaWdodCBvZiBcInZpZXdwb3J0XCIgb3Igd2luZG93XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcHQuc2NhbGU9MSAtIEVpdGhlciB1c2Ugc2NhbGUgb3Igem9vbVxuICAgKiBAcGFyYW0ge051bWJlcn0gb3B0LnBpdGNoPTAgLSBDYW1lcmEgYW5nbGUgaW4gZGVncmVlcyAoMCBpcyBzdHJhaWdodCBkb3duKVxuICAgKiBAcGFyYW0ge051bWJlcn0gb3B0LmJlYXJpbmc9MCAtIE1hcCByb3RhdGlvbiBpbiBkZWdyZWVzICgwIG1lYW5zIG5vcnRoIGlzIHVwKVxuICAgKiBAcGFyYW0ge051bWJlcn0gb3B0LmFsdGl0dWRlPSAtIEFsdGl0dWRlIG9mIGNhbWVyYSBpbiBzY3JlZW4gdW5pdHNcbiAgICpcbiAgICogV2ViIG1lcmNhdG9yIHByb2plY3Rpb24gc2hvcnQtaGFuZCBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcHQubGF0aXR1ZGUgLSBDZW50ZXIgb2Ygdmlld3BvcnQgb24gbWFwIChhbHRlcm5hdGl2ZSB0byBvcHQuY2VudGVyKVxuICAgKiBAcGFyYW0ge051bWJlcn0gb3B0LmxvbmdpdHVkZSAtIENlbnRlciBvZiB2aWV3cG9ydCBvbiBtYXAgKGFsdGVybmF0aXZlIHRvIG9wdC5jZW50ZXIpXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcHQuem9vbSAtIFNjYWxlID0gTWF0aC5wb3coMix6b29tKSBvbiBtYXAgKGFsdGVybmF0aXZlIHRvIG9wdC5zY2FsZSlcblxuICAgKiBOb3RlczpcbiAgICogIC0gT25seSBvbmUgb2YgY2VudGVyIG9yIFtsYXRpdHVkZSwgbG9uZ2l0dWRlXSBjYW4gYmUgc3BlY2lmaWVkXG4gICAqICAtIFtsYXRpdHVkZSwgbG9uZ2l0dWRlXSBjYW4gb25seSBiZSBzcGVjaWZpZWQgd2hlbiBcIm1lcmNhdG9yXCIgaXMgdHJ1ZVxuICAgKiAgLSBBbHRpdHVkZSBoYXMgYSBkZWZhdWx0IHZhbHVlIHRoYXQgbWF0Y2hlcyBhc3N1bXB0aW9ucyBpbiBtYXBib3gtZ2xcbiAgICogIC0gd2lkdGggYW5kIGhlaWdodCBhcmUgZm9yY2VkIHRvIDEgaWYgc3VwcGxpZWQgYXMgMCwgdG8gYXZvaWRcbiAgICogICAgZGl2aXNpb24gYnkgemVyby4gVGhpcyBpcyBpbnRlbmRlZCB0byByZWR1Y2UgdGhlIGJ1cmRlbiBvZiBhcHBzIHRvXG4gICAqICAgIHRvIGNoZWNrIHZhbHVlcyBiZWZvcmUgaW5zdGFudGlhdGluZyBhIFZpZXdwb3J0LlxuICAgKi9cbiAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgLy8gTWFwIHN0YXRlXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGxhdGl0dWRlID0gMCxcbiAgICBsb25naXR1ZGUgPSAwLFxuICAgIHpvb20gPSAwLFxuICAgIHBpdGNoID0gMCxcbiAgICBiZWFyaW5nID0gMCxcbiAgICBhbHRpdHVkZSA9IDEuNSxcbiAgICBmYXJaTXVsdGlwbGllciA9IDEwXG4gIH0gPSB7fSkge1xuICAgIC8vIFNpbGVudGx5IGFsbG93IGFwcHMgdG8gc2VuZCBpbiAwLDAgdG8gZmFjaWxpdGF0ZSBpc29tb3JwaGljIHJlbmRlciBldGNcbiAgICB3aWR0aCA9IHdpZHRoIHx8IDE7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDE7XG5cbiAgICBjb25zdCBzY2FsZSA9IHpvb21Ub1NjYWxlKHpvb20pO1xuICAgIC8vIEFsdGl0dWRlIC0gcHJldmVudCBkaXZpc2lvbiBieSAwXG4gICAgLy8gVE9ETyAtIGp1c3QgdGhyb3cgYW4gRXJyb3IgaW5zdGVhZD9cbiAgICBhbHRpdHVkZSA9IE1hdGgubWF4KDAuNzUsIGFsdGl0dWRlKTtcblxuICAgIGNvbnN0IGNlbnRlciA9IGdldFdvcmxkUG9zaXRpb24oe2xvbmdpdHVkZSwgbGF0aXR1ZGUsIHNjYWxlfSk7XG5cbiAgICBjb25zdCBwcm9qZWN0aW9uTWF0cml4ID0gZ2V0UHJvamVjdGlvbk1hdHJpeCh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHBpdGNoLFxuICAgICAgYmVhcmluZyxcbiAgICAgIGFsdGl0dWRlLFxuICAgICAgZmFyWk11bHRpcGxpZXJcbiAgICB9KTtcblxuICAgIGNvbnN0IHZpZXdNYXRyaXggPSBnZXRWaWV3TWF0cml4KHtcbiAgICAgIGhlaWdodCxcbiAgICAgIGNlbnRlcixcbiAgICAgIHBpdGNoLFxuICAgICAgYmVhcmluZyxcbiAgICAgIGFsdGl0dWRlLFxuICAgICAgZmxpcFk6IHRydWVcbiAgICB9KTtcblxuICAgIHN1cGVyKHt3aWR0aCwgaGVpZ2h0LCB2aWV3TWF0cml4LCBwcm9qZWN0aW9uTWF0cml4fSk7XG5cbiAgICAvLyBTYXZlIHBhcmFtZXRlcnNcbiAgICB0aGlzLmxhdGl0dWRlID0gbGF0aXR1ZGU7XG4gICAgdGhpcy5sb25naXR1ZGUgPSBsb25naXR1ZGU7XG4gICAgdGhpcy56b29tID0gem9vbTtcbiAgICB0aGlzLnBpdGNoID0gcGl0Y2g7XG4gICAgdGhpcy5iZWFyaW5nID0gYmVhcmluZztcbiAgICB0aGlzLmFsdGl0dWRlID0gYWx0aXR1ZGU7XG5cbiAgICB0aGlzLnNjYWxlID0gc2NhbGU7XG4gICAgdGhpcy5jZW50ZXIgPSBjZW50ZXI7XG5cbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG4gIC8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IFtsbmcsbGF0XSBvbiBzcGhlcmUgb250byBbeCx5XSBvbiA1MTIqNTEyIE1lcmNhdG9yIFpvb20gMCB0aWxlLlxuICAgKiBQZXJmb3JtcyB0aGUgbm9ubGluZWFyIHBhcnQgb2YgdGhlIHdlYiBtZXJjYXRvciBwcm9qZWN0aW9uLlxuICAgKiBSZW1haW5pbmcgcHJvamVjdGlvbiBpcyBkb25lIHdpdGggNHg0IG1hdHJpY2VzIHdoaWNoIGFsc28gaGFuZGxlc1xuICAgKiBwZXJzcGVjdGl2ZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gbG5nTGF0IC0gW2xuZywgbGF0XSBjb29yZGluYXRlc1xuICAgKiAgIFNwZWNpZmllcyBhIHBvaW50IG9uIHRoZSBzcGhlcmUgdG8gcHJvamVjdCBvbnRvIHRoZSBtYXAuXG4gICAqIEByZXR1cm4ge0FycmF5fSBbeCx5XSBjb29yZGluYXRlcy5cbiAgICovXG4gIHByb2plY3RGbGF0KGxuZ0xhdCwgc2NhbGUgPSB0aGlzLnNjYWxlKSB7XG4gICAgcmV0dXJuIGxuZ0xhdFRvV29ybGQobG5nTGF0LCBzY2FsZSk7XG4gIH1cblxuICAvKipcbiAgICogVW5wcm9qZWN0IHdvcmxkIHBvaW50IFt4LHldIG9uIG1hcCBvbnRvIHtsYXQsIGxvbn0gb24gc3BoZXJlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fFZlY3Rvcn0geHkgLSBvYmplY3Qgd2l0aCB7eCx5fSBtZW1iZXJzXG4gICAqICByZXByZXNlbnRpbmcgcG9pbnQgb24gcHJvamVjdGVkIG1hcCBwbGFuZVxuICAgKiBAcmV0dXJuIHtHZW9Db29yZGluYXRlc30gLSBvYmplY3Qgd2l0aCB7bGF0LGxvbn0gb2YgcG9pbnQgb24gc3BoZXJlLlxuICAgKiAgIEhhcyB0b0FycmF5IG1ldGhvZCBpZiB5b3UgbmVlZCBhIEdlb0pTT04gQXJyYXkuXG4gICAqICAgUGVyIGNhcnRvZ3JhcGhpYyB0cmFkaXRpb24sIGxhdCBhbmQgbG9uIGFyZSBzcGVjaWZpZWQgYXMgZGVncmVlcy5cbiAgICovXG4gIHVucHJvamVjdEZsYXQoeHksIHNjYWxlID0gdGhpcy5zY2FsZSkge1xuICAgIHJldHVybiB3b3JsZFRvTG5nTGF0KHh5LCBzY2FsZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtYXAgY2VudGVyIHRoYXQgcGxhY2UgYSBnaXZlbiBbbG5nLCBsYXRdIGNvb3JkaW5hdGUgYXQgc2NyZWVuXG4gICAqIHBvaW50IFt4LCB5XVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBsbmdMYXQgLSBbbG5nLGxhdF0gY29vcmRpbmF0ZXNcbiAgICogICBTcGVjaWZpZXMgYSBwb2ludCBvbiB0aGUgc3BoZXJlLlxuICAgKiBAcGFyYW0ge0FycmF5fSBwb3MgLSBbeCx5XSBjb29yZGluYXRlc1xuICAgKiAgIFNwZWNpZmllcyBhIHBvaW50IG9uIHRoZSBzY3JlZW4uXG4gICAqIEByZXR1cm4ge0FycmF5fSBbbG5nLGxhdF0gbmV3IG1hcCBjZW50ZXIuXG4gICAqL1xuICBnZXRNYXBDZW50ZXJCeUxuZ0xhdFBvc2l0aW9uKHtsbmdMYXQsIHBvc30pIHtcbiAgICBjb25zdCBmcm9tTG9jYXRpb24gPSBwaXhlbHNUb1dvcmxkKHBvcywgdGhpcy5waXhlbFVucHJvamVjdGlvbk1hdHJpeCk7XG4gICAgY29uc3QgdG9Mb2NhdGlvbiA9IGxuZ0xhdFRvV29ybGQobG5nTGF0LCB0aGlzLnNjYWxlKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHZlYzJfYWRkKFtdLCB0b0xvY2F0aW9uLCB2ZWMyX25lZ2F0ZShbXSwgZnJvbUxvY2F0aW9uKSk7XG4gICAgY29uc3QgbmV3Q2VudGVyID0gdmVjMl9hZGQoW10sIHRoaXMuY2VudGVyLCB0cmFuc2xhdGUpO1xuXG4gICAgcmV0dXJuIHdvcmxkVG9MbmdMYXQobmV3Q2VudGVyLCB0aGlzLnNjYWxlKTtcbiAgfVxuXG4gIC8vIExlZ2FjeSBtZXRob2QgbmFtZVxuICBnZXRMb2NhdGlvbkF0UG9pbnQoe2xuZ0xhdCwgcG9zfSkge1xuICAgIHJldHVybiB0aGlzLmdldE1hcENlbnRlckJ5TG5nTGF0UG9zaXRpb24oe2xuZ0xhdCwgcG9zfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyB2aWV3cG9ydCB0aGF0IGZpdCBhcm91bmQgdGhlIGdpdmVuIHJlY3RhbmdsZS5cbiAgICogT25seSBzdXBwb3J0cyBub24tcGVyc3BlY3RpdmUgbW9kZS5cbiAgICogQHBhcmFtIHtBcnJheX0gYm91bmRzIC0gW1tsb24sIGxhdF0sIFtsb24sIGxhdF1dXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5wYWRkaW5nXSAtIFRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgdG8gYWRkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLm9mZnNldF0gLSBUaGUgY2VudGVyIG9mIHRoZSBnaXZlbiBib3VuZHMgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGNlbnRlcixcbiAgICogICAgW3gsIHldIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICogQHJldHVybnMge1dlYk1lcmNhdG9yVmlld3BvcnR9XG4gICAqL1xuICBmaXRCb3VuZHMoYm91bmRzLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzO1xuICAgIGNvbnN0IHtsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tfSA9IGZpdEJvdW5kcyhPYmplY3QuYXNzaWduKHt3aWR0aCwgaGVpZ2h0LCBib3VuZHN9LCBvcHRpb25zKSk7XG4gICAgcmV0dXJuIG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHt3aWR0aCwgaGVpZ2h0LCBsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tfSk7XG4gIH1cblxufVxuIl19
  7436. /***/ }),
  7437. /* 82 */
  7438. /***/ (function(module, exports, __webpack_require__) {
  7439. "use strict";
  7440. Object.defineProperty(exports, "__esModule", {
  7441. value: true
  7442. });
  7443. exports.MAPBOX_LIMITS = undefined;
  7444. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  7445. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  7446. var _viewState = __webpack_require__(180);
  7447. var _viewState2 = _interopRequireDefault(_viewState);
  7448. var _viewportMercatorProject = __webpack_require__(79);
  7449. var _viewportMercatorProject2 = _interopRequireDefault(_viewportMercatorProject);
  7450. var _assert = __webpack_require__(1);
  7451. var _assert2 = _interopRequireDefault(_assert);
  7452. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  7453. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  7454. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  7455. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  7456. // MAPBOX LIMITS
  7457. var MAPBOX_LIMITS = exports.MAPBOX_LIMITS = {
  7458. minZoom: 0,
  7459. maxZoom: 20,
  7460. minPitch: 0,
  7461. maxPitch: 60
  7462. };
  7463. var DEFAULT_STATE = {
  7464. pitch: 0,
  7465. bearing: 0,
  7466. altitude: 1.5
  7467. };
  7468. /* Utils */
  7469. function clamp(value, min, max) {
  7470. return value < min ? min : value > max ? max : value;
  7471. }
  7472. var MapState = function (_ViewState) {
  7473. _inherits(MapState, _ViewState);
  7474. function MapState() {
  7475. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  7476. width = _ref.width,
  7477. height = _ref.height,
  7478. latitude = _ref.latitude,
  7479. longitude = _ref.longitude,
  7480. zoom = _ref.zoom,
  7481. _ref$bearing = _ref.bearing,
  7482. bearing = _ref$bearing === undefined ? DEFAULT_STATE.bearing : _ref$bearing,
  7483. _ref$pitch = _ref.pitch,
  7484. pitch = _ref$pitch === undefined ? DEFAULT_STATE.pitch : _ref$pitch,
  7485. _ref$altitude = _ref.altitude,
  7486. altitude = _ref$altitude === undefined ? DEFAULT_STATE.altitude : _ref$altitude,
  7487. _ref$maxZoom = _ref.maxZoom,
  7488. maxZoom = _ref$maxZoom === undefined ? MAPBOX_LIMITS.maxZoom : _ref$maxZoom,
  7489. _ref$minZoom = _ref.minZoom,
  7490. minZoom = _ref$minZoom === undefined ? MAPBOX_LIMITS.minZoom : _ref$minZoom,
  7491. _ref$maxPitch = _ref.maxPitch,
  7492. maxPitch = _ref$maxPitch === undefined ? MAPBOX_LIMITS.maxPitch : _ref$maxPitch,
  7493. _ref$minPitch = _ref.minPitch,
  7494. minPitch = _ref$minPitch === undefined ? MAPBOX_LIMITS.minPitch : _ref$minPitch,
  7495. startPanLngLat = _ref.startPanLngLat,
  7496. startZoomLngLat = _ref.startZoomLngLat,
  7497. startBearing = _ref.startBearing,
  7498. startPitch = _ref.startPitch,
  7499. startZoom = _ref.startZoom;
  7500. _classCallCheck(this, MapState);
  7501. (0, _assert2.default)(Number.isFinite(longitude), '`longitude` must be supplied');
  7502. (0, _assert2.default)(Number.isFinite(latitude), '`latitude` must be supplied');
  7503. (0, _assert2.default)(Number.isFinite(zoom), '`zoom` must be supplied');
  7504. var _this = _possibleConstructorReturn(this, (MapState.__proto__ || Object.getPrototypeOf(MapState)).call(this, {
  7505. width: width,
  7506. height: height,
  7507. latitude: latitude,
  7508. longitude: longitude,
  7509. zoom: zoom,
  7510. bearing: bearing,
  7511. pitch: pitch,
  7512. altitude: altitude,
  7513. maxZoom: maxZoom,
  7514. minZoom: minZoom,
  7515. maxPitch: maxPitch,
  7516. minPitch: minPitch
  7517. }));
  7518. _this._interactiveState = {
  7519. startPanLngLat: startPanLngLat,
  7520. startZoomLngLat: startZoomLngLat,
  7521. startBearing: startBearing,
  7522. startPitch: startPitch,
  7523. startZoom: startZoom
  7524. };
  7525. return _this;
  7526. }
  7527. /* Public API */
  7528. _createClass(MapState, [{
  7529. key: 'getViewportProps',
  7530. value: function getViewportProps() {
  7531. return this._viewportProps;
  7532. }
  7533. }, {
  7534. key: 'getInteractiveState',
  7535. value: function getInteractiveState() {
  7536. return this._interactiveState;
  7537. }
  7538. /**
  7539. * Start panning
  7540. * @param {[Number, Number]} pos - position on screen where the pointer grabs
  7541. */
  7542. }, {
  7543. key: 'panStart',
  7544. value: function panStart(_ref2) {
  7545. var pos = _ref2.pos;
  7546. return this._getUpdatedState({
  7547. startPanLngLat: this._unproject(pos)
  7548. });
  7549. }
  7550. /**
  7551. * Pan
  7552. * @param {[Number, Number]} pos - position on screen where the pointer is
  7553. * @param {[Number, Number], optional} startPos - where the pointer grabbed at
  7554. * the start of the operation. Must be supplied of `panStart()` was not called
  7555. */
  7556. }, {
  7557. key: 'pan',
  7558. value: function pan(_ref3) {
  7559. var pos = _ref3.pos,
  7560. startPos = _ref3.startPos;
  7561. var startPanLngLat = this._interactiveState.startPanLngLat || this._unproject(startPos);
  7562. if (!startPanLngLat) {
  7563. return this;
  7564. }
  7565. var _calculateNewLngLat2 = this._calculateNewLngLat({ startPanLngLat: startPanLngLat, pos: pos }),
  7566. _calculateNewLngLat3 = _slicedToArray(_calculateNewLngLat2, 2),
  7567. longitude = _calculateNewLngLat3[0],
  7568. latitude = _calculateNewLngLat3[1];
  7569. return this._getUpdatedState({
  7570. longitude: longitude,
  7571. latitude: latitude
  7572. });
  7573. }
  7574. /**
  7575. * End panning
  7576. * Must call if `panStart()` was called
  7577. */
  7578. }, {
  7579. key: 'panEnd',
  7580. value: function panEnd() {
  7581. return this._getUpdatedState({
  7582. startPanLngLat: null
  7583. });
  7584. }
  7585. /**
  7586. * Start rotating
  7587. * @param {[Number, Number]} pos - position on screen where the center is
  7588. */
  7589. }, {
  7590. key: 'rotateStart',
  7591. value: function rotateStart(_ref4) {
  7592. var pos = _ref4.pos;
  7593. return this._getUpdatedState({
  7594. startBearing: this._viewportProps.bearing,
  7595. startPitch: this._viewportProps.pitch
  7596. });
  7597. }
  7598. /**
  7599. * Rotate
  7600. * @param {Number} deltaScaleX - a number between [-1, 1] specifying the
  7601. * change to bearing.
  7602. * @param {Number} deltaScaleY - a number between [-1, 1] specifying the
  7603. * change to pitch. -1 sets to minPitch and 1 sets to maxPitch.
  7604. */
  7605. }, {
  7606. key: 'rotate',
  7607. value: function rotate(_ref5) {
  7608. var _ref5$deltaScaleX = _ref5.deltaScaleX,
  7609. deltaScaleX = _ref5$deltaScaleX === undefined ? 0 : _ref5$deltaScaleX,
  7610. _ref5$deltaScaleY = _ref5.deltaScaleY,
  7611. deltaScaleY = _ref5$deltaScaleY === undefined ? 0 : _ref5$deltaScaleY;
  7612. var _interactiveState = this._interactiveState,
  7613. startBearing = _interactiveState.startBearing,
  7614. startPitch = _interactiveState.startPitch;
  7615. if (!Number.isFinite(startBearing) || !Number.isFinite(startPitch)) {
  7616. return this;
  7617. }
  7618. var _calculateNewPitchAnd = this._calculateNewPitchAndBearing({
  7619. deltaScaleX: deltaScaleX,
  7620. deltaScaleY: deltaScaleY,
  7621. startBearing: startBearing,
  7622. startPitch: startPitch
  7623. }),
  7624. pitch = _calculateNewPitchAnd.pitch,
  7625. bearing = _calculateNewPitchAnd.bearing;
  7626. return this._getUpdatedState({
  7627. bearing: bearing,
  7628. pitch: pitch
  7629. });
  7630. }
  7631. /**
  7632. * End rotating
  7633. * Must call if `rotateStart()` was called
  7634. */
  7635. }, {
  7636. key: 'rotateEnd',
  7637. value: function rotateEnd() {
  7638. return this._getUpdatedState({
  7639. startBearing: null,
  7640. startPitch: null
  7641. });
  7642. }
  7643. /**
  7644. * Start zooming
  7645. * @param {[Number, Number]} pos - position on screen where the center is
  7646. */
  7647. }, {
  7648. key: 'zoomStart',
  7649. value: function zoomStart(_ref6) {
  7650. var pos = _ref6.pos;
  7651. return this._getUpdatedState({
  7652. startZoomLngLat: this._unproject(pos),
  7653. startZoom: this._viewportProps.zoom
  7654. });
  7655. }
  7656. /**
  7657. * Zoom
  7658. * @param {[Number, Number]} pos - position on screen where the current center is
  7659. * @param {[Number, Number]} startPos - the center position at
  7660. * the start of the operation. Must be supplied of `zoomStart()` was not called
  7661. * @param {Number} scale - a number between [0, 1] specifying the accumulated
  7662. * relative scale.
  7663. */
  7664. }, {
  7665. key: 'zoom',
  7666. value: function zoom(_ref7) {
  7667. var pos = _ref7.pos,
  7668. startPos = _ref7.startPos,
  7669. scale = _ref7.scale;
  7670. (0, _assert2.default)(scale > 0, '`scale` must be a positive number');
  7671. // Make sure we zoom around the current mouse position rather than map center
  7672. var _interactiveState2 = this._interactiveState,
  7673. startZoom = _interactiveState2.startZoom,
  7674. startZoomLngLat = _interactiveState2.startZoomLngLat;
  7675. if (!Number.isFinite(startZoom)) {
  7676. // We have two modes of zoom:
  7677. // scroll zoom that are discrete events (transform from the current zoom level),
  7678. // and pinch zoom that are continuous events (transform from the zoom level when
  7679. // pinch started).
  7680. // If startZoom state is defined, then use the startZoom state;
  7681. // otherwise assume discrete zooming
  7682. startZoom = this._viewportProps.zoom;
  7683. startZoomLngLat = this._unproject(startPos) || this._unproject(pos);
  7684. }
  7685. // take the start lnglat and put it where the mouse is down.
  7686. (0, _assert2.default)(startZoomLngLat, '`startZoomLngLat` prop is required ' + 'for zoom behavior to calculate where to position the map.');
  7687. var zoom = this._calculateNewZoom({ scale: scale, startZoom: startZoom });
  7688. var zoomedViewport = new _viewportMercatorProject2.default(Object.assign({}, this._viewportProps, { zoom: zoom }));
  7689. var _zoomedViewport$getLo = zoomedViewport.getLocationAtPoint({ lngLat: startZoomLngLat, pos: pos }),
  7690. _zoomedViewport$getLo2 = _slicedToArray(_zoomedViewport$getLo, 2),
  7691. longitude = _zoomedViewport$getLo2[0],
  7692. latitude = _zoomedViewport$getLo2[1];
  7693. return this._getUpdatedState({
  7694. zoom: zoom,
  7695. longitude: longitude,
  7696. latitude: latitude
  7697. });
  7698. }
  7699. /**
  7700. * End zooming
  7701. * Must call if `zoomStart()` was called
  7702. */
  7703. }, {
  7704. key: 'zoomEnd',
  7705. value: function zoomEnd() {
  7706. return this._getUpdatedState({
  7707. startZoomLngLat: null,
  7708. startZoom: null
  7709. });
  7710. }
  7711. }, {
  7712. key: 'zoomIn',
  7713. value: function zoomIn() {
  7714. return this._zoomFromCenter(2);
  7715. }
  7716. }, {
  7717. key: 'zoomOut',
  7718. value: function zoomOut() {
  7719. return this._zoomFromCenter(0.5);
  7720. }
  7721. }, {
  7722. key: 'moveLeft',
  7723. value: function moveLeft() {
  7724. return this._panFromCenter([100, 0]);
  7725. }
  7726. }, {
  7727. key: 'moveRight',
  7728. value: function moveRight() {
  7729. return this._panFromCenter([-100, 0]);
  7730. }
  7731. }, {
  7732. key: 'moveUp',
  7733. value: function moveUp() {
  7734. return this._panFromCenter([0, 100]);
  7735. }
  7736. }, {
  7737. key: 'moveDown',
  7738. value: function moveDown() {
  7739. return this._panFromCenter([0, -100]);
  7740. }
  7741. }, {
  7742. key: 'rotateLeft',
  7743. value: function rotateLeft() {
  7744. return this._getUpdatedState({
  7745. bearing: this._viewportProps.bearing - 15
  7746. });
  7747. }
  7748. }, {
  7749. key: 'rotateRight',
  7750. value: function rotateRight() {
  7751. return this._getUpdatedState({
  7752. bearing: this._viewportProps.bearing + 15
  7753. });
  7754. }
  7755. }, {
  7756. key: 'rotateUp',
  7757. value: function rotateUp() {
  7758. return this._getUpdatedState({
  7759. pitch: this._viewportProps.pitch + 10
  7760. });
  7761. }
  7762. }, {
  7763. key: 'rotateDown',
  7764. value: function rotateDown() {
  7765. return this._getUpdatedState({
  7766. pitch: this._viewportProps.pitch - 10
  7767. });
  7768. }
  7769. /* Private methods */
  7770. }, {
  7771. key: '_zoomFromCenter',
  7772. value: function _zoomFromCenter(scale) {
  7773. var _viewportProps = this._viewportProps,
  7774. width = _viewportProps.width,
  7775. height = _viewportProps.height;
  7776. return this.zoom({
  7777. pos: [width / 2, height / 2],
  7778. scale: scale
  7779. });
  7780. }
  7781. }, {
  7782. key: '_panFromCenter',
  7783. value: function _panFromCenter(offset) {
  7784. var _viewportProps2 = this._viewportProps,
  7785. width = _viewportProps2.width,
  7786. height = _viewportProps2.height;
  7787. return this.pan({
  7788. startPos: [width / 2, height / 2],
  7789. pos: [width / 2 + offset[0], height / 2 + offset[1]]
  7790. });
  7791. }
  7792. }, {
  7793. key: '_getUpdatedState',
  7794. value: function _getUpdatedState(newProps) {
  7795. // Update _viewportProps
  7796. return new MapState(Object.assign({}, this._viewportProps, this._interactiveState, newProps));
  7797. }
  7798. // Apply any constraints (mathematical or defined by _viewportProps) to map state
  7799. }, {
  7800. key: '_applyConstraints',
  7801. value: function _applyConstraints(props) {
  7802. // Ensure zoom is within specified range
  7803. var maxZoom = props.maxZoom,
  7804. minZoom = props.minZoom,
  7805. zoom = props.zoom;
  7806. props.zoom = clamp(zoom, minZoom, maxZoom);
  7807. // Ensure pitch is within specified range
  7808. var maxPitch = props.maxPitch,
  7809. minPitch = props.minPitch,
  7810. pitch = props.pitch;
  7811. props.pitch = clamp(pitch, minPitch, maxPitch);
  7812. Object.assign(props, (0, _viewportMercatorProject.normalizeViewportProps)(props));
  7813. return props;
  7814. }
  7815. }, {
  7816. key: '_unproject',
  7817. value: function _unproject(pos) {
  7818. var viewport = new _viewportMercatorProject2.default(this._viewportProps);
  7819. return pos && viewport.unproject(pos);
  7820. }
  7821. // Calculate a new lnglat based on pixel dragging position
  7822. }, {
  7823. key: '_calculateNewLngLat',
  7824. value: function _calculateNewLngLat(_ref8) {
  7825. var startPanLngLat = _ref8.startPanLngLat,
  7826. pos = _ref8.pos;
  7827. var viewport = new _viewportMercatorProject2.default(this._viewportProps);
  7828. return viewport.getMapCenterByLngLatPosition({ lngLat: startPanLngLat, pos: pos });
  7829. }
  7830. // Calculates new zoom
  7831. }, {
  7832. key: '_calculateNewZoom',
  7833. value: function _calculateNewZoom(_ref9) {
  7834. var scale = _ref9.scale,
  7835. startZoom = _ref9.startZoom;
  7836. var _viewportProps3 = this._viewportProps,
  7837. maxZoom = _viewportProps3.maxZoom,
  7838. minZoom = _viewportProps3.minZoom;
  7839. var zoom = startZoom + Math.log2(scale);
  7840. return clamp(zoom, minZoom, maxZoom);
  7841. }
  7842. // Calculates a new pitch and bearing from a position (coming from an event)
  7843. }, {
  7844. key: '_calculateNewPitchAndBearing',
  7845. value: function _calculateNewPitchAndBearing(_ref10) {
  7846. var deltaScaleX = _ref10.deltaScaleX,
  7847. deltaScaleY = _ref10.deltaScaleY,
  7848. startBearing = _ref10.startBearing,
  7849. startPitch = _ref10.startPitch;
  7850. // clamp deltaScaleY to [-1, 1] so that rotation is constrained between minPitch and maxPitch.
  7851. // deltaScaleX does not need to be clamped as bearing does not have constraints.
  7852. deltaScaleY = clamp(deltaScaleY, -1, 1);
  7853. var _viewportProps4 = this._viewportProps,
  7854. minPitch = _viewportProps4.minPitch,
  7855. maxPitch = _viewportProps4.maxPitch;
  7856. var bearing = startBearing + 180 * deltaScaleX;
  7857. var pitch = startPitch;
  7858. if (deltaScaleY > 0) {
  7859. // Gradually increase pitch
  7860. pitch = startPitch + deltaScaleY * (maxPitch - startPitch);
  7861. } else if (deltaScaleY < 0) {
  7862. // Gradually decrease pitch
  7863. pitch = startPitch - deltaScaleY * (minPitch - startPitch);
  7864. }
  7865. return {
  7866. pitch: pitch,
  7867. bearing: bearing
  7868. };
  7869. }
  7870. }]);
  7871. return MapState;
  7872. }(_viewState2.default);
  7873. exports.default = MapState;
  7874. /***/ }),
  7875. /* 83 */
  7876. /***/ (function(module, exports, __webpack_require__) {
  7877. "use strict";
  7878. Object.defineProperty(exports, "__esModule", {
  7879. value: true
  7880. });
  7881. var _luma = __webpack_require__(12);
  7882. var _project = __webpack_require__(344);
  7883. var _project2 = _interopRequireDefault(_project);
  7884. var _projectDeprecated = __webpack_require__(334);
  7885. var _projectDeprecated2 = _interopRequireDefault(_projectDeprecated);
  7886. var _viewportUniforms = __webpack_require__(345);
  7887. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  7888. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  7889. //
  7890. // Permission is hereby granted, free of charge, to any person obtaining a copy
  7891. // of this software and associated documentation files (the "Software"), to deal
  7892. // in the Software without restriction, including without limitation the rights
  7893. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  7894. // copies of the Software, and to permit persons to whom the Software is
  7895. // furnished to do so, subject to the following conditions:
  7896. //
  7897. // The above copyright notice and this permission notice shall be included in
  7898. // all copies or substantial portions of the Software.
  7899. //
  7900. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  7901. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  7902. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  7903. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  7904. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  7905. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  7906. // THE SOFTWARE.
  7907. var INITIAL_MODULE_OPTIONS = {};
  7908. function getUniforms() {
  7909. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : INITIAL_MODULE_OPTIONS;
  7910. if (opts.viewport) {
  7911. return (0, _viewportUniforms.getUniformsFromViewport)(opts);
  7912. }
  7913. return {};
  7914. }
  7915. exports.default = {
  7916. name: 'project',
  7917. dependencies: [_luma.fp32],
  7918. vs: '' + _project2.default + _projectDeprecated2.default,
  7919. getUniforms: getUniforms,
  7920. deprecations: [
  7921. // Removed custom picking uinforms
  7922. // These don't really belong here but we need to check them for all shaders
  7923. // the project module is by default included for all
  7924. { type: 'uniform vec3', old: 'selectedPickingColor', new: "luma.gl's picking module" }, { type: 'uniform float', old: 'renderPickingBuffer', new: "luma.gl's picking module" }, { type: 'uniform float', old: 'pickingEnabled', new: "luma.gl's picking module" },
  7925. // Removed project uniforms
  7926. { type: 'uniform float', old: 'projectionMode', new: 'project_uCoordinateSystem' }, { type: 'uniform vec4', old: 'projectionCenter', new: 'project_uCenter' }, { type: 'uniform vec2', old: 'projectionOrigin' }, { type: 'uniform mat4', old: 'modelMatrix', new: 'project_uModelMatrix' }, { type: 'uniform mat4', old: 'viewMatrix' }, { type: 'uniform mat4', old: 'projectionMatrix', new: 'project_uViewProjectionMatrix' }, { type: 'uniform vec3', old: 'projectionPixelsPerUnit', new: 'project_uPixelsPerUnit' }, { type: 'uniform float', old: 'projectionScale', new: 'project_uScale' }, { type: 'uniform vec2', old: 'viewportSize', new: 'project_uViewportSize' }, { type: 'uniform float', old: 'devicePixelRatio', new: 'project_uDevicePixelRatio' }, { type: 'uniform vec3', old: 'cameraPos', new: 'project_uCameraPosition' },
  7927. // Deprecated project functions
  7928. { type: 'function', old: 'scale', new: 'project_scale', deprecated: 1 }, { type: 'function', old: 'preproject', new: 'project_position', deprecated: 1 }, { type: 'function', old: 'project', new: 'project_to_clipspace', deprecated: 1 }]
  7929. };
  7930. /***/ }),
  7931. /* 84 */
  7932. /***/ (function(module, exports, __webpack_require__) {
  7933. "use strict";
  7934. Object.defineProperty(exports, "__esModule", {
  7935. value: true
  7936. });
  7937. exports.lerp = lerp;
  7938. exports.isValid = isValid;
  7939. exports.getEndValueByShortestPath = getEndValueByShortestPath;
  7940. exports.extractViewportFrom = extractViewportFrom;
  7941. var _mathUtils = __webpack_require__(127);
  7942. var VIEWPORT_PROPS = ['width', 'height', 'longitude', 'latitude', 'zoom', 'bearing', 'pitch', 'position'];
  7943. var WRAPPED_ANGULAR_PROPS = {
  7944. longitude: 1,
  7945. bearing: 1
  7946. };
  7947. function lerp(start, end, step) {
  7948. if (Array.isArray(start)) {
  7949. return start.map(function (element, index) {
  7950. return lerp(element, end[index], step);
  7951. });
  7952. }
  7953. return step * end + (1 - step) * start;
  7954. }
  7955. function isValid(prop) {
  7956. return Number.isFinite(prop) || Array.isArray(prop);
  7957. }
  7958. function isWrappedAngularProp(propName) {
  7959. return WRAPPED_ANGULAR_PROPS[propName];
  7960. }
  7961. function getEndValueByShortestPath(propName, startValue, endValue) {
  7962. if (isWrappedAngularProp(propName) && Math.abs(endValue - startValue) > 180) {
  7963. endValue = endValue < 0 ? endValue + 360 : endValue - 360;
  7964. }
  7965. return endValue;
  7966. }
  7967. // TODO/xiaoji: This should be merged with the controller's prop constraint system
  7968. function extractViewportFrom(props) {
  7969. var viewport = {};
  7970. VIEWPORT_PROPS.forEach(function (key) {
  7971. var value = props[key];
  7972. if (isValid(value)) {
  7973. viewport[key] = value;
  7974. // Normalize longitude and bearing into [-180, 180) range
  7975. // This gurantees the props are in same range when they are interpolated.
  7976. if (isWrappedAngularProp(key)) {
  7977. viewport[key] = (0, _mathUtils.mod)(value + 180, 360) - 180;
  7978. }
  7979. }
  7980. });
  7981. return viewport;
  7982. }
  7983. /***/ }),
  7984. /* 85 */
  7985. /***/ (function(module, exports, __webpack_require__) {
  7986. "use strict";
  7987. Object.defineProperty(exports, "__esModule", {
  7988. value: true
  7989. });
  7990. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  7991. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  7992. var _viewport = __webpack_require__(42);
  7993. var _viewport2 = _interopRequireDefault(_viewport);
  7994. var _mathUtils = __webpack_require__(127);
  7995. var _multiply = __webpack_require__(75);
  7996. var _multiply2 = _interopRequireDefault(_multiply);
  7997. var _lookAt = __webpack_require__(102);
  7998. var _lookAt2 = _interopRequireDefault(_lookAt);
  7999. var _scale = __webpack_require__(77);
  8000. var _scale2 = _interopRequireDefault(_scale);
  8001. var _perspective = __webpack_require__(76);
  8002. var _perspective2 = _interopRequireDefault(_perspective);
  8003. var _translate = __webpack_require__(78);
  8004. var _translate2 = _interopRequireDefault(_translate);
  8005. var _rotateX = __webpack_require__(157);
  8006. var _rotateX2 = _interopRequireDefault(_rotateX);
  8007. var _rotateY = __webpack_require__(235);
  8008. var _rotateY2 = _interopRequireDefault(_rotateY);
  8009. var _rotateZ = __webpack_require__(158);
  8010. var _rotateZ2 = _interopRequireDefault(_rotateZ);
  8011. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8012. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  8013. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  8014. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  8015. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  8016. var DEGREES_TO_RADIANS = Math.PI / 180;
  8017. /*
  8018. * A deck.gl Viewport class used by OrbitController
  8019. * Adds zoom and pixel translation on top of the PerspectiveViewport
  8020. */
  8021. var OrbitViewport = function (_Viewport) {
  8022. _inherits(OrbitViewport, _Viewport);
  8023. function OrbitViewport(_ref) {
  8024. var _ref$id = _ref.id,
  8025. id = _ref$id === undefined ? 'orbit-viewport' : _ref$id,
  8026. width = _ref.width,
  8027. height = _ref.height,
  8028. distance = _ref.distance,
  8029. _ref$rotationX = _ref.rotationX,
  8030. rotationX = _ref$rotationX === undefined ? 0 : _ref$rotationX,
  8031. _ref$rotationOrbit = _ref.rotationOrbit,
  8032. rotationOrbit = _ref$rotationOrbit === undefined ? 0 : _ref$rotationOrbit,
  8033. _ref$orbitAxis = _ref.orbitAxis,
  8034. orbitAxis = _ref$orbitAxis === undefined ? 'Z' : _ref$orbitAxis,
  8035. _ref$lookAt = _ref.lookAt,
  8036. lookAt = _ref$lookAt === undefined ? [0, 0, 0] : _ref$lookAt,
  8037. _ref$up = _ref.up,
  8038. up = _ref$up === undefined ? [0, 1, 0] : _ref$up,
  8039. _ref$fov = _ref.fov,
  8040. fov = _ref$fov === undefined ? 75 : _ref$fov,
  8041. _ref$near = _ref.near,
  8042. near = _ref$near === undefined ? 1 : _ref$near,
  8043. _ref$far = _ref.far,
  8044. far = _ref$far === undefined ? 100 : _ref$far,
  8045. _ref$zoom = _ref.zoom,
  8046. zoom = _ref$zoom === undefined ? 1 : _ref$zoom;
  8047. _classCallCheck(this, OrbitViewport);
  8048. var rotationMatrix = (0, _rotateX2.default)([], (0, _mathUtils.createMat4)(), -rotationX / 180 * Math.PI);
  8049. if (orbitAxis === 'Z') {
  8050. (0, _rotateZ2.default)(rotationMatrix, rotationMatrix, -rotationOrbit / 180 * Math.PI);
  8051. } else {
  8052. (0, _rotateY2.default)(rotationMatrix, rotationMatrix, -rotationOrbit / 180 * Math.PI);
  8053. }
  8054. var translateMatrix = (0, _mathUtils.createMat4)();
  8055. (0, _scale2.default)(translateMatrix, translateMatrix, [zoom, zoom, zoom]);
  8056. (0, _translate2.default)(translateMatrix, translateMatrix, [-lookAt[0], -lookAt[1], -lookAt[2]]);
  8057. var viewMatrix = (0, _lookAt2.default)([], [0, 0, distance], [0, 0, 0], up);
  8058. var fovRadians = fov * DEGREES_TO_RADIANS;
  8059. var aspect = width / height;
  8060. var perspectiveMatrix = (0, _perspective2.default)([], fovRadians, aspect, near, far);
  8061. var _this = _possibleConstructorReturn(this, (OrbitViewport.__proto__ || Object.getPrototypeOf(OrbitViewport)).call(this, {
  8062. id: id,
  8063. viewMatrix: (0, _multiply2.default)(viewMatrix, viewMatrix, (0, _multiply2.default)(rotationMatrix, rotationMatrix, translateMatrix)),
  8064. projectionMatrix: perspectiveMatrix,
  8065. width: width,
  8066. height: height
  8067. }));
  8068. _this.width = width;
  8069. _this.height = height;
  8070. _this.distance = distance;
  8071. _this.rotationX = rotationX;
  8072. _this.rotationOrbit = rotationOrbit;
  8073. _this.orbitAxis = orbitAxis;
  8074. _this.lookAt = lookAt;
  8075. _this.up = up;
  8076. _this.fov = fov;
  8077. _this.near = near;
  8078. _this.far = far;
  8079. _this.zoom = zoom;
  8080. return _this;
  8081. }
  8082. _createClass(OrbitViewport, [{
  8083. key: 'project',
  8084. value: function project(xyz) {
  8085. var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  8086. _ref2$topLeft = _ref2.topLeft,
  8087. topLeft = _ref2$topLeft === undefined ? false : _ref2$topLeft;
  8088. var v = (0, _mathUtils.transformVector)(this.pixelProjectionMatrix, [].concat(_toConsumableArray(xyz), [1]));
  8089. var _v = _slicedToArray(v, 3),
  8090. x = _v[0],
  8091. y = _v[1],
  8092. z = _v[2];
  8093. var y2 = topLeft ? this.height - y : y;
  8094. return [x, y2, z];
  8095. }
  8096. }, {
  8097. key: 'unproject',
  8098. value: function unproject(xyz) {
  8099. var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  8100. _ref3$topLeft = _ref3.topLeft,
  8101. topLeft = _ref3$topLeft === undefined ? false : _ref3$topLeft;
  8102. var _xyz = _slicedToArray(xyz, 3),
  8103. x = _xyz[0],
  8104. y = _xyz[1],
  8105. z = _xyz[2];
  8106. var y2 = topLeft ? this.height - y : y;
  8107. return (0, _mathUtils.transformVector)(this.pixelUnprojectionMatrix, [x, y2, z, 1]);
  8108. }
  8109. /** Move camera to make a model bounding box centered at lookat position fit in the viewport.
  8110. * @param {Array} sizes - [sizeX, sizeY, sizeZ]], define the dimensions of bounding box
  8111. * @returns a new OrbitViewport object
  8112. */
  8113. }, {
  8114. key: 'fitBounds',
  8115. value: function fitBounds(sizes) {
  8116. var width = this.width,
  8117. height = this.height,
  8118. rotationX = this.rotationX,
  8119. rotationOrbit = this.rotationOrbit,
  8120. orbitAxis = this.orbitAxis,
  8121. lookAt = this.lookAt,
  8122. up = this.up,
  8123. fov = this.fov,
  8124. near = this.near,
  8125. far = this.far,
  8126. zoom = this.zoom;
  8127. var size = Math.max(sizes[0], sizes[1], sizes[2]) / 2;
  8128. var newDistance = size;//size / Math.tan(fov / 180 * Math.PI / 2);
  8129. return new OrbitViewport({
  8130. width: width,
  8131. height: height,
  8132. rotationX: rotationX,
  8133. rotationOrbit: rotationOrbit,
  8134. orbitAxis: orbitAxis,
  8135. up: up,
  8136. fov: fov,
  8137. near: near,
  8138. far: far,
  8139. zoom: zoom,
  8140. lookAt: lookAt,
  8141. distance: newDistance
  8142. });
  8143. }
  8144. }]);
  8145. return OrbitViewport;
  8146. }(_viewport2.default);
  8147. exports.default = OrbitViewport;
  8148. OrbitViewport.displayName = 'OrbitViewport';
  8149. /***/ }),
  8150. /* 86 */
  8151. /***/ (function(module, exports, __webpack_require__) {
  8152. "use strict";
  8153. Object.defineProperty(exports, "__esModule", {
  8154. value: true
  8155. });
  8156. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  8157. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  8158. var _viewport = __webpack_require__(42);
  8159. var _viewport2 = _interopRequireDefault(_viewport);
  8160. var _viewportMercatorProject = __webpack_require__(79);
  8161. var _add = __webpack_require__(159);
  8162. var _add2 = _interopRequireDefault(_add);
  8163. var _negate = __webpack_require__(160);
  8164. var _negate2 = _interopRequireDefault(_negate);
  8165. var _assert = __webpack_require__(1);
  8166. var _assert2 = _interopRequireDefault(_assert);
  8167. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8168. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  8169. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  8170. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  8171. //
  8172. // Permission is hereby granted, free of charge, to any person obtaining a copy
  8173. // of this software and associated documentation files (the "Software"), to deal
  8174. // in the Software without restriction, including without limitation the rights
  8175. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8176. // copies of the Software, and to permit persons to whom the Software is
  8177. // furnished to do so, subject to the following conditions:
  8178. //
  8179. // The above copyright notice and this permission notice shall be included in
  8180. // all copies or substantial portions of the Software.
  8181. //
  8182. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  8183. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  8184. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  8185. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  8186. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  8187. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  8188. // THE SOFTWARE.
  8189. // View and Projection Matrix calculations for mapbox-js style
  8190. // map view properties
  8191. // TODO - import from viewport-mercator-project
  8192. // import {fitBounds} from '../viewport-mercator-project/fit-bounds';
  8193. // TODO - import from math.gl
  8194. /* eslint-disable camelcase */
  8195. var ERR_ARGUMENT = 'Illegal argument to WebMercatorViewport';
  8196. var WebMercatorViewport = function (_Viewport) {
  8197. _inherits(WebMercatorViewport, _Viewport);
  8198. /**
  8199. * @classdesc
  8200. * Creates view/projection matrices from mercator params
  8201. * Note: The Viewport is immutable in the sense that it only has accessors.
  8202. * A new viewport instance should be created if any parameters have changed.
  8203. */
  8204. /* eslint-disable complexity, max-statements */
  8205. function WebMercatorViewport() {
  8206. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  8207. _classCallCheck(this, WebMercatorViewport);
  8208. var _opts$latitude = opts.latitude,
  8209. latitude = _opts$latitude === undefined ? 0 : _opts$latitude,
  8210. _opts$longitude = opts.longitude,
  8211. longitude = _opts$longitude === undefined ? 0 : _opts$longitude,
  8212. _opts$zoom = opts.zoom,
  8213. zoom = _opts$zoom === undefined ? 11 : _opts$zoom,
  8214. _opts$pitch = opts.pitch,
  8215. pitch = _opts$pitch === undefined ? 0 : _opts$pitch,
  8216. _opts$bearing = opts.bearing,
  8217. bearing = _opts$bearing === undefined ? 0 : _opts$bearing,
  8218. _opts$farZMultiplier = opts.farZMultiplier,
  8219. farZMultiplier = _opts$farZMultiplier === undefined ? 10 : _opts$farZMultiplier;
  8220. var width = opts.width,
  8221. height = opts.height,
  8222. _opts$altitude = opts.altitude,
  8223. //iclient
  8224. isGeographicCoordinateSystem= opts.isGeographicCoordinateSystem,
  8225. altitude = _opts$altitude === undefined ? 1.5 : _opts$altitude;
  8226. // Silently allow apps to send in 0,0 to facilitate isomorphic render etc
  8227. width = width || 1;
  8228. height = height || 1;
  8229. // Altitude - prevent division by 0
  8230. // TODO - just throw an Error instead?
  8231. altitude = Math.max(0.75, altitude);
  8232. var projectionMatrix = (0, _viewportMercatorProject.getProjectionMatrix)({
  8233. width: width,
  8234. height: height,
  8235. pitch: pitch,
  8236. altitude: altitude,
  8237. farZMultiplier: farZMultiplier
  8238. });
  8239. // The uncentered matrix allows us two move the center addition to the
  8240. // shader (cheap) which gives a coordinate system that has its center in
  8241. // the layer's center position. This makes rotations and other modelMatrx
  8242. // transforms much more useful.
  8243. var viewMatrixUncentered = (0, _viewportMercatorProject.getViewMatrix)({
  8244. height: height,
  8245. pitch: pitch,
  8246. bearing: bearing,
  8247. altitude: altitude
  8248. });
  8249. // Save parameters
  8250. var _this = _possibleConstructorReturn(this, (WebMercatorViewport.__proto__ || Object.getPrototypeOf(WebMercatorViewport)).call(this, Object.assign({}, opts, {
  8251. // x, y, position, ...
  8252. // TODO / hack - prevent vertical offsets if not FirstPersonViewport
  8253. position: opts.position && [opts.position[0], opts.position[1], 0],
  8254. width: width,
  8255. height: height,
  8256. viewMatrix: viewMatrixUncentered,
  8257. longitude: longitude,
  8258. latitude: latitude,
  8259. zoom: zoom,
  8260. projectionMatrix: projectionMatrix,
  8261. //iclient
  8262. isGeographicCoordinateSystem:isGeographicCoordinateSystem,
  8263. focalDistance: 1 // Viewport is already carefully set up to "focus" on ground
  8264. })));
  8265. _this.latitude = latitude;
  8266. _this.longitude = longitude;
  8267. _this.zoom = zoom;
  8268. _this.pitch = pitch;
  8269. _this.bearing = bearing;
  8270. _this.altitude = altitude;
  8271. // Bind methods
  8272. _this.metersToLngLatDelta = _this.metersToLngLatDelta.bind(_this);
  8273. _this.lngLatDeltaToMeters = _this.lngLatDeltaToMeters.bind(_this);
  8274. _this.addMetersToLngLat = _this.addMetersToLngLat.bind(_this);
  8275. Object.freeze(_this);
  8276. return _this;
  8277. }
  8278. /* eslint-enable complexity, max-statements */
  8279. /**
  8280. * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.
  8281. * Performs the nonlinear part of the web mercator projection.
  8282. * Remaining projection is done with 4x4 matrices which also handles
  8283. * perspective.
  8284. *
  8285. * @param {Array} lngLat - [lng, lat] coordinates
  8286. * Specifies a point on the sphere to project onto the map.
  8287. * @return {Array} [x,y] coordinates.
  8288. */
  8289. _createClass(WebMercatorViewport, [{
  8290. key: '_projectFlat',
  8291. value: function _projectFlat(lngLat) {
  8292. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  8293. return (0, _viewportMercatorProject.lngLatToWorld)(lngLat, scale);
  8294. }
  8295. /**
  8296. * Unproject world point [x,y] on map onto {lat, lon} on sphere
  8297. *
  8298. * @param {object|Vector} xy - object with {x,y} members
  8299. * representing point on projected map plane
  8300. * @return {GeoCoordinates} - object with {lat,lon} of point on sphere.
  8301. * Has toArray method if you need a GeoJSON Array.
  8302. * Per cartographic tradition, lat and lon are specified as degrees.
  8303. */
  8304. }, {
  8305. key: '_unprojectFlat',
  8306. value: function _unprojectFlat(xy) {
  8307. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  8308. return (0, _viewportMercatorProject.worldToLngLat)(xy, scale,this.isGeographicCoordinateSystem);
  8309. }
  8310. /**
  8311. * Converts a meter offset to a lnglat offset
  8312. *
  8313. * Note: Uses simple linear approximation around the viewport center
  8314. * Error increases with size of offset (roughly 1% per 100km)
  8315. *
  8316. * @param {[Number,Number]|[Number,Number,Number]) xyz - array of meter deltas
  8317. * @return {[Number,Number]|[Number,Number,Number]) - array of [lng,lat,z] deltas
  8318. */
  8319. }, {
  8320. key: 'metersToLngLatDelta',
  8321. value: function metersToLngLatDelta(xyz) {
  8322. var _xyz = _slicedToArray(xyz, 3),
  8323. x = _xyz[0],
  8324. y = _xyz[1],
  8325. _xyz$ = _xyz[2],
  8326. z = _xyz$ === undefined ? 0 : _xyz$;
  8327. (0, _assert2.default)(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z), ERR_ARGUMENT);
  8328. var _distanceScales = this.distanceScales,
  8329. pixelsPerMeter = _distanceScales.pixelsPerMeter,
  8330. degreesPerPixel = _distanceScales.degreesPerPixel;
  8331. var deltaLng = x * pixelsPerMeter[0] * degreesPerPixel[0];
  8332. var deltaLat = y * pixelsPerMeter[1] * degreesPerPixel[1];
  8333. return xyz.length === 2 ? [deltaLng, deltaLat] : [deltaLng, deltaLat, z];
  8334. }
  8335. /**
  8336. * Converts a lnglat offset to a meter offset
  8337. *
  8338. * Note: Uses simple linear approximation around the viewport center
  8339. * Error increases with size of offset (roughly 1% per 100km)
  8340. *
  8341. * @param {[Number,Number]|[Number,Number,Number]) deltaLngLatZ - array of [lng,lat,z] deltas
  8342. * @return {[Number,Number]|[Number,Number,Number]) - array of meter deltas
  8343. */
  8344. }, {
  8345. key: 'lngLatDeltaToMeters',
  8346. value: function lngLatDeltaToMeters(deltaLngLatZ) {
  8347. var _deltaLngLatZ = _slicedToArray(deltaLngLatZ, 3),
  8348. deltaLng = _deltaLngLatZ[0],
  8349. deltaLat = _deltaLngLatZ[1],
  8350. _deltaLngLatZ$ = _deltaLngLatZ[2],
  8351. deltaZ = _deltaLngLatZ$ === undefined ? 0 : _deltaLngLatZ$;
  8352. (0, _assert2.default)(Number.isFinite(deltaLng) && Number.isFinite(deltaLat) && Number.isFinite(deltaZ), ERR_ARGUMENT);
  8353. var _distanceScales2 = this.distanceScales,
  8354. pixelsPerDegree = _distanceScales2.pixelsPerDegree,
  8355. metersPerPixel = _distanceScales2.metersPerPixel;
  8356. var deltaX = deltaLng * pixelsPerDegree[0] * metersPerPixel[0];
  8357. var deltaY = deltaLat * pixelsPerDegree[1] * metersPerPixel[1];
  8358. return deltaLngLatZ.length === 2 ? [deltaX, deltaY] : [deltaX, deltaY, deltaZ];
  8359. }
  8360. /**
  8361. * Add a meter delta to a base lnglat coordinate, returning a new lnglat array
  8362. *
  8363. * Note: Uses simple linear approximation around the viewport center
  8364. * Error increases with size of offset (roughly 1% per 100km)
  8365. *
  8366. * @param {[Number,Number]|[Number,Number,Number]) lngLatZ - base coordinate
  8367. * @param {[Number,Number]|[Number,Number,Number]) xyz - array of meter deltas
  8368. * @return {[Number,Number]|[Number,Number,Number]) array of [lng,lat,z] deltas
  8369. */
  8370. }, {
  8371. key: 'addMetersToLngLat',
  8372. value: function addMetersToLngLat(lngLatZ, xyz) {
  8373. var _lngLatZ = _slicedToArray(lngLatZ, 3),
  8374. lng = _lngLatZ[0],
  8375. lat = _lngLatZ[1],
  8376. _lngLatZ$ = _lngLatZ[2],
  8377. Z = _lngLatZ$ === undefined ? 0 : _lngLatZ$;
  8378. var _metersToLngLatDelta = this.metersToLngLatDelta(xyz),
  8379. _metersToLngLatDelta2 = _slicedToArray(_metersToLngLatDelta, 3),
  8380. deltaLng = _metersToLngLatDelta2[0],
  8381. deltaLat = _metersToLngLatDelta2[1],
  8382. _metersToLngLatDelta3 = _metersToLngLatDelta2[2],
  8383. deltaZ = _metersToLngLatDelta3 === undefined ? 0 : _metersToLngLatDelta3;
  8384. return lngLatZ.length === 2 ? [lng + deltaLng, lat + deltaLat] : [lng + deltaLng, lat + deltaLat, Z + deltaZ];
  8385. }
  8386. /**
  8387. * Get the map center that place a given [lng, lat] coordinate at screen
  8388. * point [x, y]
  8389. *
  8390. * @param {Array} lngLat - [lng,lat] coordinates
  8391. * Specifies a point on the sphere.
  8392. * @param {Array} pos - [x,y] coordinates
  8393. * Specifies a point on the screen.
  8394. * @return {Array} [lng,lat] new map center.
  8395. */
  8396. }, {
  8397. key: 'getMapCenterByLngLatPosition',
  8398. value: function getMapCenterByLngLatPosition(_ref) {
  8399. var lngLat = _ref.lngLat,
  8400. pos = _ref.pos;
  8401. var fromLocation = (0, _viewportMercatorProject.pixelsToWorld)(pos, this.pixelUnprojectionMatrix);
  8402. var toLocation = (0, _viewportMercatorProject.lngLatToWorld)(lngLat, this.scale);
  8403. var translate = (0, _add2.default)([], toLocation, (0, _negate2.default)([], fromLocation));
  8404. var newCenter = (0, _add2.default)([], this.center, translate);
  8405. return (0, _viewportMercatorProject.worldToLngLat)(newCenter, this.scale,this.isGeographicCoordinateSystem);
  8406. }
  8407. // Legacy method name
  8408. }, {
  8409. key: 'getLocationAtPoint',
  8410. value: function getLocationAtPoint(_ref2) {
  8411. var lngLat = _ref2.lngLat,
  8412. pos = _ref2.pos;
  8413. return this.getMapCenterByLngLatPosition({ lngLat: lngLat, pos: pos });
  8414. }
  8415. /**
  8416. * Returns a new viewport that fit around the given rectangle.
  8417. * Only supports non-perspective mode.
  8418. * @param {Array} bounds - [[lon, lat], [lon, lat]]
  8419. * @param {Number} [options.padding] - The amount of padding in pixels to add to the given bounds.
  8420. * @param {Array} [options.offset] - The center of the given bounds relative to the map's center,
  8421. * [x, y] measured in pixels.
  8422. * @returns {WebMercatorViewport}
  8423. */
  8424. }, {
  8425. key: 'fitBounds',
  8426. value: function fitBounds(bounds) {
  8427. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  8428. var width = this.width,
  8429. height = this.height;
  8430. var _fitBounds2 = (0, _viewportMercatorProject.fitBounds)(Object.assign({ width: width, height: height, bounds: bounds }, options)),
  8431. longitude = _fitBounds2.longitude,
  8432. latitude = _fitBounds2.latitude,
  8433. zoom = _fitBounds2.zoom;
  8434. return new WebMercatorViewport({ width: width, height: height, longitude: longitude, latitude: latitude, zoom: zoom });
  8435. }
  8436. // TODO - should support user supplied constraints
  8437. }, {
  8438. key: 'isMapSynched',
  8439. value: function isMapSynched() {
  8440. var EPSILON = 0.000001;
  8441. var MAPBOX_LIMITS = {
  8442. pitch: 60,
  8443. zoom: 40
  8444. };
  8445. var pitch = this.pitch,
  8446. zoom = this.zoom;
  8447. return pitch <= MAPBOX_LIMITS.pitch + EPSILON && zoom <= MAPBOX_LIMITS.zoom + EPSILON;
  8448. }
  8449. }]);
  8450. return WebMercatorViewport;
  8451. }(_viewport2.default);
  8452. exports.default = WebMercatorViewport;
  8453. WebMercatorViewport.displayName = 'WebMercatorViewport';
  8454. /***/ }),
  8455. /* 87 */
  8456. /***/ (function(module, exports, __webpack_require__) {
  8457. // false -> Array#indexOf
  8458. // true -> Array#includes
  8459. var toIObject = __webpack_require__(24);
  8460. var toLength = __webpack_require__(11);
  8461. var toAbsoluteIndex = __webpack_require__(57);
  8462. module.exports = function (IS_INCLUDES) {
  8463. return function ($this, el, fromIndex) {
  8464. var O = toIObject($this);
  8465. var length = toLength(O.length);
  8466. var index = toAbsoluteIndex(fromIndex, length);
  8467. var value;
  8468. // Array#includes uses SameValueZero equality algorithm
  8469. // eslint-disable-next-line no-self-compare
  8470. if (IS_INCLUDES && el != el) while (length > index) {
  8471. value = O[index++];
  8472. // eslint-disable-next-line no-self-compare
  8473. if (value != value) return true;
  8474. // Array#indexOf ignores holes, Array#includes - not
  8475. } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
  8476. if (O[index] === el) return IS_INCLUDES || index || 0;
  8477. } return !IS_INCLUDES && -1;
  8478. };
  8479. };
  8480. /***/ }),
  8481. /* 88 */
  8482. /***/ (function(module, exports, __webpack_require__) {
  8483. "use strict";
  8484. var global = __webpack_require__(3);
  8485. var $export = __webpack_require__(0);
  8486. var redefine = __webpack_require__(20);
  8487. var redefineAll = __webpack_require__(55);
  8488. var meta = __webpack_require__(44);
  8489. var forOf = __webpack_require__(49);
  8490. var anInstance = __webpack_require__(48);
  8491. var isObject = __webpack_require__(5);
  8492. var fails = __webpack_require__(4);
  8493. var $iterDetect = __webpack_require__(93);
  8494. var setToStringTag = __webpack_require__(64);
  8495. var inheritIfRequired = __webpack_require__(135);
  8496. module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
  8497. var Base = global[NAME];
  8498. var C = Base;
  8499. var ADDER = IS_MAP ? 'set' : 'add';
  8500. var proto = C && C.prototype;
  8501. var O = {};
  8502. var fixMethod = function (KEY) {
  8503. var fn = proto[KEY];
  8504. redefine(proto, KEY,
  8505. KEY == 'delete' ? function (a) {
  8506. return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
  8507. } : KEY == 'has' ? function has(a) {
  8508. return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
  8509. } : KEY == 'get' ? function get(a) {
  8510. return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
  8511. } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }
  8512. : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }
  8513. );
  8514. };
  8515. if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
  8516. new C().entries().next();
  8517. }))) {
  8518. // create collection constructor
  8519. C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
  8520. redefineAll(C.prototype, methods);
  8521. meta.NEED = true;
  8522. } else {
  8523. var instance = new C();
  8524. // early implementations not supports chaining
  8525. var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
  8526. // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
  8527. var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });
  8528. // most early implementations doesn't supports iterables, most modern - not close it correctly
  8529. var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new
  8530. // for early implementations -0 and +0 not the same
  8531. var BUGGY_ZERO = !IS_WEAK && fails(function () {
  8532. // V8 ~ Chromium 42- fails only with 5+ elements
  8533. var $instance = new C();
  8534. var index = 5;
  8535. while (index--) $instance[ADDER](index, index);
  8536. return !$instance.has(-0);
  8537. });
  8538. if (!ACCEPT_ITERABLES) {
  8539. C = wrapper(function (target, iterable) {
  8540. anInstance(target, C, NAME);
  8541. var that = inheritIfRequired(new Base(), target, C);
  8542. if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
  8543. return that;
  8544. });
  8545. C.prototype = proto;
  8546. proto.constructor = C;
  8547. }
  8548. if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
  8549. fixMethod('delete');
  8550. fixMethod('has');
  8551. IS_MAP && fixMethod('get');
  8552. }
  8553. if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
  8554. // weak collections should not contains .clear method
  8555. if (IS_WEAK && proto.clear) delete proto.clear;
  8556. }
  8557. setToStringTag(C, NAME);
  8558. O[NAME] = C;
  8559. $export($export.G + $export.W + $export.F * (C != Base), O);
  8560. if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
  8561. return C;
  8562. };
  8563. /***/ }),
  8564. /* 89 */
  8565. /***/ (function(module, exports, __webpack_require__) {
  8566. "use strict";
  8567. var hide = __webpack_require__(19);
  8568. var redefine = __webpack_require__(20);
  8569. var fails = __webpack_require__(4);
  8570. var defined = __webpack_require__(34);
  8571. var wks = __webpack_require__(6);
  8572. module.exports = function (KEY, length, exec) {
  8573. var SYMBOL = wks(KEY);
  8574. var fns = exec(defined, SYMBOL, ''[KEY]);
  8575. var strfn = fns[0];
  8576. var rxfn = fns[1];
  8577. if (fails(function () {
  8578. var O = {};
  8579. O[SYMBOL] = function () { return 7; };
  8580. return ''[KEY](O) != 7;
  8581. })) {
  8582. redefine(String.prototype, KEY, strfn);
  8583. hide(RegExp.prototype, SYMBOL, length == 2
  8584. // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
  8585. // 21.2.5.11 RegExp.prototype[@@split](string, limit)
  8586. ? function (string, arg) { return rxfn.call(string, this, arg); }
  8587. // 21.2.5.6 RegExp.prototype[@@match](string)
  8588. // 21.2.5.9 RegExp.prototype[@@search](string)
  8589. : function (string) { return rxfn.call(string, this); }
  8590. );
  8591. }
  8592. };
  8593. /***/ }),
  8594. /* 90 */
  8595. /***/ (function(module, exports, __webpack_require__) {
  8596. "use strict";
  8597. // 21.2.5.3 get RegExp.prototype.flags
  8598. var anObject = __webpack_require__(2);
  8599. module.exports = function () {
  8600. var that = anObject(this);
  8601. var result = '';
  8602. if (that.global) result += 'g';
  8603. if (that.ignoreCase) result += 'i';
  8604. if (that.multiline) result += 'm';
  8605. if (that.unicode) result += 'u';
  8606. if (that.sticky) result += 'y';
  8607. return result;
  8608. };
  8609. /***/ }),
  8610. /* 91 */
  8611. /***/ (function(module, exports, __webpack_require__) {
  8612. // 7.2.2 IsArray(argument)
  8613. var cof = __webpack_require__(27);
  8614. module.exports = Array.isArray || function isArray(arg) {
  8615. return cof(arg) == 'Array';
  8616. };
  8617. /***/ }),
  8618. /* 92 */
  8619. /***/ (function(module, exports, __webpack_require__) {
  8620. // 7.2.8 IsRegExp(argument)
  8621. var isObject = __webpack_require__(5);
  8622. var cof = __webpack_require__(27);
  8623. var MATCH = __webpack_require__(6)('match');
  8624. module.exports = function (it) {
  8625. var isRegExp;
  8626. return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
  8627. };
  8628. /***/ }),
  8629. /* 93 */
  8630. /***/ (function(module, exports, __webpack_require__) {
  8631. var ITERATOR = __webpack_require__(6)('iterator');
  8632. var SAFE_CLOSING = false;
  8633. try {
  8634. var riter = [7][ITERATOR]();
  8635. riter['return'] = function () { SAFE_CLOSING = true; };
  8636. // eslint-disable-next-line no-throw-literal
  8637. Array.from(riter, function () { throw 2; });
  8638. } catch (e) { /* empty */ }
  8639. module.exports = function (exec, skipClosing) {
  8640. if (!skipClosing && !SAFE_CLOSING) return false;
  8641. var safe = false;
  8642. try {
  8643. var arr = [7];
  8644. var iter = arr[ITERATOR]();
  8645. iter.next = function () { return { done: safe = true }; };
  8646. arr[ITERATOR] = function () { return iter; };
  8647. exec(arr);
  8648. } catch (e) { /* empty */ }
  8649. return safe;
  8650. };
  8651. /***/ }),
  8652. /* 94 */
  8653. /***/ (function(module, exports, __webpack_require__) {
  8654. "use strict";
  8655. // Forced replacement prototype accessors methods
  8656. module.exports = __webpack_require__(50) || !__webpack_require__(4)(function () {
  8657. var K = Math.random();
  8658. // In FF throws only define methods
  8659. // eslint-disable-next-line no-undef, no-useless-call
  8660. __defineSetter__.call(null, K, function () { /* empty */ });
  8661. delete __webpack_require__(3)[K];
  8662. });
  8663. /***/ }),
  8664. /* 95 */
  8665. /***/ (function(module, exports) {
  8666. exports.f = Object.getOwnPropertySymbols;
  8667. /***/ }),
  8668. /* 96 */
  8669. /***/ (function(module, exports, __webpack_require__) {
  8670. "use strict";
  8671. // https://tc39.github.io/proposal-setmap-offrom/
  8672. var $export = __webpack_require__(0);
  8673. var aFunction = __webpack_require__(15);
  8674. var ctx = __webpack_require__(28);
  8675. var forOf = __webpack_require__(49);
  8676. module.exports = function (COLLECTION) {
  8677. $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
  8678. var mapFn = arguments[1];
  8679. var mapping, A, n, cb;
  8680. aFunction(this);
  8681. mapping = mapFn !== undefined;
  8682. if (mapping) aFunction(mapFn);
  8683. if (source == undefined) return new this();
  8684. A = [];
  8685. if (mapping) {
  8686. n = 0;
  8687. cb = ctx(mapFn, arguments[2], 2);
  8688. forOf(source, false, function (nextItem) {
  8689. A.push(cb(nextItem, n++));
  8690. });
  8691. } else {
  8692. forOf(source, false, A.push, A);
  8693. }
  8694. return new this(A);
  8695. } });
  8696. };
  8697. /***/ }),
  8698. /* 97 */
  8699. /***/ (function(module, exports, __webpack_require__) {
  8700. "use strict";
  8701. // https://tc39.github.io/proposal-setmap-offrom/
  8702. var $export = __webpack_require__(0);
  8703. module.exports = function (COLLECTION) {
  8704. $export($export.S, COLLECTION, { of: function of() {
  8705. var length = arguments.length;
  8706. var A = new Array(length);
  8707. while (length--) A[length] = arguments[length];
  8708. return new this(A);
  8709. } });
  8710. };
  8711. /***/ }),
  8712. /* 98 */
  8713. /***/ (function(module, exports, __webpack_require__) {
  8714. var global = __webpack_require__(3);
  8715. var SHARED = '__core-js_shared__';
  8716. var store = global[SHARED] || (global[SHARED] = {});
  8717. module.exports = function (key) {
  8718. return store[key] || (store[key] = {});
  8719. };
  8720. /***/ }),
  8721. /* 99 */
  8722. /***/ (function(module, exports, __webpack_require__) {
  8723. // 7.3.20 SpeciesConstructor(O, defaultConstructor)
  8724. var anObject = __webpack_require__(2);
  8725. var aFunction = __webpack_require__(15);
  8726. var SPECIES = __webpack_require__(6)('species');
  8727. module.exports = function (O, D) {
  8728. var C = anObject(O).constructor;
  8729. var S;
  8730. return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
  8731. };
  8732. /***/ }),
  8733. /* 100 */
  8734. /***/ (function(module, exports, __webpack_require__) {
  8735. var global = __webpack_require__(3);
  8736. var hide = __webpack_require__(19);
  8737. var uid = __webpack_require__(58);
  8738. var TYPED = uid('typed_array');
  8739. var VIEW = uid('view');
  8740. var ABV = !!(global.ArrayBuffer && global.DataView);
  8741. var CONSTR = ABV;
  8742. var i = 0;
  8743. var l = 9;
  8744. var Typed;
  8745. var TypedArrayConstructors = (
  8746. 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'
  8747. ).split(',');
  8748. while (i < l) {
  8749. if (Typed = global[TypedArrayConstructors[i++]]) {
  8750. hide(Typed.prototype, TYPED, true);
  8751. hide(Typed.prototype, VIEW, true);
  8752. } else CONSTR = false;
  8753. }
  8754. module.exports = {
  8755. ABV: ABV,
  8756. CONSTR: CONSTR,
  8757. TYPED: TYPED,
  8758. VIEW: VIEW
  8759. };
  8760. /***/ }),
  8761. /* 101 */
  8762. /***/ (function(module, exports, __webpack_require__) {
  8763. "use strict";
  8764. /* WEBPACK VAR INJECTION */(function(process) {/**
  8765. * Copyright (c) 2013-present, Facebook, Inc.
  8766. *
  8767. * This source code is licensed under the MIT license found in the
  8768. * LICENSE file in the root directory of this source tree.
  8769. *
  8770. */
  8771. /**
  8772. * Use invariant() to assert state which your program assumes to be true.
  8773. *
  8774. * Provide sprintf-style format (only %s is supported) and arguments
  8775. * to provide information about what broke and what you were
  8776. * expecting.
  8777. *
  8778. * The invariant message will be stripped in production, but the invariant
  8779. * will remain to ensure logic does not differ in production.
  8780. */
  8781. var validateFormat = function validateFormat(format) {};
  8782. if (process.env.NODE_ENV !== 'production') {
  8783. validateFormat = function validateFormat(format) {
  8784. if (format === undefined) {
  8785. throw new Error('invariant requires an error message argument');
  8786. }
  8787. };
  8788. }
  8789. function invariant(condition, format, a, b, c, d, e, f) {
  8790. validateFormat(format);
  8791. if (!condition) {
  8792. var error;
  8793. if (format === undefined) {
  8794. error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
  8795. } else {
  8796. var args = [a, b, c, d, e, f];
  8797. var argIndex = 0;
  8798. error = new Error(format.replace(/%s/g, function () {
  8799. return args[argIndex++];
  8800. }));
  8801. error.name = 'Invariant Violation';
  8802. }
  8803. error.framesToPop = 1; // we don't care about invariant's own frame
  8804. throw error;
  8805. }
  8806. }
  8807. module.exports = invariant;
  8808. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)))
  8809. /***/ }),
  8810. /* 102 */
  8811. /***/ (function(module, exports, __webpack_require__) {
  8812. var identity = __webpack_require__(572);
  8813. module.exports = lookAt;
  8814. /**
  8815. * Generates a look-at matrix with the given eye position, focal point, and up axis
  8816. *
  8817. * @param {mat4} out mat4 frustum matrix will be written into
  8818. * @param {vec3} eye Position of the viewer
  8819. * @param {vec3} center Point the viewer is looking at
  8820. * @param {vec3} up vec3 pointing up
  8821. * @returns {mat4} out
  8822. */
  8823. function lookAt(out, eye, center, up) {
  8824. var x0, x1, x2, y0, y1, y2, z0, z1, z2, len,
  8825. eyex = eye[0],
  8826. eyey = eye[1],
  8827. eyez = eye[2],
  8828. upx = up[0],
  8829. upy = up[1],
  8830. upz = up[2],
  8831. centerx = center[0],
  8832. centery = center[1],
  8833. centerz = center[2];
  8834. if (Math.abs(eyex - centerx) < 0.000001 &&
  8835. Math.abs(eyey - centery) < 0.000001 &&
  8836. Math.abs(eyez - centerz) < 0.000001) {
  8837. return identity(out);
  8838. }
  8839. z0 = eyex - centerx;
  8840. z1 = eyey - centery;
  8841. z2 = eyez - centerz;
  8842. len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
  8843. z0 *= len;
  8844. z1 *= len;
  8845. z2 *= len;
  8846. x0 = upy * z2 - upz * z1;
  8847. x1 = upz * z0 - upx * z2;
  8848. x2 = upx * z1 - upy * z0;
  8849. len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
  8850. if (!len) {
  8851. x0 = 0;
  8852. x1 = 0;
  8853. x2 = 0;
  8854. } else {
  8855. len = 1 / len;
  8856. x0 *= len;
  8857. x1 *= len;
  8858. x2 *= len;
  8859. }
  8860. y0 = z1 * x2 - z2 * x1;
  8861. y1 = z2 * x0 - z0 * x2;
  8862. y2 = z0 * x1 - z1 * x0;
  8863. len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
  8864. if (!len) {
  8865. y0 = 0;
  8866. y1 = 0;
  8867. y2 = 0;
  8868. } else {
  8869. len = 1 / len;
  8870. y0 *= len;
  8871. y1 *= len;
  8872. y2 *= len;
  8873. }
  8874. out[0] = x0;
  8875. out[1] = y0;
  8876. out[2] = z0;
  8877. out[3] = 0;
  8878. out[4] = x1;
  8879. out[5] = y1;
  8880. out[6] = z1;
  8881. out[7] = 0;
  8882. out[8] = x2;
  8883. out[9] = y2;
  8884. out[10] = z2;
  8885. out[11] = 0;
  8886. out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);
  8887. out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);
  8888. out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);
  8889. out[15] = 1;
  8890. return out;
  8891. };
  8892. /***/ }),
  8893. /* 103 */
  8894. /***/ (function(module, exports) {
  8895. module.exports = transformMat4
  8896. /**
  8897. * Transforms the vec4 with a mat4.
  8898. *
  8899. * @param {vec4} out the receiving vector
  8900. * @param {vec4} a the vector to transform
  8901. * @param {mat4} m matrix to transform with
  8902. * @returns {vec4} out
  8903. */
  8904. function transformMat4 (out, a, m) {
  8905. var x = a[0], y = a[1], z = a[2], w = a[3]
  8906. out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w
  8907. out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w
  8908. out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w
  8909. out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w
  8910. return out
  8911. }
  8912. /***/ }),
  8913. /* 104 */
  8914. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  8915. "use strict";
  8916. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__webgl__ = __webpack_require__(61);
  8917. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_uniforms__ = __webpack_require__(168);
  8918. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__geometry_geometry__ = __webpack_require__(45);
  8919. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__core_object_3d__ = __webpack_require__(250);
  8920. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils__ = __webpack_require__(8);
  8921. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shadertools_shaders__ = __webpack_require__(657);
  8922. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__shadertools__ = __webpack_require__(642);
  8923. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__debug_seer_integration__ = __webpack_require__(628);
  8924. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__webgl_query__ = __webpack_require__(273);
  8925. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_assert__ = __webpack_require__(1);
  8926. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_assert__);
  8927. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  8928. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  8929. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  8930. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  8931. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  8932. /* eslint quotes: ["error", "single", { "allowTemplateLiterals": true }]*/
  8933. // A scenegraph object node
  8934. // import {withParameters} from '../webgl/context-state';
  8935. var MSG_INSTANCED_PARAM_DEPRECATED = 'Warning: Model constructor: parameter "instanced" renamed to "isInstanced".\nThis will become a hard error in a future version of luma.gl.';
  8936. var ERR_MODEL_PARAMS = 'Model needs drawMode and vertexCount';
  8937. var LOG_DRAW_PRIORITY = 2;
  8938. // These old picking uniforms should be avoided and we should use picking module
  8939. // and set uniforms using Model class 'updateModuleSettings()'
  8940. var DEPRECATED_PICKING_UNIFORMS = ['renderPickingBuffer', 'pickingEnabled'];
  8941. // Model abstract O3D Class
  8942. var Model = /*#__PURE__*/function (_Object3D) {
  8943. _inherits(Model, _Object3D);
  8944. function Model(gl) {
  8945. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  8946. _classCallCheck(this, Model);
  8947. var _this = _possibleConstructorReturn(this, (Model.__proto__ || Object.getPrototypeOf(Model)).call(this, opts));
  8948. __WEBPACK_IMPORTED_MODULE_9_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__webgl__["isWebGL"])(gl));
  8949. _this.gl = gl;
  8950. _this.init(opts);
  8951. return _this;
  8952. }
  8953. /* eslint-disable max-statements */
  8954. /* eslint-disable complexity */
  8955. _createClass(Model, [{
  8956. key: 'init',
  8957. value: function init() {
  8958. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  8959. _ref$vs = _ref.vs,
  8960. vs = _ref$vs === undefined ? null : _ref$vs,
  8961. _ref$fs = _ref.fs,
  8962. fs = _ref$fs === undefined ? null : _ref$fs,
  8963. _ref$modules = _ref.modules,
  8964. modules = _ref$modules === undefined ? null : _ref$modules,
  8965. _ref$defines = _ref.defines,
  8966. defines = _ref$defines === undefined ? {} : _ref$defines,
  8967. _ref$moduleSettings = _ref.moduleSettings,
  8968. moduleSettings = _ref$moduleSettings === undefined ? {} : _ref$moduleSettings,
  8969. defaultUniforms = _ref.defaultUniforms,
  8970. _ref$program = _ref.program,
  8971. program = _ref$program === undefined ? null : _ref$program,
  8972. _ref$shaderCache = _ref.shaderCache,
  8973. shaderCache = _ref$shaderCache === undefined ? null : _ref$shaderCache,
  8974. _ref$isInstanced = _ref.isInstanced,
  8975. isInstanced = _ref$isInstanced === undefined ? false : _ref$isInstanced,
  8976. instanced = _ref.instanced,
  8977. _ref$vertexCount = _ref.vertexCount,
  8978. vertexCount = _ref$vertexCount === undefined ? undefined : _ref$vertexCount,
  8979. _ref$instanceCount = _ref.instanceCount,
  8980. instanceCount = _ref$instanceCount === undefined ? 0 : _ref$instanceCount,
  8981. drawMode = _ref.drawMode,
  8982. _ref$uniforms = _ref.uniforms,
  8983. uniforms = _ref$uniforms === undefined ? {} : _ref$uniforms,
  8984. _ref$attributes = _ref.attributes,
  8985. attributes = _ref$attributes === undefined ? {} : _ref$attributes,
  8986. _ref$geometry = _ref.geometry,
  8987. geometry = _ref$geometry === undefined ? null : _ref$geometry,
  8988. _ref$pickable = _ref.pickable,
  8989. pickable = _ref$pickable === undefined ? true : _ref$pickable,
  8990. _ref$pick = _ref.pick,
  8991. pick = _ref$pick === undefined ? null : _ref$pick,
  8992. _ref$render = _ref.render,
  8993. render = _ref$render === undefined ? null : _ref$render,
  8994. _ref$onBeforeRender = _ref.onBeforeRender,
  8995. onBeforeRender = _ref$onBeforeRender === undefined ? function () {} : _ref$onBeforeRender,
  8996. _ref$onAfterRender = _ref.onAfterRender,
  8997. onAfterRender = _ref$onAfterRender === undefined ? function () {} : _ref$onAfterRender,
  8998. _ref$varyings = _ref.varyings,
  8999. varyings = _ref$varyings === undefined ? null : _ref$varyings,
  9000. _ref$bufferMode = _ref.bufferMode,
  9001. bufferMode = _ref$bufferMode === undefined ? __WEBPACK_IMPORTED_MODULE_0__webgl__["GL"].SEPARATE_ATTRIBS : _ref$bufferMode,
  9002. _ref$timerQueryEnable = _ref.timerQueryEnabled,
  9003. timerQueryEnabled = _ref$timerQueryEnable === undefined ? false : _ref$timerQueryEnable;
  9004. this._initializeProgram({
  9005. vs: vs,
  9006. fs: fs,
  9007. modules: modules,
  9008. defines: defines,
  9009. moduleSettings: moduleSettings,
  9010. defaultUniforms: defaultUniforms,
  9011. program: program,
  9012. shaderCache: shaderCache,
  9013. varyings: varyings,
  9014. bufferMode: bufferMode
  9015. });
  9016. this.uniforms = {};
  9017. // Make sure we have some reasonable default uniforms in place
  9018. uniforms = Object.assign({}, this.program.defaultUniforms, uniforms);
  9019. this.setUniforms(uniforms);
  9020. // Get all default uniforms
  9021. this.setUniforms(this.getModuleUniforms());
  9022. // Get unforms for supplied parameters
  9023. this.setUniforms(this.getModuleUniforms(moduleSettings));
  9024. if (instanced) {
  9025. /* global console */
  9026. /* eslint-disable no-console */
  9027. console.warn(MSG_INSTANCED_PARAM_DEPRECATED);
  9028. isInstanced = isInstanced || instanced;
  9029. }
  9030. // TODO - remove?
  9031. this.buffers = {};
  9032. this.samplers = {};
  9033. this.userData = {};
  9034. this.drawParams = {};
  9035. this.dynamic = false;
  9036. this.needsRedraw = true;
  9037. // Attributes and buffers
  9038. if (geometry) {
  9039. this.setGeometry(geometry);
  9040. }
  9041. this.attributes = {};
  9042. this.setAttributes(attributes);
  9043. // geometry might have set drawMode and vertexCount
  9044. if (drawMode !== undefined) {
  9045. this.drawMode = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__geometry_geometry__["b" /* getDrawMode */])(drawMode);
  9046. }
  9047. if (vertexCount !== undefined) {
  9048. this.vertexCount = vertexCount;
  9049. }
  9050. this.isInstanced = isInstanced;
  9051. this.instanceCount = instanceCount;
  9052. // picking options
  9053. this.pickable = Boolean(pickable);
  9054. this.pick = pick || function () {
  9055. return false;
  9056. };
  9057. this.onBeforeRender = onBeforeRender;
  9058. this.onAfterRender = onAfterRender;
  9059. // assert(program || program instanceof Program);
  9060. __WEBPACK_IMPORTED_MODULE_9_assert___default()(this.drawMode !== undefined && Number.isFinite(this.vertexCount), ERR_MODEL_PARAMS);
  9061. this.timerQueryEnabled = timerQueryEnabled && __WEBPACK_IMPORTED_MODULE_8__webgl_query__["a" /* default */].isSupported(this.gl, { timer: true });
  9062. this.timeElapsedQuery = undefined;
  9063. this.lastQueryReturned = true;
  9064. this.stats = {
  9065. accumulatedFrameTime: 0,
  9066. averageFrameTime: 0,
  9067. profileFrameCount: 0
  9068. };
  9069. }
  9070. /* eslint-enable max-statements */
  9071. }, {
  9072. key: 'delete',
  9073. value: function _delete() {
  9074. this.program.delete();
  9075. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__debug_seer_integration__["a" /* removeModel */])(this.id);
  9076. }
  9077. }, {
  9078. key: 'destroy',
  9079. value: function destroy() {
  9080. this.delete();
  9081. }
  9082. }, {
  9083. key: 'setNeedsRedraw',
  9084. value: function setNeedsRedraw() {
  9085. var redraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  9086. this.needsRedraw = redraw;
  9087. return this;
  9088. }
  9089. }, {
  9090. key: 'getNeedsRedraw',
  9091. value: function getNeedsRedraw() {
  9092. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  9093. _ref2$clearRedrawFlag = _ref2.clearRedrawFlags,
  9094. clearRedrawFlags = _ref2$clearRedrawFlag === undefined ? false : _ref2$clearRedrawFlag;
  9095. var redraw = false;
  9096. redraw = redraw || this.needsRedraw;
  9097. this.needsRedraw = this.needsRedraw && !clearRedrawFlags;
  9098. redraw = redraw || this.geometry.getNeedsRedraw({ clearRedrawFlags: clearRedrawFlags });
  9099. return redraw;
  9100. }
  9101. }, {
  9102. key: 'setDrawMode',
  9103. value: function setDrawMode(drawMode) {
  9104. this.drawMode = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__geometry_geometry__["b" /* getDrawMode */])(drawMode);
  9105. return this;
  9106. }
  9107. }, {
  9108. key: 'getDrawMode',
  9109. value: function getDrawMode() {
  9110. return this.drawMode;
  9111. }
  9112. }, {
  9113. key: 'setVertexCount',
  9114. value: function setVertexCount(vertexCount) {
  9115. __WEBPACK_IMPORTED_MODULE_9_assert___default()(Number.isFinite(vertexCount));
  9116. this.vertexCount = vertexCount;
  9117. return this;
  9118. }
  9119. }, {
  9120. key: 'getVertexCount',
  9121. value: function getVertexCount() {
  9122. return this.vertexCount;
  9123. }
  9124. }, {
  9125. key: 'setInstanceCount',
  9126. value: function setInstanceCount(instanceCount) {
  9127. __WEBPACK_IMPORTED_MODULE_9_assert___default()(Number.isFinite(instanceCount));
  9128. this.instanceCount = instanceCount;
  9129. return this;
  9130. }
  9131. }, {
  9132. key: 'getInstanceCount',
  9133. value: function getInstanceCount() {
  9134. return this.instanceCount;
  9135. }
  9136. }, {
  9137. key: 'getProgram',
  9138. value: function getProgram() {
  9139. return this.program;
  9140. }
  9141. }, {
  9142. key: 'setGeometry',
  9143. // TODO - just set attributes, don't hold on to geometry
  9144. value: function setGeometry(geometry) {
  9145. this.geometry = geometry;
  9146. this.vertexCount = geometry.getVertexCount();
  9147. this.drawMode = geometry.drawMode;
  9148. this._createBuffersFromAttributeDescriptors(this.geometry.getAttributes());
  9149. this.setNeedsRedraw();
  9150. return this;
  9151. }
  9152. }, {
  9153. key: 'getAttributes',
  9154. value: function getAttributes() {
  9155. return this.attributes;
  9156. }
  9157. }, {
  9158. key: 'setAttributes',
  9159. value: function setAttributes() {
  9160. var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  9161. // Reutrn early if no attributes to set.
  9162. if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__utils__["f" /* isObjectEmpty */])(attributes)) {
  9163. return this;
  9164. }
  9165. Object.assign(this.attributes, attributes);
  9166. this._createBuffersFromAttributeDescriptors(attributes);
  9167. this.setNeedsRedraw();
  9168. return this;
  9169. }
  9170. }, {
  9171. key: 'getUniforms',
  9172. value: function getUniforms() {
  9173. return this.uniforms;
  9174. }
  9175. // TODO - should actually set the uniforms
  9176. }, {
  9177. key: 'setUniforms',
  9178. value: function setUniforms() {
  9179. var uniforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  9180. // TODO: we are still setting these uniforms in deck.gl so we don't break any external
  9181. // application, these are marked deprecated in 5.0, remove them in deck.gl in 6.0.
  9182. // Disabling since it gets too noisy in console, these are documented as deprecated.
  9183. // this._checkForDeprecatedUniforms(uniforms);
  9184. var somethingChanged = false;
  9185. for (var key in uniforms) {
  9186. if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_uniforms__["d" /* areUniformsEqual */])(this.uniforms[key], uniforms[key])) {
  9187. somethingChanged = true;
  9188. break;
  9189. }
  9190. }
  9191. if (somethingChanged) {
  9192. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__webgl__["checkUniformValues"])(uniforms, this.id);
  9193. Object.assign(this.uniforms, uniforms);
  9194. this.setNeedsRedraw();
  9195. }
  9196. return this;
  9197. }
  9198. // getModuleUniforms (already on object)
  9199. }, {
  9200. key: 'updateModuleSettings',
  9201. value: function updateModuleSettings(opts) {
  9202. var uniforms = this.getModuleUniforms(opts);
  9203. return this.setUniforms(uniforms);
  9204. }
  9205. }, {
  9206. key: 'draw',
  9207. value: function draw() {
  9208. var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  9209. _ref3$moduleSettings = _ref3.moduleSettings,
  9210. moduleSettings = _ref3$moduleSettings === undefined ? null : _ref3$moduleSettings,
  9211. _ref3$uniforms = _ref3.uniforms,
  9212. uniforms = _ref3$uniforms === undefined ? {} : _ref3$uniforms,
  9213. _ref3$attributes = _ref3.attributes,
  9214. attributes = _ref3$attributes === undefined ? {} : _ref3$attributes,
  9215. _ref3$samplers = _ref3.samplers,
  9216. samplers = _ref3$samplers === undefined ? {} : _ref3$samplers,
  9217. _ref3$parameters = _ref3.parameters,
  9218. parameters = _ref3$parameters === undefined ? {} : _ref3$parameters,
  9219. settings = _ref3.settings,
  9220. _ref3$framebuffer = _ref3.framebuffer,
  9221. framebuffer = _ref3$framebuffer === undefined ? null : _ref3$framebuffer,
  9222. _ref3$vertexArray = _ref3.vertexArray,
  9223. vertexArray = _ref3$vertexArray === undefined ? null : _ref3$vertexArray,
  9224. _ref3$transformFeedba = _ref3.transformFeedback,
  9225. transformFeedback = _ref3$transformFeedba === undefined ? null : _ref3$transformFeedba;
  9226. if (settings) {
  9227. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].deprecated('settings', 'parameters');
  9228. parameters = settings;
  9229. }
  9230. if (moduleSettings) {
  9231. this.updateModuleSettings(moduleSettings);
  9232. }
  9233. if (framebuffer) {
  9234. parameters = Object.assign(parameters, { framebuffer: framebuffer });
  9235. }
  9236. this.render(uniforms, attributes, samplers, transformFeedback, parameters, vertexArray);
  9237. if (framebuffer) {
  9238. framebuffer.log({ priority: LOG_DRAW_PRIORITY, message: 'Rendered to ' + framebuffer.id });
  9239. }
  9240. return this;
  9241. }
  9242. /* eslint-disable max-params */
  9243. }, {
  9244. key: 'render',
  9245. value: function render() {
  9246. var uniforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  9247. var attributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  9248. var samplers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  9249. var transformFeedback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
  9250. var parameters = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  9251. var vertexArray = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
  9252. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__debug_seer_integration__["b" /* addModel */])(this);
  9253. var resolvedUniforms = this.addViewUniforms(uniforms);
  9254. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__debug_seer_integration__["c" /* getOverrides */])(this.id, resolvedUniforms);
  9255. this.setUniforms(resolvedUniforms);
  9256. this.setAttributes(attributes);
  9257. Object.assign(this.samplers, samplers);
  9258. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].group(LOG_DRAW_PRIORITY, '>>> RENDERING MODEL ' + this.id, { collapsed: __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].priority <= 2 });
  9259. this.setProgramState({ vertexArray: vertexArray });
  9260. this._logAttributesAndUniforms(2, resolvedUniforms);
  9261. this.onBeforeRender();
  9262. var drawParams = this.drawParams;
  9263. if (drawParams.isInstanced && !this.isInstanced) {
  9264. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].warn('Found instanced attributes on non-instanced model');
  9265. }
  9266. var isIndexed = drawParams.isIndexed,
  9267. indexType = drawParams.indexType;
  9268. var isInstanced = this.isInstanced,
  9269. instanceCount = this.instanceCount;
  9270. this._timerQueryStart();
  9271. this.program.draw({
  9272. parameters: parameters,
  9273. drawMode: this.getDrawMode(),
  9274. vertexCount: this.getVertexCount(),
  9275. vertexArray: vertexArray,
  9276. transformFeedback: transformFeedback,
  9277. isIndexed: isIndexed,
  9278. indexType: indexType,
  9279. isInstanced: isInstanced,
  9280. instanceCount: instanceCount
  9281. });
  9282. this._timerQueryEnd();
  9283. this.onAfterRender();
  9284. this.unsetProgramState();
  9285. this.setNeedsRedraw(false);
  9286. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].groupEnd(LOG_DRAW_PRIORITY, '>>> RENDERING MODEL ' + this.id);
  9287. return this;
  9288. }
  9289. /* eslint-enable max-params */
  9290. }, {
  9291. key: 'setProgramState',
  9292. value: function setProgramState() {
  9293. var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  9294. _ref4$vertexArray = _ref4.vertexArray,
  9295. vertexArray = _ref4$vertexArray === undefined ? null : _ref4$vertexArray;
  9296. var program = this.program;
  9297. program.use();
  9298. this.drawParams = {};
  9299. program.setBuffers(this.buffers, { drawParams: this.drawParams });
  9300. program.checkAttributeBindings({ vertexArray: vertexArray });
  9301. program.setUniforms(this.uniforms, this.samplers);
  9302. return this;
  9303. }
  9304. }, {
  9305. key: 'unsetProgramState',
  9306. value: function unsetProgramState() {
  9307. // Ensures all vertex attributes are disabled and ELEMENT_ARRAY_BUFFER
  9308. // is unbound
  9309. this.program.unsetBuffers();
  9310. return this;
  9311. }
  9312. // DEPRECATED METHODS
  9313. // TODO - uniform names are too strongly linked camera <=> default shaders
  9314. // At least all special handling is collected here.
  9315. }, {
  9316. key: 'addViewUniforms',
  9317. value: function addViewUniforms(uniforms) {
  9318. // TODO - special treatment of these parameters should be removed
  9319. var camera = uniforms.camera,
  9320. viewMatrix = uniforms.viewMatrix,
  9321. modelMatrix = uniforms.modelMatrix;
  9322. // Camera exposes uniforms that can be used directly in shaders
  9323. var cameraUniforms = camera ? camera.getUniforms() : {};
  9324. var viewUniforms = viewMatrix ? this.getCoordinateUniforms(viewMatrix, modelMatrix) : {};
  9325. return Object.assign({}, uniforms, cameraUniforms, viewUniforms);
  9326. }
  9327. // PRIVATE METHODS
  9328. }, {
  9329. key: '_initializeProgram',
  9330. value: function _initializeProgram(_ref5) {
  9331. var vs = _ref5.vs,
  9332. fs = _ref5.fs,
  9333. modules = _ref5.modules,
  9334. defines = _ref5.defines,
  9335. moduleSettings = _ref5.moduleSettings,
  9336. defaultUniforms = _ref5.defaultUniforms,
  9337. program = _ref5.program,
  9338. shaderCache = _ref5.shaderCache,
  9339. varyings = _ref5.varyings,
  9340. bufferMode = _ref5.bufferMode;
  9341. this.getModuleUniforms = function (x) {};
  9342. if (!program) {
  9343. // Assign default shaders if none are provided
  9344. if (!vs) {
  9345. vs = __WEBPACK_IMPORTED_MODULE_5__shadertools_shaders__["a" /* MODULAR_SHADERS */].vs;
  9346. }
  9347. if (!fs) {
  9348. fs = __WEBPACK_IMPORTED_MODULE_5__shadertools_shaders__["a" /* MODULAR_SHADERS */].fs;
  9349. }
  9350. var assembleResult = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__shadertools__["a" /* assembleShaders */])(this.gl, { vs: vs, fs: fs, modules: modules, defines: defines });
  9351. vs = assembleResult.vs;
  9352. fs = assembleResult.fs;
  9353. if (shaderCache) {
  9354. program = shaderCache.getProgram(this.gl, { vs: vs, fs: fs, id: this.id });
  9355. } else {
  9356. program = new __WEBPACK_IMPORTED_MODULE_0__webgl__["Program"](this.gl, { vs: vs, fs: fs, varyings: varyings, bufferMode: bufferMode });
  9357. }
  9358. var getUniforms = assembleResult.getUniforms;
  9359. this.getModuleUniforms = getUniforms || function (x) {};
  9360. }
  9361. this.program = program;
  9362. __WEBPACK_IMPORTED_MODULE_9_assert___default()(this.program instanceof __WEBPACK_IMPORTED_MODULE_0__webgl__["Program"], 'Model needs a program');
  9363. }
  9364. /* eslint-enable complexity */
  9365. }, {
  9366. key: '_checkForDeprecatedUniforms',
  9367. value: function _checkForDeprecatedUniforms(uniforms) {
  9368. // deprecated picking uniforms
  9369. DEPRECATED_PICKING_UNIFORMS.forEach(function (uniform) {
  9370. if (uniform in uniforms) {
  9371. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].deprecated(uniform, 'use picking shader module and Model class updateModuleSettings()');
  9372. }
  9373. });
  9374. }
  9375. }, {
  9376. key: '_timerQueryStart',
  9377. value: function _timerQueryStart() {
  9378. if (this.timerQueryEnabled === true) {
  9379. if (!this.timeElapsedQuery) {
  9380. this.timeElapsedQuery = new __WEBPACK_IMPORTED_MODULE_8__webgl_query__["a" /* default */](this.gl);
  9381. }
  9382. if (this.lastQueryReturned) {
  9383. this.lastQueryReturned = false;
  9384. this.timeElapsedQuery.beginTimeElapsedQuery();
  9385. }
  9386. }
  9387. }
  9388. }, {
  9389. key: '_timerQueryEnd',
  9390. value: function _timerQueryEnd() {
  9391. if (this.timerQueryEnabled === true) {
  9392. this.timeElapsedQuery.end();
  9393. // TODO: Skip results if 'gl.getParameter(this.ext.GPU_DISJOINT_EXT)' returns false
  9394. // should this be incorporated into Query object?
  9395. if (this.timeElapsedQuery.isResultAvailable()) {
  9396. this.lastQueryReturned = true;
  9397. var elapsedTime = this.timeElapsedQuery.getResult();
  9398. // Update stats (e.g. for seer)
  9399. this.stats.lastFrameTime = elapsedTime;
  9400. this.stats.accumulatedFrameTime += elapsedTime;
  9401. this.stats.profileFrameCount++;
  9402. this.stats.averageFrameTime = this.stats.accumulatedFrameTime / this.stats.profileFrameCount;
  9403. // Log stats
  9404. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].log(LOG_DRAW_PRIORITY, 'GPU time ' + this.program.id + ': ' + this.stats.lastFrameTime + 'ms average ' + this.stats.averageFrameTime + 'ms accumulated: ' + this.stats.accumulatedFrameTime + 'ms count: ' + this.stats.profileFrameCount);
  9405. }
  9406. }
  9407. }
  9408. // Makes sure buffers are created for all attributes
  9409. // and that the program is updated with those buffers
  9410. // TODO - do we need the separation between "attributes" and "buffers"
  9411. // couldn't apps just create buffers directly?
  9412. }, {
  9413. key: '_createBuffersFromAttributeDescriptors',
  9414. value: function _createBuffersFromAttributeDescriptors(attributes) {
  9415. var gl = this.program.gl;
  9416. for (var attributeName in attributes) {
  9417. var attribute = attributes[attributeName];
  9418. if (attribute instanceof __WEBPACK_IMPORTED_MODULE_0__webgl__["Buffer"]) {
  9419. this.buffers[attributeName] = attribute;
  9420. } else if (attribute.isGeneric) {
  9421. this.buffers[attributeName] = attribute.value;
  9422. } else {
  9423. // Autocreate a buffer
  9424. this.buffers[attributeName] = this.buffers[attributeName] || new __WEBPACK_IMPORTED_MODULE_0__webgl__["Buffer"](gl, {
  9425. target: attribute.isIndexed ? __WEBPACK_IMPORTED_MODULE_0__webgl__["GL"].ELEMENT_ARRAY_BUFFER : __WEBPACK_IMPORTED_MODULE_0__webgl__["GL"].ARRAY_BUFFER
  9426. });
  9427. var buffer = this.buffers[attributeName];
  9428. buffer.setData({ data: attribute.value }).setDataLayout(attribute);
  9429. }
  9430. }
  9431. return this;
  9432. }
  9433. }, {
  9434. key: '_logAttributesAndUniforms',
  9435. value: function _logAttributesAndUniforms(priority) {
  9436. var uniforms = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  9437. if (__WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].priority >= priority) {
  9438. var attributeTable = this._getAttributesTable({
  9439. header: this.id + ' attributes',
  9440. program: this.program,
  9441. attributes: Object.assign({}, this.geometry.attributes, this.attributes)
  9442. });
  9443. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].table(priority, attributeTable);
  9444. var _getUniformsTable = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_uniforms__["e" /* getUniformsTable */])({
  9445. header: this.id + ' uniforms',
  9446. program: this.program,
  9447. uniforms: Object.assign({}, this.uniforms, uniforms)
  9448. }),
  9449. table = _getUniformsTable.table,
  9450. unusedTable = _getUniformsTable.unusedTable,
  9451. unusedCount = _getUniformsTable.unusedCount;
  9452. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].table(priority, table);
  9453. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].log(priority, (unusedCount || 'No') + ' unused uniforms ', unusedTable);
  9454. } else {
  9455. // Always log missing uniforms
  9456. var _getUniformsTable2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_uniforms__["e" /* getUniformsTable */])({
  9457. header: this.id + ' uniforms',
  9458. program: this.program,
  9459. uniforms: Object.assign({}, this.uniforms, uniforms),
  9460. undefinedOnly: true
  9461. }),
  9462. _table = _getUniformsTable2.table,
  9463. count = _getUniformsTable2.count;
  9464. if (count > 0) {
  9465. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].table(priority, _table);
  9466. }
  9467. }
  9468. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__debug_seer_integration__["d" /* logModel */])(this, uniforms);
  9469. }
  9470. // Todo move to attributes manager
  9471. }, {
  9472. key: '_getAttributesTable',
  9473. value: function _getAttributesTable() {
  9474. var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  9475. attributes = _ref6.attributes,
  9476. _ref6$header = _ref6.header,
  9477. header = _ref6$header === undefined ? 'Attributes' : _ref6$header,
  9478. instanced = _ref6.instanced,
  9479. program = _ref6.program;
  9480. __WEBPACK_IMPORTED_MODULE_9_assert___default()(program);
  9481. var attributeLocations = program._attributeLocations;
  9482. var table = {}; // {[header]: {}};
  9483. // Add used attributes
  9484. for (var attributeName in attributeLocations) {
  9485. var attribute = attributes[attributeName];
  9486. var location = attributeLocations[attributeName];
  9487. table[attributeName] = this._getAttributeEntry(attribute, location, header);
  9488. }
  9489. // Add any unused attributes
  9490. for (var _attributeName in attributes) {
  9491. var _attribute = attributes[_attributeName];
  9492. if (!table[_attributeName]) {
  9493. table[_attributeName] = this._getAttributeEntry(_attribute, null, header);
  9494. }
  9495. }
  9496. return table;
  9497. }
  9498. }, {
  9499. key: '_getAttributeEntry',
  9500. value: function _getAttributeEntry(attribute, location, header) {
  9501. var round = function round(num) {
  9502. return Math.round(num * 10) / 10;
  9503. };
  9504. var type = 'NOT PROVIDED';
  9505. var instanced = 0;
  9506. var size = 'N/A';
  9507. var verts = 'N/A';
  9508. var bytes = 'N/A';
  9509. var value = 'N/A';
  9510. if (attribute && location === null) {
  9511. location = attribute.isIndexed ? 'ELEMENT_ARRAY_BUFFER' : 'NOT USED';
  9512. }
  9513. if (attribute instanceof __WEBPACK_IMPORTED_MODULE_0__webgl__["Buffer"]) {
  9514. var buffer = attribute;
  9515. type = buffer.layout.type;
  9516. instanced = buffer.layout.instanced;
  9517. size = buffer.layout.size;
  9518. verts = round(buffer.data.length / buffer.layout.size);
  9519. bytes = buffer.data.length * buffer.data.BYTES_PER_ELEMENT;
  9520. } else if (attribute) {
  9521. type = attribute.value.constructor.name;
  9522. instanced = attribute.instanced;
  9523. size = attribute.size;
  9524. verts = round(attribute.value.length / attribute.size);
  9525. bytes = attribute.value.length * attribute.value.BYTES_PER_ELEMENT;
  9526. value = attribute.value;
  9527. }
  9528. // Generate a type name by dropping Array from Float32Array etc.
  9529. type = String(type).replace('Array', '');
  9530. // Look for 'nt' to detect integer types, e.g. Int32Array, Uint32Array
  9531. var isInteger = type.indexOf('nt') !== -1;
  9532. return _defineProperty({
  9533. 'Inst/Verts/Comps/Bytes/Type/Loc': (instanced ? 'I ' : 'P ') + ' ' + verts + ' (x' + size + '=' + bytes + ' ' + type + ') loc=' + location
  9534. }, header, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__utils__["c" /* formatValue */])(value, { size: size, isInteger: isInteger }));
  9535. }
  9536. // DEPRECATED / REMOVED
  9537. }, {
  9538. key: 'isPickable',
  9539. value: function isPickable() {
  9540. return this.pickable;
  9541. }
  9542. }, {
  9543. key: 'setPickable',
  9544. value: function setPickable() {
  9545. var pickable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  9546. this.pickable = Boolean(pickable);
  9547. return this;
  9548. }
  9549. }, {
  9550. key: 'getGeometry',
  9551. value: function getGeometry() {
  9552. return this.geometry;
  9553. }
  9554. }, {
  9555. key: 'varyingMap',
  9556. get: function get() {
  9557. return this.program.varyingMap;
  9558. }
  9559. }]);
  9560. return Model;
  9561. }(__WEBPACK_IMPORTED_MODULE_3__core_object_3d__["a" /* default */]);
  9562. /* harmony default export */ __webpack_exports__["a"] = (Model);
  9563. //# sourceMappingURL=model.js.map
  9564. /***/ }),
  9565. /* 105 */
  9566. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  9567. "use strict";
  9568. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(45);
  9569. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  9570. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  9571. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  9572. var TruncatedConeGeometry = /*#__PURE__*/function (_Geometry) {
  9573. _inherits(TruncatedConeGeometry, _Geometry);
  9574. // Primitives inspired by TDL http://code.google.com/p/webglsamples/,
  9575. // copyright 2011 Google Inc. new BSD License
  9576. // (http://www.opensource.org/licenses/bsd-license.php).
  9577. /* eslint-disable max-statements, complexity */
  9578. function TruncatedConeGeometry() {
  9579. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  9580. _classCallCheck(this, TruncatedConeGeometry);
  9581. var _opts$bottomRadius = opts.bottomRadius,
  9582. bottomRadius = _opts$bottomRadius === undefined ? 0 : _opts$bottomRadius,
  9583. _opts$topRadius = opts.topRadius,
  9584. topRadius = _opts$topRadius === undefined ? 0 : _opts$topRadius,
  9585. _opts$height = opts.height,
  9586. height = _opts$height === undefined ? 1 : _opts$height,
  9587. _opts$nradial = opts.nradial,
  9588. nradial = _opts$nradial === undefined ? 10 : _opts$nradial,
  9589. _opts$nvertical = opts.nvertical,
  9590. nvertical = _opts$nvertical === undefined ? 10 : _opts$nvertical,
  9591. _opts$topCap = opts.topCap,
  9592. topCap = _opts$topCap === undefined ? false : _opts$topCap,
  9593. _opts$bottomCap = opts.bottomCap,
  9594. bottomCap = _opts$bottomCap === undefined ? false : _opts$bottomCap;
  9595. var extra = (topCap ? 2 : 0) + (bottomCap ? 2 : 0);
  9596. var numVertices = (nradial + 1) * (nvertical + 1 + extra);
  9597. var slant = Math.atan2(bottomRadius - topRadius, height);
  9598. var msin = Math.sin;
  9599. var mcos = Math.cos;
  9600. var mpi = Math.PI;
  9601. var cosSlant = mcos(slant);
  9602. var sinSlant = msin(slant);
  9603. var start = topCap ? -2 : 0;
  9604. var end = nvertical + (bottomCap ? 2 : 0);
  9605. var vertsAroundEdge = nradial + 1;
  9606. var positions = new Float32Array(numVertices * 3);
  9607. var normals = new Float32Array(numVertices * 3);
  9608. var texCoords = new Float32Array(numVertices * 2);
  9609. var indices = new Uint16Array(nradial * (nvertical + extra) * 6);
  9610. var i3 = 0;
  9611. var i2 = 0;
  9612. for (var i = start; i <= end; i++) {
  9613. var v = i / nvertical;
  9614. var y = height * v;
  9615. var ringRadius = void 0;
  9616. if (i < 0) {
  9617. y = 0;
  9618. v = 1;
  9619. ringRadius = bottomRadius;
  9620. } else if (i > nvertical) {
  9621. y = height;
  9622. v = 1;
  9623. ringRadius = topRadius;
  9624. } else {
  9625. ringRadius = bottomRadius + (topRadius - bottomRadius) * (i / nvertical);
  9626. }
  9627. if (i === -2 || i === nvertical + 2) {
  9628. ringRadius = 0;
  9629. v = 0;
  9630. }
  9631. y -= height / 2;
  9632. for (var j = 0; j < vertsAroundEdge; j++) {
  9633. var sin = msin(j * mpi * 2 / nradial);
  9634. var cos = mcos(j * mpi * 2 / nradial);
  9635. positions[i3 + 0] = sin * ringRadius;
  9636. positions[i3 + 1] = y;
  9637. positions[i3 + 2] = cos * ringRadius;
  9638. normals[i3 + 0] = i < 0 || i > nvertical ? 0 : sin * cosSlant;
  9639. normals[i3 + 1] = i < 0 ? -1 : i > nvertical ? 1 : sinSlant;
  9640. normals[i3 + 2] = i < 0 || i > nvertical ? 0 : cos * cosSlant;
  9641. texCoords[i2 + 0] = j / nradial;
  9642. texCoords[i2 + 1] = v;
  9643. i2 += 2;
  9644. i3 += 3;
  9645. }
  9646. }
  9647. for (var _i = 0; _i < nvertical + extra; _i++) {
  9648. for (var _j = 0; _j < nradial; _j++) {
  9649. var index = (_i * nradial + _j) * 6;
  9650. indices[index + 0] = vertsAroundEdge * (_i + 0) + 0 + _j;
  9651. indices[index + 1] = vertsAroundEdge * (_i + 0) + 1 + _j;
  9652. indices[index + 2] = vertsAroundEdge * (_i + 1) + 1 + _j;
  9653. indices[index + 3] = vertsAroundEdge * (_i + 0) + 0 + _j;
  9654. indices[index + 4] = vertsAroundEdge * (_i + 1) + 1 + _j;
  9655. indices[index + 5] = vertsAroundEdge * (_i + 1) + 0 + _j;
  9656. }
  9657. }
  9658. return _possibleConstructorReturn(this, (TruncatedConeGeometry.__proto__ || Object.getPrototypeOf(TruncatedConeGeometry)).call(this, Object.assign({}, opts, {
  9659. attributes: {
  9660. positions: positions,
  9661. normals: normals,
  9662. texCoords: texCoords,
  9663. indices: indices
  9664. }
  9665. })));
  9666. }
  9667. return TruncatedConeGeometry;
  9668. }(__WEBPACK_IMPORTED_MODULE_0__geometry__["a" /* default */]);
  9669. /* harmony default export */ __webpack_exports__["a"] = (TruncatedConeGeometry);
  9670. //# sourceMappingURL=truncated-cone-geometry.js.map
  9671. /***/ }),
  9672. /* 106 */
  9673. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  9674. "use strict";
  9675. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  9676. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_is_browser__ = __webpack_require__(262);
  9677. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_globals__ = __webpack_require__(261);
  9678. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_log__ = __webpack_require__(263);
  9679. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "global", function() { return __WEBPACK_IMPORTED_MODULE_1__utils_globals__["b"]; });
  9680. // Version detection using babel plugin
  9681. /* global __VERSION__ */
  9682. var VERSION = true ? '5.1.4' : 'untranspiled source';
  9683. var STARTUP_MESSAGE = 'set luma.log.priority=1 (or higher) to trace rendering';
  9684. // Assign luma.log.priority in console to control logging: \
  9685. // 0: none, 1: minimal, 2: verbose, 3: attribute/uniforms, 4: gl logs
  9686. // luma.log.break[], set to gl funcs, luma.log.profile[] set to model names`;
  9687. if (__WEBPACK_IMPORTED_MODULE_1__utils_globals__["b" /* global */].luma && __WEBPACK_IMPORTED_MODULE_1__utils_globals__["b" /* global */].luma.VERSION !== VERSION) {
  9688. throw new Error('luma.gl - multiple VERSIONs detected: ' + __WEBPACK_IMPORTED_MODULE_1__utils_globals__["b" /* global */].luma.VERSION + ' vs ' + VERSION);
  9689. }
  9690. if (!__WEBPACK_IMPORTED_MODULE_1__utils_globals__["b" /* global */].luma) {
  9691. /* global console */
  9692. /* eslint-disable no-console */
  9693. if (__WEBPACK_IMPORTED_MODULE_0__utils_is_browser__["a" /* isBrowser */]) {
  9694. console.log('luma.gl ' + VERSION + ' - ' + STARTUP_MESSAGE);
  9695. }
  9696. __WEBPACK_IMPORTED_MODULE_1__utils_globals__["b" /* global */].luma = __WEBPACK_IMPORTED_MODULE_1__utils_globals__["b" /* global */].luma || {
  9697. VERSION: VERSION,
  9698. version: VERSION,
  9699. log: __WEBPACK_IMPORTED_MODULE_2__utils_log__["a" /* default */],
  9700. // A global stats object that various components can add information to
  9701. // E.g. see webgl/resource.js
  9702. stats: {},
  9703. // Keep some luma globals in a sub-object
  9704. // This allows us to dynamically detect if certain modules have been
  9705. // included (such as IO and headless) and enable related functionality,
  9706. // without unconditionally requiring and thus bundling big dependencies
  9707. // into the app.
  9708. globals: {
  9709. headlessGL: null,
  9710. headlessTypes: null,
  9711. modules: {},
  9712. nodeIO: {}
  9713. }
  9714. };
  9715. }
  9716. /* harmony default export */ __webpack_exports__["default"] = (__WEBPACK_IMPORTED_MODULE_1__utils_globals__["b" /* global */].luma);
  9717. //# sourceMappingURL=init.js.map
  9718. /***/ }),
  9719. /* 107 */
  9720. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  9721. "use strict";
  9722. /* harmony export (immutable) */ __webpack_exports__["a"] = clear;
  9723. /* harmony export (immutable) */ __webpack_exports__["b"] = clearBuffer;
  9724. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__context__ = __webpack_require__(7);
  9725. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context_state__ = __webpack_require__(68);
  9726. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert__ = __webpack_require__(1);
  9727. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_assert__);
  9728. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  9729. // Should collapse during minification
  9730. var GL_DEPTH_BUFFER_BIT = 0x00000100;
  9731. var GL_STENCIL_BUFFER_BIT = 0x00000400;
  9732. var GL_COLOR_BUFFER_BIT = 0x00004000;
  9733. var GL_COLOR = 0x1800;
  9734. var GL_DEPTH = 0x1801;
  9735. var GL_STENCIL = 0x1802;
  9736. var GL_DEPTH_STENCIL = 0x84F9;
  9737. // Should disappear if asserts are removed
  9738. var ERR_ARGUMENTS = 'clear: bad arguments';
  9739. // Optionally clears depth, color and stencil buffers
  9740. function clear(gl) {
  9741. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  9742. _ref$framebuffer = _ref.framebuffer,
  9743. framebuffer = _ref$framebuffer === undefined ? null : _ref$framebuffer,
  9744. _ref$color = _ref.color,
  9745. color = _ref$color === undefined ? null : _ref$color,
  9746. _ref$depth = _ref.depth,
  9747. depth = _ref$depth === undefined ? null : _ref$depth,
  9748. _ref$stencil = _ref.stencil,
  9749. stencil = _ref$stencil === undefined ? null : _ref$stencil;
  9750. var parameters = {};
  9751. if (framebuffer) {
  9752. parameters.framebuffer = framebuffer;
  9753. }
  9754. var clearFlags = 0;
  9755. if (color) {
  9756. clearFlags |= GL_COLOR_BUFFER_BIT;
  9757. if (color !== true) {
  9758. parameters.clearColor = color;
  9759. }
  9760. }
  9761. if (depth) {
  9762. clearFlags |= GL_DEPTH_BUFFER_BIT;
  9763. if (depth !== true) {
  9764. parameters.clearDepth = depth;
  9765. }
  9766. }
  9767. if (stencil) {
  9768. clearFlags |= GL_STENCIL_BUFFER_BIT;
  9769. if (depth !== true) {
  9770. parameters.clearStencil = depth;
  9771. }
  9772. }
  9773. __WEBPACK_IMPORTED_MODULE_2_assert___default()(clearFlags !== 0, ERR_ARGUMENTS);
  9774. // Temporarily set any clear "colors" and call clear
  9775. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context_state__["f" /* withParameters */])(gl, parameters, function () {
  9776. gl.clear(clearFlags);
  9777. });
  9778. }
  9779. // WebGL2 - clear a specific drawing buffer
  9780. function clearBuffer(gl) {
  9781. var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  9782. _ref2$framebuffer = _ref2.framebuffer,
  9783. framebuffer = _ref2$framebuffer === undefined ? null : _ref2$framebuffer,
  9784. _ref2$buffer = _ref2.buffer,
  9785. buffer = _ref2$buffer === undefined ? GL_COLOR : _ref2$buffer,
  9786. _ref2$drawBuffer = _ref2.drawBuffer,
  9787. drawBuffer = _ref2$drawBuffer === undefined ? 0 : _ref2$drawBuffer,
  9788. _ref2$value = _ref2.value,
  9789. value = _ref2$value === undefined ? [0, 0, 0, 0] : _ref2$value;
  9790. __WEBPACK_IMPORTED_MODULE_2_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__context__["b" /* isWebGL2 */])(gl), __WEBPACK_IMPORTED_MODULE_0__context__["i" /* ERR_WEBGL2 */]);
  9791. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context_state__["f" /* withParameters */])(gl, { framebuffer: framebuffer }, function () {
  9792. // Method selection per OpenGL ES 3 docs
  9793. switch (buffer) {
  9794. case GL_COLOR:
  9795. switch (value.constructor) {
  9796. case Int32Array:
  9797. gl.clearBufferiv(buffer, drawBuffer, value);
  9798. break;
  9799. case Uint32Array:
  9800. gl.clearBufferuiv(buffer, drawBuffer, value);
  9801. break;
  9802. case Float32Array:
  9803. default:
  9804. gl.clearBufferfv(buffer, drawBuffer, value);
  9805. }
  9806. break;
  9807. case GL_DEPTH:
  9808. gl.clearBufferfv(GL_DEPTH, 0, [value]);
  9809. break;
  9810. case GL_STENCIL:
  9811. gl.clearBufferiv(GL_STENCIL, 0, [value]);
  9812. break;
  9813. case GL_DEPTH_STENCIL:
  9814. var _value = _slicedToArray(value, 2),
  9815. depth = _value[0],
  9816. stencil = _value[1];
  9817. gl.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);
  9818. break;
  9819. default:
  9820. __WEBPACK_IMPORTED_MODULE_2_assert___default()(false, ERR_ARGUMENTS);
  9821. }
  9822. });
  9823. }
  9824. //# sourceMappingURL=clear.js.map
  9825. /***/ }),
  9826. /* 108 */
  9827. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  9828. "use strict";
  9829. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return FEATURES; });
  9830. /* harmony export (immutable) */ __webpack_exports__["b"] = hasFeature;
  9831. /* harmony export (immutable) */ __webpack_exports__["c"] = hasFeatures;
  9832. /* harmony export (immutable) */ __webpack_exports__["d"] = getFeatures;
  9833. /* unused harmony export TEST_EXPORTS */
  9834. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__context__ = __webpack_require__(7);
  9835. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_assert__ = __webpack_require__(1);
  9836. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_assert__);
  9837. // Feature detection for WebGL
  9838. //
  9839. // Provides a function that enables simple checking of which WebGL features are
  9840. // available in an WebGL1 or WebGL2 environment.
  9841. /* eslint-disable no-inline-comments, max-len */
  9842. // Defines luma.gl "feature" names and semantics
  9843. var WEBGL_FEATURES = {
  9844. // API SUPPORT
  9845. VERTEX_ARRAY_OBJECT: ['OES_vertex_array_object', true],
  9846. TIMER_QUERY: ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],
  9847. INSTANCED_RENDERING: ['ANGLE_instanced_arrays', true],
  9848. MULTIPLE_RENDER_TARGETS: ['WEBGL_draw_buffers', true],
  9849. // FEATURES
  9850. ELEMENT_INDEX_UINT32: ['OES_element_index_uint', true],
  9851. BLEND_EQUATION_MINMAX: ['EXT_blend_minmax', true],
  9852. // TEXTURES, RENDERBUFFERS
  9853. COLOR_ENCODING_SRGB: ['EXT_sRGB', true],
  9854. // TEXTURES
  9855. TEXTURE_DEPTH: ['WEBGL_depth_texture', true],
  9856. TEXTURE_FLOAT: ['OES_texture_float', true],
  9857. TEXTURE_HALF_FLOAT: ['OES_texture_half_float', true],
  9858. TEXTURE_FILTER_LINEAR_FLOAT: ['OES_texture_float_linear'],
  9859. TEXTURE_FILTER_LINEAR_HALF_FLOAT: ['OES_texture_half_float_linear'],
  9860. TEXTURE_FILTER_ANISOTROPIC: ['EXT_texture_filter_anisotropic'],
  9861. // FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS
  9862. COLOR_ATTACHMENT_RGBA32F: ['WEBGL_color_buffer_float', 'EXT_color_buffer_float'],
  9863. COLOR_ATTACHMENT_FLOAT: [false, 'EXT_color_buffer_float'],
  9864. COLOR_ATTACHMENT_HALF_FLOAT: [false, 'EXT_color_buffer_half_float'],
  9865. // GLSL extensions
  9866. GLSL_FRAG_DATA: ['WEBGL_draw_buffers', true],
  9867. GLSL_FRAG_DEPTH: ['EXT_frag_depth', true],
  9868. GLSL_DERIVATIVES: ['OES_standard_derivatives', true],
  9869. GLSL_TEXTURE_LOD: ['EXT_shader_texture_lod', true]
  9870. };
  9871. // Create a key-mirrored FEATURES array
  9872. var FEATURES = {};
  9873. Object.keys(WEBGL_FEATURES).forEach(function (key) {
  9874. FEATURES[key] = key;
  9875. });
  9876. // TODO - cache the value
  9877. function getFeature(gl, cap) {
  9878. var feature = WEBGL_FEATURES[cap];
  9879. __WEBPACK_IMPORTED_MODULE_1_assert___default()(feature, cap);
  9880. // Get extension name from table
  9881. var extensionName = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__context__["b" /* isWebGL2 */])(gl) ? feature[1] || feature[0] : feature[0];
  9882. // Check if the value is dependent on checking an extension
  9883. var value = typeof extensionName === 'string' ? Boolean(gl.getExtension(extensionName)) : extensionName;
  9884. __WEBPACK_IMPORTED_MODULE_1_assert___default()(value === false || value === true);
  9885. return value;
  9886. }
  9887. // capability can be a WebGL extension name or a luma capability name
  9888. function hasFeature(gl, feature) {
  9889. return hasFeatures(gl, feature);
  9890. }
  9891. function hasFeatures(gl, features) {
  9892. features = Array.isArray(features) ? features : [features];
  9893. return features.every(function (feature) {
  9894. return getFeature(gl, feature);
  9895. });
  9896. }
  9897. function getFeatures(gl) {
  9898. gl.luma = gl.luma || {};
  9899. if (!gl.luma.caps) {
  9900. gl.luma.caps = {};
  9901. gl.luma.caps.webgl2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__context__["b" /* isWebGL2 */])(gl);
  9902. for (var cap in WEBGL_FEATURES) {
  9903. gl.luma.caps[cap] = getFeature(gl, cap);
  9904. }
  9905. }
  9906. return gl.luma.caps;
  9907. }
  9908. var TEST_EXPORTS = {
  9909. WEBGL_FEATURES: WEBGL_FEATURES
  9910. };
  9911. //# sourceMappingURL=context-features.js.map
  9912. /***/ }),
  9913. /* 109 */
  9914. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  9915. "use strict";
  9916. /* unused harmony export getUniformDescriptors */
  9917. /* unused harmony export getVaryingMap */
  9918. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(38);
  9919. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  9920. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__context_state__ = __webpack_require__(68);
  9921. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__vertex_array__ = __webpack_require__(169);
  9922. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__resource__ = __webpack_require__(30);
  9923. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__texture__ = __webpack_require__(62);
  9924. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__framebuffer__ = __webpack_require__(69);
  9925. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__transform_feedback__ = __webpack_require__(276);
  9926. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__uniforms__ = __webpack_require__(168);
  9927. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__shader__ = __webpack_require__(111);
  9928. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__buffer__ = __webpack_require__(67);
  9929. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__utils__ = __webpack_require__(8);
  9930. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_assert__ = __webpack_require__(1);
  9931. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_assert__);
  9932. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  9933. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  9934. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  9935. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  9936. /* eslint-disable no-inline-comments */
  9937. var LOG_PROGRAM_PERF_PRIORITY = 3;
  9938. // const GL_TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F;
  9939. // const GL_TRANSFORM_FEEDBACK_VARYINGS = 0x8C83;
  9940. // MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS : 0x8C80,
  9941. // TRANSFORM_FEEDBACK_BUFFER_START: 0x8C84,
  9942. // TRANSFORM_FEEDBACK_BUFFER_SIZE : 0x8C85,
  9943. // TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8C88,
  9944. // MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8C8A,
  9945. // MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8C8B,
  9946. // INTERLEAVED_ATTRIBS: 0x8C8C,
  9947. // SEPARATE_ATTRIBS : 0x8C8D,
  9948. var Program = /*#__PURE__*/function (_Resource) {
  9949. _inherits(Program, _Resource);
  9950. function Program(gl) {
  9951. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  9952. _classCallCheck(this, Program);
  9953. var _this = _possibleConstructorReturn(this, (Program.__proto__ || Object.getPrototypeOf(Program)).call(this, gl, opts));
  9954. _this.initialize(opts);
  9955. _this.vertexAttributes = __WEBPACK_IMPORTED_MODULE_3__vertex_array__["a" /* default */].getDefaultArray(gl);
  9956. Object.seal(_this);
  9957. _this._setId(opts.id);
  9958. return _this;
  9959. }
  9960. _createClass(Program, [{
  9961. key: 'initialize',
  9962. value: function initialize() {
  9963. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  9964. vs = _ref.vs,
  9965. fs = _ref.fs,
  9966. defaultUniforms = _ref.defaultUniforms,
  9967. varyings = _ref.varyings,
  9968. _ref$bufferMode = _ref.bufferMode,
  9969. bufferMode = _ref$bufferMode === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].SEPARATE_ATTRIBS : _ref$bufferMode;
  9970. // Create shaders if needed
  9971. this.vs = typeof vs === 'string' ? new __WEBPACK_IMPORTED_MODULE_9__shader__["b" /* VertexShader */](this.gl, vs) : vs;
  9972. this.fs = typeof fs === 'string' ? new __WEBPACK_IMPORTED_MODULE_9__shader__["c" /* FragmentShader */](this.gl, fs) : fs;
  9973. __WEBPACK_IMPORTED_MODULE_12_assert___default()(this.vs instanceof __WEBPACK_IMPORTED_MODULE_9__shader__["b" /* VertexShader */], 'Program: bad vertex shader');
  9974. __WEBPACK_IMPORTED_MODULE_12_assert___default()(this.fs instanceof __WEBPACK_IMPORTED_MODULE_9__shader__["c" /* FragmentShader */], 'Program: bad fragment shader');
  9975. this.defaultUniforms = defaultUniforms;
  9976. // Setup varyings if supplied
  9977. if (varyings) {
  9978. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(this.gl);
  9979. this.varyings = varyings;
  9980. this.gl.transformFeedbackVaryings(this.handle, varyings, bufferMode);
  9981. this.varyingMap = getVaryingMap(varyings, bufferMode);
  9982. } else {
  9983. this.varyingMap = {};
  9984. }
  9985. this._compileAndLink();
  9986. return this;
  9987. }
  9988. // Generates warning if a vertex shader attribute is not setup.
  9989. }, {
  9990. key: 'checkAttributeBindings',
  9991. value: function checkAttributeBindings(_ref2) {
  9992. var vertexArray = _ref2.vertexArray;
  9993. var filledLocations = vertexArray ? vertexArray.filledLocations : this.vertexAttributes.filledLocations;
  9994. for (var attributeName in this._attributeToLocationMap) {
  9995. var location = this._attributeToLocationMap[attributeName];
  9996. if (!filledLocations[location] && !this._warnedLocations[location]) {
  9997. // throw new Error(`Program ${this.id}: ` +
  9998. // `Attribute ${location}:${attributeName} not supplied`);
  9999. __WEBPACK_IMPORTED_MODULE_11__utils__["b" /* log */].warn('Program ' + this.id + ': Attribute ' + location + ':' + attributeName + ' not supplied');
  10000. this._warnedLocations[location] = true;
  10001. }
  10002. }
  10003. return this;
  10004. }
  10005. }, {
  10006. key: 'reset',
  10007. value: function reset() {
  10008. this.unsetBuffers();
  10009. // TODO - reset uniforms and attributes to initial state
  10010. }
  10011. }, {
  10012. key: 'use',
  10013. value: function use() {
  10014. this.gl.useProgram(this.handle);
  10015. return this;
  10016. }
  10017. // A good thing about webGL is that there are so many ways to draw things,
  10018. // e.g. depending on whether data is indexed and/or isInstanced.
  10019. // This function unifies those into a single call with simple parameters
  10020. // that have sane defaults.
  10021. }, {
  10022. key: 'draw',
  10023. value: function draw(_ref3) {
  10024. var _this2 = this;
  10025. var _ref3$drawMode = _ref3.drawMode,
  10026. drawMode = _ref3$drawMode === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TRIANGLES : _ref3$drawMode,
  10027. vertexCount = _ref3.vertexCount,
  10028. _ref3$offset = _ref3.offset,
  10029. offset = _ref3$offset === undefined ? 0 : _ref3$offset,
  10030. start = _ref3.start,
  10031. end = _ref3.end,
  10032. _ref3$isIndexed = _ref3.isIndexed,
  10033. isIndexed = _ref3$isIndexed === undefined ? false : _ref3$isIndexed,
  10034. _ref3$indexType = _ref3.indexType,
  10035. indexType = _ref3$indexType === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].UNSIGNED_SHORT : _ref3$indexType,
  10036. _ref3$isInstanced = _ref3.isInstanced,
  10037. isInstanced = _ref3$isInstanced === undefined ? false : _ref3$isInstanced,
  10038. _ref3$instanceCount = _ref3.instanceCount,
  10039. instanceCount = _ref3$instanceCount === undefined ? 0 : _ref3$instanceCount,
  10040. _ref3$vertexArray = _ref3.vertexArray,
  10041. vertexArray = _ref3$vertexArray === undefined ? null : _ref3$vertexArray,
  10042. _ref3$transformFeedba = _ref3.transformFeedback,
  10043. transformFeedback = _ref3$transformFeedba === undefined ? null : _ref3$transformFeedba,
  10044. _ref3$uniforms = _ref3.uniforms,
  10045. uniforms = _ref3$uniforms === undefined ? {} : _ref3$uniforms,
  10046. _ref3$samplers = _ref3.samplers,
  10047. samplers = _ref3$samplers === undefined ? {} : _ref3$samplers,
  10048. _ref3$parameters = _ref3.parameters,
  10049. parameters = _ref3$parameters === undefined ? {} : _ref3$parameters;
  10050. vertexArray = vertexArray || __WEBPACK_IMPORTED_MODULE_3__vertex_array__["a" /* default */].getDefaultArray(this.gl);
  10051. vertexArray.bind(function () {
  10052. _this2.gl.useProgram(_this2.handle);
  10053. if (transformFeedback) {
  10054. var primitiveMode = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__transform_feedback__["b" /* getTransformFeedbackMode */])({ drawMode: drawMode });
  10055. transformFeedback.begin(primitiveMode);
  10056. }
  10057. _this2.setUniforms(uniforms, samplers);
  10058. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context_state__["f" /* withParameters */])(_this2.gl, parameters, function () {
  10059. // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
  10060. if (isIndexed && isInstanced) {
  10061. _this2.ext.drawElementsInstanced(drawMode, vertexCount, indexType, offset, instanceCount);
  10062. } else if (isIndexed && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(_this2.gl) && !isNaN(start) && !isNaN(end)) {
  10063. _this2.gl.drawElementsRange(drawMode, start, end, vertexCount, indexType, offset);
  10064. } else if (isIndexed) {
  10065. _this2.gl.drawElements(drawMode, vertexCount, indexType, offset);
  10066. } else if (isInstanced) {
  10067. _this2.ext.drawArraysInstanced(drawMode, offset, vertexCount, instanceCount);
  10068. } else {
  10069. _this2.gl.drawArrays(drawMode, offset, vertexCount);
  10070. }
  10071. });
  10072. // this.gl.useProgram(null);
  10073. if (transformFeedback) {
  10074. transformFeedback.end();
  10075. }
  10076. });
  10077. return this;
  10078. }
  10079. /**
  10080. * Attach a map of Buffers values to a program
  10081. * Only attributes with names actually present in the linked program
  10082. * will be updated. Other supplied buffers will be ignored.
  10083. *
  10084. * @param {Object} buffers - An object map with attribute names being keys
  10085. * and values are expected to be instances of Buffer.
  10086. * @returns {Program} Returns itself for chaining.
  10087. */
  10088. /* eslint-disable max-statements */
  10089. }, {
  10090. key: 'setBuffers',
  10091. value: function setBuffers(buffers) {
  10092. var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  10093. _ref4$clear = _ref4.clear,
  10094. clear = _ref4$clear === undefined ? true : _ref4$clear,
  10095. _ref4$drawParams = _ref4.drawParams,
  10096. drawParams = _ref4$drawParams === undefined ? {} : _ref4$drawParams;
  10097. if (clear) {
  10098. this.vertexAttributes.clearBindings();
  10099. }
  10100. // indexing is autodetected - buffer with target gl.ELEMENT_ARRAY_BUFFER
  10101. // index type is saved for drawElement calls
  10102. drawParams.isInstanced = false;
  10103. drawParams.isIndexed = false;
  10104. drawParams.indexType = null;
  10105. var _sortBuffersByLocatio = this._sortBuffersByLocation(buffers),
  10106. locations = _sortBuffersByLocatio.locations,
  10107. elements = _sortBuffersByLocatio.elements;
  10108. // Process locations in order
  10109. for (var location = 0; location < locations.length; ++location) {
  10110. var bufferName = locations[location];
  10111. var buffer = buffers[bufferName];
  10112. // DISABLE MISSING ATTRIBUTE
  10113. if (!buffer) {
  10114. this.vertexAttributes.disable(location);
  10115. } else if (buffer instanceof __WEBPACK_IMPORTED_MODULE_10__buffer__["a" /* default */]) {
  10116. var divisor = buffer.layout.instanced ? 1 : 0;
  10117. this.vertexAttributes.setBuffer({ location: location, buffer: buffer });
  10118. this.vertexAttributes.setDivisor(location, divisor);
  10119. drawParams.isInstanced = buffer.layout.instanced > 0;
  10120. this.vertexAttributes.enable(location);
  10121. } else {
  10122. this.vertexAttributes.setGeneric({ location: location, array: buffer });
  10123. this.vertexAttributes.disable(location, true);
  10124. }
  10125. }
  10126. // SET ELEMENTS ARRAY BUFFER
  10127. if (elements) {
  10128. var _buffer = buffers[elements];
  10129. _buffer.bind();
  10130. drawParams.isIndexed = true;
  10131. drawParams.indexType = _buffer.layout.type;
  10132. }
  10133. return this;
  10134. }
  10135. /* eslint-enable max-statements */
  10136. /*
  10137. * @returns {Program} Returns itself for chaining.
  10138. */
  10139. }, {
  10140. key: 'unsetBuffers',
  10141. value: function unsetBuffers() {
  10142. var length = this._attributeCount;
  10143. for (var i = 1; i < length; ++i) {
  10144. // this.vertexAttributes.setDivisor(i, 0);
  10145. this.vertexAttributes.disable(i);
  10146. }
  10147. // Clear elements buffer
  10148. this.gl.bindBuffer(__WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].ELEMENT_ARRAY_BUFFER, null);
  10149. return this;
  10150. }
  10151. /**
  10152. * Apply a set of uniform values to a program
  10153. * Only uniforms with names actually present in the linked program
  10154. * will be updated.
  10155. * other uniforms will be ignored
  10156. *
  10157. * @param {Object} uniformMap - An object with names being keys
  10158. * @returns {Program} - returns itself for chaining.
  10159. */
  10160. /* eslint-disable max-depth */
  10161. }, {
  10162. key: 'setUniforms',
  10163. value: function setUniforms(uniforms) {
  10164. var samplers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  10165. for (var uniformName in uniforms) {
  10166. var uniform = uniforms[uniformName];
  10167. var uniformSetter = this._uniformSetters[uniformName];
  10168. var sampler = samplers[uniformName];
  10169. if (uniformSetter) {
  10170. if (uniform instanceof __WEBPACK_IMPORTED_MODULE_6__framebuffer__["a" /* default */]) {
  10171. uniform = uniform.texture;
  10172. }
  10173. if (uniform instanceof __WEBPACK_IMPORTED_MODULE_5__texture__["a" /* default */]) {
  10174. if (uniformSetter.textureIndex === undefined) {
  10175. uniformSetter.textureIndex = this._textureIndexCounter++;
  10176. }
  10177. // Bind texture to index
  10178. var texture = uniform;
  10179. var textureIndex = uniformSetter.textureIndex;
  10180. texture.bind(textureIndex);
  10181. // Bind a sampler (if supplied) to index
  10182. if (sampler) {
  10183. sampler.bind(textureIndex);
  10184. }
  10185. // Set the uniform sampler to the texture index
  10186. uniformSetter(textureIndex);
  10187. } else {
  10188. // Just set the value
  10189. uniformSetter(uniform);
  10190. }
  10191. }
  10192. }
  10193. return this;
  10194. }
  10195. /* eslint-enable max-depth */
  10196. // setTransformFeedbackBuffers(buffers) {
  10197. // for (const buffer of buffers) {
  10198. // buffer.bindBase()
  10199. // }
  10200. // }
  10201. /**
  10202. * ATTRIBUTES API
  10203. * (Locations are numeric indices)
  10204. * @return {Number} count
  10205. */
  10206. }, {
  10207. key: 'getAttributeCount',
  10208. value: function getAttributeCount() {
  10209. return this._getParameter(__WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].ACTIVE_ATTRIBUTES);
  10210. }
  10211. /**
  10212. * Returns location (index) of a name
  10213. * @param {String} attributeName - name of an attribute
  10214. * (matches name in a linked shader)
  10215. * @returns {Number} - // array of actual attribute names from shader linking
  10216. */
  10217. }, {
  10218. key: 'getAttributeLocation',
  10219. value: function getAttributeLocation(attributeName) {
  10220. return this.gl.getAttribLocation(this.handle, attributeName);
  10221. }
  10222. /**
  10223. * Returns an object with info about attribute at index "location"/
  10224. * @param {int} location - index of an attribute
  10225. * @returns {WebGLActiveInfo} - info about an active attribute
  10226. * fields: {name, size, type}
  10227. */
  10228. }, {
  10229. key: 'getAttributeInfo',
  10230. value: function getAttributeInfo(location) {
  10231. return this.gl.getActiveAttrib(this.handle, location);
  10232. }
  10233. /**
  10234. * UNIFORMS API
  10235. * (Locations are numeric indices)
  10236. * @return {Number} count
  10237. */
  10238. }, {
  10239. key: 'getUniformCount',
  10240. value: function getUniformCount() {
  10241. return this._getParameter(__WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].ACTIVE_UNIFORMS);
  10242. }
  10243. /*
  10244. * @returns {WebGLActiveInfo} - object with {name, size, type}
  10245. */
  10246. }, {
  10247. key: 'getUniformInfo',
  10248. value: function getUniformInfo(index) {
  10249. return this.gl.getActiveUniform(this.handle, index);
  10250. }
  10251. /*
  10252. * @returns {WebGLUniformLocation} - opaque object representing location
  10253. * of uniform, used by setter methods
  10254. */
  10255. }, {
  10256. key: 'getUniformLocation',
  10257. value: function getUniformLocation(name) {
  10258. return this.gl.getUniformLocation(this.handle, name);
  10259. }
  10260. }, {
  10261. key: 'getUniformValue',
  10262. value: function getUniformValue(location) {
  10263. return this.gl.getUniform(this.handle, location);
  10264. }
  10265. // WebGL2
  10266. /**
  10267. * @param {GLuint} index
  10268. * @return {WebGLActiveInfo} - object with {name, size, type}
  10269. */
  10270. }, {
  10271. key: 'getVarying',
  10272. value: function getVarying(program, index) {
  10273. var result = this.gl.getTransformFeedbackVarying(program, index);
  10274. return result;
  10275. }
  10276. // Retrieves the assigned color number binding for the user-defined varying
  10277. // out variable name for program. program must have previously been linked.
  10278. }, {
  10279. key: 'getFragDataLocation',
  10280. value: function getFragDataLocation(varyingName) {
  10281. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(this.gl);
  10282. return this.gl.getFragDataLocation(this.handle, varyingName);
  10283. }
  10284. // @returns {WebGLShader[]} - array of attached WebGLShader objects
  10285. }, {
  10286. key: 'getAttachedShaders',
  10287. value: function getAttachedShaders() {
  10288. return this.gl.getAttachedShaders(this.handle);
  10289. }
  10290. // PRIVATE METHODS
  10291. }, {
  10292. key: '_compileAndLink',
  10293. value: function _compileAndLink() {
  10294. var gl = this.gl;
  10295. gl.attachShader(this.handle, this.vs.handle);
  10296. gl.attachShader(this.handle, this.fs.handle);
  10297. __WEBPACK_IMPORTED_MODULE_11__utils__["b" /* log */].time(LOG_PROGRAM_PERF_PRIORITY, 'linkProgram for ' + this._getName());
  10298. gl.linkProgram(this.handle);
  10299. __WEBPACK_IMPORTED_MODULE_11__utils__["b" /* log */].timeEnd(LOG_PROGRAM_PERF_PRIORITY, 'linkProgram for ' + this._getName());
  10300. // Avoid checking program linking error in production
  10301. if (gl.debug || __WEBPACK_IMPORTED_MODULE_11__utils__["b" /* log */].priority > 0) {
  10302. gl.validateProgram(this.handle);
  10303. var linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
  10304. if (!linked) {
  10305. throw new Error('Error linking ' + gl.getProgramInfoLog(this.handle));
  10306. }
  10307. }
  10308. this._queryAttributeLocations();
  10309. this._queryUniformLocations();
  10310. }
  10311. }, {
  10312. key: '_sortBuffersByLocation',
  10313. value: function _sortBuffersByLocation(buffers) {
  10314. var elements = null;
  10315. var locations = [];
  10316. // Reutrn early if no buffers to be bound.
  10317. if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_11__utils__["f" /* isObjectEmpty */])(buffers)) {
  10318. return { locations: locations, elements: elements };
  10319. }
  10320. locations = new Array(this._attributeCount);
  10321. for (var bufferName in buffers) {
  10322. var buffer = buffers[bufferName];
  10323. var location = this._attributeToLocationMap[bufferName];
  10324. if (location === undefined) {
  10325. if (buffer.target === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].ELEMENT_ARRAY_BUFFER && elements) {
  10326. throw new Error(this._print(bufferName) + ' duplicate GL.ELEMENT_ARRAY_BUFFER');
  10327. } else if (buffer.target === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].ELEMENT_ARRAY_BUFFER) {
  10328. elements = bufferName;
  10329. } else if (!this._warnedLocations[location]) {
  10330. __WEBPACK_IMPORTED_MODULE_11__utils__["b" /* log */].log(2, this._print(bufferName) + ' not used');
  10331. this._warnedLocations[location] = true;
  10332. }
  10333. } else {
  10334. if (buffer.target === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].ELEMENT_ARRAY_BUFFER) {
  10335. throw new Error(this._print(bufferName) + ':' + location + ' ' + 'has both location and type gl.ELEMENT_ARRAY_BUFFER');
  10336. }
  10337. locations[location] = bufferName;
  10338. }
  10339. }
  10340. return { locations: locations, elements: elements };
  10341. }
  10342. // Check that all active attributes are enabled
  10343. }, {
  10344. key: '_areAllAttributesEnabled',
  10345. value: function _areAllAttributesEnabled() {
  10346. var length = this._attributeCount;
  10347. for (var i = 0; i < length; ++i) {
  10348. if (!this.vertexAttributes.isEnabled(i)) {
  10349. return false;
  10350. }
  10351. }
  10352. return true;
  10353. }
  10354. }, {
  10355. key: '_print',
  10356. value: function _print(bufferName) {
  10357. return 'Program ' + this.id + ': Attribute ' + bufferName;
  10358. }
  10359. }, {
  10360. key: '_createHandle',
  10361. value: function _createHandle() {
  10362. return this.gl.createProgram();
  10363. }
  10364. }, {
  10365. key: '_deleteHandle',
  10366. value: function _deleteHandle() {
  10367. this.gl.deleteProgram(this.handle);
  10368. }
  10369. }, {
  10370. key: '_getName',
  10371. value: function _getName() {
  10372. var programName = this.vs.getName() || this.fs.getName();
  10373. programName = programName.replace(/shader/i, '');
  10374. programName = programName ? programName + '-program' : 'program';
  10375. return programName;
  10376. }
  10377. }, {
  10378. key: '_getOptionsFromHandle',
  10379. value: function _getOptionsFromHandle(handle) {
  10380. var shaderHandles = this.gl.getAttachedShaders(handle);
  10381. var opts = {};
  10382. var _iteratorNormalCompletion = true;
  10383. var _didIteratorError = false;
  10384. var _iteratorError = undefined;
  10385. try {
  10386. for (var _iterator = shaderHandles[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  10387. var shaderHandle = _step.value;
  10388. var type = this.gl.getShaderParameter(this.handle, __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].SHADER_TYPE);
  10389. switch (type) {
  10390. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].VERTEX_SHADER:
  10391. opts.vs = new __WEBPACK_IMPORTED_MODULE_9__shader__["b" /* VertexShader */]({ handle: shaderHandle });
  10392. break;
  10393. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].FRAGMENT_SHADER:
  10394. opts.fs = new __WEBPACK_IMPORTED_MODULE_9__shader__["c" /* FragmentShader */]({ handle: shaderHandle });
  10395. break;
  10396. default:
  10397. }
  10398. }
  10399. } catch (err) {
  10400. _didIteratorError = true;
  10401. _iteratorError = err;
  10402. } finally {
  10403. try {
  10404. if (!_iteratorNormalCompletion && _iterator.return) {
  10405. _iterator.return();
  10406. }
  10407. } finally {
  10408. if (_didIteratorError) {
  10409. throw _iteratorError;
  10410. }
  10411. }
  10412. }
  10413. return opts;
  10414. }
  10415. }, {
  10416. key: '_getParameter',
  10417. value: function _getParameter(pname) {
  10418. return this.gl.getProgramParameter(this.handle, pname);
  10419. }
  10420. // query attribute locations and build name to location map.
  10421. }, {
  10422. key: '_queryAttributeLocations',
  10423. value: function _queryAttributeLocations() {
  10424. this._attributeToLocationMap = {};
  10425. this._attributeCount = this.getAttributeCount();
  10426. for (var location = 0; location < this._attributeCount; location++) {
  10427. var name = this.getAttributeInfo(location).name;
  10428. this._attributeToLocationMap[name] = this.getAttributeLocation(name);
  10429. }
  10430. this._warnedLocations = {};
  10431. }
  10432. // query uniform locations and build name to setter map.
  10433. }, {
  10434. key: '_queryUniformLocations',
  10435. value: function _queryUniformLocations() {
  10436. var gl = this.gl;
  10437. this._uniformSetters = {};
  10438. this._uniformCount = this.getUniformCount();
  10439. for (var i = 0; i < this._uniformCount; i++) {
  10440. var info = this.getUniformInfo(i);
  10441. var parsedName = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__uniforms__["a" /* parseUniformName */])(info.name);
  10442. var location = this.getUniformLocation(parsedName.name);
  10443. this._uniformSetters[parsedName.name] = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__uniforms__["b" /* getUniformSetter */])(gl, location, info, parsedName.isArray);
  10444. }
  10445. this._textureIndexCounter = 0;
  10446. }
  10447. }, {
  10448. key: '_setId',
  10449. value: function _setId(id) {
  10450. // If program is not named, name it after shader names
  10451. if (!id) {
  10452. var programName = this._getName();
  10453. // TODO - this.id will already have been initialized
  10454. this.id = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_11__utils__["d" /* uid */])(programName);
  10455. }
  10456. }
  10457. }]);
  10458. return Program;
  10459. }(__WEBPACK_IMPORTED_MODULE_4__resource__["a" /* default */]);
  10460. // create uniform setters
  10461. // Map of uniform names to setter functions
  10462. /* harmony default export */ __webpack_exports__["a"] = (Program);
  10463. function getUniformDescriptors(gl, program) {
  10464. var uniformDescriptors = {};
  10465. var length = program.getUniformCount();
  10466. for (var i = 0; i < length; i++) {
  10467. var info = program.getUniformInfo(i);
  10468. var location = program.getUniformLocation(info.name);
  10469. var descriptor = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__uniforms__["b" /* getUniformSetter */])(gl, location, info);
  10470. uniformDescriptors[descriptor.name] = descriptor;
  10471. }
  10472. return uniformDescriptors;
  10473. }
  10474. // Get a map of buffer indices
  10475. function getVaryingMap(varyings, bufferMode) {
  10476. var varyingMap = {};
  10477. var index = 0;
  10478. __WEBPACK_IMPORTED_MODULE_12_assert___default()(bufferMode === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].SEPARATE_ATTRIBS || bufferMode === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].INTERLEAVED_ATTRIBS);
  10479. var indexIncrement = bufferMode === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].SEPARATE_ATTRIBS ? 1 : 0;
  10480. var _iteratorNormalCompletion2 = true;
  10481. var _didIteratorError2 = false;
  10482. var _iteratorError2 = undefined;
  10483. try {
  10484. for (var _iterator2 = varyings[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  10485. var varying = _step2.value;
  10486. varyingMap[varying] = index;
  10487. index += indexIncrement;
  10488. }
  10489. } catch (err) {
  10490. _didIteratorError2 = true;
  10491. _iteratorError2 = err;
  10492. } finally {
  10493. try {
  10494. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  10495. _iterator2.return();
  10496. }
  10497. } finally {
  10498. if (_didIteratorError2) {
  10499. throw _iteratorError2;
  10500. }
  10501. }
  10502. }
  10503. return varyingMap;
  10504. }
  10505. //# sourceMappingURL=program.js.map
  10506. /***/ }),
  10507. /* 110 */
  10508. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  10509. "use strict";
  10510. /* unused harmony export RENDERBUFFER_FORMATS */
  10511. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gl_constants__ = __webpack_require__(25);
  10512. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  10513. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__resource__ = __webpack_require__(30);
  10514. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert__ = __webpack_require__(1);
  10515. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_assert__);
  10516. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  10517. var _RENDERBUFFER_FORMATS;
  10518. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  10519. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  10520. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  10521. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  10522. /* eslint-disable no-inline-comments */
  10523. // Define local GL constants to optimize minification
  10524. var GL_RENDERBUFFER = 0x8D41;
  10525. var GL_SAMPLES = 0x80A9;
  10526. var GL_RENDERBUFFER_WIDTH = 0x8D42;
  10527. var GL_RENDERBUFFER_HEIGHT = 0x8D43;
  10528. var GL_RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
  10529. var GL_RENDERBUFFER_SAMPLES = 0x8CAB;
  10530. // Define local extension strings to optimize minification
  10531. // const SRGB = 'EXT_sRGB';
  10532. // const CB_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';
  10533. var CB_FLOAT_WEBGL2 = 'EXT_color_buffer_float';
  10534. // const CB_HALF_FLOAT_WEBGL1 = 'EXT_color_buffer_half_float';
  10535. var RENDERBUFFER_FORMATS = (_RENDERBUFFER_FORMATS = {}, _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].DEPTH_COMPONENT16, {}), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].DEPTH_COMPONENT24, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].DEPTH_COMPONENT32F, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].STENCIL_INDEX8, {}), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].DEPTH_STENCIL, {}), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].DEPTH24_STENCIL8, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].DEPTH32F_STENCIL8, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA4, {}), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGB565, {}), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGB5_A1, {}), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R8, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R8UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R8I, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R16UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R16I, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R32UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R32I, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RG8, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RG8UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RG8I, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RG16UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RG16I, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RG32UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RG32I, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGB8, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA8, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGB10_A2, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA8UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA8I, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGB10_A2UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA16UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA16I, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA32I, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA32UI, { gl2: true }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R16F, { gl2: CB_FLOAT_WEBGL2 }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RG16F, { gl2: CB_FLOAT_WEBGL2 }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA16F, { gl2: CB_FLOAT_WEBGL2 }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R32F, { gl2: CB_FLOAT_WEBGL2 }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RG32F, { gl2: CB_FLOAT_WEBGL2 }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RGBA32F, { gl2: CB_FLOAT_WEBGL2 }), _defineProperty(_RENDERBUFFER_FORMATS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].R11F_G11F_B10F, { gl2: CB_FLOAT_WEBGL2 }), _RENDERBUFFER_FORMATS);
  10536. function isFormatSupported(gl, format, formats) {
  10537. // assert(isWebGL(gl), ERR_WEBGL);
  10538. var info = formats[format];
  10539. if (!info) {
  10540. return false;
  10541. }
  10542. var value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl) ? info.gl2 || info.gl1 : info.gl1;
  10543. if (typeof value === 'string') {
  10544. return gl.getExtension(value);
  10545. }
  10546. return value;
  10547. }
  10548. var Renderbuffer = /*#__PURE__*/function (_Resource) {
  10549. _inherits(Renderbuffer, _Resource);
  10550. _createClass(Renderbuffer, null, [{
  10551. key: 'isSupported',
  10552. value: function isSupported(gl) {
  10553. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  10554. format = _ref.format;
  10555. return !format || isFormatSupported(gl, format, RENDERBUFFER_FORMATS);
  10556. }
  10557. }, {
  10558. key: 'getSamplesForFormat',
  10559. value: function getSamplesForFormat(gl, _ref2) {
  10560. var format = _ref2.format;
  10561. // Polyfilled to return [0] under WebGL1
  10562. return gl.getInternalformatParameter(GL_RENDERBUFFER, format, GL_SAMPLES);
  10563. }
  10564. }]);
  10565. function Renderbuffer(gl) {
  10566. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  10567. _classCallCheck(this, Renderbuffer);
  10568. var _this = _possibleConstructorReturn(this, (Renderbuffer.__proto__ || Object.getPrototypeOf(Renderbuffer)).call(this, gl, opts));
  10569. _this.initialize(opts);
  10570. Object.seal(_this);
  10571. return _this;
  10572. }
  10573. // Creates and initializes a renderbuffer object's data store
  10574. _createClass(Renderbuffer, [{
  10575. key: 'initialize',
  10576. value: function initialize(_ref3) {
  10577. var format = _ref3.format,
  10578. _ref3$width = _ref3.width,
  10579. width = _ref3$width === undefined ? 1 : _ref3$width,
  10580. _ref3$height = _ref3.height,
  10581. height = _ref3$height === undefined ? 1 : _ref3$height,
  10582. _ref3$samples = _ref3.samples,
  10583. samples = _ref3$samples === undefined ? 0 : _ref3$samples;
  10584. __WEBPACK_IMPORTED_MODULE_3_assert___default()(format, 'Needs format');
  10585. this.gl.bindRenderbuffer(GL_RENDERBUFFER, this.handle);
  10586. if (samples !== 0 && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(this.gl)) {
  10587. this.gl.renderbufferStorageMultisample(GL_RENDERBUFFER, samples, format, width, height);
  10588. } else {
  10589. this.gl.renderbufferStorage(GL_RENDERBUFFER, format, width, height);
  10590. }
  10591. // this.gl.bindRenderbuffer(GL_RENDERBUFFER, null);
  10592. this.format = format;
  10593. this.width = width;
  10594. this.height = height;
  10595. this.samples = samples;
  10596. return this;
  10597. }
  10598. }, {
  10599. key: 'resize',
  10600. value: function resize(_ref4) {
  10601. var width = _ref4.width,
  10602. height = _ref4.height;
  10603. // Don't resize if width/height haven't changed
  10604. if (width !== this.width || height !== this.height) {
  10605. return this.initialize({ width: width, height: height, format: this.format, samples: this.samples });
  10606. }
  10607. return this;
  10608. }
  10609. // PRIVATE METHODS
  10610. }, {
  10611. key: '_createHandle',
  10612. value: function _createHandle() {
  10613. return this.gl.createRenderbuffer();
  10614. }
  10615. }, {
  10616. key: '_deleteHandle',
  10617. value: function _deleteHandle() {
  10618. this.gl.deleteRenderbuffer(this.handle);
  10619. }
  10620. }, {
  10621. key: '_syncHandle',
  10622. value: function _syncHandle(handle) {
  10623. this.format = this.getParameter(GL_RENDERBUFFER_INTERNAL_FORMAT);
  10624. this.width = this.getParameter(GL_RENDERBUFFER_WIDTH);
  10625. this.height = this.getParameter(GL_RENDERBUFFER_HEIGHT);
  10626. this.samples = this.getParameter(GL_RENDERBUFFER_SAMPLES);
  10627. }
  10628. // @param {Boolean} opt.autobind=true - method call will bind/unbind object
  10629. // @returns {GLenum|GLint} - depends on pname
  10630. }, {
  10631. key: '_getParameter',
  10632. value: function _getParameter(pname) {
  10633. this.gl.bindRenderbuffer(GL_RENDERBUFFER, this.handle);
  10634. var value = this.gl.getRenderbufferParameter(GL_RENDERBUFFER, pname);
  10635. // this.gl.bindRenderbuffer(GL_RENDERBUFFER, null);
  10636. return value;
  10637. }
  10638. }]);
  10639. return Renderbuffer;
  10640. }(__WEBPACK_IMPORTED_MODULE_2__resource__["a" /* default */]);
  10641. /* harmony default export */ __webpack_exports__["a"] = (Renderbuffer);
  10642. //# sourceMappingURL=renderbuffer.js.map
  10643. /***/ }),
  10644. /* 111 */
  10645. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  10646. "use strict";
  10647. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Shader; });
  10648. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return VertexShader; });
  10649. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return FragmentShader; });
  10650. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__webgl_utils__ = __webpack_require__(60);
  10651. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  10652. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__resource__ = __webpack_require__(30);
  10653. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils__ = __webpack_require__(8);
  10654. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_assert__ = __webpack_require__(1);
  10655. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_assert__);
  10656. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  10657. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  10658. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  10659. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  10660. var ERR_SOURCE = 'Shader: GLSL source code must be a JavaScript string';
  10661. var GL_FRAGMENT_SHADER = 0x8B30;
  10662. var GL_VERTEX_SHADER = 0x8B31;
  10663. var GL_COMPILE_STATUS = 0x8B81;
  10664. var GL_SHADER_TYPE = 0x8B4F;
  10665. // For now this is an internal class
  10666. var Shader = /*#__PURE__*/function (_Resource) {
  10667. _inherits(Shader, _Resource);
  10668. _createClass(Shader, null, [{
  10669. key: 'getTypeName',
  10670. value: function getTypeName(shaderType) {
  10671. switch (shaderType) {
  10672. case GL_VERTEX_SHADER:
  10673. return 'vertex-shader';
  10674. case GL_FRAGMENT_SHADER:
  10675. return 'fragment-shader';
  10676. default:
  10677. __WEBPACK_IMPORTED_MODULE_4_assert___default()(false);return 'unknown';
  10678. }
  10679. }
  10680. /* eslint-disable max-statements */
  10681. }]);
  10682. function Shader(gl, source, shaderType) {
  10683. _classCallCheck(this, Shader);
  10684. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["j" /* assertWebGLContext */])(gl);
  10685. __WEBPACK_IMPORTED_MODULE_4_assert___default()(typeof source === 'string', ERR_SOURCE);
  10686. var _this = _possibleConstructorReturn(this, (Shader.__proto__ || Object.getPrototypeOf(Shader)).call(this, gl, { id: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__webgl_utils__["i" /* getShaderName */])(source) || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__utils__["d" /* uid */])(Shader.getTypeName(shaderType)) }));
  10687. _this.shaderType = shaderType;
  10688. _this.source = source;
  10689. _this.opts.source = source;
  10690. _this.initialize(_this.opts);
  10691. return _this;
  10692. }
  10693. _createClass(Shader, [{
  10694. key: 'initialize',
  10695. value: function initialize(_ref) {
  10696. var source = _ref.source;
  10697. var shaderName = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__webgl_utils__["i" /* getShaderName */])(source);
  10698. if (shaderName) {
  10699. this.id = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__utils__["d" /* uid */])(shaderName);
  10700. }
  10701. this._compile(source);
  10702. this.opts.source = source;
  10703. }
  10704. // Accessors
  10705. }, {
  10706. key: 'getParameter',
  10707. value: function getParameter(pname) {
  10708. return this.gl.getShaderParameter(this.handle, pname);
  10709. }
  10710. }, {
  10711. key: 'toString',
  10712. value: function toString() {
  10713. return this.getTypeName(this.shaderType) + ':' + this.id;
  10714. }
  10715. }, {
  10716. key: 'getName',
  10717. value: function getName() {
  10718. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__webgl_utils__["i" /* getShaderName */])(this.opts.source) || 'unnamed-shader';
  10719. }
  10720. }, {
  10721. key: 'getSource',
  10722. value: function getSource() {
  10723. return this.gl.getShaderSource(this.handle);
  10724. }
  10725. // Debug method - Returns translated source if available
  10726. }, {
  10727. key: 'getTranslatedSource',
  10728. value: function getTranslatedSource() {
  10729. var extension = this.gl.getExtension('WEBGL_debug_shaders');
  10730. return extension ? extension.getTranslatedShaderSource(this.handle) : 'No translated source available. WEBGL_debug_shaders not implemented';
  10731. }
  10732. // PRIVATE METHODS
  10733. }, {
  10734. key: '_compile',
  10735. value: function _compile() {
  10736. this.gl.shaderSource(this.handle, this.source);
  10737. this.gl.compileShader(this.handle);
  10738. // TODO - For performance reasons, avoid checking shader compilation errors on production?
  10739. // TODO - Load log even when no error reported, to catch warnings?
  10740. // https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings
  10741. var compileStatus = this.getParameter(GL_COMPILE_STATUS);
  10742. if (!compileStatus) {
  10743. var infoLog = this.gl.getShaderInfoLog(this.handle);
  10744. var _parseGLSLCompilerErr = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__webgl_utils__["j" /* parseGLSLCompilerError */])(infoLog, this.source, this.shaderType),
  10745. shaderName = _parseGLSLCompilerErr.shaderName,
  10746. errors = _parseGLSLCompilerErr.errors,
  10747. warnings = _parseGLSLCompilerErr.warnings;
  10748. __WEBPACK_IMPORTED_MODULE_3__utils__["b" /* log */].error('GLSL compilation errors in ' + shaderName + '\n' + errors);
  10749. __WEBPACK_IMPORTED_MODULE_3__utils__["b" /* log */].warn('GLSL compilation warnings in ' + shaderName + '\n' + warnings);
  10750. throw new Error('GLSL compilation errors in ' + shaderName);
  10751. }
  10752. }
  10753. }, {
  10754. key: '_deleteHandle',
  10755. value: function _deleteHandle() {
  10756. this.gl.deleteShader(this.handle);
  10757. }
  10758. }, {
  10759. key: '_getOptsFromHandle',
  10760. value: function _getOptsFromHandle() {
  10761. return {
  10762. type: this.getParameter(GL_SHADER_TYPE),
  10763. source: this.getSource()
  10764. };
  10765. }
  10766. }]);
  10767. return Shader;
  10768. }(__WEBPACK_IMPORTED_MODULE_2__resource__["a" /* default */]);
  10769. var VertexShader = /*#__PURE__*/function (_Shader) {
  10770. _inherits(VertexShader, _Shader);
  10771. function VertexShader(gl, source) {
  10772. _classCallCheck(this, VertexShader);
  10773. return _possibleConstructorReturn(this, (VertexShader.__proto__ || Object.getPrototypeOf(VertexShader)).call(this, gl, source, GL_VERTEX_SHADER));
  10774. }
  10775. // PRIVATE METHODS
  10776. _createClass(VertexShader, [{
  10777. key: '_createHandle',
  10778. value: function _createHandle() {
  10779. return this.gl.createShader(GL_VERTEX_SHADER);
  10780. }
  10781. }]);
  10782. return VertexShader;
  10783. }(Shader);
  10784. var FragmentShader = /*#__PURE__*/function (_Shader2) {
  10785. _inherits(FragmentShader, _Shader2);
  10786. function FragmentShader(gl, source) {
  10787. _classCallCheck(this, FragmentShader);
  10788. return _possibleConstructorReturn(this, (FragmentShader.__proto__ || Object.getPrototypeOf(FragmentShader)).call(this, gl, source, GL_FRAGMENT_SHADER));
  10789. }
  10790. // PRIVATE METHODS
  10791. _createClass(FragmentShader, [{
  10792. key: '_createHandle',
  10793. value: function _createHandle() {
  10794. return this.gl.createShader(GL_FRAGMENT_SHADER);
  10795. }
  10796. }]);
  10797. return FragmentShader;
  10798. }(Shader);
  10799. //# sourceMappingURL=shader.js.map
  10800. /***/ }),
  10801. /* 112 */
  10802. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  10803. "use strict";
  10804. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common__ = __webpack_require__(31);
  10805. var _createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)throw new TypeError('Super expression must either be null or a function, not '+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}function _extendableBuiltin(cls){function ExtendableBuiltin(){var instance=Reflect.construct(cls,Array.from(arguments));return Object.setPrototypeOf(instance,Object.getPrototypeOf(this)),instance}return ExtendableBuiltin.prototype=Object.create(cls.prototype,{constructor:{value:cls,enumerable:!1,writable:!0,configurable:!0}}),Object.setPrototypeOf?Object.setPrototypeOf(ExtendableBuiltin,cls):ExtendableBuiltin.__proto__=cls,ExtendableBuiltin}var MathArray=function(_extendableBuiltin2){function MathArray(){return _classCallCheck(this,MathArray),_possibleConstructorReturn(this,(MathArray.__proto__||Object.getPrototypeOf(MathArray)).apply(this,arguments))}return _inherits(MathArray,_extendableBuiltin2),_createClass(MathArray,[{key:'clone',value:function(){var Subclass=this.constructor,clone=new Subclass().copy(this);return clone.check(),clone}},{key:'copy',value:function copy(array){for(var i=0;i<this.ELEMENTS;++i)this[i]=array[i];return this.check()}},{key:'set',value:function set(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];for(var i=0;i<this.ELEMENTS;++i)this[i]=args[i]||0;return this.check()}},{key:'fromArray',value:function fromArray(array){for(var offset=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,i=0;i<this.ELEMENTS;++i)this[i]=array[i+offset];return this.check()}},{key:'toString',value:function toString(){return this.formatString(__WEBPACK_IMPORTED_MODULE_0__common__["a" /* config */])}},{key:'formatString',value:function formatString(opts){for(var string='',i=0;i<this.ELEMENTS;++i)string+=(0<i?', ':'')+__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["b" /* formatValue */])(this[i],opts);return(opts.printTypes?this.constructor.name:'')+'['+string+']'}},{key:'toArray',value:function toArray(){for(var array=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],offset=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,i=0;i<this.ELEMENTS;++i)array[offset+i]=this[i];return array}},{key:'toFloat32Array',value:function toFloat32Array(){return new Float32Array(this)}},{key:'equals',value:function equals(array){if(!array||this.length!==array.length)return!1;for(var i=0;i<this.ELEMENTS;++i)if(!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["c" /* equals */])(this[i],array[i]))return!1;return!0}},{key:'exactEquals',value:function exactEquals(array){if(!array||this.length!==array.length)return!1;for(var i=0;i<this.ELEMENTS;++i)if(this[i]!==array[i])return!1;return!0}},{key:'negate',value:function negate(){for(var i=0;i<this.ELEMENTS;++i)this[i]=-this[i];return this.check()}},{key:'inverse',value:function inverse(){for(var i=0;i<this.ELEMENTS;++i)this[i]=1/this[i];return this.check()}},{key:'lerp',value:function lerp(vector,coeff){for(var coord,i=0;i<this.ELEMENTS;++i)coord=this[i],this[i]=coord+coeff*(vector[0]-coord);return this.check()}},{key:'validate',value:function validate(){for(var array=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this,valid=array&&array.length===this.ELEMENTS,i=0;i<this.ELEMENTS;++i)valid=valid&&Number.isFinite(array[i]);return valid}},{key:'check',value:function check(){var array=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this;if(__WEBPACK_IMPORTED_MODULE_0__common__["a" /* config */].debug&&!this.validate(array))throw new Error('Invalid '+this.constructor.name);return this}}]),MathArray}(_extendableBuiltin(Array));/* harmony default export */ __webpack_exports__["a"] = (MathArray);
  10806. //# sourceMappingURL=math-array.js.map
  10807. /***/ }),
  10808. /* 113 */
  10809. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  10810. "use strict";
  10811. /* harmony export (immutable) */ __webpack_exports__["b"] = validateVector3;
  10812. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vector__ = __webpack_require__(170);
  10813. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common__ = __webpack_require__(31);
  10814. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_vec3_set__ = __webpack_require__(613);
  10815. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_vec3_set___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_gl_vec3_set__);
  10816. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_vec3_angle__ = __webpack_require__(604);
  10817. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_vec3_angle___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_gl_vec3_angle__);
  10818. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_vec3_add__ = __webpack_require__(603);
  10819. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_vec3_add___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_gl_vec3_add__);
  10820. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_vec3_subtract__ = __webpack_require__(614);
  10821. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_vec3_subtract___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_gl_vec3_subtract__);
  10822. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_vec3_multiply__ = __webpack_require__(607);
  10823. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_vec3_multiply___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_gl_vec3_multiply__);
  10824. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_vec3_divide__ = __webpack_require__(605);
  10825. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_vec3_divide___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_gl_vec3_divide__);
  10826. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_vec3_scale__ = __webpack_require__(611);
  10827. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_vec3_scale___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_gl_vec3_scale__);
  10828. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_vec3_scaleAndAdd__ = __webpack_require__(612);
  10829. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_vec3_scaleAndAdd___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_gl_vec3_scaleAndAdd__);
  10830. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_vec3_cross__ = __webpack_require__(239);
  10831. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_vec3_cross___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_gl_vec3_cross__);
  10832. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_vec3_rotateX__ = __webpack_require__(608);
  10833. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_vec3_rotateX___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_gl_vec3_rotateX__);
  10834. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_vec3_rotateY__ = __webpack_require__(609);
  10835. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_vec3_rotateY___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_gl_vec3_rotateY__);
  10836. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_vec3_rotateZ__ = __webpack_require__(610);
  10837. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_vec3_rotateZ___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_gl_vec3_rotateZ__);
  10838. var _createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)throw new TypeError('Super expression must either be null or a function, not '+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}var ORIGIN=[0,0,0];function validateVector3(v){var _NumberisFinite=Number.isFinite;return 3===v.length&&_NumberisFinite(v[0])&&_NumberisFinite(v[1])&&_NumberisFinite(v[2])}var Vector3=function(_Vector){function Vector3(){var x=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,y=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,z=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0;_classCallCheck(this,Vector3);var _this=_possibleConstructorReturn(this,(Vector3.__proto__||Object.getPrototypeOf(Vector3)).call(this));return Array.isArray(x)&&1===arguments.length?_this.copy(x):_this.set(x,y,z),_this}return _inherits(Vector3,_Vector),_createClass(Vector3,[{key:'set',value:function set(x,y,z){return __WEBPACK_IMPORTED_MODULE_2_gl_vec3_set___default()(this,x,y,z),this.check()}},{key:'angle',value:function angle(vector){return __WEBPACK_IMPORTED_MODULE_3_gl_vec3_angle___default()(this,vector)}},{key:'add',value:function add(){for(var _len=arguments.length,vectors=Array(_len),_key=0;_key<_len;_key++)vectors[_key]=arguments[_key];var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,vector,_iterator=vectors[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0)vector=_step.value,__WEBPACK_IMPORTED_MODULE_4_gl_vec3_add___default()(this,this,vector)}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{!_iteratorNormalCompletion&&_iterator.return&&_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return this.check()}},{key:'subtract',value:function subtract(){for(var _len2=arguments.length,vectors=Array(_len2),_key2=0;_key2<_len2;_key2++)vectors[_key2]=arguments[_key2];var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,vector,_iterator2=vectors[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0)vector=_step2.value,__WEBPACK_IMPORTED_MODULE_5_gl_vec3_subtract___default()(this,this,vector)}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{!_iteratorNormalCompletion2&&_iterator2.return&&_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}return this.check()}},{key:'multiply',value:function multiply(){for(var _len3=arguments.length,vectors=Array(_len3),_key3=0;_key3<_len3;_key3++)vectors[_key3]=arguments[_key3];var _iteratorNormalCompletion3=!0,_didIteratorError3=!1,_iteratorError3=void 0;try{for(var _step3,vector,_iterator3=vectors[Symbol.iterator]();!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=!0)vector=_step3.value,__WEBPACK_IMPORTED_MODULE_6_gl_vec3_multiply___default()(this,this,vector)}catch(err){_didIteratorError3=!0,_iteratorError3=err}finally{try{!_iteratorNormalCompletion3&&_iterator3.return&&_iterator3.return()}finally{if(_didIteratorError3)throw _iteratorError3}}return this.check()}},{key:'scale',value:function scale(_scale){return Number.isFinite(_scale)?__WEBPACK_IMPORTED_MODULE_8_gl_vec3_scale___default()(this,this,_scale):__WEBPACK_IMPORTED_MODULE_6_gl_vec3_multiply___default()(this,this,_scale),this.check()}},{key:'cross',value:function cross(vector){return __WEBPACK_IMPORTED_MODULE_10_gl_vec3_cross___default()(this,this,vector),this.check()}},{key:'rotateX',value:function rotateX(_ref){var radians=_ref.radians,_ref$origin=_ref.origin,origin=void 0===_ref$origin?ORIGIN:_ref$origin;return __WEBPACK_IMPORTED_MODULE_11_gl_vec3_rotateX___default()(this,this,origin,radians),this.check()}},{key:'rotateY',value:function rotateY(_ref2){var radians=_ref2.radians,_ref2$origin=_ref2.origin,origin=void 0===_ref2$origin?ORIGIN:_ref2$origin;return __WEBPACK_IMPORTED_MODULE_12_gl_vec3_rotateY___default()(this,this,origin,radians),this.check()}},{key:'rotateZ',value:function rotateZ(_ref3){var radians=_ref3.radians,_ref3$origin=_ref3.origin,origin=void 0===_ref3$origin?ORIGIN:_ref3$origin;return __WEBPACK_IMPORTED_MODULE_13_gl_vec3_rotateZ___default()(this,this,origin,radians),this.check()}},{key:'operation',value:function operation(_operation){for(var _len4=arguments.length,args=Array(1<_len4?_len4-1:0),_key4=1;_key4<_len4;_key4++)args[_key4-1]=arguments[_key4];return _operation.apply(void 0,[this,this].concat(args)),this.check()}},{key:'divide',value:function divide(){for(var _len5=arguments.length,vectors=Array(_len5),_key5=0;_key5<_len5;_key5++)vectors[_key5]=arguments[_key5];var _iteratorNormalCompletion4=!0,_didIteratorError4=!1,_iteratorError4=void 0;try{for(var _step4,vector,_iterator4=vectors[Symbol.iterator]();!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=!0)vector=_step4.value,__WEBPACK_IMPORTED_MODULE_7_gl_vec3_divide___default()(this,this,vector)}catch(err){_didIteratorError4=!0,_iteratorError4=err}finally{try{!_iteratorNormalCompletion4&&_iterator4.return&&_iterator4.return()}finally{if(_didIteratorError4)throw _iteratorError4}}return this.check()}},{key:'scaleAndAdd',value:function scaleAndAdd(vector,scale){return __WEBPACK_IMPORTED_MODULE_9_gl_vec3_scaleAndAdd___default()(this,this,vector,scale),this.check()}},{key:'ELEMENTS',get:function get(){return 3}},{key:'x',get:function get(){return this[0]},set:function set(value){return this[0]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'y',get:function get(){return this[1]},set:function set(value){return this[1]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'z',get:function get(){return this[2]},set:function set(value){return this[2]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}}]),Vector3}(__WEBPACK_IMPORTED_MODULE_0__vector__["a" /* default */]);/* harmony default export */ __webpack_exports__["a"] = (Vector3);
  10839. //# sourceMappingURL=vector3.js.map
  10840. /***/ }),
  10841. /* 114 */
  10842. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  10843. "use strict";
  10844. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return RECOGNIZERS; });
  10845. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return RECOGNIZER_COMPATIBLE_MAP; });
  10846. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return RECOGNIZER_FALLBACK_MAP; });
  10847. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return BASIC_EVENT_ALIASES; });
  10848. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return INPUT_EVENT_TYPES; });
  10849. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return EVENT_RECOGNIZER_MAP; });
  10850. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return GESTURE_EVENT_ALIASES; });
  10851. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_hammer__ = __webpack_require__(283);
  10852. // Copyright (c) 2017 Uber Technologies, Inc.
  10853. //
  10854. // Permission is hereby granted, free of charge, to any person obtaining a copy
  10855. // of this software and associated documentation files (the "Software"), to deal
  10856. // in the Software without restriction, including without limitation the rights
  10857. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10858. // copies of the Software, and to permit persons to whom the Software is
  10859. // furnished to do so, subject to the following conditions:
  10860. //
  10861. // The above copyright notice and this permission notice shall be included in
  10862. // all copies or substantial portions of the Software.
  10863. //
  10864. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  10865. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  10866. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  10867. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  10868. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  10869. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  10870. // THE SOFTWARE.
  10871. // This module contains constants that must be conditionally required
  10872. // due to `window`/`document` references downstream.
  10873. var RECOGNIZERS = __WEBPACK_IMPORTED_MODULE_0__utils_hammer__["b" /* default */] ? [[__WEBPACK_IMPORTED_MODULE_0__utils_hammer__["b" /* default */].Rotate, { enable: false }], [__WEBPACK_IMPORTED_MODULE_0__utils_hammer__["b" /* default */].Pinch, { enable: false }], [__WEBPACK_IMPORTED_MODULE_0__utils_hammer__["b" /* default */].Swipe, { enable: false }], [__WEBPACK_IMPORTED_MODULE_0__utils_hammer__["b" /* default */].Pan, { threshold: 0, enable: false }], [__WEBPACK_IMPORTED_MODULE_0__utils_hammer__["b" /* default */].Press, { enable: false }], [__WEBPACK_IMPORTED_MODULE_0__utils_hammer__["b" /* default */].Tap, { event: 'doubletap', taps: 2, enable: false }], [__WEBPACK_IMPORTED_MODULE_0__utils_hammer__["b" /* default */].Tap, { enable: false }]] : null;
  10874. // Recognize the following gestures even if a given recognizer succeeds
  10875. var RECOGNIZER_COMPATIBLE_MAP = {
  10876. rotate: ['pinch']
  10877. };
  10878. // Recognize the folling gestures only if a given recognizer fails
  10879. var RECOGNIZER_FALLBACK_MAP = {
  10880. doubletap: ['tap']
  10881. };
  10882. /**
  10883. * Only one set of basic input events will be fired by Hammer.js:
  10884. * either pointer, touch, or mouse, depending on system support.
  10885. * In order to enable an application to be agnostic of system support,
  10886. * alias basic input events into "classes" of events: down, move, and up.
  10887. * See `_onBasicInput()` for usage of these aliases.
  10888. */
  10889. var BASIC_EVENT_ALIASES = {
  10890. pointerdown: 'pointerdown',
  10891. pointermove: 'pointermove',
  10892. pointerup: 'pointerup',
  10893. touchstart: 'pointerdown',
  10894. touchmove: 'pointermove',
  10895. touchend: 'pointerup',
  10896. mousedown: 'pointerdown',
  10897. mousemove: 'pointermove',
  10898. mouseup: 'pointerup'
  10899. };
  10900. var INPUT_EVENT_TYPES = {
  10901. KEY_EVENTS: ['keydown', 'keyup'],
  10902. MOUSE_EVENTS: ['mousedown', 'mousemove', 'mouseup', 'mouseleave'],
  10903. WHEEL_EVENTS: [
  10904. // Chrome, Safari
  10905. 'wheel',
  10906. // IE
  10907. 'mousewheel',
  10908. // legacy Firefox
  10909. 'DOMMouseScroll']
  10910. };
  10911. /**
  10912. * "Gestural" events are those that have semantic meaning beyond the basic input event,
  10913. * e.g. a click or tap is a sequence of `down` and `up` events with no `move` event in between.
  10914. * Hammer.js handles these with its Recognizer system;
  10915. * this block maps event names to the Recognizers required to detect the events.
  10916. */
  10917. var EVENT_RECOGNIZER_MAP = {
  10918. tap: 'tap',
  10919. doubletap: 'doubletap',
  10920. press: 'press',
  10921. pinch: 'pinch',
  10922. pinchin: 'pinch',
  10923. pinchout: 'pinch',
  10924. pinchstart: 'pinch',
  10925. pinchmove: 'pinch',
  10926. pinchend: 'pinch',
  10927. pinchcancel: 'pinch',
  10928. rotate: 'rotate',
  10929. rotatestart: 'rotate',
  10930. rotatemove: 'rotate',
  10931. rotateend: 'rotate',
  10932. rotatecancel: 'rotate',
  10933. pan: 'pan',
  10934. panstart: 'pan',
  10935. panmove: 'pan',
  10936. panup: 'pan',
  10937. pandown: 'pan',
  10938. panleft: 'pan',
  10939. panright: 'pan',
  10940. panend: 'pan',
  10941. pancancel: 'pan',
  10942. swipe: 'swipe',
  10943. swipeleft: 'swipe',
  10944. swiperight: 'swipe',
  10945. swipeup: 'swipe',
  10946. swipedown: 'swipe'
  10947. };
  10948. /**
  10949. * Map gestural events typically provided by browsers
  10950. * that are not reported in 'hammer.input' events
  10951. * to corresponding Hammer.js gestures.
  10952. */
  10953. var GESTURE_EVENT_ALIASES = {
  10954. click: 'tap',
  10955. dblclick: 'doubletap',
  10956. mousedown: 'pointerdown',
  10957. mousemove: 'pointermove',
  10958. mouseup: 'pointerup',
  10959. mouseleave: 'pointerleave'
  10960. };
  10961. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwibmFtZXMiOlsiSGFtbWVyIiwiUkVDT0dOSVpFUlMiLCJSb3RhdGUiLCJlbmFibGUiLCJQaW5jaCIsIlN3aXBlIiwiUGFuIiwidGhyZXNob2xkIiwiUHJlc3MiLCJUYXAiLCJldmVudCIsInRhcHMiLCJSRUNPR05JWkVSX0NPTVBBVElCTEVfTUFQIiwicm90YXRlIiwiUkVDT0dOSVpFUl9GQUxMQkFDS19NQVAiLCJkb3VibGV0YXAiLCJCQVNJQ19FVkVOVF9BTElBU0VTIiwicG9pbnRlcmRvd24iLCJwb2ludGVybW92ZSIsInBvaW50ZXJ1cCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsIm1vdXNlZG93biIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJJTlBVVF9FVkVOVF9UWVBFUyIsIktFWV9FVkVOVFMiLCJNT1VTRV9FVkVOVFMiLCJXSEVFTF9FVkVOVFMiLCJFVkVOVF9SRUNPR05JWkVSX01BUCIsInRhcCIsInByZXNzIiwicGluY2giLCJwaW5jaGluIiwicGluY2hvdXQiLCJwaW5jaHN0YXJ0IiwicGluY2htb3ZlIiwicGluY2hlbmQiLCJwaW5jaGNhbmNlbCIsInJvdGF0ZXN0YXJ0Iiwicm90YXRlbW92ZSIsInJvdGF0ZWVuZCIsInJvdGF0ZWNhbmNlbCIsInBhbiIsInBhbnN0YXJ0IiwicGFubW92ZSIsInBhbnVwIiwicGFuZG93biIsInBhbmxlZnQiLCJwYW5yaWdodCIsInBhbmVuZCIsInBhbmNhbmNlbCIsInN3aXBlIiwic3dpcGVsZWZ0Iiwic3dpcGVyaWdodCIsInN3aXBldXAiLCJzd2lwZWRvd24iLCJHRVNUVVJFX0VWRU5UX0FMSUFTRVMiLCJjbGljayIsImRibGNsaWNrIiwibW91c2VsZWF2ZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBT0EsTUFBUCxNQUFtQixnQkFBbkI7O0FBRUE7QUFDQTtBQUNBLE9BQU8sSUFBTUMsY0FBY0QsU0FBUyxDQUNsQyxDQUFDQSxPQUFPRSxNQUFSLEVBQWdCLEVBQUNDLFFBQVEsS0FBVCxFQUFoQixDQURrQyxFQUVsQyxDQUFDSCxPQUFPSSxLQUFSLEVBQWUsRUFBQ0QsUUFBUSxLQUFULEVBQWYsQ0FGa0MsRUFHbEMsQ0FBQ0gsT0FBT0ssS0FBUixFQUFlLEVBQUNGLFFBQVEsS0FBVCxFQUFmLENBSGtDLEVBSWxDLENBQUNILE9BQU9NLEdBQVIsRUFBYSxFQUFDQyxXQUFXLENBQVosRUFBZUosUUFBUSxLQUF2QixFQUFiLENBSmtDLEVBS2xDLENBQUNILE9BQU9RLEtBQVIsRUFBZSxFQUFDTCxRQUFRLEtBQVQsRUFBZixDQUxrQyxFQU1sQyxDQUFDSCxPQUFPUyxHQUFSLEVBQWEsRUFBQ0MsT0FBTyxXQUFSLEVBQXFCQyxNQUFNLENBQTNCLEVBQThCUixRQUFRLEtBQXRDLEVBQWIsQ0FOa0MsRUFPbEMsQ0FBQ0gsT0FBT1MsR0FBUixFQUFhLEVBQUNOLFFBQVEsS0FBVCxFQUFiLENBUGtDLENBQVQsR0FRdkIsSUFSRzs7QUFVUDtBQUNBLE9BQU8sSUFBTVMsNEJBQTRCO0FBQ3ZDQyxVQUFRLENBQUMsT0FBRDtBQUQrQixDQUFsQzs7QUFJUDtBQUNBLE9BQU8sSUFBTUMsMEJBQTBCO0FBQ3JDQyxhQUFXLENBQUMsS0FBRDtBQUQwQixDQUFoQzs7QUFJUDs7Ozs7OztBQU9BLE9BQU8sSUFBTUMsc0JBQXNCO0FBQ2pDQyxlQUFhLGFBRG9CO0FBRWpDQyxlQUFhLGFBRm9CO0FBR2pDQyxhQUFXLFdBSHNCO0FBSWpDQyxjQUFZLGFBSnFCO0FBS2pDQyxhQUFXLGFBTHNCO0FBTWpDQyxZQUFVLFdBTnVCO0FBT2pDQyxhQUFXLGFBUHNCO0FBUWpDQyxhQUFXLGFBUnNCO0FBU2pDQyxXQUFTO0FBVHdCLENBQTVCOztBQVlQLE9BQU8sSUFBTUMsb0JBQW9CO0FBQy9CQyxjQUFZLENBQ1YsU0FEVSxFQUVWLE9BRlUsQ0FEbUI7QUFLL0JDLGdCQUFjLENBQ1osV0FEWSxFQUVaLFdBRlksRUFHWixTQUhZLEVBSVosWUFKWSxDQUxpQjtBQVcvQkMsZ0JBQWM7QUFDWjtBQUNBLFNBRlk7QUFHWjtBQUNBLGNBSlk7QUFLWjtBQUNBLGtCQU5ZO0FBWGlCLENBQTFCOztBQXFCUDs7Ozs7O0FBTUEsT0FBTyxJQUFNQyx1QkFBdUI7QUFDbENDLE9BQUssS0FENkI7QUFFbENoQixhQUFXLFdBRnVCO0FBR2xDaUIsU0FBTyxPQUgyQjtBQUlsQ0MsU0FBTyxPQUoyQjtBQUtsQ0MsV0FBUyxPQUx5QjtBQU1sQ0MsWUFBVSxPQU53QjtBQU9sQ0MsY0FBWSxPQVBzQjtBQVFsQ0MsYUFBVyxPQVJ1QjtBQVNsQ0MsWUFBVSxPQVR3QjtBQVVsQ0MsZUFBYSxPQVZxQjtBQVdsQzFCLFVBQVEsUUFYMEI7QUFZbEMyQixlQUFhLFFBWnFCO0FBYWxDQyxjQUFZLFFBYnNCO0FBY2xDQyxhQUFXLFFBZHVCO0FBZWxDQyxnQkFBYyxRQWZvQjtBQWdCbENDLE9BQUssS0FoQjZCO0FBaUJsQ0MsWUFBVSxLQWpCd0I7QUFrQmxDQyxXQUFTLEtBbEJ5QjtBQW1CbENDLFNBQU8sS0FuQjJCO0FBb0JsQ0MsV0FBUyxLQXBCeUI7QUFxQmxDQyxXQUFTLEtBckJ5QjtBQXNCbENDLFlBQVUsS0F0QndCO0FBdUJsQ0MsVUFBUSxLQXZCMEI7QUF3QmxDQyxhQUFXLEtBeEJ1QjtBQXlCbENDLFNBQU8sT0F6QjJCO0FBMEJsQ0MsYUFBVyxPQTFCdUI7QUEyQmxDQyxjQUFZLE9BM0JzQjtBQTRCbENDLFdBQVMsT0E1QnlCO0FBNkJsQ0MsYUFBVztBQTdCdUIsQ0FBN0I7O0FBZ0NQOzs7OztBQUtBLE9BQU8sSUFBTUMsd0JBQXdCO0FBQ25DQyxTQUFPLEtBRDRCO0FBRW5DQyxZQUFVLFdBRnlCO0FBR25DckMsYUFBVyxhQUh3QjtBQUluQ0MsYUFBVyxhQUp3QjtBQUtuQ0MsV0FBUyxXQUwwQjtBQU1uQ29DLGNBQVk7QUFOdUIsQ0FBOUIiLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE3IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IEhhbW1lciBmcm9tICcuL3V0aWxzL2hhbW1lcic7XG5cbi8vIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGNvbnN0YW50cyB0aGF0IG11c3QgYmUgY29uZGl0aW9uYWxseSByZXF1aXJlZFxuLy8gZHVlIHRvIGB3aW5kb3dgL2Bkb2N1bWVudGAgcmVmZXJlbmNlcyBkb3duc3RyZWFtLlxuZXhwb3J0IGNvbnN0IFJFQ09HTklaRVJTID0gSGFtbWVyID8gW1xuICBbSGFtbWVyLlJvdGF0ZSwge2VuYWJsZTogZmFsc2V9XSxcbiAgW0hhbW1lci5QaW5jaCwge2VuYWJsZTogZmFsc2V9XSxcbiAgW0hhbW1lci5Td2lwZSwge2VuYWJsZTogZmFsc2V9XSxcbiAgW0hhbW1lci5QYW4sIHt0aHJlc2hvbGQ6IDAsIGVuYWJsZTogZmFsc2V9XSxcbiAgW0hhbW1lci5QcmVzcywge2VuYWJsZTogZmFsc2V9XSxcbiAgW0hhbW1lci5UYXAsIHtldmVudDogJ2RvdWJsZXRhcCcsIHRhcHM6IDIsIGVuYWJsZTogZmFsc2V9XSxcbiAgW0hhbW1lci5UYXAsIHtlbmFibGU6IGZhbHNlfV1cbl0gOiBudWxsO1xuXG4vLyBSZWNvZ25pemUgdGhlIGZvbGxvd2luZyBnZXN0dXJlcyBldmVuIGlmIGEgZ2l2ZW4gcmVjb2duaXplciBzdWNjZWVkc1xuZXhwb3J0IGNvbnN0IFJFQ09HTklaRVJfQ09NUEFUSUJMRV9NQVAgPSB7XG4gIHJvdGF0ZTogWydwaW5jaCddXG59O1xuXG4vLyBSZWNvZ25pemUgdGhlIGZvbGxpbmcgZ2VzdHVyZXMgb25seSBpZiBhIGdpdmVuIHJlY29nbml6ZXIgZmFpbHNcbmV4cG9ydCBjb25zdCBSRUNPR05JWkVSX0ZBTExCQUNLX01BUCA9IHtcbiAgZG91YmxldGFwOiBbJ3RhcCddXG59O1xuXG4vKipcbiAqIE9ubHkgb25lIHNldCBvZiBiYXNpYyBpbnB1dCBldmVudHMgd2lsbCBiZSBmaXJlZCBieSBIYW1tZXIuanM6XG4gKiBlaXRoZXIgcG9pbnRlciwgdG91Y2gsIG9yIG1vdXNlLCBkZXBlbmRpbmcgb24gc3lzdGVtIHN1cHBvcnQuXG4gKiBJbiBvcmRlciB0byBlbmFibGUgYW4gYXBwbGljYXRpb24gdG8gYmUgYWdub3N0aWMgb2Ygc3lzdGVtIHN1cHBvcnQsXG4gKiBhbGlhcyBiYXNpYyBpbnB1dCBldmVudHMgaW50byBcImNsYXNzZXNcIiBvZiBldmVudHM6IGRvd24sIG1vdmUsIGFuZCB1cC5cbiAqIFNlZSBgX29uQmFzaWNJbnB1dCgpYCBmb3IgdXNhZ2Ugb2YgdGhlc2UgYWxpYXNlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEJBU0lDX0VWRU5UX0FMSUFTRVMgPSB7XG4gIHBvaW50ZXJkb3duOiAncG9pbnRlcmRvd24nLFxuICBwb2ludGVybW92ZTogJ3BvaW50ZXJtb3ZlJyxcbiAgcG9pbnRlcnVwOiAncG9pbnRlcnVwJyxcbiAgdG91Y2hzdGFydDogJ3BvaW50ZXJkb3duJyxcbiAgdG91Y2htb3ZlOiAncG9pbnRlcm1vdmUnLFxuICB0b3VjaGVuZDogJ3BvaW50ZXJ1cCcsXG4gIG1vdXNlZG93bjogJ3BvaW50ZXJkb3duJyxcbiAgbW91c2Vtb3ZlOiAncG9pbnRlcm1vdmUnLFxuICBtb3VzZXVwOiAncG9pbnRlcnVwJ1xufTtcblxuZXhwb3J0IGNvbnN0IElOUFVUX0VWRU5UX1RZUEVTID0ge1xuICBLRVlfRVZFTlRTOiBbXG4gICAgJ2tleWRvd24nLFxuICAgICdrZXl1cCdcbiAgXSxcbiAgTU9VU0VfRVZFTlRTOiBbXG4gICAgJ21vdXNlZG93bicsXG4gICAgJ21vdXNlbW92ZScsXG4gICAgJ21vdXNldXAnLFxuICAgICdtb3VzZWxlYXZlJ1xuICBdLFxuICBXSEVFTF9FVkVOVFM6IFtcbiAgICAvLyBDaHJvbWUsIFNhZmFyaVxuICAgICd3aGVlbCcsXG4gICAgLy8gSUVcbiAgICAnbW91c2V3aGVlbCcsXG4gICAgLy8gbGVnYWN5IEZpcmVmb3hcbiAgICAnRE9NTW91c2VTY3JvbGwnXG4gIF1cbn07XG5cbi8qKlxuICogXCJHZXN0dXJhbFwiIGV2ZW50cyBhcmUgdGhvc2UgdGhhdCBoYXZlIHNlbWFudGljIG1lYW5pbmcgYmV5b25kIHRoZSBiYXNpYyBpbnB1dCBldmVudCxcbiAqIGUuZy4gYSBjbGljayBvciB0YXAgaXMgYSBzZXF1ZW5jZSBvZiBgZG93bmAgYW5kIGB1cGAgZXZlbnRzIHdpdGggbm8gYG1vdmVgIGV2ZW50IGluIGJldHdlZW4uXG4gKiBIYW1tZXIuanMgaGFuZGxlcyB0aGVzZSB3aXRoIGl0cyBSZWNvZ25pemVyIHN5c3RlbTtcbiAqIHRoaXMgYmxvY2sgbWFwcyBldmVudCBuYW1lcyB0byB0aGUgUmVjb2duaXplcnMgcmVxdWlyZWQgdG8gZGV0ZWN0IHRoZSBldmVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBFVkVOVF9SRUNPR05JWkVSX01BUCA9IHtcbiAgdGFwOiAndGFwJyxcbiAgZG91YmxldGFwOiAnZG91YmxldGFwJyxcbiAgcHJlc3M6ICdwcmVzcycsXG4gIHBpbmNoOiAncGluY2gnLFxuICBwaW5jaGluOiAncGluY2gnLFxuICBwaW5jaG91dDogJ3BpbmNoJyxcbiAgcGluY2hzdGFydDogJ3BpbmNoJyxcbiAgcGluY2htb3ZlOiAncGluY2gnLFxuICBwaW5jaGVuZDogJ3BpbmNoJyxcbiAgcGluY2hjYW5jZWw6ICdwaW5jaCcsXG4gIHJvdGF0ZTogJ3JvdGF0ZScsXG4gIHJvdGF0ZXN0YXJ0OiAncm90YXRlJyxcbiAgcm90YXRlbW92ZTogJ3JvdGF0ZScsXG4gIHJvdGF0ZWVuZDogJ3JvdGF0ZScsXG4gIHJvdGF0ZWNhbmNlbDogJ3JvdGF0ZScsXG4gIHBhbjogJ3BhbicsXG4gIHBhbnN0YXJ0OiAncGFuJyxcbiAgcGFubW92ZTogJ3BhbicsXG4gIHBhbnVwOiAncGFuJyxcbiAgcGFuZG93bjogJ3BhbicsXG4gIHBhbmxlZnQ6ICdwYW4nLFxuICBwYW5yaWdodDogJ3BhbicsXG4gIHBhbmVuZDogJ3BhbicsXG4gIHBhbmNhbmNlbDogJ3BhbicsXG4gIHN3aXBlOiAnc3dpcGUnLFxuICBzd2lwZWxlZnQ6ICdzd2lwZScsXG4gIHN3aXBlcmlnaHQ6ICdzd2lwZScsXG4gIHN3aXBldXA6ICdzd2lwZScsXG4gIHN3aXBlZG93bjogJ3N3aXBlJ1xufTtcblxuLyoqXG4gKiBNYXAgZ2VzdHVyYWwgZXZlbnRzIHR5cGljYWxseSBwcm92aWRlZCBieSBicm93c2Vyc1xuICogdGhhdCBhcmUgbm90IHJlcG9ydGVkIGluICdoYW1tZXIuaW5wdXQnIGV2ZW50c1xuICogdG8gY29ycmVzcG9uZGluZyBIYW1tZXIuanMgZ2VzdHVyZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBHRVNUVVJFX0VWRU5UX0FMSUFTRVMgPSB7XG4gIGNsaWNrOiAndGFwJyxcbiAgZGJsY2xpY2s6ICdkb3VibGV0YXAnLFxuICBtb3VzZWRvd246ICdwb2ludGVyZG93bicsXG4gIG1vdXNlbW92ZTogJ3BvaW50ZXJtb3ZlJyxcbiAgbW91c2V1cDogJ3BvaW50ZXJ1cCcsXG4gIG1vdXNlbGVhdmU6ICdwb2ludGVybGVhdmUnXG59O1xuIl19
  10962. /***/ }),
  10963. /* 115 */
  10964. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  10965. "use strict";
  10966. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  10967. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__event_manager__ = __webpack_require__(672);
  10968. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "EventManager", function() { return __WEBPACK_IMPORTED_MODULE_0__event_manager__["a"]; });
  10969. // Copyright (c) 2017 Uber Technologies, Inc.
  10970. //
  10971. // Permission is hereby granted, free of charge, to any person obtaining a copy
  10972. // of this software and associated documentation files (the "Software"), to deal
  10973. // in the Software without restriction, including without limitation the rights
  10974. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10975. // copies of the Software, and to permit persons to whom the Software is
  10976. // furnished to do so, subject to the following conditions:
  10977. //
  10978. // The above copyright notice and this permission notice shall be included in
  10979. // all copies or substantial portions of the Software.
  10980. //
  10981. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  10982. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  10983. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  10984. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  10985. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  10986. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  10987. // THE SOFTWARE.
  10988. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0IiwiRXZlbnRNYW5hZ2VyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFRQSxXQUFXQyxZQUFuQixRQUFzQyxpQkFBdEMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTcgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5leHBvcnQge2RlZmF1bHQgYXMgRXZlbnRNYW5hZ2VyfSBmcm9tICcuL2V2ZW50LW1hbmFnZXInO1xuIl19
  10989. /***/ }),
  10990. /* 116 */
  10991. /***/ (function(module, exports, __webpack_require__) {
  10992. /* WEBPACK VAR INJECTION */(function(process) {/**
  10993. * Copyright (c) 2013-present, Facebook, Inc.
  10994. *
  10995. * This source code is licensed under the MIT license found in the
  10996. * LICENSE file in the root directory of this source tree.
  10997. */
  10998. if (process.env.NODE_ENV !== 'production') {
  10999. var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&
  11000. Symbol.for &&
  11001. Symbol.for('react.element')) ||
  11002. 0xeac7;
  11003. var isValidElement = function(object) {
  11004. return typeof object === 'object' &&
  11005. object !== null &&
  11006. object.$$typeof === REACT_ELEMENT_TYPE;
  11007. };
  11008. // By explicitly using `prop-types` you are opting into new development behavior.
  11009. // http://fb.me/prop-types-in-prod
  11010. var throwOnDirectAccess = true;
  11011. module.exports = __webpack_require__(679)(isValidElement, throwOnDirectAccess);
  11012. } else {
  11013. // By explicitly using `prop-types` you are opting into new production behavior.
  11014. // http://fb.me/prop-types-in-prod
  11015. module.exports = __webpack_require__(678)();
  11016. }
  11017. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)))
  11018. /***/ }),
  11019. /* 117 */
  11020. /***/ (function(module, exports, __webpack_require__) {
  11021. "use strict";
  11022. /* WEBPACK VAR INJECTION */(function(process) {
  11023. if (process.env.NODE_ENV === 'production') {
  11024. module.exports = __webpack_require__(681);
  11025. } else {
  11026. module.exports = __webpack_require__(680);
  11027. }
  11028. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)))
  11029. /***/ }),
  11030. /* 118 */
  11031. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  11032. "use strict";
  11033. /* harmony export (immutable) */ __webpack_exports__["a"] = createMat4;
  11034. /* harmony export (immutable) */ __webpack_exports__["b"] = transformVector;
  11035. /* harmony export (immutable) */ __webpack_exports__["d"] = mod;
  11036. /* harmony export (immutable) */ __webpack_exports__["c"] = lerp;
  11037. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_gl_vec4_scale__ = __webpack_require__(161);
  11038. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_gl_vec4_scale___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_gl_vec4_scale__);
  11039. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_gl_vec4_transformMat4__ = __webpack_require__(103);
  11040. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_gl_vec4_transformMat4___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_gl_vec4_transformMat4__);
  11041. // Helper, avoids low-precision 32 bit matrices from gl-matrix mat4.create()
  11042. function createMat4() {
  11043. return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
  11044. }
  11045. // Transforms a vec4 with a projection matrix
  11046. function transformVector(matrix, vector) {
  11047. var result = __WEBPACK_IMPORTED_MODULE_1_gl_vec4_transformMat4___default()([], vector, matrix);
  11048. __WEBPACK_IMPORTED_MODULE_0_gl_vec4_scale___default()(result, result, 1 / result[3]);
  11049. return result;
  11050. }
  11051. function mod(value, divisor) {
  11052. var modulus = value % divisor;
  11053. return modulus < 0 ? divisor + modulus : modulus;
  11054. }
  11055. function lerp(start, end, step) {
  11056. return step * end + (1 - step) * start;
  11057. }
  11058. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXRoLXV0aWxzLmpzIl0sIm5hbWVzIjpbInZlYzRfc2NhbGUiLCJ2ZWM0X3RyYW5zZm9ybU1hdDQiLCJjcmVhdGVNYXQ0IiwidHJhbnNmb3JtVmVjdG9yIiwibWF0cml4IiwidmVjdG9yIiwicmVzdWx0IiwibW9kIiwidmFsdWUiLCJkaXZpc29yIiwibW9kdWx1cyIsImxlcnAiLCJzdGFydCIsImVuZCIsInN0ZXAiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFVBQVAsTUFBdUIsZUFBdkI7QUFDQSxPQUFPQyxrQkFBUCxNQUErQix1QkFBL0I7O0FBRUE7QUFDQSxPQUFPLFNBQVNDLFVBQVQsR0FBc0I7QUFDM0IsU0FBTyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLENBQVYsRUFBYSxDQUFiLEVBQWdCLENBQWhCLEVBQW1CLENBQW5CLEVBQXNCLENBQXRCLEVBQXlCLENBQXpCLEVBQTRCLENBQTVCLEVBQStCLENBQS9CLEVBQWtDLENBQWxDLEVBQXFDLENBQXJDLEVBQXdDLENBQXhDLEVBQTJDLENBQTNDLEVBQThDLENBQTlDLENBQVA7QUFDRDs7QUFFRDtBQUNBLE9BQU8sU0FBU0MsZUFBVCxDQUF5QkMsTUFBekIsRUFBaUNDLE1BQWpDLEVBQXlDO0FBQzlDLE1BQU1DLFNBQVNMLG1CQUFtQixFQUFuQixFQUF1QkksTUFBdkIsRUFBK0JELE1BQS9CLENBQWY7QUFDQUosYUFBV00sTUFBWCxFQUFtQkEsTUFBbkIsRUFBMkIsSUFBSUEsT0FBTyxDQUFQLENBQS9CO0FBQ0EsU0FBT0EsTUFBUDtBQUNEOztBQUVELE9BQU8sU0FBU0MsR0FBVCxDQUFhQyxLQUFiLEVBQW9CQyxPQUFwQixFQUE2QjtBQUNsQyxNQUFNQyxVQUFVRixRQUFRQyxPQUF4QjtBQUNBLFNBQU9DLFVBQVUsQ0FBVixHQUFjRCxVQUFVQyxPQUF4QixHQUFrQ0EsT0FBekM7QUFDRDs7QUFFRCxPQUFPLFNBQVNDLElBQVQsQ0FBY0MsS0FBZCxFQUFxQkMsR0FBckIsRUFBMEJDLElBQTFCLEVBQWdDO0FBQ3JDLFNBQU9BLE9BQU9ELEdBQVAsR0FBYSxDQUFDLElBQUlDLElBQUwsSUFBYUYsS0FBakM7QUFDRCIsImZpbGUiOiJtYXRoLXV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZlYzRfc2NhbGUgZnJvbSAnZ2wtdmVjNC9zY2FsZSc7XG5pbXBvcnQgdmVjNF90cmFuc2Zvcm1NYXQ0IGZyb20gJ2dsLXZlYzQvdHJhbnNmb3JtTWF0NCc7XG5cbi8vIEhlbHBlciwgYXZvaWRzIGxvdy1wcmVjaXNpb24gMzIgYml0IG1hdHJpY2VzIGZyb20gZ2wtbWF0cml4IG1hdDQuY3JlYXRlKClcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYXQ0KCkge1xuICByZXR1cm4gWzEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDFdO1xufVxuXG4vLyBUcmFuc2Zvcm1zIGEgdmVjNCB3aXRoIGEgcHJvamVjdGlvbiBtYXRyaXhcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1WZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgY29uc3QgcmVzdWx0ID0gdmVjNF90cmFuc2Zvcm1NYXQ0KFtdLCB2ZWN0b3IsIG1hdHJpeCk7XG4gIHZlYzRfc2NhbGUocmVzdWx0LCByZXN1bHQsIDEgLyByZXN1bHRbM10pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9kKHZhbHVlLCBkaXZpc29yKSB7XG4gIGNvbnN0IG1vZHVsdXMgPSB2YWx1ZSAlIGRpdmlzb3I7XG4gIHJldHVybiBtb2R1bHVzIDwgMCA/IGRpdmlzb3IgKyBtb2R1bHVzIDogbW9kdWx1cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAoc3RhcnQsIGVuZCwgc3RlcCkge1xuICByZXR1cm4gc3RlcCAqIGVuZCArICgxIC0gc3RlcCkgKiBzdGFydDtcbn1cbiJdfQ==
  11059. /***/ }),
  11060. /* 119 */
  11061. /***/ (function(module, exports, __webpack_require__) {
  11062. "use strict";
  11063. Object.defineProperty(exports, "__esModule", {
  11064. value: true
  11065. });
  11066. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  11067. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  11068. var _core = __webpack_require__(13);
  11069. var _luma = __webpack_require__(12);
  11070. var _pathLayerVertex = __webpack_require__(316);
  11071. var _pathLayerVertex2 = _interopRequireDefault(_pathLayerVertex);
  11072. var _pathLayerVertex3 = __webpack_require__(315);
  11073. var _pathLayerVertex4 = _interopRequireDefault(_pathLayerVertex3);
  11074. var _pathLayerFragment = __webpack_require__(314);
  11075. var _pathLayerFragment2 = _interopRequireDefault(_pathLayerFragment);
  11076. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  11077. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  11078. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  11079. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  11080. //
  11081. // Permission is hereby granted, free of charge, to any person obtaining a copy
  11082. // of this software and associated documentation files (the "Software"), to deal
  11083. // in the Software without restriction, including without limitation the rights
  11084. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  11085. // copies of the Software, and to permit persons to whom the Software is
  11086. // furnished to do so, subject to the following conditions:
  11087. //
  11088. // The above copyright notice and this permission notice shall be included in
  11089. // all copies or substantial portions of the Software.
  11090. //
  11091. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  11092. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  11093. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  11094. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  11095. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  11096. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  11097. // THE SOFTWARE.
  11098. var fp64LowPart = _core.experimental.fp64LowPart,
  11099. enable64bitSupport = _core.experimental.enable64bitSupport;
  11100. var DEFAULT_COLOR = [0, 0, 0, 255];
  11101. var defaultProps = {
  11102. widthScale: 1, // stroke width in meters
  11103. widthMinPixels: 0, // min stroke width in pixels
  11104. widthMaxPixels: Number.MAX_SAFE_INTEGER, // max stroke width in pixels
  11105. rounded: false,
  11106. miterLimit: 4,
  11107. fp64: false,
  11108. dashJustified: false,
  11109. getPath: function getPath(object) {
  11110. return object.path;
  11111. },
  11112. getColor: function getColor(object) {
  11113. return object.color || DEFAULT_COLOR;
  11114. },
  11115. getWidth: function getWidth(object) {
  11116. return object.width || 1;
  11117. },
  11118. getDashArray: null
  11119. };
  11120. var isClosed = function isClosed(path) {
  11121. var firstPoint = path[0];
  11122. var lastPoint = path[path.length - 1];
  11123. return firstPoint[0] === lastPoint[0] && firstPoint[1] === lastPoint[1] && firstPoint[2] === lastPoint[2];
  11124. };
  11125. var PathLayer = function (_Layer) {
  11126. _inherits(PathLayer, _Layer);
  11127. function PathLayer() {
  11128. _classCallCheck(this, PathLayer);
  11129. return _possibleConstructorReturn(this, (PathLayer.__proto__ || Object.getPrototypeOf(PathLayer)).apply(this, arguments));
  11130. }
  11131. _createClass(PathLayer, [{
  11132. key: 'getShaders',
  11133. value: function getShaders() {
  11134. return enable64bitSupport(this.props) ? { vs: _pathLayerVertex4.default, fs: _pathLayerFragment2.default, modules: ['project64', 'picking'] } : { vs: _pathLayerVertex2.default, fs: _pathLayerFragment2.default, modules: ['picking'] }; // 'project' module added by default.
  11135. }
  11136. }, {
  11137. key: 'initializeState',
  11138. value: function initializeState() {
  11139. var attributeManager = this.getAttributeManager();
  11140. /* eslint-disable max-len */
  11141. attributeManager.addInstanced({
  11142. instanceStartPositions: { size: 3, update: this.calculateStartPositions },
  11143. instanceEndPositions: { size: 3, update: this.calculateEndPositions },
  11144. instanceLeftDeltas: { size: 3, update: this.calculateLeftDeltas },
  11145. instanceRightDeltas: { size: 3, update: this.calculateRightDeltas },
  11146. instanceStrokeWidths: { size: 1, accessor: 'getWidth', update: this.calculateStrokeWidths },
  11147. instanceDashArrays: { size: 2, accessor: 'getDashArray', update: this.calculateDashArrays },
  11148. instanceColors: {
  11149. size: 4,
  11150. type: _luma.GL.UNSIGNED_BYTE,
  11151. accessor: 'getColor',
  11152. update: this.calculateColors
  11153. },
  11154. instancePickingColors: { size: 3, type: _luma.GL.UNSIGNED_BYTE, update: this.calculatePickingColors }
  11155. });
  11156. /* eslint-enable max-len */
  11157. }
  11158. }, {
  11159. key: 'updateAttribute',
  11160. value: function updateAttribute(_ref) {
  11161. var props = _ref.props,
  11162. oldProps = _ref.oldProps,
  11163. changeFlags = _ref.changeFlags;
  11164. if (props.fp64 !== oldProps.fp64) {
  11165. var attributeManager = this.getAttributeManager();
  11166. attributeManager.invalidateAll();
  11167. if (props.fp64 && props.coordinateSystem === _core.COORDINATE_SYSTEM.LNGLAT) {
  11168. attributeManager.addInstanced({
  11169. instanceStartEndPositions64xyLow: {
  11170. size: 4,
  11171. update: this.calculateInstanceStartEndPositions64xyLow
  11172. }
  11173. });
  11174. } else {
  11175. attributeManager.remove(['instanceStartEndPositions64xyLow']);
  11176. }
  11177. }
  11178. }
  11179. }, {
  11180. key: 'updateState',
  11181. value: function updateState(_ref2) {
  11182. var oldProps = _ref2.oldProps,
  11183. props = _ref2.props,
  11184. changeFlags = _ref2.changeFlags;
  11185. _get(PathLayer.prototype.__proto__ || Object.getPrototypeOf(PathLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  11186. var getPath = this.props.getPath;
  11187. var attributeManager = this.getAttributeManager();
  11188. if (props.fp64 !== oldProps.fp64) {
  11189. var gl = this.context.gl;
  11190. this.setState({ model: this._getModel(gl) });
  11191. }
  11192. this.updateAttribute({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  11193. var geometryChanged = changeFlags.dataChanged || changeFlags.updateTriggersChanged && (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPath);
  11194. if (geometryChanged) {
  11195. // this.state.paths only stores point positions in each path
  11196. var paths = props.data.map(getPath);
  11197. var numInstances = paths.reduce(function (count, path) {
  11198. return count + path.length - 1;
  11199. }, 0);
  11200. this.setState({ paths: paths, numInstances: numInstances });
  11201. attributeManager.invalidateAll();
  11202. }
  11203. }
  11204. }, {
  11205. key: 'draw',
  11206. value: function draw(_ref3) {
  11207. var uniforms = _ref3.uniforms;
  11208. var _props = this.props,
  11209. rounded = _props.rounded,
  11210. miterLimit = _props.miterLimit,
  11211. widthScale = _props.widthScale,
  11212. widthMinPixels = _props.widthMinPixels,
  11213. widthMaxPixels = _props.widthMaxPixels,
  11214. dashJustified = _props.dashJustified;
  11215. this.state.model.render(Object.assign({}, uniforms, {
  11216. jointType: Number(rounded),
  11217. alignMode: Number(dashJustified),
  11218. widthScale: widthScale,
  11219. miterLimit: miterLimit,
  11220. widthMinPixels: widthMinPixels,
  11221. widthMaxPixels: widthMaxPixels
  11222. }));
  11223. }
  11224. }, {
  11225. key: '_getModel',
  11226. value: function _getModel(gl) {
  11227. /*
  11228. * _
  11229. * "-_ 1 3 5
  11230. * _ "o---------------------o-------------------_-o
  11231. * - / ""--..__ '. _.-' /
  11232. * _ "@- - - - - ""--..__- - - - x - - - -_.@' /
  11233. * "-_ / ""--..__ '. _,-` : /
  11234. * "o----------------------------""-o' : /
  11235. * 0,2 4 / '. : /
  11236. * / '.: /
  11237. * / :'. /
  11238. * / : ', /
  11239. * / : o
  11240. */
  11241. var SEGMENT_INDICES = [
  11242. // start corner
  11243. 0, 2, 1,
  11244. // body
  11245. 1, 2, 4, 1, 4, 3,
  11246. // end corner
  11247. 3, 4, 5];
  11248. // [0] position on segment - 0: start, 1: end
  11249. // [1] side of path - -1: left, 0: center, 1: right
  11250. // [2] role - 0: offset point 1: joint point
  11251. var SEGMENT_POSITIONS = [
  11252. // bevel start corner
  11253. 0, 0, 1,
  11254. // start inner corner
  11255. 0, -1, 0,
  11256. // start outer corner
  11257. 0, 1, 0,
  11258. // end inner corner
  11259. 1, -1, 0,
  11260. // end outer corner
  11261. 1, 1, 0,
  11262. // bevel end corner
  11263. 1, 0, 1];
  11264. return new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  11265. id: this.props.id,
  11266. geometry: new _luma.Geometry({
  11267. drawMode: _luma.GL.TRIANGLES,
  11268. attributes: {
  11269. indices: new Uint16Array(SEGMENT_INDICES),
  11270. positions: new Float32Array(SEGMENT_POSITIONS)
  11271. }
  11272. }),
  11273. isInstanced: true,
  11274. shaderCache: this.context.shaderCache
  11275. }));
  11276. }
  11277. }, {
  11278. key: 'calculateStartPositions',
  11279. value: function calculateStartPositions(attribute) {
  11280. var paths = this.state.paths;
  11281. var value = attribute.value;
  11282. var i = 0;
  11283. paths.forEach(function (path) {
  11284. var numSegments = path.length - 1;
  11285. for (var ptIndex = 0; ptIndex < numSegments; ptIndex++) {
  11286. var point = path[ptIndex];
  11287. value[i++] = point[0];
  11288. value[i++] = point[1];
  11289. value[i++] = point[2] || 0;
  11290. }
  11291. });
  11292. }
  11293. }, {
  11294. key: 'calculateEndPositions',
  11295. value: function calculateEndPositions(attribute) {
  11296. var paths = this.state.paths;
  11297. var value = attribute.value;
  11298. var i = 0;
  11299. paths.forEach(function (path) {
  11300. for (var ptIndex = 1; ptIndex < path.length; ptIndex++) {
  11301. var point = path[ptIndex];
  11302. value[i++] = point[0];
  11303. value[i++] = point[1];
  11304. value[i++] = point[2] || 0;
  11305. }
  11306. });
  11307. }
  11308. }, {
  11309. key: 'calculateInstanceStartEndPositions64xyLow',
  11310. value: function calculateInstanceStartEndPositions64xyLow(attribute) {
  11311. var paths = this.state.paths;
  11312. var value = attribute.value;
  11313. var i = 0;
  11314. paths.forEach(function (path) {
  11315. var numSegments = path.length - 1;
  11316. for (var ptIndex = 0; ptIndex < numSegments; ptIndex++) {
  11317. var startPoint = path[ptIndex];
  11318. var endPoint = path[ptIndex + 1];
  11319. value[i++] = fp64LowPart(startPoint[0]);
  11320. value[i++] = fp64LowPart(startPoint[1]);
  11321. value[i++] = fp64LowPart(endPoint[0]);
  11322. value[i++] = fp64LowPart(endPoint[1]);
  11323. }
  11324. });
  11325. }
  11326. }, {
  11327. key: 'calculateLeftDeltas',
  11328. value: function calculateLeftDeltas(attribute) {
  11329. var paths = this.state.paths;
  11330. var value = attribute.value;
  11331. var i = 0;
  11332. paths.forEach(function (path) {
  11333. var numSegments = path.length - 1;
  11334. var prevPoint = isClosed(path) ? path[path.length - 2] : path[0];
  11335. for (var ptIndex = 0; ptIndex < numSegments; ptIndex++) {
  11336. var point = path[ptIndex];
  11337. value[i++] = point[0] - prevPoint[0];
  11338. value[i++] = point[1] - prevPoint[1];
  11339. value[i++] = point[2] - prevPoint[2] || 0;
  11340. prevPoint = point;
  11341. }
  11342. });
  11343. }
  11344. }, {
  11345. key: 'calculateRightDeltas',
  11346. value: function calculateRightDeltas(attribute) {
  11347. var paths = this.state.paths;
  11348. var value = attribute.value;
  11349. var i = 0;
  11350. paths.forEach(function (path) {
  11351. for (var ptIndex = 1; ptIndex < path.length; ptIndex++) {
  11352. var point = path[ptIndex];
  11353. var nextPoint = path[ptIndex + 1];
  11354. if (!nextPoint) {
  11355. nextPoint = isClosed(path) ? path[1] : point;
  11356. }
  11357. value[i++] = nextPoint[0] - point[0];
  11358. value[i++] = nextPoint[1] - point[1];
  11359. value[i++] = nextPoint[2] - point[2] || 0;
  11360. }
  11361. });
  11362. }
  11363. }, {
  11364. key: 'calculateStrokeWidths',
  11365. value: function calculateStrokeWidths(attribute) {
  11366. var _props2 = this.props,
  11367. data = _props2.data,
  11368. getWidth = _props2.getWidth;
  11369. var paths = this.state.paths;
  11370. var value = attribute.value;
  11371. var i = 0;
  11372. paths.forEach(function (path, index) {
  11373. var width = getWidth(data[index], index);
  11374. for (var ptIndex = 1; ptIndex < path.length; ptIndex++) {
  11375. value[i++] = width;
  11376. }
  11377. });
  11378. }
  11379. }, {
  11380. key: 'calculateDashArrays',
  11381. value: function calculateDashArrays(attribute) {
  11382. var _props3 = this.props,
  11383. data = _props3.data,
  11384. getDashArray = _props3.getDashArray;
  11385. if (!getDashArray) {
  11386. return;
  11387. }
  11388. var paths = this.state.paths;
  11389. var value = attribute.value;
  11390. var i = 0;
  11391. paths.forEach(function (path, index) {
  11392. var dashArray = getDashArray(data[index], index);
  11393. for (var ptIndex = 1; ptIndex < path.length; ptIndex++) {
  11394. value[i++] = dashArray[0];
  11395. value[i++] = dashArray[1];
  11396. }
  11397. });
  11398. }
  11399. }, {
  11400. key: 'calculateColors',
  11401. value: function calculateColors(attribute) {
  11402. var _props4 = this.props,
  11403. data = _props4.data,
  11404. getColor = _props4.getColor;
  11405. var paths = this.state.paths;
  11406. var value = attribute.value;
  11407. var i = 0;
  11408. paths.forEach(function (path, index) {
  11409. var pointColor = getColor(data[index], index);
  11410. if (isNaN(pointColor[3])) {
  11411. pointColor[3] = 255;
  11412. }
  11413. for (var ptIndex = 1; ptIndex < path.length; ptIndex++) {
  11414. value[i++] = pointColor[0];
  11415. value[i++] = pointColor[1];
  11416. value[i++] = pointColor[2];
  11417. value[i++] = pointColor[3];
  11418. }
  11419. });
  11420. }
  11421. // Override the default picking colors calculation
  11422. }, {
  11423. key: 'calculatePickingColors',
  11424. value: function calculatePickingColors(attribute) {
  11425. var _this2 = this;
  11426. var paths = this.state.paths;
  11427. var value = attribute.value;
  11428. var i = 0;
  11429. paths.forEach(function (path, index) {
  11430. var pickingColor = _this2.encodePickingColor(index);
  11431. for (var ptIndex = 1; ptIndex < path.length; ptIndex++) {
  11432. value[i++] = pickingColor[0];
  11433. value[i++] = pickingColor[1];
  11434. value[i++] = pickingColor[2];
  11435. }
  11436. });
  11437. }
  11438. }]);
  11439. return PathLayer;
  11440. }(_core.Layer);
  11441. exports.default = PathLayer;
  11442. PathLayer.layerName = 'PathLayer';
  11443. PathLayer.defaultProps = defaultProps;
  11444. /***/ }),
  11445. /* 120 */
  11446. /***/ (function(module, exports, __webpack_require__) {
  11447. "use strict";
  11448. Object.defineProperty(exports, "__esModule", {
  11449. value: true
  11450. });
  11451. exports.isSimple = isSimple;
  11452. exports.normalize = normalize;
  11453. exports.getVertexCount = getVertexCount;
  11454. exports.getTriangleCount = getTriangleCount;
  11455. exports.forEachVertex = forEachVertex;
  11456. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  11457. //
  11458. // Permission is hereby granted, free of charge, to any person obtaining a copy
  11459. // of this software and associated documentation files (the "Software"), to deal
  11460. // in the Software without restriction, including without limitation the rights
  11461. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  11462. // copies of the Software, and to permit persons to whom the Software is
  11463. // furnished to do so, subject to the following conditions:
  11464. //
  11465. // The above copyright notice and this permission notice shall be included in
  11466. // all copies or substantial portions of the Software.
  11467. //
  11468. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  11469. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  11470. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  11471. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  11472. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  11473. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  11474. // THE SOFTWARE.
  11475. // Basic polygon support
  11476. //
  11477. // Handles simple and complex polygons
  11478. // Simple polygons are arrays of vertices, implicitly "closed"
  11479. // Complex polygons are arrays of simple polygons, with the first polygon
  11480. // representing the outer hull and other polygons representing holes
  11481. /**
  11482. * Check if this is a non-nested polygon (i.e. the first element of the first element is a number)
  11483. * @param {Array} polygon - either a complex or simple polygon
  11484. * @return {Boolean} - true if the polygon is a simple polygon (i.e. not an array of polygons)
  11485. */
  11486. function isSimple(polygon) {
  11487. return polygon.length >= 1 && polygon[0].length >= 2 && Number.isFinite(polygon[0][0]);
  11488. }
  11489. /**
  11490. * Normalize to ensure that all polygons in a list are complex - simplifies processing
  11491. * @param {Array} polygon - either a complex or a simple polygon
  11492. * @param {Object} opts
  11493. * @param {Object} opts.dimensions - if 3, the coords will be padded with 0's if needed
  11494. * @return {Array} - returns a complex polygons
  11495. */
  11496. function normalize(polygon) {
  11497. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  11498. _ref$dimensions = _ref.dimensions,
  11499. dimensions = _ref$dimensions === undefined ? 3 : _ref$dimensions;
  11500. return isSimple(polygon) ? [polygon] : polygon;
  11501. }
  11502. /**
  11503. * Check if this is a non-nested polygon (i.e. the first element of the first element is a number)
  11504. * @param {Array} polygon - either a complex or simple polygon
  11505. * @return {Boolean} - true if the polygon is a simple polygon (i.e. not an array of polygons)
  11506. */
  11507. function getVertexCount(polygon) {
  11508. return isSimple(polygon) ? polygon.length : polygon.reduce(function (length, simplePolygon) {
  11509. return length + simplePolygon.length;
  11510. }, 0);
  11511. }
  11512. // Return number of triangles needed to tesselate the polygon
  11513. function getTriangleCount(polygon) {
  11514. var triangleCount = 0;
  11515. var first = true;
  11516. var _iteratorNormalCompletion = true;
  11517. var _didIteratorError = false;
  11518. var _iteratorError = undefined;
  11519. try {
  11520. for (var _iterator = normalize(polygon)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  11521. var simplePolygon = _step.value;
  11522. var size = simplePolygon.length;
  11523. if (first) {
  11524. triangleCount += size >= 3 ? size - 2 : 0;
  11525. } else {
  11526. triangleCount += size + 1;
  11527. }
  11528. first = false;
  11529. }
  11530. } catch (err) {
  11531. _didIteratorError = true;
  11532. _iteratorError = err;
  11533. } finally {
  11534. try {
  11535. if (!_iteratorNormalCompletion && _iterator.return) {
  11536. _iterator.return();
  11537. }
  11538. } finally {
  11539. if (_didIteratorError) {
  11540. throw _iteratorError;
  11541. }
  11542. }
  11543. }
  11544. return triangleCount;
  11545. }
  11546. function forEachVertex(polygon, visitor) {
  11547. if (isSimple(polygon)) {
  11548. polygon.forEach(visitor);
  11549. return;
  11550. }
  11551. var vertexIndex = 0;
  11552. polygon.forEach(function (simplePolygon) {
  11553. simplePolygon.forEach(function (v, i, p) {
  11554. return visitor(v, vertexIndex, polygon);
  11555. });
  11556. vertexIndex++;
  11557. });
  11558. }
  11559. /***/ }),
  11560. /* 121 */
  11561. /***/ (function(module, exports, __webpack_require__) {
  11562. "use strict";
  11563. Object.defineProperty(exports, "__esModule", {
  11564. value: true
  11565. });
  11566. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  11567. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) 2015 Uber Technologies, Inc.
  11568. // Permission is hereby granted, free of charge, to any person obtaining a copy
  11569. // of this software and associated documentation files (the "Software"), to deal
  11570. // in the Software without restriction, including without limitation the rights
  11571. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  11572. // copies of the Software, and to permit persons to whom the Software is
  11573. // furnished to do so, subject to the following conditions:
  11574. // The above copyright notice and this permission notice shall be included in
  11575. // all copies or substantial portions of the Software.
  11576. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  11577. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  11578. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  11579. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  11580. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  11581. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  11582. // THE SOFTWARE.
  11583. var _mapState = __webpack_require__(82);
  11584. var _mapState2 = _interopRequireDefault(_mapState);
  11585. var _linearInterpolator = __webpack_require__(125);
  11586. var _linearInterpolator2 = _interopRequireDefault(_linearInterpolator);
  11587. var _transitionManager = __webpack_require__(186);
  11588. var _assert = __webpack_require__(1);
  11589. var _assert2 = _interopRequireDefault(_assert);
  11590. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  11591. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  11592. var NO_TRANSITION_PROPS = {
  11593. transitionDuration: 0
  11594. };
  11595. var LINEAR_TRANSITION_PROPS = {
  11596. transitionDuration: 300,
  11597. transitionEasing: function transitionEasing(t) {
  11598. return t;
  11599. },
  11600. transitionInterpolator: new _linearInterpolator2.default(),
  11601. transitionInterruption: _transitionManager.TRANSITION_EVENTS.BREAK
  11602. };
  11603. // EVENT HANDLING PARAMETERS
  11604. var PITCH_MOUSE_THRESHOLD = 5;
  11605. var PITCH_ACCEL = 1.2;
  11606. var ZOOM_ACCEL = 0.01;
  11607. var EVENT_TYPES = {
  11608. WHEEL: ['wheel'],
  11609. PAN: ['panstart', 'panmove', 'panend'],
  11610. PINCH: ['pinchstart', 'pinchmove', 'pinchend'],
  11611. DOUBLE_TAP: ['doubletap'],
  11612. KEYBOARD: ['keydown']
  11613. };
  11614. var ViewportControls = function () {
  11615. /**
  11616. * @classdesc
  11617. * A class that handles events and updates mercator style viewport parameters
  11618. */
  11619. function ViewportControls(ViewportState) {
  11620. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  11621. _classCallCheck(this, ViewportControls);
  11622. (0, _assert2.default)(ViewportState);
  11623. this.ViewportState = ViewportState;
  11624. this.viewportState = null;
  11625. this.viewportStateProps = null;
  11626. this.eventManager = null;
  11627. this._events = null;
  11628. this._state = {
  11629. isDragging: false
  11630. };
  11631. this.events = [];
  11632. this.handleEvent = this.handleEvent.bind(this);
  11633. this.setOptions(options);
  11634. if (this.constructor === ViewportControls) {
  11635. Object.seal(this);
  11636. }
  11637. }
  11638. /**
  11639. * Callback for events
  11640. * @param {hammer.Event} event
  11641. */
  11642. _createClass(ViewportControls, [{
  11643. key: 'handleEvent',
  11644. value: function handleEvent(event) {
  11645. var ViewportState = this.ViewportState;
  11646. this.viewportState = new ViewportState(Object.assign({}, this.viewportStateProps, this._state));
  11647. switch (event.type) {
  11648. case 'panstart':
  11649. return this._onPanStart(event);
  11650. case 'panmove':
  11651. return this._onPan(event);
  11652. case 'panend':
  11653. return this._onPanEnd(event);
  11654. case 'pinchstart':
  11655. return this._onPinchStart(event);
  11656. case 'pinchmove':
  11657. return this._onPinch(event);
  11658. case 'pinchend':
  11659. return this._onPinchEnd(event);
  11660. case 'doubletap':
  11661. return this._onDoubleTap(event);
  11662. case 'wheel':
  11663. return this._onWheel(event);
  11664. case 'keydown':
  11665. return this._onKeyDown(event);
  11666. default:
  11667. return false;
  11668. }
  11669. }
  11670. /* Event utils */
  11671. // Event object: http://hammerjs.github.io/api/#event-object
  11672. }, {
  11673. key: 'getCenter',
  11674. value: function getCenter(event) {
  11675. var _event$offsetCenter = event.offsetCenter,
  11676. x = _event$offsetCenter.x,
  11677. y = _event$offsetCenter.y;
  11678. return [x, y];
  11679. }
  11680. }, {
  11681. key: 'isFunctionKeyPressed',
  11682. value: function isFunctionKeyPressed(event) {
  11683. var srcEvent = event.srcEvent;
  11684. return Boolean(srcEvent.metaKey || srcEvent.altKey || srcEvent.ctrlKey || srcEvent.shiftKey);
  11685. }
  11686. }, {
  11687. key: 'isDragging',
  11688. value: function isDragging() {
  11689. return this._state.isDragging;
  11690. }
  11691. /**
  11692. * Extract interactivity options
  11693. */
  11694. }, {
  11695. key: 'setOptions',
  11696. value: function setOptions(options) {
  11697. var onViewportChange = options.onViewportChange,
  11698. _options$onStateChang = options.onStateChange,
  11699. onStateChange = _options$onStateChang === undefined ? this.onStateChange : _options$onStateChang,
  11700. _options$eventManager = options.eventManager,
  11701. eventManager = _options$eventManager === undefined ? this.eventManager : _options$eventManager,
  11702. _options$scrollZoom = options.scrollZoom,
  11703. scrollZoom = _options$scrollZoom === undefined ? true : _options$scrollZoom,
  11704. _options$dragPan = options.dragPan,
  11705. dragPan = _options$dragPan === undefined ? true : _options$dragPan,
  11706. _options$dragRotate = options.dragRotate,
  11707. dragRotate = _options$dragRotate === undefined ? true : _options$dragRotate,
  11708. _options$doubleClickZ = options.doubleClickZoom,
  11709. doubleClickZoom = _options$doubleClickZ === undefined ? true : _options$doubleClickZ,
  11710. _options$touchZoom = options.touchZoom,
  11711. touchZoom = _options$touchZoom === undefined ? true : _options$touchZoom,
  11712. _options$touchRotate = options.touchRotate,
  11713. touchRotate = _options$touchRotate === undefined ? false : _options$touchRotate,
  11714. _options$keyboard = options.keyboard,
  11715. keyboard = _options$keyboard === undefined ? true : _options$keyboard;
  11716. this.onViewportChange = onViewportChange;
  11717. this.onStateChange = onStateChange;
  11718. this.viewportStateProps = options;
  11719. if (this.eventManager !== eventManager) {
  11720. // EventManager has changed
  11721. this.eventManager = eventManager;
  11722. this._events = {};
  11723. this.toggleEvents(this.events, true);
  11724. }
  11725. // Register/unregister events
  11726. var isInteractive = Boolean(this.onViewportChange);
  11727. this.toggleEvents(EVENT_TYPES.WHEEL, isInteractive && scrollZoom);
  11728. this.toggleEvents(EVENT_TYPES.PAN, isInteractive && (dragPan || dragRotate));
  11729. this.toggleEvents(EVENT_TYPES.PINCH, isInteractive && (touchZoom || touchRotate));
  11730. this.toggleEvents(EVENT_TYPES.DOUBLE_TAP, isInteractive && doubleClickZoom);
  11731. this.toggleEvents(EVENT_TYPES.KEYBOARD, isInteractive && keyboard);
  11732. // Interaction toggles
  11733. this.scrollZoom = scrollZoom;
  11734. this.dragPan = dragPan;
  11735. this.dragRotate = dragRotate;
  11736. this.doubleClickZoom = doubleClickZoom;
  11737. this.touchZoom = touchZoom;
  11738. this.touchRotate = touchRotate;
  11739. this.keyboard = keyboard;
  11740. }
  11741. }, {
  11742. key: 'toggleEvents',
  11743. value: function toggleEvents(eventNames, enabled) {
  11744. var _this = this;
  11745. if (this.eventManager) {
  11746. eventNames.forEach(function (eventName) {
  11747. if (_this._events[eventName] !== enabled) {
  11748. _this._events[eventName] = enabled;
  11749. if (enabled) {
  11750. _this.eventManager.on(eventName, _this.handleEvent);
  11751. } else {
  11752. _this.eventManager.off(eventName, _this.handleEvent);
  11753. }
  11754. }
  11755. });
  11756. }
  11757. }
  11758. // Private Methods
  11759. }, {
  11760. key: 'setState',
  11761. value: function setState(newState) {
  11762. Object.assign(this._state, newState);
  11763. if (this.onStateChange) {
  11764. this.onStateChange(this._state);
  11765. }
  11766. }
  11767. /* Callback util */
  11768. // formats map state and invokes callback function
  11769. }, {
  11770. key: 'updateViewport',
  11771. value: function updateViewport(newViewportState) {
  11772. var extraProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  11773. var extraState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  11774. var oldViewport = this.viewportState.getViewportProps();
  11775. var newViewport = Object.assign({}, newViewportState.getViewportProps(), extraProps);
  11776. if (this.onViewportChange && Object.keys(newViewport).some(function (key) {
  11777. return oldViewport[key] !== newViewport[key];
  11778. })) {
  11779. // Viewport has changed
  11780. var viewport = this.viewportState.getViewport ? this.viewportState.getViewport() : null;
  11781. this.onViewportChange(newViewport, viewport);
  11782. }
  11783. this.setState(Object.assign({}, newViewportState.getInteractiveState(), extraState));
  11784. }
  11785. /* Event handlers */
  11786. // Default handler for the `panstart` event.
  11787. }, {
  11788. key: '_onPanStart',
  11789. value: function _onPanStart(event) {
  11790. var pos = this.getCenter(event);
  11791. var newViewportState = this.viewportState.panStart({ pos: pos }).rotateStart({ pos: pos });
  11792. return this.updateViewport(newViewportState, NO_TRANSITION_PROPS, { isDragging: true });
  11793. }
  11794. // Default handler for the `panmove` event.
  11795. }, {
  11796. key: '_onPan',
  11797. value: function _onPan(event) {
  11798. return this.isFunctionKeyPressed(event) || event.rightButton ? this._onPanRotate(event) : this._onPanMove(event);
  11799. }
  11800. // Default handler for the `panend` event.
  11801. }, {
  11802. key: '_onPanEnd',
  11803. value: function _onPanEnd(event) {
  11804. var newViewportState = this.viewportState.panEnd().rotateEnd();
  11805. return this.updateViewport(newViewportState, null, { isDragging: false });
  11806. }
  11807. // Default handler for panning to move.
  11808. // Called by `_onPan` when panning without function key pressed.
  11809. }, {
  11810. key: '_onPanMove',
  11811. value: function _onPanMove(event) {
  11812. if (!this.dragPan) {
  11813. return false;
  11814. }
  11815. var pos = this.getCenter(event);
  11816. var newViewportState = this.viewportState.pan({ pos: pos });
  11817. return this.updateViewport(newViewportState, NO_TRANSITION_PROPS, { isDragging: true });
  11818. }
  11819. // Default handler for panning to rotate.
  11820. // Called by `_onPan` when panning with function key pressed.
  11821. }, {
  11822. key: '_onPanRotate',
  11823. value: function _onPanRotate(event) {
  11824. if (!this.dragRotate) {
  11825. return false;
  11826. }
  11827. return this.viewportState instanceof _mapState2.default ? this._onPanRotateMap(event) : this._onPanRotateStandard(event);
  11828. }
  11829. // Normal pan to rotate
  11830. }, {
  11831. key: '_onPanRotateStandard',
  11832. value: function _onPanRotateStandard(event) {
  11833. var deltaX = event.deltaX,
  11834. deltaY = event.deltaY;
  11835. var _viewportState$getVie = this.viewportState.getViewportProps(),
  11836. width = _viewportState$getVie.width,
  11837. height = _viewportState$getVie.height;
  11838. var deltaScaleX = deltaX / width;
  11839. var deltaScaleY = deltaY / height;
  11840. var newViewportState = this.viewportState.rotate({ deltaScaleX: deltaScaleX, deltaScaleY: deltaScaleY });
  11841. return this.updateViewport(newViewportState, NO_TRANSITION_PROPS, { isDragging: true });
  11842. }
  11843. }, {
  11844. key: '_onPanRotateMap',
  11845. value: function _onPanRotateMap(event) {
  11846. var deltaX = event.deltaX,
  11847. deltaY = event.deltaY;
  11848. var _getCenter = this.getCenter(event),
  11849. _getCenter2 = _slicedToArray(_getCenter, 2),
  11850. centerY = _getCenter2[1];
  11851. var startY = centerY - deltaY;
  11852. var _viewportState$getVie2 = this.viewportState.getViewportProps(),
  11853. width = _viewportState$getVie2.width,
  11854. height = _viewportState$getVie2.height;
  11855. var deltaScaleX = deltaX / width;
  11856. var deltaScaleY = 0;
  11857. if (deltaY > 0) {
  11858. if (Math.abs(height - startY) > PITCH_MOUSE_THRESHOLD) {
  11859. // Move from 0 to -1 as we drag upwards
  11860. deltaScaleY = deltaY / (startY - height) * PITCH_ACCEL;
  11861. }
  11862. } else if (deltaY < 0) {
  11863. if (startY > PITCH_MOUSE_THRESHOLD) {
  11864. // Move from 0 to 1 as we drag upwards
  11865. deltaScaleY = 1 - centerY / startY;
  11866. }
  11867. }
  11868. deltaScaleY = Math.min(1, Math.max(-1, deltaScaleY));
  11869. var newViewportState = this.viewportState.rotate({ deltaScaleX: deltaScaleX, deltaScaleY: deltaScaleY });
  11870. return this.updateViewport(newViewportState, NO_TRANSITION_PROPS, { isDragging: true });
  11871. }
  11872. // Default handler for the `wheel` event.
  11873. }, {
  11874. key: '_onWheel',
  11875. value: function _onWheel(event) {
  11876. if (!this.scrollZoom) {
  11877. return false;
  11878. }
  11879. var pos = this.getCenter(event);
  11880. var delta = event.delta;
  11881. // Map wheel delta to relative scale
  11882. var scale = 2 / (1 + Math.exp(-Math.abs(delta * ZOOM_ACCEL)));
  11883. if (delta < 0 && scale !== 0) {
  11884. scale = 1 / scale;
  11885. }
  11886. var newViewportState = this.viewportState.zoom({ pos: pos, scale: scale });
  11887. return this.updateViewport(newViewportState, NO_TRANSITION_PROPS);
  11888. }
  11889. // Default handler for the `pinchstart` event.
  11890. }, {
  11891. key: '_onPinchStart',
  11892. value: function _onPinchStart(event) {
  11893. var pos = this.getCenter(event);
  11894. var newViewportState = this.viewportState.zoomStart({ pos: pos }).rotateStart({ pos: pos });
  11895. // hack - hammer's `rotation` field doesn't seem to produce the correct angle
  11896. this._state.startPinchRotation = event.rotation;
  11897. return this.updateViewport(newViewportState, NO_TRANSITION_PROPS, { isDragging: true });
  11898. }
  11899. // Default handler for the `pinch` event.
  11900. }, {
  11901. key: '_onPinch',
  11902. value: function _onPinch(event) {
  11903. if (!this.touchZoom && !this.touchRotate) {
  11904. return false;
  11905. }
  11906. var newViewportState = this.viewportState;
  11907. if (this.touchZoom) {
  11908. var scale = event.scale;
  11909. var pos = this.getCenter(event);
  11910. newViewportState = newViewportState.zoom({ pos: pos, scale: scale });
  11911. }
  11912. if (this.touchRotate) {
  11913. var rotation = event.rotation;
  11914. var startPinchRotation = this._state.startPinchRotation;
  11915. newViewportState = newViewportState.rotate({
  11916. deltaScaleX: -(rotation - startPinchRotation) / 180
  11917. });
  11918. }
  11919. return this.updateViewport(newViewportState, NO_TRANSITION_PROPS, { isDragging: true });
  11920. }
  11921. // Default handler for the `pinchend` event.
  11922. }, {
  11923. key: '_onPinchEnd',
  11924. value: function _onPinchEnd(event) {
  11925. var newViewportState = this.viewportState.zoomEnd().rotateEnd();
  11926. this._state.startPinchRotation = 0;
  11927. return this.updateViewport(newViewportState, null, { isDragging: false });
  11928. }
  11929. // Default handler for the `doubletap` event.
  11930. }, {
  11931. key: '_onDoubleTap',
  11932. value: function _onDoubleTap(event) {
  11933. if (!this.doubleClickZoom) {
  11934. return false;
  11935. }
  11936. var pos = this.getCenter(event);
  11937. var isZoomOut = this.isFunctionKeyPressed(event);
  11938. var newViewportState = this.viewportState.zoom({ pos: pos, scale: isZoomOut ? 0.5 : 2 });
  11939. return this.updateViewport(newViewportState, LINEAR_TRANSITION_PROPS);
  11940. }
  11941. /* eslint-disable complexity */
  11942. // Default handler for the `keydown` event
  11943. }, {
  11944. key: '_onKeyDown',
  11945. value: function _onKeyDown(event) {
  11946. if (!this.keyboard) {
  11947. return false;
  11948. }
  11949. var funcKey = this.isFunctionKeyPressed(event);
  11950. var viewportState = this.viewportState;
  11951. var newViewportState = void 0;
  11952. switch (event.srcEvent.keyCode) {
  11953. case 189:
  11954. // -
  11955. newViewportState = funcKey ? viewportState.zoomOut().zoomOut() : viewportState.zoomOut();
  11956. break;
  11957. case 187:
  11958. // +
  11959. newViewportState = funcKey ? viewportState.zoomIn().zoomIn() : viewportState.zoomIn();
  11960. break;
  11961. case 37:
  11962. // left
  11963. newViewportState = funcKey ? viewportState.rotateLeft() : viewportState.moveLeft();
  11964. break;
  11965. case 39:
  11966. // right
  11967. newViewportState = funcKey ? viewportState.rotateRight() : viewportState.moveRight();
  11968. break;
  11969. case 38:
  11970. // up
  11971. newViewportState = funcKey ? viewportState.rotateUp() : viewportState.moveUp();
  11972. break;
  11973. case 40:
  11974. // down
  11975. newViewportState = funcKey ? viewportState.rotateDown() : viewportState.moveDown();
  11976. break;
  11977. default:
  11978. return false;
  11979. }
  11980. return this.updateViewport(newViewportState, LINEAR_TRANSITION_PROPS);
  11981. }
  11982. /* eslint-enable complexity */
  11983. }]);
  11984. return ViewportControls;
  11985. }();
  11986. exports.default = ViewportControls;
  11987. /***/ }),
  11988. /* 122 */
  11989. /***/ (function(module, exports, __webpack_require__) {
  11990. "use strict";
  11991. Object.defineProperty(exports, "__esModule", {
  11992. value: true
  11993. });
  11994. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  11995. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  11996. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  11997. //
  11998. // Permission is hereby granted, free of charge, to any person obtaining a copy
  11999. // of this software and associated documentation files (the "Software"), to deal
  12000. // in the Software without restriction, including without limitation the rights
  12001. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  12002. // copies of the Software, and to permit persons to whom the Software is
  12003. // furnished to do so, subject to the following conditions:
  12004. //
  12005. // The above copyright notice and this permission notice shall be included in
  12006. // all copies or substantial portions of the Software.
  12007. //
  12008. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  12009. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  12010. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  12011. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  12012. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  12013. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  12014. // THE SOFTWARE.
  12015. var counter = 0;
  12016. var Effect = function () {
  12017. function Effect() {
  12018. _classCallCheck(this, Effect);
  12019. this.id = 'effect';
  12020. this.count = counter++;
  12021. this.visible = true;
  12022. this.priority = 0;
  12023. this.needsRedraw = false;
  12024. }
  12025. /**
  12026. * subclasses should override to set up any resources needed
  12027. */
  12028. _createClass(Effect, [{
  12029. key: 'initialize',
  12030. value: function initialize(_ref) {
  12031. var gl = _ref.gl,
  12032. layerManager = _ref.layerManager;
  12033. }
  12034. /**
  12035. * and subclasses should free those resources here
  12036. */
  12037. }, {
  12038. key: 'finalize',
  12039. value: function finalize(_ref2) {
  12040. var gl = _ref2.gl,
  12041. layerManager = _ref2.layerManager;
  12042. }
  12043. /**
  12044. * override for a callback immediately before drawing each frame
  12045. */
  12046. }, {
  12047. key: 'preDraw',
  12048. value: function preDraw(_ref3) {
  12049. var gl = _ref3.gl,
  12050. layerManager = _ref3.layerManager;
  12051. }
  12052. /**
  12053. * override for a callback immediately after drawing a frame's layers
  12054. */
  12055. }, {
  12056. key: 'draw',
  12057. value: function draw(_ref4) {
  12058. var gl = _ref4.gl,
  12059. layerManager = _ref4.layerManager;
  12060. }
  12061. }, {
  12062. key: 'setNeedsRedraw',
  12063. value: function setNeedsRedraw() {
  12064. var redraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  12065. this.needsRedraw = redraw;
  12066. }
  12067. }]);
  12068. return Effect;
  12069. }();
  12070. exports.default = Effect;
  12071. /***/ }),
  12072. /* 123 */
  12073. /***/ (function(module, exports, __webpack_require__) {
  12074. "use strict";
  12075. Object.defineProperty(exports, "__esModule", {
  12076. value: true
  12077. });
  12078. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  12079. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  12080. //
  12081. // Permission is hereby granted, free of charge, to any person obtaining a copy
  12082. // of this software and associated documentation files (the "Software"), to deal
  12083. // in the Software without restriction, including without limitation the rights
  12084. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  12085. // copies of the Software, and to permit persons to whom the Software is
  12086. // furnished to do so, subject to the following conditions:
  12087. //
  12088. // The above copyright notice and this permission notice shall be included in
  12089. // all copies or substantial portions of the Software.
  12090. //
  12091. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  12092. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  12093. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  12094. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  12095. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  12096. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  12097. // THE SOFTWARE.
  12098. /* global window */
  12099. var _constants = __webpack_require__(70);
  12100. var _attributeManager = __webpack_require__(182);
  12101. var _attributeManager2 = _interopRequireDefault(_attributeManager);
  12102. var _stats = __webpack_require__(185);
  12103. var _stats2 = _interopRequireDefault(_stats);
  12104. var _count = __webpack_require__(194);
  12105. var _log = __webpack_require__(17);
  12106. var _log2 = _interopRequireDefault(_log);
  12107. var _createProps = __webpack_require__(340);
  12108. var _props2 = __webpack_require__(187);
  12109. var _seerIntegration = __webpack_require__(124);
  12110. var _luma = __webpack_require__(12);
  12111. var _assert = __webpack_require__(1);
  12112. var _assert2 = _interopRequireDefault(_assert);
  12113. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  12114. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  12115. var LOG_PRIORITY_UPDATE = 1;
  12116. var EMPTY_PROPS = Object.freeze({});
  12117. var noop = function noop() {};
  12118. var defaultProps = {
  12119. // data: Special handling for null, see below
  12120. dataComparator: null,
  12121. updateTriggers: {}, // Update triggers: a core change detection mechanism in deck.gl
  12122. numInstances: undefined,
  12123. visible: true,
  12124. pickable: false,
  12125. opacity: 0.8,
  12126. onHover: noop,
  12127. onClick: noop,
  12128. coordinateSystem: _constants.COORDINATE_SYSTEM.LNGLAT,
  12129. coordinateOrigin: [0, 0, 0],
  12130. parameters: {},
  12131. uniforms: {},
  12132. framebuffer: null,
  12133. animation: null, // Passed prop animation functions to evaluate props
  12134. // Offset depth based on layer index to avoid z-fighting.
  12135. // Negative values pull layer towards the camera
  12136. // https://www.opengl.org/archives/resources/faq/technical/polygonoffset.htm
  12137. getPolygonOffset: function getPolygonOffset(_ref) {
  12138. var layerIndex = _ref.layerIndex;
  12139. return [0, -layerIndex * 100];
  12140. },
  12141. // Selection/Highlighting
  12142. highlightedObjectIndex: null,
  12143. autoHighlight: false,
  12144. highlightColor: [0, 0, 128, 128]
  12145. };
  12146. var counter = 0;
  12147. var Layer = function () {
  12148. // constructor(...propObjects)
  12149. function Layer() {
  12150. _classCallCheck(this, Layer);
  12151. // Merges incoming props with defaults and freezes them.
  12152. // TODO switch to spread operator once we no longer transpile this code
  12153. // this.props = createProps.apply(propObjects);
  12154. /* eslint-disable prefer-spread */
  12155. this.props = _createProps.createProps.apply(this, arguments);
  12156. /* eslint-enable prefer-spread */
  12157. // Define all members before layer is sealed
  12158. this.id = this.props.id; // The layer's id, used for matching with layers from last render cycle
  12159. this.oldProps = EMPTY_PROPS; // Props from last render used for change detection
  12160. this.count = counter++; // Keep track of how many layer instances you are generating
  12161. this.lifecycle = _constants.LIFECYCLE.NO_STATE; // Helps track and debug the life cycle of the layers
  12162. this.state = null; // Will be set to the shared layer state object during layer matching
  12163. this.context = null; // Will reference layer manager's context, contains state shared by layers
  12164. this.parentLayer = null; // reference to the composite layer parent that rendered this layer
  12165. // CompositeLayer members, need to be defined here because of the `Object.seal`
  12166. this.internalState = null;
  12167. // Seal the layer
  12168. Object.seal(this);
  12169. }
  12170. // clone this layer with modified props
  12171. _createClass(Layer, [{
  12172. key: 'clone',
  12173. value: function clone(newProps) {
  12174. return new this.constructor(Object.assign({}, this.props, newProps));
  12175. }
  12176. }, {
  12177. key: 'toString',
  12178. value: function toString() {
  12179. var className = this.constructor.layerName || this.constructor.name;
  12180. return className + '({id: \'' + this.props.id + '\'})';
  12181. }
  12182. }, {
  12183. key: 'setState',
  12184. // Public API
  12185. // Updates selected state members and marks the object for redraw
  12186. value: function setState(updateObject) {
  12187. Object.assign(this.state, updateObject);
  12188. this.state.needsRedraw = true;
  12189. }
  12190. // Sets the redraw flag for this layer, will trigger a redraw next animation frame
  12191. }, {
  12192. key: 'setNeedsRedraw',
  12193. value: function setNeedsRedraw() {
  12194. var redraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  12195. if (this.state) {
  12196. this.state.needsRedraw = redraw;
  12197. }
  12198. }
  12199. // Checks state of attributes and model
  12200. }, {
  12201. key: 'getNeedsRedraw',
  12202. value: function getNeedsRedraw() {
  12203. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  12204. _ref2$clearRedrawFlag = _ref2.clearRedrawFlags,
  12205. clearRedrawFlags = _ref2$clearRedrawFlag === undefined ? false : _ref2$clearRedrawFlag;
  12206. return this._getNeedsRedraw(clearRedrawFlags);
  12207. }
  12208. // Return an array of models used by this layer, can be overriden by layer subclass
  12209. }, {
  12210. key: 'getModels',
  12211. value: function getModels() {
  12212. return this.state.models || (this.state.model ? [this.state.model] : []);
  12213. }
  12214. }, {
  12215. key: 'needsUpdate',
  12216. value: function needsUpdate() {
  12217. // Call subclass lifecycle method
  12218. return this.shouldUpdateState(this._getUpdateParams());
  12219. // End lifecycle method
  12220. }
  12221. // Returns true if the layer is pickable and visible.
  12222. }, {
  12223. key: 'isPickable',
  12224. value: function isPickable() {
  12225. return this.props.pickable && this.props.visible;
  12226. }
  12227. }, {
  12228. key: 'getAttributeManager',
  12229. value: function getAttributeManager() {
  12230. return this.state && this.state.attributeManager;
  12231. }
  12232. // Use iteration (the only required capability on data) to get first element
  12233. // deprecated
  12234. }, {
  12235. key: 'getFirstObject',
  12236. value: function getFirstObject() {
  12237. var data = this.props.data;
  12238. var _iteratorNormalCompletion = true;
  12239. var _didIteratorError = false;
  12240. var _iteratorError = undefined;
  12241. try {
  12242. for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  12243. var object = _step.value;
  12244. return object;
  12245. }
  12246. } catch (err) {
  12247. _didIteratorError = true;
  12248. _iteratorError = err;
  12249. } finally {
  12250. try {
  12251. if (!_iteratorNormalCompletion && _iterator.return) {
  12252. _iterator.return();
  12253. }
  12254. } finally {
  12255. if (_didIteratorError) {
  12256. throw _iteratorError;
  12257. }
  12258. }
  12259. }
  12260. return null;
  12261. }
  12262. // PROJECTION METHODS
  12263. /**
  12264. * Projects a point with current map state (lat, lon, zoom, pitch, bearing)
  12265. *
  12266. * Note: Position conversion is done in shader, so in many cases there is no need
  12267. * for this function
  12268. * @param {Array|TypedArray} lngLat - long and lat values
  12269. * @return {Array|TypedArray} - x, y coordinates
  12270. */
  12271. }, {
  12272. key: 'project',
  12273. value: function project(lngLat) {
  12274. debugger
  12275. var viewport = this.context.viewport;
  12276. (0, _assert2.default)(Array.isArray(lngLat), 'Layer.project needs [lng,lat]');
  12277. return viewport.project(lngLat);
  12278. }
  12279. }, {
  12280. key: 'unproject',
  12281. value: function unproject(xy) {
  12282. debugger
  12283. var viewport = this.context.viewport;
  12284. (0, _assert2.default)(Array.isArray(xy), 'Layer.unproject needs [x,y]');
  12285. return viewport.unproject(xy);
  12286. }
  12287. }, {
  12288. key: 'projectFlat',
  12289. value: function projectFlat(lngLat) {
  12290. var viewport = this.context.viewport;
  12291. debugger
  12292. (0, _assert2.default)(Array.isArray(lngLat), 'Layer.project needs [lng,lat]');
  12293. return viewport.projectFlat(lngLat);
  12294. }
  12295. }, {
  12296. key: 'unprojectFlat',
  12297. value: function unprojectFlat(xy) {
  12298. var viewport = this.context.viewport;
  12299. debugger
  12300. (0, _assert2.default)(Array.isArray(xy), 'Layer.unproject needs [x,y]');
  12301. return viewport.unprojectFlat(xy);
  12302. }
  12303. // TODO - needs to refer to context
  12304. }, {
  12305. key: 'screenToDevicePixels',
  12306. value: function screenToDevicePixels(screenPixels) {
  12307. _log2.default.deprecated('screenToDevicePixels', 'DeckGL prop useDevicePixels for conversion');
  12308. var devicePixelRatio = typeof window !== 'undefined' ? window.devicePixelRatio : 1;
  12309. return screenPixels * devicePixelRatio;
  12310. }
  12311. /**
  12312. * Returns the picking color that doesn't match any subfeature
  12313. * Use if some graphics do not belong to any pickable subfeature
  12314. * @return {Array} - a black color
  12315. */
  12316. }, {
  12317. key: 'nullPickingColor',
  12318. value: function nullPickingColor() {
  12319. return [0, 0, 0];
  12320. }
  12321. /**
  12322. * Returns the picking color that doesn't match any subfeature
  12323. * Use if some graphics do not belong to any pickable subfeature
  12324. * @param {int} i - index to be decoded
  12325. * @return {Array} - the decoded color
  12326. */
  12327. }, {
  12328. key: 'encodePickingColor',
  12329. value: function encodePickingColor(i) {
  12330. (0, _assert2.default)((i + 1 >> 24 & 255) === 0, 'index out of picking color range');
  12331. return [i + 1 & 255, i + 1 >> 8 & 255, i + 1 >> 8 >> 8 & 255];
  12332. }
  12333. /**
  12334. * Returns the picking color that doesn't match any subfeature
  12335. * Use if some graphics do not belong to any pickable subfeature
  12336. * @param {Uint8Array} color - color array to be decoded
  12337. * @return {Array} - the decoded picking color
  12338. */
  12339. }, {
  12340. key: 'decodePickingColor',
  12341. value: function decodePickingColor(color) {
  12342. (0, _assert2.default)(color instanceof Uint8Array);
  12343. var _color = _slicedToArray(color, 3),
  12344. i1 = _color[0],
  12345. i2 = _color[1],
  12346. i3 = _color[2];
  12347. // 1 was added to seperate from no selection
  12348. var index = i1 + i2 * 256 + i3 * 65536 - 1;
  12349. return index;
  12350. }
  12351. // //////////////////////////////////////////////////
  12352. // LIFECYCLE METHODS, overridden by the layer subclasses
  12353. // Called once to set up the initial state
  12354. // App can create WebGL resources
  12355. }, {
  12356. key: 'initializeState',
  12357. value: function initializeState() {
  12358. throw new Error('Layer ' + this + ' has not defined initializeState');
  12359. }
  12360. // Let's layer control if updateState should be called
  12361. }, {
  12362. key: 'shouldUpdateState',
  12363. value: function shouldUpdateState(_ref3) {
  12364. var oldProps = _ref3.oldProps,
  12365. props = _ref3.props,
  12366. oldContext = _ref3.oldContext,
  12367. context = _ref3.context,
  12368. changeFlags = _ref3.changeFlags;
  12369. return changeFlags.propsOrDataChanged;
  12370. }
  12371. // Default implementation, all attributes will be invalidated and updated
  12372. // when data changes
  12373. }, {
  12374. key: 'updateState',
  12375. value: function updateState(_ref4) {
  12376. var oldProps = _ref4.oldProps,
  12377. props = _ref4.props,
  12378. oldContext = _ref4.oldContext,
  12379. context = _ref4.context,
  12380. changeFlags = _ref4.changeFlags;
  12381. var attributeManager = this.getAttributeManager();
  12382. if (changeFlags.dataChanged && attributeManager) {
  12383. attributeManager.invalidateAll();
  12384. }
  12385. }
  12386. // Called once when layer is no longer matched and state will be discarded
  12387. // App can destroy WebGL resources here
  12388. }, {
  12389. key: 'finalizeState',
  12390. value: function finalizeState() {}
  12391. // Update attribute transition
  12392. }, {
  12393. key: 'updateTransition',
  12394. value: function updateTransition() {
  12395. var _state = this.state,
  12396. model = _state.model,
  12397. attributeManager = _state.attributeManager;
  12398. var isInTransition = attributeManager && attributeManager.updateTransition();
  12399. if (model && isInTransition) {
  12400. model.setAttributes(attributeManager.getChangedAttributes({ transition: true }));
  12401. }
  12402. }
  12403. // If state has a model, draw it with supplied uniforms
  12404. }, {
  12405. key: 'draw',
  12406. value: function draw(opts) {
  12407. var _iteratorNormalCompletion2 = true;
  12408. var _didIteratorError2 = false;
  12409. var _iteratorError2 = undefined;
  12410. try {
  12411. for (var _iterator2 = this.getModels()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  12412. var model = _step2.value;
  12413. model.draw(opts);
  12414. }
  12415. } catch (err) {
  12416. _didIteratorError2 = true;
  12417. _iteratorError2 = err;
  12418. } finally {
  12419. try {
  12420. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  12421. _iterator2.return();
  12422. }
  12423. } finally {
  12424. if (_didIteratorError2) {
  12425. throw _iteratorError2;
  12426. }
  12427. }
  12428. }
  12429. }
  12430. // called to populate the info object that is passed to the event handler
  12431. // @return null to cancel event
  12432. }, {
  12433. key: 'getPickingInfo',
  12434. value: function getPickingInfo(_ref5) {
  12435. var info = _ref5.info,
  12436. mode = _ref5.mode;
  12437. var index = info.index;
  12438. if (index >= 0) {
  12439. // If props.data is an indexable array, get the object
  12440. if (Array.isArray(this.props.data)) {
  12441. info.object = this.props.data[index];
  12442. }
  12443. }
  12444. return info;
  12445. }
  12446. // END LIFECYCLE METHODS
  12447. // //////////////////////////////////////////////////
  12448. // Default implementation of attribute invalidation, can be redefined
  12449. }, {
  12450. key: 'invalidateAttribute',
  12451. value: function invalidateAttribute() {
  12452. var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all';
  12453. var diffReason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
  12454. var attributeManager = this.getAttributeManager();
  12455. if (!attributeManager) {
  12456. return;
  12457. }
  12458. if (name === 'all') {
  12459. _log2.default.log(LOG_PRIORITY_UPDATE, 'updateTriggers invalidating all attributes: ' + diffReason);
  12460. attributeManager.invalidateAll();
  12461. } else {
  12462. _log2.default.log(LOG_PRIORITY_UPDATE, 'updateTriggers invalidating attribute ' + name + ': ' + diffReason);
  12463. attributeManager.invalidate(name);
  12464. }
  12465. }
  12466. // Calls attribute manager to update any WebGL attributes, can be redefined
  12467. }, {
  12468. key: 'updateAttributes',
  12469. value: function updateAttributes(props) {
  12470. var attributeManager = this.getAttributeManager();
  12471. if (!attributeManager) {
  12472. return;
  12473. }
  12474. // Figure out data length
  12475. var numInstances = this.getNumInstances(props);
  12476. attributeManager.update({
  12477. data: props.data,
  12478. numInstances: numInstances,
  12479. props: props,
  12480. transitions: props.transitions,
  12481. buffers: props,
  12482. context: this,
  12483. // Don't worry about non-attribute props
  12484. ignoreUnknownAttributes: true
  12485. });
  12486. // TODO - Use getModels?
  12487. var model = this.state.model;
  12488. if (model) {
  12489. var changedAttributes = attributeManager.getChangedAttributes({ clearChangedFlags: true });
  12490. model.setAttributes(changedAttributes);
  12491. }
  12492. }
  12493. }, {
  12494. key: 'calculateInstancePickingColors',
  12495. value: function calculateInstancePickingColors(attribute, _ref6) {
  12496. var numInstances = _ref6.numInstances;
  12497. var value = attribute.value,
  12498. size = attribute.size;
  12499. // add 1 to index to seperate from no selection
  12500. for (var i = 0; i < numInstances; i++) {
  12501. var pickingColor = this.encodePickingColor(i);
  12502. value[i * size + 0] = pickingColor[0];
  12503. value[i * size + 1] = pickingColor[1];
  12504. value[i * size + 2] = pickingColor[2];
  12505. }
  12506. }
  12507. // INTERNAL METHODS
  12508. // Deduces numer of instances. Intention is to support:
  12509. // - Explicit setting of numInstances
  12510. // - Auto-deduction for ES6 containers that define a size member
  12511. // - Auto-deduction for Classic Arrays via the built-in length attribute
  12512. // - Auto-deduction via arrays
  12513. }, {
  12514. key: 'getNumInstances',
  12515. value: function getNumInstances(props) {
  12516. props = props || this.props;
  12517. // First check if the layer has set its own value
  12518. if (this.state && this.state.numInstances !== undefined) {
  12519. return this.state.numInstances;
  12520. }
  12521. // Check if app has provided an explicit value
  12522. if (props.numInstances !== undefined) {
  12523. return props.numInstances;
  12524. }
  12525. // Use container library to get a count for any ES6 container or object
  12526. var _props = props,
  12527. data = _props.data;
  12528. return (0, _count.count)(data);
  12529. }
  12530. // LAYER MANAGER API
  12531. // Should only be called by the deck.gl LayerManager class
  12532. // Called by layer manager when a new layer is found
  12533. /* eslint-disable max-statements */
  12534. }, {
  12535. key: '_initialize',
  12536. value: function _initialize() {
  12537. (0, _assert2.default)(arguments.length === 0);
  12538. (0, _assert2.default)(this.context.gl);
  12539. (0, _assert2.default)(!this.state);
  12540. var attributeManager = new _attributeManager2.default(this.context.gl, {
  12541. id: this.props.id
  12542. });
  12543. // All instanced layers get instancePickingColors attribute by default
  12544. // Their shaders can use it to render a picking scene
  12545. // TODO - this slightly slows down non instanced layers
  12546. attributeManager.addInstanced({
  12547. instancePickingColors: {
  12548. type: _luma.GL.UNSIGNED_BYTE,
  12549. size: 3,
  12550. update: this.calculateInstancePickingColors
  12551. }
  12552. });
  12553. this.internalState = {
  12554. subLayers: null, // reference to sublayers rendered in a previous cycle
  12555. stats: new _stats2.default({ id: 'draw' })
  12556. // animatedProps: null, // Computing animated props requires layer manager state
  12557. // TODO - move these fields here (risks breaking layers)
  12558. // attributeManager,
  12559. // needsRedraw: true,
  12560. };
  12561. this.state = {
  12562. attributeManager: attributeManager,
  12563. model: null,
  12564. needsRedraw: true
  12565. };
  12566. // Call subclass lifecycle methods
  12567. this.initializeState(this.context);
  12568. // End subclass lifecycle methods
  12569. // initializeState callback tends to clear state
  12570. this.setChangeFlags({ dataChanged: true, propsChanged: true, viewportChanged: true });
  12571. this._updateState(this._getUpdateParams());
  12572. if (this.isComposite) {
  12573. this._renderLayers(true);
  12574. }
  12575. var model = this.state.model;
  12576. if (model) {
  12577. model.id = this.props.id;
  12578. model.program.id = this.props.id + '-program';
  12579. model.geometry.id = this.props.id + '-geometry';
  12580. model.setAttributes(attributeManager.getAttributes());
  12581. }
  12582. // Last but not least, update any sublayers
  12583. if (this.isComposite) {
  12584. this._renderLayers();
  12585. }
  12586. this.clearChangeFlags();
  12587. }
  12588. // Called by layer manager
  12589. // if this layer is new (not matched with an existing layer) oldProps will be empty object
  12590. }, {
  12591. key: '_update',
  12592. value: function _update() {
  12593. (0, _assert2.default)(arguments.length === 0);
  12594. // Call subclass lifecycle method
  12595. var stateNeedsUpdate = this.needsUpdate();
  12596. // End lifecycle method
  12597. var updateParams = this._getUpdateParams();
  12598. if (stateNeedsUpdate) {
  12599. this._updateState(updateParams);
  12600. }
  12601. // Render or update previously rendered sublayers
  12602. if (this.isComposite) {
  12603. this._renderLayers(stateNeedsUpdate);
  12604. }
  12605. this.clearChangeFlags();
  12606. // Release old props for GC once update is complete
  12607. this.oldProps = EMPTY_PROPS;
  12608. }
  12609. /* eslint-enable max-statements */
  12610. }, {
  12611. key: '_updateState',
  12612. value: function _updateState(updateParams) {
  12613. // Call subclass lifecycle methods
  12614. this.updateState(updateParams);
  12615. // End subclass lifecycle methods
  12616. // Add any subclass attributes
  12617. this.updateAttributes(this.props);
  12618. this._updateBaseUniforms();
  12619. this._updateModuleSettings();
  12620. // Note: Automatic instance count update only works for single layers
  12621. if (this.state.model) {
  12622. this.state.model.setInstanceCount(this.getNumInstances());
  12623. }
  12624. }
  12625. // Called by manager when layer is about to be disposed
  12626. // Note: not guaranteed to be called on application shutdown
  12627. }, {
  12628. key: '_finalize',
  12629. value: function _finalize() {
  12630. (0, _assert2.default)(arguments.length === 0);
  12631. // Call subclass lifecycle method
  12632. this.finalizeState(this.context);
  12633. // End lifecycle method
  12634. (0, _seerIntegration.removeLayerInSeer)(this.id);
  12635. }
  12636. // Calculates uniforms
  12637. }, {
  12638. key: 'drawLayer',
  12639. value: function drawLayer(_ref7) {
  12640. var _this = this;
  12641. var _ref7$moduleParameter = _ref7.moduleParameters,
  12642. moduleParameters = _ref7$moduleParameter === undefined ? null : _ref7$moduleParameter,
  12643. _ref7$uniforms = _ref7.uniforms,
  12644. uniforms = _ref7$uniforms === undefined ? {} : _ref7$uniforms,
  12645. _ref7$parameters = _ref7.parameters,
  12646. parameters = _ref7$parameters === undefined ? {} : _ref7$parameters;
  12647. if (!uniforms.picking_uActive) {
  12648. this.updateTransition();
  12649. }
  12650. // TODO/ib - hack move to luma Model.draw
  12651. if (moduleParameters) {
  12652. var _iteratorNormalCompletion3 = true;
  12653. var _didIteratorError3 = false;
  12654. var _iteratorError3 = undefined;
  12655. try {
  12656. for (var _iterator3 = this.getModels()[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  12657. var model = _step3.value;
  12658. model.updateModuleSettings(moduleParameters);
  12659. }
  12660. } catch (err) {
  12661. _didIteratorError3 = true;
  12662. _iteratorError3 = err;
  12663. } finally {
  12664. try {
  12665. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  12666. _iterator3.return();
  12667. }
  12668. } finally {
  12669. if (_didIteratorError3) {
  12670. throw _iteratorError3;
  12671. }
  12672. }
  12673. }
  12674. }
  12675. // Apply polygon offset to avoid z-fighting
  12676. // TODO - move to draw-layers
  12677. var getPolygonOffset = this.props.getPolygonOffset;
  12678. var offsets = getPolygonOffset && getPolygonOffset(uniforms) || [0, 0];
  12679. parameters.polygonOffset = offsets;
  12680. // Call subclass lifecycle method
  12681. (0, _luma.withParameters)(this.context.gl, parameters, function () {
  12682. _this.draw({ moduleParameters: moduleParameters, uniforms: uniforms, parameters: parameters, context: _this.context });
  12683. });
  12684. // End lifecycle method
  12685. }
  12686. // {uniforms = {}, ...opts}
  12687. }, {
  12688. key: 'pickLayer',
  12689. value: function pickLayer(opts) {
  12690. // Call subclass lifecycle method
  12691. return this.getPickingInfo(opts);
  12692. // End lifecycle method
  12693. }
  12694. // Helper methods
  12695. }, {
  12696. key: 'getChangeFlags',
  12697. value: function getChangeFlags() {
  12698. return this.internalState.changeFlags;
  12699. }
  12700. // Dirty some change flags, will be handled by updateLayer
  12701. /* eslint-disable complexity */
  12702. }, {
  12703. key: 'setChangeFlags',
  12704. value: function setChangeFlags(flags) {
  12705. var _this2 = this;
  12706. this.internalState.changeFlags = this.internalState.changeFlags || {};
  12707. var changeFlags = this.internalState.changeFlags;
  12708. // Update primary flags
  12709. if (flags.dataChanged && !changeFlags.dataChanged) {
  12710. changeFlags.dataChanged = flags.dataChanged;
  12711. _log2.default.log(LOG_PRIORITY_UPDATE + 1, function () {
  12712. return 'dataChanged: ' + flags.dataChanged + ' in ' + _this2.id;
  12713. });
  12714. }
  12715. if (flags.updateTriggersChanged && !changeFlags.updateTriggersChanged) {
  12716. changeFlags.updateTriggersChanged = changeFlags.updateTriggersChanged && flags.updateTriggersChanged ? Object.assign({}, flags.updateTriggersChanged, changeFlags.updateTriggersChanged) : flags.updateTriggersChanged || changeFlags.updateTriggersChanged;
  12717. _log2.default.log(LOG_PRIORITY_UPDATE + 1, function () {
  12718. return 'updateTriggersChanged: ' + (Object.keys(flags.updateTriggersChanged).join(', ') + ' in ' + _this2.id);
  12719. });
  12720. }
  12721. if (flags.propsChanged && !changeFlags.propsChanged) {
  12722. changeFlags.propsChanged = flags.propsChanged;
  12723. _log2.default.log(LOG_PRIORITY_UPDATE + 1, function () {
  12724. return 'propsChanged: ' + flags.propsChanged + ' in ' + _this2.id;
  12725. });
  12726. }
  12727. if (flags.viewportChanged && !changeFlags.viewportChanged) {
  12728. changeFlags.viewportChanged = flags.viewportChanged;
  12729. _log2.default.log(LOG_PRIORITY_UPDATE + 2, function () {
  12730. return 'viewportChanged: ' + flags.viewportChanged + ' in ' + _this2.id;
  12731. });
  12732. }
  12733. // Update composite flags
  12734. var propsOrDataChanged = flags.dataChanged || flags.updateTriggersChanged || flags.propsChanged;
  12735. changeFlags.propsOrDataChanged = changeFlags.propsOrDataChanged || propsOrDataChanged;
  12736. changeFlags.somethingChanged = changeFlags.somethingChanged || propsOrDataChanged || flags.viewportChanged;
  12737. }
  12738. /* eslint-enable complexity */
  12739. // Clear all changeFlags, typically after an update
  12740. }, {
  12741. key: 'clearChangeFlags',
  12742. value: function clearChangeFlags() {
  12743. this.internalState.changeFlags = {
  12744. // Primary changeFlags, can be strings stating reason for change
  12745. dataChanged: false,
  12746. propsChanged: false,
  12747. updateTriggersChanged: false,
  12748. viewportChanged: false,
  12749. // Derived changeFlags
  12750. propsOrDataChanged: false,
  12751. somethingChanged: false
  12752. };
  12753. }
  12754. }, {
  12755. key: 'printChangeFlags',
  12756. value: function printChangeFlags() {
  12757. var flags = this.internalState.changeFlags;
  12758. return '' + (flags.dataChanged ? 'data ' : '') + (flags.propsChanged ? 'props ' : '') + (flags.updateTriggersChanged ? 'triggers ' : '') + (flags.viewportChanged ? 'viewport' : '');
  12759. }
  12760. // Compares the layers props with old props from a matched older layer
  12761. // and extracts change flags that describe what has change so that state
  12762. // can be update correctly with minimal effort
  12763. // TODO - arguments for testing only
  12764. }, {
  12765. key: 'diffProps',
  12766. value: function diffProps() {
  12767. var newProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
  12768. var oldProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.oldProps;
  12769. var changeFlags = (0, _props2.diffProps)(newProps, oldProps);
  12770. // iterate over changedTriggers
  12771. if (changeFlags.updateTriggersChanged) {
  12772. for (var key in changeFlags.updateTriggersChanged) {
  12773. if (changeFlags.updateTriggersChanged[key]) {
  12774. this._activeUpdateTrigger(key);
  12775. }
  12776. }
  12777. }
  12778. return this.setChangeFlags(changeFlags);
  12779. }
  12780. // PRIVATE METHODS
  12781. }, {
  12782. key: '_getUpdateParams',
  12783. value: function _getUpdateParams() {
  12784. return {
  12785. props: this.props,
  12786. oldProps: this.oldProps,
  12787. context: this.context,
  12788. oldContext: this.oldContext || {},
  12789. changeFlags: this.internalState.changeFlags
  12790. };
  12791. }
  12792. // Checks state of attributes and model
  12793. }, {
  12794. key: '_getNeedsRedraw',
  12795. value: function _getNeedsRedraw(clearRedrawFlags) {
  12796. // this method may be called by the render loop as soon a the layer
  12797. // has been created, so guard against uninitialized state
  12798. if (!this.state) {
  12799. return false;
  12800. }
  12801. var redraw = false;
  12802. redraw = redraw || this.state.needsRedraw && this.id;
  12803. this.state.needsRedraw = this.state.needsRedraw && !clearRedrawFlags;
  12804. // TODO - is attribute manager needed? - Model should be enough.
  12805. var attributeManager = this.getAttributeManager();
  12806. var attributeManagerNeedsRedraw = attributeManager && attributeManager.getNeedsRedraw({ clearRedrawFlags: clearRedrawFlags });
  12807. redraw = redraw || attributeManagerNeedsRedraw;
  12808. var _iteratorNormalCompletion4 = true;
  12809. var _didIteratorError4 = false;
  12810. var _iteratorError4 = undefined;
  12811. try {
  12812. for (var _iterator4 = this.getModels()[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
  12813. var model = _step4.value;
  12814. var modelNeedsRedraw = model.getNeedsRedraw({ clearRedrawFlags: clearRedrawFlags });
  12815. if (modelNeedsRedraw && typeof modelNeedsRedraw !== 'string') {
  12816. modelNeedsRedraw = 'model ' + model.id;
  12817. }
  12818. redraw = redraw || modelNeedsRedraw;
  12819. }
  12820. } catch (err) {
  12821. _didIteratorError4 = true;
  12822. _iteratorError4 = err;
  12823. } finally {
  12824. try {
  12825. if (!_iteratorNormalCompletion4 && _iterator4.return) {
  12826. _iterator4.return();
  12827. }
  12828. } finally {
  12829. if (_didIteratorError4) {
  12830. throw _iteratorError4;
  12831. }
  12832. }
  12833. }
  12834. return redraw;
  12835. }
  12836. // Called by layer manager to transfer state from an old layer
  12837. }, {
  12838. key: '_transferState',
  12839. value: function _transferState(oldLayer) {
  12840. var state = oldLayer.state,
  12841. internalState = oldLayer.internalState,
  12842. props = oldLayer.props;
  12843. (0, _assert2.default)(state && internalState);
  12844. // Move state
  12845. state.layer = this;
  12846. this.state = state;
  12847. this.internalState = internalState;
  12848. // Note: We keep the state ref on old layers to support async actions
  12849. // oldLayer.state = null;
  12850. // Keep a temporary ref to the old props, for prop comparison
  12851. this.oldProps = props;
  12852. // Update model layer reference
  12853. var _iteratorNormalCompletion5 = true;
  12854. var _didIteratorError5 = false;
  12855. var _iteratorError5 = undefined;
  12856. try {
  12857. for (var _iterator5 = this.getModels()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
  12858. var model = _step5.value;
  12859. model.userData.layer = this;
  12860. }
  12861. } catch (err) {
  12862. _didIteratorError5 = true;
  12863. _iteratorError5 = err;
  12864. } finally {
  12865. try {
  12866. if (!_iteratorNormalCompletion5 && _iterator5.return) {
  12867. _iterator5.return();
  12868. }
  12869. } finally {
  12870. if (_didIteratorError5) {
  12871. throw _iteratorError5;
  12872. }
  12873. }
  12874. }
  12875. this.diffProps();
  12876. }
  12877. // Operate on each changed triggers, will be called when an updateTrigger changes
  12878. }, {
  12879. key: '_activeUpdateTrigger',
  12880. value: function _activeUpdateTrigger(propName) {
  12881. this.invalidateAttribute(propName);
  12882. }
  12883. // Helper to check that required props are supplied
  12884. }, {
  12885. key: '_checkRequiredProp',
  12886. value: function _checkRequiredProp(propertyName, condition) {
  12887. var value = this.props[propertyName];
  12888. if (value === undefined) {
  12889. throw new Error('Property ' + propertyName + ' undefined in layer ' + this);
  12890. }
  12891. if (condition && !condition(value)) {
  12892. throw new Error('Bad property ' + propertyName + ' in layer ' + this);
  12893. }
  12894. }
  12895. }, {
  12896. key: '_updateBaseUniforms',
  12897. value: function _updateBaseUniforms() {
  12898. var uniforms = {
  12899. // apply gamma to opacity to make it visually "linear"
  12900. opacity: Math.pow(this.props.opacity, 1 / 2.2),
  12901. ONE: 1.0
  12902. };
  12903. var _iteratorNormalCompletion6 = true;
  12904. var _didIteratorError6 = false;
  12905. var _iteratorError6 = undefined;
  12906. try {
  12907. for (var _iterator6 = this.getModels()[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
  12908. var model = _step6.value;
  12909. model.setUniforms(uniforms);
  12910. }
  12911. // TODO - set needsRedraw on the model(s)?
  12912. } catch (err) {
  12913. _didIteratorError6 = true;
  12914. _iteratorError6 = err;
  12915. } finally {
  12916. try {
  12917. if (!_iteratorNormalCompletion6 && _iterator6.return) {
  12918. _iterator6.return();
  12919. }
  12920. } finally {
  12921. if (_didIteratorError6) {
  12922. throw _iteratorError6;
  12923. }
  12924. }
  12925. }
  12926. this.state.needsRedraw = true;
  12927. }
  12928. }, {
  12929. key: '_updateModuleSettings',
  12930. value: function _updateModuleSettings() {
  12931. var settings = {
  12932. pickingHighlightColor: this.props.highlightColor
  12933. };
  12934. var _iteratorNormalCompletion7 = true;
  12935. var _didIteratorError7 = false;
  12936. var _iteratorError7 = undefined;
  12937. try {
  12938. for (var _iterator7 = this.getModels()[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
  12939. var model = _step7.value;
  12940. model.updateModuleSettings(settings);
  12941. }
  12942. } catch (err) {
  12943. _didIteratorError7 = true;
  12944. _iteratorError7 = err;
  12945. } finally {
  12946. try {
  12947. if (!_iteratorNormalCompletion7 && _iterator7.return) {
  12948. _iterator7.return();
  12949. }
  12950. } finally {
  12951. if (_didIteratorError7) {
  12952. throw _iteratorError7;
  12953. }
  12954. }
  12955. }
  12956. }
  12957. // DEPRECATED METHODS
  12958. // Updates selected state members and marks the object for redraw
  12959. }, {
  12960. key: 'setUniforms',
  12961. value: function setUniforms(uniformMap) {
  12962. var _iteratorNormalCompletion8 = true;
  12963. var _didIteratorError8 = false;
  12964. var _iteratorError8 = undefined;
  12965. try {
  12966. for (var _iterator8 = this.getModels()[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
  12967. var model = _step8.value;
  12968. model.setUniforms(uniformMap);
  12969. }
  12970. // TODO - set needsRedraw on the model(s)?
  12971. } catch (err) {
  12972. _didIteratorError8 = true;
  12973. _iteratorError8 = err;
  12974. } finally {
  12975. try {
  12976. if (!_iteratorNormalCompletion8 && _iterator8.return) {
  12977. _iterator8.return();
  12978. }
  12979. } finally {
  12980. if (_didIteratorError8) {
  12981. throw _iteratorError8;
  12982. }
  12983. }
  12984. }
  12985. this.state.needsRedraw = true;
  12986. _log2.default.deprecated('layer.setUniforms', 'model.setUniforms');
  12987. }
  12988. }, {
  12989. key: 'stats',
  12990. get: function get() {
  12991. return this.internalState.stats;
  12992. }
  12993. }]);
  12994. return Layer;
  12995. }();
  12996. exports.default = Layer;
  12997. Layer.layerName = 'Layer';
  12998. Layer.defaultProps = defaultProps;
  12999. /***/ }),
  13000. /* 124 */
  13001. /***/ (function(module, exports, __webpack_require__) {
  13002. "use strict";
  13003. Object.defineProperty(exports, "__esModule", {
  13004. value: true
  13005. });
  13006. exports.removeLayerInSeer = exports.updateLayerInSeer = exports.initLayerInSeer = exports.seerInitListener = exports.layerEditListener = exports.applyPropOverrides = exports.setPropOverrides = undefined;
  13007. var _seer = __webpack_require__(173);
  13008. var _seer2 = _interopRequireDefault(_seer);
  13009. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  13010. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  13011. /**
  13012. * Recursively set a nested property of an object given a properties array and a value
  13013. */
  13014. var recursiveSet = function recursiveSet(obj, path, value) {
  13015. if (!obj) {
  13016. return;
  13017. }
  13018. if (path.length > 1) {
  13019. recursiveSet(obj[path[0]], path.slice(1), value);
  13020. } else {
  13021. obj[path[0]] = value;
  13022. }
  13023. };
  13024. var overrides = new Map();
  13025. /**
  13026. * Create an override on the specify layer, indexed by a valuePath array.
  13027. * Do nothing in case Seer as not been initialized to prevent any preformance drawback.
  13028. */
  13029. var setPropOverrides = exports.setPropOverrides = function setPropOverrides(id, valuePath, value) {
  13030. if (!_seer2.default.isReady()) {
  13031. return;
  13032. }
  13033. if (!overrides.has(id)) {
  13034. overrides.set(id, new Map());
  13035. }
  13036. var props = overrides.get(id);
  13037. props.set(valuePath, value);
  13038. };
  13039. /**
  13040. * Get the props overrides of a specific layer if Seer as been initialized
  13041. * Invalidates the data to be sure new ones are always picked up.
  13042. */
  13043. var applyPropOverrides = exports.applyPropOverrides = function applyPropOverrides(props) {
  13044. if (!_seer2.default.isReady() || !props.id) {
  13045. return;
  13046. }
  13047. var overs = overrides.get(props.id);
  13048. if (!overs) {
  13049. return;
  13050. }
  13051. overs.forEach(function (value, valuePath) {
  13052. recursiveSet(props, valuePath, value);
  13053. // Invalidate data array if we have a data override
  13054. if (valuePath[0] === 'data') {
  13055. props.data = [].concat(_toConsumableArray(props.data));
  13056. }
  13057. });
  13058. };
  13059. /**
  13060. * Listen for deck.gl edit events
  13061. */
  13062. var layerEditListener = exports.layerEditListener = function layerEditListener(cb) {
  13063. if (!_seer2.default.isReady()) {
  13064. return;
  13065. }
  13066. _seer2.default.listenFor('deck.gl', cb);
  13067. };
  13068. /**
  13069. * Listen for seer init events to resend data
  13070. */
  13071. var seerInitListener = exports.seerInitListener = function seerInitListener(cb) {
  13072. if (!_seer2.default.isReady()) {
  13073. return;
  13074. }
  13075. _seer2.default.listenFor('init', cb);
  13076. };
  13077. var initLayerInSeer = exports.initLayerInSeer = function initLayerInSeer(layer) {
  13078. if (!_seer2.default.isReady() || !layer) {
  13079. return;
  13080. }
  13081. var badges = [layer.constructor.layerName];
  13082. _seer2.default.listItem('deck.gl', layer.id, {
  13083. badges: badges,
  13084. // TODO: Seer currently only handles single model layers
  13085. links: layer.state && layer.state.model ? ['luma.gl:' + layer.state.model.id] : undefined,
  13086. parent: layer.parentLayer ? layer.parentLayer.id : undefined
  13087. });
  13088. };
  13089. /**
  13090. * Log layer's properties to Seer
  13091. */
  13092. var updateLayerInSeer = exports.updateLayerInSeer = function updateLayerInSeer(layer) {
  13093. if (!_seer2.default.isReady() || _seer2.default.throttle('deck.gl:' + layer.id, 1e3)) {
  13094. return;
  13095. }
  13096. var data = logPayload(layer);
  13097. _seer2.default.multiUpdate('deck.gl', layer.id, data);
  13098. };
  13099. /**
  13100. * On finalize of a specify layer, remove it from seer
  13101. */
  13102. var removeLayerInSeer = exports.removeLayerInSeer = function removeLayerInSeer(id) {
  13103. if (!_seer2.default.isReady() || !id) {
  13104. return;
  13105. }
  13106. _seer2.default.deleteItem('deck.gl', id);
  13107. };
  13108. function logPayload(layer) {
  13109. var data = [{ path: 'objects.props', data: layer.props }];
  13110. var badges = [layer.constructor.layerName];
  13111. if (layer.state) {
  13112. if (layer.state.attributeManager) {
  13113. var attrs = layer.state.attributeManager.getAttributes();
  13114. data.push({ path: 'objects.attributes', data: attrs });
  13115. badges.push(layer.state.attributeManager.stats.getTimeString());
  13116. }
  13117. // TODO: Seer currently only handles single model layers
  13118. if (layer.state.model) {
  13119. layer.state.model.timerQueryEnabled = true;
  13120. var lastFrameTime = layer.state.model.stats.lastFrameTime;
  13121. if (lastFrameTime) {
  13122. badges.push((lastFrameTime * 1000).toFixed(0) + '\u03BCs');
  13123. }
  13124. }
  13125. }
  13126. data.push({ path: 'badges', data: badges });
  13127. return data;
  13128. }
  13129. /***/ }),
  13130. /* 125 */
  13131. /***/ (function(module, exports, __webpack_require__) {
  13132. "use strict";
  13133. Object.defineProperty(exports, "__esModule", {
  13134. value: true
  13135. });
  13136. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  13137. var _transitionInterpolator = __webpack_require__(193);
  13138. var _transitionInterpolator2 = _interopRequireDefault(_transitionInterpolator);
  13139. var _transitionUtils = __webpack_require__(84);
  13140. var _assert = __webpack_require__(1);
  13141. var _assert2 = _interopRequireDefault(_assert);
  13142. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  13143. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  13144. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  13145. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  13146. var VIEWPORT_TRANSITION_PROPS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];
  13147. /**
  13148. * Performs linear interpolation of two viewports.
  13149. */
  13150. var LinearInterpolator = function (_TransitionInterpolat) {
  13151. _inherits(LinearInterpolator, _TransitionInterpolat);
  13152. /**
  13153. * @param {Array} transitionProps - list of props to apply linear transition to.
  13154. */
  13155. function LinearInterpolator() {
  13156. var transitionProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : VIEWPORT_TRANSITION_PROPS;
  13157. _classCallCheck(this, LinearInterpolator);
  13158. var _this = _possibleConstructorReturn(this, (LinearInterpolator.__proto__ || Object.getPrototypeOf(LinearInterpolator)).call(this));
  13159. _this.propNames = transitionProps;
  13160. return _this;
  13161. }
  13162. _createClass(LinearInterpolator, [{
  13163. key: 'initializeProps',
  13164. value: function initializeProps(startProps, endProps) {
  13165. var startViewportProps = {};
  13166. var endViewportProps = {};
  13167. var _iteratorNormalCompletion = true;
  13168. var _didIteratorError = false;
  13169. var _iteratorError = undefined;
  13170. try {
  13171. for (var _iterator = this.propNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  13172. var key = _step.value;
  13173. var startValue = startProps[key];
  13174. var endValue = endProps[key];
  13175. (0, _assert2.default)((0, _transitionUtils.isValid)(startValue) && (0, _transitionUtils.isValid)(endValue), key + ' must be supplied for transition');
  13176. startViewportProps[key] = startValue;
  13177. endViewportProps[key] = (0, _transitionUtils.getEndValueByShortestPath)(key, startValue, endValue);
  13178. }
  13179. } catch (err) {
  13180. _didIteratorError = true;
  13181. _iteratorError = err;
  13182. } finally {
  13183. try {
  13184. if (!_iteratorNormalCompletion && _iterator.return) {
  13185. _iterator.return();
  13186. }
  13187. } finally {
  13188. if (_didIteratorError) {
  13189. throw _iteratorError;
  13190. }
  13191. }
  13192. }
  13193. return {
  13194. start: startViewportProps,
  13195. end: endViewportProps
  13196. };
  13197. }
  13198. }, {
  13199. key: 'interpolateProps',
  13200. value: function interpolateProps(startProps, endProps, t) {
  13201. var viewport = {};
  13202. var _iteratorNormalCompletion2 = true;
  13203. var _didIteratorError2 = false;
  13204. var _iteratorError2 = undefined;
  13205. try {
  13206. for (var _iterator2 = this.propNames[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  13207. var key = _step2.value;
  13208. viewport[key] = (0, _transitionUtils.lerp)(startProps[key], endProps[key], t);
  13209. }
  13210. } catch (err) {
  13211. _didIteratorError2 = true;
  13212. _iteratorError2 = err;
  13213. } finally {
  13214. try {
  13215. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  13216. _iterator2.return();
  13217. }
  13218. } finally {
  13219. if (_didIteratorError2) {
  13220. throw _iteratorError2;
  13221. }
  13222. }
  13223. }
  13224. return viewport;
  13225. }
  13226. }]);
  13227. return LinearInterpolator;
  13228. }(_transitionInterpolator2.default);
  13229. exports.default = LinearInterpolator;
  13230. /***/ }),
  13231. /* 126 */
  13232. /***/ (function(module, exports, __webpack_require__) {
  13233. "use strict";
  13234. Object.defineProperty(exports, "__esModule", {
  13235. value: true
  13236. });
  13237. exports.flatten = flatten;
  13238. exports.countVertices = countVertices;
  13239. exports.flattenVertices = flattenVertices;
  13240. exports.fillArray = fillArray;
  13241. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  13242. //
  13243. // Permission is hereby granted, free of charge, to any person obtaining a copy
  13244. // of this software and associated documentation files (the "Software"), to deal
  13245. // in the Software without restriction, including without limitation the rights
  13246. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  13247. // copies of the Software, and to permit persons to whom the Software is
  13248. // furnished to do so, subject to the following conditions:
  13249. //
  13250. // The above copyright notice and this permission notice shall be included in
  13251. // all copies or substantial portions of the Software.
  13252. //
  13253. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  13254. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  13255. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  13256. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  13257. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  13258. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  13259. // THE SOFTWARE.
  13260. /**
  13261. * Flattens a nested array into a single level array,
  13262. * or a single value into an array with one value
  13263. * @example flatten([[1, [2]], [3], 4]) => [1, 2, 3, 4]
  13264. * @example flatten(1) => [1]
  13265. * @param {Array} array The array to flatten.
  13266. * @param {Function} filter= - Optional predicate called on each `value` to
  13267. * determine if it should be included (pushed onto) the resulting array.
  13268. * @param {Function} map= - Optional transform applied to each array elements.
  13269. * @param {Array} result=[] - Optional array to push value into
  13270. * @return {Array} Returns the new flattened array (new array or `result` if provided)
  13271. */
  13272. function flatten(array) {
  13273. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  13274. _ref$filter = _ref.filter,
  13275. filter = _ref$filter === undefined ? function () {
  13276. return true;
  13277. } : _ref$filter,
  13278. _ref$map = _ref.map,
  13279. map = _ref$map === undefined ? function (x) {
  13280. return x;
  13281. } : _ref$map,
  13282. _ref$result = _ref.result,
  13283. result = _ref$result === undefined ? [] : _ref$result;
  13284. // Wrap single object in array
  13285. if (!Array.isArray(array)) {
  13286. return filter(array) ? [map(array)] : [];
  13287. }
  13288. // Deep flatten and filter the array
  13289. return flattenArray(array, filter, map, result);
  13290. }
  13291. // Deep flattens an array. Helper to `flatten`, see its parameters
  13292. function flattenArray(array, filter, map, result) {
  13293. var index = -1;
  13294. while (++index < array.length) {
  13295. var value = array[index];
  13296. if (Array.isArray(value)) {
  13297. flattenArray(value, filter, map, result);
  13298. } else if (filter(value)) {
  13299. result.push(map(value));
  13300. }
  13301. }
  13302. return result;
  13303. }
  13304. function countVertices(nestedArray) {
  13305. var count = 0;
  13306. var index = -1;
  13307. while (++index < nestedArray.length) {
  13308. var value = nestedArray[index];
  13309. if (Array.isArray(value) || ArrayBuffer.isView(value)) {
  13310. count += countVertices(value);
  13311. } else {
  13312. count++;
  13313. }
  13314. }
  13315. return count;
  13316. }
  13317. // Flattens nested array of vertices, padding third coordinate as needed
  13318. function flattenVertices(nestedArray) {
  13319. var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  13320. _ref2$result = _ref2.result,
  13321. result = _ref2$result === undefined ? [] : _ref2$result,
  13322. _ref2$dimensions = _ref2.dimensions,
  13323. dimensions = _ref2$dimensions === undefined ? 3 : _ref2$dimensions;
  13324. var index = -1;
  13325. var vertexLength = 0;
  13326. while (++index < nestedArray.length) {
  13327. var value = nestedArray[index];
  13328. if (Array.isArray(value) || ArrayBuffer.isView(value)) {
  13329. flattenVertices(value, { result: result, dimensions: dimensions });
  13330. } else {
  13331. // eslint-disable-next-line
  13332. if (vertexLength < dimensions) {
  13333. result.push(value);
  13334. vertexLength++;
  13335. }
  13336. }
  13337. }
  13338. // Add a third coordinate if needed
  13339. if (vertexLength > 0 && vertexLength < dimensions) {
  13340. result.push(0);
  13341. }
  13342. return result;
  13343. }
  13344. // Uses copyWithin to significantly speed up typed array value filling
  13345. function fillArray(_ref3) {
  13346. var target = _ref3.target,
  13347. source = _ref3.source,
  13348. _ref3$start = _ref3.start,
  13349. start = _ref3$start === undefined ? 0 : _ref3$start,
  13350. _ref3$count = _ref3.count,
  13351. count = _ref3$count === undefined ? 1 : _ref3$count;
  13352. var length = source.length;
  13353. var total = count * length;
  13354. var copied = 0;
  13355. for (var i = start; copied < length; copied++) {
  13356. target[i++] = source[copied];
  13357. }
  13358. while (copied < total) {
  13359. // If we have copied less than half, copy everything we got
  13360. // else copy remaining in one operation
  13361. if (copied < total - copied) {
  13362. target.copyWithin(start + copied, start, start + copied);
  13363. copied *= 2;
  13364. } else {
  13365. target.copyWithin(start + copied, start, start + total - copied);
  13366. copied = total;
  13367. }
  13368. }
  13369. return target;
  13370. }
  13371. // Flattens nested array of vertices, padding third coordinate as needed
  13372. /*
  13373. export function flattenTypedVertices(nestedArray, {
  13374. result = [],
  13375. Type = Float32Array,
  13376. start = 0,
  13377. dimensions = 3
  13378. } = {}) {
  13379. let index = -1;
  13380. let vertexLength = 0;
  13381. while (++index < nestedArray.length) {
  13382. const value = nestedArray[index];
  13383. if (Array.isArray(value) || ArrayBuffer.isView(value)) {
  13384. start = flattenTypedVertices(value, {result, start, dimensions});
  13385. } else {
  13386. if (vertexLength < dimensions) { // eslint-disable-line
  13387. result[start++] = value;
  13388. vertexLength++;
  13389. }
  13390. }
  13391. }
  13392. // Add a third coordinate if needed
  13393. if (vertexLength > 0 && vertexLength < dimensions) {
  13394. result[start++] = 0;
  13395. }
  13396. return start;
  13397. }
  13398. */
  13399. /***/ }),
  13400. /* 127 */
  13401. /***/ (function(module, exports, __webpack_require__) {
  13402. "use strict";
  13403. Object.defineProperty(exports, "__esModule", {
  13404. value: true
  13405. });
  13406. exports.transformVector = transformVector;
  13407. exports.createMat4 = createMat4;
  13408. exports.extractCameraVectors = extractCameraVectors;
  13409. exports.mod = mod;
  13410. var _multiply = __webpack_require__(246);
  13411. var _multiply2 = _interopRequireDefault(_multiply);
  13412. var _transformMat = __webpack_require__(103);
  13413. var _transformMat2 = _interopRequireDefault(_transformMat);
  13414. var _assert = __webpack_require__(1);
  13415. var _assert2 = _interopRequireDefault(_assert);
  13416. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  13417. function transformVector(matrix, vector) {
  13418. // Handle non-invertible matrix
  13419. if (!matrix) {
  13420. return null;
  13421. }
  13422. var result = (0, _transformMat2.default)([0, 0, 0, 0], vector, matrix);
  13423. var scale = 1 / result[3];
  13424. (0, _multiply2.default)(result, result, [scale, scale, scale, scale]);
  13425. return result;
  13426. }
  13427. // Helper, avoids low-precision 32 bit matrices from gl-matrix mat4.create()
  13428. // Extensions to math.gl library. Intended to be folded back.
  13429. function createMat4() {
  13430. return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
  13431. }
  13432. // Extract camera vectors (move to math library?)
  13433. function extractCameraVectors(_ref) {
  13434. var viewMatrix = _ref.viewMatrix,
  13435. viewMatrixInverse = _ref.viewMatrixInverse;
  13436. // Read the translation from the inverse view matrix
  13437. return {
  13438. eye: [viewMatrixInverse[12], viewMatrixInverse[13], viewMatrixInverse[14]],
  13439. direction: [viewMatrix[2], viewMatrix[6], viewMatrix[10]],
  13440. up: [viewMatrix[1], viewMatrix[5], viewMatrix[9]]
  13441. };
  13442. }
  13443. function mod(value, divisor) {
  13444. (0, _assert2.default)(Number.isFinite(value) && Number.isFinite(divisor));
  13445. var modulus = value % divisor;
  13446. return modulus < 0 ? divisor + modulus : modulus;
  13447. }
  13448. /***/ }),
  13449. /* 128 */
  13450. /***/ (function(module, exports, __webpack_require__) {
  13451. "use strict";
  13452. // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
  13453. var toObject = __webpack_require__(14);
  13454. var toAbsoluteIndex = __webpack_require__(57);
  13455. var toLength = __webpack_require__(11);
  13456. module.exports = function fill(value /* , start = 0, end = @length */) {
  13457. var O = toObject(this);
  13458. var length = toLength(O.length);
  13459. var aLen = arguments.length;
  13460. var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
  13461. var end = aLen > 2 ? arguments[2] : undefined;
  13462. var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
  13463. while (endPos > index) O[index++] = value;
  13464. return O;
  13465. };
  13466. /***/ }),
  13467. /* 129 */
  13468. /***/ (function(module, exports, __webpack_require__) {
  13469. // 9.4.2.3 ArraySpeciesCreate(originalArray, length)
  13470. var speciesConstructor = __webpack_require__(368);
  13471. module.exports = function (original, length) {
  13472. return new (speciesConstructor(original))(length);
  13473. };
  13474. /***/ }),
  13475. /* 130 */
  13476. /***/ (function(module, exports, __webpack_require__) {
  13477. "use strict";
  13478. var $defineProperty = __webpack_require__(10);
  13479. var createDesc = __webpack_require__(54);
  13480. module.exports = function (object, index, value) {
  13481. if (index in object) $defineProperty.f(object, index, createDesc(0, value));
  13482. else object[index] = value;
  13483. };
  13484. /***/ }),
  13485. /* 131 */
  13486. /***/ (function(module, exports, __webpack_require__) {
  13487. var isObject = __webpack_require__(5);
  13488. var document = __webpack_require__(3).document;
  13489. // typeof document.createElement is 'object' in old IE
  13490. var is = isObject(document) && isObject(document.createElement);
  13491. module.exports = function (it) {
  13492. return is ? document.createElement(it) : {};
  13493. };
  13494. /***/ }),
  13495. /* 132 */
  13496. /***/ (function(module, exports) {
  13497. // IE 8- don't enum bug keys
  13498. module.exports = (
  13499. 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
  13500. ).split(',');
  13501. /***/ }),
  13502. /* 133 */
  13503. /***/ (function(module, exports, __webpack_require__) {
  13504. var MATCH = __webpack_require__(6)('match');
  13505. module.exports = function (KEY) {
  13506. var re = /./;
  13507. try {
  13508. '/./'[KEY](re);
  13509. } catch (e) {
  13510. try {
  13511. re[MATCH] = false;
  13512. return !'/./'[KEY](re);
  13513. } catch (f) { /* empty */ }
  13514. } return true;
  13515. };
  13516. /***/ }),
  13517. /* 134 */
  13518. /***/ (function(module, exports, __webpack_require__) {
  13519. var document = __webpack_require__(3).document;
  13520. module.exports = document && document.documentElement;
  13521. /***/ }),
  13522. /* 135 */
  13523. /***/ (function(module, exports, __webpack_require__) {
  13524. var isObject = __webpack_require__(5);
  13525. var setPrototypeOf = __webpack_require__(143).set;
  13526. module.exports = function (that, target, C) {
  13527. var S = target.constructor;
  13528. var P;
  13529. if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {
  13530. setPrototypeOf(that, P);
  13531. } return that;
  13532. };
  13533. /***/ }),
  13534. /* 136 */
  13535. /***/ (function(module, exports, __webpack_require__) {
  13536. // check on default Array iterator
  13537. var Iterators = __webpack_require__(63);
  13538. var ITERATOR = __webpack_require__(6)('iterator');
  13539. var ArrayProto = Array.prototype;
  13540. module.exports = function (it) {
  13541. return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
  13542. };
  13543. /***/ }),
  13544. /* 137 */
  13545. /***/ (function(module, exports, __webpack_require__) {
  13546. "use strict";
  13547. var create = __webpack_require__(51);
  13548. var descriptor = __webpack_require__(54);
  13549. var setToStringTag = __webpack_require__(64);
  13550. var IteratorPrototype = {};
  13551. // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
  13552. __webpack_require__(19)(IteratorPrototype, __webpack_require__(6)('iterator'), function () { return this; });
  13553. module.exports = function (Constructor, NAME, next) {
  13554. Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
  13555. setToStringTag(Constructor, NAME + ' Iterator');
  13556. };
  13557. /***/ }),
  13558. /* 138 */
  13559. /***/ (function(module, exports, __webpack_require__) {
  13560. "use strict";
  13561. var LIBRARY = __webpack_require__(50);
  13562. var $export = __webpack_require__(0);
  13563. var redefine = __webpack_require__(20);
  13564. var hide = __webpack_require__(19);
  13565. var has = __webpack_require__(18);
  13566. var Iterators = __webpack_require__(63);
  13567. var $iterCreate = __webpack_require__(137);
  13568. var setToStringTag = __webpack_require__(64);
  13569. var getPrototypeOf = __webpack_require__(23);
  13570. var ITERATOR = __webpack_require__(6)('iterator');
  13571. var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
  13572. var FF_ITERATOR = '@@iterator';
  13573. var KEYS = 'keys';
  13574. var VALUES = 'values';
  13575. var returnThis = function () { return this; };
  13576. module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
  13577. $iterCreate(Constructor, NAME, next);
  13578. var getMethod = function (kind) {
  13579. if (!BUGGY && kind in proto) return proto[kind];
  13580. switch (kind) {
  13581. case KEYS: return function keys() { return new Constructor(this, kind); };
  13582. case VALUES: return function values() { return new Constructor(this, kind); };
  13583. } return function entries() { return new Constructor(this, kind); };
  13584. };
  13585. var TAG = NAME + ' Iterator';
  13586. var DEF_VALUES = DEFAULT == VALUES;
  13587. var VALUES_BUG = false;
  13588. var proto = Base.prototype;
  13589. var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
  13590. var $default = (!BUGGY && $native) || getMethod(DEFAULT);
  13591. var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
  13592. var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
  13593. var methods, key, IteratorPrototype;
  13594. // Fix native
  13595. if ($anyNative) {
  13596. IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
  13597. if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
  13598. // Set @@toStringTag to native iterators
  13599. setToStringTag(IteratorPrototype, TAG, true);
  13600. // fix for some old engines
  13601. if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);
  13602. }
  13603. }
  13604. // fix Array#{values, @@iterator}.name in V8 / FF
  13605. if (DEF_VALUES && $native && $native.name !== VALUES) {
  13606. VALUES_BUG = true;
  13607. $default = function values() { return $native.call(this); };
  13608. }
  13609. // Define iterator
  13610. if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
  13611. hide(proto, ITERATOR, $default);
  13612. }
  13613. // Plug for library
  13614. Iterators[NAME] = $default;
  13615. Iterators[TAG] = returnThis;
  13616. if (DEFAULT) {
  13617. methods = {
  13618. values: DEF_VALUES ? $default : getMethod(VALUES),
  13619. keys: IS_SET ? $default : getMethod(KEYS),
  13620. entries: $entries
  13621. };
  13622. if (FORCED) for (key in methods) {
  13623. if (!(key in proto)) redefine(proto, key, methods[key]);
  13624. } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
  13625. }
  13626. return methods;
  13627. };
  13628. /***/ }),
  13629. /* 139 */
  13630. /***/ (function(module, exports) {
  13631. // 20.2.2.14 Math.expm1(x)
  13632. var $expm1 = Math.expm1;
  13633. module.exports = (!$expm1
  13634. // Old FF bug
  13635. || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168
  13636. // Tor Browser bug
  13637. || $expm1(-2e-17) != -2e-17
  13638. ) ? function expm1(x) {
  13639. return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
  13640. } : $expm1;
  13641. /***/ }),
  13642. /* 140 */
  13643. /***/ (function(module, exports) {
  13644. // 20.2.2.28 Math.sign(x)
  13645. module.exports = Math.sign || function sign(x) {
  13646. // eslint-disable-next-line no-self-compare
  13647. return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
  13648. };
  13649. /***/ }),
  13650. /* 141 */
  13651. /***/ (function(module, exports, __webpack_require__) {
  13652. var global = __webpack_require__(3);
  13653. var macrotask = __webpack_require__(149).set;
  13654. var Observer = global.MutationObserver || global.WebKitMutationObserver;
  13655. var process = global.process;
  13656. var Promise = global.Promise;
  13657. var isNode = __webpack_require__(27)(process) == 'process';
  13658. module.exports = function () {
  13659. var head, last, notify;
  13660. var flush = function () {
  13661. var parent, fn;
  13662. if (isNode && (parent = process.domain)) parent.exit();
  13663. while (head) {
  13664. fn = head.fn;
  13665. head = head.next;
  13666. try {
  13667. fn();
  13668. } catch (e) {
  13669. if (head) notify();
  13670. else last = undefined;
  13671. throw e;
  13672. }
  13673. } last = undefined;
  13674. if (parent) parent.enter();
  13675. };
  13676. // Node.js
  13677. if (isNode) {
  13678. notify = function () {
  13679. process.nextTick(flush);
  13680. };
  13681. // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
  13682. } else if (Observer && !(global.navigator && global.navigator.standalone)) {
  13683. var toggle = true;
  13684. var node = document.createTextNode('');
  13685. new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
  13686. notify = function () {
  13687. node.data = toggle = !toggle;
  13688. };
  13689. // environments with maybe non-completely correct, but existent Promise
  13690. } else if (Promise && Promise.resolve) {
  13691. var promise = Promise.resolve();
  13692. notify = function () {
  13693. promise.then(flush);
  13694. };
  13695. // for other environments - macrotask based on:
  13696. // - setImmediate
  13697. // - MessageChannel
  13698. // - window.postMessag
  13699. // - onreadystatechange
  13700. // - setTimeout
  13701. } else {
  13702. notify = function () {
  13703. // strange IE + webpack dev server bug - use .call(global)
  13704. macrotask.call(global, flush);
  13705. };
  13706. }
  13707. return function (fn) {
  13708. var task = { fn: fn, next: undefined };
  13709. if (last) last.next = task;
  13710. if (!head) {
  13711. head = task;
  13712. notify();
  13713. } last = task;
  13714. };
  13715. };
  13716. /***/ }),
  13717. /* 142 */
  13718. /***/ (function(module, exports, __webpack_require__) {
  13719. "use strict";
  13720. // 25.4.1.5 NewPromiseCapability(C)
  13721. var aFunction = __webpack_require__(15);
  13722. function PromiseCapability(C) {
  13723. var resolve, reject;
  13724. this.promise = new C(function ($$resolve, $$reject) {
  13725. if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
  13726. resolve = $$resolve;
  13727. reject = $$reject;
  13728. });
  13729. this.resolve = aFunction(resolve);
  13730. this.reject = aFunction(reject);
  13731. }
  13732. module.exports.f = function (C) {
  13733. return new PromiseCapability(C);
  13734. };
  13735. /***/ }),
  13736. /* 143 */
  13737. /***/ (function(module, exports, __webpack_require__) {
  13738. // Works with __proto__ only. Old v8 can't work with null proto objects.
  13739. /* eslint-disable no-proto */
  13740. var isObject = __webpack_require__(5);
  13741. var anObject = __webpack_require__(2);
  13742. var check = function (O, proto) {
  13743. anObject(O);
  13744. if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
  13745. };
  13746. module.exports = {
  13747. set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
  13748. function (test, buggy, set) {
  13749. try {
  13750. set = __webpack_require__(28)(Function.call, __webpack_require__(22).f(Object.prototype, '__proto__').set, 2);
  13751. set(test, []);
  13752. buggy = !(test instanceof Array);
  13753. } catch (e) { buggy = true; }
  13754. return function setPrototypeOf(O, proto) {
  13755. check(O, proto);
  13756. if (buggy) O.__proto__ = proto;
  13757. else set(O, proto);
  13758. return O;
  13759. };
  13760. }({}, false) : undefined),
  13761. check: check
  13762. };
  13763. /***/ }),
  13764. /* 144 */
  13765. /***/ (function(module, exports, __webpack_require__) {
  13766. var shared = __webpack_require__(98)('keys');
  13767. var uid = __webpack_require__(58);
  13768. module.exports = function (key) {
  13769. return shared[key] || (shared[key] = uid(key));
  13770. };
  13771. /***/ }),
  13772. /* 145 */
  13773. /***/ (function(module, exports, __webpack_require__) {
  13774. var toInteger = __webpack_require__(36);
  13775. var defined = __webpack_require__(34);
  13776. // true -> String#at
  13777. // false -> String#codePointAt
  13778. module.exports = function (TO_STRING) {
  13779. return function (that, pos) {
  13780. var s = String(defined(that));
  13781. var i = toInteger(pos);
  13782. var l = s.length;
  13783. var a, b;
  13784. if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
  13785. a = s.charCodeAt(i);
  13786. return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
  13787. ? TO_STRING ? s.charAt(i) : a
  13788. : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
  13789. };
  13790. };
  13791. /***/ }),
  13792. /* 146 */
  13793. /***/ (function(module, exports, __webpack_require__) {
  13794. // helper for String#{startsWith, endsWith, includes}
  13795. var isRegExp = __webpack_require__(92);
  13796. var defined = __webpack_require__(34);
  13797. module.exports = function (that, searchString, NAME) {
  13798. if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
  13799. return String(defined(that));
  13800. };
  13801. /***/ }),
  13802. /* 147 */
  13803. /***/ (function(module, exports, __webpack_require__) {
  13804. "use strict";
  13805. var toInteger = __webpack_require__(36);
  13806. var defined = __webpack_require__(34);
  13807. module.exports = function repeat(count) {
  13808. var str = String(defined(this));
  13809. var res = '';
  13810. var n = toInteger(count);
  13811. if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
  13812. for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;
  13813. return res;
  13814. };
  13815. /***/ }),
  13816. /* 148 */
  13817. /***/ (function(module, exports) {
  13818. module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
  13819. '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
  13820. /***/ }),
  13821. /* 149 */
  13822. /***/ (function(module, exports, __webpack_require__) {
  13823. var ctx = __webpack_require__(28);
  13824. var invoke = __webpack_require__(208);
  13825. var html = __webpack_require__(134);
  13826. var cel = __webpack_require__(131);
  13827. var global = __webpack_require__(3);
  13828. var process = global.process;
  13829. var setTask = global.setImmediate;
  13830. var clearTask = global.clearImmediate;
  13831. var MessageChannel = global.MessageChannel;
  13832. var Dispatch = global.Dispatch;
  13833. var counter = 0;
  13834. var queue = {};
  13835. var ONREADYSTATECHANGE = 'onreadystatechange';
  13836. var defer, channel, port;
  13837. var run = function () {
  13838. var id = +this;
  13839. // eslint-disable-next-line no-prototype-builtins
  13840. if (queue.hasOwnProperty(id)) {
  13841. var fn = queue[id];
  13842. delete queue[id];
  13843. fn();
  13844. }
  13845. };
  13846. var listener = function (event) {
  13847. run.call(event.data);
  13848. };
  13849. // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
  13850. if (!setTask || !clearTask) {
  13851. setTask = function setImmediate(fn) {
  13852. var args = [];
  13853. var i = 1;
  13854. while (arguments.length > i) args.push(arguments[i++]);
  13855. queue[++counter] = function () {
  13856. // eslint-disable-next-line no-new-func
  13857. invoke(typeof fn == 'function' ? fn : Function(fn), args);
  13858. };
  13859. defer(counter);
  13860. return counter;
  13861. };
  13862. clearTask = function clearImmediate(id) {
  13863. delete queue[id];
  13864. };
  13865. // Node.js 0.8-
  13866. if (__webpack_require__(27)(process) == 'process') {
  13867. defer = function (id) {
  13868. process.nextTick(ctx(run, id, 1));
  13869. };
  13870. // Sphere (JS game engine) Dispatch API
  13871. } else if (Dispatch && Dispatch.now) {
  13872. defer = function (id) {
  13873. Dispatch.now(ctx(run, id, 1));
  13874. };
  13875. // Browsers with MessageChannel, includes WebWorkers
  13876. } else if (MessageChannel) {
  13877. channel = new MessageChannel();
  13878. port = channel.port2;
  13879. channel.port1.onmessage = listener;
  13880. defer = ctx(port.postMessage, port, 1);
  13881. // Browsers with postMessage, skip WebWorkers
  13882. // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
  13883. } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
  13884. defer = function (id) {
  13885. global.postMessage(id + '', '*');
  13886. };
  13887. global.addEventListener('message', listener, false);
  13888. // IE8-
  13889. } else if (ONREADYSTATECHANGE in cel('script')) {
  13890. defer = function (id) {
  13891. html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
  13892. html.removeChild(this);
  13893. run.call(id);
  13894. };
  13895. };
  13896. // Rest old browsers
  13897. } else {
  13898. defer = function (id) {
  13899. setTimeout(ctx(run, id, 1), 0);
  13900. };
  13901. }
  13902. }
  13903. module.exports = {
  13904. set: setTask,
  13905. clear: clearTask
  13906. };
  13907. /***/ }),
  13908. /* 150 */
  13909. /***/ (function(module, exports, __webpack_require__) {
  13910. "use strict";
  13911. var global = __webpack_require__(3);
  13912. var DESCRIPTORS = __webpack_require__(9);
  13913. var LIBRARY = __webpack_require__(50);
  13914. var $typed = __webpack_require__(100);
  13915. var hide = __webpack_require__(19);
  13916. var redefineAll = __webpack_require__(55);
  13917. var fails = __webpack_require__(4);
  13918. var anInstance = __webpack_require__(48);
  13919. var toInteger = __webpack_require__(36);
  13920. var toLength = __webpack_require__(11);
  13921. var toIndex = __webpack_require__(226);
  13922. var gOPN = __webpack_require__(52).f;
  13923. var dP = __webpack_require__(10).f;
  13924. var arrayFill = __webpack_require__(128);
  13925. var setToStringTag = __webpack_require__(64);
  13926. var ARRAY_BUFFER = 'ArrayBuffer';
  13927. var DATA_VIEW = 'DataView';
  13928. var PROTOTYPE = 'prototype';
  13929. var WRONG_LENGTH = 'Wrong length!';
  13930. var WRONG_INDEX = 'Wrong index!';
  13931. var $ArrayBuffer = global[ARRAY_BUFFER];
  13932. var $DataView = global[DATA_VIEW];
  13933. var Math = global.Math;
  13934. var RangeError = global.RangeError;
  13935. // eslint-disable-next-line no-shadow-restricted-names
  13936. var Infinity = global.Infinity;
  13937. var BaseBuffer = $ArrayBuffer;
  13938. var abs = Math.abs;
  13939. var pow = Math.pow;
  13940. var floor = Math.floor;
  13941. var log = Math.log;
  13942. var LN2 = Math.LN2;
  13943. var BUFFER = 'buffer';
  13944. var BYTE_LENGTH = 'byteLength';
  13945. var BYTE_OFFSET = 'byteOffset';
  13946. var $BUFFER = DESCRIPTORS ? '_b' : BUFFER;
  13947. var $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;
  13948. var $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;
  13949. // IEEE754 conversions based on https://github.com/feross/ieee754
  13950. function packIEEE754(value, mLen, nBytes) {
  13951. var buffer = new Array(nBytes);
  13952. var eLen = nBytes * 8 - mLen - 1;
  13953. var eMax = (1 << eLen) - 1;
  13954. var eBias = eMax >> 1;
  13955. var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;
  13956. var i = 0;
  13957. var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
  13958. var e, m, c;
  13959. value = abs(value);
  13960. // eslint-disable-next-line no-self-compare
  13961. if (value != value || value === Infinity) {
  13962. // eslint-disable-next-line no-self-compare
  13963. m = value != value ? 1 : 0;
  13964. e = eMax;
  13965. } else {
  13966. e = floor(log(value) / LN2);
  13967. if (value * (c = pow(2, -e)) < 1) {
  13968. e--;
  13969. c *= 2;
  13970. }
  13971. if (e + eBias >= 1) {
  13972. value += rt / c;
  13973. } else {
  13974. value += rt * pow(2, 1 - eBias);
  13975. }
  13976. if (value * c >= 2) {
  13977. e++;
  13978. c /= 2;
  13979. }
  13980. if (e + eBias >= eMax) {
  13981. m = 0;
  13982. e = eMax;
  13983. } else if (e + eBias >= 1) {
  13984. m = (value * c - 1) * pow(2, mLen);
  13985. e = e + eBias;
  13986. } else {
  13987. m = value * pow(2, eBias - 1) * pow(2, mLen);
  13988. e = 0;
  13989. }
  13990. }
  13991. for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);
  13992. e = e << mLen | m;
  13993. eLen += mLen;
  13994. for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);
  13995. buffer[--i] |= s * 128;
  13996. return buffer;
  13997. }
  13998. function unpackIEEE754(buffer, mLen, nBytes) {
  13999. var eLen = nBytes * 8 - mLen - 1;
  14000. var eMax = (1 << eLen) - 1;
  14001. var eBias = eMax >> 1;
  14002. var nBits = eLen - 7;
  14003. var i = nBytes - 1;
  14004. var s = buffer[i--];
  14005. var e = s & 127;
  14006. var m;
  14007. s >>= 7;
  14008. for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);
  14009. m = e & (1 << -nBits) - 1;
  14010. e >>= -nBits;
  14011. nBits += mLen;
  14012. for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);
  14013. if (e === 0) {
  14014. e = 1 - eBias;
  14015. } else if (e === eMax) {
  14016. return m ? NaN : s ? -Infinity : Infinity;
  14017. } else {
  14018. m = m + pow(2, mLen);
  14019. e = e - eBias;
  14020. } return (s ? -1 : 1) * m * pow(2, e - mLen);
  14021. }
  14022. function unpackI32(bytes) {
  14023. return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
  14024. }
  14025. function packI8(it) {
  14026. return [it & 0xff];
  14027. }
  14028. function packI16(it) {
  14029. return [it & 0xff, it >> 8 & 0xff];
  14030. }
  14031. function packI32(it) {
  14032. return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];
  14033. }
  14034. function packF64(it) {
  14035. return packIEEE754(it, 52, 8);
  14036. }
  14037. function packF32(it) {
  14038. return packIEEE754(it, 23, 4);
  14039. }
  14040. function addGetter(C, key, internal) {
  14041. dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });
  14042. }
  14043. function get(view, bytes, index, isLittleEndian) {
  14044. var numIndex = +index;
  14045. var intIndex = toIndex(numIndex);
  14046. if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
  14047. var store = view[$BUFFER]._b;
  14048. var start = intIndex + view[$OFFSET];
  14049. var pack = store.slice(start, start + bytes);
  14050. return isLittleEndian ? pack : pack.reverse();
  14051. }
  14052. function set(view, bytes, index, conversion, value, isLittleEndian) {
  14053. var numIndex = +index;
  14054. var intIndex = toIndex(numIndex);
  14055. if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
  14056. var store = view[$BUFFER]._b;
  14057. var start = intIndex + view[$OFFSET];
  14058. var pack = conversion(+value);
  14059. for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
  14060. }
  14061. if (!$typed.ABV) {
  14062. $ArrayBuffer = function ArrayBuffer(length) {
  14063. anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
  14064. var byteLength = toIndex(length);
  14065. this._b = arrayFill.call(new Array(byteLength), 0);
  14066. this[$LENGTH] = byteLength;
  14067. };
  14068. $DataView = function DataView(buffer, byteOffset, byteLength) {
  14069. anInstance(this, $DataView, DATA_VIEW);
  14070. anInstance(buffer, $ArrayBuffer, DATA_VIEW);
  14071. var bufferLength = buffer[$LENGTH];
  14072. var offset = toInteger(byteOffset);
  14073. if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');
  14074. byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
  14075. if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
  14076. this[$BUFFER] = buffer;
  14077. this[$OFFSET] = offset;
  14078. this[$LENGTH] = byteLength;
  14079. };
  14080. if (DESCRIPTORS) {
  14081. addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
  14082. addGetter($DataView, BUFFER, '_b');
  14083. addGetter($DataView, BYTE_LENGTH, '_l');
  14084. addGetter($DataView, BYTE_OFFSET, '_o');
  14085. }
  14086. redefineAll($DataView[PROTOTYPE], {
  14087. getInt8: function getInt8(byteOffset) {
  14088. return get(this, 1, byteOffset)[0] << 24 >> 24;
  14089. },
  14090. getUint8: function getUint8(byteOffset) {
  14091. return get(this, 1, byteOffset)[0];
  14092. },
  14093. getInt16: function getInt16(byteOffset /* , littleEndian */) {
  14094. var bytes = get(this, 2, byteOffset, arguments[1]);
  14095. return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
  14096. },
  14097. getUint16: function getUint16(byteOffset /* , littleEndian */) {
  14098. var bytes = get(this, 2, byteOffset, arguments[1]);
  14099. return bytes[1] << 8 | bytes[0];
  14100. },
  14101. getInt32: function getInt32(byteOffset /* , littleEndian */) {
  14102. return unpackI32(get(this, 4, byteOffset, arguments[1]));
  14103. },
  14104. getUint32: function getUint32(byteOffset /* , littleEndian */) {
  14105. return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
  14106. },
  14107. getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
  14108. return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
  14109. },
  14110. getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
  14111. return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
  14112. },
  14113. setInt8: function setInt8(byteOffset, value) {
  14114. set(this, 1, byteOffset, packI8, value);
  14115. },
  14116. setUint8: function setUint8(byteOffset, value) {
  14117. set(this, 1, byteOffset, packI8, value);
  14118. },
  14119. setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
  14120. set(this, 2, byteOffset, packI16, value, arguments[2]);
  14121. },
  14122. setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
  14123. set(this, 2, byteOffset, packI16, value, arguments[2]);
  14124. },
  14125. setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
  14126. set(this, 4, byteOffset, packI32, value, arguments[2]);
  14127. },
  14128. setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
  14129. set(this, 4, byteOffset, packI32, value, arguments[2]);
  14130. },
  14131. setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
  14132. set(this, 4, byteOffset, packF32, value, arguments[2]);
  14133. },
  14134. setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
  14135. set(this, 8, byteOffset, packF64, value, arguments[2]);
  14136. }
  14137. });
  14138. } else {
  14139. if (!fails(function () {
  14140. $ArrayBuffer(1);
  14141. }) || !fails(function () {
  14142. new $ArrayBuffer(-1); // eslint-disable-line no-new
  14143. }) || fails(function () {
  14144. new $ArrayBuffer(); // eslint-disable-line no-new
  14145. new $ArrayBuffer(1.5); // eslint-disable-line no-new
  14146. new $ArrayBuffer(NaN); // eslint-disable-line no-new
  14147. return $ArrayBuffer.name != ARRAY_BUFFER;
  14148. })) {
  14149. $ArrayBuffer = function ArrayBuffer(length) {
  14150. anInstance(this, $ArrayBuffer);
  14151. return new BaseBuffer(toIndex(length));
  14152. };
  14153. var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
  14154. for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {
  14155. if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);
  14156. }
  14157. if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;
  14158. }
  14159. // iOS Safari 7.x bug
  14160. var view = new $DataView(new $ArrayBuffer(2));
  14161. var $setInt8 = $DataView[PROTOTYPE].setInt8;
  14162. view.setInt8(0, 2147483648);
  14163. view.setInt8(1, 2147483649);
  14164. if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {
  14165. setInt8: function setInt8(byteOffset, value) {
  14166. $setInt8.call(this, byteOffset, value << 24 >> 24);
  14167. },
  14168. setUint8: function setUint8(byteOffset, value) {
  14169. $setInt8.call(this, byteOffset, value << 24 >> 24);
  14170. }
  14171. }, true);
  14172. }
  14173. setToStringTag($ArrayBuffer, ARRAY_BUFFER);
  14174. setToStringTag($DataView, DATA_VIEW);
  14175. hide($DataView[PROTOTYPE], $typed.VIEW, true);
  14176. exports[ARRAY_BUFFER] = $ArrayBuffer;
  14177. exports[DATA_VIEW] = $DataView;
  14178. /***/ }),
  14179. /* 151 */
  14180. /***/ (function(module, exports, __webpack_require__) {
  14181. var global = __webpack_require__(3);
  14182. var navigator = global.navigator;
  14183. module.exports = navigator && navigator.userAgent || '';
  14184. /***/ }),
  14185. /* 152 */
  14186. /***/ (function(module, exports, __webpack_require__) {
  14187. var global = __webpack_require__(3);
  14188. var core = __webpack_require__(33);
  14189. var LIBRARY = __webpack_require__(50);
  14190. var wksExt = __webpack_require__(227);
  14191. var defineProperty = __webpack_require__(10).f;
  14192. module.exports = function (name) {
  14193. var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
  14194. if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
  14195. };
  14196. /***/ }),
  14197. /* 153 */
  14198. /***/ (function(module, exports, __webpack_require__) {
  14199. var classof = __webpack_require__(71);
  14200. var ITERATOR = __webpack_require__(6)('iterator');
  14201. var Iterators = __webpack_require__(63);
  14202. module.exports = __webpack_require__(33).getIteratorMethod = function (it) {
  14203. if (it != undefined) return it[ITERATOR]
  14204. || it['@@iterator']
  14205. || Iterators[classof(it)];
  14206. };
  14207. /***/ }),
  14208. /* 154 */
  14209. /***/ (function(module, exports, __webpack_require__) {
  14210. "use strict";
  14211. var addToUnscopables = __webpack_require__(43);
  14212. var step = __webpack_require__(211);
  14213. var Iterators = __webpack_require__(63);
  14214. var toIObject = __webpack_require__(24);
  14215. // 22.1.3.4 Array.prototype.entries()
  14216. // 22.1.3.13 Array.prototype.keys()
  14217. // 22.1.3.29 Array.prototype.values()
  14218. // 22.1.3.30 Array.prototype[@@iterator]()
  14219. module.exports = __webpack_require__(138)(Array, 'Array', function (iterated, kind) {
  14220. this._t = toIObject(iterated); // target
  14221. this._i = 0; // next index
  14222. this._k = kind; // kind
  14223. // 22.1.5.2.1 %ArrayIteratorPrototype%.next()
  14224. }, function () {
  14225. var O = this._t;
  14226. var kind = this._k;
  14227. var index = this._i++;
  14228. if (!O || index >= O.length) {
  14229. this._t = undefined;
  14230. return step(1);
  14231. }
  14232. if (kind == 'keys') return step(0, index);
  14233. if (kind == 'values') return step(0, O[index]);
  14234. return step(0, [index, O[index]]);
  14235. }, 'values');
  14236. // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
  14237. Iterators.Arguments = Iterators.Array;
  14238. addToUnscopables('keys');
  14239. addToUnscopables('values');
  14240. addToUnscopables('entries');
  14241. /***/ }),
  14242. /* 155 */
  14243. /***/ (function(module, exports, __webpack_require__) {
  14244. "use strict";
  14245. /* WEBPACK VAR INJECTION */(function(process) {/**
  14246. * Copyright (c) 2014-present, Facebook, Inc.
  14247. *
  14248. * This source code is licensed under the MIT license found in the
  14249. * LICENSE file in the root directory of this source tree.
  14250. *
  14251. */
  14252. var emptyFunction = __webpack_require__(74);
  14253. /**
  14254. * Similar to invariant but only logs a warning if the condition is not met.
  14255. * This can be used to log issues in development environments in critical
  14256. * paths. Removing the logging code for production environments will keep the
  14257. * same logic and follow the same code paths.
  14258. */
  14259. var warning = emptyFunction;
  14260. if (process.env.NODE_ENV !== 'production') {
  14261. var printWarning = function printWarning(format) {
  14262. for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  14263. args[_key - 1] = arguments[_key];
  14264. }
  14265. var argIndex = 0;
  14266. var message = 'Warning: ' + format.replace(/%s/g, function () {
  14267. return args[argIndex++];
  14268. });
  14269. if (typeof console !== 'undefined') {
  14270. console.error(message);
  14271. }
  14272. try {
  14273. // --- Welcome to debugging React ---
  14274. // This error was thrown as a convenience so that you can use this stack
  14275. // to find the callsite that caused this warning to fire.
  14276. throw new Error(message);
  14277. } catch (x) {}
  14278. };
  14279. warning = function warning(condition, format) {
  14280. if (format === undefined) {
  14281. throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
  14282. }
  14283. if (format.indexOf('Failed Composite propType: ') === 0) {
  14284. return; // Ignore CompositeComponent proptype check.
  14285. }
  14286. if (!condition) {
  14287. for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
  14288. args[_key2 - 2] = arguments[_key2];
  14289. }
  14290. printWarning.apply(undefined, [format].concat(args));
  14291. }
  14292. };
  14293. }
  14294. module.exports = warning;
  14295. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)))
  14296. /***/ }),
  14297. /* 156 */
  14298. /***/ (function(module, exports) {
  14299. module.exports = invert;
  14300. /**
  14301. * Inverts a mat4
  14302. *
  14303. * @param {mat4} out the receiving matrix
  14304. * @param {mat4} a the source matrix
  14305. * @returns {mat4} out
  14306. */
  14307. function invert(out, a) {
  14308. var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],
  14309. a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],
  14310. a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],
  14311. a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],
  14312. b00 = a00 * a11 - a01 * a10,
  14313. b01 = a00 * a12 - a02 * a10,
  14314. b02 = a00 * a13 - a03 * a10,
  14315. b03 = a01 * a12 - a02 * a11,
  14316. b04 = a01 * a13 - a03 * a11,
  14317. b05 = a02 * a13 - a03 * a12,
  14318. b06 = a20 * a31 - a21 * a30,
  14319. b07 = a20 * a32 - a22 * a30,
  14320. b08 = a20 * a33 - a23 * a30,
  14321. b09 = a21 * a32 - a22 * a31,
  14322. b10 = a21 * a33 - a23 * a31,
  14323. b11 = a22 * a33 - a23 * a32,
  14324. // Calculate the determinant
  14325. det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
  14326. if (!det) {
  14327. return null;
  14328. }
  14329. det = 1.0 / det;
  14330. out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
  14331. out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
  14332. out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
  14333. out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
  14334. out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
  14335. out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
  14336. out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
  14337. out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
  14338. out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
  14339. out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
  14340. out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
  14341. out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
  14342. out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
  14343. out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
  14344. out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
  14345. out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
  14346. return out;
  14347. };
  14348. /***/ }),
  14349. /* 157 */
  14350. /***/ (function(module, exports) {
  14351. module.exports = rotateX;
  14352. /**
  14353. * Rotates a matrix by the given angle around the X axis
  14354. *
  14355. * @param {mat4} out the receiving matrix
  14356. * @param {mat4} a the matrix to rotate
  14357. * @param {Number} rad the angle to rotate the matrix by
  14358. * @returns {mat4} out
  14359. */
  14360. function rotateX(out, a, rad) {
  14361. var s = Math.sin(rad),
  14362. c = Math.cos(rad),
  14363. a10 = a[4],
  14364. a11 = a[5],
  14365. a12 = a[6],
  14366. a13 = a[7],
  14367. a20 = a[8],
  14368. a21 = a[9],
  14369. a22 = a[10],
  14370. a23 = a[11];
  14371. if (a !== out) { // If the source and destination differ, copy the unchanged rows
  14372. out[0] = a[0];
  14373. out[1] = a[1];
  14374. out[2] = a[2];
  14375. out[3] = a[3];
  14376. out[12] = a[12];
  14377. out[13] = a[13];
  14378. out[14] = a[14];
  14379. out[15] = a[15];
  14380. }
  14381. // Perform axis-specific matrix multiplication
  14382. out[4] = a10 * c + a20 * s;
  14383. out[5] = a11 * c + a21 * s;
  14384. out[6] = a12 * c + a22 * s;
  14385. out[7] = a13 * c + a23 * s;
  14386. out[8] = a20 * c - a10 * s;
  14387. out[9] = a21 * c - a11 * s;
  14388. out[10] = a22 * c - a12 * s;
  14389. out[11] = a23 * c - a13 * s;
  14390. return out;
  14391. };
  14392. /***/ }),
  14393. /* 158 */
  14394. /***/ (function(module, exports) {
  14395. module.exports = rotateZ;
  14396. /**
  14397. * Rotates a matrix by the given angle around the Z axis
  14398. *
  14399. * @param {mat4} out the receiving matrix
  14400. * @param {mat4} a the matrix to rotate
  14401. * @param {Number} rad the angle to rotate the matrix by
  14402. * @returns {mat4} out
  14403. */
  14404. function rotateZ(out, a, rad) {
  14405. var s = Math.sin(rad),
  14406. c = Math.cos(rad),
  14407. a00 = a[0],
  14408. a01 = a[1],
  14409. a02 = a[2],
  14410. a03 = a[3],
  14411. a10 = a[4],
  14412. a11 = a[5],
  14413. a12 = a[6],
  14414. a13 = a[7];
  14415. if (a !== out) { // If the source and destination differ, copy the unchanged last row
  14416. out[8] = a[8];
  14417. out[9] = a[9];
  14418. out[10] = a[10];
  14419. out[11] = a[11];
  14420. out[12] = a[12];
  14421. out[13] = a[13];
  14422. out[14] = a[14];
  14423. out[15] = a[15];
  14424. }
  14425. // Perform axis-specific matrix multiplication
  14426. out[0] = a00 * c + a10 * s;
  14427. out[1] = a01 * c + a11 * s;
  14428. out[2] = a02 * c + a12 * s;
  14429. out[3] = a03 * c + a13 * s;
  14430. out[4] = a10 * c - a00 * s;
  14431. out[5] = a11 * c - a01 * s;
  14432. out[6] = a12 * c - a02 * s;
  14433. out[7] = a13 * c - a03 * s;
  14434. return out;
  14435. };
  14436. /***/ }),
  14437. /* 159 */
  14438. /***/ (function(module, exports) {
  14439. module.exports = add
  14440. /**
  14441. * Adds two vec2's
  14442. *
  14443. * @param {vec2} out the receiving vector
  14444. * @param {vec2} a the first operand
  14445. * @param {vec2} b the second operand
  14446. * @returns {vec2} out
  14447. */
  14448. function add(out, a, b) {
  14449. out[0] = a[0] + b[0]
  14450. out[1] = a[1] + b[1]
  14451. return out
  14452. }
  14453. /***/ }),
  14454. /* 160 */
  14455. /***/ (function(module, exports) {
  14456. module.exports = negate
  14457. /**
  14458. * Negates the components of a vec2
  14459. *
  14460. * @param {vec2} out the receiving vector
  14461. * @param {vec2} a vector to negate
  14462. * @returns {vec2} out
  14463. */
  14464. function negate(out, a) {
  14465. out[0] = -a[0]
  14466. out[1] = -a[1]
  14467. return out
  14468. }
  14469. /***/ }),
  14470. /* 161 */
  14471. /***/ (function(module, exports) {
  14472. module.exports = scale
  14473. /**
  14474. * Scales a vec4 by a scalar number
  14475. *
  14476. * @param {vec4} out the receiving vector
  14477. * @param {vec4} a the vector to scale
  14478. * @param {Number} b amount to scale the vector by
  14479. * @returns {vec4} out
  14480. */
  14481. function scale (out, a, b) {
  14482. out[0] = a[0] * b
  14483. out[1] = a[1] * b
  14484. out[2] = a[2] * b
  14485. out[3] = a[3] * b
  14486. return out
  14487. }
  14488. /***/ }),
  14489. /* 162 */
  14490. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  14491. "use strict";
  14492. /* harmony export (immutable) */ __webpack_exports__["a"] = registerShaderModules;
  14493. /* harmony export (immutable) */ __webpack_exports__["b"] = setDefaultShaderModules;
  14494. /* harmony export (immutable) */ __webpack_exports__["c"] = getShaderModule;
  14495. /* harmony export (immutable) */ __webpack_exports__["d"] = resolveModules;
  14496. /* unused harmony export getShaderDependencies */
  14497. /* unused harmony export getDependencyGraph */
  14498. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert__ = __webpack_require__(1);
  14499. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_assert__);
  14500. var shaderModules = {};
  14501. var defaultShaderModules = [];
  14502. /**
  14503. * Registers an array of shader modules
  14504. * @param {Object[]} shaderModuleList - Array of shader modules
  14505. */
  14506. function registerShaderModules(shaderModuleList) {
  14507. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  14508. _ref$ignoreMultipleRe = _ref.ignoreMultipleRegistrations,
  14509. ignoreMultipleRegistrations = _ref$ignoreMultipleRe === undefined ? false : _ref$ignoreMultipleRe;
  14510. var _iteratorNormalCompletion = true;
  14511. var _didIteratorError = false;
  14512. var _iteratorError = undefined;
  14513. try {
  14514. for (var _iterator = shaderModuleList[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  14515. var shaderModule = _step.value;
  14516. registerShaderModule(shaderModule, { ignoreMultipleRegistrations: ignoreMultipleRegistrations });
  14517. }
  14518. } catch (err) {
  14519. _didIteratorError = true;
  14520. _iteratorError = err;
  14521. } finally {
  14522. try {
  14523. if (!_iteratorNormalCompletion && _iterator.return) {
  14524. _iterator.return();
  14525. }
  14526. } finally {
  14527. if (_didIteratorError) {
  14528. throw _iteratorError;
  14529. }
  14530. }
  14531. }
  14532. }
  14533. /**
  14534. * Registers an array of default shader modules. These will be concatenated
  14535. * automatically at the end of any shader module list passed to
  14536. * `assembleShaders` (plus `resolveModules` and `getShaderDependencies`)
  14537. * @param {Object[]} modules - Array of shader modules
  14538. */
  14539. function setDefaultShaderModules(modules) {
  14540. defaultShaderModules = modules;
  14541. }
  14542. // Looks up a moduleName among registered modules and returns definition.
  14543. // If "inline" module, returns it directly
  14544. function getShaderModule(moduleOrName) {
  14545. // Check if "inline" module
  14546. if (typeof moduleOrName !== 'string') {
  14547. var _shaderModule = moduleOrName;
  14548. __WEBPACK_IMPORTED_MODULE_0_assert___default()(typeof _shaderModule.name === 'string');
  14549. registerShaderModule(_shaderModule, { ignoreMultipleRegistrations: true });
  14550. return _shaderModule;
  14551. }
  14552. // Look up module
  14553. var shaderModule = shaderModules[moduleOrName];
  14554. if (!shaderModule) {
  14555. // console.log(`${moduleOrName} not in registered modules:`, shaderModules);
  14556. __WEBPACK_IMPORTED_MODULE_0_assert___default()(false, 'Unknown shader module ' + moduleOrName);
  14557. }
  14558. return shaderModule;
  14559. }
  14560. // registers any supplied modules and returns a list of module names
  14561. function resolveModules(modules) {
  14562. var moduleNames = modules.map(function (module) {
  14563. if (typeof module !== 'string') {
  14564. registerShaderModules([module], { ignoreMultipleRegistrations: true });
  14565. return module.name;
  14566. }
  14567. return module;
  14568. });
  14569. return getShaderDependencies(moduleNames);
  14570. }
  14571. /**
  14572. * Takes a list of shader module names and returns a new list of
  14573. * shader module names that includes all dependencies, sorted so
  14574. * that modules that are dependencies of other modules come first.
  14575. *
  14576. * If the shader glsl code from the returned modules is concatenated
  14577. * in the reverse order, it is guaranteed that all functions be resolved and
  14578. * that all function and variable definitions come before use.
  14579. *
  14580. * @param {String[]} modules - Array of modules (inline modules or module names)
  14581. * @return {String[]} - Array of modules
  14582. */
  14583. function getShaderDependencies(modules) {
  14584. modules = modules.concat(defaultShaderModules);
  14585. var result = {};
  14586. getDependencyGraph({
  14587. modules: modules,
  14588. level: 0,
  14589. result: result
  14590. });
  14591. // Return a reverse sort so that dependencies come before the modules that use them
  14592. return Object.keys(result).sort(function (a, b) {
  14593. return result[b] - result[a];
  14594. });
  14595. }
  14596. /**
  14597. * Recursively checks module dpendencies to calculate dependency
  14598. * level of each module.
  14599. *
  14600. * @param {String[]} modules - Array of modules
  14601. * @param {Number} level - Current level
  14602. * @return {result} - Map of module name to its level
  14603. */
  14604. // Adds another level of dependencies to the result map
  14605. function getDependencyGraph(_ref2) {
  14606. var modules = _ref2.modules,
  14607. level = _ref2.level,
  14608. result = _ref2.result;
  14609. if (level >= 5) {
  14610. throw new Error('Possible loop in shader dependency graph');
  14611. }
  14612. // Update level on all current modules
  14613. var _iteratorNormalCompletion2 = true;
  14614. var _didIteratorError2 = false;
  14615. var _iteratorError2 = undefined;
  14616. try {
  14617. for (var _iterator2 = modules[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  14618. var moduleOrName = _step2.value;
  14619. var shaderModule = getShaderModule(moduleOrName);
  14620. if (result[shaderModule.name] === undefined || result[shaderModule.name] < level) {
  14621. result[shaderModule.name] = level;
  14622. }
  14623. }
  14624. // Recurse
  14625. } catch (err) {
  14626. _didIteratorError2 = true;
  14627. _iteratorError2 = err;
  14628. } finally {
  14629. try {
  14630. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  14631. _iterator2.return();
  14632. }
  14633. } finally {
  14634. if (_didIteratorError2) {
  14635. throw _iteratorError2;
  14636. }
  14637. }
  14638. }
  14639. var _iteratorNormalCompletion3 = true;
  14640. var _didIteratorError3 = false;
  14641. var _iteratorError3 = undefined;
  14642. try {
  14643. for (var _iterator3 = modules[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  14644. var _moduleOrName = _step3.value;
  14645. var _shaderModule2 = getShaderModule(_moduleOrName);
  14646. if (_shaderModule2.dependencies) {
  14647. getDependencyGraph({
  14648. modules: _shaderModule2.dependencies,
  14649. level: level + 1,
  14650. result: result
  14651. });
  14652. }
  14653. }
  14654. } catch (err) {
  14655. _didIteratorError3 = true;
  14656. _iteratorError3 = err;
  14657. } finally {
  14658. try {
  14659. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  14660. _iterator3.return();
  14661. }
  14662. } finally {
  14663. if (_didIteratorError3) {
  14664. throw _iteratorError3;
  14665. }
  14666. }
  14667. }
  14668. return result;
  14669. }
  14670. // PRIVATE API
  14671. function parseDeprecationDefinitions() {
  14672. var deprecations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  14673. deprecations.forEach(function (def) {
  14674. switch (def.type) {
  14675. case 'function':
  14676. def.regex = new RegExp('\\b' + def.old + '\\(');
  14677. break;
  14678. default:
  14679. def.regex = new RegExp(def.type + ' ' + def.old + ';');
  14680. }
  14681. });
  14682. return deprecations;
  14683. }
  14684. function registerShaderModule(shaderModule, _ref3) {
  14685. var _ref3$ignoreMultipleR = _ref3.ignoreMultipleRegistrations,
  14686. ignoreMultipleRegistrations = _ref3$ignoreMultipleR === undefined ? false : _ref3$ignoreMultipleR;
  14687. __WEBPACK_IMPORTED_MODULE_0_assert___default()(shaderModule.name, 'shader module has no name');
  14688. if (!ignoreMultipleRegistrations && shaderModules[shaderModule.name]) {
  14689. // TODO - instead verify that definition is not changing...
  14690. throw new Error('shader module ' + shaderModule.name + ' already registered');
  14691. }
  14692. shaderModules[shaderModule.name] = shaderModule;
  14693. shaderModule.dependencies = shaderModule.dependencies || [];
  14694. shaderModule.deprecations = parseDeprecationDefinitions(shaderModule.deprecations);
  14695. }
  14696. //# sourceMappingURL=shader-modules.js.map
  14697. /***/ }),
  14698. /* 163 */
  14699. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  14700. "use strict";
  14701. /* harmony export (immutable) */ __webpack_exports__["b"] = getGLTypeFromTypedArray;
  14702. /* harmony export (immutable) */ __webpack_exports__["a"] = getTypedArrayFromGLType;
  14703. /* harmony export (immutable) */ __webpack_exports__["c"] = flipRows;
  14704. /* harmony export (immutable) */ __webpack_exports__["d"] = scalePixels;
  14705. // GL Constants
  14706. var GL_BYTE = 0x1400;
  14707. var GL_UNSIGNED_BYTE = 0x1401;
  14708. var GL_SHORT = 0x1402;
  14709. var GL_UNSIGNED_SHORT = 0x1403;
  14710. var GL_INT = 0x1404;
  14711. var GL_UNSIGNED_INT = 0x1405;
  14712. var GL_FLOAT = 0x1406;
  14713. var GL_UNSIGNED_SHORT_4_4_4_4 = 0x8033;
  14714. var GL_UNSIGNED_SHORT_5_5_5_1 = 0x8034;
  14715. var GL_UNSIGNED_SHORT_5_6_5 = 0x8363;
  14716. var ERR_TYPE_DEDUCTION = 'Failed to deduce GL constant from typed array';
  14717. // Converts TYPED ARRAYS to corresponding GL constant
  14718. // Used to auto deduce gl parameter types
  14719. function getGLTypeFromTypedArray(arrayOrType) {
  14720. // If typed array, look up constructor
  14721. var type = ArrayBuffer.isView(arrayOrType) ? arrayOrType.constructor : arrayOrType;
  14722. switch (type) {
  14723. case Float32Array:
  14724. return GL_FLOAT;
  14725. case Uint16Array:
  14726. return GL_UNSIGNED_SHORT;
  14727. case Uint32Array:
  14728. return GL_UNSIGNED_INT;
  14729. case Uint8Array:
  14730. return GL_UNSIGNED_BYTE;
  14731. case Uint8ClampedArray:
  14732. return GL_UNSIGNED_BYTE;
  14733. case Int8Array:
  14734. return GL_BYTE;
  14735. case Int16Array:
  14736. return GL_SHORT;
  14737. case Int32Array:
  14738. return GL_INT;
  14739. default:
  14740. throw new Error(ERR_TYPE_DEDUCTION);
  14741. }
  14742. }
  14743. // Converts GL constant to corresponding TYPED ARRAY
  14744. // Used to auto deduce gl parameter types
  14745. /* eslint-disable complexity */
  14746. function getTypedArrayFromGLType(glType) {
  14747. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  14748. _ref$clamped = _ref.clamped,
  14749. clamped = _ref$clamped === undefined ? true : _ref$clamped;
  14750. // Sorted in some order of likelihood to reduce amount of comparisons
  14751. switch (glType) {
  14752. case GL_FLOAT:
  14753. return Float32Array;
  14754. case GL_UNSIGNED_SHORT:
  14755. case GL_UNSIGNED_SHORT_5_6_5:
  14756. case GL_UNSIGNED_SHORT_4_4_4_4:
  14757. case GL_UNSIGNED_SHORT_5_5_5_1:
  14758. return Uint16Array;
  14759. case GL_UNSIGNED_INT:
  14760. return Uint32Array;
  14761. case GL_UNSIGNED_BYTE:
  14762. return clamped ? Uint8ClampedArray : Uint8Array;
  14763. case GL_BYTE:
  14764. return Int8Array;
  14765. case GL_SHORT:
  14766. return Int16Array;
  14767. case GL_INT:
  14768. return Int32Array;
  14769. default:
  14770. throw new Error('Failed to deduce typed array type from GL constant');
  14771. }
  14772. }
  14773. /* eslint-enable complexity */
  14774. // Flip rows (can be used on arrays returned from `Framebuffer.readPixels`)
  14775. // https://stackoverflow.com/questions/41969562/
  14776. // how-can-i-flip-the-result-of-webglrenderingcontext-readpixels
  14777. function flipRows(_ref2) {
  14778. var data = _ref2.data,
  14779. width = _ref2.width,
  14780. height = _ref2.height,
  14781. _ref2$bytesPerPixel = _ref2.bytesPerPixel,
  14782. bytesPerPixel = _ref2$bytesPerPixel === undefined ? 4 : _ref2$bytesPerPixel,
  14783. temp = _ref2.temp;
  14784. var bytesPerRow = width * bytesPerPixel;
  14785. // make a temp buffer to hold one row
  14786. temp = temp || new Uint8Array(bytesPerRow);
  14787. for (var y = 0; y < height / 2; ++y) {
  14788. var topOffset = y * bytesPerRow;
  14789. var bottomOffset = (height - y - 1) * bytesPerRow;
  14790. // make copy of a row on the top half
  14791. temp.set(data.subarray(topOffset, topOffset + bytesPerRow));
  14792. // copy a row from the bottom half to the top
  14793. data.copyWithin(topOffset, bottomOffset, bottomOffset + bytesPerRow);
  14794. // copy the copy of the top half row to the bottom half
  14795. data.set(temp, bottomOffset);
  14796. }
  14797. }
  14798. function scalePixels(_ref3) {
  14799. var data = _ref3.data,
  14800. width = _ref3.width,
  14801. height = _ref3.height;
  14802. var newWidth = Math.round(width / 2);
  14803. var newHeight = Math.round(height / 2);
  14804. var newData = new Uint8Array(newWidth * newHeight * 4);
  14805. for (var y = 0; y < newHeight; y++) {
  14806. for (var x = 0; x < newWidth; x++) {
  14807. for (var c = 0; c < 4; c++) {
  14808. newData[(y * newWidth + x) * 4 + c] = data[(y * 2 * width + x * 2) * 4 + c];
  14809. }
  14810. }
  14811. }
  14812. return { data: newData, width: newWidth, height: newHeight };
  14813. }
  14814. //# sourceMappingURL=typed-array-utils.js.map
  14815. /***/ }),
  14816. /* 164 */
  14817. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  14818. "use strict";
  14819. /* unused harmony export clone */
  14820. /* unused harmony export deepEqual */
  14821. /* unused harmony export GL_STATE_SETTERS */
  14822. /* harmony export (immutable) */ __webpack_exports__["a"] = trackContextState;
  14823. /* harmony export (immutable) */ __webpack_exports__["b"] = pushContextState;
  14824. /* harmony export (immutable) */ __webpack_exports__["c"] = popContextState;
  14825. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants__ = __webpack_require__(46);
  14826. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__set_parameters__ = __webpack_require__(266);
  14827. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__polyfill_context__ = __webpack_require__(265);
  14828. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert__ = __webpack_require__(1);
  14829. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_assert__);
  14830. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  14831. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  14832. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  14833. // Support for listening to context state changes and intercepting state queries
  14834. //
  14835. // NOTE: this system does not handle buffer bindings
  14836. var clone = function clone(x) {
  14837. return Array.isArray(x) || ArrayBuffer.isView(x) ? x.slice() : x;
  14838. };
  14839. var deepEqual = function deepEqual(x, y) {
  14840. var isArrayX = Array.isArray(x) || ArrayBuffer.isView(x);
  14841. var isArrayY = Array.isArray(y) || ArrayBuffer.isView(y);
  14842. if (isArrayX && isArrayY && x.length === y.length) {
  14843. for (var i = 0; i < x.length; ++i) {
  14844. if (x[i] !== y[i]) {
  14845. return false;
  14846. }
  14847. }
  14848. return true;
  14849. }
  14850. return x === y;
  14851. };
  14852. // interceptors for WEBGL FUNCTIONS that set WebGLRenderingContext state
  14853. // These "setters" map functions to gl parameters
  14854. var GL_STATE_SETTERS = {
  14855. // GENERIC SETTERS
  14856. enable: function enable(update, cap) {
  14857. return update(_defineProperty({}, cap, true));
  14858. },
  14859. disable: function disable(update, cap) {
  14860. return update(_defineProperty({}, cap, false));
  14861. },
  14862. pixelStorei: function pixelStorei(update, pname, param) {
  14863. return update(_defineProperty({}, pname, param));
  14864. },
  14865. hint: function hint(update, pname, _hint) {
  14866. return update(_defineProperty({}, pname, _hint));
  14867. },
  14868. // SPECIFIC SETTERS
  14869. bindFramebuffer: function bindFramebuffer(update, target, fb) {
  14870. var _update5;
  14871. switch (target) {
  14872. case __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRAMEBUFFER:
  14873. return update((_update5 = {}, _defineProperty(_update5, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DRAW_FRAMEBUFFER_BINDING, fb), _defineProperty(_update5, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].READ_FRAMEBUFFER_BINDING, fb), _update5));
  14874. case __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DRAW_FRAMEBUFFER:
  14875. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DRAW_FRAMEBUFFER_BINDING, fb));
  14876. case __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].READ_FRAMEBUFFER:
  14877. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].READ_FRAMEBUFFER_BINDING, fb));
  14878. default:
  14879. return null;
  14880. }
  14881. },
  14882. blendColor: function blendColor(update, r, g, b, a) {
  14883. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_COLOR, new Float32Array([r, g, b, a])));
  14884. },
  14885. blendEquation: function blendEquation(update, mode) {
  14886. var _update9;
  14887. return update((_update9 = {}, _defineProperty(_update9, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_RGB, mode), _defineProperty(_update9, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_ALPHA, mode), _update9));
  14888. },
  14889. blendEquationSeparate: function blendEquationSeparate(update, modeRGB, modeAlpha) {
  14890. var _update10;
  14891. return update((_update10 = {}, _defineProperty(_update10, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_RGB, modeRGB), _defineProperty(_update10, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_ALPHA, modeAlpha), _update10));
  14892. },
  14893. blendFunc: function blendFunc(update, src, dst) {
  14894. var _update11;
  14895. return update((_update11 = {}, _defineProperty(_update11, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_RGB, src), _defineProperty(_update11, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_RGB, dst), _defineProperty(_update11, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_ALPHA, src), _defineProperty(_update11, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_ALPHA, dst), _update11));
  14896. },
  14897. blendFuncSeparate: function blendFuncSeparate(update, srcRGB, dstRGB, srcAlpha, dstAlpha) {
  14898. var _update12;
  14899. return update((_update12 = {}, _defineProperty(_update12, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_RGB, srcRGB), _defineProperty(_update12, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_RGB, dstRGB), _defineProperty(_update12, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_ALPHA, srcAlpha), _defineProperty(_update12, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_ALPHA, dstAlpha), _update12));
  14900. },
  14901. clearColor: function clearColor(update, r, g, b, a) {
  14902. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].COLOR_CLEAR_VALUE, new Float32Array([r, g, b, a])));
  14903. },
  14904. clearDepth: function clearDepth(update, depth) {
  14905. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_CLEAR_VALUE, depth));
  14906. },
  14907. clearStencil: function clearStencil(update, s) {
  14908. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_CLEAR_VALUE, s));
  14909. },
  14910. colorMask: function colorMask(update, r, g, b, a) {
  14911. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].COLOR_WRITEMASK, [r, g, b, a]));
  14912. },
  14913. cullFace: function cullFace(update, mode) {
  14914. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].CULL_FACE_MODE, mode));
  14915. },
  14916. depthFunc: function depthFunc(update, func) {
  14917. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_FUNC, func));
  14918. },
  14919. depthRange: function depthRange(update, zNear, zFar) {
  14920. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_RANGE, new Float32Array([zNear, zFar])));
  14921. },
  14922. depthMask: function depthMask(update, mask) {
  14923. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_WRITEMASK, mask));
  14924. },
  14925. frontFace: function frontFace(update, face) {
  14926. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT_FACE, face));
  14927. },
  14928. lineWidth: function lineWidth(update, width) {
  14929. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].LINE_WIDTH, width));
  14930. },
  14931. polygonOffset: function polygonOffset(update, factor, units) {
  14932. var _update23;
  14933. return update((_update23 = {}, _defineProperty(_update23, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_FACTOR, factor), _defineProperty(_update23, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_UNITS, units), _update23));
  14934. },
  14935. sampleCoverage: function sampleCoverage(update, value, invert) {
  14936. var _update24;
  14937. return update((_update24 = {}, _defineProperty(_update24, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_COVERAGE_VALUE, value), _defineProperty(_update24, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_COVERAGE_INVERT, invert), _update24));
  14938. },
  14939. scissor: function scissor(update, x, y, width, height) {
  14940. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SCISSOR_BOX, new Int32Array([x, y, width, height])));
  14941. },
  14942. stencilMask: function stencilMask(update, mask) {
  14943. var _update26;
  14944. return update((_update26 = {}, _defineProperty(_update26, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_WRITEMASK, mask), _defineProperty(_update26, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_WRITEMASK, mask), _update26));
  14945. },
  14946. stencilMaskSeparate: function stencilMaskSeparate(update, face, mask) {
  14947. return update(_defineProperty({}, face === __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT ? __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_WRITEMASK : __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_WRITEMASK, mask));
  14948. },
  14949. stencilFunc: function stencilFunc(update, func, ref, mask) {
  14950. var _update28;
  14951. return update((_update28 = {}, _defineProperty(_update28, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FUNC, func), _defineProperty(_update28, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_REF, ref), _defineProperty(_update28, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_VALUE_MASK, mask), _defineProperty(_update28, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FUNC, func), _defineProperty(_update28, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_REF, ref), _defineProperty(_update28, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_VALUE_MASK, mask), _update28));
  14952. },
  14953. stencilFuncSeparate: function stencilFuncSeparate(update, face, func, ref, mask) {
  14954. var _update29;
  14955. return update((_update29 = {}, _defineProperty(_update29, face === __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT ? __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FUNC : __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FUNC, func), _defineProperty(_update29, face === __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT ? __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_REF : __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_REF, ref), _defineProperty(_update29, face === __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT ? __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_VALUE_MASK : __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_VALUE_MASK, mask), _update29));
  14956. },
  14957. stencilOp: function stencilOp(update, fail, zfail, zpass) {
  14958. var _update30;
  14959. return update((_update30 = {}, _defineProperty(_update30, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FAIL, fail), _defineProperty(_update30, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_FAIL, zfail), _defineProperty(_update30, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_PASS, zpass), _defineProperty(_update30, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FAIL, fail), _defineProperty(_update30, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_FAIL, zfail), _defineProperty(_update30, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_PASS, zpass), _update30));
  14960. },
  14961. stencilOpSeparate: function stencilOpSeparate(update, face, fail, zfail, zpass) {
  14962. var _update31;
  14963. return update((_update31 = {}, _defineProperty(_update31, face === __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT ? __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FAIL : __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FAIL, fail), _defineProperty(_update31, face === __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT ? __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_FAIL : __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_FAIL, zfail), _defineProperty(_update31, face === __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT ? __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_PASS : __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_PASS, zpass), _update31));
  14964. },
  14965. viewport: function viewport(update, x, y, width, height) {
  14966. return update(_defineProperty({}, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].VIEWPORT, new Int32Array([x, y, width, height])));
  14967. }
  14968. };
  14969. // HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT
  14970. // Overrides a WebGLRenderingContext state "getter" function
  14971. // to return values directly from cache
  14972. function installGetterOverride(gl, functionName) {
  14973. // Get the original function from the WebGLRenderingContext
  14974. var originalGetterFunc = gl[functionName].bind(gl);
  14975. // Wrap it with a spy so that we can update our state cache when it gets called
  14976. gl[functionName] = function () {
  14977. var pname = arguments.length <= 0 ? undefined : arguments[0];
  14978. // WebGL limits are not prepopulated in the cache, we must
  14979. // query first time. They are all primitive (single value)
  14980. if (!(pname in gl.state.cache)) {
  14981. gl.state.cache[pname] = originalGetterFunc.apply(undefined, arguments);
  14982. }
  14983. // Optionally call the original function to do a "hard" query from the WebGLRenderingContext
  14984. return gl.state.enable ?
  14985. // Call the getter the params so that it can e.g. serve from a cache
  14986. gl.state.cache[pname] :
  14987. // Optionally call the original function to do a "hard" query from the WebGLRenderingContext
  14988. originalGetterFunc.apply(undefined, arguments);
  14989. };
  14990. // Set the name of this anonymous function to help in debugging and profiling
  14991. Object.defineProperty(gl[functionName], 'name', { value: functionName + '-from-cache', configurable: false });
  14992. }
  14993. // Overrides a WebGLRenderingContext state "setter" function
  14994. // to call a setter spy before the actual setter. Allows us to keep a cache
  14995. // updated with a copy of the WebGL context state.
  14996. function installSetterSpy(gl, functionName, setter) {
  14997. // Get the original function from the WebGLRenderingContext
  14998. var originalSetterFunc = gl[functionName].bind(gl);
  14999. // Wrap it with a spy so that we can update our state cache when it gets called
  15000. gl[functionName] = function () {
  15001. for (var _len = arguments.length, params = Array(_len), _key = 0; _key < _len; _key++) {
  15002. params[_key] = arguments[_key];
  15003. }
  15004. // Update the value
  15005. // Call the setter with the state cache and the params so that it can store the parameters
  15006. var _setter = setter.apply(undefined, [gl.state._updateCache].concat(params)),
  15007. valueChanged = _setter.valueChanged,
  15008. oldValue = _setter.oldValue;
  15009. // Call the original WebGLRenderingContext func to make sure the context actually gets updated
  15010. if (valueChanged) {
  15011. var _gl$state;
  15012. (_gl$state = gl.state).log.apply(_gl$state, ['gl.' + functionName].concat(params)); // eslint-disable-line
  15013. originalSetterFunc.apply(undefined, params);
  15014. }
  15015. // Note: if the original function fails to set the value, our state cache will be bad
  15016. // No solution for this at the moment, but assuming that this is unlikely to be a real problem
  15017. // We could call the setter after the originalSetterFunc. Concern is that this would
  15018. // cause different behavior in debug mode, where originalSetterFunc can throw exceptions
  15019. return oldValue;
  15020. };
  15021. // Set the name of this anonymous function to help in debugging and profiling
  15022. Object.defineProperty(gl[functionName], 'name', { value: functionName + '-to-cache', configurable: false });
  15023. }
  15024. // HELPER CLASS - GLState
  15025. /* eslint-disable no-shadow */
  15026. var GLState = /*#__PURE__*/function () {
  15027. function GLState(gl) {
  15028. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  15029. _ref$copyState = _ref.copyState,
  15030. copyState = _ref$copyState === undefined ? false : _ref$copyState,
  15031. _ref$log = _ref.log,
  15032. log = _ref$log === undefined ? function () {} : _ref$log;
  15033. _classCallCheck(this, GLState);
  15034. this.gl = gl;
  15035. this.stateStack = [];
  15036. this.enable = true;
  15037. this.cache = copyState ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__set_parameters__["a" /* getParameters */])(gl) : Object.assign({}, __WEBPACK_IMPORTED_MODULE_1__set_parameters__["b" /* GL_PARAMETER_DEFAULTS */]);
  15038. this.log = log;
  15039. this._updateCache = this._updateCache.bind(this);
  15040. Object.seal(this);
  15041. }
  15042. _createClass(GLState, [{
  15043. key: 'push',
  15044. value: function push() {
  15045. var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  15046. this.stateStack.push({});
  15047. }
  15048. }, {
  15049. key: 'pop',
  15050. value: function pop() {
  15051. __WEBPACK_IMPORTED_MODULE_3_assert___default()(this.stateStack.length > 0);
  15052. // Use the saved values in the state stack to restore parameters
  15053. var oldValues = this.stateStack[this.stateStack.length - 1];
  15054. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__set_parameters__["c" /* setParameters */])(this.gl, oldValues, this.cache);
  15055. // Don't pop until we have reset parameters (to make sure other "stack frames" are not affected)
  15056. this.stateStack.pop();
  15057. }
  15058. // interceptor for context set functions - update our cache and our stack
  15059. // values (Object) - the key values for this setter
  15060. }, {
  15061. key: '_updateCache',
  15062. value: function _updateCache(values) {
  15063. var valueChanged = false;
  15064. var oldValue = void 0; // = undefined
  15065. var oldValues = this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1];
  15066. for (var key in values) {
  15067. __WEBPACK_IMPORTED_MODULE_3_assert___default()(key !== undefined);
  15068. // Check that value hasn't already been shadowed
  15069. if (!deepEqual(values[key], this.cache[key])) {
  15070. valueChanged = true;
  15071. oldValue = this.cache[key];
  15072. // First, save current value being shadowed
  15073. // If a state stack frame is active, save the current parameter values for pop
  15074. // but first check that value hasn't already been shadowed and saved
  15075. if (oldValues && !(key in oldValues)) {
  15076. oldValues[key] = this.cache[key];
  15077. }
  15078. // Save current value being shadowed
  15079. this.cache[key] = values[key];
  15080. }
  15081. }
  15082. return { valueChanged: valueChanged, oldValue: oldValue };
  15083. }
  15084. }]);
  15085. return GLState;
  15086. }();
  15087. // PUBLIC API
  15088. /**
  15089. * Initialize WebGL state caching on a context
  15090. * can be called multiple times to enable/disable
  15091. * @param {WebGLRenderingContext} - context
  15092. */
  15093. // After calling this function, context state will be cached
  15094. // gl.state.push() and gl.state.pop() will be available for saving,
  15095. // temporarily modifying, and then restoring state.
  15096. function trackContextState(gl) {
  15097. var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  15098. _ref2$enable = _ref2.enable,
  15099. enable = _ref2$enable === undefined ? true : _ref2$enable,
  15100. copyState = _ref2.copyState;
  15101. __WEBPACK_IMPORTED_MODULE_3_assert___default()(copyState !== undefined);
  15102. if (!gl.state) {
  15103. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__polyfill_context__["a" /* default */])(gl);
  15104. // Create a state cache
  15105. gl.state = new GLState(gl, { copyState: copyState, enable: enable });
  15106. // intercept all setter functions in the table
  15107. for (var key in GL_STATE_SETTERS) {
  15108. var setter = GL_STATE_SETTERS[key];
  15109. installSetterSpy(gl, key, setter);
  15110. }
  15111. // intercept all getter functions in the table
  15112. installGetterOverride(gl, 'getParameter');
  15113. installGetterOverride(gl, 'isEnabled');
  15114. }
  15115. gl.state.enable = enable;
  15116. return gl;
  15117. }
  15118. function pushContextState(gl) {
  15119. __WEBPACK_IMPORTED_MODULE_3_assert___default()(gl.state);
  15120. gl.state.push();
  15121. }
  15122. function popContextState(gl) {
  15123. __WEBPACK_IMPORTED_MODULE_3_assert___default()(gl.state);
  15124. gl.state.pop();
  15125. }
  15126. //# sourceMappingURL=track-context-state.js.map
  15127. /***/ }),
  15128. /* 165 */
  15129. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  15130. "use strict";
  15131. /* harmony export (immutable) */ __webpack_exports__["c"] = getContextLimits;
  15132. /* harmony export (immutable) */ __webpack_exports__["b"] = getGLContextInfo;
  15133. /* unused harmony export getGLContextInfo2 */
  15134. /* harmony export (immutable) */ __webpack_exports__["a"] = getContextInfo;
  15135. /* harmony export (immutable) */ __webpack_exports__["d"] = glGetDebugInfo;
  15136. /* unused harmony export TEST_EXPORTS */
  15137. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gl_constants__ = __webpack_require__(25);
  15138. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  15139. var _WEBGL_LIMITS;
  15140. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  15141. /* eslint-disable no-inline-comments, max-len */
  15142. var WEBGL_LIMITS = (_WEBGL_LIMITS = {}, _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].ALIASED_LINE_WIDTH_RANGE, { gl1: new Float32Array([1, 1]) }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].ALIASED_POINT_SIZE_RANGE, { gl1: new Float32Array([1, 1]) }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_TEXTURE_SIZE, { gl1: 64, gl2: 2048 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_CUBE_MAP_TEXTURE_SIZE, { gl1: 16 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_TEXTURE_IMAGE_UNITS, { gl1: 8 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_COMBINED_TEXTURE_IMAGE_UNITS, { gl1: 8 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_VERTEX_TEXTURE_IMAGE_UNITS, { gl1: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_RENDERBUFFER_SIZE, { gl1: 1 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_VARYING_VECTORS, { gl1: 8 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_VERTEX_ATTRIBS, { gl1: 8 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_VERTEX_UNIFORM_VECTORS, { gl1: 128 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_FRAGMENT_UNIFORM_VECTORS, { gl1: 16 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_VIEWPORT_DIMS, { gl1: new Int32Array([0, 0]) }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_3D_TEXTURE_SIZE, { gl1: 0, gl2: 256 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_ARRAY_TEXTURE_LAYERS, { gl1: 0, gl2: 256 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_CLIENT_WAIT_TIMEOUT_WEBGL, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_COLOR_ATTACHMENTS, { gl1: 0, gl2: 4 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_COMBINED_UNIFORM_BLOCKS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_DRAW_BUFFERS, { gl1: 0, gl2: 4 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_ELEMENT_INDEX, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_ELEMENTS_INDICES, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_ELEMENTS_VERTICES, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_FRAGMENT_INPUT_COMPONENTS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_FRAGMENT_UNIFORM_BLOCKS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_FRAGMENT_UNIFORM_COMPONENTS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_SAMPLES, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_SERVER_WAIT_TIMEOUT, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_TEXTURE_LOD_BIAS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_UNIFORM_BLOCK_SIZE, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_UNIFORM_BUFFER_BINDINGS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_VARYING_COMPONENTS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_VERTEX_OUTPUT_COMPONENTS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_VERTEX_UNIFORM_BLOCKS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_VERTEX_UNIFORM_COMPONENTS, { gl1: 0, gl2: 0 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MIN_PROGRAM_TEXEL_OFFSET, { gl1: 0, gl2: -8, negative: true }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].MAX_PROGRAM_TEXEL_OFFSET, { gl1: 0, gl2: 7 }), _defineProperty(_WEBGL_LIMITS, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNIFORM_BUFFER_OFFSET_ALIGNMENT, { gl1: 0, gl2: 0 // GLint
  15143. }), _WEBGL_LIMITS);
  15144. function getContextLimits(gl) {
  15145. gl.luma = gl.luma || {};
  15146. if (!gl.luma.limits) {
  15147. gl.luma.limits = {};
  15148. gl.luma.webgl1MinLimits = {};
  15149. gl.luma.webgl2MinLimits = {};
  15150. var isWebgl2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl);
  15151. // WEBGL limits
  15152. for (var parameter in WEBGL_LIMITS) {
  15153. var limit = WEBGL_LIMITS[parameter];
  15154. var webgl1MinLimit = limit.gl1;
  15155. var webgl2MinLimit = 'gl2' in limit ? limit.gl2 : limit.gl1;
  15156. var minLimit = isWebgl2 ? webgl2MinLimit : webgl1MinLimit;
  15157. // Check if we can query for this limit
  15158. var limitNotAvailable = 'gl2' in limit && !isWebgl2 || 'extension' in limit && !gl.getExtension(limit.extension);
  15159. var value = limitNotAvailable ? minLimit : gl.getParameter(parameter);
  15160. gl.luma.limits[parameter] = value;
  15161. gl.luma.webgl1MinLimits[parameter] = webgl1MinLimit;
  15162. gl.luma.webgl2MinLimits[parameter] = webgl2MinLimit;
  15163. }
  15164. }
  15165. return gl.luma.limits;
  15166. }
  15167. function getGLContextInfo(gl) {
  15168. gl.luma = gl.luma || {};
  15169. if (!gl.luma.info) {
  15170. var _gl$luma$info;
  15171. var info = gl.getExtension('WEBGL_debug_renderer_info');
  15172. gl.luma.info = (_gl$luma$info = {}, _defineProperty(_gl$luma$info, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VENDOR, gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VENDOR)), _defineProperty(_gl$luma$info, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RENDERER, gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RENDERER)), _defineProperty(_gl$luma$info, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNMASKED_VENDOR_WEBGL, gl.getParameter(info && info.UNMASKED_VENDOR_WEBGL || __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VENDOR)), _defineProperty(_gl$luma$info, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNMASKED_RENDERER_WEBGL, gl.getParameter(info && info.UNMASKED_RENDERER_WEBGL || __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RENDERER)), _defineProperty(_gl$luma$info, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VERSION, gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VERSION)), _defineProperty(_gl$luma$info, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].SHADING_LANGUAGE_VERSION, gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].SHADING_LANGUAGE_VERSION)), _gl$luma$info);
  15173. }
  15174. return gl.luma.info;
  15175. }
  15176. var GL_UNMASKED_VENDOR_WEBGL = 0x9245; // vendor string of the graphics driver.
  15177. var GL_UNMASKED_RENDERER_WEBGL = 0x9246; // renderer string of the graphics driver.
  15178. function getGLContextInfo2(gl) {
  15179. var vendorMasked = gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VENDOR);
  15180. var rendererMasked = gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RENDERER);
  15181. var ext = gl.getExtension('WEBGL_debug_renderer_info');
  15182. var vendorUnmasked = ext && gl.getParameter(ext.UNMASKED_VENDOR_WEBGL || __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VENDOR);
  15183. var rendererUnmasked = ext && gl.getParameter(ext.UNMASKED_RENDERER_WEBGL || __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RENDERER);
  15184. return {
  15185. vendor: vendorUnmasked || vendorMasked,
  15186. renderer: rendererUnmasked || rendererMasked,
  15187. vendorMasked: vendorMasked,
  15188. rendererMasked: rendererMasked,
  15189. version: gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VERSION),
  15190. shadingLanguageVersion: gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].SHADING_LANGUAGE_VERSION)
  15191. };
  15192. }
  15193. function getContextInfo(gl) {
  15194. var limits = getContextLimits(gl);
  15195. var info = getGLContextInfo(gl);
  15196. return {
  15197. // basic information
  15198. vendor: info[GL_UNMASKED_VENDOR_WEBGL] || info[__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VENDOR],
  15199. renderer: info[GL_UNMASKED_RENDERER_WEBGL] || info[__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].RENDERER],
  15200. version: info[__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].VERSION],
  15201. shadingLanguageVersion: info[__WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].SHADING_LANGUAGE_VERSION],
  15202. // info, caps and limits
  15203. info: info,
  15204. limits: limits,
  15205. webgl1MinLimits: gl.luma.webgl1MinLimits,
  15206. webgl2MinLimits: gl.luma.webgl2MinLimits
  15207. };
  15208. }
  15209. // DEBUG INFO
  15210. /**
  15211. * Provides strings identifying the GPU vendor and driver.
  15212. * https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/
  15213. * @param {WebGLRenderingContext} gl - context
  15214. * @return {Object} - 'vendor' and 'renderer' string fields.
  15215. */
  15216. function glGetDebugInfo(gl) {
  15217. return getGLContextInfo2(gl);
  15218. // const info = gl.getExtension('WEBGL_debug_renderer_info');
  15219. // // We can't determine if 'WEBGL_debug_renderer_info' is supported by
  15220. // // checking whether info is null here. Firefox doesn't follow the
  15221. // // specs by returning null for unsupported extension. Instead,
  15222. // // it returns an object without GL_UNMASKED_VENDOR_WEBGL and GL_UNMASKED_RENDERER_WEBGL.
  15223. // return {
  15224. // vendor: (info && info.UNMASKED_VENDOR_WEBGL) ?
  15225. // gl.getParameter(info.UNMASKED_VENDOR_WEBGL) : 'unknown',
  15226. // renderer: (info && info.UNMASKED_RENDERER_WEBGL) ?
  15227. // gl.getParameter(info.UNMASKED_RENDERER_WEBGL) : 'unknown'
  15228. // };
  15229. }
  15230. var TEST_EXPORTS = {
  15231. WEBGL_LIMITS: WEBGL_LIMITS
  15232. };
  15233. //# sourceMappingURL=context-limits.js.map
  15234. /***/ }),
  15235. /* 166 */
  15236. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  15237. "use strict";
  15238. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  15239. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  15240. var ERR_DELETED = 'Query was deleted before result was available';
  15241. var ERR_CANCEL = 'Query was canceled before result was available';
  15242. var noop = function noop(x) {
  15243. return x;
  15244. };
  15245. var QueryManager = /*#__PURE__*/function () {
  15246. /**
  15247. * Internal class that helps "asynchronous WebGL query objects" manage
  15248. * pending requests (e.g. for EXT_disjoint_timer_query and WebGL2 queries)
  15249. *
  15250. * Creates and manages promises for the queries.
  15251. * Tracks pending queries enabling polling.
  15252. * Tracks pending queries enabling invalidation.
  15253. * Encapsulates some standard error messages.
  15254. *
  15255. * Remarks:
  15256. * - Maintains a minimal list of pending queries only to minimize GC impact
  15257. * - Exported as a singleton class instance.
  15258. */
  15259. function QueryManager() {
  15260. _classCallCheck(this, QueryManager);
  15261. this.pendingQueries = new Set();
  15262. this.invalidQueryType = null;
  15263. this.invalidErrorMessage = '';
  15264. this.checkInvalid = function () {
  15265. return false;
  15266. };
  15267. }
  15268. // API THAT SHOULD BE EXPOSED TO APPLICATION
  15269. // Checks invalidation callback and then all pending queries for completion
  15270. // Should only be called once per tick
  15271. _createClass(QueryManager, [{
  15272. key: 'poll',
  15273. value: function poll(gl) {
  15274. this.cancelInvalidQueries(gl);
  15275. // Now check availability of results and resolve promises as appropriate
  15276. var _iteratorNormalCompletion = true;
  15277. var _didIteratorError = false;
  15278. var _iteratorError = undefined;
  15279. try {
  15280. for (var _iterator = this.pendingQueries.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  15281. var query = _step.value;
  15282. var resultAvailable = query.isResultAvailable();
  15283. if (resultAvailable) {
  15284. var result = query.getResult();
  15285. this.resolveQuery(query, result);
  15286. }
  15287. }
  15288. } catch (err) {
  15289. _didIteratorError = true;
  15290. _iteratorError = err;
  15291. } finally {
  15292. try {
  15293. if (!_iteratorNormalCompletion && _iterator.return) {
  15294. _iterator.return();
  15295. }
  15296. } finally {
  15297. if (_didIteratorError) {
  15298. throw _iteratorError;
  15299. }
  15300. }
  15301. }
  15302. }
  15303. // API FOR MANAGED QUERY CLASSES
  15304. // Registers query invalidation method - used to detect disjoint timer queries
  15305. }, {
  15306. key: 'setInvalidator',
  15307. value: function setInvalidator(_ref) {
  15308. var queryType = _ref.queryType,
  15309. errorMessage = _ref.errorMessage,
  15310. checkInvalid = _ref.checkInvalid;
  15311. this.invalidQueryType = queryType;
  15312. this.invalidErrorMessage = errorMessage;
  15313. this.checkInvalid = checkInvalid;
  15314. }
  15315. // Starts a query, sets up a new promise
  15316. }, {
  15317. key: 'beginQuery',
  15318. value: function beginQuery(query) {
  15319. var onComplete = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
  15320. var onError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : noop;
  15321. // Make sure disjoint state is cleared, so that this query starts fresh
  15322. // Cancel other queries if needed
  15323. this.cancelInvalidQueries(query.gl);
  15324. // Cancel current promise - noop if already resolved or rejected
  15325. this.cancelQuery(query);
  15326. // Create a new promise with attached resolve and reject methods
  15327. var resolvers = {};
  15328. query.promise = new Promise(function (resolve, reject) {
  15329. resolvers.resolve = resolve;
  15330. resolvers.reject = reject;
  15331. });
  15332. Object.assign(query.promise, resolvers);
  15333. // Add this query to the pending queries
  15334. this.pendingQueries.add(query);
  15335. // Register the callbacks
  15336. return query.promise.then(onComplete).catch(onError);
  15337. }
  15338. // Resolves a query with a result
  15339. }, {
  15340. key: 'resolveQuery',
  15341. value: function resolveQuery(query, result) {
  15342. this.pendingQueries.delete(query);
  15343. query.promise.resolve(result);
  15344. }
  15345. // Rejects the promise
  15346. }, {
  15347. key: 'rejectQuery',
  15348. value: function rejectQuery(query, errorMessage) {
  15349. this.pendingQueries.delete(query);
  15350. if (query.promise) {
  15351. query.promise.reject(new Error(errorMessage));
  15352. }
  15353. }
  15354. // Rejects promise with standard message for Query.delete()
  15355. }, {
  15356. key: 'deleteQuery',
  15357. value: function deleteQuery(query) {
  15358. return this.rejectQuery(query, ERR_DELETED);
  15359. }
  15360. // Rejects promise with standard message for Query.cancel()
  15361. }, {
  15362. key: 'cancelQuery',
  15363. value: function cancelQuery(query) {
  15364. return this.rejectQuery(query, ERR_CANCEL);
  15365. }
  15366. // Rejects promise with registered message for invalidation
  15367. }, {
  15368. key: 'invalidateQuery',
  15369. value: function invalidateQuery(query) {
  15370. if (query instanceof this.invalidQueryType) {
  15371. this.rejectQuery(query, this.invalidErrorMessage);
  15372. }
  15373. }
  15374. // Checks all queries to see if need to be invalidated
  15375. }, {
  15376. key: 'cancelInvalidQueries',
  15377. value: function cancelInvalidQueries(gl) {
  15378. // We assume that we can cancel queries for all context.
  15379. // Should be OK since this is used to check for "disjoint" GPU state
  15380. if (this.checkInvalid(gl)) {
  15381. var _iteratorNormalCompletion2 = true;
  15382. var _didIteratorError2 = false;
  15383. var _iteratorError2 = undefined;
  15384. try {
  15385. for (var _iterator2 = this.pendingQueries.values()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  15386. var query = _step2.value;
  15387. this.invalidateQuery(query);
  15388. }
  15389. } catch (err) {
  15390. _didIteratorError2 = true;
  15391. _iteratorError2 = err;
  15392. } finally {
  15393. try {
  15394. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  15395. _iterator2.return();
  15396. }
  15397. } finally {
  15398. if (_didIteratorError2) {
  15399. throw _iteratorError2;
  15400. }
  15401. }
  15402. }
  15403. }
  15404. }
  15405. }]);
  15406. return QueryManager;
  15407. }();
  15408. /* harmony default export */ __webpack_exports__["a"] = (new QueryManager());
  15409. //# sourceMappingURL=query-manager.js.map
  15410. /***/ }),
  15411. /* 167 */
  15412. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  15413. "use strict";
  15414. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(38);
  15415. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  15416. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__texture__ = __webpack_require__(62);
  15417. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  15418. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  15419. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  15420. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  15421. var Texture2D = /*#__PURE__*/function (_Texture) {
  15422. _inherits(Texture2D, _Texture);
  15423. _createClass(Texture2D, null, [{
  15424. key: 'isSupported',
  15425. value: function isSupported(gl, opts) {
  15426. return __WEBPACK_IMPORTED_MODULE_2__texture__["a" /* default */].isSupported(gl, opts);
  15427. }
  15428. /**
  15429. * @classdesc
  15430. * 2D WebGL Texture
  15431. * Note: Constructor will initialize your texture.
  15432. *
  15433. * @class
  15434. * @param {WebGLRenderingContext} gl - gl context
  15435. * @param {Image|ArrayBuffer|null} opts= - named options
  15436. * @param {Image|ArrayBuffer|null} opts.data= - buffer
  15437. * @param {GLint} width - width of texture
  15438. * @param {GLint} height - height of texture
  15439. */
  15440. }]);
  15441. function Texture2D(gl) {
  15442. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  15443. _classCallCheck(this, Texture2D);
  15444. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["j" /* assertWebGLContext */])(gl);
  15445. var _this = _possibleConstructorReturn(this, (Texture2D.__proto__ || Object.getPrototypeOf(Texture2D)).call(this, gl, Object.assign({}, opts, { target: gl.TEXTURE_2D })));
  15446. _this.initialize(opts);
  15447. Object.seal(_this);
  15448. return _this;
  15449. }
  15450. // target cannot be modified by bind:
  15451. // textures are special because when you first bind them to a target,
  15452. // they get special information. When you first bind a texture as a
  15453. // GL_TEXTURE_2D, you are actually setting special state in the texture.
  15454. // You are saying that this texture is a 2D texture.
  15455. // And it will always be a 2D texture; this state cannot be changed ever.
  15456. // If you have a texture that was first bound as a GL_TEXTURE_2D,
  15457. // you must always bind it as a GL_TEXTURE_2D;
  15458. // attempting to bind it as GL_TEXTURE_1D will give rise to an error
  15459. // (while run-time).
  15460. _createClass(Texture2D, [{
  15461. key: 'bind',
  15462. value: function bind() {
  15463. var textureUnit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.textureUnit;
  15464. var gl = this.gl;
  15465. if (textureUnit === undefined) {
  15466. throw new Error('Texture.bind: must specify texture unit');
  15467. }
  15468. this.textureUnit = textureUnit;
  15469. gl.activeTexture(gl.TEXTURE0 + textureUnit);
  15470. gl.bindTexture(this.target, this.handle);
  15471. return textureUnit;
  15472. }
  15473. }, {
  15474. key: 'unbind',
  15475. value: function unbind() {
  15476. var gl = this.gl;
  15477. if (this.textureUnit === undefined) {
  15478. throw new Error('Texture.unbind: texture unit not specified');
  15479. }
  15480. gl.activeTexture(gl.TEXTURE0 + this.textureUnit);
  15481. gl.bindTexture(this.target, null);
  15482. return this.textureUnit;
  15483. }
  15484. }, {
  15485. key: 'getActiveUnit',
  15486. value: function getActiveUnit() {
  15487. return this.gl.getParameter(__WEBPACK_IMPORTED_MODULE_0__api__["f" /* GL */].ACTIVE_TEXTURE) - __WEBPACK_IMPORTED_MODULE_0__api__["f" /* GL */].TEXTURE0;
  15488. }
  15489. }]);
  15490. return Texture2D;
  15491. }(__WEBPACK_IMPORTED_MODULE_2__texture__["a" /* default */]);
  15492. /* harmony default export */ __webpack_exports__["a"] = (Texture2D);
  15493. //# sourceMappingURL=texture-2d.js.map
  15494. /***/ }),
  15495. /* 168 */
  15496. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  15497. "use strict";
  15498. /* harmony export (immutable) */ __webpack_exports__["a"] = parseUniformName;
  15499. /* harmony export (immutable) */ __webpack_exports__["b"] = getUniformSetter;
  15500. /* harmony export (immutable) */ __webpack_exports__["c"] = checkUniformValues;
  15501. /* harmony export (immutable) */ __webpack_exports__["e"] = getUniformsTable;
  15502. /* harmony export (immutable) */ __webpack_exports__["d"] = areUniformsEqual;
  15503. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__framebuffer__ = __webpack_require__(69);
  15504. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__texture__ = __webpack_require__(62);
  15505. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils__ = __webpack_require__(8);
  15506. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert__ = __webpack_require__(1);
  15507. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_assert__);
  15508. var _UNIFORM_SETTERS;
  15509. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  15510. // Local constants, will be "collapsed" during minification
  15511. // WebGL1
  15512. var GL_FLOAT = 0x1406;
  15513. var GL_FLOAT_VEC2 = 0x8B50;
  15514. var GL_FLOAT_VEC3 = 0x8B51;
  15515. var GL_FLOAT_VEC4 = 0x8B52;
  15516. var GL_INT = 0x1404;
  15517. var GL_INT_VEC2 = 0x8B53;
  15518. var GL_INT_VEC3 = 0x8B54;
  15519. var GL_INT_VEC4 = 0x8B55;
  15520. var GL_BOOL = 0x8B56;
  15521. var GL_BOOL_VEC2 = 0x8B57;
  15522. var GL_BOOL_VEC3 = 0x8B58;
  15523. var GL_BOOL_VEC4 = 0x8B59;
  15524. var GL_FLOAT_MAT2 = 0x8B5A;
  15525. var GL_FLOAT_MAT3 = 0x8B5B;
  15526. var GL_FLOAT_MAT4 = 0x8B5C;
  15527. var GL_SAMPLER_2D = 0x8B5E;
  15528. var GL_SAMPLER_CUBE = 0x8B60;
  15529. // WebGL2
  15530. var GL_UNSIGNED_INT = 0x1405;
  15531. var GL_UNSIGNED_INT_VEC2 = 0x8DC6;
  15532. var GL_UNSIGNED_INT_VEC3 = 0x8DC7;
  15533. var GL_UNSIGNED_INT_VEC4 = 0x8DC8;
  15534. /* eslint-disable camelcase */
  15535. var GL_FLOAT_MAT2x3 = 0x8B65;
  15536. var GL_FLOAT_MAT2x4 = 0x8B66;
  15537. var GL_FLOAT_MAT3x2 = 0x8B67;
  15538. var GL_FLOAT_MAT3x4 = 0x8B68;
  15539. var GL_FLOAT_MAT4x2 = 0x8B69;
  15540. var GL_FLOAT_MAT4x3 = 0x8B6A;
  15541. var GL_SAMPLER_3D = 0x8B5F;
  15542. var GL_SAMPLER_2D_SHADOW = 0x8B62;
  15543. var GL_SAMPLER_2D_ARRAY = 0x8DC1;
  15544. var GL_SAMPLER_2D_ARRAY_SHADOW = 0x8DC4;
  15545. var GL_SAMPLER_CUBE_SHADOW = 0x8DC5;
  15546. var GL_INT_SAMPLER_2D = 0x8DCA;
  15547. var GL_INT_SAMPLER_3D = 0x8DCB;
  15548. var GL_INT_SAMPLER_CUBE = 0x8DCC;
  15549. var GL_INT_SAMPLER_2D_ARRAY = 0x8DCF;
  15550. var GL_UNSIGNED_INT_SAMPLER_2D = 0x8DD2;
  15551. var GL_UNSIGNED_INT_SAMPLER_3D = 0x8DD3;
  15552. var GL_UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4;
  15553. var GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7;
  15554. var UNIFORM_SETTERS = (_UNIFORM_SETTERS = {}, _defineProperty(_UNIFORM_SETTERS, GL_FLOAT, function (gl, location, value) {
  15555. return gl.uniform1f(location, value);
  15556. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_VEC2, function (gl, location, value) {
  15557. return gl.uniform2fv(location, toFloatArray(value, 2));
  15558. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_VEC3, function (gl, location, value) {
  15559. return gl.uniform3fv(location, toFloatArray(value, 3));
  15560. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_VEC4, function (gl, location, value) {
  15561. return gl.uniform4fv(location, toFloatArray(value, 4));
  15562. }), _defineProperty(_UNIFORM_SETTERS, GL_INT, function (gl, location, value) {
  15563. return gl.uniform1i(location, value);
  15564. }), _defineProperty(_UNIFORM_SETTERS, GL_INT_VEC2, function (gl, location, value) {
  15565. return gl.uniform2iv(location, toIntArray(value, 2));
  15566. }), _defineProperty(_UNIFORM_SETTERS, GL_INT_VEC3, function (gl, location, value) {
  15567. return gl.uniform3iv(location, toIntArray(value, 3));
  15568. }), _defineProperty(_UNIFORM_SETTERS, GL_INT_VEC4, function (gl, location, value) {
  15569. return gl.uniform4iv(location, toIntArray(value, 4));
  15570. }), _defineProperty(_UNIFORM_SETTERS, GL_BOOL, function (gl, location, value) {
  15571. return gl.uniform1i(location, value);
  15572. }), _defineProperty(_UNIFORM_SETTERS, GL_BOOL_VEC2, function (gl, location, value) {
  15573. return gl.uniform2iv(location, toIntArray(value, 2));
  15574. }), _defineProperty(_UNIFORM_SETTERS, GL_BOOL_VEC3, function (gl, location, value) {
  15575. return gl.uniform3iv(location, toIntArray(value, 3));
  15576. }), _defineProperty(_UNIFORM_SETTERS, GL_BOOL_VEC4, function (gl, location, value) {
  15577. return gl.uniform4iv(location, toIntArray(value, 4));
  15578. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_MAT2, function (gl, location, value) {
  15579. return gl.uniformMatrix2fv(location, false, toFloatArray(value, 4));
  15580. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_MAT3, function (gl, location, value) {
  15581. return gl.uniformMatrix3fv(location, false, toFloatArray(value, 9));
  15582. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_MAT4, function (gl, location, value) {
  15583. return gl.uniformMatrix4fv(location, false, toFloatArray(value, 16));
  15584. }), _defineProperty(_UNIFORM_SETTERS, GL_SAMPLER_2D, function (gl, location, value) {
  15585. return gl.uniform1i(location, value);
  15586. }), _defineProperty(_UNIFORM_SETTERS, GL_SAMPLER_CUBE, function (gl, location, value) {
  15587. return gl.uniform1i(location, value);
  15588. }), _defineProperty(_UNIFORM_SETTERS, GL_UNSIGNED_INT, function (gl, location, value) {
  15589. return gl.uniform1ui(location, value);
  15590. }), _defineProperty(_UNIFORM_SETTERS, GL_UNSIGNED_INT_VEC2, function (gl, location, value) {
  15591. return gl.uniform2uiv(location, toUIntArray(value, 2));
  15592. }), _defineProperty(_UNIFORM_SETTERS, GL_UNSIGNED_INT_VEC3, function (gl, location, value) {
  15593. return gl.uniform3uiv(location, toUIntArray(value, 3));
  15594. }), _defineProperty(_UNIFORM_SETTERS, GL_UNSIGNED_INT_VEC4, function (gl, location, value) {
  15595. return gl.uniform4uiv(location, toUIntArray(value, 4));
  15596. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_MAT2x3, function (gl, location, value) {
  15597. return gl.uniformMatrix2x3fv(location, false, toFloatArray(value, 6));
  15598. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_MAT2x4, function (gl, location, value) {
  15599. return gl.uniformMatrix2x4fv(location, false, toFloatArray(value, 8));
  15600. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_MAT3x2, function (gl, location, value) {
  15601. return gl.uniformMatrix3x2fv(location, false, toFloatArray(value, 6));
  15602. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_MAT3x4, function (gl, location, value) {
  15603. return gl.uniformMatrix3x4fv(location, false, toFloatArray(value, 12));
  15604. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_MAT4x2, function (gl, location, value) {
  15605. return gl.uniformMatrix4x2fv(location, false, toFloatArray(value, 8));
  15606. }), _defineProperty(_UNIFORM_SETTERS, GL_FLOAT_MAT4x3, function (gl, location, value) {
  15607. return gl.uniformMatrix4x3fv(location, false, toFloatArray(value, 12));
  15608. }), _defineProperty(_UNIFORM_SETTERS, GL_SAMPLER_3D, function (gl, location, value) {
  15609. return gl.uniform1i(location, value);
  15610. }), _defineProperty(_UNIFORM_SETTERS, GL_SAMPLER_2D_SHADOW, function (gl, location, value) {
  15611. return gl.uniform1i(location, value);
  15612. }), _defineProperty(_UNIFORM_SETTERS, GL_SAMPLER_2D_ARRAY, function (gl, location, value) {
  15613. return gl.uniform1i(location, value);
  15614. }), _defineProperty(_UNIFORM_SETTERS, GL_SAMPLER_2D_ARRAY_SHADOW, function (gl, location, value) {
  15615. return gl.uniform1i(location, value);
  15616. }), _defineProperty(_UNIFORM_SETTERS, GL_SAMPLER_CUBE_SHADOW, function (gl, location, value) {
  15617. return gl.uniform1i(location, value);
  15618. }), _defineProperty(_UNIFORM_SETTERS, GL_INT_SAMPLER_2D, function (gl, location, value) {
  15619. return gl.uniform1i(location, value);
  15620. }), _defineProperty(_UNIFORM_SETTERS, GL_INT_SAMPLER_3D, function (gl, location, value) {
  15621. return gl.uniform1i(location, value);
  15622. }), _defineProperty(_UNIFORM_SETTERS, GL_INT_SAMPLER_CUBE, function (gl, location, value) {
  15623. return gl.uniform1i(location, value);
  15624. }), _defineProperty(_UNIFORM_SETTERS, GL_INT_SAMPLER_2D_ARRAY, function (gl, location, value) {
  15625. return gl.uniform1i(location, value);
  15626. }), _defineProperty(_UNIFORM_SETTERS, GL_UNSIGNED_INT_SAMPLER_2D, function (gl, location, value) {
  15627. return gl.uniform1i(location, value);
  15628. }), _defineProperty(_UNIFORM_SETTERS, GL_UNSIGNED_INT_SAMPLER_3D, function (gl, location, value) {
  15629. return gl.uniform1i(location, value);
  15630. }), _defineProperty(_UNIFORM_SETTERS, GL_UNSIGNED_INT_SAMPLER_CUBE, function (gl, location, value) {
  15631. return gl.uniform1i(location, value);
  15632. }), _defineProperty(_UNIFORM_SETTERS, GL_UNSIGNED_INT_SAMPLER_2D_ARRAY, function (gl, location, value) {
  15633. return gl.uniform1i(location, value);
  15634. }), _UNIFORM_SETTERS);
  15635. // Pre-allocated typed arrays for temporary conversion
  15636. var FLOAT_ARRAY = {};
  15637. var INT_ARRAY = {};
  15638. var UINT_ARRAY = {};
  15639. /* Functions to ensure the type of uniform values */
  15640. function toTypedArray(value, uniformLength, Type, cache) {
  15641. var length = value.length;
  15642. if (length % uniformLength) {
  15643. __WEBPACK_IMPORTED_MODULE_2__utils__["b" /* log */].warn('Uniform size should be multiples of ' + uniformLength, value);
  15644. }
  15645. if (value instanceof Type) {
  15646. return value;
  15647. }
  15648. var result = cache[length];
  15649. if (!result) {
  15650. result = new Type(length);
  15651. cache[length] = result;
  15652. }
  15653. for (var i = 0; i < length; i++) {
  15654. result[i] = value[i];
  15655. }
  15656. return result;
  15657. }
  15658. function toFloatArray(value, uniformLength) {
  15659. return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);
  15660. }
  15661. function toIntArray(value, uniformLength) {
  15662. return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);
  15663. }
  15664. function toUIntArray(value, uniformLength) {
  15665. return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);
  15666. }
  15667. function parseUniformName(name) {
  15668. // name = name[name.length - 1] === ']' ?
  15669. // name.substr(0, name.length - 3) : name;
  15670. // if array name then clean the array brackets
  15671. var UNIFORM_NAME_REGEXP = /([^\[]*)(\[[0-9]+\])?/;
  15672. var matches = name.match(UNIFORM_NAME_REGEXP);
  15673. if (!matches || matches.length < 2) {
  15674. throw new Error('Failed to parse GLSL uniform name ' + name);
  15675. }
  15676. return {
  15677. name: matches[1],
  15678. length: matches[2] || 1,
  15679. isArray: Boolean(matches[2])
  15680. };
  15681. }
  15682. // Returns a Magic Uniform Setter
  15683. /* eslint-disable complexity */
  15684. function getUniformSetter(gl, location, info) {
  15685. var setter = UNIFORM_SETTERS[info.type];
  15686. if (!setter) {
  15687. throw new Error('Unknown GLSL uniform type ' + info.type);
  15688. }
  15689. return setter.bind(null, gl, location);
  15690. }
  15691. // Basic checks of uniform values without knowledge of program
  15692. // To facilitate early detection of e.g. undefined values in JavaScript
  15693. function checkUniformValues(uniforms, source) {
  15694. for (var uniformName in uniforms) {
  15695. var value = uniforms[uniformName];
  15696. if (!checkUniformValue(value)) {
  15697. // Add space to source
  15698. source = source ? source + ' ' : '';
  15699. // Value could be unprintable so write the object on console
  15700. console.error(source + ' Bad uniform ' + uniformName, value); // eslint-disable-line
  15701. /* eslint-enable no-console */
  15702. throw new Error(source + ' Bad uniform ' + uniformName);
  15703. }
  15704. }
  15705. return true;
  15706. }
  15707. // TODO use type information during validation
  15708. function checkUniformValue(value) {
  15709. // Check that every element in array is a number, and at least 1 element
  15710. if (Array.isArray(value)) {
  15711. return value.length > 0 && value.every(function (element) {
  15712. return isFinite(element);
  15713. });
  15714. // Typed arrays can only contain numbers, but check length
  15715. } else if (ArrayBuffer.isView(value)) {
  15716. // TODO - Can contain NaN
  15717. return value.length > 0;
  15718. // Check that single value is a number
  15719. } else if (isFinite(value)) {
  15720. return true;
  15721. // Test for texture (for sampler uniforms)
  15722. // WebGL2: if (value instanceof Texture || value instanceof Sampler) {
  15723. } else if (value instanceof __WEBPACK_IMPORTED_MODULE_1__texture__["a" /* default */]) {
  15724. return true;
  15725. } else if (value instanceof __WEBPACK_IMPORTED_MODULE_0__framebuffer__["a" /* default */]) {
  15726. return Boolean(value.texture);
  15727. }
  15728. return false;
  15729. }
  15730. function isUniformDefined(value) {
  15731. return value !== undefined && value !== null;
  15732. }
  15733. // Helper
  15734. function addUniformToTable(_ref) {
  15735. var table = _ref.table,
  15736. header = _ref.header,
  15737. uniforms = _ref.uniforms,
  15738. uniformName = _ref.uniformName,
  15739. undefinedOnly = _ref.undefinedOnly;
  15740. var value = uniforms[uniformName];
  15741. var isDefined = isUniformDefined(value);
  15742. if (!undefinedOnly || !isDefined) {
  15743. table[uniformName] = _defineProperty({
  15744. // Add program's unprovided uniforms
  15745. Type: isDefined ? value : 'NOT PROVIDED'
  15746. }, header, isDefined ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils__["c" /* formatValue */])(value) : 'N/A');
  15747. return true;
  15748. }
  15749. return false;
  15750. }
  15751. // Prepares a table suitable for console.table
  15752. /* eslint-disable max-statements */
  15753. function getUniformsTable() {
  15754. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  15755. _ref2$header = _ref2.header,
  15756. header = _ref2$header === undefined ? 'Uniforms' : _ref2$header,
  15757. program = _ref2.program,
  15758. uniforms = _ref2.uniforms,
  15759. _ref2$undefinedOnly = _ref2.undefinedOnly,
  15760. undefinedOnly = _ref2$undefinedOnly === undefined ? false : _ref2$undefinedOnly;
  15761. __WEBPACK_IMPORTED_MODULE_3_assert___default()(program);
  15762. var SHADER_MODULE_UNIFORM_REGEXP = '.*_.*';
  15763. var PROJECT_MODULE_UNIFORM_REGEXP = '.*Matrix'; // TODO - Use explicit list
  15764. var uniformLocations = program._uniformSetters;
  15765. var table = {}; // {[header]: {}};
  15766. // Add program's provided uniforms (in alphabetical order)
  15767. var uniformNames = Object.keys(uniformLocations).sort();
  15768. var count = 0;
  15769. // First add non-underscored uniforms (assumed not coming from shader modules)
  15770. var _iteratorNormalCompletion = true;
  15771. var _didIteratorError = false;
  15772. var _iteratorError = undefined;
  15773. try {
  15774. for (var _iterator = uniformNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  15775. var _uniformName = _step.value;
  15776. if (!_uniformName.match(SHADER_MODULE_UNIFORM_REGEXP) && !_uniformName.match(PROJECT_MODULE_UNIFORM_REGEXP)) {
  15777. if (addUniformToTable({ table: table, header: header, uniforms: uniforms, uniformName: _uniformName, undefinedOnly: undefinedOnly })) {
  15778. count++;
  15779. }
  15780. }
  15781. }
  15782. // add underscored uniforms (assumed from shader modules)
  15783. } catch (err) {
  15784. _didIteratorError = true;
  15785. _iteratorError = err;
  15786. } finally {
  15787. try {
  15788. if (!_iteratorNormalCompletion && _iterator.return) {
  15789. _iterator.return();
  15790. }
  15791. } finally {
  15792. if (_didIteratorError) {
  15793. throw _iteratorError;
  15794. }
  15795. }
  15796. }
  15797. var _iteratorNormalCompletion2 = true;
  15798. var _didIteratorError2 = false;
  15799. var _iteratorError2 = undefined;
  15800. try {
  15801. for (var _iterator2 = uniformNames[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  15802. var _uniformName2 = _step2.value;
  15803. if (_uniformName2.match(PROJECT_MODULE_UNIFORM_REGEXP)) {
  15804. if (addUniformToTable({ table: table, header: header, uniforms: uniforms, uniformName: _uniformName2, undefinedOnly: undefinedOnly })) {
  15805. count++;
  15806. }
  15807. }
  15808. }
  15809. } catch (err) {
  15810. _didIteratorError2 = true;
  15811. _iteratorError2 = err;
  15812. } finally {
  15813. try {
  15814. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  15815. _iterator2.return();
  15816. }
  15817. } finally {
  15818. if (_didIteratorError2) {
  15819. throw _iteratorError2;
  15820. }
  15821. }
  15822. }
  15823. var _iteratorNormalCompletion3 = true;
  15824. var _didIteratorError3 = false;
  15825. var _iteratorError3 = undefined;
  15826. try {
  15827. for (var _iterator3 = uniformNames[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  15828. var _uniformName3 = _step3.value;
  15829. if (!table[_uniformName3]) {
  15830. if (addUniformToTable({ table: table, header: header, uniforms: uniforms, uniformName: _uniformName3, undefinedOnly: undefinedOnly })) {
  15831. count++;
  15832. }
  15833. }
  15834. }
  15835. // Create a table of unused uniforms
  15836. } catch (err) {
  15837. _didIteratorError3 = true;
  15838. _iteratorError3 = err;
  15839. } finally {
  15840. try {
  15841. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  15842. _iterator3.return();
  15843. }
  15844. } finally {
  15845. if (_didIteratorError3) {
  15846. throw _iteratorError3;
  15847. }
  15848. }
  15849. }
  15850. var unusedCount = 0;
  15851. var unusedTable = {};
  15852. if (!undefinedOnly) {
  15853. for (var uniformName in uniforms) {
  15854. var uniform = uniforms[uniformName];
  15855. if (!table[uniformName]) {
  15856. unusedCount++;
  15857. unusedTable[uniformName] = _defineProperty({
  15858. Type: 'NOT USED: ' + uniform
  15859. }, header, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils__["c" /* formatValue */])(uniform));
  15860. }
  15861. }
  15862. }
  15863. return { table: table, count: count, unusedTable: unusedTable, unusedCount: unusedCount };
  15864. }
  15865. /**
  15866. * Given two values of a uniform, returns `true` if they are equal
  15867. */
  15868. function areUniformsEqual(uniform1, uniform2) {
  15869. if (Array.isArray(uniform1) || ArrayBuffer.isView(uniform1)) {
  15870. if (!uniform2) {
  15871. return false;
  15872. }
  15873. var len = uniform1.length;
  15874. if (uniform2.length !== len) {
  15875. return false;
  15876. }
  15877. for (var i = 0; i < len; i++) {
  15878. if (uniform1[i] !== uniform2[i]) {
  15879. return false;
  15880. }
  15881. }
  15882. return true;
  15883. }
  15884. return uniform1 === uniform2;
  15885. }
  15886. //# sourceMappingURL=uniforms.js.map
  15887. /***/ }),
  15888. /* 169 */
  15889. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  15890. "use strict";
  15891. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gl_constants__ = __webpack_require__(25);
  15892. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  15893. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__resource__ = __webpack_require__(30);
  15894. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert__ = __webpack_require__(1);
  15895. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_assert__);
  15896. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils__ = __webpack_require__(8);
  15897. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  15898. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  15899. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  15900. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  15901. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  15902. // WebGL2 VertexArray Objects Helper
  15903. /* eslint-disable camelcase */
  15904. var OES_vertex_array_object = 'OES_vertex_array_object';
  15905. var GL_ELEMENT_ARRAY_BUFFER = 0x8893;
  15906. // const GL_CURRENT_VERTEX_ATTRIB = 0x8626;
  15907. var GL_VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
  15908. var GL_VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
  15909. var GL_VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
  15910. var GL_VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
  15911. var GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
  15912. var GL_VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
  15913. var GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
  15914. var GL_VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD;
  15915. var GL_VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE;
  15916. var PARAMETERS = [GL_VERTEX_ATTRIB_ARRAY_ENABLED, GL_VERTEX_ATTRIB_ARRAY_SIZE, GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, GL_VERTEX_ATTRIB_ARRAY_POINTER, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, GL_VERTEX_ATTRIB_ARRAY_INTEGER, GL_VERTEX_ATTRIB_ARRAY_DIVISOR];
  15917. var ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
  15918. var VertexArray = /*#__PURE__*/function (_Resource) {
  15919. _inherits(VertexArray, _Resource);
  15920. _createClass(VertexArray, [{
  15921. key: 'MAX_ATTRIBUTES',
  15922. get: function get() {
  15923. return this.gl.getParameter(this.gl.MAX_VERTEX_ATTRIBS);
  15924. }
  15925. // Create a VertexArray
  15926. }], [{
  15927. key: 'isSupported',
  15928. value: function isSupported(gl) {
  15929. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl) || gl.getExtension(OES_vertex_array_object);
  15930. }
  15931. }, {
  15932. key: 'getDefaultArray',
  15933. value: function getDefaultArray(gl) {
  15934. gl.luma = gl.luma || {};
  15935. if (!gl.luma.defaultVertexArray) {
  15936. gl.luma.defaultVertexArray = new VertexArray(gl, { handle: null });
  15937. }
  15938. return gl.luma.defaultVertexArray;
  15939. }
  15940. }, {
  15941. key: 'getMaxAttributes',
  15942. value: function getMaxAttributes(gl) {
  15943. return gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
  15944. }
  15945. }]);
  15946. function VertexArray(gl) {
  15947. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  15948. _classCallCheck(this, VertexArray);
  15949. var _this = _possibleConstructorReturn(this, (VertexArray.__proto__ || Object.getPrototypeOf(VertexArray)).call(this, gl, opts));
  15950. _this.elements = null;
  15951. _this.buffers = {}; // new Array(this.MAX_VERTEX_ATTRIBS).fill(null);
  15952. _this.locations = {};
  15953. _this.names = {};
  15954. _this.drawParameters = {};
  15955. _this._bound = false;
  15956. _this._filledLocations = {};
  15957. Object.seal(_this);
  15958. _this.initialize(opts);
  15959. return _this;
  15960. }
  15961. _createClass(VertexArray, [{
  15962. key: 'initialize',
  15963. value: function initialize() {
  15964. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  15965. _ref$buffers = _ref.buffers,
  15966. buffers = _ref$buffers === undefined ? {} : _ref$buffers,
  15967. _ref$elements = _ref.elements,
  15968. elements = _ref$elements === undefined ? null : _ref$elements,
  15969. _ref$locations = _ref.locations,
  15970. locations = _ref$locations === undefined ? {} : _ref$locations;
  15971. this.setLocations(locations);
  15972. this.setBuffers(buffers, { clear: true });
  15973. this.setElements(elements);
  15974. }
  15975. }, {
  15976. key: 'setLocations',
  15977. // Register an optional buffer name to location mapping
  15978. value: function setLocations(locations) {
  15979. this.locations = locations;
  15980. this.names = {};
  15981. }
  15982. // Set (bind) an elements buffer, for indexed rendering. Must be GL.ELEMENT_ARRAY_BUFFER
  15983. }, {
  15984. key: 'setElements',
  15985. value: function setElements(elements) {
  15986. __WEBPACK_IMPORTED_MODULE_3_assert___default()(!elements || elements.target === GL_ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);
  15987. this.ext.bindVertexArray(this.handle);
  15988. this.gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, elements && elements.handle);
  15989. this.ext.bindVertexArray(null);
  15990. this.elements = elements;
  15991. return this;
  15992. }
  15993. // Set (bind) an array or map of vertex array buffers, either in numbered or
  15994. // named locations. (named locations requires `locations` to have been provided).
  15995. // For names that are not present in `location`, the supplied buffers will be ignored.
  15996. // if a single buffer of type GL.ELEMENT_ARRAY_BUFFER is present, it will be set as elements
  15997. // @param {Object} buffers - An object map with attribute names being keys
  15998. // and values are expected to be instances of Buffer.
  15999. }, {
  16000. key: '_getBufferAndLayout',
  16001. value: function _getBufferAndLayout(bufferData) {
  16002. // Check if buffer was supplied
  16003. var buffer = void 0;
  16004. var layout = void 0;
  16005. if (bufferData.handle) {
  16006. buffer = bufferData;
  16007. layout = bufferData.layout;
  16008. } else {
  16009. buffer = bufferData.buffer;
  16010. layout = Object.assign({}, buffer.layout, bufferData.layout || {}, bufferData);
  16011. }
  16012. return { buffer: buffer, layout: layout };
  16013. }
  16014. }, {
  16015. key: 'setBuffers',
  16016. value: function setBuffers(buffers) {
  16017. var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  16018. _ref2$clear = _ref2.clear,
  16019. clear = _ref2$clear === undefined ? true : _ref2$clear;
  16020. if (clear) {
  16021. this.clearBindings();
  16022. }
  16023. var _getLocations2 = this._getLocations(buffers),
  16024. locations = _getLocations2.locations,
  16025. elements = _getLocations2.elements;
  16026. this.ext.bindVertexArray(this.handle);
  16027. // Process locations in order
  16028. for (var location in locations) {
  16029. var bufferData = locations[location];
  16030. if (bufferData) {
  16031. var _getBufferAndLayout2 = this._getBufferAndLayout(bufferData),
  16032. buffer = _getBufferAndLayout2.buffer,
  16033. layout = _getBufferAndLayout2.layout;
  16034. this.setBuffer({ location: location, buffer: buffer, layout: layout });
  16035. this.setDivisor(location, layout.instanced ? 1 : 0);
  16036. this.enable(location);
  16037. } else {
  16038. // DISABLE MISSING ATTRIBUTE
  16039. this.disable(location);
  16040. }
  16041. }
  16042. this.buffers = buffers;
  16043. this.ext.bindVertexArray(null);
  16044. if (elements) {
  16045. this.setElements(elements);
  16046. }
  16047. }
  16048. // Enable an attribute
  16049. }, {
  16050. key: 'enable',
  16051. value: function enable(location) {
  16052. var _this2 = this;
  16053. this.bind(function () {
  16054. _this2.gl.enableVertexAttribArray(location);
  16055. });
  16056. }
  16057. }, {
  16058. key: 'clearBindings',
  16059. value: function clearBindings() {
  16060. var _this3 = this;
  16061. var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  16062. _ref3$disableZero = _ref3.disableZero,
  16063. disableZero = _ref3$disableZero === undefined ? false : _ref3$disableZero;
  16064. this.bind(function () {
  16065. for (var location in _this3._filledLocations) {
  16066. if (_this3._filledLocations[location] && (location > 0 || disableZero)) {
  16067. _this3.gl.disableVertexAttribArray(location);
  16068. }
  16069. }
  16070. _this3._filledLocations = {};
  16071. });
  16072. }
  16073. // Disable an attribute
  16074. // Perf penalty when disabling attribute 0:
  16075. // https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-
  16076. // this-has-significant-performance-penalt
  16077. }, {
  16078. key: 'disable',
  16079. value: function disable(location) {
  16080. var _this4 = this;
  16081. var disableZero = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  16082. if (location > 0 || disableZero) {
  16083. this.bind(function () {
  16084. _this4.gl.disableVertexAttribArray(location);
  16085. });
  16086. }
  16087. }
  16088. // Set the frequency divisor used for instanced rendering.
  16089. }, {
  16090. key: 'setDivisor',
  16091. value: function setDivisor(location, divisor) {
  16092. var _this5 = this;
  16093. this.bind(function () {
  16094. _this5.ext.vertexAttribDivisor(location, divisor);
  16095. });
  16096. }
  16097. // Set a location in vertex attributes array to a buffer
  16098. }, {
  16099. key: 'setBuffer',
  16100. value: function setBuffer() {
  16101. var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  16102. location = _ref4.location,
  16103. buffer = _ref4.buffer,
  16104. target = _ref4.target,
  16105. layout = _ref4.layout;
  16106. var gl = this.gl;
  16107. // Copy main data characteristics from buffer
  16108. target = target !== undefined ? target : buffer.target;
  16109. layout = layout !== undefined ? layout : buffer.layout;
  16110. __WEBPACK_IMPORTED_MODULE_3_assert___default()(target, 'setBuffer needs target');
  16111. __WEBPACK_IMPORTED_MODULE_3_assert___default()(layout, 'setBuffer called on uninitialized buffer');
  16112. this._filledLocations[location] = true;
  16113. this.bind(function () {
  16114. // a non-zero named buffer object must be bound to the GL_ARRAY_BUFFER target
  16115. buffer.bind({ target: gl.ARRAY_BUFFER });
  16116. var _layout = layout,
  16117. size = _layout.size,
  16118. type = _layout.type,
  16119. normalized = _layout.normalized,
  16120. stride = _layout.stride,
  16121. offset = _layout.offset;
  16122. // Attach _bound ARRAY_BUFFER with specified buffer format to location
  16123. if (!layout.integer) {
  16124. gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
  16125. } else {
  16126. // specifies *integer* data formats and locations of vertex attributes
  16127. __WEBPACK_IMPORTED_MODULE_3_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl));
  16128. gl.vertexAttribIPointer(location, size, type, stride, offset);
  16129. }
  16130. });
  16131. }
  16132. // Specify values for generic vertex attributes
  16133. }, {
  16134. key: 'setGeneric',
  16135. value: function setGeneric(_ref5) {
  16136. var location = _ref5.location,
  16137. array = _ref5.array;
  16138. this._filledLocations[location] = true;
  16139. switch (array.constructor) {
  16140. case Float32Array:
  16141. this._setGenericFloatArray(location, array);
  16142. break;
  16143. case Int32Array:
  16144. this._setGenericIntArray(location, array);
  16145. break;
  16146. case Uint32Array:
  16147. this._setGenericUintArray(location, array);
  16148. break;
  16149. default:
  16150. this.setGenericValues.apply(this, [location].concat(_toConsumableArray(array)));
  16151. }
  16152. }
  16153. }, {
  16154. key: '_setGenericFloatArray',
  16155. value: function _setGenericFloatArray(location, array) {
  16156. var gl = this.gl;
  16157. switch (array.length) {
  16158. case 1:
  16159. gl.vertexAttrib1fv(location, array);break;
  16160. case 2:
  16161. gl.vertexAttrib2fv(location, array);break;
  16162. case 3:
  16163. gl.vertexAttrib3fv(location, array);break;
  16164. case 4:
  16165. gl.vertexAttrib4fv(location, array);break;
  16166. default:
  16167. __WEBPACK_IMPORTED_MODULE_3_assert___default()(false);
  16168. }
  16169. }
  16170. }, {
  16171. key: '_setGenericIntArray',
  16172. value: function _setGenericIntArray(location, array) {
  16173. var gl = this.gl;
  16174. __WEBPACK_IMPORTED_MODULE_3_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl));
  16175. switch (array.length) {
  16176. case 1:
  16177. gl.vertexAttribI1iv(location, array);break;
  16178. case 2:
  16179. gl.vertexAttribI2iv(location, array);break;
  16180. case 3:
  16181. gl.vertexAttribI3iv(location, array);break;
  16182. case 4:
  16183. gl.vertexAttribI4iv(location, array);break;
  16184. default:
  16185. __WEBPACK_IMPORTED_MODULE_3_assert___default()(false);
  16186. }
  16187. }
  16188. }, {
  16189. key: '_setGenericUintArray',
  16190. value: function _setGenericUintArray(location, array) {
  16191. var gl = this.gl;
  16192. __WEBPACK_IMPORTED_MODULE_3_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl));
  16193. switch (array.length) {
  16194. case 1:
  16195. gl.vertexAttribI1uiv(location, array);break;
  16196. case 2:
  16197. gl.vertexAttribI2uiv(location, array);break;
  16198. case 3:
  16199. gl.vertexAttribI3uiv(location, array);break;
  16200. case 4:
  16201. gl.vertexAttribI4uiv(location, array);break;
  16202. default:
  16203. __WEBPACK_IMPORTED_MODULE_3_assert___default()(false);
  16204. }
  16205. }
  16206. // Specify values for generic vertex attributes
  16207. }, {
  16208. key: 'setGenericValues',
  16209. value: function setGenericValues(location, v0, v1, v2, v3) {
  16210. var gl = this.gl;
  16211. switch (arguments.length - 1) {
  16212. case 1:
  16213. gl.vertexAttrib1f(location, v0);break;
  16214. case 2:
  16215. gl.vertexAttrib2f(location, v0, v1);break;
  16216. case 3:
  16217. gl.vertexAttrib3f(location, v0, v1, v2);break;
  16218. case 4:
  16219. gl.vertexAttrib4f(location, v0, v1, v2, v3);break;
  16220. default:
  16221. __WEBPACK_IMPORTED_MODULE_3_assert___default()(false);
  16222. }
  16223. // assert(gl instanceof WebGL2RenderingContext, 'WebGL2 required');
  16224. // Looks like these will check how many arguments were supplied?
  16225. // gl.vertexAttribI4i(location, v0, v1, v2, v3);
  16226. // gl.vertexAttribI4ui(location, v0, v1, v2, v3);
  16227. }
  16228. }, {
  16229. key: 'bind',
  16230. value: function bind() {
  16231. var funcOrHandle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.handle;
  16232. if (typeof funcOrHandle !== 'function') {
  16233. this.bindVertexArray(funcOrHandle);
  16234. return this;
  16235. }
  16236. var value = void 0;
  16237. if (!this._bound) {
  16238. this.ext.bindVertexArray(this.handle);
  16239. this._bound = true;
  16240. value = funcOrHandle();
  16241. this.ext.bindVertexArray(null);
  16242. this._bound = false;
  16243. } else {
  16244. value = funcOrHandle();
  16245. }
  16246. return value;
  16247. }
  16248. // PRIVATE
  16249. // Auto detect draw parameters from the complement of buffers provided
  16250. }, {
  16251. key: '_deduceDrawParameters',
  16252. value: function _deduceDrawParameters() {
  16253. // indexing is autodetected - buffer with target gl.ELEMENT_ARRAY_BUFFER
  16254. // index type is saved for drawElement calls
  16255. var isInstanced = false;
  16256. var isIndexed = false;
  16257. var indexType = null;
  16258. // Check if we have an elements array buffer
  16259. if (this.elements) {
  16260. isIndexed = true;
  16261. indexType = this.elements.layout.type;
  16262. }
  16263. // Check if any instanced buffers
  16264. this.buffers.forEach(function (buffer) {
  16265. if (buffer.layout.instanced > 0) {
  16266. isInstanced = true;
  16267. }
  16268. });
  16269. return { isInstanced: isInstanced, isIndexed: isIndexed, indexType: indexType };
  16270. }
  16271. // this._filledLocations[bufferName] = true;
  16272. }, {
  16273. key: '_getLocations',
  16274. value: function _getLocations(buffers) {
  16275. // Try to extract elements and locations
  16276. var elements = null;
  16277. var locations = {};
  16278. for (var bufferName in buffers) {
  16279. var buffer = buffers[bufferName];
  16280. // Check if this is an elements array
  16281. if (buffer && buffer.target === GL_ELEMENT_ARRAY_BUFFER) {
  16282. __WEBPACK_IMPORTED_MODULE_3_assert___default()(!elements, 'Duplicate GL.ELEMENT_ARRAY_BUFFER');
  16283. // assert(location === undefined, 'GL.ELEMENT_ARRAY_BUFFER assigned to location');
  16284. elements = buffer;
  16285. }
  16286. // else if (!this._warn[bufferName]) {
  16287. // log.warn(2, `${this._print(bufferName)} not used`);
  16288. // this._warn[bufferName] = true;
  16289. // }
  16290. var location = Number(bufferName);
  16291. // if key is a number, interpret as the location
  16292. // if key is not a location number, assume it is a named buffer, look it up in supplied map
  16293. if (!Number.isFinite(location)) {
  16294. location = this.locations[bufferName];
  16295. }
  16296. __WEBPACK_IMPORTED_MODULE_3_assert___default()(Number.isFinite(location));
  16297. __WEBPACK_IMPORTED_MODULE_3_assert___default()(!locations[location], 'Duplicate attribute for binding point ' + location);
  16298. locations[location] = buffer;
  16299. }
  16300. return { locations: locations, elements: elements };
  16301. }
  16302. }, {
  16303. key: '_sortBuffersByLocation',
  16304. value: function _sortBuffersByLocation(buffers) {
  16305. // Try to extract elements and locations
  16306. var elements = null;
  16307. var locations = new Array(this._attributeCount).fill(null);
  16308. for (var bufferName in buffers) {
  16309. var buffer = buffers[bufferName];
  16310. // Check if this is an elements arrau
  16311. if (buffer.target === GL_ELEMENT_ARRAY_BUFFER) {
  16312. __WEBPACK_IMPORTED_MODULE_3_assert___default()(!elements, 'Duplicate GL.ELEMENT_ARRAY_BUFFER');
  16313. // assert(location === undefined, 'GL.ELEMENT_ARRAY_BUFFER assigned to location');
  16314. elements = buffer;
  16315. } else if (!this._warn[bufferName]) {
  16316. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].warn(2, this._print(bufferName) + ' not used');
  16317. this._warn[bufferName] = true;
  16318. }
  16319. var location = Number(bufferName);
  16320. // if key is a number, interpret as the location
  16321. // if key is not a location number, assume it is a named buffer, look it up in supplied map
  16322. if (!Number.isFinite(location)) {
  16323. location = this.locations[bufferName];
  16324. }
  16325. locations[location] = bufferName;
  16326. __WEBPACK_IMPORTED_MODULE_3_assert___default()(locations[location] === null, 'Duplicate attribute for binding point ' + location);
  16327. locations[location] = location;
  16328. }
  16329. return { locations: locations, elements: elements };
  16330. }
  16331. // RESOURCE IMPLEMENTATION
  16332. }, {
  16333. key: '_createHandle',
  16334. value: function _createHandle() {
  16335. return this.ext.createVertexArray();
  16336. }
  16337. }, {
  16338. key: '_deleteHandle',
  16339. value: function _deleteHandle(handle) {
  16340. this.ext.deleteVertexArray(handle);
  16341. return [this.elements];
  16342. // return [this.elements, ...this.buffers];
  16343. }
  16344. // Generic getter for information about a vertex attribute at a given position
  16345. // @param {GLuint} location - index of the vertex attribute.
  16346. // @param {GLenum} pname - specifies the information to query.
  16347. // @returns {*} - requested vertex attribute information (specified by pname)
  16348. }, {
  16349. key: '_getParameter',
  16350. value: function _getParameter(pname, _ref6) {
  16351. var location = _ref6.location;
  16352. __WEBPACK_IMPORTED_MODULE_3_assert___default()(Number.isFinite(location));
  16353. this.ext.bindVertexArray(this.handle);
  16354. // Let the polyfill intercept the query
  16355. var result = void 0;
  16356. switch (pname) {
  16357. case GL_VERTEX_ATTRIB_ARRAY_POINTER:
  16358. result = this.gl.getVertexAttribOffset(location, pname);
  16359. break;
  16360. default:
  16361. result = this.ext.getVertexAttrib(location, pname);
  16362. }
  16363. this.ext.bindVertexArray(null);
  16364. return result;
  16365. }
  16366. }, {
  16367. key: '_getData',
  16368. value: function _getData() {
  16369. var _this6 = this;
  16370. return new Array(this.MAX_ATTRIBUTES).fill(0).map(function (_, location) {
  16371. var result = {};
  16372. PARAMETERS.forEach(function (parameter) {
  16373. result[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["c" /* glKey */])(parameter)] = _this6.getParameter(parameter, { location: location });
  16374. });
  16375. return result;
  16376. });
  16377. }
  16378. }, {
  16379. key: '_bind',
  16380. value: function _bind(handle) {
  16381. this.ext.bindVertexArray(handle);
  16382. }
  16383. }, {
  16384. key: 'filledLocations',
  16385. get: function get() {
  16386. return this._filledLocations;
  16387. }
  16388. }]);
  16389. return VertexArray;
  16390. }(__WEBPACK_IMPORTED_MODULE_2__resource__["a" /* default */]);
  16391. /* harmony default export */ __webpack_exports__["a"] = (VertexArray);
  16392. //# sourceMappingURL=vertex-array.js.map
  16393. /***/ }),
  16394. /* 170 */
  16395. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  16396. "use strict";
  16397. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math_array__ = __webpack_require__(112);
  16398. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common__ = __webpack_require__(31);
  16399. var _createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)throw new TypeError('Super expression must either be null or a function, not '+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}var Vector=function(_MathArray){function Vector(){return _classCallCheck(this,Vector),_possibleConstructorReturn(this,(Vector.__proto__||Object.getPrototypeOf(Vector)).apply(this,arguments))}var _Mathsqrt=Math.sqrt;return _inherits(Vector,_MathArray),_createClass(Vector,[{key:'len',value:function len(){return _Mathsqrt(this.lengthSquared())}},{key:'magnitude',value:function magnitude(){return _Mathsqrt(this.lengthSquared())}},{key:'lengthSquared',value:function lengthSquared(){for(var length=0,i=0;i<this.ELEMENTS;++i)length+=this[i]*this[i];return length}},{key:'distance',value:function distance(mathArray){return _Mathsqrt(this.distanceSquared(mathArray))}},{key:'distanceSquared',value:function distanceSquared(mathArray){for(var dist,length=0,i=0;i<this.ELEMENTS;++i)dist=this[i]-mathArray[i],length+=dist*dist;return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(length)}},{key:'dot',value:function dot(mathArray){for(var product=0,i=0;i<this.ELEMENTS;++i)product+=this[i]*mathArray[i];return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(product)}},{key:'normalize',value:function normalize(){var length=this.magnitude();if(0!==length)for(var i=0;i<this.ELEMENTS;++i)this[i]/=length;return this.check()}}]),Vector}(__WEBPACK_IMPORTED_MODULE_0__math_array__["a" /* default */]);/* harmony default export */ __webpack_exports__["a"] = (Vector);
  16400. //# sourceMappingURL=vector.js.map
  16401. /***/ }),
  16402. /* 171 */
  16403. /***/ (function(module, exports, __webpack_require__) {
  16404. "use strict";
  16405. /*
  16406. object-assign
  16407. (c) Sindre Sorhus
  16408. @license MIT
  16409. */
  16410. /* eslint-disable no-unused-vars */
  16411. var getOwnPropertySymbols = Object.getOwnPropertySymbols;
  16412. var hasOwnProperty = Object.prototype.hasOwnProperty;
  16413. var propIsEnumerable = Object.prototype.propertyIsEnumerable;
  16414. function toObject(val) {
  16415. if (val === null || val === undefined) {
  16416. throw new TypeError('Object.assign cannot be called with null or undefined');
  16417. }
  16418. return Object(val);
  16419. }
  16420. function shouldUseNative() {
  16421. try {
  16422. if (!Object.assign) {
  16423. return false;
  16424. }
  16425. // Detect buggy property enumeration order in older V8 versions.
  16426. // https://bugs.chromium.org/p/v8/issues/detail?id=4118
  16427. var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
  16428. test1[5] = 'de';
  16429. if (Object.getOwnPropertyNames(test1)[0] === '5') {
  16430. return false;
  16431. }
  16432. // https://bugs.chromium.org/p/v8/issues/detail?id=3056
  16433. var test2 = {};
  16434. for (var i = 0; i < 10; i++) {
  16435. test2['_' + String.fromCharCode(i)] = i;
  16436. }
  16437. var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
  16438. return test2[n];
  16439. });
  16440. if (order2.join('') !== '0123456789') {
  16441. return false;
  16442. }
  16443. // https://bugs.chromium.org/p/v8/issues/detail?id=3056
  16444. var test3 = {};
  16445. 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
  16446. test3[letter] = letter;
  16447. });
  16448. if (Object.keys(Object.assign({}, test3)).join('') !==
  16449. 'abcdefghijklmnopqrst') {
  16450. return false;
  16451. }
  16452. return true;
  16453. } catch (err) {
  16454. // We don't expect any of the above to throw, but better to be safe.
  16455. return false;
  16456. }
  16457. }
  16458. module.exports = shouldUseNative() ? Object.assign : function (target, source) {
  16459. var from;
  16460. var to = toObject(target);
  16461. var symbols;
  16462. for (var s = 1; s < arguments.length; s++) {
  16463. from = Object(arguments[s]);
  16464. for (var key in from) {
  16465. if (hasOwnProperty.call(from, key)) {
  16466. to[key] = from[key];
  16467. }
  16468. }
  16469. if (getOwnPropertySymbols) {
  16470. symbols = getOwnPropertySymbols(from);
  16471. for (var i = 0; i < symbols.length; i++) {
  16472. if (propIsEnumerable.call(from, symbols[i])) {
  16473. to[symbols[i]] = from[symbols[i]];
  16474. }
  16475. }
  16476. }
  16477. }
  16478. return to;
  16479. };
  16480. /***/ }),
  16481. /* 172 */
  16482. /***/ (function(module, exports, __webpack_require__) {
  16483. "use strict";
  16484. /**
  16485. * Copyright (c) 2013-present, Facebook, Inc.
  16486. *
  16487. * This source code is licensed under the MIT license found in the
  16488. * LICENSE file in the root directory of this source tree.
  16489. */
  16490. var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
  16491. module.exports = ReactPropTypesSecret;
  16492. /***/ }),
  16493. /* 173 */
  16494. /***/ (function(module, exports, __webpack_require__) {
  16495. "use strict";
  16496. Object.defineProperty(exports, "__esModule", {
  16497. value: true
  16498. });
  16499. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  16500. // Copyright (c) 2017 Uber Technologies, Inc.
  16501. //
  16502. // Permission is hereby granted, free of charge, to any person obtaining a copy
  16503. // of this software and associated documentation files (the "Software"), to deal
  16504. // in the Software without restriction, including without limitation the rights
  16505. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  16506. // copies of the Software, and to permit persons to whom the Software is
  16507. // furnished to do so, subject to the following conditions:
  16508. //
  16509. // The above copyright notice and this permission notice shall be included in
  16510. // all copies or substantial portions of the Software.
  16511. //
  16512. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16513. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16514. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16515. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  16516. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  16517. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  16518. // THE SOFTWARE.
  16519. var isBrowser = typeof window !== 'undefined' && window.addEventListener;
  16520. var timers = new Map();
  16521. /**
  16522. * Ready check for Seer initialization
  16523. *
  16524. * @returns {Boolean}
  16525. */
  16526. var isReady = function isReady() {
  16527. return isBrowser && window.__SEER_INITIALIZED__;
  16528. };
  16529. /**
  16530. * Utility method allowing to throttle a user action based on a key and a minimun delay.
  16531. *
  16532. * @param key {String} A unique key
  16533. * @param delay {Number} The minimal delay to throttle
  16534. * @returns {Boolean}
  16535. */
  16536. var throttle = function throttle(key, delay) {
  16537. var time = timers.get(key);
  16538. var now = Date.now();
  16539. if (time && now - time < delay) {
  16540. return true;
  16541. }
  16542. timers.set(key, now);
  16543. return false;
  16544. };
  16545. var replacer = function replacer(seen) {
  16546. return function (key, value) {
  16547. if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && seen.has(value)) {
  16548. return;
  16549. }
  16550. seen.add(value);
  16551. var isArray = Object.prototype.toString.call(value).slice(8, -1).includes('Array');
  16552. if (isArray) {
  16553. return Array.prototype.slice.call(value, 0, 20);
  16554. }
  16555. return value;
  16556. };
  16557. };
  16558. /**
  16559. * Low-level api leveraging window.postMessage
  16560. *
  16561. * @param type {String} The action type
  16562. * @param payload {Any} The action payload
  16563. */
  16564. var send = function send(type) {
  16565. var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  16566. if (!isBrowser || !isReady()) {
  16567. return;
  16568. }
  16569. var seen = new Set();
  16570. var payload = JSON.stringify(data, replacer(seen));
  16571. try {
  16572. window.postMessage({ type: type, payload: payload, source: 'seer-agent' }, '*');
  16573. } catch (e) {
  16574. if (throttle('seer-log', 2E3)) {
  16575. return;
  16576. }
  16577. console.log(e); // eslint-disable-line
  16578. }
  16579. };
  16580. var listeners = new Map();
  16581. var listener = function listener(message) {
  16582. if (!message || !message.data || message.data.source !== 'seer-core') {
  16583. return;
  16584. }
  16585. var _message$data = message.data,
  16586. type = _message$data.type,
  16587. payload = _message$data.payload;
  16588. var typeListeners = listeners.get(type);
  16589. if (typeListeners) {
  16590. typeListeners.forEach(function (cb) {
  16591. return cb(payload);
  16592. });
  16593. }
  16594. };
  16595. /**
  16596. * Initilize window listener. There will be only one for the whole process
  16597. * to prevent too many registrations.
  16598. *
  16599. * This method will be called automatically if you use the `listenFor` method.
  16600. */
  16601. var init = function init() {
  16602. if (!isBrowser || window.__SEER_LISTENER__) {
  16603. return;
  16604. }
  16605. window.addEventListener('message', listener);
  16606. window.__SEER_LISTENER__ = true;
  16607. };
  16608. /**
  16609. * Clean listener. Can be useful in case you want to unregister upcoming events
  16610. * or liberate memory.
  16611. */
  16612. var clean = function clean() {
  16613. if (!isBrowser || !window.__SEER_LISTENER__) {
  16614. return;
  16615. }
  16616. window.removeEventListener('message', listener);
  16617. delete window.__SEER_LISTENER__;
  16618. };
  16619. /**
  16620. * Create a listener that will be called upon events of the given key.
  16621. *
  16622. * @param key {String} The unique tab key
  16623. * @param cb {Function} A callback that will receive the message payload
  16624. */
  16625. var listenFor = function listenFor(type, cb) {
  16626. if (!isBrowser) {
  16627. return;
  16628. }
  16629. if (!type || !cb) {
  16630. throw new Error('Please provide a type and callback');
  16631. }
  16632. if (!listeners.has(type)) {
  16633. listeners.set(type, []);
  16634. }
  16635. if (!window.__SEER_LISTENER__) {
  16636. init();
  16637. }
  16638. listeners.get(type).push(cb);
  16639. };
  16640. /**
  16641. * Remove an identity listener
  16642. *
  16643. * @param cb {Function} The callback to remove
  16644. */
  16645. var removeListener = function removeListener(cb) {
  16646. listeners.forEach(function (typeListeners, key) {
  16647. listeners.set(key, typeListeners.filter(function (l) {
  16648. return l !== cb;
  16649. }));
  16650. });
  16651. };
  16652. /**
  16653. * Creates a new indexed list.
  16654. * It works by index to get O(1) accessing and performance.
  16655. *
  16656. * @param key {String} The key of the tab
  16657. * @param data {Object} The indexed object
  16658. */
  16659. var list = function list(key, data) {
  16660. return send('LIST', { key: key, data: data });
  16661. };
  16662. /**
  16663. * Creates an element in the indexed list, based on the itemKey.
  16664. *
  16665. * @param key {String} The key of the tab
  16666. * @param itemKey {String} The key of the item
  16667. * @param data {Any} The value of the item
  16668. */
  16669. var listItem = function listItem(key, itemKey) {
  16670. var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  16671. return send('LIST_ITEM', { key: key, itemKey: itemKey, data: data });
  16672. };
  16673. /**
  16674. * Update an item property, can be deeply nested.
  16675. *
  16676. * @param key {String} The key of the tab
  16677. * @param itemKey {String} The key of the item
  16678. * @param path {String} The path of the variable you want to update
  16679. * @param data {Object} The new value
  16680. */
  16681. var updateItem = function updateItem(key, itemKey, path, data) {
  16682. return send('UPDATE_ITEM', { key: key, itemKey: itemKey, path: path, data: data });
  16683. };
  16684. /**
  16685. * Similar to updateItem, but allows to pass an array with {path,data} pairs for
  16686. * multiple update of the same item without having to send multiple messages.
  16687. *
  16688. * @param key {String} The key of the tab
  16689. * @param itemKey {String} The key of the item
  16690. * @param array {Array} The array of updates
  16691. * @param array.path {String} The path for this update
  16692. * @param array.data {Object} The value of this update
  16693. */
  16694. var multiUpdate = function multiUpdate(key, itemKey, array) {
  16695. return send('MULTI_UPDATE_ITEM', { key: key, itemKey: itemKey, array: array });
  16696. };
  16697. /**
  16698. * Remove a specific item in a specific tab.
  16699. *
  16700. * @param key {String} They key of the tab
  16701. * @param itemKey {String} The key of the item
  16702. */
  16703. var deleteItem = function deleteItem(key, itemKey) {
  16704. return send('DELETE_ITEM', { key: key, itemKey: itemKey });
  16705. };
  16706. /**
  16707. * Will create a log message to an item, that will be displayde with the current time.
  16708. *
  16709. * @param key {String} The key of the tab
  16710. * @param itemKey {String} The key of the item
  16711. * @param msg {String} The message to display
  16712. */
  16713. var addLog = function addLog(key, itemKey, msg) {
  16714. return send('ADD_LOG', { key: key, itemKey: itemKey, msg: msg });
  16715. };
  16716. exports.default = {
  16717. send: send,
  16718. throttle: throttle,
  16719. isReady: isReady,
  16720. list: list,
  16721. listItem: listItem,
  16722. updateItem: updateItem,
  16723. multiUpdate: multiUpdate,
  16724. deleteItem: deleteItem,
  16725. addLog: addLog,
  16726. listeners: listeners,
  16727. listenFor: listenFor,
  16728. removeListener: removeListener,
  16729. init: init,
  16730. clean: clean
  16731. };
  16732. /***/ }),
  16733. /* 174 */
  16734. /***/ (function(module, exports, __webpack_require__) {
  16735. "use strict";
  16736. Object.defineProperty(exports, "__esModule", {
  16737. value: true
  16738. });
  16739. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  16740. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  16741. var _core = __webpack_require__(13);
  16742. var _luma = __webpack_require__(12);
  16743. var _gridCellLayerVertex = __webpack_require__(297);
  16744. var _gridCellLayerVertex2 = _interopRequireDefault(_gridCellLayerVertex);
  16745. var _gridCellLayerVertex3 = __webpack_require__(296);
  16746. var _gridCellLayerVertex4 = _interopRequireDefault(_gridCellLayerVertex3);
  16747. var _gridCellLayerFragment = __webpack_require__(295);
  16748. var _gridCellLayerFragment2 = _interopRequireDefault(_gridCellLayerFragment);
  16749. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  16750. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  16751. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  16752. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  16753. //
  16754. // Permission is hereby granted, free of charge, to any person obtaining a copy
  16755. // of this software and associated documentation files (the "Software"), to deal
  16756. // in the Software without restriction, including without limitation the rights
  16757. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  16758. // copies of the Software, and to permit persons to whom the Software is
  16759. // furnished to do so, subject to the following conditions:
  16760. //
  16761. // The above copyright notice and this permission notice shall be included in
  16762. // all copies or substantial portions of the Software.
  16763. //
  16764. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16765. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16766. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16767. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  16768. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  16769. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  16770. // THE SOFTWARE.
  16771. var fp64LowPart = _core.experimental.fp64LowPart,
  16772. enable64bitSupport = _core.experimental.enable64bitSupport;
  16773. var DEFAULT_COLOR = [255, 0, 255, 255];
  16774. var defaultProps = {
  16775. cellSize: 1000,
  16776. coverage: 1,
  16777. elevationScale: 1,
  16778. extruded: true,
  16779. fp64: false,
  16780. getPosition: function getPosition(x) {
  16781. return x.position;
  16782. },
  16783. getElevation: function getElevation(x) {
  16784. return x.elevation;
  16785. },
  16786. getColor: function getColor(x) {
  16787. return x.color;
  16788. },
  16789. lightSettings: {
  16790. lightsPosition: [-122.45, 37.65, 8000, -122.45, 37.2, 1000],
  16791. ambientRatio: 0.4,
  16792. diffuseRatio: 0.6,
  16793. specularRatio: 0.8,
  16794. lightsStrength: [1.0, 0.0, 0.8, 0.0],
  16795. numberOfLights: 2
  16796. }
  16797. };
  16798. var GridCellLayer = function (_Layer) {
  16799. _inherits(GridCellLayer, _Layer);
  16800. function GridCellLayer() {
  16801. _classCallCheck(this, GridCellLayer);
  16802. return _possibleConstructorReturn(this, (GridCellLayer.__proto__ || Object.getPrototypeOf(GridCellLayer)).apply(this, arguments));
  16803. }
  16804. _createClass(GridCellLayer, [{
  16805. key: 'getShaders',
  16806. /**
  16807. * A generic GridLayer that takes latitude longitude delta of cells as a uniform
  16808. * and the min lat lng of cells. grid can be 3d when pass in a height
  16809. * and set enable3d to true
  16810. *
  16811. * @param {array} props.data -
  16812. * @param {boolean} props.extruded - enable grid elevation
  16813. * @param {number} props.cellSize - grid cell size in meters
  16814. * @param {function} props.getPosition - position accessor, returned as [minLng, minLat]
  16815. * @param {function} props.getElevation - elevation accessor
  16816. * @param {function} props.getColor - color accessor, returned as [r, g, b, a]
  16817. */
  16818. value: function getShaders() {
  16819. var shaderCache = this.context.shaderCache;
  16820. return enable64bitSupport(this.props) ? { vs: _gridCellLayerVertex4.default, fs: _gridCellLayerFragment2.default, modules: ['project64', 'lighting', 'picking'], shaderCache: shaderCache } : { vs: _gridCellLayerVertex2.default, fs: _gridCellLayerFragment2.default, modules: ['lighting', 'picking'], shaderCache: shaderCache }; // 'project' module added by default.
  16821. }
  16822. }, {
  16823. key: 'initializeState',
  16824. value: function initializeState() {
  16825. var attributeManager = this.getAttributeManager();
  16826. /* eslint-disable max-len */
  16827. attributeManager.addInstanced({
  16828. instancePositions: {
  16829. size: 4,
  16830. transition: true,
  16831. accessor: ['getPosition', 'getElevation'],
  16832. update: this.calculateInstancePositions
  16833. },
  16834. instanceColors: {
  16835. size: 4,
  16836. type: _luma.GL.UNSIGNED_BYTE,
  16837. transition: true,
  16838. accessor: 'getColor',
  16839. update: this.calculateInstanceColors
  16840. }
  16841. });
  16842. /* eslint-enable max-len */
  16843. }
  16844. }, {
  16845. key: 'updateAttribute',
  16846. value: function updateAttribute(_ref) {
  16847. var props = _ref.props,
  16848. oldProps = _ref.oldProps,
  16849. changeFlags = _ref.changeFlags;
  16850. if (props.fp64 !== oldProps.fp64) {
  16851. var attributeManager = this.getAttributeManager();
  16852. attributeManager.invalidateAll();
  16853. if (props.fp64 && props.coordinateSystem === _core.COORDINATE_SYSTEM.LNGLAT) {
  16854. attributeManager.addInstanced({
  16855. instancePositions64xyLow: {
  16856. size: 2,
  16857. accessor: 'getPosition',
  16858. update: this.calculateInstancePositions64xyLow
  16859. }
  16860. });
  16861. } else {
  16862. attributeManager.remove(['instancePositions64xyLow']);
  16863. }
  16864. }
  16865. }
  16866. }, {
  16867. key: 'updateState',
  16868. value: function updateState(_ref2) {
  16869. var props = _ref2.props,
  16870. oldProps = _ref2.oldProps,
  16871. changeFlags = _ref2.changeFlags;
  16872. _get(GridCellLayer.prototype.__proto__ || Object.getPrototypeOf(GridCellLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  16873. // Re-generate model if geometry changed
  16874. if (props.fp64 !== oldProps.fp64) {
  16875. var gl = this.context.gl;
  16876. this.setState({ model: this._getModel(gl) });
  16877. }
  16878. this.updateAttribute({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  16879. this.updateUniforms();
  16880. }
  16881. }, {
  16882. key: '_getModel',
  16883. value: function _getModel(gl) {
  16884. return new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  16885. id: this.props.id,
  16886. geometry: new _luma.CubeGeometry(),
  16887. isInstanced: true,
  16888. shaderCache: this.context.shaderCache
  16889. }));
  16890. }
  16891. }, {
  16892. key: 'updateUniforms',
  16893. value: function updateUniforms() {
  16894. var _props = this.props,
  16895. opacity = _props.opacity,
  16896. extruded = _props.extruded,
  16897. elevationScale = _props.elevationScale,
  16898. coverage = _props.coverage,
  16899. lightSettings = _props.lightSettings;
  16900. var model = this.state.model;
  16901. model.setUniforms(Object.assign({}, {
  16902. extruded: extruded,
  16903. elevationScale: elevationScale,
  16904. opacity: opacity,
  16905. coverage: coverage
  16906. }, lightSettings));
  16907. }
  16908. }, {
  16909. key: 'draw',
  16910. value: function draw(_ref3) {
  16911. var uniforms = _ref3.uniforms;
  16912. var viewport = this.context.viewport;
  16913. // TODO - this should be a standard uniform in project package
  16914. var _viewport$getDistance = viewport.getDistanceScales(),
  16915. pixelsPerMeter = _viewport$getDistance.pixelsPerMeter;
  16916. // cellSize needs to be updated on every draw call
  16917. // because it is based on viewport
  16918. _get(GridCellLayer.prototype.__proto__ || Object.getPrototypeOf(GridCellLayer.prototype), 'draw', this).call(this, {
  16919. uniforms: Object.assign({
  16920. cellSize: this.props.cellSize * pixelsPerMeter[0]
  16921. }, uniforms)
  16922. });
  16923. }
  16924. }, {
  16925. key: 'calculateInstancePositions',
  16926. value: function calculateInstancePositions(attribute) {
  16927. var _props2 = this.props,
  16928. data = _props2.data,
  16929. getPosition = _props2.getPosition,
  16930. getElevation = _props2.getElevation;
  16931. var value = attribute.value,
  16932. size = attribute.size;
  16933. var i = 0;
  16934. var _iteratorNormalCompletion = true;
  16935. var _didIteratorError = false;
  16936. var _iteratorError = undefined;
  16937. try {
  16938. for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  16939. var object = _step.value;
  16940. var position = getPosition(object);
  16941. var elevation = getElevation(object) || 0;
  16942. value[i + 0] = position[0];
  16943. value[i + 1] = position[1];
  16944. value[i + 2] = 0;
  16945. value[i + 3] = elevation;
  16946. i += size;
  16947. }
  16948. } catch (err) {
  16949. _didIteratorError = true;
  16950. _iteratorError = err;
  16951. } finally {
  16952. try {
  16953. if (!_iteratorNormalCompletion && _iterator.return) {
  16954. _iterator.return();
  16955. }
  16956. } finally {
  16957. if (_didIteratorError) {
  16958. throw _iteratorError;
  16959. }
  16960. }
  16961. }
  16962. }
  16963. }, {
  16964. key: 'calculateInstancePositions64xyLow',
  16965. value: function calculateInstancePositions64xyLow(attribute) {
  16966. var _props3 = this.props,
  16967. data = _props3.data,
  16968. getPosition = _props3.getPosition;
  16969. var value = attribute.value;
  16970. var i = 0;
  16971. var _iteratorNormalCompletion2 = true;
  16972. var _didIteratorError2 = false;
  16973. var _iteratorError2 = undefined;
  16974. try {
  16975. for (var _iterator2 = data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  16976. var point = _step2.value;
  16977. var position = getPosition(point);
  16978. value[i++] = fp64LowPart(position[0]);
  16979. value[i++] = fp64LowPart(position[1]);
  16980. }
  16981. } catch (err) {
  16982. _didIteratorError2 = true;
  16983. _iteratorError2 = err;
  16984. } finally {
  16985. try {
  16986. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  16987. _iterator2.return();
  16988. }
  16989. } finally {
  16990. if (_didIteratorError2) {
  16991. throw _iteratorError2;
  16992. }
  16993. }
  16994. }
  16995. }
  16996. }, {
  16997. key: 'calculateInstanceColors',
  16998. value: function calculateInstanceColors(attribute) {
  16999. var _props4 = this.props,
  17000. data = _props4.data,
  17001. getColor = _props4.getColor;
  17002. var value = attribute.value,
  17003. size = attribute.size;
  17004. var i = 0;
  17005. var _iteratorNormalCompletion3 = true;
  17006. var _didIteratorError3 = false;
  17007. var _iteratorError3 = undefined;
  17008. try {
  17009. for (var _iterator3 = data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  17010. var object = _step3.value;
  17011. var color = getColor(object) || DEFAULT_COLOR;
  17012. value[i + 0] = color[0];
  17013. value[i + 1] = color[1];
  17014. value[i + 2] = color[2];
  17015. value[i + 3] = Number.isFinite(color[3]) ? color[3] : DEFAULT_COLOR[3];
  17016. i += size;
  17017. }
  17018. } catch (err) {
  17019. _didIteratorError3 = true;
  17020. _iteratorError3 = err;
  17021. } finally {
  17022. try {
  17023. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  17024. _iterator3.return();
  17025. }
  17026. } finally {
  17027. if (_didIteratorError3) {
  17028. throw _iteratorError3;
  17029. }
  17030. }
  17031. }
  17032. }
  17033. }]);
  17034. return GridCellLayer;
  17035. }(_core.Layer);
  17036. exports.default = GridCellLayer;
  17037. GridCellLayer.layerName = 'GridCellLayer';
  17038. GridCellLayer.defaultProps = defaultProps;
  17039. /***/ }),
  17040. /* 175 */
  17041. /***/ (function(module, exports, __webpack_require__) {
  17042. "use strict";
  17043. Object.defineProperty(exports, "__esModule", {
  17044. value: true
  17045. });
  17046. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  17047. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  17048. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  17049. var _core = __webpack_require__(13);
  17050. var _luma = __webpack_require__(12);
  17051. var _hexagonCellLayerVertex = __webpack_require__(302);
  17052. var _hexagonCellLayerVertex2 = _interopRequireDefault(_hexagonCellLayerVertex);
  17053. var _hexagonCellLayerVertex3 = __webpack_require__(301);
  17054. var _hexagonCellLayerVertex4 = _interopRequireDefault(_hexagonCellLayerVertex3);
  17055. var _hexagonCellLayerFragment = __webpack_require__(300);
  17056. var _hexagonCellLayerFragment2 = _interopRequireDefault(_hexagonCellLayerFragment);
  17057. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  17058. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  17059. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  17060. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  17061. //
  17062. // Permission is hereby granted, free of charge, to any person obtaining a copy
  17063. // of this software and associated documentation files (the "Software"), to deal
  17064. // in the Software without restriction, including without limitation the rights
  17065. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  17066. // copies of the Software, and to permit persons to whom the Software is
  17067. // furnished to do so, subject to the following conditions:
  17068. //
  17069. // The above copyright notice and this permission notice shall be included in
  17070. // all copies or substantial portions of the Software.
  17071. //
  17072. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17073. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17074. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17075. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17076. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  17077. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  17078. // THE SOFTWARE.
  17079. var log = _core.experimental.log,
  17080. fp64LowPart = _core.experimental.fp64LowPart,
  17081. enable64bitSupport = _core.experimental.enable64bitSupport;
  17082. var DEFAULT_COLOR = [255, 0, 255, 255];
  17083. var defaultProps = {
  17084. hexagonVertices: null,
  17085. radius: null,
  17086. angle: null,
  17087. coverage: 1,
  17088. elevationScale: 1,
  17089. extruded: true,
  17090. fp64: false,
  17091. getCentroid: function getCentroid(x) {
  17092. return x.centroid;
  17093. },
  17094. getColor: function getColor(x) {
  17095. return x.color;
  17096. },
  17097. getElevation: function getElevation(x) {
  17098. return x.elevation;
  17099. },
  17100. lightSettings: {
  17101. lightsPosition: [-122.45, 37.75, 8000, -122.0, 38.0, 5000],
  17102. ambientRatio: 0.4,
  17103. diffuseRatio: 0.6,
  17104. specularRatio: 0.8,
  17105. lightsStrength: [1.2, 0.0, 0.8, 0.0],
  17106. numberOfLights: 2
  17107. }
  17108. };
  17109. var HexagonCellLayer = function (_Layer) {
  17110. _inherits(HexagonCellLayer, _Layer);
  17111. function HexagonCellLayer(props) {
  17112. _classCallCheck(this, HexagonCellLayer);
  17113. var missingProps = false;
  17114. if (!props.hexagonVertices && (!props.radius || !Number.isFinite(props.angle))) {
  17115. log.once(0, 'HexagonCellLayer: Either hexagonVertices or radius and angle are ' + 'needed to calculate primitive hexagon.');
  17116. missingProps = true;
  17117. } else if (props.hexagonVertices && (!Array.isArray(props.hexagonVertices) || props.hexagonVertices.length < 6)) {
  17118. log.once(0, 'HexagonCellLayer: hexagonVertices needs to be an array of 6 points');
  17119. missingProps = true;
  17120. }
  17121. if (missingProps) {
  17122. log.once(0, 'Now using 1000 meter as default radius, 0 as default angle');
  17123. props.radius = 1000;
  17124. props.angle = 0;
  17125. }
  17126. return _possibleConstructorReturn(this, (HexagonCellLayer.__proto__ || Object.getPrototypeOf(HexagonCellLayer)).call(this, props));
  17127. }
  17128. _createClass(HexagonCellLayer, [{
  17129. key: 'getShaders',
  17130. value: function getShaders() {
  17131. return enable64bitSupport(this.props) ? { vs: _hexagonCellLayerVertex4.default, fs: _hexagonCellLayerFragment2.default, modules: ['project64', 'lighting', 'picking'] } : { vs: _hexagonCellLayerVertex2.default, fs: _hexagonCellLayerFragment2.default, modules: ['lighting', 'picking'] }; // 'project' module added by default.
  17132. }
  17133. /**
  17134. * DeckGL calls initializeState when GL context is available
  17135. * Essentially a deferred constructor
  17136. */
  17137. }, {
  17138. key: 'initializeState',
  17139. value: function initializeState() {
  17140. var attributeManager = this.getAttributeManager();
  17141. /* eslint-disable max-len */
  17142. attributeManager.addInstanced({
  17143. instancePositions: {
  17144. size: 3,
  17145. transition: true,
  17146. accessor: ['getCentroid', 'getElevation'],
  17147. update: this.calculateInstancePositions
  17148. },
  17149. instanceColors: {
  17150. size: 4,
  17151. type: _luma.GL.UNSIGNED_BYTE,
  17152. transition: true,
  17153. accessor: 'getColor',
  17154. update: this.calculateInstanceColors
  17155. }
  17156. });
  17157. /* eslint-enable max-len */
  17158. }
  17159. }, {
  17160. key: 'updateAttribute',
  17161. value: function updateAttribute(_ref) {
  17162. var props = _ref.props,
  17163. oldProps = _ref.oldProps,
  17164. changeFlags = _ref.changeFlags;
  17165. if (props.fp64 !== oldProps.fp64) {
  17166. var attributeManager = this.getAttributeManager();
  17167. attributeManager.invalidateAll();
  17168. if (props.fp64 && props.coordinateSystem === _core.COORDINATE_SYSTEM.LNGLAT) {
  17169. attributeManager.addInstanced({
  17170. instancePositions64xyLow: {
  17171. size: 2,
  17172. accessor: 'getCentroid',
  17173. update: this.calculateInstancePositions64xyLow
  17174. }
  17175. });
  17176. } else {
  17177. attributeManager.remove(['instancePositions64xyLow']);
  17178. }
  17179. }
  17180. }
  17181. }, {
  17182. key: 'updateState',
  17183. value: function updateState(_ref2) {
  17184. var props = _ref2.props,
  17185. oldProps = _ref2.oldProps,
  17186. changeFlags = _ref2.changeFlags;
  17187. _get(HexagonCellLayer.prototype.__proto__ || Object.getPrototypeOf(HexagonCellLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  17188. if (props.fp64 !== oldProps.fp64) {
  17189. var gl = this.context.gl;
  17190. this.setState({ model: this._getModel(gl) });
  17191. }
  17192. this.updateAttribute({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  17193. this.updateUniforms();
  17194. }
  17195. }, {
  17196. key: 'updateRadiusAngle',
  17197. value: function updateRadiusAngle() {
  17198. var angle = void 0;
  17199. var radius = void 0;
  17200. var hexagonVertices = this.props.hexagonVertices;
  17201. if (Array.isArray(hexagonVertices) && hexagonVertices.length >= 6) {
  17202. // calculate angle and vertices from hexagonVertices if provided
  17203. var vertices = this.props.hexagonVertices;
  17204. var vertex0 = vertices[0];
  17205. var vertex3 = vertices[3];
  17206. // transform to space coordinates
  17207. var spaceCoord0 = this.projectFlat(vertex0);
  17208. var spaceCoord3 = this.projectFlat(vertex3);
  17209. // distance between two close centroids
  17210. var dx = spaceCoord0[0] - spaceCoord3[0];
  17211. var dy = spaceCoord0[1] - spaceCoord3[1];
  17212. var dxy = Math.sqrt(dx * dx + dy * dy);
  17213. // Calculate angle that the perpendicular hexagon vertex axis is tilted
  17214. angle = Math.acos(dx / dxy) * -Math.sign(dy) + Math.PI / 2;
  17215. radius = dxy / 2;
  17216. } else if (this.props.radius && Number.isFinite(this.props.angle)) {
  17217. // if no hexagonVertices provided, try use radius & angle
  17218. var viewport = this.context.viewport;
  17219. // TODO - this should be a standard uniform in project package
  17220. var _viewport$getDistance = viewport.getDistanceScales(),
  17221. pixelsPerMeter = _viewport$getDistance.pixelsPerMeter;
  17222. angle = this.props.angle;
  17223. radius = this.props.radius * pixelsPerMeter[0];
  17224. }
  17225. return { angle: angle, radius: radius };
  17226. }
  17227. }, {
  17228. key: 'getCylinderGeometry',
  17229. value: function getCylinderGeometry(radius) {
  17230. return new _luma.CylinderGeometry({
  17231. radius: radius,
  17232. topRadius: radius,
  17233. bottomRadius: radius,
  17234. topCap: true,
  17235. bottomCap: true,
  17236. height: 1,
  17237. nradial: 6,
  17238. nvertical: 1
  17239. });
  17240. }
  17241. }, {
  17242. key: 'updateUniforms',
  17243. value: function updateUniforms() {
  17244. var _props = this.props,
  17245. opacity = _props.opacity,
  17246. elevationScale = _props.elevationScale,
  17247. extruded = _props.extruded,
  17248. coverage = _props.coverage,
  17249. lightSettings = _props.lightSettings;
  17250. var model = this.state.model;
  17251. model.setUniforms(Object.assign({}, {
  17252. extruded: extruded,
  17253. opacity: opacity,
  17254. coverage: coverage,
  17255. elevationScale: elevationScale
  17256. }, lightSettings));
  17257. }
  17258. }, {
  17259. key: '_getModel',
  17260. value: function _getModel(gl) {
  17261. return new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  17262. id: this.props.id,
  17263. geometry: this.getCylinderGeometry(1),
  17264. isInstanced: true,
  17265. shaderCache: this.context.shaderCache
  17266. }));
  17267. }
  17268. }, {
  17269. key: 'draw',
  17270. value: function draw(_ref3) {
  17271. var uniforms = _ref3.uniforms;
  17272. _get(HexagonCellLayer.prototype.__proto__ || Object.getPrototypeOf(HexagonCellLayer.prototype), 'draw', this).call(this, { uniforms: Object.assign(this.updateRadiusAngle(), uniforms) });
  17273. }
  17274. }, {
  17275. key: 'calculateInstancePositions',
  17276. value: function calculateInstancePositions(attribute) {
  17277. var _props2 = this.props,
  17278. data = _props2.data,
  17279. getCentroid = _props2.getCentroid,
  17280. getElevation = _props2.getElevation;
  17281. var value = attribute.value,
  17282. size = attribute.size;
  17283. var i = 0;
  17284. var _iteratorNormalCompletion = true;
  17285. var _didIteratorError = false;
  17286. var _iteratorError = undefined;
  17287. try {
  17288. for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  17289. var object = _step.value;
  17290. var _getCentroid = getCentroid(object),
  17291. _getCentroid2 = _slicedToArray(_getCentroid, 2),
  17292. lon = _getCentroid2[0],
  17293. lat = _getCentroid2[1];
  17294. var elevation = getElevation(object);
  17295. value[i + 0] = lon;
  17296. value[i + 1] = lat;
  17297. value[i + 2] = elevation || 0;
  17298. i += size;
  17299. }
  17300. } catch (err) {
  17301. _didIteratorError = true;
  17302. _iteratorError = err;
  17303. } finally {
  17304. try {
  17305. if (!_iteratorNormalCompletion && _iterator.return) {
  17306. _iterator.return();
  17307. }
  17308. } finally {
  17309. if (_didIteratorError) {
  17310. throw _iteratorError;
  17311. }
  17312. }
  17313. }
  17314. }
  17315. }, {
  17316. key: 'calculateInstancePositions64xyLow',
  17317. value: function calculateInstancePositions64xyLow(attribute) {
  17318. var _props3 = this.props,
  17319. data = _props3.data,
  17320. getCentroid = _props3.getCentroid;
  17321. var value = attribute.value;
  17322. var i = 0;
  17323. var _iteratorNormalCompletion2 = true;
  17324. var _didIteratorError2 = false;
  17325. var _iteratorError2 = undefined;
  17326. try {
  17327. for (var _iterator2 = data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  17328. var object = _step2.value;
  17329. var position = getCentroid(object);
  17330. value[i++] = fp64LowPart(position[0]);
  17331. value[i++] = fp64LowPart(position[1]);
  17332. }
  17333. } catch (err) {
  17334. _didIteratorError2 = true;
  17335. _iteratorError2 = err;
  17336. } finally {
  17337. try {
  17338. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  17339. _iterator2.return();
  17340. }
  17341. } finally {
  17342. if (_didIteratorError2) {
  17343. throw _iteratorError2;
  17344. }
  17345. }
  17346. }
  17347. }
  17348. }, {
  17349. key: 'calculateInstanceColors',
  17350. value: function calculateInstanceColors(attribute) {
  17351. var _props4 = this.props,
  17352. data = _props4.data,
  17353. getColor = _props4.getColor;
  17354. var value = attribute.value,
  17355. size = attribute.size;
  17356. var i = 0;
  17357. var _iteratorNormalCompletion3 = true;
  17358. var _didIteratorError3 = false;
  17359. var _iteratorError3 = undefined;
  17360. try {
  17361. for (var _iterator3 = data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  17362. var object = _step3.value;
  17363. var color = getColor(object) || DEFAULT_COLOR;
  17364. value[i + 0] = color[0];
  17365. value[i + 1] = color[1];
  17366. value[i + 2] = color[2];
  17367. value[i + 3] = Number.isFinite(color[3]) ? color[3] : DEFAULT_COLOR[3];
  17368. i += size;
  17369. }
  17370. } catch (err) {
  17371. _didIteratorError3 = true;
  17372. _iteratorError3 = err;
  17373. } finally {
  17374. try {
  17375. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  17376. _iterator3.return();
  17377. }
  17378. } finally {
  17379. if (_didIteratorError3) {
  17380. throw _iteratorError3;
  17381. }
  17382. }
  17383. }
  17384. }
  17385. }]);
  17386. return HexagonCellLayer;
  17387. }(_core.Layer);
  17388. exports.default = HexagonCellLayer;
  17389. HexagonCellLayer.layerName = 'HexagonCellLayer';
  17390. HexagonCellLayer.defaultProps = defaultProps;
  17391. /***/ }),
  17392. /* 176 */
  17393. /***/ (function(module, exports, __webpack_require__) {
  17394. "use strict";
  17395. Object.defineProperty(exports, "__esModule", {
  17396. value: true
  17397. });
  17398. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  17399. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  17400. var _core = __webpack_require__(13);
  17401. var _luma = __webpack_require__(12);
  17402. var _scatterplotLayerVertex = __webpack_require__(324);
  17403. var _scatterplotLayerVertex2 = _interopRequireDefault(_scatterplotLayerVertex);
  17404. var _scatterplotLayerVertex3 = __webpack_require__(323);
  17405. var _scatterplotLayerVertex4 = _interopRequireDefault(_scatterplotLayerVertex3);
  17406. var _scatterplotLayerFragment = __webpack_require__(322);
  17407. var _scatterplotLayerFragment2 = _interopRequireDefault(_scatterplotLayerFragment);
  17408. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  17409. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  17410. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  17411. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  17412. //
  17413. // Permission is hereby granted, free of charge, to any person obtaining a copy
  17414. // of this software and associated documentation files (the "Software"), to deal
  17415. // in the Software without restriction, including without limitation the rights
  17416. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  17417. // copies of the Software, and to permit persons to whom the Software is
  17418. // furnished to do so, subject to the following conditions:
  17419. //
  17420. // The above copyright notice and this permission notice shall be included in
  17421. // all copies or substantial portions of the Software.
  17422. //
  17423. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17424. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17425. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17426. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17427. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  17428. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  17429. // THE SOFTWARE.
  17430. var fp64LowPart = _core.experimental.fp64LowPart,
  17431. enable64bitSupport = _core.experimental.enable64bitSupport;
  17432. var DEFAULT_COLOR = [0, 0, 0, 255];
  17433. var defaultProps = {
  17434. radiusScale: 1,
  17435. radiusMinPixels: 0, // min point radius in pixels
  17436. radiusMaxPixels: Number.MAX_SAFE_INTEGER, // max point radius in pixels
  17437. strokeWidth: 1,
  17438. outline: false,
  17439. fp64: false,
  17440. getPosition: function getPosition(x) {
  17441. return x.position;
  17442. },
  17443. getRadius: function getRadius(x) {
  17444. return x.radius || 1;
  17445. },
  17446. getColor: function getColor(x) {
  17447. return x.color || DEFAULT_COLOR;
  17448. }
  17449. };
  17450. var ScatterplotLayer = function (_Layer) {
  17451. _inherits(ScatterplotLayer, _Layer);
  17452. function ScatterplotLayer() {
  17453. _classCallCheck(this, ScatterplotLayer);
  17454. return _possibleConstructorReturn(this, (ScatterplotLayer.__proto__ || Object.getPrototypeOf(ScatterplotLayer)).apply(this, arguments));
  17455. }
  17456. _createClass(ScatterplotLayer, [{
  17457. key: 'getShaders',
  17458. value: function getShaders(id) {
  17459. var shaderCache = this.context.shaderCache;
  17460. return enable64bitSupport(this.props) ? { vs: _scatterplotLayerVertex4.default, fs: _scatterplotLayerFragment2.default, modules: ['project64', 'picking'], shaderCache: shaderCache } : { vs: _scatterplotLayerVertex2.default, fs: _scatterplotLayerFragment2.default, modules: ['picking'], shaderCache: shaderCache }; // 'project' module added by default.
  17461. }
  17462. }, {
  17463. key: 'initializeState',
  17464. value: function initializeState() {
  17465. /* eslint-disable max-len */
  17466. this.state.attributeManager.addInstanced({
  17467. instancePositions: {
  17468. size: 3,
  17469. transition: true,
  17470. accessor: 'getPosition',
  17471. update: this.calculateInstancePositions
  17472. },
  17473. instanceRadius: {
  17474. size: 1,
  17475. transition: true,
  17476. accessor: 'getRadius',
  17477. defaultValue: 1,
  17478. update: this.calculateInstanceRadius
  17479. },
  17480. instanceColors: {
  17481. size: 4,
  17482. transition: true,
  17483. type: _luma.GL.UNSIGNED_BYTE,
  17484. accessor: 'getColor',
  17485. update: this.calculateInstanceColors
  17486. }
  17487. });
  17488. /* eslint-enable max-len */
  17489. }
  17490. }, {
  17491. key: 'updateAttribute',
  17492. value: function updateAttribute(_ref) {
  17493. var props = _ref.props,
  17494. oldProps = _ref.oldProps,
  17495. changeFlags = _ref.changeFlags;
  17496. if (props.fp64 !== oldProps.fp64) {
  17497. var attributeManager = this.getAttributeManager();
  17498. attributeManager.invalidateAll();
  17499. if (props.fp64 && props.coordinateSystem === _core.COORDINATE_SYSTEM.LNGLAT) {
  17500. attributeManager.addInstanced({
  17501. instancePositions64xyLow: {
  17502. size: 2,
  17503. accessor: 'getPosition',
  17504. update: this.calculateInstancePositions64xyLow
  17505. }
  17506. });
  17507. } else {
  17508. attributeManager.remove(['instancePositions64xyLow']);
  17509. }
  17510. }
  17511. }
  17512. }, {
  17513. key: 'updateState',
  17514. value: function updateState(_ref2) {
  17515. var props = _ref2.props,
  17516. oldProps = _ref2.oldProps,
  17517. changeFlags = _ref2.changeFlags;
  17518. _get(ScatterplotLayer.prototype.__proto__ || Object.getPrototypeOf(ScatterplotLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  17519. if (props.fp64 !== oldProps.fp64) {
  17520. var gl = this.context.gl;
  17521. this.setState({ model: this._getModel(gl) });
  17522. }
  17523. this.updateAttribute({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  17524. }
  17525. }, {
  17526. key: 'draw',
  17527. value: function draw(_ref3) {
  17528. var uniforms = _ref3.uniforms;
  17529. var _props = this.props,
  17530. radiusScale = _props.radiusScale,
  17531. radiusMinPixels = _props.radiusMinPixels,
  17532. radiusMaxPixels = _props.radiusMaxPixels,
  17533. outline = _props.outline,
  17534. strokeWidth = _props.strokeWidth;
  17535. this.state.model.render(Object.assign({}, uniforms, {
  17536. outline: outline ? 1 : 0,
  17537. strokeWidth: strokeWidth,
  17538. radiusScale: radiusScale,
  17539. radiusMinPixels: radiusMinPixels,
  17540. radiusMaxPixels: radiusMaxPixels
  17541. }));
  17542. }
  17543. }, {
  17544. key: '_getModel',
  17545. value: function _getModel(gl) {
  17546. // a square that minimally cover the unit circle
  17547. var positions = [-1, -1, 0, -1, 1, 0, 1, 1, 0, 1, -1, 0];
  17548. return new _luma.Model(gl, Object.assign(this.getShaders(), {
  17549. id: this.props.id,
  17550. geometry: new _luma.Geometry({
  17551. drawMode: _luma.GL.TRIANGLE_FAN,
  17552. attributes: {
  17553. positions: new Float32Array(positions)
  17554. }
  17555. }),
  17556. isInstanced: true,
  17557. shaderCache: this.context.shaderCache
  17558. }));
  17559. }
  17560. }, {
  17561. key: 'calculateInstancePositions',
  17562. value: function calculateInstancePositions(attribute) {
  17563. var _props2 = this.props,
  17564. data = _props2.data,
  17565. getPosition = _props2.getPosition;
  17566. var value = attribute.value;
  17567. var i = 0;
  17568. var _iteratorNormalCompletion = true;
  17569. var _didIteratorError = false;
  17570. var _iteratorError = undefined;
  17571. try {
  17572. for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  17573. var point = _step.value;
  17574. var position = getPosition(point);
  17575. value[i++] = position[0];
  17576. value[i++] = position[1];
  17577. value[i++] = position[2] || 0;
  17578. }
  17579. } catch (err) {
  17580. _didIteratorError = true;
  17581. _iteratorError = err;
  17582. } finally {
  17583. try {
  17584. if (!_iteratorNormalCompletion && _iterator.return) {
  17585. _iterator.return();
  17586. }
  17587. } finally {
  17588. if (_didIteratorError) {
  17589. throw _iteratorError;
  17590. }
  17591. }
  17592. }
  17593. }
  17594. }, {
  17595. key: 'calculateInstancePositions64xyLow',
  17596. value: function calculateInstancePositions64xyLow(attribute) {
  17597. var _props3 = this.props,
  17598. data = _props3.data,
  17599. getPosition = _props3.getPosition;
  17600. var value = attribute.value;
  17601. var i = 0;
  17602. var _iteratorNormalCompletion2 = true;
  17603. var _didIteratorError2 = false;
  17604. var _iteratorError2 = undefined;
  17605. try {
  17606. for (var _iterator2 = data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  17607. var point = _step2.value;
  17608. var position = getPosition(point);
  17609. value[i++] = fp64LowPart(position[0]);
  17610. value[i++] = fp64LowPart(position[1]);
  17611. }
  17612. } catch (err) {
  17613. _didIteratorError2 = true;
  17614. _iteratorError2 = err;
  17615. } finally {
  17616. try {
  17617. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  17618. _iterator2.return();
  17619. }
  17620. } finally {
  17621. if (_didIteratorError2) {
  17622. throw _iteratorError2;
  17623. }
  17624. }
  17625. }
  17626. }
  17627. }, {
  17628. key: 'calculateInstanceRadius',
  17629. value: function calculateInstanceRadius(attribute) {
  17630. var _props4 = this.props,
  17631. data = _props4.data,
  17632. getRadius = _props4.getRadius;
  17633. var value = attribute.value;
  17634. var i = 0;
  17635. var _iteratorNormalCompletion3 = true;
  17636. var _didIteratorError3 = false;
  17637. var _iteratorError3 = undefined;
  17638. try {
  17639. for (var _iterator3 = data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  17640. var point = _step3.value;
  17641. var radius = getRadius(point);
  17642. value[i++] = isNaN(radius) ? 1 : radius;
  17643. }
  17644. } catch (err) {
  17645. _didIteratorError3 = true;
  17646. _iteratorError3 = err;
  17647. } finally {
  17648. try {
  17649. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  17650. _iterator3.return();
  17651. }
  17652. } finally {
  17653. if (_didIteratorError3) {
  17654. throw _iteratorError3;
  17655. }
  17656. }
  17657. }
  17658. }
  17659. }, {
  17660. key: 'calculateInstanceColors',
  17661. value: function calculateInstanceColors(attribute) {
  17662. var _props5 = this.props,
  17663. data = _props5.data,
  17664. getColor = _props5.getColor;
  17665. var value = attribute.value;
  17666. var i = 0;
  17667. var _iteratorNormalCompletion4 = true;
  17668. var _didIteratorError4 = false;
  17669. var _iteratorError4 = undefined;
  17670. try {
  17671. for (var _iterator4 = data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
  17672. var point = _step4.value;
  17673. var color = getColor(point) || DEFAULT_COLOR;
  17674. value[i++] = color[0];
  17675. value[i++] = color[1];
  17676. value[i++] = color[2];
  17677. value[i++] = isNaN(color[3]) ? 255 : color[3];
  17678. }
  17679. } catch (err) {
  17680. _didIteratorError4 = true;
  17681. _iteratorError4 = err;
  17682. } finally {
  17683. try {
  17684. if (!_iteratorNormalCompletion4 && _iterator4.return) {
  17685. _iterator4.return();
  17686. }
  17687. } finally {
  17688. if (_didIteratorError4) {
  17689. throw _iteratorError4;
  17690. }
  17691. }
  17692. }
  17693. }
  17694. }]);
  17695. return ScatterplotLayer;
  17696. }(_core.Layer);
  17697. exports.default = ScatterplotLayer;
  17698. ScatterplotLayer.layerName = 'ScatterplotLayer';
  17699. ScatterplotLayer.defaultProps = defaultProps;
  17700. /***/ }),
  17701. /* 177 */
  17702. /***/ (function(module, exports, __webpack_require__) {
  17703. "use strict";
  17704. Object.defineProperty(exports, "__esModule", {
  17705. value: true
  17706. });
  17707. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  17708. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  17709. var _core = __webpack_require__(13);
  17710. var _luma = __webpack_require__(12);
  17711. var _props2 = __webpack_require__(187);
  17712. var _polygonTesselator = __webpack_require__(329);
  17713. var _polygonTesselatorExtruded = __webpack_require__(328);
  17714. var _solidPolygonLayerVertex = __webpack_require__(332);
  17715. var _solidPolygonLayerVertex2 = _interopRequireDefault(_solidPolygonLayerVertex);
  17716. var _solidPolygonLayerVertex3 = __webpack_require__(331);
  17717. var _solidPolygonLayerVertex4 = _interopRequireDefault(_solidPolygonLayerVertex3);
  17718. var _solidPolygonLayerFragment = __webpack_require__(330);
  17719. var _solidPolygonLayerFragment2 = _interopRequireDefault(_solidPolygonLayerFragment);
  17720. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  17721. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  17722. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  17723. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  17724. //
  17725. // Permission is hereby granted, free of charge, to any person obtaining a copy
  17726. // of this software and associated documentation files (the "Software"), to deal
  17727. // in the Software without restriction, including without limitation the rights
  17728. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  17729. // copies of the Software, and to permit persons to whom the Software is
  17730. // furnished to do so, subject to the following conditions:
  17731. //
  17732. // The above copyright notice and this permission notice shall be included in
  17733. // all copies or substantial portions of the Software.
  17734. //
  17735. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17736. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17737. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17738. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17739. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  17740. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  17741. // THE SOFTWARE.
  17742. var enable64bitSupport = _core.experimental.enable64bitSupport,
  17743. get = _core.experimental.get;
  17744. // Polygon geometry generation is managed by the polygon tesselator
  17745. var defaultProps = {
  17746. // Whether to extrude
  17747. extruded: false,
  17748. // Whether to draw a GL.LINES wireframe of the polygon
  17749. wireframe: false,
  17750. fp64: false,
  17751. // elevation multiplier
  17752. elevationScale: 1,
  17753. // Accessor for polygon geometry
  17754. getPolygon: function getPolygon(f) {
  17755. return get(f, 'polygon') || get(f, 'geometry.coordinates');
  17756. },
  17757. // Accessor for extrusion height
  17758. getElevation: function getElevation(f) {
  17759. return get(f, 'elevation') || get(f, 'properties.height') || 0;
  17760. },
  17761. // Accessor for color
  17762. getColor: function getColor(f) {
  17763. return get(f, 'color') || get(f, 'properties.color');
  17764. },
  17765. // Optional settings for 'lighting' shader module
  17766. lightSettings: {
  17767. lightsPosition: [-122.45, 37.75, 8000, -122.0, 38.0, 5000],
  17768. ambientRatio: 0.05,
  17769. diffuseRatio: 0.6,
  17770. specularRatio: 0.8,
  17771. lightsStrength: [2.0, 0.0, 0.0, 0.0],
  17772. numberOfLights: 2
  17773. }
  17774. };
  17775. var SolidPolygonLayer = function (_Layer) {
  17776. _inherits(SolidPolygonLayer, _Layer);
  17777. function SolidPolygonLayer() {
  17778. _classCallCheck(this, SolidPolygonLayer);
  17779. return _possibleConstructorReturn(this, (SolidPolygonLayer.__proto__ || Object.getPrototypeOf(SolidPolygonLayer)).apply(this, arguments));
  17780. }
  17781. _createClass(SolidPolygonLayer, [{
  17782. key: 'getShaders',
  17783. value: function getShaders() {
  17784. return enable64bitSupport(this.props) ? { vs: _solidPolygonLayerVertex4.default, fs: _solidPolygonLayerFragment2.default, modules: ['project64', 'lighting', 'picking'] } : { vs: _solidPolygonLayerVertex2.default, fs: _solidPolygonLayerFragment2.default, modules: ['lighting', 'picking'] }; // 'project' module added by default.
  17785. }
  17786. }, {
  17787. key: 'initializeState',
  17788. value: function initializeState() {
  17789. var gl = this.context.gl;
  17790. this.setState({
  17791. numInstances: 0,
  17792. IndexType: gl.getExtension('OES_element_index_uint') ? Uint32Array : Uint16Array
  17793. });
  17794. var attributeManager = this.getAttributeManager();
  17795. var noAlloc = true;
  17796. /* eslint-disable max-len */
  17797. attributeManager.add({
  17798. indices: { size: 1, isIndexed: true, update: this.calculateIndices, noAlloc: noAlloc },
  17799. positions: { size: 3, accessor: 'getElevation', update: this.calculatePositions, noAlloc: noAlloc },
  17800. normals: { size: 3, update: this.calculateNormals, noAlloc: noAlloc },
  17801. colors: {
  17802. size: 4,
  17803. type: _luma.GL.UNSIGNED_BYTE,
  17804. accessor: 'getColor',
  17805. update: this.calculateColors,
  17806. noAlloc: noAlloc
  17807. },
  17808. pickingColors: { size: 3, type: _luma.GL.UNSIGNED_BYTE, update: this.calculatePickingColors, noAlloc: noAlloc }
  17809. });
  17810. /* eslint-enable max-len */
  17811. }
  17812. }, {
  17813. key: 'updateAttribute',
  17814. value: function updateAttribute(_ref) {
  17815. var props = _ref.props,
  17816. oldProps = _ref.oldProps,
  17817. changeFlags = _ref.changeFlags;
  17818. if (props.fp64 !== oldProps.fp64) {
  17819. var attributeManager = this.getAttributeManager();
  17820. attributeManager.invalidateAll();
  17821. if (props.fp64 && props.coordinateSystem === _core.COORDINATE_SYSTEM.LNGLAT) {
  17822. attributeManager.add({
  17823. positions64xyLow: { size: 2, update: this.calculatePositionsLow }
  17824. });
  17825. } else {
  17826. attributeManager.remove(['positions64xyLow']);
  17827. }
  17828. }
  17829. }
  17830. }, {
  17831. key: 'draw',
  17832. value: function draw(_ref2) {
  17833. var uniforms = _ref2.uniforms;
  17834. var _props = this.props,
  17835. extruded = _props.extruded,
  17836. lightSettings = _props.lightSettings,
  17837. elevationScale = _props.elevationScale;
  17838. this.state.model.render(Object.assign({}, uniforms, {
  17839. extruded: extruded ? 1.0 : 0.0,
  17840. elevationScale: elevationScale
  17841. }, lightSettings));
  17842. }
  17843. }, {
  17844. key: 'updateState',
  17845. value: function updateState(_ref3) {
  17846. var props = _ref3.props,
  17847. oldProps = _ref3.oldProps,
  17848. changeFlags = _ref3.changeFlags;
  17849. _get(SolidPolygonLayer.prototype.__proto__ || Object.getPrototypeOf(SolidPolygonLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  17850. var regenerateModel = this.updateGeometry({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  17851. if (regenerateModel) {
  17852. var gl = this.context.gl;
  17853. this.setState({ model: this._getModel(gl) });
  17854. }
  17855. this.updateAttribute({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  17856. }
  17857. /* eslint-disable complexity */
  17858. }, {
  17859. key: 'updateGeometry',
  17860. value: function updateGeometry(_ref4) {
  17861. var _this2 = this;
  17862. var props = _ref4.props,
  17863. oldProps = _ref4.oldProps,
  17864. changeFlags = _ref4.changeFlags;
  17865. var geometryConfigChanged = props.extruded !== oldProps.extruded || props.wireframe !== oldProps.wireframe || props.fp64 !== oldProps.fp64 || changeFlags.updateTriggersChanged && (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPolygon);
  17866. // check if updateTriggers.getElevation has been triggered
  17867. var getElevationTriggered = changeFlags.updateTriggersChanged && (0, _props2.compareProps)({
  17868. oldProps: oldProps.updateTriggers.getElevation || {},
  17869. newProps: props.updateTriggers.getElevation || {},
  17870. triggerName: 'getElevation'
  17871. });
  17872. // When the geometry config or the data is changed,
  17873. // tessellator needs to be invoked
  17874. if (changeFlags.dataChanged || geometryConfigChanged || getElevationTriggered) {
  17875. var getPolygon = props.getPolygon,
  17876. extruded = props.extruded,
  17877. wireframe = props.wireframe,
  17878. getElevation = props.getElevation;
  17879. // TODO - avoid creating a temporary array here: let the tesselator iterate
  17880. var polygons = props.data.map(getPolygon);
  17881. this.setState({
  17882. polygonTesselator: !extruded ? new _polygonTesselator.PolygonTesselator({ polygons: polygons, fp64: this.props.fp64 }) : new _polygonTesselatorExtruded.PolygonTesselatorExtruded({
  17883. polygons: polygons,
  17884. wireframe: wireframe,
  17885. getHeight: function getHeight(polygonIndex) {
  17886. return getElevation(_this2.props.data[polygonIndex]);
  17887. },
  17888. fp64: this.props.fp64
  17889. })
  17890. });
  17891. this.state.attributeManager.invalidateAll();
  17892. }
  17893. return geometryConfigChanged;
  17894. }
  17895. /* eslint-disable complexity */
  17896. }, {
  17897. key: '_getModel',
  17898. value: function _getModel(gl) {
  17899. return new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  17900. id: this.props.id,
  17901. geometry: new _luma.Geometry({
  17902. drawMode: this.props.wireframe ? _luma.GL.LINES : _luma.GL.TRIANGLES,
  17903. attributes: {}
  17904. }),
  17905. vertexCount: 0,
  17906. isIndexed: true,
  17907. shaderCache: this.context.shaderCache
  17908. }));
  17909. }
  17910. }, {
  17911. key: 'calculateIndices',
  17912. value: function calculateIndices(attribute) {
  17913. attribute.value = this.state.polygonTesselator.indices();
  17914. attribute.target = _luma.GL.ELEMENT_ARRAY_BUFFER;
  17915. this.state.model.setVertexCount(attribute.value.length / attribute.size);
  17916. }
  17917. }, {
  17918. key: 'calculatePositions',
  17919. value: function calculatePositions(attribute) {
  17920. attribute.value = this.state.polygonTesselator.positions().positions;
  17921. }
  17922. }, {
  17923. key: 'calculatePositionsLow',
  17924. value: function calculatePositionsLow(attribute) {
  17925. attribute.value = this.state.polygonTesselator.positions().positions64xyLow;
  17926. }
  17927. }, {
  17928. key: 'calculateNormals',
  17929. value: function calculateNormals(attribute) {
  17930. attribute.value = this.state.polygonTesselator.normals();
  17931. }
  17932. }, {
  17933. key: 'calculateColors',
  17934. value: function calculateColors(attribute) {
  17935. var _this3 = this;
  17936. attribute.value = this.state.polygonTesselator.colors({
  17937. getColor: function getColor(polygonIndex) {
  17938. return _this3.props.getColor(_this3.props.data[polygonIndex]);
  17939. }
  17940. });
  17941. }
  17942. // Override the default picking colors calculation
  17943. }, {
  17944. key: 'calculatePickingColors',
  17945. value: function calculatePickingColors(attribute) {
  17946. attribute.value = this.state.polygonTesselator.pickingColors();
  17947. }
  17948. }]);
  17949. return SolidPolygonLayer;
  17950. }(_core.Layer);
  17951. exports.default = SolidPolygonLayer;
  17952. SolidPolygonLayer.layerName = 'SolidPolygonLayer';
  17953. SolidPolygonLayer.defaultProps = defaultProps;
  17954. /***/ }),
  17955. /* 178 */
  17956. /***/ (function(module, exports, __webpack_require__) {
  17957. "use strict";
  17958. Object.defineProperty(exports, "__esModule", {
  17959. value: true
  17960. });
  17961. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  17962. var _viewportControls = __webpack_require__(121);
  17963. var _viewportControls2 = _interopRequireDefault(_viewportControls);
  17964. var _mapState = __webpack_require__(82);
  17965. var _mapState2 = _interopRequireDefault(_mapState);
  17966. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  17967. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  17968. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  17969. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 Uber Technologies, Inc.
  17970. // Permission is hereby granted, free of charge, to any person obtaining a copy
  17971. // of this software and associated documentation files (the "Software"), to deal
  17972. // in the Software without restriction, including without limitation the rights
  17973. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  17974. // copies of the Software, and to permit persons to whom the Software is
  17975. // furnished to do so, subject to the following conditions:
  17976. // The above copyright notice and this permission notice shall be included in
  17977. // all copies or substantial portions of the Software.
  17978. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17979. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17980. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17981. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17982. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  17983. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  17984. // THE SOFTWARE.
  17985. var MapControls = function (_ViewportControls) {
  17986. _inherits(MapControls, _ViewportControls);
  17987. /**
  17988. * @classdesc
  17989. * A class that handles events and updates mercator style viewport parameters
  17990. */
  17991. function MapControls(options) {
  17992. _classCallCheck(this, MapControls);
  17993. return _possibleConstructorReturn(this, (MapControls.__proto__ || Object.getPrototypeOf(MapControls)).call(this, _mapState2.default, options));
  17994. }
  17995. // Default handler for the `panmove` event.
  17996. _createClass(MapControls, [{
  17997. key: '_onPan',
  17998. value: function _onPan(event) {
  17999. return this.isFunctionKeyPressed(event) ? this._onPanRotate(event) : this._onPanMove(event);
  18000. }
  18001. }]);
  18002. return MapControls;
  18003. }(_viewportControls2.default);
  18004. exports.default = MapControls;
  18005. /***/ }),
  18006. /* 179 */
  18007. /***/ (function(module, exports, __webpack_require__) {
  18008. "use strict";
  18009. Object.defineProperty(exports, "__esModule", {
  18010. value: true
  18011. });
  18012. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  18013. var _orbitViewport = __webpack_require__(85);
  18014. var _orbitViewport2 = _interopRequireDefault(_orbitViewport);
  18015. var _assert = __webpack_require__(1);
  18016. var _assert2 = _interopRequireDefault(_assert);
  18017. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  18018. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  18019. var defaultState = {
  18020. lookAt: [0, 0, 0],
  18021. rotationX: 0,
  18022. rotationOrbit: 0,
  18023. fov: 50,
  18024. near: 1,
  18025. far: 100,
  18026. translationX: 0,
  18027. translationY: 0,
  18028. zoom: 1
  18029. };
  18030. var defaultConstraints = {
  18031. minZoom: 0,
  18032. maxZoom: Infinity
  18033. };
  18034. /* Helpers */
  18035. // Constrain number between bounds
  18036. function clamp(x, min, max) {
  18037. return x < min ? min : x > max ? max : x;
  18038. }
  18039. function ensureFinite(value, fallbackValue) {
  18040. return Number.isFinite(value) ? value : fallbackValue;
  18041. }
  18042. var OrbitState = function () {
  18043. function OrbitState(_ref) {
  18044. var width = _ref.width,
  18045. height = _ref.height,
  18046. distance = _ref.distance,
  18047. rotationX = _ref.rotationX,
  18048. rotationOrbit = _ref.rotationOrbit,
  18049. orbitAxis = _ref.orbitAxis,
  18050. bounds = _ref.bounds,
  18051. lookAt = _ref.lookAt,
  18052. fov = _ref.fov,
  18053. near = _ref.near,
  18054. far = _ref.far,
  18055. translationX = _ref.translationX,
  18056. translationY = _ref.translationY,
  18057. zoom = _ref.zoom,
  18058. minZoom = _ref.minZoom,
  18059. maxZoom = _ref.maxZoom,
  18060. startPanViewport = _ref.startPanViewport,
  18061. startPanPos = _ref.startPanPos,
  18062. isPanning = _ref.isPanning,
  18063. startRotateViewport = _ref.startRotateViewport,
  18064. isRotating = _ref.isRotating,
  18065. startZoomViewport = _ref.startZoomViewport,
  18066. startZoomPos = _ref.startZoomPos;
  18067. _classCallCheck(this, OrbitState);
  18068. (0, _assert2.default)(Number.isFinite(width), '`width` must be supplied');
  18069. (0, _assert2.default)(Number.isFinite(height), '`height` must be supplied');
  18070. (0, _assert2.default)(Number.isFinite(distance), '`distance` must be supplied');
  18071. this._viewportProps = this._applyConstraints({
  18072. width: width,
  18073. height: height,
  18074. distance: distance,
  18075. rotationX: ensureFinite(rotationX, defaultState.rotationX),
  18076. rotationOrbit: ensureFinite(rotationOrbit, defaultState.rotationOrbit),
  18077. orbitAxis: orbitAxis,
  18078. bounds: bounds,
  18079. lookAt: lookAt || defaultState.lookAt,
  18080. fov: ensureFinite(fov, defaultState.fov),
  18081. near: ensureFinite(near, defaultState.near),
  18082. far: ensureFinite(far, defaultState.far),
  18083. translationX: ensureFinite(translationX, defaultState.translationX),
  18084. translationY: ensureFinite(translationY, defaultState.translationY),
  18085. zoom: ensureFinite(zoom, defaultState.zoom),
  18086. minZoom: ensureFinite(minZoom, defaultConstraints.minZoom),
  18087. maxZoom: ensureFinite(maxZoom, defaultConstraints.maxZoom)
  18088. });
  18089. this._interactiveState = {
  18090. startPanViewport: startPanViewport,
  18091. startPanPos: startPanPos,
  18092. isPanning: isPanning,
  18093. startRotateViewport: startRotateViewport,
  18094. isRotating: isRotating,
  18095. startZoomViewport: startZoomViewport,
  18096. startZoomPos: startZoomPos
  18097. };
  18098. }
  18099. /* Public API */
  18100. _createClass(OrbitState, [{
  18101. key: 'getViewportProps',
  18102. value: function getViewportProps() {
  18103. return this._viewportProps;
  18104. }
  18105. }, {
  18106. key: 'getInteractiveState',
  18107. value: function getInteractiveState() {
  18108. return this._interactiveState;
  18109. }
  18110. /**
  18111. * Start panning
  18112. * @param {[Number, Number]} pos - position on screen where the pointer grabs
  18113. */
  18114. }, {
  18115. key: 'panStart',
  18116. value: function panStart(_ref2) {
  18117. var pos = _ref2.pos;
  18118. var viewport = new _orbitViewport2.default(this._viewportProps);
  18119. return this._getUpdatedOrbitState({
  18120. startPanPos: pos,
  18121. startPanViewport: viewport
  18122. });
  18123. }
  18124. /**
  18125. * Pan
  18126. * @param {[Number, Number]} pos - position on screen where the pointer is
  18127. */
  18128. }, {
  18129. key: 'pan',
  18130. value: function pan(_ref3) {
  18131. var pos = _ref3.pos,
  18132. startPos = _ref3.startPos;
  18133. if (this._interactiveState.isRotating) {
  18134. return this._getUpdatedOrbitState();
  18135. }
  18136. var startPanPos = this._interactiveState.startPanPos || startPos;
  18137. (0, _assert2.default)(startPanPos, '`startPanPos` props is required');
  18138. var viewport = this._interactiveState.startPanViewport || new _orbitViewport2.default(this._viewportProps);
  18139. var deltaX = pos[0] - startPanPos[0];
  18140. var deltaY = pos[1] - startPanPos[1];
  18141. var center = viewport.project(viewport.lookAt);
  18142. var newLookAt = viewport.unproject([center[0] - deltaX, center[1] - deltaY, center[2]]);
  18143. return this._getUpdatedOrbitState({
  18144. lookAt: newLookAt,
  18145. isPanning: true
  18146. });
  18147. }
  18148. /**
  18149. * End panning
  18150. * Must call if `panStart()` was called
  18151. */
  18152. }, {
  18153. key: 'panEnd',
  18154. value: function panEnd() {
  18155. return this._getUpdatedOrbitState({
  18156. startPanViewport: null,
  18157. startPanPos: null,
  18158. isPanning: null
  18159. });
  18160. }
  18161. /**
  18162. * Start rotating
  18163. * @param {[Number, Number]} pos - position on screen where the pointer grabs
  18164. */
  18165. }, {
  18166. key: 'rotateStart',
  18167. value: function rotateStart(_ref4) {
  18168. var pos = _ref4.pos;
  18169. // Rotation center should be the worldspace position at the center of the
  18170. // the screen. If not found, use the last one.
  18171. var viewport = new _orbitViewport2.default(this._viewportProps);
  18172. return this._getUpdatedOrbitState({
  18173. startRotateViewport: viewport
  18174. });
  18175. }
  18176. /**
  18177. * Rotate
  18178. * @param {[Number, Number]} pos - position on screen where the pointer is
  18179. */
  18180. }, {
  18181. key: 'rotate',
  18182. value: function rotate(_ref5) {
  18183. var deltaScaleX = _ref5.deltaScaleX,
  18184. deltaScaleY = _ref5.deltaScaleY;
  18185. if (this._interactiveState.isPanning) {
  18186. return this._getUpdatedOrbitState();
  18187. }
  18188. var startRotateViewport = this._interactiveState.startRotateViewport;
  18189. var _ref6 = startRotateViewport || {},
  18190. rotationX = _ref6.rotationX,
  18191. rotationOrbit = _ref6.rotationOrbit;
  18192. rotationX = ensureFinite(rotationX, this._viewportProps.rotationX);
  18193. rotationOrbit = ensureFinite(rotationOrbit, this._viewportProps.rotationOrbit);
  18194. var newRotationX = clamp(rotationX - deltaScaleY * 180, -89.999, 89.999);
  18195. var newRotationOrbit = (rotationOrbit - deltaScaleX * 180) % 360;
  18196. return this._getUpdatedOrbitState({
  18197. rotationX: newRotationX,
  18198. rotationOrbit: newRotationOrbit,
  18199. isRotating: true
  18200. });
  18201. }
  18202. /**
  18203. * End rotating
  18204. * Must call if `rotateStart()` was called
  18205. */
  18206. }, {
  18207. key: 'rotateEnd',
  18208. value: function rotateEnd() {
  18209. return this._getUpdatedOrbitState({
  18210. startRotateViewport: null,
  18211. isRotating: null
  18212. });
  18213. }
  18214. /**
  18215. * Start zooming
  18216. * @param {[Number, Number]} pos - position on screen where the pointer grabs
  18217. */
  18218. }, {
  18219. key: 'zoomStart',
  18220. value: function zoomStart(_ref7) {
  18221. var pos = _ref7.pos;
  18222. var viewport = new _orbitViewport2.default(this._viewportProps);
  18223. return this._getUpdatedOrbitState({
  18224. startZoomViewport: viewport,
  18225. startZoomPos: pos
  18226. });
  18227. }
  18228. /**
  18229. * Zoom
  18230. * @param {[Number, Number]} pos - position on screen where the current center is
  18231. * @param {[Number, Number]} startPos - the center position at
  18232. * the start of the operation. Must be supplied of `zoomStart()` was not called
  18233. * @param {Number} scale - a number between [0, 1] specifying the accumulated
  18234. * relative scale.
  18235. */
  18236. }, {
  18237. key: 'zoom',
  18238. value: function zoom(_ref8) {
  18239. var pos = _ref8.pos,
  18240. startPos = _ref8.startPos,
  18241. scale = _ref8.scale;
  18242. var _viewportProps = this._viewportProps,
  18243. zoom = _viewportProps.zoom,
  18244. minZoom = _viewportProps.minZoom,
  18245. maxZoom = _viewportProps.maxZoom,
  18246. width = _viewportProps.width,
  18247. height = _viewportProps.height;
  18248. var startZoomPos = this._interactiveState.startZoomPos || startPos || pos;
  18249. var viewport = this._interactiveState.startZoomViewport || new _orbitViewport2.default(this._viewportProps);
  18250. var newZoom = clamp(zoom * scale, minZoom, maxZoom);
  18251. var deltaX = pos[0] - startZoomPos[0];
  18252. var deltaY = pos[1] - startZoomPos[1];
  18253. // Zoom around the center position
  18254. var cx = startZoomPos[0] - width / 2;
  18255. var cy = height / 2 - startZoomPos[1];
  18256. var center = viewport.project(viewport.lookAt);
  18257. var newCenterX = center[0] - cx + cx * newZoom / zoom + deltaX;
  18258. var newCenterY = center[1] + cy - cy * newZoom / zoom - deltaY;
  18259. var newLookAt = viewport.unproject([newCenterX, newCenterY, center[2]]);
  18260. return this._getUpdatedOrbitState({
  18261. lookAt: newLookAt,
  18262. zoom: newZoom
  18263. });
  18264. }
  18265. /**
  18266. * End zooming
  18267. * Must call if `zoomStart()` was called
  18268. */
  18269. }, {
  18270. key: 'zoomEnd',
  18271. value: function zoomEnd() {
  18272. return this._getUpdatedOrbitState({
  18273. startZoomPos: null
  18274. });
  18275. }
  18276. /* Private methods */
  18277. }, {
  18278. key: '_getUpdatedOrbitState',
  18279. value: function _getUpdatedOrbitState(newProps) {
  18280. // Update _viewportProps
  18281. return new OrbitState(Object.assign({}, this._viewportProps, this._interactiveState, newProps));
  18282. }
  18283. // Apply any constraints (mathematical or defined by _viewportProps) to map state
  18284. }, {
  18285. key: '_applyConstraints',
  18286. value: function _applyConstraints(props) {
  18287. // Ensure zoom is within specified range
  18288. var maxZoom = props.maxZoom,
  18289. minZoom = props.minZoom,
  18290. zoom = props.zoom;
  18291. props.zoom = zoom > maxZoom ? maxZoom : zoom;
  18292. props.zoom = zoom < minZoom ? minZoom : zoom;
  18293. return props;
  18294. }
  18295. }]);
  18296. return OrbitState;
  18297. }();
  18298. exports.default = OrbitState;
  18299. /***/ }),
  18300. /* 180 */
  18301. /***/ (function(module, exports, __webpack_require__) {
  18302. "use strict";
  18303. Object.defineProperty(exports, "__esModule", {
  18304. value: true
  18305. });
  18306. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  18307. var _math = __webpack_require__(16);
  18308. var _assert = __webpack_require__(1);
  18309. var _assert2 = _interopRequireDefault(_assert);
  18310. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  18311. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  18312. var SphericalCoordinates = _math.experimental.SphericalCoordinates;
  18313. var defaultState = {
  18314. position: [0, 0, 0],
  18315. lookAt: [0, 0, 0],
  18316. up: [0, 0, 1],
  18317. rotationX: 0,
  18318. rotationY: 0,
  18319. fov: 50,
  18320. near: 1,
  18321. far: 100
  18322. };
  18323. /* Helpers */
  18324. var ViewState = function () {
  18325. function ViewState(opts) {
  18326. _classCallCheck(this, ViewState);
  18327. var width = opts.width,
  18328. height = opts.height,
  18329. _opts$position = opts.position,
  18330. position = _opts$position === undefined ? defaultState.position : _opts$position;
  18331. (0, _assert2.default)(Number.isFinite(width), '`width` must be supplied');
  18332. (0, _assert2.default)(Number.isFinite(height), '`height` must be supplied');
  18333. this._viewportProps = this._applyConstraints(Object.assign({}, opts, {
  18334. position: new _math.Vector3(position)
  18335. }));
  18336. }
  18337. _createClass(ViewState, [{
  18338. key: 'getViewportProps',
  18339. value: function getViewportProps() {
  18340. return this._viewportProps;
  18341. }
  18342. }, {
  18343. key: 'getDirection',
  18344. value: function getDirection() {
  18345. var spherical = new SphericalCoordinates({
  18346. bearing: this._viewportProps.bearing,
  18347. pitch: this._viewportProps.pitch
  18348. });
  18349. var direction = spherical.toVector3().normalize();
  18350. return direction;
  18351. }
  18352. }, {
  18353. key: 'getDirectionFromBearing',
  18354. value: function getDirectionFromBearing(bearing) {
  18355. var spherical = new SphericalCoordinates({
  18356. bearing: bearing,
  18357. pitch: 90
  18358. });
  18359. var direction = spherical.toVector3().normalize();
  18360. return direction;
  18361. }
  18362. // Redefined by subclass
  18363. // Apply any constraints (mathematical or defined by _viewportProps) to map state
  18364. }, {
  18365. key: '_applyConstraints',
  18366. value: function _applyConstraints(props) {
  18367. return props;
  18368. }
  18369. }]);
  18370. return ViewState;
  18371. }();
  18372. exports.default = ViewState;
  18373. /***/ }),
  18374. /* 181 */
  18375. /***/ (function(module, exports, __webpack_require__) {
  18376. "use strict";
  18377. Object.defineProperty(exports, "__esModule", {
  18378. value: true
  18379. });
  18380. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  18381. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  18382. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  18383. //
  18384. // Permission is hereby granted, free of charge, to any person obtaining a copy
  18385. // of this software and associated documentation files (the "Software"), to deal
  18386. // in the Software without restriction, including without limitation the rights
  18387. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  18388. // copies of the Software, and to permit persons to whom the Software is
  18389. // furnished to do so, subject to the following conditions:
  18390. //
  18391. // The above copyright notice and this permission notice shall be included in
  18392. // all copies or substantial portions of the Software.
  18393. //
  18394. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18395. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18396. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18397. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18398. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18399. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  18400. // THE SOFTWARE.
  18401. /* eslint-disable no-try-catch */
  18402. var EffectManager = function () {
  18403. function EffectManager(_ref) {
  18404. var gl = _ref.gl,
  18405. layerManager = _ref.layerManager;
  18406. _classCallCheck(this, EffectManager);
  18407. this.gl = gl;
  18408. this.layerManager = layerManager;
  18409. this._effects = [];
  18410. }
  18411. /**
  18412. * Adds an effect to be managed. That effect's initialize function will
  18413. * be called, and the effect's preDraw and draw callbacks will be
  18414. * called at the appropriate times in the render loop
  18415. * @param {Effect} effect - the effect to be added
  18416. */
  18417. _createClass(EffectManager, [{
  18418. key: "addEffect",
  18419. value: function addEffect(effect) {
  18420. this._effects.push(effect);
  18421. this._sortEffects();
  18422. effect.initialize({ gl: this.gl, layerManager: this.layerManager });
  18423. }
  18424. /**
  18425. * Removes an effect that is already being managed. That effect's
  18426. * finalize function will be called, and its callbacks will no longer
  18427. * be envoked in the render loop
  18428. * @param {Effect} effect - the effect to be removed
  18429. * @return {bool} - True if the effect was already being managed, and
  18430. * thus successfully removed; false otherwise
  18431. */
  18432. }, {
  18433. key: "removeEffect",
  18434. value: function removeEffect(effect) {
  18435. var i = this._effects.indexOf(effect);
  18436. if (i >= 0) {
  18437. effect.finalize({ gl: this.gl, layerManager: this.layerManager });
  18438. this._effects.splice(i, 1);
  18439. return true;
  18440. }
  18441. return false;
  18442. }
  18443. /**
  18444. * Envoke the preDraw callback of all managed events, in order of
  18445. * decreasing priority
  18446. */
  18447. }, {
  18448. key: "preDraw",
  18449. value: function preDraw() {
  18450. var _iteratorNormalCompletion = true;
  18451. var _didIteratorError = false;
  18452. var _iteratorError = undefined;
  18453. try {
  18454. for (var _iterator = this._effects[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  18455. var effect = _step.value;
  18456. if (effect.needsRedraw) {
  18457. effect.preDraw({ gl: this.gl, layerManager: this.layerManager });
  18458. }
  18459. }
  18460. } catch (err) {
  18461. _didIteratorError = true;
  18462. _iteratorError = err;
  18463. } finally {
  18464. try {
  18465. if (!_iteratorNormalCompletion && _iterator.return) {
  18466. _iterator.return();
  18467. }
  18468. } finally {
  18469. if (_didIteratorError) {
  18470. throw _iteratorError;
  18471. }
  18472. }
  18473. }
  18474. }
  18475. /**
  18476. * Envoke the draw callback of all managed events, in order of
  18477. * decreasing priority
  18478. */
  18479. }, {
  18480. key: "draw",
  18481. value: function draw() {
  18482. var _iteratorNormalCompletion2 = true;
  18483. var _didIteratorError2 = false;
  18484. var _iteratorError2 = undefined;
  18485. try {
  18486. for (var _iterator2 = this._effects[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  18487. var effect = _step2.value;
  18488. if (effect.needsRedraw) {
  18489. effect.draw({ gl: this.gl, layerManager: this.layerManager });
  18490. }
  18491. }
  18492. } catch (err) {
  18493. _didIteratorError2 = true;
  18494. _iteratorError2 = err;
  18495. } finally {
  18496. try {
  18497. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  18498. _iterator2.return();
  18499. }
  18500. } finally {
  18501. if (_didIteratorError2) {
  18502. throw _iteratorError2;
  18503. }
  18504. }
  18505. }
  18506. }
  18507. }, {
  18508. key: "_sortEffects",
  18509. value: function _sortEffects() {
  18510. this._effects.sort(function (a, b) {
  18511. if (a.priority > b.priority) {
  18512. return -1;
  18513. } else if (a.priority < b.priority) {
  18514. return 1;
  18515. }
  18516. return a.count - b.count;
  18517. });
  18518. }
  18519. }]);
  18520. return EffectManager;
  18521. }();
  18522. exports.default = EffectManager;
  18523. /***/ }),
  18524. /* 182 */
  18525. /***/ (function(module, exports, __webpack_require__) {
  18526. "use strict";
  18527. Object.defineProperty(exports, "__esModule", {
  18528. value: true
  18529. });
  18530. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  18531. //
  18532. // Permission is hereby granted, free of charge, to any person obtaining a copy
  18533. // of this software and associated documentation files (the "Software"), to deal
  18534. // in the Software without restriction, including without limitation the rights
  18535. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  18536. // copies of the Software, and to permit persons to whom the Software is
  18537. // furnished to do so, subject to the following conditions:
  18538. //
  18539. // The above copyright notice and this permission notice shall be included in
  18540. // all copies or substantial portions of the Software.
  18541. //
  18542. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18543. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18544. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18545. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18546. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18547. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  18548. // THE SOFTWARE.
  18549. /* eslint-disable guard-for-in */
  18550. exports.glArrayFromType = glArrayFromType;
  18551. var _stats = __webpack_require__(185);
  18552. var _stats2 = _interopRequireDefault(_stats);
  18553. var _log = __webpack_require__(17);
  18554. var _log2 = _interopRequireDefault(_log);
  18555. var _luma = __webpack_require__(12);
  18556. var _assert = __webpack_require__(1);
  18557. var _assert2 = _interopRequireDefault(_assert);
  18558. var _attributeTransitionManager = __webpack_require__(335);
  18559. var _attributeTransitionManager2 = _interopRequireDefault(_attributeTransitionManager);
  18560. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  18561. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  18562. var LOG_START_END_PRIORITY = 1;
  18563. var LOG_DETAIL_PRIORITY = 2;
  18564. function noop() {}
  18565. /* eslint-disable complexity */
  18566. function glArrayFromType(glType) {
  18567. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  18568. _ref$clamped = _ref.clamped,
  18569. clamped = _ref$clamped === undefined ? true : _ref$clamped;
  18570. // Sorted in some order of likelihood to reduce amount of comparisons
  18571. switch (glType) {
  18572. case _luma.GL.FLOAT:
  18573. return Float32Array;
  18574. case _luma.GL.UNSIGNED_SHORT:
  18575. case _luma.GL.UNSIGNED_SHORT_5_6_5:
  18576. case _luma.GL.UNSIGNED_SHORT_4_4_4_4:
  18577. case _luma.GL.UNSIGNED_SHORT_5_5_5_1:
  18578. return Uint16Array;
  18579. case _luma.GL.UNSIGNED_INT:
  18580. return Uint32Array;
  18581. case _luma.GL.UNSIGNED_BYTE:
  18582. return clamped ? Uint8ClampedArray : Uint8Array;
  18583. case _luma.GL.BYTE:
  18584. return Int8Array;
  18585. case _luma.GL.SHORT:
  18586. return Int16Array;
  18587. case _luma.GL.INT:
  18588. return Int32Array;
  18589. default:
  18590. throw new Error('Failed to deduce type from array');
  18591. }
  18592. }
  18593. /* eslint-enable complexity */
  18594. // Default loggers
  18595. var logFunctions = {
  18596. savedMessages: null,
  18597. timeStart: null,
  18598. onLog: function onLog(_ref2) {
  18599. var level = _ref2.level,
  18600. message = _ref2.message;
  18601. _log2.default.log(level, message);
  18602. },
  18603. onUpdateStart: function onUpdateStart(_ref3) {
  18604. var level = _ref3.level,
  18605. id = _ref3.id,
  18606. numInstances = _ref3.numInstances;
  18607. logFunctions.savedMessages = [];
  18608. logFunctions.timeStart = new Date();
  18609. },
  18610. onUpdate: function onUpdate(_ref4) {
  18611. var level = _ref4.level,
  18612. message = _ref4.message;
  18613. if (logFunctions.savedMessages) {
  18614. logFunctions.savedMessages.push(message);
  18615. }
  18616. },
  18617. onUpdateEnd: function onUpdateEnd(_ref5) {
  18618. var level = _ref5.level,
  18619. id = _ref5.id,
  18620. numInstances = _ref5.numInstances;
  18621. var timeMs = Math.round(new Date() - logFunctions.timeStart);
  18622. var time = timeMs + 'ms';
  18623. _log2.default.group(level, 'Updated attributes for ' + numInstances + ' instances in ' + id + ' in ' + time, {
  18624. collapsed: true
  18625. });
  18626. var _iteratorNormalCompletion = true;
  18627. var _didIteratorError = false;
  18628. var _iteratorError = undefined;
  18629. try {
  18630. for (var _iterator = logFunctions.savedMessages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  18631. var message = _step.value;
  18632. _log2.default.log(level, message);
  18633. }
  18634. } catch (err) {
  18635. _didIteratorError = true;
  18636. _iteratorError = err;
  18637. } finally {
  18638. try {
  18639. if (!_iteratorNormalCompletion && _iterator.return) {
  18640. _iterator.return();
  18641. }
  18642. } finally {
  18643. if (_didIteratorError) {
  18644. throw _iteratorError;
  18645. }
  18646. }
  18647. }
  18648. _log2.default.groupEnd(level, 'Updated attributes for ' + numInstances + ' instances in ' + id + ' in ' + time);
  18649. logFunctions.savedMessages = null;
  18650. }
  18651. };
  18652. var AttributeManager = function () {
  18653. _createClass(AttributeManager, null, [{
  18654. key: 'setDefaultLogFunctions',
  18655. /**
  18656. * Sets log functions to help trace or time attribute updates.
  18657. * Default logging uses deck logger.
  18658. *
  18659. * `onLog` is called for each attribute.
  18660. *
  18661. * To enable detailed control of timming and e.g. hierarchical logging,
  18662. * hooks are also provided for update start and end.
  18663. *
  18664. * @param {Object} [opts]
  18665. * @param {String} [opts.onLog=] - called to print
  18666. * @param {String} [opts.onUpdateStart=] - called before update() starts
  18667. * @param {String} [opts.onUpdateEnd=] - called after update() ends
  18668. */
  18669. value: function setDefaultLogFunctions() {
  18670. var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  18671. onLog = _ref6.onLog,
  18672. onUpdateStart = _ref6.onUpdateStart,
  18673. onUpdate = _ref6.onUpdate,
  18674. onUpdateEnd = _ref6.onUpdateEnd;
  18675. if (onLog !== undefined) {
  18676. logFunctions.onLog = onLog || noop;
  18677. }
  18678. if (onUpdateStart !== undefined) {
  18679. logFunctions.onUpdateStart = onUpdateStart || noop;
  18680. }
  18681. if (onUpdate !== undefined) {
  18682. logFunctions.onUpdate = onUpdate || noop;
  18683. }
  18684. if (onUpdateEnd !== undefined) {
  18685. logFunctions.onUpdateEnd = onUpdateEnd || noop;
  18686. }
  18687. }
  18688. /**
  18689. * @classdesc
  18690. * Automated attribute generation and management. Suitable when a set of
  18691. * vertex shader attributes are generated by iteration over a data array,
  18692. * and updates to these attributes are needed either when the data itself
  18693. * changes, or when other data relevant to the calculations change.
  18694. *
  18695. * - First the application registers descriptions of its dynamic vertex
  18696. * attributes using AttributeManager.add().
  18697. * - Then, when any change that affects attributes is detected by the
  18698. * application, the app will call AttributeManager.invalidate().
  18699. * - Finally before it renders, it calls AttributeManager.update() to
  18700. * ensure that attributes are automatically rebuilt if anything has been
  18701. * invalidated.
  18702. *
  18703. * The application provided update functions describe how attributes
  18704. * should be updated from a data array and are expected to traverse
  18705. * that data array (or iterable) and fill in the attribute's typed array.
  18706. *
  18707. * Note that the attribute manager intentionally does not do advanced
  18708. * change detection, but instead makes it easy to build such detection
  18709. * by offering the ability to "invalidate" each attribute separately.
  18710. *
  18711. * Summary:
  18712. * - keeps track of valid state for each attribute
  18713. * - auto reallocates attributes when needed
  18714. * - auto updates attributes with registered updater functions
  18715. * - allows overriding with application supplied buffers
  18716. *
  18717. * Limitations:
  18718. * - There are currently no provisions for only invalidating a range of
  18719. * indices in an attribute.
  18720. *
  18721. * @class
  18722. * @param {Object} [props]
  18723. * @param {String} [props.id] - identifier (for debugging)
  18724. */
  18725. }]);
  18726. function AttributeManager(gl) {
  18727. var _ref7 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  18728. _ref7$id = _ref7.id,
  18729. id = _ref7$id === undefined ? 'attribute-manager' : _ref7$id;
  18730. _classCallCheck(this, AttributeManager);
  18731. this.id = id;
  18732. this.gl = gl;
  18733. this.attributes = {};
  18734. this.updateTriggers = {};
  18735. this.accessors = {};
  18736. this.allocedInstances = -1;
  18737. this.needsRedraw = true;
  18738. this.userData = {};
  18739. this.stats = new _stats2.default({ id: 'attr' });
  18740. this.attributeTransitionManger = new _attributeTransitionManager2.default(gl, {
  18741. id: id + '-transitions'
  18742. });
  18743. // For debugging sanity, prevent uninitialized members
  18744. Object.seal(this);
  18745. }
  18746. /**
  18747. * Adds attributes
  18748. * Takes a map of attribute descriptor objects
  18749. * - keys are attribute names
  18750. * - values are objects with attribute fields
  18751. *
  18752. * attribute.size - number of elements per object
  18753. * attribute.updater - number of elements
  18754. * attribute.instanced=0 - is this is an instanced attribute (a.k.a. divisor)
  18755. * attribute.noAlloc=false - if this attribute should not be allocated
  18756. *
  18757. * @example
  18758. * attributeManager.add({
  18759. * positions: {size: 2, update: calculatePositions}
  18760. * colors: {size: 3, update: calculateColors}
  18761. * });
  18762. *
  18763. * @param {Object} attributes - attribute map (see above)
  18764. * @param {Object} updaters - separate map of update functions (deprecated)
  18765. */
  18766. _createClass(AttributeManager, [{
  18767. key: 'add',
  18768. value: function add(attributes) {
  18769. var updaters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  18770. this._add(attributes, updaters);
  18771. }
  18772. /**
  18773. * Removes attributes
  18774. * Takes an array of attribute names and delete them from
  18775. * the attribute map if they exists
  18776. *
  18777. * @example
  18778. * attributeManager.remove(['position']);
  18779. *
  18780. * @param {Object} attributeNameArray - attribute name array (see above)
  18781. */
  18782. }, {
  18783. key: 'remove',
  18784. value: function remove(attributeNameArray) {
  18785. for (var i = 0; i < attributeNameArray.length; i++) {
  18786. var name = attributeNameArray[i];
  18787. if (this.attributes[name] !== undefined) {
  18788. delete this.attributes[name];
  18789. }
  18790. }
  18791. }
  18792. /* Marks an attribute for update
  18793. * @param {string} triggerName: attribute or accessor name
  18794. */
  18795. }, {
  18796. key: 'invalidate',
  18797. value: function invalidate(triggerName) {
  18798. var invalidatedAttributes = this._invalidateTrigger(triggerName);
  18799. // For performance tuning
  18800. logFunctions.onLog({
  18801. level: LOG_DETAIL_PRIORITY,
  18802. message: 'invalidated attributes ' + invalidatedAttributes + ' (' + triggerName + ') for ' + this.id,
  18803. id: this.identifier
  18804. });
  18805. }
  18806. }, {
  18807. key: 'invalidateAll',
  18808. value: function invalidateAll() {
  18809. for (var attributeName in this.attributes) {
  18810. this.attributes[attributeName].needsUpdate = true;
  18811. }
  18812. // For performance tuning
  18813. logFunctions.onLog({
  18814. level: LOG_DETAIL_PRIORITY,
  18815. message: 'invalidated all attributes for ' + this.id,
  18816. id: this.identifier
  18817. });
  18818. }
  18819. }, {
  18820. key: '_invalidateTrigger',
  18821. value: function _invalidateTrigger(triggerName) {
  18822. var attributes = this.attributes,
  18823. updateTriggers = this.updateTriggers;
  18824. var invalidatedAttributes = updateTriggers[triggerName];
  18825. if (!invalidatedAttributes) {
  18826. var message = 'invalidating non-existent trigger ' + triggerName + ' for ' + this.id + '\n';
  18827. message += 'Valid triggers: ' + Object.keys(attributes).join(', ');
  18828. _log2.default.warn(message, invalidatedAttributes);
  18829. } else {
  18830. invalidatedAttributes.forEach(function (name) {
  18831. var attribute = attributes[name];
  18832. if (attribute) {
  18833. attribute.needsUpdate = true;
  18834. }
  18835. });
  18836. }
  18837. return invalidatedAttributes;
  18838. }
  18839. /**
  18840. * Ensure all attribute buffers are updated from props or data.
  18841. *
  18842. * Note: Any preallocated buffers in "buffers" matching registered attribute
  18843. * names will be used. No update will happen in this case.
  18844. * Note: Calls onUpdateStart and onUpdateEnd log callbacks before and after.
  18845. *
  18846. * @param {Object} opts - options
  18847. * @param {Object} opts.data - data (iterable object)
  18848. * @param {Object} opts.numInstances - count of data
  18849. * @param {Object} opts.buffers = {} - pre-allocated buffers
  18850. * @param {Object} opts.props - passed to updaters
  18851. * @param {Object} opts.context - Used as "this" context for updaters
  18852. */
  18853. }, {
  18854. key: 'update',
  18855. value: function update() {
  18856. var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  18857. data = _ref8.data,
  18858. numInstances = _ref8.numInstances,
  18859. transitions = _ref8.transitions,
  18860. _ref8$props = _ref8.props,
  18861. props = _ref8$props === undefined ? {} : _ref8$props,
  18862. _ref8$buffers = _ref8.buffers,
  18863. buffers = _ref8$buffers === undefined ? {} : _ref8$buffers,
  18864. _ref8$context = _ref8.context,
  18865. context = _ref8$context === undefined ? {} : _ref8$context,
  18866. _ref8$ignoreUnknownAt = _ref8.ignoreUnknownAttributes,
  18867. ignoreUnknownAttributes = _ref8$ignoreUnknownAt === undefined ? false : _ref8$ignoreUnknownAt;
  18868. // First apply any application provided buffers
  18869. this._checkExternalBuffers({ buffers: buffers, ignoreUnknownAttributes: ignoreUnknownAttributes });
  18870. this._setExternalBuffers(buffers);
  18871. // Only initiate alloc/update (and logging) if actually needed
  18872. if (this._analyzeBuffers({ numInstances: numInstances })) {
  18873. logFunctions.onUpdateStart({ level: LOG_START_END_PRIORITY, id: this.id, numInstances: numInstances });
  18874. this.stats.timeStart();
  18875. this._updateBuffers({ numInstances: numInstances, data: data, props: props, context: context });
  18876. this.stats.timeEnd();
  18877. logFunctions.onUpdateEnd({ level: LOG_START_END_PRIORITY, id: this.id, numInstances: numInstances });
  18878. }
  18879. this.attributeTransitionManger.update(this.attributes, transitions);
  18880. }
  18881. /**
  18882. * Returns all attribute descriptors
  18883. * Note: Format matches luma.gl Model/Program.setAttributes()
  18884. * @return {Object} attributes - descriptors
  18885. */
  18886. }, {
  18887. key: 'getAttributes',
  18888. value: function getAttributes() {
  18889. return this.attributes;
  18890. }
  18891. /**
  18892. * Returns changed attribute descriptors
  18893. * This indicates which WebGLBuggers need to be updated
  18894. * @return {Object} attributes - descriptors
  18895. */
  18896. }, {
  18897. key: 'getChangedAttributes',
  18898. value: function getChangedAttributes(_ref9) {
  18899. var _ref9$transition = _ref9.transition,
  18900. transition = _ref9$transition === undefined ? false : _ref9$transition,
  18901. _ref9$clearChangedFla = _ref9.clearChangedFlags,
  18902. clearChangedFlags = _ref9$clearChangedFla === undefined ? false : _ref9$clearChangedFla;
  18903. var attributes = this.attributes,
  18904. attributeTransitionManger = this.attributeTransitionManger;
  18905. if (transition) {
  18906. return attributeTransitionManger.getAttributes();
  18907. }
  18908. var changedAttributes = {};
  18909. for (var attributeName in attributes) {
  18910. var attribute = attributes[attributeName];
  18911. if (attribute.changed) {
  18912. attribute.changed = attribute.changed && !clearChangedFlags;
  18913. // Only return non-transition attributes
  18914. if (!attributeTransitionManger.hasAttribute(attributeName)) {
  18915. changedAttributes[attributeName] = attribute;
  18916. }
  18917. }
  18918. }
  18919. return changedAttributes;
  18920. }
  18921. /**
  18922. * Returns the redraw flag, optionally clearing it.
  18923. * Redraw flag will be set if any attributes attributes changed since
  18924. * flag was last cleared.
  18925. *
  18926. * @param {Object} [opts]
  18927. * @param {String} [opts.clearRedrawFlags=false] - whether to clear the flag
  18928. * @return {false|String} - reason a redraw is needed.
  18929. */
  18930. }, {
  18931. key: 'getNeedsRedraw',
  18932. value: function getNeedsRedraw() {
  18933. var _ref10 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  18934. _ref10$clearRedrawFla = _ref10.clearRedrawFlags,
  18935. clearRedrawFlags = _ref10$clearRedrawFla === undefined ? false : _ref10$clearRedrawFla;
  18936. var redraw = this.needsRedraw;
  18937. this.needsRedraw = this.needsRedraw && !clearRedrawFlags;
  18938. return redraw && this.id;
  18939. }
  18940. /**
  18941. * Sets the redraw flag.
  18942. * @param {Boolean} redraw=true
  18943. * @return {AttributeManager} - for chaining
  18944. */
  18945. }, {
  18946. key: 'setNeedsRedraw',
  18947. value: function setNeedsRedraw() {
  18948. var redraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  18949. this.needsRedraw = true;
  18950. return this;
  18951. }
  18952. // DEPRECATED METHODS
  18953. /**
  18954. * Adds attributes
  18955. * @param {Object} attributes - attribute map (see above)
  18956. * @param {Object} updaters - separate map of update functions (deprecated)
  18957. */
  18958. }, {
  18959. key: 'addInstanced',
  18960. value: function addInstanced(attributes) {
  18961. var updaters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  18962. this._add(attributes, updaters, { instanced: 1 });
  18963. }
  18964. // PROTECTED METHODS - Only to be used by collaborating classes, not by apps
  18965. /**
  18966. * Returns object containing all accessors as keys, with non-null values
  18967. * @return {Object} - accessors object
  18968. */
  18969. }, {
  18970. key: 'getAccessors',
  18971. value: function getAccessors() {
  18972. return this.updateTriggers;
  18973. }
  18974. // PRIVATE METHODS
  18975. // Used to register an attribute
  18976. }, {
  18977. key: '_add',
  18978. value: function _add(attributes) {
  18979. var updaters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  18980. var _extraProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  18981. var newAttributes = {};
  18982. for (var attributeName in attributes) {
  18983. // support for separate update function map
  18984. // For now, just copy any attributes from that map into the main map
  18985. // TODO - Attribute maps are a deprecated feature, remove
  18986. if (attributeName in updaters) {
  18987. attributes[attributeName] = Object.assign({}, attributes[attributeName], updaters[attributeName]);
  18988. }
  18989. var attribute = attributes[attributeName];
  18990. var isGeneric = attribute.isGeneric || false;
  18991. var isIndexed = attribute.isIndexed || attribute.elements;
  18992. var size = attribute.elements && 1 || attribute.size;
  18993. var value = attribute.value || null;
  18994. // Initialize the attribute descriptor, with WebGL and metadata fields
  18995. var attributeData = Object.assign({
  18996. // Ensure that fields are present before Object.seal()
  18997. target: undefined,
  18998. userData: {} // Reserved for application
  18999. },
  19000. // Metadata
  19001. attribute, {
  19002. // State
  19003. isExternalBuffer: false,
  19004. needsAlloc: false,
  19005. needsUpdate: false,
  19006. changed: false,
  19007. // Luma fields
  19008. isGeneric: isGeneric,
  19009. isIndexed: isIndexed,
  19010. size: size,
  19011. value: value
  19012. }, _extraProps);
  19013. // Sanity - no app fields on our attributes. Use userData instead.
  19014. Object.seal(attributeData);
  19015. // Check all fields and generate helpful error messages
  19016. this._validateAttributeDefinition(attributeName, attributeData);
  19017. // Add to both attributes list (for registration with model)
  19018. newAttributes[attributeName] = attributeData;
  19019. }
  19020. Object.assign(this.attributes, newAttributes);
  19021. this._mapUpdateTriggersToAttributes();
  19022. }
  19023. // build updateTrigger name to attribute name mapping
  19024. }, {
  19025. key: '_mapUpdateTriggersToAttributes',
  19026. value: function _mapUpdateTriggersToAttributes() {
  19027. var _this = this;
  19028. var triggers = {};
  19029. var _loop = function _loop(attributeName) {
  19030. var attribute = _this.attributes[attributeName];
  19031. var accessor = attribute.accessor;
  19032. // Backards compatibility: allow attribute name to be used as update trigger key
  19033. triggers[attributeName] = [attributeName];
  19034. // use accessor name as update trigger key
  19035. if (typeof accessor === 'string') {
  19036. accessor = [accessor];
  19037. }
  19038. if (Array.isArray(accessor)) {
  19039. accessor.forEach(function (accessorName) {
  19040. if (!triggers[accessorName]) {
  19041. triggers[accessorName] = [];
  19042. }
  19043. triggers[accessorName].push(attributeName);
  19044. });
  19045. }
  19046. };
  19047. for (var attributeName in this.attributes) {
  19048. _loop(attributeName);
  19049. }
  19050. this.updateTriggers = triggers;
  19051. }
  19052. }, {
  19053. key: '_validateAttributeDefinition',
  19054. value: function _validateAttributeDefinition(attributeName, attribute) {
  19055. (0, _assert2.default)(attribute.size >= 1 && attribute.size <= 4, 'Attribute definition for ' + attributeName + ' invalid size');
  19056. // Check that either 'accessor' or 'update' is a valid function
  19057. var hasUpdater = attribute.noAlloc || typeof attribute.update === 'function' || typeof attribute.accessor === 'string';
  19058. if (!hasUpdater) {
  19059. throw new Error('Attribute ' + attributeName + ' missing update or accessor');
  19060. }
  19061. }
  19062. // Checks that any attribute buffers in props are valid
  19063. // Note: This is just to help app catch mistakes
  19064. }, {
  19065. key: '_checkExternalBuffers',
  19066. value: function _checkExternalBuffers() {
  19067. var _ref11 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  19068. _ref11$buffers = _ref11.buffers,
  19069. buffers = _ref11$buffers === undefined ? {} : _ref11$buffers,
  19070. _ref11$ignoreUnknownA = _ref11.ignoreUnknownAttributes,
  19071. ignoreUnknownAttributes = _ref11$ignoreUnknownA === undefined ? false : _ref11$ignoreUnknownA;
  19072. var attributes = this.attributes;
  19073. for (var attributeName in buffers) {
  19074. var attribute = attributes[attributeName];
  19075. if (!attribute && !ignoreUnknownAttributes) {
  19076. throw new Error('Unknown attribute prop ' + attributeName);
  19077. }
  19078. // const buffer = buffers[attributeName];
  19079. // TODO - check buffer type
  19080. }
  19081. }
  19082. // Set the buffers for the supplied attributes
  19083. // Update attribute buffers from any attributes in props
  19084. // Detach any previously set buffers, marking all
  19085. // Attributes for auto allocation
  19086. /* eslint-disable max-statements */
  19087. }, {
  19088. key: '_setExternalBuffers',
  19089. value: function _setExternalBuffers(bufferMap) {
  19090. var attributes = this.attributes,
  19091. numInstances = this.numInstances;
  19092. // Copy the refs of any supplied buffers in the props
  19093. for (var attributeName in attributes) {
  19094. var attribute = attributes[attributeName];
  19095. var buffer = bufferMap[attributeName];
  19096. attribute.isExternalBuffer = false;
  19097. if (buffer) {
  19098. var ArrayType = glArrayFromType(attribute.type || _luma.GL.FLOAT);
  19099. if (!(buffer instanceof ArrayType)) {
  19100. throw new Error('Attribute ' + attributeName + ' must be of type ' + ArrayType.name);
  19101. }
  19102. if (attribute.auto && buffer.length <= numInstances * attribute.size) {
  19103. throw new Error('Attribute prop array must match length and size');
  19104. }
  19105. attribute.isExternalBuffer = true;
  19106. attribute.needsUpdate = false;
  19107. if (attribute.value !== buffer) {
  19108. attribute.value = buffer;
  19109. attribute.changed = true;
  19110. this.needsRedraw = true;
  19111. }
  19112. }
  19113. }
  19114. }
  19115. /* eslint-enable max-statements */
  19116. /* Checks that typed arrays for attributes are big enough
  19117. * sets alloc flag if not
  19118. * @return {Boolean} whether any updates are needed
  19119. */
  19120. }, {
  19121. key: '_analyzeBuffers',
  19122. value: function _analyzeBuffers(_ref12) {
  19123. var numInstances = _ref12.numInstances;
  19124. var attributes = this.attributes;
  19125. (0, _assert2.default)(numInstances !== undefined, 'numInstances not defined');
  19126. // Track whether any allocations or updates are needed
  19127. var needsUpdate = false;
  19128. for (var attributeName in attributes) {
  19129. var attribute = attributes[attributeName];
  19130. if (!attribute.isExternalBuffer) {
  19131. // Do we need to reallocate the attribute's typed array?
  19132. var needsAlloc = attribute.value === null || attribute.value.length / attribute.size < numInstances;
  19133. if (needsAlloc && (attribute.update || attribute.accessor)) {
  19134. attribute.needsAlloc = true;
  19135. needsUpdate = true;
  19136. }
  19137. if (attribute.needsUpdate) {
  19138. needsUpdate = true;
  19139. }
  19140. }
  19141. }
  19142. return needsUpdate;
  19143. }
  19144. /**
  19145. * @private
  19146. * Calls update on any buffers that need update
  19147. * TODO? - If app supplied all attributes, no need to iterate over data
  19148. *
  19149. * @param {Object} opts - options
  19150. * @param {Object} opts.data - data (iterable object)
  19151. * @param {Object} opts.numInstances - count of data
  19152. * @param {Object} opts.buffers = {} - pre-allocated buffers
  19153. * @param {Object} opts.props - passed to updaters
  19154. * @param {Object} opts.context - Used as "this" context for updaters
  19155. */
  19156. /* eslint-disable max-statements, complexity */
  19157. }, {
  19158. key: '_updateBuffers',
  19159. value: function _updateBuffers(_ref13) {
  19160. var numInstances = _ref13.numInstances,
  19161. data = _ref13.data,
  19162. props = _ref13.props,
  19163. context = _ref13.context;
  19164. var attributes = this.attributes;
  19165. // Allocate at least one element to ensure a valid buffer
  19166. var allocCount = Math.max(numInstances, 1);
  19167. for (var attributeName in attributes) {
  19168. var attribute = attributes[attributeName];
  19169. // Allocate a new typed array if needed
  19170. if (attribute.needsAlloc) {
  19171. var ArrayType = glArrayFromType(attribute.type || _luma.GL.FLOAT);
  19172. attribute.value = new ArrayType(attribute.size * allocCount);
  19173. logFunctions.onUpdate({
  19174. level: LOG_DETAIL_PRIORITY,
  19175. message: attributeName + ' allocated ' + allocCount,
  19176. id: this.id
  19177. });
  19178. attribute.needsAlloc = false;
  19179. attribute.needsUpdate = true;
  19180. }
  19181. }
  19182. for (var _attributeName in attributes) {
  19183. var _attribute = attributes[_attributeName];
  19184. // Call updater function if needed
  19185. if (_attribute.needsUpdate) {
  19186. this._updateBuffer({ attribute: _attribute, attributeName: _attributeName, numInstances: numInstances, data: data, props: props, context: context });
  19187. }
  19188. }
  19189. this.allocedInstances = allocCount;
  19190. }
  19191. }, {
  19192. key: '_updateBuffer',
  19193. value: function _updateBuffer(_ref14) {
  19194. var attribute = _ref14.attribute,
  19195. attributeName = _ref14.attributeName,
  19196. numInstances = _ref14.numInstances,
  19197. data = _ref14.data,
  19198. props = _ref14.props,
  19199. context = _ref14.context;
  19200. var update = attribute.update,
  19201. accessor = attribute.accessor;
  19202. var timeStart = new Date();
  19203. if (update) {
  19204. // Custom updater - typically for non-instanced layers
  19205. update.call(context, attribute, { data: data, props: props, numInstances: numInstances });
  19206. this._checkAttributeArray(attribute, attributeName);
  19207. } else if (accessor) {
  19208. // Standard updater
  19209. this._updateBufferViaStandardAccessor({ attribute: attribute, data: data, props: props });
  19210. this._checkAttributeArray(attribute, attributeName);
  19211. } else {
  19212. logFunctions.onUpdate({
  19213. level: LOG_DETAIL_PRIORITY,
  19214. message: attributeName + ' missing update function',
  19215. id: this.id
  19216. });
  19217. }
  19218. var timeMs = Math.round(new Date() - timeStart);
  19219. var time = timeMs + 'ms';
  19220. logFunctions.onUpdate({
  19221. level: LOG_DETAIL_PRIORITY,
  19222. message: attributeName + ' updated ' + numInstances + ' ' + time,
  19223. id: this.id
  19224. });
  19225. attribute.needsUpdate = false;
  19226. attribute.changed = true;
  19227. this.needsRedraw = true;
  19228. }
  19229. /* eslint-enable max-statements */
  19230. }, {
  19231. key: '_updateBufferViaStandardAccessor',
  19232. value: function _updateBufferViaStandardAccessor(_ref15) {
  19233. var attribute = _ref15.attribute,
  19234. data = _ref15.data,
  19235. props = _ref15.props;
  19236. var accessor = attribute.accessor,
  19237. value = attribute.value,
  19238. size = attribute.size;
  19239. var accessorFunc = props[accessor];
  19240. (0, _assert2.default)(typeof accessorFunc === 'function', 'accessor "' + accessor + '" is not a function');
  19241. var _attribute$defaultVal = attribute.defaultValue,
  19242. defaultValue = _attribute$defaultVal === undefined ? [0, 0, 0, 0] : _attribute$defaultVal;
  19243. defaultValue = Array.isArray(defaultValue) ? defaultValue : [defaultValue];
  19244. var i = 0;
  19245. var _iteratorNormalCompletion2 = true;
  19246. var _didIteratorError2 = false;
  19247. var _iteratorError2 = undefined;
  19248. try {
  19249. for (var _iterator2 = data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  19250. var object = _step2.value;
  19251. var objectValue = accessorFunc(object);
  19252. objectValue = Array.isArray(objectValue) ? objectValue : [objectValue];
  19253. /* eslint-disable no-fallthrough, default-case */
  19254. switch (size) {
  19255. case 4:
  19256. value[i + 3] = Number.isFinite(objectValue[3]) ? objectValue[3] : defaultValue[3];
  19257. case 3:
  19258. value[i + 2] = Number.isFinite(objectValue[2]) ? objectValue[2] : defaultValue[2];
  19259. case 2:
  19260. value[i + 1] = Number.isFinite(objectValue[1]) ? objectValue[1] : defaultValue[1];
  19261. case 1:
  19262. value[i + 0] = Number.isFinite(objectValue[0]) ? objectValue[0] : defaultValue[0];
  19263. }
  19264. i += size;
  19265. }
  19266. } catch (err) {
  19267. _didIteratorError2 = true;
  19268. _iteratorError2 = err;
  19269. } finally {
  19270. try {
  19271. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  19272. _iterator2.return();
  19273. }
  19274. } finally {
  19275. if (_didIteratorError2) {
  19276. throw _iteratorError2;
  19277. }
  19278. }
  19279. }
  19280. }
  19281. }, {
  19282. key: '_checkAttributeArray',
  19283. value: function _checkAttributeArray(attribute, attributeName) {
  19284. var value = attribute.value;
  19285. if (value && value.length >= 4) {
  19286. var valid = Number.isFinite(value[0]) && Number.isFinite(value[1]) && Number.isFinite(value[2]) && Number.isFinite(value[3]);
  19287. if (!valid) {
  19288. throw new Error('Illegal attribute generated for ' + attributeName);
  19289. }
  19290. }
  19291. }
  19292. /**
  19293. * Update attribute transition to the current timestamp
  19294. * Returns `true` if any transition is in progress
  19295. */
  19296. }, {
  19297. key: 'updateTransition',
  19298. value: function updateTransition() {
  19299. var attributeTransitionManger = this.attributeTransitionManger;
  19300. var transitionUpdated = attributeTransitionManger.setCurrentTime(Date.now());
  19301. this.needsRedraw = this.needsRedraw || transitionUpdated;
  19302. return transitionUpdated;
  19303. }
  19304. }]);
  19305. return AttributeManager;
  19306. }();
  19307. exports.default = AttributeManager;
  19308. /***/ }),
  19309. /* 183 */
  19310. /***/ (function(module, exports, __webpack_require__) {
  19311. "use strict";
  19312. Object.defineProperty(exports, "__esModule", {
  19313. value: true
  19314. });
  19315. exports.getPixelRatio = undefined;
  19316. exports.drawLayers = drawLayers;
  19317. exports.drawPickingBuffer = drawPickingBuffer;
  19318. var _luma = __webpack_require__(12);
  19319. var _log = __webpack_require__(17);
  19320. var _log2 = _interopRequireDefault(_log);
  19321. var _assert = __webpack_require__(1);
  19322. var _assert2 = _interopRequireDefault(_assert);
  19323. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  19324. var LOG_PRIORITY_DRAW = 2; // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  19325. //
  19326. // Permission is hereby granted, free of charge, to any person obtaining a copy
  19327. // of this software and associated documentation files (the "Software"), to deal
  19328. // in the Software without restriction, including without limitation the rights
  19329. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  19330. // copies of the Software, and to permit persons to whom the Software is
  19331. // furnished to do so, subject to the following conditions:
  19332. //
  19333. // The above copyright notice and this permission notice shall be included in
  19334. // all copies or substantial portions of the Software.
  19335. //
  19336. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19337. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19338. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19339. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19340. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19341. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19342. // THE SOFTWARE.
  19343. /* global window */
  19344. var renderCount = 0;
  19345. // TODO - Exported for pick-layers.js - Move to util?
  19346. var getPixelRatio = exports.getPixelRatio = function getPixelRatio(_ref) {
  19347. var useDevicePixels = _ref.useDevicePixels;
  19348. (0, _assert2.default)(typeof useDevicePixels === 'boolean', 'Invalid useDevicePixels');
  19349. return useDevicePixels && typeof window !== 'undefined' ? window.devicePixelRatio : 1;
  19350. };
  19351. // Convert viewport top-left CSS coordinates to bottom up WebGL coordinates
  19352. var getGLViewport = function getGLViewport(gl, _ref2) {
  19353. var viewport = _ref2.viewport,
  19354. pixelRatio = _ref2.pixelRatio;
  19355. // TODO - dummy default for node
  19356. var height = gl.canvas ? gl.canvas.clientHeight : 100;
  19357. // Convert viewport top-left CSS coordinates to bottom up WebGL coordinates
  19358. var dimensions = viewport;
  19359. return [dimensions.x * pixelRatio, (height - dimensions.y - dimensions.height) * pixelRatio, dimensions.width * pixelRatio, dimensions.height * pixelRatio];
  19360. };
  19361. // Helper functions
  19362. function clearCanvas(gl, _ref3) {
  19363. var useDevicePixels = _ref3.useDevicePixels;
  19364. // const pixelRatio = getPixelRatio({useDevicePixels});
  19365. var width = gl.drawingBufferWidth;
  19366. var height = gl.drawingBufferHeight;
  19367. // clear depth and color buffers, restoring transparency
  19368. (0, _luma.withParameters)(gl, { viewport: [0, 0, width, height] }, function () {
  19369. gl.clear(_luma.GL.COLOR_BUFFER_BIT | _luma.GL.DEPTH_BUFFER_BIT);
  19370. });
  19371. }
  19372. // Draw a list of layers in a list of viewports
  19373. function drawLayers(gl, _ref4) {
  19374. var layers = _ref4.layers,
  19375. viewports = _ref4.viewports,
  19376. onViewportActive = _ref4.onViewportActive,
  19377. useDevicePixels = _ref4.useDevicePixels,
  19378. _ref4$drawPickingColo = _ref4.drawPickingColors,
  19379. drawPickingColors = _ref4$drawPickingColo === undefined ? false : _ref4$drawPickingColo,
  19380. _ref4$deviceRect = _ref4.deviceRect,
  19381. deviceRect = _ref4$deviceRect === undefined ? null : _ref4$deviceRect,
  19382. _ref4$parameters = _ref4.parameters,
  19383. parameters = _ref4$parameters === undefined ? {} : _ref4$parameters,
  19384. _ref4$layerFilter = _ref4.layerFilter,
  19385. layerFilter = _ref4$layerFilter === undefined ? null : _ref4$layerFilter,
  19386. _ref4$pass = _ref4.pass,
  19387. pass = _ref4$pass === undefined ? 'draw' : _ref4$pass,
  19388. _ref4$redrawReason = _ref4.redrawReason,
  19389. redrawReason = _ref4$redrawReason === undefined ? '' : _ref4$redrawReason;
  19390. clearCanvas(gl, { useDevicePixels: useDevicePixels });
  19391. // effectManager.preDraw();
  19392. viewports.forEach(function (viewportOrDescriptor, i) {
  19393. var viewport = getViewportFromDescriptor(viewportOrDescriptor);
  19394. // Update context to point to this viewport
  19395. onViewportActive(viewport);
  19396. // render this viewport
  19397. drawLayersInViewport(gl, {
  19398. layers: layers,
  19399. viewport: viewport,
  19400. useDevicePixels: useDevicePixels,
  19401. drawPickingColors: drawPickingColors,
  19402. deviceRect: deviceRect,
  19403. parameters: parameters,
  19404. layerFilter: layerFilter,
  19405. pass: pass,
  19406. redrawReason: redrawReason
  19407. });
  19408. });
  19409. // effectManager.draw();
  19410. }
  19411. // Draws list of layers and viewports into the picking buffer
  19412. // Note: does not sample the buffer, that has to be done by the caller
  19413. function drawPickingBuffer(gl, _ref5) {
  19414. var layers = _ref5.layers,
  19415. viewports = _ref5.viewports,
  19416. onViewportActive = _ref5.onViewportActive,
  19417. useDevicePixels = _ref5.useDevicePixels,
  19418. pickingFBO = _ref5.pickingFBO,
  19419. _ref5$deviceRect = _ref5.deviceRect,
  19420. x = _ref5$deviceRect.x,
  19421. y = _ref5$deviceRect.y,
  19422. width = _ref5$deviceRect.width,
  19423. height = _ref5$deviceRect.height,
  19424. _ref5$layerFilter = _ref5.layerFilter,
  19425. layerFilter = _ref5$layerFilter === undefined ? null : _ref5$layerFilter,
  19426. _ref5$redrawReason = _ref5.redrawReason,
  19427. redrawReason = _ref5$redrawReason === undefined ? '' : _ref5$redrawReason;
  19428. // Make sure we clear scissor test and fbo bindings in case of exceptions
  19429. // We are only interested in one pixel, no need to render anything else
  19430. // Note that the callback here is called synchronously.
  19431. // Set blend mode for picking
  19432. // always overwrite existing pixel with [r,g,b,layerIndex]
  19433. return (0, _luma.withParameters)(gl, {
  19434. framebuffer: pickingFBO,
  19435. scissorTest: true,
  19436. scissor: [x, y, width, height],
  19437. clearColor: [0, 0, 0, 0]
  19438. }, function () {
  19439. drawLayers(gl, {
  19440. layers: layers,
  19441. viewports: viewports,
  19442. onViewportActive: onViewportActive,
  19443. useDevicePixels: useDevicePixels,
  19444. drawPickingColors: true,
  19445. layerFilter: layerFilter,
  19446. pass: 'picking',
  19447. redrawReason: redrawReason,
  19448. parameters: {
  19449. blend: true,
  19450. blendFunc: [gl.ONE, gl.ZERO, gl.CONSTANT_ALPHA, gl.ZERO],
  19451. blendEquation: gl.FUNC_ADD,
  19452. blendColor: [0, 0, 0, 0]
  19453. }
  19454. });
  19455. });
  19456. }
  19457. // Draws a list of layers in one viewport
  19458. // TODO - when picking we could completely skip rendering viewports that dont
  19459. // intersect with the picking rect
  19460. function drawLayersInViewport(gl, _ref6) {
  19461. var layers = _ref6.layers,
  19462. viewport = _ref6.viewport,
  19463. useDevicePixels = _ref6.useDevicePixels,
  19464. _ref6$drawPickingColo = _ref6.drawPickingColors,
  19465. drawPickingColors = _ref6$drawPickingColo === undefined ? false : _ref6$drawPickingColo,
  19466. _ref6$deviceRect = _ref6.deviceRect,
  19467. deviceRect = _ref6$deviceRect === undefined ? null : _ref6$deviceRect,
  19468. _ref6$parameters = _ref6.parameters,
  19469. parameters = _ref6$parameters === undefined ? {} : _ref6$parameters,
  19470. layerFilter = _ref6.layerFilter,
  19471. _ref6$pass = _ref6.pass,
  19472. pass = _ref6$pass === undefined ? 'draw' : _ref6$pass,
  19473. _ref6$redrawReason = _ref6.redrawReason,
  19474. redrawReason = _ref6$redrawReason === undefined ? '' : _ref6$redrawReason;
  19475. var pixelRatio = getPixelRatio({ useDevicePixels: useDevicePixels });
  19476. var glViewport = getGLViewport(gl, { viewport: viewport, pixelRatio: pixelRatio });
  19477. // render layers in normal colors
  19478. var renderStats = {
  19479. totalCount: layers.length,
  19480. visibleCount: 0,
  19481. compositeCount: 0,
  19482. pickableCount: 0
  19483. };
  19484. // const {x, y, width, height} = deviceRect || [];
  19485. (0, _luma.setParameters)(gl, parameters || {});
  19486. // render layers in normal colors
  19487. layers.forEach(function (layer, layerIndex) {
  19488. // Check if we should draw layer
  19489. var shouldDrawLayer = layer.props.visible;
  19490. if (drawPickingColors) {
  19491. shouldDrawLayer = shouldDrawLayer && layer.props.pickable;
  19492. }
  19493. if (shouldDrawLayer && layerFilter) {
  19494. shouldDrawLayer = layerFilter({ layer: layer, viewport: viewport, isPicking: drawPickingColors });
  19495. }
  19496. // Calculate stats
  19497. if (shouldDrawLayer && layer.props.pickable) {
  19498. renderStats.pickableCount++;
  19499. }
  19500. if (layer.isComposite) {
  19501. renderStats.compositeCount++;
  19502. }
  19503. // Draw the layer
  19504. if (shouldDrawLayer) {
  19505. if (!layer.isComposite) {
  19506. renderStats.visibleCount++;
  19507. }
  19508. drawLayerInViewport({ gl: gl, layer: layer, layerIndex: layerIndex, drawPickingColors: drawPickingColors, glViewport: glViewport, parameters: parameters });
  19509. }
  19510. });
  19511. renderCount++;
  19512. logRenderStats({ renderStats: renderStats, pass: pass, redrawReason: redrawReason });
  19513. }
  19514. function drawLayerInViewport(_ref7) {
  19515. var gl = _ref7.gl,
  19516. layer = _ref7.layer,
  19517. layerIndex = _ref7.layerIndex,
  19518. drawPickingColors = _ref7.drawPickingColors,
  19519. glViewport = _ref7.glViewport,
  19520. parameters = _ref7.parameters;
  19521. var moduleParameters = Object.assign({}, layer.props, {
  19522. viewport: layer.context.viewport,
  19523. pickingActive: drawPickingColors ? 1 : 0
  19524. });
  19525. var uniforms = Object.assign({}, layer.context.uniforms, { layerIndex: layerIndex });
  19526. // All parameter resolving is done here instead of the layer
  19527. // Blend parameters must not be overriden
  19528. var layerParameters = Object.assign({}, layer.props.parameters || {}, parameters);
  19529. Object.assign(layerParameters, {
  19530. viewport: glViewport
  19531. });
  19532. if (drawPickingColors) {
  19533. Object.assign(layerParameters, {
  19534. blendColor: [0, 0, 0, (layerIndex + 1) / 255]
  19535. });
  19536. } else {
  19537. Object.assign(moduleParameters, getObjectHighlightParameters(layer));
  19538. }
  19539. layer.drawLayer({
  19540. moduleParameters: moduleParameters,
  19541. uniforms: uniforms,
  19542. parameters: layerParameters
  19543. });
  19544. }
  19545. function logRenderStats(_ref8) {
  19546. var renderStats = _ref8.renderStats,
  19547. pass = _ref8.pass,
  19548. redrawReason = _ref8.redrawReason;
  19549. if (_log2.default.priority >= LOG_PRIORITY_DRAW) {
  19550. var totalCount = renderStats.totalCount,
  19551. visibleCount = renderStats.visibleCount,
  19552. compositeCount = renderStats.compositeCount,
  19553. pickableCount = renderStats.pickableCount;
  19554. var primitiveCount = totalCount - compositeCount;
  19555. var hiddenCount = primitiveCount - visibleCount;
  19556. var message = '';
  19557. message += 'RENDER #' + renderCount + ' ' + visibleCount + ' (of ' + totalCount + ' layers) to ' + pass + ' because ' + redrawReason + ' ';
  19558. if (_log2.default.priority > LOG_PRIORITY_DRAW) {
  19559. message += '(' + hiddenCount + ' hidden, ' + compositeCount + ' composite ' + pickableCount + ' unpickable)';
  19560. }
  19561. _log2.default.log(LOG_PRIORITY_DRAW, message);
  19562. }
  19563. }
  19564. // Get a viewport from a viewport descriptor (which can be a plain viewport)
  19565. function getViewportFromDescriptor(viewportOrDescriptor) {
  19566. return viewportOrDescriptor.viewport ? viewportOrDescriptor.viewport : viewportOrDescriptor;
  19567. }
  19568. /**
  19569. * Returns the picking color of currenlty selected object of the given 'layer'.
  19570. * @return {Array} - the picking color or null if layers selected object is invalid.
  19571. */
  19572. function getObjectHighlightParameters(layer) {
  19573. // TODO - inefficient to update settings every render?
  19574. // TODO: Add warning if 'highlightedObjectIndex' is > numberOfInstances of the model.
  19575. // Update picking module settings if highlightedObjectIndex is set.
  19576. // This will overwrite any settings from auto highlighting.
  19577. if (Number.isInteger(layer.props.highlightedObjectIndex)) {
  19578. var pickingSelectedColor = layer.props.highlightedObjectIndex >= 0 ? layer.encodePickingColor(layer.props.highlightedObjectIndex) : null;
  19579. return {
  19580. pickingSelectedColor: pickingSelectedColor
  19581. };
  19582. }
  19583. return null;
  19584. }
  19585. /***/ }),
  19586. /* 184 */
  19587. /***/ (function(module, exports, __webpack_require__) {
  19588. "use strict";
  19589. Object.defineProperty(exports, "__esModule", {
  19590. value: true
  19591. });
  19592. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  19593. //
  19594. // Permission is hereby granted, free of charge, to any person obtaining a copy
  19595. // of this software and associated documentation files (the "Software"), to deal
  19596. // in the Software without restriction, including without limitation the rights
  19597. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  19598. // copies of the Software, and to permit persons to whom the Software is
  19599. // furnished to do so, subject to the following conditions:
  19600. //
  19601. // The above copyright notice and this permission notice shall be included in
  19602. // all copies or substantial portions of the Software.
  19603. //
  19604. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19605. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19606. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19607. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19608. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19609. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19610. // THE SOFTWARE.
  19611. // TODO - remove, just for dummy initialization
  19612. var _assert = __webpack_require__(1);
  19613. var _assert2 = _interopRequireDefault(_assert);
  19614. var _luma = __webpack_require__(12);
  19615. var _seer = __webpack_require__(173);
  19616. var _seer2 = _interopRequireDefault(_seer);
  19617. var _layer = __webpack_require__(123);
  19618. var _layer2 = _interopRequireDefault(_layer);
  19619. var _drawLayers2 = __webpack_require__(183);
  19620. var _pickLayers = __webpack_require__(339);
  19621. var _constants = __webpack_require__(70);
  19622. var _viewport = __webpack_require__(42);
  19623. var _viewport2 = _interopRequireDefault(_viewport);
  19624. var _webMercatorViewport = __webpack_require__(86);
  19625. var _webMercatorViewport2 = _interopRequireDefault(_webMercatorViewport);
  19626. var _log = __webpack_require__(17);
  19627. var _log2 = _interopRequireDefault(_log);
  19628. var _flatten = __webpack_require__(126);
  19629. var _seerIntegration = __webpack_require__(124);
  19630. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  19631. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  19632. var LOG_PRIORITY_LIFECYCLE = 2;
  19633. var LOG_PRIORITY_LIFECYCLE_MINOR = 4;
  19634. var initialContext = {
  19635. uniforms: {},
  19636. viewports: [],
  19637. viewport: null,
  19638. layerFilter: null,
  19639. viewportChanged: true,
  19640. pickingFBO: null,
  19641. useDevicePixels: true,
  19642. lastPickedInfo: {
  19643. index: -1,
  19644. layerId: null
  19645. }
  19646. };
  19647. var layerName = function layerName(layer) {
  19648. return layer instanceof _layer2.default ? '' + layer : !layer ? 'null' : 'invalid';
  19649. };
  19650. var LayerManager = function () {
  19651. // eslint-disable-next-line
  19652. function LayerManager(gl) {
  19653. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  19654. eventManager = _ref.eventManager,
  19655. //iclient
  19656. isGeographicCoordinateSystem=_ref.isGeographicCoordinateSystem;
  19657. _classCallCheck(this, LayerManager);
  19658. // Currently deck.gl expects the DeckGL.layers array to be different
  19659. // whenever React rerenders. If the same layers array is used, the
  19660. // LayerManager's diffing algorithm will generate a fatal error and
  19661. // break the rendering.
  19662. // `this.lastRenderedLayers` stores the UNFILTERED layers sent
  19663. // down to LayerManager, so that `layers` reference can be compared.
  19664. // If it's the same across two React render calls, the diffing logic
  19665. // will be skipped.
  19666. this.lastRenderedLayers = [];
  19667. this.prevLayers = [];
  19668. this.layers = [];
  19669. this.oldContext = {};
  19670. this.context = Object.assign({}, initialContext, {
  19671. gl: gl,
  19672. // Enabling luma.gl Program caching using private API (_cachePrograms)
  19673. shaderCache: new _luma.ShaderCache({ gl: gl, _cachePrograms: true })
  19674. });
  19675. // List of view descriptors, gets re-evaluated when width/height changes
  19676. this.width = 100;
  19677. this.height = 100;
  19678. this.viewDescriptors = [];
  19679. this.viewDescriptorsChanged = true;
  19680. this.viewports = []; // Generated viewports
  19681. this._needsRedraw = 'Initial render';
  19682. // Event handling
  19683. this._pickingRadius = 0;
  19684. this._eventManager = null;
  19685. this._onLayerClick = null;
  19686. this._onLayerHover = null;
  19687. this._onClick = this._onClick.bind(this);
  19688. this._onPointerMove = this._onPointerMove.bind(this);
  19689. this._onPointerLeave = this._onPointerLeave.bind(this);
  19690. this._pickAndCallback = this._pickAndCallback.bind(this);
  19691. // Seer integration
  19692. this._initSeer = this._initSeer.bind(this);
  19693. this._editSeer = this._editSeer.bind(this);
  19694. (0, _seerIntegration.seerInitListener)(this._initSeer);
  19695. (0, _seerIntegration.layerEditListener)(this._editSeer);
  19696. Object.seal(this);
  19697. if (eventManager) {
  19698. this._initEventHandling(eventManager);
  19699. }
  19700. // Init with dummy viewport
  19701. this.setViewports([new _webMercatorViewport2.default({ width: 1, height: 1, latitude: 0, longitude: 0, zoom: 1,isGeographicCoordinateSystem:isGeographicCoordinateSystem })]);
  19702. }
  19703. /**
  19704. * Method to call when the layer manager is not needed anymore.
  19705. *
  19706. * Currently used in the <DeckGL> componentWillUnmount lifecycle to unbind Seer listeners.
  19707. */
  19708. _createClass(LayerManager, [{
  19709. key: 'finalize',
  19710. value: function finalize() {
  19711. _seer2.default.removeListener(this._initSeer);
  19712. _seer2.default.removeListener(this._editSeer);
  19713. }
  19714. }, {
  19715. key: 'needsRedraw',
  19716. value: function needsRedraw() {
  19717. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  19718. _ref2$clearRedrawFlag = _ref2.clearRedrawFlags,
  19719. clearRedrawFlags = _ref2$clearRedrawFlag === undefined ? true : _ref2$clearRedrawFlag;
  19720. return this._checkIfNeedsRedraw(clearRedrawFlags);
  19721. }
  19722. // Normally not called by app
  19723. }, {
  19724. key: 'setNeedsRedraw',
  19725. value: function setNeedsRedraw(reason) {
  19726. this._needsRedraw = this._needsRedraw || reason;
  19727. }
  19728. // Gets an (optionally) filtered list of layers
  19729. }, {
  19730. key: 'getLayers',
  19731. value: function getLayers() {
  19732. var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  19733. _ref3$layerIds = _ref3.layerIds,
  19734. layerIds = _ref3$layerIds === undefined ? null : _ref3$layerIds;
  19735. // Filtering by layerId compares beginning of strings, so that sublayers will be included
  19736. // Dependes on the convention of adding suffixes to the parent's layer name
  19737. return layerIds ? this.layers.filter(function (layer) {
  19738. return layerIds.find(function (layerId) {
  19739. return layer.id.indexOf(layerId) === 0;
  19740. });
  19741. }) : this.layers;
  19742. }
  19743. // Get a set of viewports for a given width and height
  19744. // TODO - Intention is for deck.gl to autodeduce width and height and drop the need for props
  19745. }, {
  19746. key: 'getViewports',
  19747. value: function getViewports() {
  19748. var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  19749. width = _ref4.width,
  19750. height = _ref4.height;
  19751. if (width !== this.width || height !== this.height || this.viewDescriptorsChanged) {
  19752. this._rebuildViewportsFromViews({ viewDescriptors: this.viewDescriptors, width: width, height: height });
  19753. this.width = width;
  19754. this.height = height;
  19755. }
  19756. return this.viewports;
  19757. }
  19758. /**
  19759. * Set parameters needed for layer rendering and picking.
  19760. * Parameters are to be passed as a single object, with the following values:
  19761. * @param {Boolean} useDevicePixels
  19762. */
  19763. }, {
  19764. key: 'setParameters',
  19765. value: function setParameters(parameters) {
  19766. if ('eventManager' in parameters) {
  19767. this._initEventHandling(parameters.eventManager);
  19768. }
  19769. if ('pickingRadius' in parameters || 'onLayerClick' in parameters || 'onLayerHover' in parameters) {
  19770. this._setEventHandlingParameters(parameters);
  19771. }
  19772. // TODO - For now we set layers before viewports to preservenchangeFlags
  19773. if ('layers' in parameters) {
  19774. this.setLayers(parameters.layers);
  19775. }
  19776. if ('viewports' in parameters) {
  19777. this.setViewports(parameters.viewports);
  19778. }
  19779. if ('layerFilter' in parameters) {
  19780. this.context.layerFilter = parameters.layerFilter;
  19781. if (this.context.layerFilter !== parameters.layerFilter) {
  19782. this.setNeedsRedraw('layerFilter changed');
  19783. }
  19784. }
  19785. if ('drawPickingColors' in parameters) {
  19786. if (this.context.drawPickingColors !== parameters.drawPickingColors) {
  19787. this.setNeedsRedraw('drawPickingColors changed');
  19788. }
  19789. }
  19790. Object.assign(this.context, parameters);
  19791. }
  19792. // Update the view descriptor list and set change flag if needed
  19793. }, {
  19794. key: 'setViewports',
  19795. value: function setViewports(viewports) {
  19796. // Ensure viewports are wrapped in descriptors
  19797. var viewDescriptors = (0, _flatten.flatten)(viewports, { filter: Boolean }).map(function (viewport) {
  19798. return viewport instanceof _viewport2.default ? { viewport: viewport } : viewport;
  19799. });
  19800. this.viewDescriptorsChanged = this.viewDescriptorsChanged || this._diffViews(viewDescriptors, this.viewDescriptors);
  19801. // Try to not actually rebuild the viewports until `getViewports` is called
  19802. if (this.viewDescriptorsChanged) {
  19803. this.viewDescriptors = viewDescriptors;
  19804. this._rebuildViewportsFromViews({ viewDescriptors: this.viewDescriptors });
  19805. this.viewDescriptorsChanged = false;
  19806. }
  19807. }
  19808. // Supply a new layer list, initiating sublayer generation and layer matching
  19809. }, {
  19810. key: 'setLayers',
  19811. value: function setLayers(newLayers) {
  19812. (0, _assert2.default)(this.context.viewport, 'LayerManager.updateLayers: viewport not set');
  19813. // TODO - something is generating state updates that cause rerender of the same
  19814. if (newLayers === this.lastRenderedLayers) {
  19815. _log2.default.log(3, 'Ignoring layer update due to layer array not changed');
  19816. return this;
  19817. }
  19818. this.lastRenderedLayers = newLayers;
  19819. newLayers = (0, _flatten.flatten)(newLayers, { filter: Boolean });
  19820. var _iteratorNormalCompletion = true;
  19821. var _didIteratorError = false;
  19822. var _iteratorError = undefined;
  19823. try {
  19824. for (var _iterator = newLayers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  19825. var layer = _step.value;
  19826. layer.context = this.context;
  19827. }
  19828. } catch (err) {
  19829. _didIteratorError = true;
  19830. _iteratorError = err;
  19831. } finally {
  19832. try {
  19833. if (!_iteratorNormalCompletion && _iterator.return) {
  19834. _iterator.return();
  19835. }
  19836. } finally {
  19837. if (_didIteratorError) {
  19838. throw _iteratorError;
  19839. }
  19840. }
  19841. }
  19842. this.prevLayers = this.layers;
  19843. var _updateLayers2 = this._updateLayers({
  19844. oldLayers: this.prevLayers,
  19845. newLayers: newLayers
  19846. }),
  19847. error = _updateLayers2.error,
  19848. generatedLayers = _updateLayers2.generatedLayers;
  19849. this.layers = generatedLayers;
  19850. // Throw first error found, if any
  19851. if (error) {
  19852. throw error;
  19853. }
  19854. return this;
  19855. }
  19856. }, {
  19857. key: 'drawLayers',
  19858. value: function drawLayers() {
  19859. var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  19860. _ref5$pass = _ref5.pass,
  19861. pass = _ref5$pass === undefined ? 'render to screen' : _ref5$pass,
  19862. _ref5$redrawReason = _ref5.redrawReason,
  19863. redrawReason = _ref5$redrawReason === undefined ? 'unknown reason' : _ref5$redrawReason;
  19864. var _context = this.context,
  19865. gl = _context.gl,
  19866. useDevicePixels = _context.useDevicePixels,
  19867. drawPickingColors = _context.drawPickingColors;
  19868. // render this viewport
  19869. (0, _drawLayers2.drawLayers)(gl, {
  19870. layers: this.layers,
  19871. viewports: this.getViewports(),
  19872. onViewportActive: this._activateViewport.bind(this),
  19873. useDevicePixels: useDevicePixels,
  19874. drawPickingColors: drawPickingColors,
  19875. pass: pass,
  19876. layerFilter: this.context.layerFilter,
  19877. redrawReason: redrawReason
  19878. });
  19879. }
  19880. // Pick the closest info at given coordinate
  19881. }, {
  19882. key: 'pickObject',
  19883. value: function pickObject(_ref6) {
  19884. var x = _ref6.x,
  19885. y = _ref6.y,
  19886. mode = _ref6.mode,
  19887. _ref6$radius = _ref6.radius,
  19888. radius = _ref6$radius === undefined ? 0 : _ref6$radius,
  19889. layerIds = _ref6.layerIds,
  19890. layerFilter = _ref6.layerFilter;
  19891. var _context2 = this.context,
  19892. gl = _context2.gl,
  19893. useDevicePixels = _context2.useDevicePixels;
  19894. var layers = this.getLayers({ layerIds: layerIds });
  19895. return (0, _pickLayers.pickObject)(gl, {
  19896. // User params
  19897. x: x,
  19898. y: y,
  19899. radius: radius,
  19900. layers: layers,
  19901. mode: mode,
  19902. layerFilter: layerFilter,
  19903. // Injected params
  19904. viewports: this.getViewports(),
  19905. onViewportActive: this._activateViewport.bind(this),
  19906. pickingFBO: this._getPickingBuffer(),
  19907. lastPickedInfo: this.context.lastPickedInfo,
  19908. useDevicePixels: useDevicePixels
  19909. });
  19910. }
  19911. // Get all unique infos within a bounding box
  19912. }, {
  19913. key: 'pickObjects',
  19914. value: function pickObjects(_ref7) {
  19915. var x = _ref7.x,
  19916. y = _ref7.y,
  19917. width = _ref7.width,
  19918. height = _ref7.height,
  19919. layerIds = _ref7.layerIds,
  19920. layerFilter = _ref7.layerFilter;
  19921. var _context3 = this.context,
  19922. gl = _context3.gl,
  19923. useDevicePixels = _context3.useDevicePixels;
  19924. var layers = this.getLayers({ layerIds: layerIds });
  19925. return (0, _pickLayers.pickVisibleObjects)(gl, {
  19926. x: x,
  19927. y: y,
  19928. width: width,
  19929. height: height,
  19930. layers: layers,
  19931. layerFilter: layerFilter,
  19932. mode: 'pickObjects',
  19933. // TODO - how does this interact with multiple viewports?
  19934. viewport: this.context.viewport,
  19935. viewports: this.getViewports(),
  19936. onViewportActive: this._activateViewport.bind(this),
  19937. pickingFBO: this._getPickingBuffer(),
  19938. useDevicePixels: useDevicePixels
  19939. });
  19940. }
  19941. //
  19942. // DEPRECATED METHODS in V5
  19943. //
  19944. }, {
  19945. key: 'updateLayers',
  19946. value: function updateLayers(_ref8) {
  19947. var newLayers = _ref8.newLayers;
  19948. _log2.default.deprecated('updateLayers', 'setLayers');
  19949. this.setLayers(newLayers);
  19950. }
  19951. }, {
  19952. key: 'setViewport',
  19953. value: function setViewport(viewport) {
  19954. _log2.default.deprecated('setViewport', 'setViewports');
  19955. this.setViewports([viewport]);
  19956. return this;
  19957. }
  19958. //
  19959. // PRIVATE METHODS
  19960. //
  19961. }, {
  19962. key: '_checkIfNeedsRedraw',
  19963. value: function _checkIfNeedsRedraw(clearRedrawFlags) {
  19964. var redraw = this._needsRedraw;
  19965. if (clearRedrawFlags) {
  19966. this._needsRedraw = false;
  19967. }
  19968. // This layers list doesn't include sublayers, relying on composite layers
  19969. var _iteratorNormalCompletion2 = true;
  19970. var _didIteratorError2 = false;
  19971. var _iteratorError2 = undefined;
  19972. try {
  19973. for (var _iterator2 = this.layers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  19974. var layer = _step2.value;
  19975. // Call every layer to clear their flags
  19976. var layerNeedsRedraw = layer.getNeedsRedraw({ clearRedrawFlags: clearRedrawFlags });
  19977. redraw = redraw || layerNeedsRedraw;
  19978. }
  19979. } catch (err) {
  19980. _didIteratorError2 = true;
  19981. _iteratorError2 = err;
  19982. } finally {
  19983. try {
  19984. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  19985. _iterator2.return();
  19986. }
  19987. } finally {
  19988. if (_didIteratorError2) {
  19989. throw _iteratorError2;
  19990. }
  19991. }
  19992. }
  19993. return redraw;
  19994. }
  19995. // Rebuilds viewports from descriptors towards a certain window size
  19996. }, {
  19997. key: '_rebuildViewportsFromViews',
  19998. value: function _rebuildViewportsFromViews(_ref9) {
  19999. var _this = this;
  20000. var viewDescriptors = _ref9.viewDescriptors,
  20001. width = _ref9.width,
  20002. height = _ref9.height;
  20003. var newViewports = viewDescriptors.map(function (viewDescriptor) {
  20004. return (
  20005. // If a `Viewport` instance was supplied, use it, otherwise build it
  20006. viewDescriptor.viewport instanceof _viewport2.default ? viewDescriptor.viewport : _this._makeViewportFromViewDescriptor({ viewDescriptor: viewDescriptor, width: width, height: height })
  20007. );
  20008. });
  20009. this.setNeedsRedraw('Viewport(s) changed');
  20010. // Ensure one viewport is activated, layers may expect it
  20011. // TODO - handle empty viewport list (using dummy viewport), or assert
  20012. // const oldViewports = this.context.viewports;
  20013. // if (viewportsChanged) {
  20014. var viewport = newViewports[0];
  20015. (0, _assert2.default)(viewport instanceof _viewport2.default, 'Invalid viewport');
  20016. this.context.viewports = newViewports;
  20017. this._activateViewport(viewport);
  20018. // }
  20019. // We've just rebuilt the viewports to match the descriptors, so clear the flag
  20020. this.viewports = newViewports;
  20021. this.viewDescriptorsChanged = false;
  20022. }
  20023. // Build a `Viewport` from a view descriptor
  20024. // TODO - add support for autosizing viewports using width and height
  20025. }, {
  20026. key: '_makeViewportFromViewDescriptor',
  20027. value: function _makeViewportFromViewDescriptor(_ref10) {
  20028. var viewDescriptor = _ref10.viewDescriptor,
  20029. width = _ref10.width,
  20030. height = _ref10.height;
  20031. // Get the type of the viewport
  20032. // TODO - default to WebMercator?
  20033. var ViewportType = viewDescriptor.type,
  20034. viewState = viewDescriptor.viewState;
  20035. // Resolve relative viewport dimensions
  20036. // TODO - we need to have width and height available
  20037. var viewportDimensions = this._getViewDimensions({ viewDescriptor: viewDescriptor });
  20038. // Create the viewport, giving preference to view state in `viewState`
  20039. return new ViewportType(Object.assign({}, viewDescriptor, viewportDimensions, viewState // Object.assign handles undefined
  20040. ));
  20041. }
  20042. // Check if viewport array has changed, returns true if any change
  20043. // Note that descriptors can be the same
  20044. }, {
  20045. key: '_diffViews',
  20046. value: function _diffViews(newViews, oldViews) {
  20047. var _this2 = this;
  20048. if (newViews.length !== oldViews.length) {
  20049. return true;
  20050. }
  20051. return newViews.some(function (_, i) {
  20052. return _this2._diffView(newViews[i], oldViews[i]);
  20053. });
  20054. }
  20055. }, {
  20056. key: '_diffView',
  20057. value: function _diffView(newView, oldView) {
  20058. // `View` hiearchy supports an `equals` method
  20059. if (newView.viewport) {
  20060. return !oldView.viewport || !newView.viewport.equals(oldView.viewport);
  20061. }
  20062. // TODO - implement deep equal on view descriptors
  20063. return newView !== oldView;
  20064. }
  20065. // Support for relative viewport dimensions (e.g {y: '50%', height: '50%'})
  20066. }, {
  20067. key: '_getViewDimensions',
  20068. value: function _getViewDimensions(_ref11) {
  20069. var viewDescriptor = _ref11.viewDescriptor,
  20070. width = _ref11.width,
  20071. height = _ref11.height;
  20072. var parsePercent = function parsePercent(value, max) {
  20073. return value;
  20074. };
  20075. // TODO - enable to support percent size specifiers
  20076. // const parsePercent = (value, max) => value ?
  20077. // Math.round(parseFloat(value) / 100 * max) :
  20078. // (value === null ? max : value);
  20079. return {
  20080. x: parsePercent(viewDescriptor.x, width),
  20081. y: parsePercent(viewDescriptor.y, height),
  20082. width: parsePercent(viewDescriptor.width, width),
  20083. height: parsePercent(viewDescriptor.height, height)
  20084. };
  20085. }
  20086. /**
  20087. * @param {Object} eventManager A source of DOM input events
  20088. */
  20089. }, {
  20090. key: '_initEventHandling',
  20091. value: function _initEventHandling(eventManager) {
  20092. this._eventManager = eventManager;
  20093. // TODO: add/remove handlers on demand at runtime, not all at once on init.
  20094. // Consider both top-level handlers like onLayerClick/Hover
  20095. // and per-layer handlers attached to individual layers.
  20096. // https://github.com/uber/deck.gl/issues/634
  20097. this._eventManager.on({
  20098. click: this._onClick,
  20099. pointermove: this._onPointerMove,
  20100. pointerleave: this._onPointerLeave
  20101. });
  20102. }
  20103. // Set parameters for input event handling.
  20104. }, {
  20105. key: '_setEventHandlingParameters',
  20106. value: function _setEventHandlingParameters(_ref12) {
  20107. var pickingRadius = _ref12.pickingRadius,
  20108. onLayerClick = _ref12.onLayerClick,
  20109. onLayerHover = _ref12.onLayerHover;
  20110. if (!isNaN(pickingRadius)) {
  20111. this._pickingRadius = pickingRadius;
  20112. }
  20113. if (typeof onLayerClick !== 'undefined') {
  20114. this._onLayerClick = onLayerClick;
  20115. }
  20116. if (typeof onLayerHover !== 'undefined') {
  20117. this._onLayerHover = onLayerHover;
  20118. }
  20119. this._validateEventHandling();
  20120. }
  20121. // Make a viewport "current" in layer context, primed for draw
  20122. }, {
  20123. key: '_activateViewport',
  20124. value: function _activateViewport(viewport) {
  20125. // TODO - viewport change detection breaks METER_OFFSETS mode
  20126. // const oldViewport = this.context.viewport;
  20127. // const viewportChanged = !oldViewport || !viewport.equals(oldViewport);
  20128. var viewportChanged = true;
  20129. if (viewportChanged) {
  20130. Object.assign(this.oldContext, this.context);
  20131. this.context.viewport = viewport;
  20132. this.context.viewportChanged = true;
  20133. this.context.uniforms = {};
  20134. (0, _log2.default)(4, viewport);
  20135. // Update layers states
  20136. // Let screen space layers update their state based on viewport
  20137. // TODO - reimplement viewport change detection (single viewport optimization)
  20138. // TODO - don't set viewportChanged during setViewports?
  20139. if (this.context.viewportChanged) {
  20140. var _iteratorNormalCompletion3 = true;
  20141. var _didIteratorError3 = false;
  20142. var _iteratorError3 = undefined;
  20143. try {
  20144. for (var _iterator3 = this.layers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  20145. var layer = _step3.value;
  20146. layer.setChangeFlags({ viewportChanged: 'Viewport changed' });
  20147. this._updateLayer(layer);
  20148. }
  20149. } catch (err) {
  20150. _didIteratorError3 = true;
  20151. _iteratorError3 = err;
  20152. } finally {
  20153. try {
  20154. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  20155. _iterator3.return();
  20156. }
  20157. } finally {
  20158. if (_didIteratorError3) {
  20159. throw _iteratorError3;
  20160. }
  20161. }
  20162. }
  20163. }
  20164. }
  20165. (0, _assert2.default)(this.context.viewport, 'LayerManager: viewport not set');
  20166. return this;
  20167. }
  20168. }, {
  20169. key: '_getPickingBuffer',
  20170. value: function _getPickingBuffer() {
  20171. var gl = this.context.gl;
  20172. // Create a frame buffer if not already available
  20173. this.context.pickingFBO = this.context.pickingFBO || new _luma.Framebuffer(gl);
  20174. // Resize it to current canvas size (this is a noop if size hasn't changed)
  20175. this.context.pickingFBO.resize({ width: gl.canvas.width, height: gl.canvas.height });
  20176. return this.context.pickingFBO;
  20177. }
  20178. // Match all layers, checking for caught errors
  20179. // To avoid having an exception in one layer disrupt other layers
  20180. // TODO - mark layers with exceptions as bad and remove from rendering cycle?
  20181. }, {
  20182. key: '_updateLayers',
  20183. value: function _updateLayers(_ref13) {
  20184. var oldLayers = _ref13.oldLayers,
  20185. newLayers = _ref13.newLayers;
  20186. // Create old layer map
  20187. var oldLayerMap = {};
  20188. var _iteratorNormalCompletion4 = true;
  20189. var _didIteratorError4 = false;
  20190. var _iteratorError4 = undefined;
  20191. try {
  20192. for (var _iterator4 = oldLayers[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
  20193. var oldLayer = _step4.value;
  20194. if (oldLayerMap[oldLayer.id]) {
  20195. _log2.default.warn('Multiple old layers with same id ' + layerName(oldLayer));
  20196. } else {
  20197. oldLayerMap[oldLayer.id] = oldLayer;
  20198. }
  20199. }
  20200. // Allocate array for generated layers
  20201. } catch (err) {
  20202. _didIteratorError4 = true;
  20203. _iteratorError4 = err;
  20204. } finally {
  20205. try {
  20206. if (!_iteratorNormalCompletion4 && _iterator4.return) {
  20207. _iterator4.return();
  20208. }
  20209. } finally {
  20210. if (_didIteratorError4) {
  20211. throw _iteratorError4;
  20212. }
  20213. }
  20214. }
  20215. var generatedLayers = [];
  20216. // Match sublayers
  20217. var error = this._updateSublayersRecursively({
  20218. newLayers: newLayers,
  20219. oldLayerMap: oldLayerMap,
  20220. generatedLayers: generatedLayers
  20221. });
  20222. // Finalize unmatched layers
  20223. var error2 = this._finalizeOldLayers(oldLayerMap);
  20224. var firstError = error || error2;
  20225. return { error: firstError, generatedLayers: generatedLayers };
  20226. }
  20227. // Note: adds generated layers to `generatedLayers` array parameter
  20228. }, {
  20229. key: '_updateSublayersRecursively',
  20230. value: function _updateSublayersRecursively(_ref14) {
  20231. var newLayers = _ref14.newLayers,
  20232. oldLayerMap = _ref14.oldLayerMap,
  20233. generatedLayers = _ref14.generatedLayers;
  20234. var error = null;
  20235. var _iteratorNormalCompletion5 = true;
  20236. var _didIteratorError5 = false;
  20237. var _iteratorError5 = undefined;
  20238. try {
  20239. for (var _iterator5 = newLayers[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
  20240. var newLayer = _step5.value;
  20241. newLayer.context = this.context;
  20242. // Given a new coming layer, find its matching old layer (if any)
  20243. var oldLayer = oldLayerMap[newLayer.id];
  20244. if (oldLayer === null) {
  20245. // null, rather than undefined, means this id was originally there
  20246. _log2.default.warn('Multiple new layers with same id ' + layerName(newLayer));
  20247. }
  20248. // Remove the old layer from candidates, as it has been matched with this layer
  20249. oldLayerMap[newLayer.id] = null;
  20250. var sublayers = null;
  20251. // We must not generate exceptions until after layer matching is complete
  20252. try {
  20253. if (!oldLayer) {
  20254. this._initializeLayer(newLayer);
  20255. (0, _seerIntegration.initLayerInSeer)(newLayer); // Initializes layer in seer chrome extension (if connected)
  20256. } else {
  20257. this._transferLayerState(oldLayer, newLayer);
  20258. this._updateLayer(newLayer);
  20259. (0, _seerIntegration.updateLayerInSeer)(newLayer); // Updates layer in seer chrome extension (if connected)
  20260. }
  20261. generatedLayers.push(newLayer);
  20262. // Call layer lifecycle method: render sublayers
  20263. sublayers = newLayer.isComposite && newLayer.getSubLayers();
  20264. // End layer lifecycle method: render sublayers
  20265. } catch (err) {
  20266. _log2.default.warn('error during matching of ' + layerName(newLayer), err);
  20267. error = error || err; // Record first exception
  20268. }
  20269. if (sublayers) {
  20270. this._updateSublayersRecursively({
  20271. newLayers: sublayers,
  20272. oldLayerMap: oldLayerMap,
  20273. generatedLayers: generatedLayers
  20274. });
  20275. }
  20276. }
  20277. } catch (err) {
  20278. _didIteratorError5 = true;
  20279. _iteratorError5 = err;
  20280. } finally {
  20281. try {
  20282. if (!_iteratorNormalCompletion5 && _iterator5.return) {
  20283. _iterator5.return();
  20284. }
  20285. } finally {
  20286. if (_didIteratorError5) {
  20287. throw _iteratorError5;
  20288. }
  20289. }
  20290. }
  20291. return error;
  20292. }
  20293. // Finalize any old layers that were not matched
  20294. }, {
  20295. key: '_finalizeOldLayers',
  20296. value: function _finalizeOldLayers(oldLayerMap) {
  20297. var error = null;
  20298. for (var layerId in oldLayerMap) {
  20299. var layer = oldLayerMap[layerId];
  20300. if (layer) {
  20301. error = error || this._finalizeLayer(layer);
  20302. }
  20303. }
  20304. return error;
  20305. }
  20306. // Initializes a single layer, calling layer methods
  20307. }, {
  20308. key: '_initializeLayer',
  20309. value: function _initializeLayer(layer) {
  20310. (0, _assert2.default)(!layer.state);
  20311. (0, _log2.default)(LOG_PRIORITY_LIFECYCLE, 'initializing ' + layerName(layer));
  20312. var error = null;
  20313. try {
  20314. layer._initialize();
  20315. layer.lifecycle = _constants.LIFECYCLE.INITIALIZED;
  20316. } catch (err) {
  20317. _log2.default.warn('error while initializing ' + layerName(layer) + '\n', err);
  20318. error = error || err;
  20319. // TODO - what should the lifecycle state be here? LIFECYCLE.INITIALIZATION_FAILED?
  20320. }
  20321. (0, _assert2.default)(layer.state);
  20322. // Set back pointer (used in picking)
  20323. layer.state.layer = layer;
  20324. // Save layer on model for picking purposes
  20325. // store on model.userData rather than directly on model
  20326. var _iteratorNormalCompletion6 = true;
  20327. var _didIteratorError6 = false;
  20328. var _iteratorError6 = undefined;
  20329. try {
  20330. for (var _iterator6 = layer.getModels()[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
  20331. var model = _step6.value;
  20332. model.userData.layer = layer;
  20333. }
  20334. } catch (err) {
  20335. _didIteratorError6 = true;
  20336. _iteratorError6 = err;
  20337. } finally {
  20338. try {
  20339. if (!_iteratorNormalCompletion6 && _iterator6.return) {
  20340. _iterator6.return();
  20341. }
  20342. } finally {
  20343. if (_didIteratorError6) {
  20344. throw _iteratorError6;
  20345. }
  20346. }
  20347. }
  20348. return error;
  20349. }
  20350. }, {
  20351. key: '_transferLayerState',
  20352. value: function _transferLayerState(oldLayer, newLayer) {
  20353. if (newLayer !== oldLayer) {
  20354. (0, _log2.default)(LOG_PRIORITY_LIFECYCLE_MINOR, 'matched ' + layerName(newLayer), oldLayer, '->', newLayer);
  20355. newLayer.lifecycle = _constants.LIFECYCLE.MATCHED;
  20356. oldLayer.lifecycle = _constants.LIFECYCLE.AWAITING_GC;
  20357. newLayer._transferState(oldLayer);
  20358. } else {
  20359. _log2.default.log(LOG_PRIORITY_LIFECYCLE_MINOR, 'Matching layer is unchanged ' + newLayer.id);
  20360. newLayer.lifecycle = _constants.LIFECYCLE.MATCHED;
  20361. newLayer.oldProps = newLayer.props;
  20362. }
  20363. }
  20364. // Updates a single layer, cleaning all flags
  20365. }, {
  20366. key: '_updateLayer',
  20367. value: function _updateLayer(layer) {
  20368. _log2.default.log(LOG_PRIORITY_LIFECYCLE_MINOR, 'updating ' + layer + ' because: ' + layer.printChangeFlags());
  20369. var error = null;
  20370. try {
  20371. layer._update();
  20372. } catch (err) {
  20373. _log2.default.warn('error during update of ' + layerName(layer), err);
  20374. // Save first error
  20375. error = err;
  20376. }
  20377. return error;
  20378. }
  20379. // Finalizes a single layer
  20380. }, {
  20381. key: '_finalizeLayer',
  20382. value: function _finalizeLayer(layer) {
  20383. (0, _assert2.default)(layer.state);
  20384. (0, _assert2.default)(layer.lifecycle !== _constants.LIFECYCLE.AWAITING_FINALIZATION);
  20385. layer.lifecycle = _constants.LIFECYCLE.AWAITING_FINALIZATION;
  20386. var error = null;
  20387. this.setNeedsRedraw('finalized ' + layerName(layer));
  20388. try {
  20389. layer._finalize();
  20390. } catch (err) {
  20391. _log2.default.warn('error during finalization of ' + layerName(layer), err);
  20392. error = err;
  20393. }
  20394. layer.lifecycle = _constants.LIFECYCLE.FINALIZED;
  20395. (0, _log2.default)(LOG_PRIORITY_LIFECYCLE, 'finalizing ' + layerName(layer));
  20396. return error;
  20397. }
  20398. /**
  20399. * Warn if a deck-level mouse event has been specified,
  20400. * but no layers are `pickable`.
  20401. */
  20402. }, {
  20403. key: '_validateEventHandling',
  20404. value: function _validateEventHandling() {
  20405. if (this.onLayerClick || this.onLayerHover) {
  20406. if (this.layers.length && !this.layers.some(function (layer) {
  20407. return layer.props.pickable;
  20408. })) {
  20409. _log2.default.warn('You have supplied a top-level input event handler (e.g. `onLayerClick`), ' + 'but none of your layers have set the `pickable` flag.');
  20410. }
  20411. }
  20412. }
  20413. /**
  20414. * Route click events to layers.
  20415. * `pickLayer` will call the `onClick` prop of any picked layer,
  20416. * and `onLayerClick` is called directly from here
  20417. * with any picking info generated by `pickLayer`.
  20418. * @param {Object} event An object encapsulating an input event,
  20419. * with the following shape:
  20420. * {Object: {x, y}} offsetCenter: center of the event
  20421. * {Object} srcEvent: native JS Event object
  20422. */
  20423. }, {
  20424. key: '_onClick',
  20425. value: function _onClick(event) {
  20426. if (!event.offsetCenter) {
  20427. // Do not trigger onHover callbacks when click position is invalid.
  20428. return;
  20429. }
  20430. this._pickAndCallback({
  20431. callback: this._onLayerClick,
  20432. event: event,
  20433. mode: 'click'
  20434. });
  20435. }
  20436. /**
  20437. * Route click events to layers.
  20438. * `pickLayer` will call the `onHover` prop of any picked layer,
  20439. * and `onLayerHover` is called directly from here
  20440. * with any picking info generated by `pickLayer`.
  20441. * @param {Object} event An object encapsulating an input event,
  20442. * with the following shape:
  20443. * {Object: {x, y}} offsetCenter: center of the event
  20444. * {Object} srcEvent: native JS Event object
  20445. */
  20446. }, {
  20447. key: '_onPointerMove',
  20448. value: function _onPointerMove(event) {
  20449. if (event.leftButton || event.rightButton) {
  20450. // Do not trigger onHover callbacks if mouse button is down.
  20451. return;
  20452. }
  20453. this._pickAndCallback({
  20454. callback: this._onLayerHover,
  20455. event: event,
  20456. mode: 'hover'
  20457. });
  20458. }
  20459. }, {
  20460. key: '_onPointerLeave',
  20461. value: function _onPointerLeave(event) {
  20462. this.pickObject({
  20463. x: -1,
  20464. y: -1,
  20465. radius: this._pickingRadius,
  20466. mode: 'hover'
  20467. });
  20468. }
  20469. }, {
  20470. key: '_pickAndCallback',
  20471. value: function _pickAndCallback(options) {
  20472. var pos = options.event.offsetCenter;
  20473. var radius = this._pickingRadius;
  20474. var selectedInfos = this.pickObject({ x: pos.x, y: pos.y, radius: radius, mode: options.mode });
  20475. if (options.callback) {
  20476. var firstInfo = selectedInfos.find(function (info) {
  20477. return info.index >= 0;
  20478. }) || null;
  20479. // As per documentation, send null value when no valid object is picked.
  20480. options.callback(firstInfo, selectedInfos, options.event.srcEvent);
  20481. }
  20482. }
  20483. // SEER INTEGRATION
  20484. /**
  20485. * Called upon Seer initialization, manually sends layers data.
  20486. */
  20487. }, {
  20488. key: '_initSeer',
  20489. value: function _initSeer() {
  20490. this.layers.forEach(function (layer) {
  20491. (0, _seerIntegration.initLayerInSeer)(layer);
  20492. (0, _seerIntegration.updateLayerInSeer)(layer);
  20493. });
  20494. }
  20495. /**
  20496. * On Seer property edition, set override and update layers.
  20497. */
  20498. }, {
  20499. key: '_editSeer',
  20500. value: function _editSeer(payload) {
  20501. if (payload.type !== 'edit' || payload.valuePath[0] !== 'props') {
  20502. return;
  20503. }
  20504. (0, _seerIntegration.setPropOverrides)(payload.itemKey, payload.valuePath.slice(1), payload.value);
  20505. var newLayers = this.layers.map(function (layer) {
  20506. return new layer.constructor(layer.props);
  20507. });
  20508. this.updateLayers({ newLayers: newLayers });
  20509. }
  20510. }]);
  20511. return LayerManager;
  20512. }();
  20513. exports.default = LayerManager;
  20514. /***/ }),
  20515. /* 185 */
  20516. /***/ (function(module, exports, __webpack_require__) {
  20517. "use strict";
  20518. Object.defineProperty(exports, "__esModule", {
  20519. value: true
  20520. });
  20521. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  20522. exports.formatTime = formatTime;
  20523. exports.leftPad = leftPad;
  20524. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  20525. var Stats = function () {
  20526. function Stats(_ref) {
  20527. var id = _ref.id;
  20528. _classCallCheck(this, Stats);
  20529. this.id = id;
  20530. this.time = 0;
  20531. this.total = 0;
  20532. this.average = 0;
  20533. this.count = 0;
  20534. this._time = 0;
  20535. }
  20536. _createClass(Stats, [{
  20537. key: 'timeStart',
  20538. value: function timeStart() {
  20539. this._time = this.timestampMs();
  20540. }
  20541. }, {
  20542. key: 'timeEnd',
  20543. value: function timeEnd() {
  20544. this.time = this.timestampMs() - this._time;
  20545. this.total += this.time;
  20546. this.count++;
  20547. this.average = this.total / this.count;
  20548. }
  20549. }, {
  20550. key: 'timestampMs',
  20551. value: function timestampMs() {
  20552. /* global window */
  20553. return typeof window !== 'undefined' && window.performance ? window.performance.now() : Date.now();
  20554. }
  20555. }, {
  20556. key: 'getTimeString',
  20557. value: function getTimeString() {
  20558. return this.id + ':' + formatTime(this.time) + '(' + this.count + ')';
  20559. }
  20560. }]);
  20561. return Stats;
  20562. }();
  20563. // TODO: Currently unused, keeping in case we want it later for log formatting
  20564. exports.default = Stats;
  20565. function formatTime(ms) {
  20566. var formatted = void 0;
  20567. if (ms < 10) {
  20568. formatted = ms.toFixed(2) + 'ms';
  20569. } else if (ms < 100) {
  20570. formatted = ms.toFixed(1) + 'ms';
  20571. } else if (ms < 1000) {
  20572. formatted = ms.toFixed(0) + 'ms';
  20573. } else {
  20574. formatted = (ms / 1000).toFixed(2) + 's';
  20575. }
  20576. return formatted;
  20577. }
  20578. function leftPad(string) {
  20579. var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8;
  20580. while (string.length < length) {
  20581. string = ' ' + string;
  20582. }
  20583. return string;
  20584. }
  20585. /***/ }),
  20586. /* 186 */
  20587. /***/ (function(module, exports, __webpack_require__) {
  20588. "use strict";
  20589. Object.defineProperty(exports, "__esModule", {
  20590. value: true
  20591. });
  20592. exports.TRANSITION_EVENTS = undefined;
  20593. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global requestAnimationFrame, cancelAnimationFrame */
  20594. var _linearInterpolator = __webpack_require__(125);
  20595. var _linearInterpolator2 = _interopRequireDefault(_linearInterpolator);
  20596. var _transitionUtils = __webpack_require__(84);
  20597. var _assert = __webpack_require__(1);
  20598. var _assert2 = _interopRequireDefault(_assert);
  20599. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  20600. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  20601. var noop = function noop() {};
  20602. var TRANSITION_EVENTS = exports.TRANSITION_EVENTS = {
  20603. BREAK: 1,
  20604. SNAP_TO_END: 2,
  20605. IGNORE: 3
  20606. };
  20607. var DEFAULT_PROPS = {
  20608. transitionDuration: 0,
  20609. transitionEasing: function transitionEasing(t) {
  20610. return t;
  20611. },
  20612. transitionInterpolator: new _linearInterpolator2.default(),
  20613. transitionInterruption: TRANSITION_EVENTS.BREAK,
  20614. onTransitionStart: noop,
  20615. onTransitionInterrupt: noop,
  20616. onTransitionEnd: noop
  20617. };
  20618. var DEFAULT_STATE = {
  20619. animation: null,
  20620. propsInTransition: null,
  20621. startProps: null,
  20622. endProps: null
  20623. };
  20624. var TransitionManager = function () {
  20625. function TransitionManager(props) {
  20626. _classCallCheck(this, TransitionManager);
  20627. this.props = props;
  20628. this.state = DEFAULT_STATE;
  20629. this._onTransitionFrame = this._onTransitionFrame.bind(this);
  20630. }
  20631. // Returns current transitioned viewport.
  20632. _createClass(TransitionManager, [{
  20633. key: 'getViewportInTransition',
  20634. value: function getViewportInTransition() {
  20635. return this.state.propsInTransition;
  20636. }
  20637. // Process the vewiport change, either ignore or trigger a new transiton.
  20638. // Return true if a new transition is triggered, false otherwise.
  20639. }, {
  20640. key: 'processViewportChange',
  20641. value: function processViewportChange(nextProps) {
  20642. var transitionTriggered = false;
  20643. var currentProps = this.props;
  20644. // Set this.props here as '_triggerTransition' calls '_updateViewport' that uses this.props.
  20645. this.props = nextProps;
  20646. // NOTE: Be cautious re-ordering statements in this function.
  20647. if (this._shouldIgnoreViewportChange(currentProps, nextProps)) {
  20648. return transitionTriggered;
  20649. }
  20650. var isTransitionInProgress = this._isTransitionInProgress();
  20651. if (this._isTransitionEnabled(nextProps)) {
  20652. var startProps = Object.assign({}, currentProps, this.state.interruption === TRANSITION_EVENTS.SNAP_TO_END ? this.state.endProps : this.state.propsInTransition || currentProps);
  20653. if (isTransitionInProgress) {
  20654. currentProps.onTransitionInterrupt();
  20655. }
  20656. nextProps.onTransitionStart();
  20657. this._triggerTransition(startProps, nextProps);
  20658. transitionTriggered = true;
  20659. } else if (isTransitionInProgress) {
  20660. currentProps.onTransitionInterrupt();
  20661. this._endTransition();
  20662. }
  20663. return transitionTriggered;
  20664. }
  20665. // Helper methods
  20666. }, {
  20667. key: '_isTransitionInProgress',
  20668. value: function _isTransitionInProgress() {
  20669. return this.state.propsInTransition;
  20670. }
  20671. }, {
  20672. key: '_isTransitionEnabled',
  20673. value: function _isTransitionEnabled(props) {
  20674. return props.transitionDuration > 0 && props.transitionInterpolator;
  20675. }
  20676. }, {
  20677. key: '_isUpdateDueToCurrentTransition',
  20678. value: function _isUpdateDueToCurrentTransition(props) {
  20679. if (this.state.propsInTransition) {
  20680. return this.state.interpolator.arePropsEqual(props, this.state.propsInTransition);
  20681. }
  20682. return false;
  20683. }
  20684. }, {
  20685. key: '_shouldIgnoreViewportChange',
  20686. value: function _shouldIgnoreViewportChange(currentProps, nextProps) {
  20687. if (this._isTransitionInProgress()) {
  20688. // Ignore update if it is requested to be ignored
  20689. return this.state.interruption === TRANSITION_EVENTS.IGNORE ||
  20690. // Ignore update if it is due to current active transition.
  20691. this._isUpdateDueToCurrentTransition(nextProps);
  20692. } else if (this._isTransitionEnabled(nextProps)) {
  20693. // Ignore if none of the viewport props changed.
  20694. return nextProps.transitionInterpolator.arePropsEqual(currentProps, nextProps);
  20695. }
  20696. return true;
  20697. }
  20698. }, {
  20699. key: '_triggerTransition',
  20700. value: function _triggerTransition(startProps, endProps) {
  20701. (0, _assert2.default)(this._isTransitionEnabled(endProps), 'Transition is not enabled');
  20702. cancelAnimationFrame(this.state.animation);
  20703. var initialProps = endProps.transitionInterpolator.initializeProps(startProps, endProps);
  20704. this.state = {
  20705. // Save current transition props
  20706. duration: endProps.transitionDuration,
  20707. easing: endProps.transitionEasing,
  20708. interpolator: endProps.transitionInterpolator,
  20709. interruption: endProps.transitionInterruption,
  20710. startTime: Date.now(),
  20711. startProps: initialProps.start,
  20712. endProps: initialProps.end,
  20713. animation: null,
  20714. propsInTransition: {}
  20715. };
  20716. this._onTransitionFrame();
  20717. }
  20718. }, {
  20719. key: '_onTransitionFrame',
  20720. value: function _onTransitionFrame() {
  20721. // _updateViewport() may cancel the animation
  20722. this.state.animation = requestAnimationFrame(this._onTransitionFrame);
  20723. this._updateViewport();
  20724. }
  20725. }, {
  20726. key: '_endTransition',
  20727. value: function _endTransition() {
  20728. cancelAnimationFrame(this.state.animation);
  20729. this.state = DEFAULT_STATE;
  20730. }
  20731. }, {
  20732. key: '_updateViewport',
  20733. value: function _updateViewport() {
  20734. // NOTE: Be cautious re-ordering statements in this function.
  20735. var currentTime = Date.now();
  20736. var _state = this.state,
  20737. startTime = _state.startTime,
  20738. duration = _state.duration,
  20739. easing = _state.easing,
  20740. interpolator = _state.interpolator,
  20741. startProps = _state.startProps,
  20742. endProps = _state.endProps;
  20743. var shouldEnd = false;
  20744. var t = (currentTime - startTime) / duration;
  20745. if (t >= 1) {
  20746. t = 1;
  20747. shouldEnd = true;
  20748. }
  20749. t = easing(t);
  20750. var viewport = interpolator.interpolateProps(startProps, endProps, t);
  20751. // This extractViewportFrom gurantees angle props (bearing, longitude) are normalized
  20752. // So when viewports are compared they are in same range.
  20753. this.state.propsInTransition = (0, _transitionUtils.extractViewportFrom)(Object.assign({}, this.props, viewport));
  20754. if (this.props.onViewportChange) {
  20755. this.props.onViewportChange(this.state.propsInTransition, { inTransition: true });
  20756. }
  20757. if (shouldEnd) {
  20758. this._endTransition();
  20759. this.props.onTransitionEnd();
  20760. }
  20761. }
  20762. }]);
  20763. return TransitionManager;
  20764. }();
  20765. exports.default = TransitionManager;
  20766. TransitionManager.defaultProps = DEFAULT_PROPS;
  20767. /***/ }),
  20768. /* 187 */
  20769. /***/ (function(module, exports, __webpack_require__) {
  20770. "use strict";
  20771. Object.defineProperty(exports, "__esModule", {
  20772. value: true
  20773. });
  20774. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  20775. exports.diffProps = diffProps;
  20776. exports.compareProps = compareProps;
  20777. var _assert = __webpack_require__(1);
  20778. var _assert2 = _interopRequireDefault(_assert);
  20779. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  20780. // Returns an object with "change flags", either false or strings indicating reason for change
  20781. function diffProps(props, oldProps) {
  20782. // First check if any props have changed (ignore props that will be examined separately)
  20783. var propsChangedReason = compareProps({
  20784. newProps: props,
  20785. oldProps: oldProps,
  20786. ignoreProps: { data: null, updateTriggers: null }
  20787. });
  20788. // Now check if any data related props have changed
  20789. var dataChangedReason = diffDataProps(props, oldProps);
  20790. // Check update triggers to determine if any attributes need regeneration
  20791. // Note - if data has changed, all attributes will need regeneration, so skip this step
  20792. var updateTriggersChangedReason = false;
  20793. if (!dataChangedReason) {
  20794. updateTriggersChangedReason = diffUpdateTriggers(props, oldProps);
  20795. }
  20796. return {
  20797. dataChanged: dataChangedReason,
  20798. propsChanged: propsChangedReason,
  20799. updateTriggersChanged: updateTriggersChangedReason
  20800. };
  20801. }
  20802. /**
  20803. * Performs equality by iterating through keys on an object and returning false
  20804. * when any key has values which are not strictly equal between the arguments.
  20805. * @param {Object} opt.oldProps - object with old key/value pairs
  20806. * @param {Object} opt.newProps - object with new key/value pairs
  20807. * @param {Object} opt.ignoreProps={} - object, keys that should not be compared
  20808. * @returns {null|String} - null when values of all keys are strictly equal.
  20809. * if unequal, returns a string explaining what changed.
  20810. */
  20811. /* eslint-disable max-statements, max-depth, complexity */
  20812. function compareProps() {
  20813. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  20814. newProps = _ref.newProps,
  20815. oldProps = _ref.oldProps,
  20816. _ref$ignoreProps = _ref.ignoreProps,
  20817. ignoreProps = _ref$ignoreProps === undefined ? {} : _ref$ignoreProps,
  20818. _ref$shallowComparePr = _ref.shallowCompareProps,
  20819. shallowCompareProps = _ref$shallowComparePr === undefined ? {} : _ref$shallowComparePr,
  20820. _ref$triggerName = _ref.triggerName,
  20821. triggerName = _ref$triggerName === undefined ? 'props' : _ref$triggerName;
  20822. (0, _assert2.default)(oldProps !== undefined && newProps !== undefined, 'compareProps args');
  20823. // shallow equality => deep equality
  20824. if (oldProps === newProps) {
  20825. return null;
  20826. }
  20827. // TODO - do we need these checks? Should never happen...
  20828. if ((typeof newProps === 'undefined' ? 'undefined' : _typeof(newProps)) !== 'object' || newProps === null) {
  20829. return triggerName + ' changed shallowly';
  20830. }
  20831. if ((typeof oldProps === 'undefined' ? 'undefined' : _typeof(oldProps)) !== 'object' || oldProps === null) {
  20832. return triggerName + ' changed shallowly';
  20833. }
  20834. // Test if new props different from old props
  20835. for (var key in oldProps) {
  20836. if (!(key in ignoreProps)) {
  20837. if (!(key in newProps)) {
  20838. return triggerName + '.' + key + ' dropped: ' + oldProps[key] + ' -> undefined';
  20839. }
  20840. // If object has an equals function, invoke it
  20841. var equals = newProps[key] && oldProps[key] && newProps[key].equals;
  20842. if (equals && !equals.call(newProps[key], oldProps[key])) {
  20843. return triggerName + '.' + key + ' changed deeply: ' + oldProps[key] + ' -> ' + newProps[key];
  20844. }
  20845. // If both new and old value are functions, ignore differences
  20846. if (key in shallowCompareProps) {
  20847. var type = _typeof(newProps[key]);
  20848. if (type === 'function' && typeof oldProps[key] === 'function') {
  20849. equals = true;
  20850. }
  20851. }
  20852. if (!equals && oldProps[key] !== newProps[key]) {
  20853. return triggerName + '.' + key + ' changed shallowly: ' + oldProps[key] + ' -> ' + newProps[key];
  20854. }
  20855. }
  20856. }
  20857. // Test if any new props have been added
  20858. for (var _key in newProps) {
  20859. if (!(_key in ignoreProps)) {
  20860. if (!(_key in oldProps)) {
  20861. return triggerName + '.' + _key + ' added: undefined -> ' + newProps[_key];
  20862. }
  20863. }
  20864. }
  20865. return null;
  20866. }
  20867. /* eslint-enable max-statements, max-depth, complexity */
  20868. // HELPERS
  20869. // The comparison of the data prop requires special handling
  20870. // the dataComparator should be used if supplied
  20871. function diffDataProps(props, oldProps) {
  20872. if (oldProps === null) {
  20873. return 'oldProps is null, initial diff';
  20874. }
  20875. // Support optional app defined comparison of data
  20876. var dataComparator = props.dataComparator;
  20877. if (dataComparator) {
  20878. if (!dataComparator(props.data, oldProps.data)) {
  20879. return 'Data comparator detected a change';
  20880. }
  20881. // Otherwise, do a shallow equal on props
  20882. } else if (props.data !== oldProps.data) {
  20883. return 'A new data container was supplied';
  20884. }
  20885. return null;
  20886. }
  20887. // Checks if any update triggers have changed
  20888. // also calls callback to invalidate attributes accordingly.
  20889. function diffUpdateTriggers(props, oldProps) {
  20890. if (oldProps === null) {
  20891. return 'oldProps is null, initial diff';
  20892. }
  20893. // If the 'all' updateTrigger fires, ignore testing others
  20894. if ('all' in props.updateTriggers) {
  20895. var diffReason = diffUpdateTrigger(oldProps, props, 'all');
  20896. if (diffReason) {
  20897. return { all: true };
  20898. }
  20899. }
  20900. var triggerChanged = {};
  20901. var reason = false;
  20902. // If the 'all' updateTrigger didn't fire, need to check all others
  20903. for (var triggerName in props.updateTriggers) {
  20904. if (triggerName !== 'all') {
  20905. var _diffReason = diffUpdateTrigger(oldProps, props, triggerName);
  20906. if (_diffReason) {
  20907. triggerChanged[triggerName] = true;
  20908. reason = triggerChanged;
  20909. }
  20910. }
  20911. }
  20912. return reason;
  20913. }
  20914. function diffUpdateTrigger(props, oldProps, triggerName) {
  20915. var newTriggers = props.updateTriggers[triggerName] || {};
  20916. var oldTriggers = oldProps.updateTriggers[triggerName] || {};
  20917. var diffReason = compareProps({
  20918. oldProps: oldTriggers,
  20919. newProps: newTriggers,
  20920. triggerName: triggerName
  20921. });
  20922. return diffReason;
  20923. }
  20924. /***/ }),
  20925. /* 188 */
  20926. /***/ (function(module, exports, __webpack_require__) {
  20927. "use strict";
  20928. Object.defineProperty(exports, "__esModule", {
  20929. value: true
  20930. });
  20931. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  20932. var _propTypes = __webpack_require__(116);
  20933. var _propTypes2 = _interopRequireDefault(_propTypes);
  20934. var _mjolnir = __webpack_require__(115);
  20935. var _mapControls = __webpack_require__(178);
  20936. var _mapControls2 = _interopRequireDefault(_mapControls);
  20937. var _mapState = __webpack_require__(82);
  20938. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  20939. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  20940. var PREFIX = '-webkit-';
  20941. var CURSOR = {
  20942. GRABBING: PREFIX + 'grabbing',
  20943. GRAB: PREFIX + 'grab',
  20944. POINTER: 'pointer'
  20945. };
  20946. var propTypes = {
  20947. width: _propTypes2.default.number.isRequired /** The width of the map. */
  20948. , height: _propTypes2.default.number.isRequired /** The height of the map. */
  20949. , longitude: _propTypes2.default.number.isRequired /** The longitude of the center of the map. */
  20950. , latitude: _propTypes2.default.number.isRequired /** The latitude of the center of the map. */
  20951. , zoom: _propTypes2.default.number.isRequired /** The tile zoom level of the map. */
  20952. , bearing: _propTypes2.default.number /** Specify the bearing of the viewport */
  20953. , pitch: _propTypes2.default.number /** Specify the pitch of the viewport */
  20954. , // Note: Non-public API, see https://github.com/mapbox/mapbox-gl-js/issues/1137
  20955. altitude: _propTypes2.default.number /** Altitude of the viewport camera. Default 1.5 "screen heights" */
  20956. , /** Viewport constraints */
  20957. maxZoom: _propTypes2.default.number, // Max zoom level
  20958. minZoom: _propTypes2.default.number, // Min zoom level
  20959. maxPitch: _propTypes2.default.number, // Max pitch in degrees
  20960. minPitch: _propTypes2.default.number, // Min pitch in degrees
  20961. /**
  20962. * `onViewportChange` callback is fired when the user interacted with the
  20963. * map. The object passed to the callback contains viewport properties
  20964. * such as `longitude`, `latitude`, `zoom` etc.
  20965. */
  20966. onViewportChange: _propTypes2.default.func,
  20967. /** Enables control event handling */
  20968. scrollZoom: _propTypes2.default.bool, // Scroll to zoom
  20969. dragPan: _propTypes2.default.bool, // Drag to pan
  20970. dragRotate: _propTypes2.default.bool, // Drag to rotate
  20971. doubleClickZoom: _propTypes2.default.bool, // Double click to zoom
  20972. touchZoomRotate: _propTypes2.default.bool, // Pinch to zoom / rotate
  20973. /** Accessor that returns a cursor style to show interactive state */
  20974. getCursor: _propTypes2.default.func,
  20975. // A map control instance to replace the default map controls
  20976. // The object must expose one property: `events` as an array of subscribed
  20977. // event names; and two methods: `setState(state)` and `handle(event)`
  20978. controls: _propTypes2.default.shape({
  20979. events: _propTypes2.default.arrayOf(_propTypes2.default.string),
  20980. handleEvent: _propTypes2.default.func
  20981. })
  20982. };
  20983. var getDefaultCursor = function getDefaultCursor(_ref) {
  20984. var isDragging = _ref.isDragging;
  20985. return isDragging ? CURSOR.GRABBING : CURSOR.GRAB;
  20986. };
  20987. var defaultProps = Object.assign({}, _mapState.MAPBOX_LIMITS, {
  20988. onViewportChange: null,
  20989. scrollZoom: true,
  20990. dragPan: true,
  20991. dragRotate: true,
  20992. doubleClickZoom: true,
  20993. touchZoomRotate: true,
  20994. getCursor: getDefaultCursor
  20995. });
  20996. var MapControllerJS = function () {
  20997. function MapControllerJS(props) {
  20998. _classCallCheck(this, MapControllerJS);
  20999. props = Object.assign({}, defaultProps, props);
  21000. this.props = props;
  21001. this.state = {
  21002. isDragging: false // Whether the cursor is down
  21003. };
  21004. this.canvas = props.canvas;
  21005. var eventManager = new _mjolnir.EventManager(this.canvas);
  21006. this._eventManager = eventManager;
  21007. // If props.controls is not provided, fallback to default MapControls instance
  21008. // Cannot use defaultProps here because it needs to be per map instance
  21009. this._controls = this.props.controls || new _mapControls2.default();
  21010. this._controls.setOptions(Object.assign({}, this.props, {
  21011. onStateChange: this._onInteractiveStateChange.bind(this),
  21012. eventManager: eventManager
  21013. }));
  21014. }
  21015. _createClass(MapControllerJS, [{
  21016. key: 'setProps',
  21017. value: function setProps(props) {
  21018. props = Object.assign({}, this.props, props);
  21019. this.props = props;
  21020. this._controls.setOptions(props);
  21021. }
  21022. }, {
  21023. key: 'finalize',
  21024. value: function finalize() {
  21025. this._eventManager.destroy();
  21026. }
  21027. }, {
  21028. key: '_onInteractiveStateChange',
  21029. value: function _onInteractiveStateChange(_ref2) {
  21030. var _ref2$isDragging = _ref2.isDragging,
  21031. isDragging = _ref2$isDragging === undefined ? false : _ref2$isDragging;
  21032. if (isDragging !== this.state.isDragging) {
  21033. this.state.isDragging = isDragging;
  21034. var getCursor = this.props.getCursor;
  21035. this.canvas.style.cursor = getCursor(this.state);
  21036. }
  21037. }
  21038. }]);
  21039. return MapControllerJS;
  21040. }();
  21041. exports.default = MapControllerJS;
  21042. MapControllerJS.displayName = 'MapController';
  21043. MapControllerJS.propTypes = propTypes;
  21044. MapControllerJS.defaultProps = defaultProps;
  21045. /***/ }),
  21046. /* 189 */
  21047. /***/ (function(module, exports, __webpack_require__) {
  21048. "use strict";
  21049. Object.defineProperty(exports, "__esModule", {
  21050. value: true
  21051. });
  21052. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  21053. var _propTypes = __webpack_require__(116);
  21054. var _propTypes2 = _interopRequireDefault(_propTypes);
  21055. var _orbitViewport = __webpack_require__(85);
  21056. var _orbitViewport2 = _interopRequireDefault(_orbitViewport);
  21057. var _orbitState = __webpack_require__(179);
  21058. var _orbitState2 = _interopRequireDefault(_orbitState);
  21059. var _viewportControls = __webpack_require__(121);
  21060. var _viewportControls2 = _interopRequireDefault(_viewportControls);
  21061. var _mjolnir = __webpack_require__(115);
  21062. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  21063. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  21064. var PREFIX = '-webkit-';
  21065. var CURSOR = {
  21066. GRABBING: PREFIX + 'grabbing',
  21067. GRAB: PREFIX + 'grab',
  21068. POINTER: 'pointer'
  21069. };
  21070. var propTypes = {
  21071. /* Viewport properties */
  21072. lookAt: _propTypes2.default.arrayOf(_propTypes2.default.number), // target position
  21073. distance: _propTypes2.default.number, // distance from camera to the target
  21074. rotationX: _propTypes2.default.number, // rotation around X axis
  21075. rotationY: _propTypes2.default.number, // rotation around Y axis
  21076. translationX: _propTypes2.default.number, // translation x in screen space
  21077. translationY: _propTypes2.default.number, // translation y in screen space
  21078. zoom: _propTypes2.default.number, // scale in screen space
  21079. minZoom: _propTypes2.default.number,
  21080. maxZoom: _propTypes2.default.number,
  21081. fov: _propTypes2.default.number, // field of view
  21082. near: _propTypes2.default.number,
  21083. far: _propTypes2.default.number,
  21084. width: _propTypes2.default.number.isRequired, // viewport width in pixels
  21085. height: _propTypes2.default.number.isRequired, // viewport height in pixels
  21086. /* Model properties */
  21087. bounds: _propTypes2.default.object, // bounds in the shape of {minX, minY, minZ, maxX, maxY, maxZ}
  21088. /* Callbacks */
  21089. onViewportChange: _propTypes2.default.func.isRequired,
  21090. /** Accessor that returns a cursor style to show interactive state */
  21091. getCursor: _propTypes2.default.func,
  21092. /* Controls */
  21093. orbitControls: _propTypes2.default.object
  21094. };
  21095. var getDefaultCursor = function getDefaultCursor(_ref) {
  21096. var isDragging = _ref.isDragging;
  21097. return isDragging ? CURSOR.GRABBING : CURSOR.GRAB;
  21098. };
  21099. var defaultProps = {
  21100. lookAt: [0, 0, 0],
  21101. rotationX: 0,
  21102. rotationY: 0,
  21103. translationX: 0,
  21104. translationY: 0,
  21105. distance: 10,
  21106. zoom: 1,
  21107. minZoom: 0,
  21108. maxZoom: Infinity,
  21109. fov: 50,
  21110. near: 1,
  21111. far: 1000,
  21112. getCursor: getDefaultCursor
  21113. };
  21114. /*
  21115. * Maps mouse interaction to a deck.gl Viewport
  21116. */
  21117. var OrbitControllerJS = function () {
  21118. _createClass(OrbitControllerJS, null, [{
  21119. key: 'getViewport',
  21120. // Returns a deck.gl Viewport instance, to be used with the DeckGL component
  21121. value: function getViewport(viewport) {
  21122. return new _orbitViewport2.default(viewport);
  21123. }
  21124. }]);
  21125. function OrbitControllerJS(props) {
  21126. _classCallCheck(this, OrbitControllerJS);
  21127. props = Object.assign({}, defaultProps, props);
  21128. this.props = props;
  21129. this.state = {
  21130. // Whether the cursor is down
  21131. isDragging: false
  21132. };
  21133. this.canvas = props.canvas;
  21134. var eventManager = new _mjolnir.EventManager(this.canvas);
  21135. this._eventManager = eventManager;
  21136. this._controls = props.orbitControls || new _viewportControls2.default(_orbitState2.default);
  21137. this._controls.setOptions(Object.assign({}, this.props, {
  21138. onStateChange: this._onInteractiveStateChange.bind(this),
  21139. eventManager: eventManager
  21140. }));
  21141. }
  21142. _createClass(OrbitControllerJS, [{
  21143. key: 'setProps',
  21144. value: function setProps(props) {
  21145. props = Object.assign({}, this.props, props);
  21146. this.props = props;
  21147. this._controls.setOptions(props);
  21148. }
  21149. }, {
  21150. key: 'finalize',
  21151. value: function finalize() {
  21152. this._eventManager.destroy();
  21153. }
  21154. }, {
  21155. key: '_onInteractiveStateChange',
  21156. value: function _onInteractiveStateChange(_ref2) {
  21157. var _ref2$isDragging = _ref2.isDragging,
  21158. isDragging = _ref2$isDragging === undefined ? false : _ref2$isDragging;
  21159. if (isDragging !== this.state.isDragging) {
  21160. this.state.isDragging = isDragging;
  21161. var getCursor = this.props.getCursor;
  21162. this.canvas.style.cursor = getCursor(this.state);
  21163. }
  21164. }
  21165. }]);
  21166. return OrbitControllerJS;
  21167. }();
  21168. exports.default = OrbitControllerJS;
  21169. OrbitControllerJS.displayName = 'OrbitController';
  21170. OrbitControllerJS.propTypes = propTypes;
  21171. OrbitControllerJS.defaultProps = defaultProps;
  21172. /***/ }),
  21173. /* 190 */
  21174. /***/ (function(module, exports, __webpack_require__) {
  21175. "use strict";
  21176. Object.defineProperty(exports, "__esModule", {
  21177. value: true
  21178. });
  21179. exports.lighting = exports.project64 = exports.project = exports.picking = exports.fp64 = exports.fp32 = undefined;
  21180. exports.initializeShaderModules = initializeShaderModules;
  21181. var _luma = __webpack_require__(12);
  21182. var _project = __webpack_require__(83);
  21183. var _project2 = _interopRequireDefault(_project);
  21184. var _project3 = __webpack_require__(192);
  21185. var _project4 = _interopRequireDefault(_project3);
  21186. var _lighting = __webpack_require__(191);
  21187. var _lighting2 = _interopRequireDefault(_lighting);
  21188. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  21189. function initializeShaderModules() {
  21190. (0, _luma.registerShaderModules)([_luma.fp32, _luma.fp64, _project2.default, _project4.default, _lighting2.default, _luma.picking]);
  21191. (0, _luma.setDefaultShaderModules)([_project2.default]);
  21192. } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  21193. //
  21194. // Permission is hereby granted, free of charge, to any person obtaining a copy
  21195. // of this software and associated documentation files (the "Software"), to deal
  21196. // in the Software without restriction, including without limitation the rights
  21197. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  21198. // copies of the Software, and to permit persons to whom the Software is
  21199. // furnished to do so, subject to the following conditions:
  21200. //
  21201. // The above copyright notice and this permission notice shall be included in
  21202. // all copies or substantial portions of the Software.
  21203. //
  21204. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21205. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21206. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21207. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21208. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21209. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21210. // THE SOFTWARE.
  21211. initializeShaderModules();
  21212. exports.fp32 = _luma.fp32;
  21213. exports.fp64 = _luma.fp64;
  21214. exports.picking = _luma.picking;
  21215. exports.project = _project2.default;
  21216. exports.project64 = _project4.default;
  21217. exports.lighting = _lighting2.default;
  21218. /***/ }),
  21219. /* 191 */
  21220. /***/ (function(module, exports, __webpack_require__) {
  21221. "use strict";
  21222. Object.defineProperty(exports, "__esModule", {
  21223. value: true
  21224. });
  21225. var _lighting = __webpack_require__(342);
  21226. var _lighting2 = _interopRequireDefault(_lighting);
  21227. var _project = __webpack_require__(83);
  21228. var _project2 = _interopRequireDefault(_project);
  21229. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  21230. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  21231. //
  21232. // Permission is hereby granted, free of charge, to any person obtaining a copy
  21233. // of this software and associated documentation files (the "Software"), to deal
  21234. // in the Software without restriction, including without limitation the rights
  21235. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  21236. // copies of the Software, and to permit persons to whom the Software is
  21237. // furnished to do so, subject to the following conditions:
  21238. //
  21239. // The above copyright notice and this permission notice shall be included in
  21240. // all copies or substantial portions of the Software.
  21241. //
  21242. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21243. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21244. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21245. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21246. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21247. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21248. // THE SOFTWARE.
  21249. exports.default = {
  21250. name: 'lighting',
  21251. dependencies: [_project2.default],
  21252. vs: _lighting2.default
  21253. };
  21254. /***/ }),
  21255. /* 192 */
  21256. /***/ (function(module, exports, __webpack_require__) {
  21257. "use strict";
  21258. Object.defineProperty(exports, "__esModule", {
  21259. value: true
  21260. });
  21261. var _luma = __webpack_require__(12);
  21262. var _project = __webpack_require__(83);
  21263. var _project2 = _interopRequireDefault(_project);
  21264. var _fp = __webpack_require__(195);
  21265. var _memoize = __webpack_require__(196);
  21266. var _memoize2 = _interopRequireDefault(_memoize);
  21267. var _project3 = __webpack_require__(343);
  21268. var _project4 = _interopRequireDefault(_project3);
  21269. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  21270. exports.default = {
  21271. name: 'project64',
  21272. dependencies: [_project2.default, _luma.fp64],
  21273. vs: _project4.default,
  21274. getUniforms: getUniforms,
  21275. deprecations: [{ type: 'uniform vec2', old: 'projectionFP64[16]', new: 'project_uViewProjectionMatrixFP64' }, { type: 'uniform vec2', old: 'projectionScaleFP64', new: 'project64_uScale' }]
  21276. };
  21277. // TODO - this module should calculate the 64 bit uniforms
  21278. // It is currently done by project to minimize duplicated work
  21279. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  21280. //
  21281. // Permission is hereby granted, free of charge, to any person obtaining a copy
  21282. // of this software and associated documentation files (the "Software"), to deal
  21283. // in the Software without restriction, including without limitation the rights
  21284. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  21285. // copies of the Software, and to permit persons to whom the Software is
  21286. // furnished to do so, subject to the following conditions:
  21287. //
  21288. // The above copyright notice and this permission notice shall be included in
  21289. // all copies or substantial portions of the Software.
  21290. //
  21291. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21292. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21293. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21294. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21295. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21296. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21297. // THE SOFTWARE.
  21298. var DEFAULT_MODULE_OPTIONS = {};
  21299. var getMemoizedUniforms = (0, _memoize2.default)(calculateUniforms);
  21300. function getUniforms() {
  21301. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MODULE_OPTIONS;
  21302. var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  21303. // These two uniforms are generated by the fp32 project module
  21304. var project_uViewProjectionMatrix = context.project_uViewProjectionMatrix,
  21305. project_uScale = context.project_uScale;
  21306. if (project_uViewProjectionMatrix && project_uScale) {
  21307. // We only need to update fp64 uniforms if fp32 projection is being updated
  21308. return getMemoizedUniforms({ project_uViewProjectionMatrix: project_uViewProjectionMatrix, project_uScale: project_uScale });
  21309. }
  21310. return {};
  21311. }
  21312. function calculateUniforms(_ref) {
  21313. var project_uViewProjectionMatrix = _ref.project_uViewProjectionMatrix,
  21314. project_uScale = _ref.project_uScale;
  21315. var glViewProjectionMatrixFP64 = (0, _fp.fp64ifyMatrix4)(project_uViewProjectionMatrix);
  21316. var scaleFP64 = (0, _fp.fp64ify)(project_uScale);
  21317. return {
  21318. project_uViewProjectionMatrixFP64: glViewProjectionMatrixFP64,
  21319. project64_uViewProjectionMatrix: glViewProjectionMatrixFP64,
  21320. project64_uScale: scaleFP64
  21321. };
  21322. }
  21323. /***/ }),
  21324. /* 193 */
  21325. /***/ (function(module, exports, __webpack_require__) {
  21326. "use strict";
  21327. Object.defineProperty(exports, "__esModule", {
  21328. value: true
  21329. });
  21330. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  21331. var _math = __webpack_require__(16);
  21332. var _assert = __webpack_require__(1);
  21333. var _assert2 = _interopRequireDefault(_assert);
  21334. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  21335. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  21336. var TransitionInterpolator = function () {
  21337. function TransitionInterpolator() {
  21338. _classCallCheck(this, TransitionInterpolator);
  21339. }
  21340. _createClass(TransitionInterpolator, [{
  21341. key: 'arePropsEqual',
  21342. /**
  21343. * Checks if two sets of props need transition in between
  21344. * @param currentProps {object} - a list of viewport props
  21345. * @param nextProps {object} - a list of viewport props
  21346. * @returns {bool} - true if two props are equivalent
  21347. */
  21348. value: function arePropsEqual(currentProps, nextProps) {
  21349. var _iteratorNormalCompletion = true;
  21350. var _didIteratorError = false;
  21351. var _iteratorError = undefined;
  21352. try {
  21353. for (var _iterator = (this.propNames || [])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  21354. var key = _step.value;
  21355. if (!(0, _math.equals)(currentProps[key], nextProps[key])) {
  21356. return false;
  21357. }
  21358. }
  21359. } catch (err) {
  21360. _didIteratorError = true;
  21361. _iteratorError = err;
  21362. } finally {
  21363. try {
  21364. if (!_iteratorNormalCompletion && _iterator.return) {
  21365. _iterator.return();
  21366. }
  21367. } finally {
  21368. if (_didIteratorError) {
  21369. throw _iteratorError;
  21370. }
  21371. }
  21372. }
  21373. return true;
  21374. }
  21375. /**
  21376. * Called before transition starts to validate/pre-process start and end props
  21377. * @param startProps {object} - a list of starting viewport props
  21378. * @param endProps {object} - a list of target viewport props
  21379. * @returns {Object} {start, end} - start and end props to be passed
  21380. * to `interpolateProps`
  21381. */
  21382. }, {
  21383. key: 'initializeProps',
  21384. value: function initializeProps(startProps, endProps) {
  21385. return { start: startProps, end: endProps };
  21386. }
  21387. /**
  21388. * Returns viewport props in transition
  21389. * @param startProps {object} - a list of starting viewport props
  21390. * @param endProps {object} - a list of target viewport props
  21391. * @param t {number} - a time factor between [0, 1]
  21392. * @returns {object} - a list of interpolated viewport props
  21393. */
  21394. }, {
  21395. key: 'interpolateProps',
  21396. value: function interpolateProps(startProps, endProps, t) {
  21397. (0, _assert2.default)(false, 'interpolateProps is not implemented');
  21398. }
  21399. }]);
  21400. return TransitionInterpolator;
  21401. }();
  21402. exports.default = TransitionInterpolator;
  21403. /***/ }),
  21404. /* 194 */
  21405. /***/ (function(module, exports, __webpack_require__) {
  21406. "use strict";
  21407. Object.defineProperty(exports, "__esModule", {
  21408. value: true
  21409. });
  21410. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  21411. exports.count = count;
  21412. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  21413. //
  21414. // Permission is hereby granted, free of charge, to any person obtaining a copy
  21415. // of this software and associated documentation files (the "Software"), to deal
  21416. // in the Software without restriction, including without limitation the rights
  21417. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  21418. // copies of the Software, and to permit persons to whom the Software is
  21419. // furnished to do so, subject to the following conditions:
  21420. //
  21421. // The above copyright notice and this permission notice shall be included in
  21422. // all copies or substantial portions of the Software.
  21423. //
  21424. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21425. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21426. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21427. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21428. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21429. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21430. // THE SOFTWARE.
  21431. var ERR_NOT_OBJECT = 'count(): argument not an object';
  21432. var ERR_NOT_CONTAINER = 'count(): argument not a container';
  21433. /**
  21434. * Deduces numer of elements in a JavaScript container.
  21435. * - Auto-deduction for ES6 containers that define a count() method
  21436. * - Auto-deduction for ES6 containers that define a size member
  21437. * - Auto-deduction for Classic Arrays via the built-in length attribute
  21438. * - Also handles objects, although note that this an O(N) operation
  21439. */
  21440. function count(container) {
  21441. if (!isObject(container)) {
  21442. throw new Error(ERR_NOT_OBJECT);
  21443. }
  21444. // Check if ES6 collection "count" function is available
  21445. if (typeof container.count === 'function') {
  21446. return container.count();
  21447. }
  21448. // Check if ES6 collection "size" attribute is set
  21449. if (Number.isFinite(container.size)) {
  21450. return container.size;
  21451. }
  21452. // Check if array length attribute is set
  21453. // Note: checking this last since some ES6 collections (Immutable.js)
  21454. // emit profuse warnings when trying to access `length` attribute
  21455. if (Number.isFinite(container.length)) {
  21456. return container.length;
  21457. }
  21458. // Note that getting the count of an object is O(N)
  21459. if (isPlainObject(container)) {
  21460. return Object.keys(container).length;
  21461. }
  21462. throw new Error(ERR_NOT_CONTAINER);
  21463. }
  21464. /**
  21465. * Checks if argument is a plain object (not a class or array etc)
  21466. * @param {*} value - JavaScript value to be tested
  21467. * @return {Boolean} - true if argument is a plain JavaScript object
  21468. */
  21469. function isPlainObject(value) {
  21470. return value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.constructor === Object;
  21471. }
  21472. /**
  21473. * Checks if argument is an indexable object (not a primitive value, nor null)
  21474. * @param {*} value - JavaScript value to be tested
  21475. * @return {Boolean} - true if argument is a JavaScript object
  21476. */
  21477. function isObject(value) {
  21478. return value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object';
  21479. }
  21480. /***/ }),
  21481. /* 195 */
  21482. /***/ (function(module, exports, __webpack_require__) {
  21483. "use strict";
  21484. Object.defineProperty(exports, "__esModule", {
  21485. value: true
  21486. });
  21487. exports.fp64ify = fp64ify;
  21488. exports.fp64ifyMatrix4 = fp64ifyMatrix4;
  21489. exports.fp64LowPart = fp64LowPart;
  21490. exports.enable64bitSupport = enable64bitSupport;
  21491. var _log = __webpack_require__(17);
  21492. var _log2 = _interopRequireDefault(_log);
  21493. var _constants = __webpack_require__(70);
  21494. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  21495. // TODO - utils should not import from lib
  21496. /*
  21497. * Frequently used small math utils: bundlers, especially webpack,
  21498. * adds a thunk around every exported function that adds enough overhead to pull down performance.
  21499. * It may be worth it to also export these as part of an object.
  21500. */
  21501. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  21502. //
  21503. // Permission is hereby granted, free of charge, to any person obtaining a copy
  21504. // of this software and associated documentation files (the "Software"), to deal
  21505. // in the Software without restriction, including without limitation the rights
  21506. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  21507. // copies of the Software, and to permit persons to whom the Software is
  21508. // furnished to do so, subject to the following conditions:
  21509. //
  21510. // The above copyright notice and this permission notice shall be included in
  21511. // all copies or substantial portions of the Software.
  21512. //
  21513. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21514. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21515. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21516. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21517. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21518. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21519. // THE SOFTWARE.
  21520. // TODO - move to shaderlib utilities
  21521. function fp64ify(a) {
  21522. var array = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  21523. var startIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
  21524. var hiPart = Math.fround(a);
  21525. var loPart = a - Math.fround(a);
  21526. array[startIndex] = hiPart;
  21527. array[startIndex + 1] = loPart;
  21528. return array;
  21529. }
  21530. // calculate WebGL 64 bit matrix (transposed "Float64Array")
  21531. function fp64ifyMatrix4(matrix) {
  21532. // Transpose the projection matrix to column major for GLSL.
  21533. var matrixFP64 = new Float32Array(32);
  21534. for (var i = 0; i < 4; ++i) {
  21535. for (var j = 0; j < 4; ++j) {
  21536. var index = i * 4 + j;
  21537. fp64ify(matrix[j * 4 + i], matrixFP64, index * 2);
  21538. }
  21539. }
  21540. return matrixFP64;
  21541. }
  21542. function fp64LowPart(a) {
  21543. return a - Math.fround(a);
  21544. }
  21545. function enable64bitSupport(props) {
  21546. if (props.fp64) {
  21547. if (props.coordinateSystem === _constants.COORDINATE_SYSTEM.LNGLAT) {
  21548. return true;
  21549. }
  21550. _log2.default.once(0, '64-bit mode only works with coordinateSystem set to\n COORDINATE_SYSTEM.LNGLAT. Rendering in 32-bit mode instead');
  21551. }
  21552. return false;
  21553. }
  21554. /***/ }),
  21555. /* 196 */
  21556. /***/ (function(module, exports, __webpack_require__) {
  21557. "use strict";
  21558. Object.defineProperty(exports, "__esModule", {
  21559. value: true
  21560. });
  21561. exports.default = memoize;
  21562. function isEqual(a, b) {
  21563. if (a === b) {
  21564. return true;
  21565. }
  21566. if (Array.isArray(a)) {
  21567. // Special treatment for arrays: compare 1-level deep
  21568. // This is to support equality of matrix/coordinate props
  21569. var len = a.length;
  21570. if (!b || b.length !== len) {
  21571. return false;
  21572. }
  21573. for (var i = 0; i < len; i++) {
  21574. if (a[i] !== b[i]) {
  21575. return false;
  21576. }
  21577. }
  21578. return true;
  21579. }
  21580. return false;
  21581. }
  21582. /**
  21583. * Speed up consecutive function calls by caching the result of calls with identical input
  21584. * https://en.wikipedia.org/wiki/Memoization
  21585. * @param {function} compute - the function to be memoized
  21586. */
  21587. function memoize(compute) {
  21588. var cachedArgs = {};
  21589. var cachedResult = void 0;
  21590. return function (args) {
  21591. for (var key in args) {
  21592. if (!isEqual(args[key], cachedArgs[key])) {
  21593. cachedResult = compute(args);
  21594. cachedArgs = args;
  21595. break;
  21596. }
  21597. }
  21598. return cachedResult;
  21599. };
  21600. }
  21601. /***/ }),
  21602. /* 197 */
  21603. /***/ (function(module, exports, __webpack_require__) {
  21604. "use strict";
  21605. Object.defineProperty(exports, "__esModule", {
  21606. value: true
  21607. });
  21608. exports.default = autobind;
  21609. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  21610. //
  21611. // Permission is hereby granted, free of charge, to any person obtaining a copy
  21612. // of this software and associated documentation files (the "Software"), to deal
  21613. // in the Software without restriction, including without limitation the rights
  21614. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  21615. // copies of the Software, and to permit persons to whom the Software is
  21616. // furnished to do so, subject to the following conditions:
  21617. //
  21618. // The above copyright notice and this permission notice shall be included in
  21619. // all copies or substantial portions of the Software.
  21620. //
  21621. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21622. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21623. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21624. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21625. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21626. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21627. // THE SOFTWARE.
  21628. var PREDEFINED = ['constructor', 'render', 'componentWillMount', 'componentDidMount', 'componentWillReceiveProps', 'shouldComponentUpdate', 'componentWillUpdate', 'componentDidUpdate', 'componentWillUnmount'];
  21629. /**
  21630. * Binds the "this" argument of all functions on a class instance to the instance
  21631. * @param {Object} obj - class instance (typically a react component)
  21632. */
  21633. function autobind(obj) {
  21634. var proto = Object.getPrototypeOf(obj);
  21635. var propNames = Object.getOwnPropertyNames(proto);
  21636. var _iteratorNormalCompletion = true;
  21637. var _didIteratorError = false;
  21638. var _iteratorError = undefined;
  21639. try {
  21640. var _loop = function _loop() {
  21641. var key = _step.value;
  21642. if (typeof obj[key] === 'function') {
  21643. if (!PREDEFINED.find(function (name) {
  21644. return key === name;
  21645. })) {
  21646. obj[key] = obj[key].bind(obj);
  21647. }
  21648. }
  21649. };
  21650. for (var _iterator = propNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  21651. _loop();
  21652. }
  21653. } catch (err) {
  21654. _didIteratorError = true;
  21655. _iteratorError = err;
  21656. } finally {
  21657. try {
  21658. if (!_iteratorNormalCompletion && _iterator.return) {
  21659. _iterator.return();
  21660. }
  21661. } finally {
  21662. if (_didIteratorError) {
  21663. throw _iteratorError;
  21664. }
  21665. }
  21666. }
  21667. }
  21668. /***/ }),
  21669. /* 198 */
  21670. /***/ (function(module, exports, __webpack_require__) {
  21671. var cof = __webpack_require__(27);
  21672. module.exports = function (it, msg) {
  21673. if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);
  21674. return +it;
  21675. };
  21676. /***/ }),
  21677. /* 199 */
  21678. /***/ (function(module, exports, __webpack_require__) {
  21679. "use strict";
  21680. // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
  21681. var toObject = __webpack_require__(14);
  21682. var toAbsoluteIndex = __webpack_require__(57);
  21683. var toLength = __webpack_require__(11);
  21684. module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
  21685. var O = toObject(this);
  21686. var len = toLength(O.length);
  21687. var to = toAbsoluteIndex(target, len);
  21688. var from = toAbsoluteIndex(start, len);
  21689. var end = arguments.length > 2 ? arguments[2] : undefined;
  21690. var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
  21691. var inc = 1;
  21692. if (from < to && to < from + count) {
  21693. inc = -1;
  21694. from += count - 1;
  21695. to += count - 1;
  21696. }
  21697. while (count-- > 0) {
  21698. if (from in O) O[to] = O[from];
  21699. else delete O[to];
  21700. to += inc;
  21701. from += inc;
  21702. } return O;
  21703. };
  21704. /***/ }),
  21705. /* 200 */
  21706. /***/ (function(module, exports, __webpack_require__) {
  21707. var forOf = __webpack_require__(49);
  21708. module.exports = function (iter, ITERATOR) {
  21709. var result = [];
  21710. forOf(iter, false, result.push, result, ITERATOR);
  21711. return result;
  21712. };
  21713. /***/ }),
  21714. /* 201 */
  21715. /***/ (function(module, exports, __webpack_require__) {
  21716. var aFunction = __webpack_require__(15);
  21717. var toObject = __webpack_require__(14);
  21718. var IObject = __webpack_require__(72);
  21719. var toLength = __webpack_require__(11);
  21720. module.exports = function (that, callbackfn, aLen, memo, isRight) {
  21721. aFunction(callbackfn);
  21722. var O = toObject(that);
  21723. var self = IObject(O);
  21724. var length = toLength(O.length);
  21725. var index = isRight ? length - 1 : 0;
  21726. var i = isRight ? -1 : 1;
  21727. if (aLen < 2) for (;;) {
  21728. if (index in self) {
  21729. memo = self[index];
  21730. index += i;
  21731. break;
  21732. }
  21733. index += i;
  21734. if (isRight ? index < 0 : length <= index) {
  21735. throw TypeError('Reduce of empty array with no initial value');
  21736. }
  21737. }
  21738. for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {
  21739. memo = callbackfn(memo, self[index], index, O);
  21740. }
  21741. return memo;
  21742. };
  21743. /***/ }),
  21744. /* 202 */
  21745. /***/ (function(module, exports, __webpack_require__) {
  21746. "use strict";
  21747. var aFunction = __webpack_require__(15);
  21748. var isObject = __webpack_require__(5);
  21749. var invoke = __webpack_require__(208);
  21750. var arraySlice = [].slice;
  21751. var factories = {};
  21752. var construct = function (F, len, args) {
  21753. if (!(len in factories)) {
  21754. for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';
  21755. // eslint-disable-next-line no-new-func
  21756. factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');
  21757. } return factories[len](F, args);
  21758. };
  21759. module.exports = Function.bind || function bind(that /* , ...args */) {
  21760. var fn = aFunction(this);
  21761. var partArgs = arraySlice.call(arguments, 1);
  21762. var bound = function (/* args... */) {
  21763. var args = partArgs.concat(arraySlice.call(arguments));
  21764. return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
  21765. };
  21766. if (isObject(fn.prototype)) bound.prototype = fn.prototype;
  21767. return bound;
  21768. };
  21769. /***/ }),
  21770. /* 203 */
  21771. /***/ (function(module, exports, __webpack_require__) {
  21772. "use strict";
  21773. var dP = __webpack_require__(10).f;
  21774. var create = __webpack_require__(51);
  21775. var redefineAll = __webpack_require__(55);
  21776. var ctx = __webpack_require__(28);
  21777. var anInstance = __webpack_require__(48);
  21778. var forOf = __webpack_require__(49);
  21779. var $iterDefine = __webpack_require__(138);
  21780. var step = __webpack_require__(211);
  21781. var setSpecies = __webpack_require__(56);
  21782. var DESCRIPTORS = __webpack_require__(9);
  21783. var fastKey = __webpack_require__(44).fastKey;
  21784. var validate = __webpack_require__(66);
  21785. var SIZE = DESCRIPTORS ? '_s' : 'size';
  21786. var getEntry = function (that, key) {
  21787. // fast case
  21788. var index = fastKey(key);
  21789. var entry;
  21790. if (index !== 'F') return that._i[index];
  21791. // frozen object case
  21792. for (entry = that._f; entry; entry = entry.n) {
  21793. if (entry.k == key) return entry;
  21794. }
  21795. };
  21796. module.exports = {
  21797. getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
  21798. var C = wrapper(function (that, iterable) {
  21799. anInstance(that, C, NAME, '_i');
  21800. that._t = NAME; // collection type
  21801. that._i = create(null); // index
  21802. that._f = undefined; // first entry
  21803. that._l = undefined; // last entry
  21804. that[SIZE] = 0; // size
  21805. if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
  21806. });
  21807. redefineAll(C.prototype, {
  21808. // 23.1.3.1 Map.prototype.clear()
  21809. // 23.2.3.2 Set.prototype.clear()
  21810. clear: function clear() {
  21811. for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
  21812. entry.r = true;
  21813. if (entry.p) entry.p = entry.p.n = undefined;
  21814. delete data[entry.i];
  21815. }
  21816. that._f = that._l = undefined;
  21817. that[SIZE] = 0;
  21818. },
  21819. // 23.1.3.3 Map.prototype.delete(key)
  21820. // 23.2.3.4 Set.prototype.delete(value)
  21821. 'delete': function (key) {
  21822. var that = validate(this, NAME);
  21823. var entry = getEntry(that, key);
  21824. if (entry) {
  21825. var next = entry.n;
  21826. var prev = entry.p;
  21827. delete that._i[entry.i];
  21828. entry.r = true;
  21829. if (prev) prev.n = next;
  21830. if (next) next.p = prev;
  21831. if (that._f == entry) that._f = next;
  21832. if (that._l == entry) that._l = prev;
  21833. that[SIZE]--;
  21834. } return !!entry;
  21835. },
  21836. // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
  21837. // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
  21838. forEach: function forEach(callbackfn /* , that = undefined */) {
  21839. validate(this, NAME);
  21840. var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
  21841. var entry;
  21842. while (entry = entry ? entry.n : this._f) {
  21843. f(entry.v, entry.k, this);
  21844. // revert to the last existing entry
  21845. while (entry && entry.r) entry = entry.p;
  21846. }
  21847. },
  21848. // 23.1.3.7 Map.prototype.has(key)
  21849. // 23.2.3.7 Set.prototype.has(value)
  21850. has: function has(key) {
  21851. return !!getEntry(validate(this, NAME), key);
  21852. }
  21853. });
  21854. if (DESCRIPTORS) dP(C.prototype, 'size', {
  21855. get: function () {
  21856. return validate(this, NAME)[SIZE];
  21857. }
  21858. });
  21859. return C;
  21860. },
  21861. def: function (that, key, value) {
  21862. var entry = getEntry(that, key);
  21863. var prev, index;
  21864. // change existing entry
  21865. if (entry) {
  21866. entry.v = value;
  21867. // create new entry
  21868. } else {
  21869. that._l = entry = {
  21870. i: index = fastKey(key, true), // <- index
  21871. k: key, // <- key
  21872. v: value, // <- value
  21873. p: prev = that._l, // <- previous entry
  21874. n: undefined, // <- next entry
  21875. r: false // <- removed
  21876. };
  21877. if (!that._f) that._f = entry;
  21878. if (prev) prev.n = entry;
  21879. that[SIZE]++;
  21880. // add to index
  21881. if (index !== 'F') that._i[index] = entry;
  21882. } return that;
  21883. },
  21884. getEntry: getEntry,
  21885. setStrong: function (C, NAME, IS_MAP) {
  21886. // add .keys, .values, .entries, [@@iterator]
  21887. // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
  21888. $iterDefine(C, NAME, function (iterated, kind) {
  21889. this._t = validate(iterated, NAME); // target
  21890. this._k = kind; // kind
  21891. this._l = undefined; // previous
  21892. }, function () {
  21893. var that = this;
  21894. var kind = that._k;
  21895. var entry = that._l;
  21896. // revert to the last existing entry
  21897. while (entry && entry.r) entry = entry.p;
  21898. // get next entry
  21899. if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
  21900. // or finish the iteration
  21901. that._t = undefined;
  21902. return step(1);
  21903. }
  21904. // return step by kind
  21905. if (kind == 'keys') return step(0, entry.k);
  21906. if (kind == 'values') return step(0, entry.v);
  21907. return step(0, [entry.k, entry.v]);
  21908. }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
  21909. // add [@@species], 23.1.2.2, 23.2.2.2
  21910. setSpecies(NAME);
  21911. }
  21912. };
  21913. /***/ }),
  21914. /* 204 */
  21915. /***/ (function(module, exports, __webpack_require__) {
  21916. // https://github.com/DavidBruant/Map-Set.prototype.toJSON
  21917. var classof = __webpack_require__(71);
  21918. var from = __webpack_require__(200);
  21919. module.exports = function (NAME) {
  21920. return function toJSON() {
  21921. if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic");
  21922. return from(this);
  21923. };
  21924. };
  21925. /***/ }),
  21926. /* 205 */
  21927. /***/ (function(module, exports, __webpack_require__) {
  21928. "use strict";
  21929. var redefineAll = __webpack_require__(55);
  21930. var getWeak = __webpack_require__(44).getWeak;
  21931. var anObject = __webpack_require__(2);
  21932. var isObject = __webpack_require__(5);
  21933. var anInstance = __webpack_require__(48);
  21934. var forOf = __webpack_require__(49);
  21935. var createArrayMethod = __webpack_require__(32);
  21936. var $has = __webpack_require__(18);
  21937. var validate = __webpack_require__(66);
  21938. var arrayFind = createArrayMethod(5);
  21939. var arrayFindIndex = createArrayMethod(6);
  21940. var id = 0;
  21941. // fallback for uncaught frozen keys
  21942. var uncaughtFrozenStore = function (that) {
  21943. return that._l || (that._l = new UncaughtFrozenStore());
  21944. };
  21945. var UncaughtFrozenStore = function () {
  21946. this.a = [];
  21947. };
  21948. var findUncaughtFrozen = function (store, key) {
  21949. return arrayFind(store.a, function (it) {
  21950. return it[0] === key;
  21951. });
  21952. };
  21953. UncaughtFrozenStore.prototype = {
  21954. get: function (key) {
  21955. var entry = findUncaughtFrozen(this, key);
  21956. if (entry) return entry[1];
  21957. },
  21958. has: function (key) {
  21959. return !!findUncaughtFrozen(this, key);
  21960. },
  21961. set: function (key, value) {
  21962. var entry = findUncaughtFrozen(this, key);
  21963. if (entry) entry[1] = value;
  21964. else this.a.push([key, value]);
  21965. },
  21966. 'delete': function (key) {
  21967. var index = arrayFindIndex(this.a, function (it) {
  21968. return it[0] === key;
  21969. });
  21970. if (~index) this.a.splice(index, 1);
  21971. return !!~index;
  21972. }
  21973. };
  21974. module.exports = {
  21975. getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
  21976. var C = wrapper(function (that, iterable) {
  21977. anInstance(that, C, NAME, '_i');
  21978. that._t = NAME; // collection type
  21979. that._i = id++; // collection id
  21980. that._l = undefined; // leak store for uncaught frozen objects
  21981. if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
  21982. });
  21983. redefineAll(C.prototype, {
  21984. // 23.3.3.2 WeakMap.prototype.delete(key)
  21985. // 23.4.3.3 WeakSet.prototype.delete(value)
  21986. 'delete': function (key) {
  21987. if (!isObject(key)) return false;
  21988. var data = getWeak(key);
  21989. if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);
  21990. return data && $has(data, this._i) && delete data[this._i];
  21991. },
  21992. // 23.3.3.4 WeakMap.prototype.has(key)
  21993. // 23.4.3.4 WeakSet.prototype.has(value)
  21994. has: function has(key) {
  21995. if (!isObject(key)) return false;
  21996. var data = getWeak(key);
  21997. if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);
  21998. return data && $has(data, this._i);
  21999. }
  22000. });
  22001. return C;
  22002. },
  22003. def: function (that, key, value) {
  22004. var data = getWeak(anObject(key), true);
  22005. if (data === true) uncaughtFrozenStore(that).set(key, value);
  22006. else data[that._i] = value;
  22007. return that;
  22008. },
  22009. ufstore: uncaughtFrozenStore
  22010. };
  22011. /***/ }),
  22012. /* 206 */
  22013. /***/ (function(module, exports, __webpack_require__) {
  22014. "use strict";
  22015. // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray
  22016. var isArray = __webpack_require__(91);
  22017. var isObject = __webpack_require__(5);
  22018. var toLength = __webpack_require__(11);
  22019. var ctx = __webpack_require__(28);
  22020. var IS_CONCAT_SPREADABLE = __webpack_require__(6)('isConcatSpreadable');
  22021. function flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {
  22022. var targetIndex = start;
  22023. var sourceIndex = 0;
  22024. var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;
  22025. var element, spreadable;
  22026. while (sourceIndex < sourceLen) {
  22027. if (sourceIndex in source) {
  22028. element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];
  22029. spreadable = false;
  22030. if (isObject(element)) {
  22031. spreadable = element[IS_CONCAT_SPREADABLE];
  22032. spreadable = spreadable !== undefined ? !!spreadable : isArray(element);
  22033. }
  22034. if (spreadable && depth > 0) {
  22035. targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;
  22036. } else {
  22037. if (targetIndex >= 0x1fffffffffffff) throw TypeError();
  22038. target[targetIndex] = element;
  22039. }
  22040. targetIndex++;
  22041. }
  22042. sourceIndex++;
  22043. }
  22044. return targetIndex;
  22045. }
  22046. module.exports = flattenIntoArray;
  22047. /***/ }),
  22048. /* 207 */
  22049. /***/ (function(module, exports, __webpack_require__) {
  22050. module.exports = !__webpack_require__(9) && !__webpack_require__(4)(function () {
  22051. return Object.defineProperty(__webpack_require__(131)('div'), 'a', { get: function () { return 7; } }).a != 7;
  22052. });
  22053. /***/ }),
  22054. /* 208 */
  22055. /***/ (function(module, exports) {
  22056. // fast apply, http://jsperf.lnkit.com/fast-apply/5
  22057. module.exports = function (fn, args, that) {
  22058. var un = that === undefined;
  22059. switch (args.length) {
  22060. case 0: return un ? fn()
  22061. : fn.call(that);
  22062. case 1: return un ? fn(args[0])
  22063. : fn.call(that, args[0]);
  22064. case 2: return un ? fn(args[0], args[1])
  22065. : fn.call(that, args[0], args[1]);
  22066. case 3: return un ? fn(args[0], args[1], args[2])
  22067. : fn.call(that, args[0], args[1], args[2]);
  22068. case 4: return un ? fn(args[0], args[1], args[2], args[3])
  22069. : fn.call(that, args[0], args[1], args[2], args[3]);
  22070. } return fn.apply(that, args);
  22071. };
  22072. /***/ }),
  22073. /* 209 */
  22074. /***/ (function(module, exports, __webpack_require__) {
  22075. // 20.1.2.3 Number.isInteger(number)
  22076. var isObject = __webpack_require__(5);
  22077. var floor = Math.floor;
  22078. module.exports = function isInteger(it) {
  22079. return !isObject(it) && isFinite(it) && floor(it) === it;
  22080. };
  22081. /***/ }),
  22082. /* 210 */
  22083. /***/ (function(module, exports, __webpack_require__) {
  22084. // call something on iterator step with safe closing on error
  22085. var anObject = __webpack_require__(2);
  22086. module.exports = function (iterator, fn, value, entries) {
  22087. try {
  22088. return entries ? fn(anObject(value)[0], value[1]) : fn(value);
  22089. // 7.4.6 IteratorClose(iterator, completion)
  22090. } catch (e) {
  22091. var ret = iterator['return'];
  22092. if (ret !== undefined) anObject(ret.call(iterator));
  22093. throw e;
  22094. }
  22095. };
  22096. /***/ }),
  22097. /* 211 */
  22098. /***/ (function(module, exports) {
  22099. module.exports = function (done, value) {
  22100. return { value: value, done: !!done };
  22101. };
  22102. /***/ }),
  22103. /* 212 */
  22104. /***/ (function(module, exports, __webpack_require__) {
  22105. // 20.2.2.16 Math.fround(x)
  22106. var sign = __webpack_require__(140);
  22107. var pow = Math.pow;
  22108. var EPSILON = pow(2, -52);
  22109. var EPSILON32 = pow(2, -23);
  22110. var MAX32 = pow(2, 127) * (2 - EPSILON32);
  22111. var MIN32 = pow(2, -126);
  22112. var roundTiesToEven = function (n) {
  22113. return n + 1 / EPSILON - 1 / EPSILON;
  22114. };
  22115. module.exports = Math.fround || function fround(x) {
  22116. var $abs = Math.abs(x);
  22117. var $sign = sign(x);
  22118. var a, result;
  22119. if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
  22120. a = (1 + EPSILON32 / EPSILON) * $abs;
  22121. result = a - (a - $abs);
  22122. // eslint-disable-next-line no-self-compare
  22123. if (result > MAX32 || result != result) return $sign * Infinity;
  22124. return $sign * result;
  22125. };
  22126. /***/ }),
  22127. /* 213 */
  22128. /***/ (function(module, exports) {
  22129. // 20.2.2.20 Math.log1p(x)
  22130. module.exports = Math.log1p || function log1p(x) {
  22131. return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
  22132. };
  22133. /***/ }),
  22134. /* 214 */
  22135. /***/ (function(module, exports) {
  22136. // https://rwaldron.github.io/proposal-math-extensions/
  22137. module.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {
  22138. if (
  22139. arguments.length === 0
  22140. // eslint-disable-next-line no-self-compare
  22141. || x != x
  22142. // eslint-disable-next-line no-self-compare
  22143. || inLow != inLow
  22144. // eslint-disable-next-line no-self-compare
  22145. || inHigh != inHigh
  22146. // eslint-disable-next-line no-self-compare
  22147. || outLow != outLow
  22148. // eslint-disable-next-line no-self-compare
  22149. || outHigh != outHigh
  22150. ) return NaN;
  22151. if (x === Infinity || x === -Infinity) return x;
  22152. return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;
  22153. };
  22154. /***/ }),
  22155. /* 215 */
  22156. /***/ (function(module, exports, __webpack_require__) {
  22157. "use strict";
  22158. // 19.1.2.1 Object.assign(target, source, ...)
  22159. var getKeys = __webpack_require__(53);
  22160. var gOPS = __webpack_require__(95);
  22161. var pIE = __webpack_require__(73);
  22162. var toObject = __webpack_require__(14);
  22163. var IObject = __webpack_require__(72);
  22164. var $assign = Object.assign;
  22165. // should work with symbols and should have deterministic property order (V8 bug)
  22166. module.exports = !$assign || __webpack_require__(4)(function () {
  22167. var A = {};
  22168. var B = {};
  22169. // eslint-disable-next-line no-undef
  22170. var S = Symbol();
  22171. var K = 'abcdefghijklmnopqrst';
  22172. A[S] = 7;
  22173. K.split('').forEach(function (k) { B[k] = k; });
  22174. return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
  22175. }) ? function assign(target, source) { // eslint-disable-line no-unused-vars
  22176. var T = toObject(target);
  22177. var aLen = arguments.length;
  22178. var index = 1;
  22179. var getSymbols = gOPS.f;
  22180. var isEnum = pIE.f;
  22181. while (aLen > index) {
  22182. var S = IObject(arguments[index++]);
  22183. var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
  22184. var length = keys.length;
  22185. var j = 0;
  22186. var key;
  22187. while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
  22188. } return T;
  22189. } : $assign;
  22190. /***/ }),
  22191. /* 216 */
  22192. /***/ (function(module, exports, __webpack_require__) {
  22193. var dP = __webpack_require__(10);
  22194. var anObject = __webpack_require__(2);
  22195. var getKeys = __webpack_require__(53);
  22196. module.exports = __webpack_require__(9) ? Object.defineProperties : function defineProperties(O, Properties) {
  22197. anObject(O);
  22198. var keys = getKeys(Properties);
  22199. var length = keys.length;
  22200. var i = 0;
  22201. var P;
  22202. while (length > i) dP.f(O, P = keys[i++], Properties[P]);
  22203. return O;
  22204. };
  22205. /***/ }),
  22206. /* 217 */
  22207. /***/ (function(module, exports, __webpack_require__) {
  22208. // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
  22209. var toIObject = __webpack_require__(24);
  22210. var gOPN = __webpack_require__(52).f;
  22211. var toString = {}.toString;
  22212. var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
  22213. ? Object.getOwnPropertyNames(window) : [];
  22214. var getWindowNames = function (it) {
  22215. try {
  22216. return gOPN(it);
  22217. } catch (e) {
  22218. return windowNames.slice();
  22219. }
  22220. };
  22221. module.exports.f = function getOwnPropertyNames(it) {
  22222. return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
  22223. };
  22224. /***/ }),
  22225. /* 218 */
  22226. /***/ (function(module, exports, __webpack_require__) {
  22227. var has = __webpack_require__(18);
  22228. var toIObject = __webpack_require__(24);
  22229. var arrayIndexOf = __webpack_require__(87)(false);
  22230. var IE_PROTO = __webpack_require__(144)('IE_PROTO');
  22231. module.exports = function (object, names) {
  22232. var O = toIObject(object);
  22233. var i = 0;
  22234. var result = [];
  22235. var key;
  22236. for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
  22237. // Don't enum bug & hidden keys
  22238. while (names.length > i) if (has(O, key = names[i++])) {
  22239. ~arrayIndexOf(result, key) || result.push(key);
  22240. }
  22241. return result;
  22242. };
  22243. /***/ }),
  22244. /* 219 */
  22245. /***/ (function(module, exports, __webpack_require__) {
  22246. var getKeys = __webpack_require__(53);
  22247. var toIObject = __webpack_require__(24);
  22248. var isEnum = __webpack_require__(73).f;
  22249. module.exports = function (isEntries) {
  22250. return function (it) {
  22251. var O = toIObject(it);
  22252. var keys = getKeys(O);
  22253. var length = keys.length;
  22254. var i = 0;
  22255. var result = [];
  22256. var key;
  22257. while (length > i) if (isEnum.call(O, key = keys[i++])) {
  22258. result.push(isEntries ? [key, O[key]] : O[key]);
  22259. } return result;
  22260. };
  22261. };
  22262. /***/ }),
  22263. /* 220 */
  22264. /***/ (function(module, exports, __webpack_require__) {
  22265. // all object keys, includes non-enumerable and symbols
  22266. var gOPN = __webpack_require__(52);
  22267. var gOPS = __webpack_require__(95);
  22268. var anObject = __webpack_require__(2);
  22269. var Reflect = __webpack_require__(3).Reflect;
  22270. module.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {
  22271. var keys = gOPN.f(anObject(it));
  22272. var getSymbols = gOPS.f;
  22273. return getSymbols ? keys.concat(getSymbols(it)) : keys;
  22274. };
  22275. /***/ }),
  22276. /* 221 */
  22277. /***/ (function(module, exports, __webpack_require__) {
  22278. var $parseFloat = __webpack_require__(3).parseFloat;
  22279. var $trim = __webpack_require__(65).trim;
  22280. module.exports = 1 / $parseFloat(__webpack_require__(148) + '-0') !== -Infinity ? function parseFloat(str) {
  22281. var string = $trim(String(str), 3);
  22282. var result = $parseFloat(string);
  22283. return result === 0 && string.charAt(0) == '-' ? -0 : result;
  22284. } : $parseFloat;
  22285. /***/ }),
  22286. /* 222 */
  22287. /***/ (function(module, exports, __webpack_require__) {
  22288. var $parseInt = __webpack_require__(3).parseInt;
  22289. var $trim = __webpack_require__(65).trim;
  22290. var ws = __webpack_require__(148);
  22291. var hex = /^[-+]?0[xX]/;
  22292. module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {
  22293. var string = $trim(String(str), 3);
  22294. return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));
  22295. } : $parseInt;
  22296. /***/ }),
  22297. /* 223 */
  22298. /***/ (function(module, exports) {
  22299. module.exports = function (exec) {
  22300. try {
  22301. return { e: false, v: exec() };
  22302. } catch (e) {
  22303. return { e: true, v: e };
  22304. }
  22305. };
  22306. /***/ }),
  22307. /* 224 */
  22308. /***/ (function(module, exports, __webpack_require__) {
  22309. var anObject = __webpack_require__(2);
  22310. var isObject = __webpack_require__(5);
  22311. var newPromiseCapability = __webpack_require__(142);
  22312. module.exports = function (C, x) {
  22313. anObject(C);
  22314. if (isObject(x) && x.constructor === C) return x;
  22315. var promiseCapability = newPromiseCapability.f(C);
  22316. var resolve = promiseCapability.resolve;
  22317. resolve(x);
  22318. return promiseCapability.promise;
  22319. };
  22320. /***/ }),
  22321. /* 225 */
  22322. /***/ (function(module, exports, __webpack_require__) {
  22323. // https://github.com/tc39/proposal-string-pad-start-end
  22324. var toLength = __webpack_require__(11);
  22325. var repeat = __webpack_require__(147);
  22326. var defined = __webpack_require__(34);
  22327. module.exports = function (that, maxLength, fillString, left) {
  22328. var S = String(defined(that));
  22329. var stringLength = S.length;
  22330. var fillStr = fillString === undefined ? ' ' : String(fillString);
  22331. var intMaxLength = toLength(maxLength);
  22332. if (intMaxLength <= stringLength || fillStr == '') return S;
  22333. var fillLen = intMaxLength - stringLength;
  22334. var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
  22335. if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
  22336. return left ? stringFiller + S : S + stringFiller;
  22337. };
  22338. /***/ }),
  22339. /* 226 */
  22340. /***/ (function(module, exports, __webpack_require__) {
  22341. // https://tc39.github.io/ecma262/#sec-toindex
  22342. var toInteger = __webpack_require__(36);
  22343. var toLength = __webpack_require__(11);
  22344. module.exports = function (it) {
  22345. if (it === undefined) return 0;
  22346. var number = toInteger(it);
  22347. var length = toLength(number);
  22348. if (number !== length) throw RangeError('Wrong length!');
  22349. return length;
  22350. };
  22351. /***/ }),
  22352. /* 227 */
  22353. /***/ (function(module, exports, __webpack_require__) {
  22354. exports.f = __webpack_require__(6);
  22355. /***/ }),
  22356. /* 228 */
  22357. /***/ (function(module, exports, __webpack_require__) {
  22358. "use strict";
  22359. var strong = __webpack_require__(203);
  22360. var validate = __webpack_require__(66);
  22361. var MAP = 'Map';
  22362. // 23.1 Map Objects
  22363. module.exports = __webpack_require__(88)(MAP, function (get) {
  22364. return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
  22365. }, {
  22366. // 23.1.3.6 Map.prototype.get(key)
  22367. get: function get(key) {
  22368. var entry = strong.getEntry(validate(this, MAP), key);
  22369. return entry && entry.v;
  22370. },
  22371. // 23.1.3.9 Map.prototype.set(key, value)
  22372. set: function set(key, value) {
  22373. return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);
  22374. }
  22375. }, strong, true);
  22376. /***/ }),
  22377. /* 229 */
  22378. /***/ (function(module, exports, __webpack_require__) {
  22379. // 21.2.5.3 get RegExp.prototype.flags()
  22380. if (__webpack_require__(9) && /./g.flags != 'g') __webpack_require__(10).f(RegExp.prototype, 'flags', {
  22381. configurable: true,
  22382. get: __webpack_require__(90)
  22383. });
  22384. /***/ }),
  22385. /* 230 */
  22386. /***/ (function(module, exports, __webpack_require__) {
  22387. "use strict";
  22388. var strong = __webpack_require__(203);
  22389. var validate = __webpack_require__(66);
  22390. var SET = 'Set';
  22391. // 23.2 Set Objects
  22392. module.exports = __webpack_require__(88)(SET, function (get) {
  22393. return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
  22394. }, {
  22395. // 23.2.3.1 Set.prototype.add(value)
  22396. add: function add(value) {
  22397. return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);
  22398. }
  22399. }, strong);
  22400. /***/ }),
  22401. /* 231 */
  22402. /***/ (function(module, exports, __webpack_require__) {
  22403. "use strict";
  22404. var each = __webpack_require__(32)(0);
  22405. var redefine = __webpack_require__(20);
  22406. var meta = __webpack_require__(44);
  22407. var assign = __webpack_require__(215);
  22408. var weak = __webpack_require__(205);
  22409. var isObject = __webpack_require__(5);
  22410. var fails = __webpack_require__(4);
  22411. var validate = __webpack_require__(66);
  22412. var WEAK_MAP = 'WeakMap';
  22413. var getWeak = meta.getWeak;
  22414. var isExtensible = Object.isExtensible;
  22415. var uncaughtFrozenStore = weak.ufstore;
  22416. var tmp = {};
  22417. var InternalMap;
  22418. var wrapper = function (get) {
  22419. return function WeakMap() {
  22420. return get(this, arguments.length > 0 ? arguments[0] : undefined);
  22421. };
  22422. };
  22423. var methods = {
  22424. // 23.3.3.3 WeakMap.prototype.get(key)
  22425. get: function get(key) {
  22426. if (isObject(key)) {
  22427. var data = getWeak(key);
  22428. if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);
  22429. return data ? data[this._i] : undefined;
  22430. }
  22431. },
  22432. // 23.3.3.5 WeakMap.prototype.set(key, value)
  22433. set: function set(key, value) {
  22434. return weak.def(validate(this, WEAK_MAP), key, value);
  22435. }
  22436. };
  22437. // 23.3 WeakMap Objects
  22438. var $WeakMap = module.exports = __webpack_require__(88)(WEAK_MAP, wrapper, methods, weak, true, true);
  22439. // IE11 WeakMap frozen keys fix
  22440. if (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {
  22441. InternalMap = weak.getConstructor(wrapper, WEAK_MAP);
  22442. assign(InternalMap.prototype, methods);
  22443. meta.NEED = true;
  22444. each(['delete', 'has', 'get', 'set'], function (key) {
  22445. var proto = $WeakMap.prototype;
  22446. var method = proto[key];
  22447. redefine(proto, key, function (a, b) {
  22448. // store frozen objects on internal weakmap shim
  22449. if (isObject(a) && !isExtensible(a)) {
  22450. if (!this._f) this._f = new InternalMap();
  22451. var result = this._f[key](a, b);
  22452. return key == 'set' ? this : result;
  22453. // store all the rest on native weakmap
  22454. } return method.call(this, a, b);
  22455. });
  22456. });
  22457. }
  22458. /***/ }),
  22459. /* 232 */
  22460. /***/ (function(module, exports, __webpack_require__) {
  22461. "use strict";
  22462. module.exports = earcut;
  22463. module.exports.default = earcut;
  22464. function earcut(data, holeIndices, dim) {
  22465. dim = dim || 2;
  22466. var hasHoles = holeIndices && holeIndices.length,
  22467. outerLen = hasHoles ? holeIndices[0] * dim : data.length,
  22468. outerNode = linkedList(data, 0, outerLen, dim, true),
  22469. triangles = [];
  22470. if (!outerNode) return triangles;
  22471. var minX, minY, maxX, maxY, x, y, invSize;
  22472. if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);
  22473. // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
  22474. if (data.length > 80 * dim) {
  22475. minX = maxX = data[0];
  22476. minY = maxY = data[1];
  22477. for (var i = dim; i < outerLen; i += dim) {
  22478. x = data[i];
  22479. y = data[i + 1];
  22480. if (x < minX) minX = x;
  22481. if (y < minY) minY = y;
  22482. if (x > maxX) maxX = x;
  22483. if (y > maxY) maxY = y;
  22484. }
  22485. // minX, minY and invSize are later used to transform coords into integers for z-order calculation
  22486. invSize = Math.max(maxX - minX, maxY - minY);
  22487. invSize = invSize !== 0 ? 1 / invSize : 0;
  22488. }
  22489. earcutLinked(outerNode, triangles, dim, minX, minY, invSize);
  22490. return triangles;
  22491. }
  22492. // create a circular doubly linked list from polygon points in the specified winding order
  22493. function linkedList(data, start, end, dim, clockwise) {
  22494. var i, last;
  22495. if (clockwise === (signedArea(data, start, end, dim) > 0)) {
  22496. for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);
  22497. } else {
  22498. for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);
  22499. }
  22500. if (last && equals(last, last.next)) {
  22501. removeNode(last);
  22502. last = last.next;
  22503. }
  22504. return last;
  22505. }
  22506. // eliminate colinear or duplicate points
  22507. function filterPoints(start, end) {
  22508. if (!start) return start;
  22509. if (!end) end = start;
  22510. var p = start,
  22511. again;
  22512. do {
  22513. again = false;
  22514. if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {
  22515. removeNode(p);
  22516. p = end = p.prev;
  22517. if (p === p.next) break;
  22518. again = true;
  22519. } else {
  22520. p = p.next;
  22521. }
  22522. } while (again || p !== end);
  22523. return end;
  22524. }
  22525. // main ear slicing loop which triangulates a polygon (given as a linked list)
  22526. function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {
  22527. if (!ear) return;
  22528. // interlink polygon nodes in z-order
  22529. if (!pass && invSize) indexCurve(ear, minX, minY, invSize);
  22530. var stop = ear,
  22531. prev, next;
  22532. // iterate through ears, slicing them one by one
  22533. while (ear.prev !== ear.next) {
  22534. prev = ear.prev;
  22535. next = ear.next;
  22536. if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {
  22537. // cut off the triangle
  22538. triangles.push(prev.i / dim);
  22539. triangles.push(ear.i / dim);
  22540. triangles.push(next.i / dim);
  22541. removeNode(ear);
  22542. // skipping the next vertice leads to less sliver triangles
  22543. ear = next.next;
  22544. stop = next.next;
  22545. continue;
  22546. }
  22547. ear = next;
  22548. // if we looped through the whole remaining polygon and can't find any more ears
  22549. if (ear === stop) {
  22550. // try filtering points and slicing again
  22551. if (!pass) {
  22552. earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);
  22553. // if this didn't work, try curing all small self-intersections locally
  22554. } else if (pass === 1) {
  22555. ear = cureLocalIntersections(ear, triangles, dim);
  22556. earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);
  22557. // as a last resort, try splitting the remaining polygon into two
  22558. } else if (pass === 2) {
  22559. splitEarcut(ear, triangles, dim, minX, minY, invSize);
  22560. }
  22561. break;
  22562. }
  22563. }
  22564. }
  22565. // check whether a polygon node forms a valid ear with adjacent nodes
  22566. function isEar(ear) {
  22567. var a = ear.prev,
  22568. b = ear,
  22569. c = ear.next;
  22570. if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
  22571. // now make sure we don't have other points inside the potential ear
  22572. var p = ear.next.next;
  22573. while (p !== ear.prev) {
  22574. if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
  22575. area(p.prev, p, p.next) >= 0) return false;
  22576. p = p.next;
  22577. }
  22578. return true;
  22579. }
  22580. function isEarHashed(ear, minX, minY, invSize) {
  22581. var a = ear.prev,
  22582. b = ear,
  22583. c = ear.next;
  22584. if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
  22585. // triangle bbox; min & max are calculated like this for speed
  22586. var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),
  22587. minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),
  22588. maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),
  22589. maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);
  22590. // z-order range for the current triangle bbox;
  22591. var minZ = zOrder(minTX, minTY, minX, minY, invSize),
  22592. maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);
  22593. var p = ear.prevZ,
  22594. n = ear.nextZ;
  22595. // look for points inside the triangle in both directions
  22596. while (p && p.z >= minZ && n && n.z <= maxZ) {
  22597. if (p !== ear.prev && p !== ear.next &&
  22598. pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
  22599. area(p.prev, p, p.next) >= 0) return false;
  22600. p = p.prevZ;
  22601. if (n !== ear.prev && n !== ear.next &&
  22602. pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&
  22603. area(n.prev, n, n.next) >= 0) return false;
  22604. n = n.nextZ;
  22605. }
  22606. // look for remaining points in decreasing z-order
  22607. while (p && p.z >= minZ) {
  22608. if (p !== ear.prev && p !== ear.next &&
  22609. pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&
  22610. area(p.prev, p, p.next) >= 0) return false;
  22611. p = p.prevZ;
  22612. }
  22613. // look for remaining points in increasing z-order
  22614. while (n && n.z <= maxZ) {
  22615. if (n !== ear.prev && n !== ear.next &&
  22616. pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&
  22617. area(n.prev, n, n.next) >= 0) return false;
  22618. n = n.nextZ;
  22619. }
  22620. return true;
  22621. }
  22622. // go through all polygon nodes and cure small local self-intersections
  22623. function cureLocalIntersections(start, triangles, dim) {
  22624. var p = start;
  22625. do {
  22626. var a = p.prev,
  22627. b = p.next.next;
  22628. if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {
  22629. triangles.push(a.i / dim);
  22630. triangles.push(p.i / dim);
  22631. triangles.push(b.i / dim);
  22632. // remove two nodes involved
  22633. removeNode(p);
  22634. removeNode(p.next);
  22635. p = start = b;
  22636. }
  22637. p = p.next;
  22638. } while (p !== start);
  22639. return p;
  22640. }
  22641. // try splitting polygon into two and triangulate them independently
  22642. function splitEarcut(start, triangles, dim, minX, minY, invSize) {
  22643. // look for a valid diagonal that divides the polygon into two
  22644. var a = start;
  22645. do {
  22646. var b = a.next.next;
  22647. while (b !== a.prev) {
  22648. if (a.i !== b.i && isValidDiagonal(a, b)) {
  22649. // split the polygon in two by the diagonal
  22650. var c = splitPolygon(a, b);
  22651. // filter colinear points around the cuts
  22652. a = filterPoints(a, a.next);
  22653. c = filterPoints(c, c.next);
  22654. // run earcut on each half
  22655. earcutLinked(a, triangles, dim, minX, minY, invSize);
  22656. earcutLinked(c, triangles, dim, minX, minY, invSize);
  22657. return;
  22658. }
  22659. b = b.next;
  22660. }
  22661. a = a.next;
  22662. } while (a !== start);
  22663. }
  22664. // link every hole into the outer loop, producing a single-ring polygon without holes
  22665. function eliminateHoles(data, holeIndices, outerNode, dim) {
  22666. var queue = [],
  22667. i, len, start, end, list;
  22668. for (i = 0, len = holeIndices.length; i < len; i++) {
  22669. start = holeIndices[i] * dim;
  22670. end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
  22671. list = linkedList(data, start, end, dim, false);
  22672. if (list === list.next) list.steiner = true;
  22673. queue.push(getLeftmost(list));
  22674. }
  22675. queue.sort(compareX);
  22676. // process holes from left to right
  22677. for (i = 0; i < queue.length; i++) {
  22678. eliminateHole(queue[i], outerNode);
  22679. outerNode = filterPoints(outerNode, outerNode.next);
  22680. }
  22681. return outerNode;
  22682. }
  22683. function compareX(a, b) {
  22684. return a.x - b.x;
  22685. }
  22686. // find a bridge between vertices that connects hole with an outer ring and and link it
  22687. function eliminateHole(hole, outerNode) {
  22688. outerNode = findHoleBridge(hole, outerNode);
  22689. if (outerNode) {
  22690. var b = splitPolygon(outerNode, hole);
  22691. filterPoints(b, b.next);
  22692. }
  22693. }
  22694. // David Eberly's algorithm for finding a bridge between hole and outer polygon
  22695. function findHoleBridge(hole, outerNode) {
  22696. var p = outerNode,
  22697. hx = hole.x,
  22698. hy = hole.y,
  22699. qx = -Infinity,
  22700. m;
  22701. // find a segment intersected by a ray from the hole's leftmost point to the left;
  22702. // segment's endpoint with lesser x will be potential connection point
  22703. do {
  22704. if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {
  22705. var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);
  22706. if (x <= hx && x > qx) {
  22707. qx = x;
  22708. if (x === hx) {
  22709. if (hy === p.y) return p;
  22710. if (hy === p.next.y) return p.next;
  22711. }
  22712. m = p.x < p.next.x ? p : p.next;
  22713. }
  22714. }
  22715. p = p.next;
  22716. } while (p !== outerNode);
  22717. if (!m) return null;
  22718. if (hx === qx) return m.prev; // hole touches outer segment; pick lower endpoint
  22719. // look for points inside the triangle of hole point, segment intersection and endpoint;
  22720. // if there are no points found, we have a valid connection;
  22721. // otherwise choose the point of the minimum angle with the ray as connection point
  22722. var stop = m,
  22723. mx = m.x,
  22724. my = m.y,
  22725. tanMin = Infinity,
  22726. tan;
  22727. p = m.next;
  22728. while (p !== stop) {
  22729. if (hx >= p.x && p.x >= mx && hx !== p.x &&
  22730. pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {
  22731. tan = Math.abs(hy - p.y) / (hx - p.x); // tangential
  22732. if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && locallyInside(p, hole)) {
  22733. m = p;
  22734. tanMin = tan;
  22735. }
  22736. }
  22737. p = p.next;
  22738. }
  22739. return m;
  22740. }
  22741. // interlink polygon nodes in z-order
  22742. function indexCurve(start, minX, minY, invSize) {
  22743. var p = start;
  22744. do {
  22745. if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);
  22746. p.prevZ = p.prev;
  22747. p.nextZ = p.next;
  22748. p = p.next;
  22749. } while (p !== start);
  22750. p.prevZ.nextZ = null;
  22751. p.prevZ = null;
  22752. sortLinked(p);
  22753. }
  22754. // Simon Tatham's linked list merge sort algorithm
  22755. // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
  22756. function sortLinked(list) {
  22757. var i, p, q, e, tail, numMerges, pSize, qSize,
  22758. inSize = 1;
  22759. do {
  22760. p = list;
  22761. list = null;
  22762. tail = null;
  22763. numMerges = 0;
  22764. while (p) {
  22765. numMerges++;
  22766. q = p;
  22767. pSize = 0;
  22768. for (i = 0; i < inSize; i++) {
  22769. pSize++;
  22770. q = q.nextZ;
  22771. if (!q) break;
  22772. }
  22773. qSize = inSize;
  22774. while (pSize > 0 || (qSize > 0 && q)) {
  22775. if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {
  22776. e = p;
  22777. p = p.nextZ;
  22778. pSize--;
  22779. } else {
  22780. e = q;
  22781. q = q.nextZ;
  22782. qSize--;
  22783. }
  22784. if (tail) tail.nextZ = e;
  22785. else list = e;
  22786. e.prevZ = tail;
  22787. tail = e;
  22788. }
  22789. p = q;
  22790. }
  22791. tail.nextZ = null;
  22792. inSize *= 2;
  22793. } while (numMerges > 1);
  22794. return list;
  22795. }
  22796. // z-order of a point given coords and inverse of the longer side of data bbox
  22797. function zOrder(x, y, minX, minY, invSize) {
  22798. // coords are transformed into non-negative 15-bit integer range
  22799. x = 32767 * (x - minX) * invSize;
  22800. y = 32767 * (y - minY) * invSize;
  22801. x = (x | (x << 8)) & 0x00FF00FF;
  22802. x = (x | (x << 4)) & 0x0F0F0F0F;
  22803. x = (x | (x << 2)) & 0x33333333;
  22804. x = (x | (x << 1)) & 0x55555555;
  22805. y = (y | (y << 8)) & 0x00FF00FF;
  22806. y = (y | (y << 4)) & 0x0F0F0F0F;
  22807. y = (y | (y << 2)) & 0x33333333;
  22808. y = (y | (y << 1)) & 0x55555555;
  22809. return x | (y << 1);
  22810. }
  22811. // find the leftmost node of a polygon ring
  22812. function getLeftmost(start) {
  22813. var p = start,
  22814. leftmost = start;
  22815. do {
  22816. if (p.x < leftmost.x) leftmost = p;
  22817. p = p.next;
  22818. } while (p !== start);
  22819. return leftmost;
  22820. }
  22821. // check if a point lies within a convex triangle
  22822. function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {
  22823. return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&
  22824. (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&
  22825. (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
  22826. }
  22827. // check if a diagonal between two polygon nodes is valid (lies in polygon interior)
  22828. function isValidDiagonal(a, b) {
  22829. return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) &&
  22830. locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b);
  22831. }
  22832. // signed area of a triangle
  22833. function area(p, q, r) {
  22834. return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);
  22835. }
  22836. // check if two points are equal
  22837. function equals(p1, p2) {
  22838. return p1.x === p2.x && p1.y === p2.y;
  22839. }
  22840. // check if two segments intersect
  22841. function intersects(p1, q1, p2, q2) {
  22842. if ((equals(p1, q1) && equals(p2, q2)) ||
  22843. (equals(p1, q2) && equals(p2, q1))) return true;
  22844. return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 &&
  22845. area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0;
  22846. }
  22847. // check if a polygon diagonal intersects any polygon segments
  22848. function intersectsPolygon(a, b) {
  22849. var p = a;
  22850. do {
  22851. if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&
  22852. intersects(p, p.next, a, b)) return true;
  22853. p = p.next;
  22854. } while (p !== a);
  22855. return false;
  22856. }
  22857. // check if a polygon diagonal is locally inside the polygon
  22858. function locallyInside(a, b) {
  22859. return area(a.prev, a, a.next) < 0 ?
  22860. area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :
  22861. area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;
  22862. }
  22863. // check if the middle point of a polygon diagonal is inside the polygon
  22864. function middleInside(a, b) {
  22865. var p = a,
  22866. inside = false,
  22867. px = (a.x + b.x) / 2,
  22868. py = (a.y + b.y) / 2;
  22869. do {
  22870. if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&
  22871. (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))
  22872. inside = !inside;
  22873. p = p.next;
  22874. } while (p !== a);
  22875. return inside;
  22876. }
  22877. // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
  22878. // if one belongs to the outer ring and another to a hole, it merges it into a single ring
  22879. function splitPolygon(a, b) {
  22880. var a2 = new Node(a.i, a.x, a.y),
  22881. b2 = new Node(b.i, b.x, b.y),
  22882. an = a.next,
  22883. bp = b.prev;
  22884. a.next = b;
  22885. b.prev = a;
  22886. a2.next = an;
  22887. an.prev = a2;
  22888. b2.next = a2;
  22889. a2.prev = b2;
  22890. bp.next = b2;
  22891. b2.prev = bp;
  22892. return b2;
  22893. }
  22894. // create a node and optionally link it with previous one (in a circular doubly linked list)
  22895. function insertNode(i, x, y, last) {
  22896. var p = new Node(i, x, y);
  22897. if (!last) {
  22898. p.prev = p;
  22899. p.next = p;
  22900. } else {
  22901. p.next = last.next;
  22902. p.prev = last;
  22903. last.next.prev = p;
  22904. last.next = p;
  22905. }
  22906. return p;
  22907. }
  22908. function removeNode(p) {
  22909. p.next.prev = p.prev;
  22910. p.prev.next = p.next;
  22911. if (p.prevZ) p.prevZ.nextZ = p.nextZ;
  22912. if (p.nextZ) p.nextZ.prevZ = p.prevZ;
  22913. }
  22914. function Node(i, x, y) {
  22915. // vertice index in coordinates array
  22916. this.i = i;
  22917. // vertex coordinates
  22918. this.x = x;
  22919. this.y = y;
  22920. // previous and next vertice nodes in a polygon ring
  22921. this.prev = null;
  22922. this.next = null;
  22923. // z-order curve value
  22924. this.z = null;
  22925. // previous and next nodes in z-order
  22926. this.prevZ = null;
  22927. this.nextZ = null;
  22928. // indicates whether this is a steiner point
  22929. this.steiner = false;
  22930. }
  22931. // return a percentage difference between the polygon area and its triangulation area;
  22932. // used to verify correctness of triangulation
  22933. earcut.deviation = function (data, holeIndices, dim, triangles) {
  22934. var hasHoles = holeIndices && holeIndices.length;
  22935. var outerLen = hasHoles ? holeIndices[0] * dim : data.length;
  22936. var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));
  22937. if (hasHoles) {
  22938. for (var i = 0, len = holeIndices.length; i < len; i++) {
  22939. var start = holeIndices[i] * dim;
  22940. var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;
  22941. polygonArea -= Math.abs(signedArea(data, start, end, dim));
  22942. }
  22943. }
  22944. var trianglesArea = 0;
  22945. for (i = 0; i < triangles.length; i += 3) {
  22946. var a = triangles[i] * dim;
  22947. var b = triangles[i + 1] * dim;
  22948. var c = triangles[i + 2] * dim;
  22949. trianglesArea += Math.abs(
  22950. (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -
  22951. (data[a] - data[b]) * (data[c + 1] - data[a + 1]));
  22952. }
  22953. return polygonArea === 0 && trianglesArea === 0 ? 0 :
  22954. Math.abs((trianglesArea - polygonArea) / polygonArea);
  22955. };
  22956. function signedArea(data, start, end, dim) {
  22957. var sum = 0;
  22958. for (var i = start, j = end - dim; i < end; i += dim) {
  22959. sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);
  22960. j = i;
  22961. }
  22962. return sum;
  22963. }
  22964. // turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts
  22965. earcut.flatten = function (data) {
  22966. var dim = data[0][0].length,
  22967. result = {vertices: [], holes: [], dimensions: dim},
  22968. holeIndex = 0;
  22969. for (var i = 0; i < data.length; i++) {
  22970. for (var j = 0; j < data[i].length; j++) {
  22971. for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);
  22972. }
  22973. if (i > 0) {
  22974. holeIndex += data[i - 1].length;
  22975. result.holes.push(holeIndex);
  22976. }
  22977. }
  22978. return result;
  22979. };
  22980. /***/ }),
  22981. /* 233 */
  22982. /***/ (function(module, exports, __webpack_require__) {
  22983. "use strict";
  22984. /* WEBPACK VAR INJECTION */(function(process) {/**
  22985. * Copyright (c) 2013-present, Facebook, Inc.
  22986. *
  22987. * This source code is licensed under the MIT license found in the
  22988. * LICENSE file in the root directory of this source tree.
  22989. *
  22990. */
  22991. var emptyObject = {};
  22992. if (process.env.NODE_ENV !== 'production') {
  22993. Object.freeze(emptyObject);
  22994. }
  22995. module.exports = emptyObject;
  22996. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)))
  22997. /***/ }),
  22998. /* 234 */
  22999. /***/ (function(module, exports) {
  23000. module.exports = ortho;
  23001. /**
  23002. * Generates a orthogonal projection matrix with the given bounds
  23003. *
  23004. * @param {mat4} out mat4 frustum matrix will be written into
  23005. * @param {number} left Left bound of the frustum
  23006. * @param {number} right Right bound of the frustum
  23007. * @param {number} bottom Bottom bound of the frustum
  23008. * @param {number} top Top bound of the frustum
  23009. * @param {number} near Near bound of the frustum
  23010. * @param {number} far Far bound of the frustum
  23011. * @returns {mat4} out
  23012. */
  23013. function ortho(out, left, right, bottom, top, near, far) {
  23014. var lr = 1 / (left - right),
  23015. bt = 1 / (bottom - top),
  23016. nf = 1 / (near - far);
  23017. out[0] = -2 * lr;
  23018. out[1] = 0;
  23019. out[2] = 0;
  23020. out[3] = 0;
  23021. out[4] = 0;
  23022. out[5] = -2 * bt;
  23023. out[6] = 0;
  23024. out[7] = 0;
  23025. out[8] = 0;
  23026. out[9] = 0;
  23027. out[10] = 2 * nf;
  23028. out[11] = 0;
  23029. out[12] = (left + right) * lr;
  23030. out[13] = (top + bottom) * bt;
  23031. out[14] = (far + near) * nf;
  23032. out[15] = 1;
  23033. return out;
  23034. };
  23035. /***/ }),
  23036. /* 235 */
  23037. /***/ (function(module, exports) {
  23038. module.exports = rotateY;
  23039. /**
  23040. * Rotates a matrix by the given angle around the Y axis
  23041. *
  23042. * @param {mat4} out the receiving matrix
  23043. * @param {mat4} a the matrix to rotate
  23044. * @param {Number} rad the angle to rotate the matrix by
  23045. * @returns {mat4} out
  23046. */
  23047. function rotateY(out, a, rad) {
  23048. var s = Math.sin(rad),
  23049. c = Math.cos(rad),
  23050. a00 = a[0],
  23051. a01 = a[1],
  23052. a02 = a[2],
  23053. a03 = a[3],
  23054. a20 = a[8],
  23055. a21 = a[9],
  23056. a22 = a[10],
  23057. a23 = a[11];
  23058. if (a !== out) { // If the source and destination differ, copy the unchanged rows
  23059. out[4] = a[4];
  23060. out[5] = a[5];
  23061. out[6] = a[6];
  23062. out[7] = a[7];
  23063. out[12] = a[12];
  23064. out[13] = a[13];
  23065. out[14] = a[14];
  23066. out[15] = a[15];
  23067. }
  23068. // Perform axis-specific matrix multiplication
  23069. out[0] = a00 * c - a20 * s;
  23070. out[1] = a01 * c - a21 * s;
  23071. out[2] = a02 * c - a22 * s;
  23072. out[3] = a03 * c - a23 * s;
  23073. out[8] = a00 * s + a20 * c;
  23074. out[9] = a01 * s + a21 * c;
  23075. out[10] = a02 * s + a22 * c;
  23076. out[11] = a03 * s + a23 * c;
  23077. return out;
  23078. };
  23079. /***/ }),
  23080. /* 236 */
  23081. /***/ (function(module, exports, __webpack_require__) {
  23082. /**
  23083. * Normalize a quat
  23084. *
  23085. * @param {quat} out the receiving quaternion
  23086. * @param {quat} a quaternion to normalize
  23087. * @returns {quat} out
  23088. * @function
  23089. */
  23090. module.exports = __webpack_require__(247)
  23091. /***/ }),
  23092. /* 237 */
  23093. /***/ (function(module, exports) {
  23094. module.exports = setAxisAngle
  23095. /**
  23096. * Sets a quat from the given angle and rotation axis,
  23097. * then returns it.
  23098. *
  23099. * @param {quat} out the receiving quaternion
  23100. * @param {vec3} axis the axis around which to rotate
  23101. * @param {Number} rad the angle in radians
  23102. * @returns {quat} out
  23103. **/
  23104. function setAxisAngle (out, axis, rad) {
  23105. rad = rad * 0.5
  23106. var s = Math.sin(rad)
  23107. out[0] = s * axis[0]
  23108. out[1] = s * axis[1]
  23109. out[2] = s * axis[2]
  23110. out[3] = Math.cos(rad)
  23111. return out
  23112. }
  23113. /***/ }),
  23114. /* 238 */
  23115. /***/ (function(module, exports) {
  23116. module.exports = lerp
  23117. /**
  23118. * Performs a linear interpolation between two vec2's
  23119. *
  23120. * @param {vec2} out the receiving vector
  23121. * @param {vec2} a the first operand
  23122. * @param {vec2} b the second operand
  23123. * @param {Number} t interpolation amount between the two inputs
  23124. * @returns {vec2} out
  23125. */
  23126. function lerp(out, a, b, t) {
  23127. var ax = a[0],
  23128. ay = a[1]
  23129. out[0] = ax + t * (b[0] - ax)
  23130. out[1] = ay + t * (b[1] - ay)
  23131. return out
  23132. }
  23133. /***/ }),
  23134. /* 239 */
  23135. /***/ (function(module, exports) {
  23136. module.exports = cross;
  23137. /**
  23138. * Computes the cross product of two vec3's
  23139. *
  23140. * @param {vec3} out the receiving vector
  23141. * @param {vec3} a the first operand
  23142. * @param {vec3} b the second operand
  23143. * @returns {vec3} out
  23144. */
  23145. function cross(out, a, b) {
  23146. var ax = a[0], ay = a[1], az = a[2],
  23147. bx = b[0], by = b[1], bz = b[2]
  23148. out[0] = ay * bz - az * by
  23149. out[1] = az * bx - ax * bz
  23150. out[2] = ax * by - ay * bx
  23151. return out
  23152. }
  23153. /***/ }),
  23154. /* 240 */
  23155. /***/ (function(module, exports) {
  23156. module.exports = dot;
  23157. /**
  23158. * Calculates the dot product of two vec3's
  23159. *
  23160. * @param {vec3} a the first operand
  23161. * @param {vec3} b the second operand
  23162. * @returns {Number} dot product of a and b
  23163. */
  23164. function dot(a, b) {
  23165. return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]
  23166. }
  23167. /***/ }),
  23168. /* 241 */
  23169. /***/ (function(module, exports) {
  23170. module.exports = length;
  23171. /**
  23172. * Calculates the length of a vec3
  23173. *
  23174. * @param {vec3} a vector to calculate length of
  23175. * @returns {Number} length of a
  23176. */
  23177. function length(a) {
  23178. var x = a[0],
  23179. y = a[1],
  23180. z = a[2]
  23181. return Math.sqrt(x*x + y*y + z*z)
  23182. }
  23183. /***/ }),
  23184. /* 242 */
  23185. /***/ (function(module, exports) {
  23186. module.exports = normalize;
  23187. /**
  23188. * Normalize a vec3
  23189. *
  23190. * @param {vec3} out the receiving vector
  23191. * @param {vec3} a vector to normalize
  23192. * @returns {vec3} out
  23193. */
  23194. function normalize(out, a) {
  23195. var x = a[0],
  23196. y = a[1],
  23197. z = a[2]
  23198. var len = x*x + y*y + z*z
  23199. if (len > 0) {
  23200. //TODO: evaluate use of glm_invsqrt here?
  23201. len = 1 / Math.sqrt(len)
  23202. out[0] = a[0] * len
  23203. out[1] = a[1] * len
  23204. out[2] = a[2] * len
  23205. }
  23206. return out
  23207. }
  23208. /***/ }),
  23209. /* 243 */
  23210. /***/ (function(module, exports) {
  23211. module.exports = add
  23212. /**
  23213. * Adds two vec4's
  23214. *
  23215. * @param {vec4} out the receiving vector
  23216. * @param {vec4} a the first operand
  23217. * @param {vec4} b the second operand
  23218. * @returns {vec4} out
  23219. */
  23220. function add (out, a, b) {
  23221. out[0] = a[0] + b[0]
  23222. out[1] = a[1] + b[1]
  23223. out[2] = a[2] + b[2]
  23224. out[3] = a[3] + b[3]
  23225. return out
  23226. }
  23227. /***/ }),
  23228. /* 244 */
  23229. /***/ (function(module, exports) {
  23230. module.exports = dot
  23231. /**
  23232. * Calculates the dot product of two vec4's
  23233. *
  23234. * @param {vec4} a the first operand
  23235. * @param {vec4} b the second operand
  23236. * @returns {Number} dot product of a and b
  23237. */
  23238. function dot (a, b) {
  23239. return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]
  23240. }
  23241. /***/ }),
  23242. /* 245 */
  23243. /***/ (function(module, exports) {
  23244. module.exports = lerp
  23245. /**
  23246. * Performs a linear interpolation between two vec4's
  23247. *
  23248. * @param {vec4} out the receiving vector
  23249. * @param {vec4} a the first operand
  23250. * @param {vec4} b the second operand
  23251. * @param {Number} t interpolation amount between the two inputs
  23252. * @returns {vec4} out
  23253. */
  23254. function lerp (out, a, b, t) {
  23255. var ax = a[0],
  23256. ay = a[1],
  23257. az = a[2],
  23258. aw = a[3]
  23259. out[0] = ax + t * (b[0] - ax)
  23260. out[1] = ay + t * (b[1] - ay)
  23261. out[2] = az + t * (b[2] - az)
  23262. out[3] = aw + t * (b[3] - aw)
  23263. return out
  23264. }
  23265. /***/ }),
  23266. /* 246 */
  23267. /***/ (function(module, exports) {
  23268. module.exports = multiply
  23269. /**
  23270. * Multiplies two vec4's
  23271. *
  23272. * @param {vec4} out the receiving vector
  23273. * @param {vec4} a the first operand
  23274. * @param {vec4} b the second operand
  23275. * @returns {vec4} out
  23276. */
  23277. function multiply (out, a, b) {
  23278. out[0] = a[0] * b[0]
  23279. out[1] = a[1] * b[1]
  23280. out[2] = a[2] * b[2]
  23281. out[3] = a[3] * b[3]
  23282. return out
  23283. }
  23284. /***/ }),
  23285. /* 247 */
  23286. /***/ (function(module, exports) {
  23287. module.exports = normalize
  23288. /**
  23289. * Normalize a vec4
  23290. *
  23291. * @param {vec4} out the receiving vector
  23292. * @param {vec4} a vector to normalize
  23293. * @returns {vec4} out
  23294. */
  23295. function normalize (out, a) {
  23296. var x = a[0],
  23297. y = a[1],
  23298. z = a[2],
  23299. w = a[3]
  23300. var len = x * x + y * y + z * z + w * w
  23301. if (len > 0) {
  23302. len = 1 / Math.sqrt(len)
  23303. out[0] = x * len
  23304. out[1] = y * len
  23305. out[2] = z * len
  23306. out[3] = w * len
  23307. }
  23308. return out
  23309. }
  23310. /***/ }),
  23311. /* 248 */
  23312. /***/ (function(module, exports) {
  23313. module.exports = set
  23314. /**
  23315. * Set the components of a vec4 to the given values
  23316. *
  23317. * @param {vec4} out the receiving vector
  23318. * @param {Number} x X component
  23319. * @param {Number} y Y component
  23320. * @param {Number} z Z component
  23321. * @param {Number} w W component
  23322. * @returns {vec4} out
  23323. */
  23324. function set (out, x, y, z, w) {
  23325. out[0] = x
  23326. out[1] = y
  23327. out[2] = z
  23328. out[3] = w
  23329. return out
  23330. }
  23331. /***/ }),
  23332. /* 249 */
  23333. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23334. "use strict";
  23335. /* harmony export (immutable) */ __webpack_exports__["b"] = requestAnimationFrame;
  23336. /* harmony export (immutable) */ __webpack_exports__["c"] = cancelAnimationFrame;
  23337. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(8);
  23338. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_utils__ = __webpack_require__(60);
  23339. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__webgl__ = __webpack_require__(61);
  23340. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  23341. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  23342. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  23343. /* global window, setTimeout, clearTimeout */
  23344. // Node.js polyfills for requestAnimationFrame and cancelAnimationFrame
  23345. function requestAnimationFrame(callback) {
  23346. return __WEBPACK_IMPORTED_MODULE_0__utils__["a" /* isBrowser */] ? window.requestAnimationFrame(callback) : setTimeout(callback, 1000 / 60);
  23347. }
  23348. function cancelAnimationFrame(timerId) {
  23349. return __WEBPACK_IMPORTED_MODULE_0__utils__["a" /* isBrowser */] ? window.cancelAnimationFrame(timerId) : clearTimeout(timerId);
  23350. }
  23351. var DEFAULT_GL_OPTIONS = {
  23352. preserveDrawingBuffer: true
  23353. };
  23354. var AnimationLoop = /*#__PURE__*/function () {
  23355. /*
  23356. * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context
  23357. */
  23358. function AnimationLoop() {
  23359. var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  23360. _classCallCheck(this, AnimationLoop);
  23361. var _props$onCreateContex = props.onCreateContext,
  23362. onCreateContext = _props$onCreateContex === undefined ? function (opts) {
  23363. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__webgl__["createGLContext"])(opts);
  23364. } : _props$onCreateContex,
  23365. _props$onInitialize = props.onInitialize,
  23366. onInitialize = _props$onInitialize === undefined ? function () {} : _props$onInitialize,
  23367. _props$onRender = props.onRender,
  23368. onRender = _props$onRender === undefined ? function () {} : _props$onRender,
  23369. _props$onFinalize = props.onFinalize,
  23370. onFinalize = _props$onFinalize === undefined ? function () {} : _props$onFinalize,
  23371. _props$gl = props.gl,
  23372. gl = _props$gl === undefined ? null : _props$gl,
  23373. _props$glOptions = props.glOptions,
  23374. glOptions = _props$glOptions === undefined ? {} : _props$glOptions,
  23375. _props$width = props.width,
  23376. width = _props$width === undefined ? null : _props$width,
  23377. _props$height = props.height,
  23378. height = _props$height === undefined ? null : _props$height,
  23379. _props$createFramebuf = props.createFramebuffer,
  23380. createFramebuffer = _props$createFramebuf === undefined ? false : _props$createFramebuf,
  23381. _props$autoResizeView = props.autoResizeViewport,
  23382. autoResizeViewport = _props$autoResizeView === undefined ? true : _props$autoResizeView,
  23383. _props$autoResizeDraw = props.autoResizeDrawingBuffer,
  23384. autoResizeDrawingBuffer = _props$autoResizeDraw === undefined ? true : _props$autoResizeDraw;
  23385. var _props$useDevicePixel = props.useDevicePixels,
  23386. useDevicePixels = _props$useDevicePixel === undefined ? true : _props$useDevicePixel;
  23387. //iclient
  23388. var _props$isGeographicCoordinateSystem = props.isGeographicCoordinateSystem,
  23389. isGeographicCoordinateSystem = _props$isGeographicCoordinateSystem === undefined ? false : _props$isGeographicCoordinateSystem;
  23390. this.isGeographicCoordinateSystem=isGeographicCoordinateSystem;
  23391. if ('useDevicePixelRatio' in props) {
  23392. __WEBPACK_IMPORTED_MODULE_0__utils__["b" /* log */].deprecated('useDevicePixelRatio', 'useDevicePixels');
  23393. useDevicePixels = props.useDevicePixelRatio;
  23394. }
  23395. this._onCreateContext = onCreateContext;
  23396. this.start = this.start.bind(this);
  23397. this.stop = this.stop.bind(this);
  23398. this._renderFrame = this._renderFrame.bind(this);
  23399. this.glOptions = glOptions;
  23400. this._createFramebuffer = createFramebuffer;
  23401. this._onInitialize = onInitialize;
  23402. this._onRender = onRender;
  23403. this._onFinalize = onFinalize;
  23404. this.width = width;
  23405. this.height = height;
  23406. this.gl = gl;
  23407. this.setProps({
  23408. autoResizeViewport: autoResizeViewport,
  23409. autoResizeDrawingBuffer: autoResizeDrawingBuffer,
  23410. useDevicePixels: useDevicePixels
  23411. });
  23412. return this;
  23413. }
  23414. _createClass(AnimationLoop, [{
  23415. key: 'setNeedsRedraw',
  23416. value: function setNeedsRedraw(reason) {
  23417. this.needsRedraw = this.needsRedraw || reason;
  23418. return this;
  23419. }
  23420. }, {
  23421. key: 'setProps',
  23422. value: function setProps(props) {
  23423. if ('autoResizeViewport' in props) {
  23424. this.autoResizeViewport = props.autoResizeViewport;
  23425. }
  23426. if ('autoResizeDrawingBuffer' in props) {
  23427. this.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;
  23428. }
  23429. if ('useDevicePixels' in props) {
  23430. this.useDevicePixels = props.useDevicePixels;
  23431. }
  23432. return this;
  23433. }
  23434. // Starts a render loop if not already running
  23435. // @param {Object} context - contains frame specific info (E.g. tick, width, height, etc)
  23436. }, {
  23437. key: 'start',
  23438. value: function start() {
  23439. var _this = this;
  23440. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  23441. this._stopped = false;
  23442. // console.debug(`Starting ${this.constructor.name}`);
  23443. if (!this._animationFrameId) {
  23444. // Wait for start promise before rendering frame
  23445. this._startPromise = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_utils__["g" /* getPageLoadPromise */])().then(function () {
  23446. if (_this._stopped) {
  23447. return null;
  23448. }
  23449. // Create the WebGL context
  23450. _this._createWebGLContext(opts);
  23451. // Initialize the callback data
  23452. _this._initializeCallbackData();
  23453. _this._updateCallbackData();
  23454. // Default viewport setup, in case onInitialize wants to render
  23455. _this._resizeCanvasDrawingBuffer();
  23456. _this._resizeViewport();
  23457. // Note: onIntialize can return a promise (in case it needs to load resources)
  23458. return _this._onInitialize(_this._callbackData);
  23459. }).then(function (appContext) {
  23460. if (!_this._stopped) {
  23461. _this._addCallbackData(appContext || {});
  23462. if (appContext !== false && !_this._animationFrameId) {
  23463. _this._animationFrameId = requestAnimationFrame(_this._renderFrame);
  23464. }
  23465. }
  23466. });
  23467. }
  23468. return this;
  23469. }
  23470. // Stops a render loop if already running, finalizing
  23471. }, {
  23472. key: 'stop',
  23473. value: function stop() {
  23474. // console.debug(`Stopping ${this.constructor.name}`);
  23475. if (this._animationFrameId) {
  23476. this._finalizeCallbackData();
  23477. cancelAnimationFrame(this._animationFrameId);
  23478. this._animationFrameId = null;
  23479. this._stopped = true;
  23480. }
  23481. return this;
  23482. }
  23483. // DEPRECATED METHODS
  23484. // Update parameters
  23485. }, {
  23486. key: 'setViewParameters',
  23487. value: function setViewParameters(_ref) {
  23488. var _ref$autoResizeDrawin = _ref.autoResizeDrawingBuffer,
  23489. autoResizeDrawingBuffer = _ref$autoResizeDrawin === undefined ? true : _ref$autoResizeDrawin,
  23490. _ref$autoResizeCanvas = _ref.autoResizeCanvas,
  23491. autoResizeCanvas = _ref$autoResizeCanvas === undefined ? true : _ref$autoResizeCanvas,
  23492. _ref$autoResizeViewpo = _ref.autoResizeViewport,
  23493. autoResizeViewport = _ref$autoResizeViewpo === undefined ? true : _ref$autoResizeViewpo,
  23494. _ref$useDevicePixels = _ref.useDevicePixels,
  23495. useDevicePixels = _ref$useDevicePixels === undefined ? true : _ref$useDevicePixels,
  23496. _ref$useDevicePixelRa = _ref.useDevicePixelRatio,
  23497. useDevicePixelRatio = _ref$useDevicePixelRa === undefined ? null : _ref$useDevicePixelRa;
  23498. __WEBPACK_IMPORTED_MODULE_0__utils__["b" /* log */].deprecated('AnimationLoop.setViewParameters', 'AnimationLoop.setProps');
  23499. this.autoResizeViewport = autoResizeViewport;
  23500. this.autoResizeCanvas = autoResizeCanvas;
  23501. this.autoResizeDrawingBuffer = autoResizeDrawingBuffer;
  23502. this.useDevicePixels = useDevicePixels;
  23503. if (useDevicePixelRatio !== null) {
  23504. __WEBPACK_IMPORTED_MODULE_0__utils__["b" /* log */].deprecated('useDevicePixelRatio', 'useDevicePixels');
  23505. this.useDevicePixels = useDevicePixelRatio;
  23506. }
  23507. return this;
  23508. }
  23509. // PRIVATE METHODS
  23510. }, {
  23511. key: '_setupFrame',
  23512. value: function _setupFrame() {
  23513. if (this._onSetupFrame) {
  23514. // call callback
  23515. this._onSetupFrame(this._callbackData);
  23516. // end callback
  23517. } else {
  23518. this._resizeCanvasDrawingBuffer();
  23519. this._resizeViewport();
  23520. this._resizeFramebuffer();
  23521. }
  23522. }
  23523. /**
  23524. * @private
  23525. * Handles a render loop frame- updates context and calls the application
  23526. * callback
  23527. */
  23528. }, {
  23529. key: '_renderFrame',
  23530. value: function _renderFrame() {
  23531. this._setupFrame();
  23532. this._updateCallbackData();
  23533. // call callback
  23534. this._onRender(this._callbackData);
  23535. // end callback
  23536. // Increment tick
  23537. this._callbackData.tick++;
  23538. if (!this._stopped) {
  23539. // Request another render frame (now )
  23540. this._animationFrameId = requestAnimationFrame(this._renderFrame);
  23541. }
  23542. }
  23543. // Initialize the object that will be passed to app callbacks
  23544. }, {
  23545. key: '_initializeCallbackData',
  23546. value: function _initializeCallbackData() {
  23547. this._callbackData = {
  23548. gl: this.gl,
  23549. canvas: this.gl.canvas,
  23550. framebuffer: this.framebuffer,
  23551. stop: this.stop,
  23552. // Initial values
  23553. tick: 0,
  23554. tock: 0,
  23555. //iclient
  23556. isGeographicCoordinateSystem:this.isGeographicCoordinateSystem,
  23557. useDevicePixels: this.useDevicePixels
  23558. };
  23559. }
  23560. // Update the context object that will be passed to app callbacks
  23561. }, {
  23562. key: '_updateCallbackData',
  23563. value: function _updateCallbackData() {
  23564. // CallbackData width and height represent drawing buffer width and height
  23565. var canvas = this.gl.canvas;
  23566. this._callbackData.width = canvas.width;
  23567. this._callbackData.height = canvas.height;
  23568. this._callbackData.aspect = canvas.width / canvas.height;
  23569. }
  23570. }, {
  23571. key: '_finalizeCallbackData',
  23572. value: function _finalizeCallbackData() {
  23573. // call callback
  23574. this._onFinalize(this._callbackData);
  23575. // end callback
  23576. }
  23577. // Add application's data to the app context object
  23578. }, {
  23579. key: '_addCallbackData',
  23580. value: function _addCallbackData(appContext) {
  23581. if ((typeof appContext === 'undefined' ? 'undefined' : _typeof(appContext)) === 'object' && appContext !== null) {
  23582. this._callbackData = Object.assign({}, this._callbackData, appContext);
  23583. }
  23584. }
  23585. // Either uses supplied or existing context, or calls provided callback to create one
  23586. }, {
  23587. key: '_createWebGLContext',
  23588. value: function _createWebGLContext(opts) {
  23589. // Create the WebGL context if necessary
  23590. opts = Object.assign({}, opts, DEFAULT_GL_OPTIONS, this.glOptions);
  23591. if (opts.gl) {
  23592. this.gl = opts.gl;
  23593. } else {
  23594. this.gl = this._onCreateContext(opts);
  23595. }
  23596. if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__webgl__["isWebGL"])(this.gl)) {
  23597. throw new Error('AnimationLoop.onCreateContext - illegal context returned');
  23598. }
  23599. // Setup default framebuffer
  23600. if (this._createFramebuffer) {
  23601. this.framebuffer = new __WEBPACK_IMPORTED_MODULE_2__webgl__["Framebuffer"](this.gl);
  23602. }
  23603. // Reset the WebGL context.
  23604. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__webgl__["resetParameters"])(this.gl);
  23605. }
  23606. // Default viewport setup
  23607. }, {
  23608. key: '_resizeViewport',
  23609. value: function _resizeViewport() {
  23610. if (this.autoResizeViewport) {
  23611. this.gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);
  23612. }
  23613. }
  23614. }, {
  23615. key: '_resizeFramebuffer',
  23616. value: function _resizeFramebuffer() {
  23617. if (this.framebuffer) {
  23618. this.framebuffer.resize({ width: this.gl.canvas.width, height: this.gl.canvas.height });
  23619. }
  23620. }
  23621. // Resize the render buffer of the canvas to match canvas client size
  23622. // Optionally multiplying with devicePixel ratio
  23623. }, {
  23624. key: '_resizeCanvasDrawingBuffer',
  23625. value: function _resizeCanvasDrawingBuffer() {
  23626. if (this.autoResizeDrawingBuffer) {
  23627. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_utils__["h" /* resizeDrawingBuffer */])(this.gl.canvas, { useDevicePixels: this.useDevicePixels });
  23628. }
  23629. }
  23630. }]);
  23631. return AnimationLoop;
  23632. }();
  23633. /* harmony default export */ __webpack_exports__["a"] = (AnimationLoop);
  23634. //# sourceMappingURL=animation-loop.js.map
  23635. /***/ }),
  23636. /* 250 */
  23637. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23638. "use strict";
  23639. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(8);
  23640. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_math_gl__ = __webpack_require__(16);
  23641. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert__ = __webpack_require__(1);
  23642. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_assert__);
  23643. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  23644. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  23645. var Object3D = /*#__PURE__*/function () {
  23646. function Object3D(_ref) {
  23647. var id = _ref.id,
  23648. _ref$display = _ref.display,
  23649. display = _ref$display === undefined ? true : _ref$display;
  23650. _classCallCheck(this, Object3D);
  23651. // model position, rotation, scale and all in all matrix
  23652. this.position = new __WEBPACK_IMPORTED_MODULE_1_math_gl__["Vector3"]();
  23653. this.rotation = new __WEBPACK_IMPORTED_MODULE_1_math_gl__["Vector3"]();
  23654. this.scale = new __WEBPACK_IMPORTED_MODULE_1_math_gl__["Vector3"](1, 1, 1);
  23655. this.matrix = new __WEBPACK_IMPORTED_MODULE_1_math_gl__["Matrix4"]();
  23656. // whether to display the object at all
  23657. this.id = id || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__utils__["d" /* uid */])(this.constructor.name);
  23658. this.display = true;
  23659. this.userData = {};
  23660. }
  23661. _createClass(Object3D, [{
  23662. key: 'setPosition',
  23663. value: function setPosition(position) {
  23664. __WEBPACK_IMPORTED_MODULE_2_assert___default()(position.length === 3, 'setPosition requires vector argument');
  23665. this.position = position;
  23666. return this;
  23667. }
  23668. }, {
  23669. key: 'setRotation',
  23670. value: function setRotation(rotation) {
  23671. __WEBPACK_IMPORTED_MODULE_2_assert___default()(rotation.length === 3, 'setRotation requires vector argument');
  23672. this.rotation = rotation;
  23673. return this;
  23674. }
  23675. }, {
  23676. key: 'setScale',
  23677. value: function setScale(scale) {
  23678. __WEBPACK_IMPORTED_MODULE_2_assert___default()(scale.length === 3, 'setScale requires vector argument');
  23679. this.scale = scale;
  23680. return this;
  23681. }
  23682. }, {
  23683. key: 'setMatrixComponents',
  23684. value: function setMatrixComponents(_ref2) {
  23685. var position = _ref2.position,
  23686. rotation = _ref2.rotation,
  23687. scale = _ref2.scale,
  23688. _ref2$update = _ref2.update,
  23689. update = _ref2$update === undefined ? true : _ref2$update;
  23690. if (position) {
  23691. this.setPosition(position);
  23692. }
  23693. if (rotation) {
  23694. this.setRotation(rotation);
  23695. }
  23696. if (scale) {
  23697. this.setScale(scale);
  23698. }
  23699. if (update) {
  23700. this.updateMatrix();
  23701. }
  23702. return this;
  23703. }
  23704. }, {
  23705. key: 'updateMatrix',
  23706. value: function updateMatrix() {
  23707. var pos = this.position;
  23708. var rot = this.rotation;
  23709. var scale = this.scale;
  23710. this.matrix.identity();
  23711. this.matrix.translate(pos);
  23712. this.matrix.rotateXYZ(rot);
  23713. this.matrix.scale(scale);
  23714. return this;
  23715. }
  23716. }, {
  23717. key: 'update',
  23718. value: function update() {
  23719. var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  23720. position = _ref3.position,
  23721. rotation = _ref3.rotation,
  23722. scale = _ref3.scale;
  23723. if (position) {
  23724. this.setPosition(position);
  23725. }
  23726. if (rotation) {
  23727. this.setRotation(rotation);
  23728. }
  23729. if (scale) {
  23730. this.setScale(scale);
  23731. }
  23732. this.updateMatrix();
  23733. return this;
  23734. }
  23735. }, {
  23736. key: 'getCoordinateUniforms',
  23737. value: function getCoordinateUniforms(viewMatrix, modelMatrix) {
  23738. // TODO - solve multiple class problem
  23739. // assert(viewMatrix instanceof Matrix4);
  23740. __WEBPACK_IMPORTED_MODULE_2_assert___default()(viewMatrix);
  23741. modelMatrix = modelMatrix || this.matrix;
  23742. var worldMatrix = new __WEBPACK_IMPORTED_MODULE_1_math_gl__["Matrix4"](viewMatrix).multiplyRight(modelMatrix);
  23743. var worldInverse = worldMatrix.invert();
  23744. var worldInverseTranspose = worldInverse.transpose();
  23745. return {
  23746. viewMatrix: viewMatrix,
  23747. modelMatrix: modelMatrix,
  23748. objectMatrix: modelMatrix,
  23749. worldMatrix: worldMatrix,
  23750. worldInverseMatrix: worldInverse,
  23751. worldInverseTransposeMatrix: worldInverseTranspose
  23752. };
  23753. }
  23754. // TODO - copied code, not yet vetted
  23755. }, {
  23756. key: 'transform',
  23757. value: function transform() {
  23758. if (!this.parent) {
  23759. this.endPosition.set(this.position);
  23760. this.endRotation.set(this.rotation);
  23761. this.endScale.set(this.scale);
  23762. } else {
  23763. var parent = this.parent;
  23764. this.endPosition.set(this.position.add(parent.endPosition));
  23765. this.endRotation.set(this.rotation.add(parent.endRotation));
  23766. this.endScale.set(this.scale.add(parent.endScale));
  23767. }
  23768. var ch = this.children;
  23769. for (var i = 0; i < ch.length; ++i) {
  23770. ch[i].transform();
  23771. }
  23772. return this;
  23773. }
  23774. }]);
  23775. return Object3D;
  23776. }();
  23777. /* harmony default export */ __webpack_exports__["a"] = (Object3D);
  23778. //# sourceMappingURL=object-3d.js.map
  23779. /***/ }),
  23780. /* 251 */
  23781. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23782. "use strict";
  23783. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__truncated_cone_geometry__ = __webpack_require__(105);
  23784. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  23785. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  23786. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  23787. var ConeGeometry = /*#__PURE__*/function (_TruncatedConeGeometr) {
  23788. _inherits(ConeGeometry, _TruncatedConeGeometr);
  23789. function ConeGeometry() {
  23790. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  23791. _classCallCheck(this, ConeGeometry);
  23792. var _opts$radius = opts.radius,
  23793. radius = _opts$radius === undefined ? 1 : _opts$radius,
  23794. _opts$cap = opts.cap,
  23795. cap = _opts$cap === undefined ? true : _opts$cap;
  23796. return _possibleConstructorReturn(this, (ConeGeometry.__proto__ || Object.getPrototypeOf(ConeGeometry)).call(this, Object.assign({}, opts, {
  23797. topRadius: 0,
  23798. topCap: Boolean(cap),
  23799. bottomCap: Boolean(cap),
  23800. bottomRadius: radius
  23801. })));
  23802. }
  23803. return ConeGeometry;
  23804. }(__WEBPACK_IMPORTED_MODULE_0__truncated_cone_geometry__["a" /* default */]);
  23805. /* harmony default export */ __webpack_exports__["a"] = (ConeGeometry);
  23806. //# sourceMappingURL=cone-geometry.js.map
  23807. /***/ }),
  23808. /* 252 */
  23809. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23810. "use strict";
  23811. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(45);
  23812. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(8);
  23813. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  23814. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  23815. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  23816. var CubeGeometry = /*#__PURE__*/function (_Geometry) {
  23817. _inherits(CubeGeometry, _Geometry);
  23818. function CubeGeometry() {
  23819. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  23820. _classCallCheck(this, CubeGeometry);
  23821. var _opts$id = opts.id,
  23822. id = _opts$id === undefined ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__["d" /* uid */])('cube-geometry') : _opts$id;
  23823. return _possibleConstructorReturn(this, (CubeGeometry.__proto__ || Object.getPrototypeOf(CubeGeometry)).call(this, Object.assign({}, opts, { id: id, attributes: getCubeAttributes() })));
  23824. }
  23825. return CubeGeometry;
  23826. }(__WEBPACK_IMPORTED_MODULE_0__geometry__["a" /* default */]);
  23827. /* eslint-disable no-multi-spaces, indent */
  23828. /* harmony default export */ __webpack_exports__["a"] = (CubeGeometry);
  23829. var CUBE_INDICES = new Uint16Array([0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23]);
  23830. var CUBE_POSITIONS = new Float32Array([-1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1]);
  23831. var CUBE_NORMALS = new Float32Array([
  23832. // Front face
  23833. 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0,
  23834. // Back face
  23835. 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0,
  23836. // Top face
  23837. 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0,
  23838. // Bottom face
  23839. 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0,
  23840. // Right face
  23841. 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
  23842. // Left face
  23843. -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0]);
  23844. var CUBE_TEX_COORDS = new Float32Array([
  23845. // Front face
  23846. 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0,
  23847. // Back face
  23848. 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
  23849. // Top face
  23850. 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0,
  23851. // Bottom face
  23852. 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0,
  23853. // Right face
  23854. 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0,
  23855. // Left face
  23856. 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0]);
  23857. /* eslint-enable no-multi-spaces, indent */
  23858. function getCubeAttributes() {
  23859. return {
  23860. indices: new Uint16Array(CUBE_INDICES),
  23861. positions: new Float32Array(CUBE_POSITIONS),
  23862. normals: new Float32Array(CUBE_NORMALS),
  23863. texCoords: new Float32Array(CUBE_TEX_COORDS)
  23864. };
  23865. }
  23866. //# sourceMappingURL=cube-geometry.js.map
  23867. /***/ }),
  23868. /* 253 */
  23869. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23870. "use strict";
  23871. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__truncated_cone_geometry__ = __webpack_require__(105);
  23872. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  23873. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  23874. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  23875. var CylinderGeometry = /*#__PURE__*/function (_TruncatedConeGeometr) {
  23876. _inherits(CylinderGeometry, _TruncatedConeGeometr);
  23877. function CylinderGeometry() {
  23878. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  23879. _classCallCheck(this, CylinderGeometry);
  23880. var _opts$radius = opts.radius,
  23881. radius = _opts$radius === undefined ? 1 : _opts$radius;
  23882. return _possibleConstructorReturn(this, (CylinderGeometry.__proto__ || Object.getPrototypeOf(CylinderGeometry)).call(this, Object.assign({}, opts, {
  23883. bottomRadius: radius,
  23884. topRadius: radius
  23885. })));
  23886. }
  23887. return CylinderGeometry;
  23888. }(__WEBPACK_IMPORTED_MODULE_0__truncated_cone_geometry__["a" /* default */]);
  23889. /* harmony default export */ __webpack_exports__["a"] = (CylinderGeometry);
  23890. //# sourceMappingURL=cylinder-geometry.js.map
  23891. /***/ }),
  23892. /* 254 */
  23893. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  23894. "use strict";
  23895. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(45);
  23896. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_math_gl__ = __webpack_require__(16);
  23897. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  23898. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  23899. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  23900. /* eslint-disable comma-spacing, max-statements, complexity */
  23901. var ICO_POSITIONS = [-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 1, 0, 0];
  23902. var ICO_INDICES = [3, 4, 5, 3, 5, 1, 3, 1, 0, 3, 0, 4, 4, 0, 2, 4, 2, 5, 2, 0, 1, 5, 2, 1];
  23903. var IcoSphereGeometry = /*#__PURE__*/function (_Geometry) {
  23904. _inherits(IcoSphereGeometry, _Geometry);
  23905. function IcoSphereGeometry() {
  23906. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  23907. _classCallCheck(this, IcoSphereGeometry);
  23908. var _opts$iterations = opts.iterations,
  23909. iterations = _opts$iterations === undefined ? 0 : _opts$iterations;
  23910. var PI = Math.PI;
  23911. var PI2 = PI * 2;
  23912. var positions = [].concat(ICO_POSITIONS);
  23913. var indices = [].concat(ICO_INDICES);
  23914. positions.push();
  23915. indices.push();
  23916. var getMiddlePoint = function () {
  23917. var pointMemo = {};
  23918. return function (i1, i2) {
  23919. i1 *= 3;
  23920. i2 *= 3;
  23921. var mini = i1 < i2 ? i1 : i2;
  23922. var maxi = i1 > i2 ? i1 : i2;
  23923. var key = mini + '|' + maxi;
  23924. if (key in pointMemo) {
  23925. return pointMemo[key];
  23926. }
  23927. var x1 = positions[i1];
  23928. var y1 = positions[i1 + 1];
  23929. var z1 = positions[i1 + 2];
  23930. var x2 = positions[i2];
  23931. var y2 = positions[i2 + 1];
  23932. var z2 = positions[i2 + 2];
  23933. var xm = (x1 + x2) / 2;
  23934. var ym = (y1 + y2) / 2;
  23935. var zm = (z1 + z2) / 2;
  23936. var len = Math.sqrt(xm * xm + ym * ym + zm * zm);
  23937. xm /= len;
  23938. ym /= len;
  23939. zm /= len;
  23940. positions.push(xm, ym, zm);
  23941. return pointMemo[key] = positions.length / 3 - 1;
  23942. };
  23943. }();
  23944. for (var i = 0; i < iterations; i++) {
  23945. var indices2 = [];
  23946. for (var j = 0; j < indices.length; j += 3) {
  23947. var a = getMiddlePoint(indices[j + 0], indices[j + 1]);
  23948. var b = getMiddlePoint(indices[j + 1], indices[j + 2]);
  23949. var c = getMiddlePoint(indices[j + 2], indices[j + 0]);
  23950. indices2.push(c, indices[j + 0], a, a, indices[j + 1], b, b, indices[j + 2], c, a, b, c);
  23951. }
  23952. indices = indices2;
  23953. }
  23954. // Calculate texCoords and normals
  23955. var normals = new Array(indices.length * 3);
  23956. var texCoords = new Array(indices.length * 2);
  23957. var l = indices.length;
  23958. for (var _i = l - 3; _i >= 0; _i -= 3) {
  23959. var i1 = indices[_i + 0];
  23960. var i2 = indices[_i + 1];
  23961. var i3 = indices[_i + 2];
  23962. var in1 = i1 * 3;
  23963. var in2 = i2 * 3;
  23964. var in3 = i3 * 3;
  23965. var iu1 = i1 * 2;
  23966. var iu2 = i2 * 2;
  23967. var iu3 = i3 * 2;
  23968. var x1 = positions[in1 + 0];
  23969. var y1 = positions[in1 + 1];
  23970. var z1 = positions[in1 + 2];
  23971. var theta1 = Math.acos(z1 / Math.sqrt(x1 * x1 + y1 * y1 + z1 * z1));
  23972. var phi1 = Math.atan2(y1, x1) + PI;
  23973. var v1 = theta1 / PI;
  23974. var u1 = 1 - phi1 / PI2;
  23975. var x2 = positions[in2 + 0];
  23976. var y2 = positions[in2 + 1];
  23977. var z2 = positions[in2 + 2];
  23978. var theta2 = Math.acos(z2 / Math.sqrt(x2 * x2 + y2 * y2 + z2 * z2));
  23979. var phi2 = Math.atan2(y2, x2) + PI;
  23980. var v2 = theta2 / PI;
  23981. var u2 = 1 - phi2 / PI2;
  23982. var x3 = positions[in3 + 0];
  23983. var y3 = positions[in3 + 1];
  23984. var z3 = positions[in3 + 2];
  23985. var theta3 = Math.acos(z3 / Math.sqrt(x3 * x3 + y3 * y3 + z3 * z3));
  23986. var phi3 = Math.atan2(y3, x3) + PI;
  23987. var v3 = theta3 / PI;
  23988. var u3 = 1 - phi3 / PI2;
  23989. var vec1 = [x3 - x2, y3 - y2, z3 - z2];
  23990. var vec2 = [x1 - x2, y1 - y2, z1 - z2];
  23991. var normal = new __WEBPACK_IMPORTED_MODULE_1_math_gl__["Vector3"](vec1).cross(vec2).normalize();
  23992. var newIndex = void 0;
  23993. if ((u1 === 0 || u2 === 0 || u3 === 0) && (u1 === 0 || u1 > 0.5) && (u2 === 0 || u2 > 0.5) && (u3 === 0 || u3 > 0.5)) {
  23994. positions.push(positions[in1 + 0], positions[in1 + 1], positions[in1 + 2]);
  23995. newIndex = positions.length / 3 - 1;
  23996. indices.push(newIndex);
  23997. texCoords[newIndex * 2 + 0] = 1;
  23998. texCoords[newIndex * 2 + 1] = v1;
  23999. normals[newIndex * 3 + 0] = normal.x;
  24000. normals[newIndex * 3 + 1] = normal.y;
  24001. normals[newIndex * 3 + 2] = normal.z;
  24002. positions.push(positions[in2 + 0], positions[in2 + 1], positions[in2 + 2]);
  24003. newIndex = positions.length / 3 - 1;
  24004. indices.push(newIndex);
  24005. texCoords[newIndex * 2 + 0] = 1;
  24006. texCoords[newIndex * 2 + 1] = v2;
  24007. normals[newIndex * 3 + 0] = normal.x;
  24008. normals[newIndex * 3 + 1] = normal.y;
  24009. normals[newIndex * 3 + 2] = normal.z;
  24010. positions.push(positions[in3 + 0], positions[in3 + 1], positions[in3 + 2]);
  24011. newIndex = positions.length / 3 - 1;
  24012. indices.push(newIndex);
  24013. texCoords[newIndex * 2 + 0] = 1;
  24014. texCoords[newIndex * 2 + 1] = v3;
  24015. normals[newIndex * 3 + 0] = normal.x;
  24016. normals[newIndex * 3 + 1] = normal.y;
  24017. normals[newIndex * 3 + 2] = normal.z;
  24018. }
  24019. normals[in1 + 0] = normals[in2 + 0] = normals[in3 + 0] = normal.x;
  24020. normals[in1 + 1] = normals[in2 + 1] = normals[in3 + 1] = normal.y;
  24021. normals[in1 + 2] = normals[in2 + 2] = normals[in3 + 2] = normal.z;
  24022. texCoords[iu1 + 0] = u1;
  24023. texCoords[iu1 + 1] = v1;
  24024. texCoords[iu2 + 0] = u2;
  24025. texCoords[iu2 + 1] = v2;
  24026. texCoords[iu3 + 0] = u3;
  24027. texCoords[iu3 + 1] = v3;
  24028. }
  24029. return _possibleConstructorReturn(this, (IcoSphereGeometry.__proto__ || Object.getPrototypeOf(IcoSphereGeometry)).call(this, Object.assign({}, opts, {
  24030. attributes: {
  24031. positions: new Float32Array(positions),
  24032. normals: new Float32Array(normals),
  24033. texCoords: new Float32Array(texCoords),
  24034. indices: new Uint16Array(indices)
  24035. }
  24036. })));
  24037. }
  24038. return IcoSphereGeometry;
  24039. }(__WEBPACK_IMPORTED_MODULE_0__geometry__["a" /* default */]);
  24040. /* harmony default export */ __webpack_exports__["a"] = (IcoSphereGeometry);
  24041. //# sourceMappingURL=ico-sphere-geometry.js.map
  24042. /***/ }),
  24043. /* 255 */
  24044. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24045. "use strict";
  24046. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(45);
  24047. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(8);
  24048. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  24049. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  24050. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  24051. var PlaneGeometry = /*#__PURE__*/function (_Geometry) {
  24052. _inherits(PlaneGeometry, _Geometry);
  24053. // Primitives inspired by TDL http://code.google.com/p/webglsamples/,
  24054. // copyright 2011 Google Inc. new BSD License
  24055. // (http://www.opensource.org/licenses/bsd-license.php).
  24056. /* eslint-disable max-statements, complexity */
  24057. /* eslint-disable complexity, max-statements */
  24058. function PlaneGeometry() {
  24059. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  24060. _classCallCheck(this, PlaneGeometry);
  24061. var _opts$type = opts.type,
  24062. type = _opts$type === undefined ? 'x,y' : _opts$type,
  24063. _opts$offset = opts.offset,
  24064. offset = _opts$offset === undefined ? 0 : _opts$offset,
  24065. _opts$flipCull = opts.flipCull,
  24066. flipCull = _opts$flipCull === undefined ? false : _opts$flipCull,
  24067. _opts$unpack = opts.unpack,
  24068. unpack = _opts$unpack === undefined ? false : _opts$unpack,
  24069. _opts$id = opts.id,
  24070. id = _opts$id === undefined ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__["d" /* uid */])('plane-geometry') : _opts$id;
  24071. var coords = type.split(',');
  24072. // width, height
  24073. var c1len = opts[coords[0] + 'len'];
  24074. var c2len = opts[coords[1] + 'len'];
  24075. // subdivisionsWidth, subdivisionsDepth
  24076. var subdivisions1 = opts['n' + coords[0]] || 1;
  24077. var subdivisions2 = opts['n' + coords[1]] || 1;
  24078. var numVertices = (subdivisions1 + 1) * (subdivisions2 + 1);
  24079. var positions = new Float32Array(numVertices * 3);
  24080. var normals = new Float32Array(numVertices * 3);
  24081. var texCoords = new Float32Array(numVertices * 2);
  24082. if (flipCull) {
  24083. c1len = -c1len;
  24084. }
  24085. var i2 = 0;
  24086. var i3 = 0;
  24087. for (var z = 0; z <= subdivisions2; z++) {
  24088. for (var x = 0; x <= subdivisions1; x++) {
  24089. var u = x / subdivisions1;
  24090. var v = z / subdivisions2;
  24091. texCoords[i2 + 0] = flipCull ? 1 - u : u;
  24092. texCoords[i2 + 1] = v;
  24093. switch (type) {
  24094. case 'x,y':
  24095. positions[i3 + 0] = c1len * u - c1len * 0.5;
  24096. positions[i3 + 1] = c2len * v - c2len * 0.5;
  24097. positions[i3 + 2] = offset;
  24098. normals[i3 + 0] = 0;
  24099. normals[i3 + 1] = 0;
  24100. normals[i3 + 2] = flipCull ? 1 : -1;
  24101. break;
  24102. case 'x,z':
  24103. positions[i3 + 0] = c1len * u - c1len * 0.5;
  24104. positions[i3 + 1] = offset;
  24105. positions[i3 + 2] = c2len * v - c2len * 0.5;
  24106. normals[i3 + 0] = 0;
  24107. normals[i3 + 1] = flipCull ? 1 : -1;
  24108. normals[i3 + 2] = 0;
  24109. break;
  24110. case 'y,z':
  24111. positions[i3 + 0] = offset;
  24112. positions[i3 + 1] = c1len * u - c1len * 0.5;
  24113. positions[i3 + 2] = c2len * v - c2len * 0.5;
  24114. normals[i3 + 0] = flipCull ? 1 : -1;
  24115. normals[i3 + 1] = 0;
  24116. normals[i3 + 2] = 0;
  24117. break;
  24118. default:
  24119. break;
  24120. }
  24121. i2 += 2;
  24122. i3 += 3;
  24123. }
  24124. }
  24125. var numVertsAcross = subdivisions1 + 1;
  24126. var indices = new Uint16Array(subdivisions1 * subdivisions2 * 6);
  24127. for (var _z = 0; _z < subdivisions2; _z++) {
  24128. for (var _x2 = 0; _x2 < subdivisions1; _x2++) {
  24129. var index = (_z * subdivisions1 + _x2) * 6;
  24130. // Make triangle 1 of quad.
  24131. indices[index + 0] = (_z + 0) * numVertsAcross + _x2;
  24132. indices[index + 1] = (_z + 1) * numVertsAcross + _x2;
  24133. indices[index + 2] = (_z + 0) * numVertsAcross + _x2 + 1;
  24134. // Make triangle 2 of quad.
  24135. indices[index + 3] = (_z + 1) * numVertsAcross + _x2;
  24136. indices[index + 4] = (_z + 1) * numVertsAcross + _x2 + 1;
  24137. indices[index + 5] = (_z + 0) * numVertsAcross + _x2 + 1;
  24138. }
  24139. }
  24140. // Optionally, unpack indexed geometry
  24141. if (unpack) {
  24142. var positions2 = new Float32Array(indices.length * 3);
  24143. var normals2 = new Float32Array(indices.length * 3);
  24144. var texCoords2 = new Float32Array(indices.length * 2);
  24145. for (var _x3 = 0; _x3 < indices.length; ++_x3) {
  24146. var _index = indices[_x3];
  24147. positions2[_x3 * 3 + 0] = positions[_index * 3 + 0];
  24148. positions2[_x3 * 3 + 1] = positions[_index * 3 + 1];
  24149. positions2[_x3 * 3 + 2] = positions[_index * 3 + 2];
  24150. normals2[_x3 * 3 + 0] = normals[_index * 3 + 0];
  24151. normals2[_x3 * 3 + 1] = normals[_index * 3 + 1];
  24152. normals2[_x3 * 3 + 2] = normals[_index * 3 + 2];
  24153. texCoords2[_x3 * 2 + 0] = texCoords[_index * 2 + 0];
  24154. texCoords2[_x3 * 2 + 1] = texCoords[_index * 2 + 1];
  24155. }
  24156. positions = positions2;
  24157. normals = normals2;
  24158. texCoords = texCoords2;
  24159. indices = undefined;
  24160. }
  24161. var attributes = {
  24162. positions: positions,
  24163. normals: normals,
  24164. texCoords: texCoords
  24165. };
  24166. if (indices) {
  24167. attributes.indices = indices;
  24168. }
  24169. return _possibleConstructorReturn(this, (PlaneGeometry.__proto__ || Object.getPrototypeOf(PlaneGeometry)).call(this, Object.assign({}, opts, { attributes: attributes, id: id })));
  24170. }
  24171. return PlaneGeometry;
  24172. }(__WEBPACK_IMPORTED_MODULE_0__geometry__["a" /* default */]);
  24173. /* harmony default export */ __webpack_exports__["a"] = (PlaneGeometry);
  24174. //# sourceMappingURL=plane-geometry.js.map
  24175. /***/ }),
  24176. /* 256 */
  24177. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24178. "use strict";
  24179. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(45);
  24180. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(8);
  24181. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  24182. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  24183. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  24184. var SphereGeometry = /*#__PURE__*/function (_Geometry) {
  24185. _inherits(SphereGeometry, _Geometry);
  24186. function SphereGeometry() {
  24187. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  24188. _classCallCheck(this, SphereGeometry);
  24189. var _opts$nlat = opts.nlat,
  24190. nlat = _opts$nlat === undefined ? 10 : _opts$nlat,
  24191. _opts$nlong = opts.nlong,
  24192. nlong = _opts$nlong === undefined ? 10 : _opts$nlong,
  24193. _opts$radius = opts.radius,
  24194. radius = _opts$radius === undefined ? 1 : _opts$radius,
  24195. _opts$id = opts.id,
  24196. id = _opts$id === undefined ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__utils__["d" /* uid */])('sphere-geometry') : _opts$id;
  24197. return _possibleConstructorReturn(this, (SphereGeometry.__proto__ || Object.getPrototypeOf(SphereGeometry)).call(this, Object.assign({}, opts, { id: id, attributes: getSphereAttributes(nlat, nlong, radius) })));
  24198. }
  24199. return SphereGeometry;
  24200. }(__WEBPACK_IMPORTED_MODULE_0__geometry__["a" /* default */]);
  24201. // Primitives inspired by TDL http://code.google.com/p/webglsamples/,
  24202. // copyright 2011 Google Inc. new BSD License
  24203. // (http://www.opensource.org/licenses/bsd-license.php).
  24204. /* eslint-disable max-statements, complexity */
  24205. /* harmony default export */ __webpack_exports__["a"] = (SphereGeometry);
  24206. function getSphereAttributes(nlat, nlong, radius) {
  24207. var startLat = 0;
  24208. var endLat = Math.PI;
  24209. var latRange = endLat - startLat;
  24210. var startLong = 0;
  24211. var endLong = 2 * Math.PI;
  24212. var longRange = endLong - startLong;
  24213. var numVertices = (nlat + 1) * (nlong + 1);
  24214. if (typeof radius === 'number') {
  24215. var value = radius;
  24216. radius = function radius(n1, n2, n3, u, v) {
  24217. return value;
  24218. };
  24219. }
  24220. var positions = new Float32Array(numVertices * 3);
  24221. var normals = new Float32Array(numVertices * 3);
  24222. var texCoords = new Float32Array(numVertices * 2);
  24223. var indices = new Uint16Array(nlat * nlong * 6);
  24224. // Create positions, normals and texCoords
  24225. for (var y = 0; y <= nlat; y++) {
  24226. for (var x = 0; x <= nlong; x++) {
  24227. var u = x / nlong;
  24228. var v = y / nlat;
  24229. var index = x + y * (nlong + 1);
  24230. var i2 = index * 2;
  24231. var i3 = index * 3;
  24232. var theta = longRange * u;
  24233. var phi = latRange * v;
  24234. var sinTheta = Math.sin(theta);
  24235. var cosTheta = Math.cos(theta);
  24236. var sinPhi = Math.sin(phi);
  24237. var cosPhi = Math.cos(phi);
  24238. var ux = cosTheta * sinPhi;
  24239. var uy = cosPhi;
  24240. var uz = sinTheta * sinPhi;
  24241. var r = radius(ux, uy, uz, u, v);
  24242. positions[i3 + 0] = r * ux;
  24243. positions[i3 + 1] = r * uy;
  24244. positions[i3 + 2] = r * uz;
  24245. normals[i3 + 0] = ux;
  24246. normals[i3 + 1] = uy;
  24247. normals[i3 + 2] = uz;
  24248. texCoords[i2 + 0] = u;
  24249. texCoords[i2 + 1] = v;
  24250. }
  24251. }
  24252. // Create indices
  24253. var numVertsAround = nlat + 1;
  24254. for (var _x2 = 0; _x2 < nlat; _x2++) {
  24255. for (var _y = 0; _y < nlong; _y++) {
  24256. var _index = (_x2 * nlong + _y) * 6;
  24257. indices[_index + 0] = _y * numVertsAround + _x2;
  24258. indices[_index + 1] = _y * numVertsAround + _x2 + 1;
  24259. indices[_index + 2] = (_y + 1) * numVertsAround + _x2;
  24260. indices[_index + 3] = (_y + 1) * numVertsAround + _x2;
  24261. indices[_index + 4] = _y * numVertsAround + _x2 + 1;
  24262. indices[_index + 5] = (_y + 1) * numVertsAround + _x2 + 1;
  24263. }
  24264. }
  24265. return {
  24266. positions: positions,
  24267. indices: indices,
  24268. normals: normals,
  24269. texCoords: texCoords
  24270. };
  24271. }
  24272. //# sourceMappingURL=sphere-geometry.js.map
  24273. /***/ }),
  24274. /* 257 */
  24275. /***/ (function(module, exports, __webpack_require__) {
  24276. "use strict";
  24277. Object.defineProperty(exports, "__esModule", {
  24278. value: true
  24279. });
  24280. exports.setPathPrefix = setPathPrefix;
  24281. exports.loadFile = loadFile;
  24282. exports.loadImage = loadImage;
  24283. var _browserRequestFile = __webpack_require__(629);
  24284. var pathPrefix = '';
  24285. /*
  24286. * Set a relative path prefix
  24287. */
  24288. function setPathPrefix(prefix) {
  24289. pathPrefix = prefix;
  24290. }
  24291. function loadFile(url, opts) {
  24292. if (typeof url !== 'string' && !opts) {
  24293. // TODO - warn for deprecated mode
  24294. opts = url;
  24295. url = opts.url;
  24296. }
  24297. opts.url = pathPrefix ? pathPrefix + url : url;
  24298. return (0, _browserRequestFile.requestFile)(opts);
  24299. }
  24300. /* global Image */
  24301. /*
  24302. * Loads images asynchronously
  24303. * image.crossOrigin can be set via opts.crossOrigin, default to 'anonymous'
  24304. * returns a promise tracking the load
  24305. */
  24306. function loadImage(url, opts) {
  24307. url = pathPrefix ? pathPrefix + url : url;
  24308. return new Promise(function (resolve, reject) {
  24309. try {
  24310. var image = new Image();
  24311. image.onload = function () {
  24312. return resolve(image);
  24313. };
  24314. image.onerror = function () {
  24315. return reject(new Error('Could not load image ' + url + '.'));
  24316. };
  24317. image.crossOrigin = opts && opts.crossOrigin || 'anonymous';
  24318. image.src = url;
  24319. } catch (error) {
  24320. reject(error);
  24321. }
  24322. });
  24323. }
  24324. //# sourceMappingURL=browser-load.js.map
  24325. /***/ }),
  24326. /* 258 */
  24327. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24328. "use strict";
  24329. /* harmony export (immutable) */ __webpack_exports__["a"] = assembleShaders;
  24330. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shader_modules__ = __webpack_require__(162);
  24331. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__platform_defines__ = __webpack_require__(643);
  24332. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__modules_module_injectors__ = __webpack_require__(655);
  24333. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert__ = __webpack_require__(1);
  24334. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_assert__);
  24335. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils__ = __webpack_require__(8);
  24336. var _SHADER_TYPE, _MODULE_INJECTORS;
  24337. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  24338. var VERTEX_SHADER = 'vs';
  24339. var FRAGMENT_SHADER = 'fs';
  24340. var SHADER_TYPE = (_SHADER_TYPE = {}, _defineProperty(_SHADER_TYPE, VERTEX_SHADER, 'vertex'), _defineProperty(_SHADER_TYPE, FRAGMENT_SHADER, 'fragment'), _SHADER_TYPE);
  24341. var MODULE_INJECTORS = (_MODULE_INJECTORS = {}, _defineProperty(_MODULE_INJECTORS, VERTEX_SHADER, __WEBPACK_IMPORTED_MODULE_2__modules_module_injectors__["a" /* MODULE_INJECTORS_VS */]), _defineProperty(_MODULE_INJECTORS, FRAGMENT_SHADER, __WEBPACK_IMPORTED_MODULE_2__modules_module_injectors__["b" /* MODULE_INJECTORS_FS */]), _MODULE_INJECTORS);
  24342. // Precision prologue to inject before functions are injected in shader
  24343. // TODO - extract any existing prologue in the fragment source and move it up...
  24344. var FRAGMENT_SHADER_PROLOGUE = '#ifdef GL_ES\nprecision highp float;\n#endif\n\n';
  24345. // Generate "glslify-compatible" SHADER_NAME defines
  24346. // These are understood by the GLSL error parsing function
  24347. // If id is provided and no SHADER_NAME constant is present in source, create one
  24348. function getShaderName(_ref) {
  24349. var id = _ref.id,
  24350. source = _ref.source,
  24351. type = _ref.type;
  24352. var injectShaderName = id && typeof id === 'string' && source.indexOf('SHADER_NAME') === -1;
  24353. return injectShaderName ? '\n#define SHADER_NAME ' + id + '_' + SHADER_TYPE[type] + '\n\n' : '';
  24354. }
  24355. // Generates application defines from an object
  24356. function getApplicationDefines() {
  24357. var defines = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  24358. var count = 0;
  24359. var sourceText = '';
  24360. for (var define in defines) {
  24361. if (count === 0) {
  24362. sourceText += '\n// APPLICATION DEFINES\n';
  24363. }
  24364. count++;
  24365. sourceText += '#define ' + define.toUpperCase() + ' ' + defines[define] + '\n';
  24366. }
  24367. if (count === 0) {
  24368. sourceText += '\n';
  24369. }
  24370. return sourceText;
  24371. }
  24372. // Warn about deprecated uniforms or functions
  24373. function checkDeprecation(moduleName, shaderSource) {
  24374. var shaderModule = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shader_modules__["c" /* getShaderModule */])(moduleName);
  24375. shaderModule.deprecations.forEach(function (def) {
  24376. if (def.regex.test(shaderSource)) {
  24377. if (def.deprecated) {
  24378. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].deprecated(def.old, def.new);
  24379. } else {
  24380. __WEBPACK_IMPORTED_MODULE_4__utils__["b" /* log */].removed(def.old, def.new);
  24381. }
  24382. }
  24383. });
  24384. }
  24385. // Extracts the source code chunk for the specified shader type from the named shader module
  24386. function getModuleSource(moduleName, type) {
  24387. var shaderModule = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shader_modules__["c" /* getShaderModule */])(moduleName);
  24388. var moduleSource = void 0;
  24389. switch (type) {
  24390. case VERTEX_SHADER:
  24391. moduleSource = shaderModule.vs || shaderModule.vertexShader;
  24392. break;
  24393. case FRAGMENT_SHADER:
  24394. moduleSource = shaderModule.fs || shaderModule.fragmentShader;
  24395. break;
  24396. default:
  24397. __WEBPACK_IMPORTED_MODULE_3_assert___default()(false);
  24398. }
  24399. if (typeof moduleSource !== 'string') {
  24400. return '';
  24401. }
  24402. return '#define MODULE_' + moduleName.toUpperCase() + '\n' + moduleSource + '// END MODULE_' + moduleName + '\n\n';
  24403. }
  24404. // Pulls together complete source code for either a vertex or a fragment shader
  24405. // adding prologues, requested module chunks, and any final injections.
  24406. function assembleShader(gl, _ref2) {
  24407. var id = _ref2.id,
  24408. source = _ref2.source,
  24409. type = _ref2.type,
  24410. _ref2$modules = _ref2.modules,
  24411. modules = _ref2$modules === undefined ? [] : _ref2$modules,
  24412. _ref2$defines = _ref2.defines,
  24413. defines = _ref2$defines === undefined ? {} : _ref2$defines;
  24414. __WEBPACK_IMPORTED_MODULE_3_assert___default()(typeof source === 'string', 'shader source must be a string');
  24415. var sourceLines = source.split('\n');
  24416. var versionLine = '';
  24417. var coreSource = source;
  24418. // Extract any version directive string from source.
  24419. // TODO : keep all pre-processor statements at the begining of the shader.
  24420. if (sourceLines[0].indexOf('#version ') === 0) {
  24421. versionLine = sourceLines[0];
  24422. coreSource = sourceLines.slice(1).join('\n');
  24423. }
  24424. // Add platform defines (use these to work around platform-specific bugs and limitations)
  24425. // Add common defines (GLSL version compatibility, feature detection)
  24426. // Add precision declaration for fragment shaders
  24427. var assembledSource = getShaderName({ id: id, source: source, type: type }) + '\n' + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__platform_defines__["a" /* getPlatformShaderDefines */])(gl) + '\n' + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__platform_defines__["b" /* getVersionDefines */])(gl) + '\n' + getApplicationDefines(defines) + '\n' + (type === FRAGMENT_SHADER ? FRAGMENT_SHADER_PROLOGUE : '') + '\n';
  24428. // Add source of dependent modules in resolved order
  24429. var inject = false;
  24430. var _iteratorNormalCompletion = true;
  24431. var _didIteratorError = false;
  24432. var _iteratorError = undefined;
  24433. try {
  24434. for (var _iterator = modules[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  24435. var moduleName = _step.value;
  24436. switch (moduleName) {
  24437. case 'inject':
  24438. inject = true;
  24439. break;
  24440. default:
  24441. checkDeprecation(moduleName, coreSource);
  24442. // Add the module source, and a #define that declares it presence
  24443. assembledSource += getModuleSource(moduleName, type);
  24444. }
  24445. }
  24446. // Add the version directive and actual source of this shader
  24447. } catch (err) {
  24448. _didIteratorError = true;
  24449. _iteratorError = err;
  24450. } finally {
  24451. try {
  24452. if (!_iteratorNormalCompletion && _iterator.return) {
  24453. _iterator.return();
  24454. }
  24455. } finally {
  24456. if (_didIteratorError) {
  24457. throw _iteratorError;
  24458. }
  24459. }
  24460. }
  24461. assembledSource = versionLine + assembledSource + coreSource;
  24462. // Finally, if requested, insert an automatic module injector chunk
  24463. if (inject) {
  24464. assembledSource.replace('}\s*$', MODULE_INJECTORS);
  24465. }
  24466. return assembledSource;
  24467. }
  24468. // Returns a combined `getUniforms` covering the options for all the modules,
  24469. // the created function will pass on options to the inidividual `getUniforms`
  24470. // function of each shader module and combine the results into one object that
  24471. // can be passed to setUniforms.
  24472. function assembleGetUniforms(modules) {
  24473. return function getUniforms(opts) {
  24474. var uniforms = {};
  24475. var _iteratorNormalCompletion2 = true;
  24476. var _didIteratorError2 = false;
  24477. var _iteratorError2 = undefined;
  24478. try {
  24479. for (var _iterator2 = modules[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  24480. var moduleName = _step2.value;
  24481. var shaderModule = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shader_modules__["c" /* getShaderModule */])(moduleName);
  24482. // `modules` is already sorted by dependency level. This guarantees that
  24483. // modules have access to the uniforms that are generated by their dependencies.
  24484. var moduleUniforms = shaderModule.getUniforms ? shaderModule.getUniforms(opts, uniforms) : {};
  24485. Object.assign(uniforms, moduleUniforms);
  24486. }
  24487. } catch (err) {
  24488. _didIteratorError2 = true;
  24489. _iteratorError2 = err;
  24490. } finally {
  24491. try {
  24492. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  24493. _iterator2.return();
  24494. }
  24495. } finally {
  24496. if (_didIteratorError2) {
  24497. throw _iteratorError2;
  24498. }
  24499. }
  24500. }
  24501. return uniforms;
  24502. };
  24503. }
  24504. // Returns a map with module names as keys, resolving to their module definitions
  24505. // The presence of a key indicates that the module is available in this program,
  24506. // whether directly included, or through a dependency of some other module
  24507. function assembleModuleMap(modules) {
  24508. var result = {};
  24509. var _iteratorNormalCompletion3 = true;
  24510. var _didIteratorError3 = false;
  24511. var _iteratorError3 = undefined;
  24512. try {
  24513. for (var _iterator3 = modules[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  24514. var moduleName = _step3.value;
  24515. var shaderModule = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shader_modules__["c" /* getShaderModule */])(moduleName);
  24516. result[moduleName] = shaderModule;
  24517. }
  24518. } catch (err) {
  24519. _didIteratorError3 = true;
  24520. _iteratorError3 = err;
  24521. } finally {
  24522. try {
  24523. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  24524. _iterator3.return();
  24525. }
  24526. } finally {
  24527. if (_didIteratorError3) {
  24528. throw _iteratorError3;
  24529. }
  24530. }
  24531. }
  24532. return result;
  24533. }
  24534. /**
  24535. * Apply set of modules
  24536. */
  24537. function assembleShaders(gl) {
  24538. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  24539. var vs = opts.vs,
  24540. fs = opts.fs;
  24541. var modules = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shader_modules__["d" /* resolveModules */])(opts.modules || []);
  24542. return {
  24543. gl: gl,
  24544. vs: assembleShader(gl, Object.assign({}, opts, { source: vs, type: VERTEX_SHADER, modules: modules })),
  24545. fs: assembleShader(gl, Object.assign({}, opts, { source: fs, type: FRAGMENT_SHADER, modules: modules })),
  24546. getUniforms: assembleGetUniforms(modules),
  24547. modules: assembleModuleMap(modules)
  24548. };
  24549. }
  24550. //# sourceMappingURL=assemble-shaders.js.map
  24551. /***/ }),
  24552. /* 259 */
  24553. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24554. "use strict";
  24555. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__webgl_shader__ = __webpack_require__(111);
  24556. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_program__ = __webpack_require__(109);
  24557. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert__ = __webpack_require__(1);
  24558. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_assert__);
  24559. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  24560. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  24561. var ShaderCache = /*#__PURE__*/function () {
  24562. /**
  24563. * A cache of compiled shaders, keyed by shader source strings.
  24564. * Compilation of long shaders can be time consuming.
  24565. * By using this class, the application can ensure that each shader
  24566. * is only compiled once.
  24567. */
  24568. function ShaderCache() {
  24569. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  24570. gl = _ref.gl,
  24571. _ref$_cachePrograms = _ref._cachePrograms,
  24572. _cachePrograms = _ref$_cachePrograms === undefined ? false : _ref$_cachePrograms;
  24573. _classCallCheck(this, ShaderCache);
  24574. __WEBPACK_IMPORTED_MODULE_2_assert___default()(gl);
  24575. this.gl = gl;
  24576. this.vertexShaders = {};
  24577. this.fragmentShaders = {};
  24578. this.programs = {};
  24579. this._cachePrograms = _cachePrograms;
  24580. }
  24581. /**
  24582. * Deletes shader references
  24583. * @return {ShaderCache} - returns this for chaining
  24584. */
  24585. _createClass(ShaderCache, [{
  24586. key: 'delete',
  24587. value: function _delete() {
  24588. // TODO - requires reference counting to avoid deleting shaders in use
  24589. return this;
  24590. }
  24591. /**
  24592. * Returns a compiled `VertexShader` object corresponding to the supplied
  24593. * GLSL source code string, if possible from cache.
  24594. *
  24595. * @param {WebGLRenderingContext} gl - gl context
  24596. * @param {String} source - Source code for shader
  24597. * @return {VertexShader} - a compiled vertex shader
  24598. */
  24599. }, {
  24600. key: 'getVertexShader',
  24601. value: function getVertexShader(gl, source) {
  24602. __WEBPACK_IMPORTED_MODULE_2_assert___default()(typeof source === 'string');
  24603. __WEBPACK_IMPORTED_MODULE_2_assert___default()(this._compareContexts(gl, this.gl));
  24604. var shader = this.vertexShaders[source];
  24605. if (!shader) {
  24606. shader = new __WEBPACK_IMPORTED_MODULE_0__webgl_shader__["b" /* VertexShader */](gl, source);
  24607. this.vertexShaders[source] = shader;
  24608. }
  24609. return shader;
  24610. }
  24611. /**
  24612. * Returns a compiled `VertexShader` object corresponding to the supplied
  24613. * GLSL source code string, if possible from cache.
  24614. * @param {WebGLRenderingContext} gl - gl context
  24615. * @param {String} source - Source code for shader
  24616. * @return {FragmentShader} - a compiled fragment shader, possibly from chache
  24617. */
  24618. }, {
  24619. key: 'getFragmentShader',
  24620. value: function getFragmentShader(gl, source) {
  24621. __WEBPACK_IMPORTED_MODULE_2_assert___default()(typeof source === 'string');
  24622. __WEBPACK_IMPORTED_MODULE_2_assert___default()(this._compareContexts(gl, this.gl));
  24623. var shader = this.fragmentShaders[source];
  24624. if (!shader) {
  24625. shader = new __WEBPACK_IMPORTED_MODULE_0__webgl_shader__["c" /* FragmentShader */](gl, source);
  24626. this.fragmentShaders[source] = shader;
  24627. }
  24628. return shader;
  24629. }
  24630. // Retrive Shaders from cache if exists, otherwise create new instance.
  24631. }, {
  24632. key: 'getProgram',
  24633. value: function getProgram(gl, opts) {
  24634. __WEBPACK_IMPORTED_MODULE_2_assert___default()(this._compareContexts(gl, this.gl));
  24635. __WEBPACK_IMPORTED_MODULE_2_assert___default()(typeof opts.vs === 'string');
  24636. __WEBPACK_IMPORTED_MODULE_2_assert___default()(typeof opts.fs === 'string');
  24637. __WEBPACK_IMPORTED_MODULE_2_assert___default()(typeof opts.id === 'string');
  24638. var cacheKey = this._getProgramKey(opts);
  24639. var program = this.programs[cacheKey];
  24640. if (program) {
  24641. this._resetProgram(program);
  24642. return program;
  24643. }
  24644. program = this._createNewProgram(gl, opts);
  24645. // Check if program can be cached
  24646. // Program caching is experimental and expects
  24647. // each Model to have a unique-id (wich is used in key generation)
  24648. if (this._cachePrograms && this._checkProgramProp(program)) {
  24649. this.programs[cacheKey] = program;
  24650. }
  24651. return program;
  24652. }
  24653. }, {
  24654. key: '_getProgramKey',
  24655. value: function _getProgramKey(opts) {
  24656. return opts.id + '-' + opts.vs + '-' + opts.fs;
  24657. }
  24658. }, {
  24659. key: '_checkProgramProp',
  24660. value: function _checkProgramProp(program) {
  24661. // Check for transform feedback props (varyings, etc), we can't key such programs for now
  24662. return !program.varyings;
  24663. }
  24664. }, {
  24665. key: '_createNewProgram',
  24666. value: function _createNewProgram(gl, opts) {
  24667. var vs = opts.vs,
  24668. fs = opts.fs;
  24669. var vertexShader = this.getVertexShader(gl, vs);
  24670. var fragmentShader = this.getFragmentShader(gl, fs);
  24671. return new __WEBPACK_IMPORTED_MODULE_1__webgl_program__["a" /* default */](this.gl, Object.assign({}, opts, {
  24672. vs: vertexShader,
  24673. fs: fragmentShader
  24674. }));
  24675. }
  24676. }, {
  24677. key: '_resetProgram',
  24678. value: function _resetProgram(program, opts) {
  24679. program.reset();
  24680. }
  24681. // Handle debug contexts
  24682. }, {
  24683. key: '_compareContexts',
  24684. value: function _compareContexts(gl1, gl2) {
  24685. return (gl1.gl || gl1) === (gl2.gl || gl2);
  24686. }
  24687. }]);
  24688. return ShaderCache;
  24689. }();
  24690. /* harmony default export */ __webpack_exports__["a"] = (ShaderCache);
  24691. //# sourceMappingURL=shader-cache.js.map
  24692. /***/ }),
  24693. /* 260 */
  24694. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24695. "use strict";
  24696. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_math_gl__ = __webpack_require__(16);
  24697. var IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
  24698. var DEFAULT_MODULE_OPTIONS = {
  24699. modelMatrix: IDENTITY_MATRIX,
  24700. viewMatrix: IDENTITY_MATRIX,
  24701. projectionMatrix: IDENTITY_MATRIX,
  24702. cameraPositionWorld: [0, 0, 0]
  24703. };
  24704. function getUniforms() {
  24705. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MODULE_OPTIONS;
  24706. var prevUniforms = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  24707. // const viewProjectionInverse = viewProjection.invert();
  24708. // viewInverseMatrix: view.invert(),
  24709. // viewProjectionInverseMatrix: viewProjectionInverse
  24710. var uniforms = {};
  24711. if (opts.modelMatrix !== undefined) {
  24712. uniforms.modelMatrix = opts.modelMatrix;
  24713. }
  24714. if (opts.viewMatrix !== undefined) {
  24715. uniforms.viewMatrix = opts.viewMatrix;
  24716. }
  24717. if (opts.projectionMatrix !== undefined) {
  24718. uniforms.projectionMatrix = opts.projectionMatrix;
  24719. }
  24720. if (opts.cameraPositionWorld !== undefined) {
  24721. uniforms.cameraPositionWorld = opts.cameraPositionWorld;
  24722. }
  24723. // COMPOSITE UNIFORMS
  24724. if (opts.projectionMatrix !== undefined || opts.viewMatrix !== undefined) {
  24725. uniforms.viewProjectionMatrix = new __WEBPACK_IMPORTED_MODULE_0_math_gl__["Matrix4"](opts.projectionMatrix).multiplyRight(opts.viewMatrix);
  24726. }
  24727. return uniforms;
  24728. }
  24729. var common = 'varying vec4 project_vPositionWorld;\nvarying vec3 project_vNormalWorld;\n\nvec4 project_getPosition_World() {\n return project_vPositionWorld;\n}\n\nvec3 project_getNormal_World() {\n return project_vNormalWorld;\n}\n';
  24730. var vs = common + '\n\n// Unprefixed uniforms\nuniform mat4 modelMatrix;\nuniform mat4 viewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewProjectionMatrix;\nuniform vec3 cameraPositionWorld;\n\nstruct World {\n vec3 position;\n vec3 normal;\n};\n\nWorld world;\n\nvoid project_setPosition(vec4 position) {\n project_vPositionWorld = position;\n}\n\nvoid project_setNormal(vec3 normal) {\n project_vNormalWorld = normal;\n}\n\nvoid project_setPositionAndNormal_World(vec3 position, vec3 normal) {\n world.position = position;\n world.normal = normal;\n}\n\nvoid project_setPositionAndNormal_Model(vec3 position, vec3 normal) {\n world.position = (modelMatrix * vec4(position, 1.)).xyz;\n world.normal = mat3(modelMatrix) * normal;\n}\n\nvec4 project_model_to_clipspace(vec4 position) {\n return viewProjectionMatrix * modelMatrix * position;\n}\n\nvec4 project_model_to_clipspace(vec3 position) {\n return viewProjectionMatrix * modelMatrix * vec4(position, 1.);\n}\n\nvec4 project_world_to_clipspace(vec3 position) {\n return viewProjectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_view_to_clipspace(vec3 position) {\n return projectionMatrix * vec4(position, 1.);\n}\n\nvec4 project_to_clipspace(vec3 position) {\n return viewProjectionMatrix * vec4(position, 1.);\n}\n';
  24731. var fs = '\n' + common;
  24732. /* harmony default export */ __webpack_exports__["a"] = ({
  24733. name: 'project',
  24734. getUniforms: getUniforms,
  24735. vs: vs,
  24736. fs: fs
  24737. });
  24738. //# sourceMappingURL=project.js.map
  24739. /***/ }),
  24740. /* 261 */
  24741. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24742. "use strict";
  24743. /* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return window_; });
  24744. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return global_; });
  24745. /* unused harmony export document */
  24746. /* global window, global, document */
  24747. var window_ = typeof window !== 'undefined' ? window : global;
  24748. var global_ = typeof global !== 'undefined' ? global : window;
  24749. var document_ = typeof document !== 'undefined' ? document : {};
  24750. //# sourceMappingURL=globals.js.map
  24751. /* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(47)))
  24752. /***/ }),
  24753. /* 262 */
  24754. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24755. "use strict";
  24756. /* WEBPACK VAR INJECTION */(function(process) {/* unused harmony export isNode */
  24757. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return isBrowser; });
  24758. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  24759. // This function is needed in initialization stages,
  24760. // make sure it can be imported in isolation
  24761. /* global process */
  24762. var isNode = (typeof process === 'undefined' ? 'undefined' : _typeof(process)) === 'object' && String(process) === '[object process]' && !process.browser;
  24763. var isBrowser = !isNode;
  24764. /* unused harmony default export */ var _unused_webpack_default_export = (isBrowser);
  24765. //# sourceMappingURL=is-browser.js.map
  24766. /* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(26)))
  24767. /***/ }),
  24768. /* 263 */
  24769. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24770. "use strict";
  24771. /* harmony export (immutable) */ __webpack_exports__["b"] = formatValue;
  24772. /* eslint-disable no-console */
  24773. /* global console, window, Image */
  24774. console.debug = console.debug || console.log;
  24775. var cache = {};
  24776. var _log = {
  24777. priority: 0,
  24778. table: function table(priority, _table) {
  24779. if (priority <= _log.priority && _table) {
  24780. console.table(_table);
  24781. }
  24782. },
  24783. log: function log(priority, arg) {
  24784. if (priority <= _log.priority) {
  24785. var _console;
  24786. for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
  24787. args[_key - 2] = arguments[_key];
  24788. }
  24789. (_console = console).debug.apply(_console, ['luma.gl: ' + arg].concat(args));
  24790. }
  24791. },
  24792. info: function info(priority, arg) {
  24793. if (priority <= _log.priority) {
  24794. var _console2;
  24795. for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
  24796. args[_key2 - 2] = arguments[_key2];
  24797. }
  24798. (_console2 = console).log.apply(_console2, ['luma.gl: ' + arg].concat(args));
  24799. }
  24800. },
  24801. once: function once(priority, arg) {
  24802. if (!cache[arg]) {
  24803. for (var _len3 = arguments.length, args = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
  24804. args[_key3 - 2] = arguments[_key3];
  24805. }
  24806. _log.log.apply(_log, [priority, arg].concat(args));
  24807. cache[arg] = true;
  24808. }
  24809. },
  24810. warn: function warn(arg) {
  24811. if (!cache[arg]) {
  24812. var _console3;
  24813. for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
  24814. args[_key4 - 1] = arguments[_key4];
  24815. }
  24816. (_console3 = console).warn.apply(_console3, ['luma.gl: ' + arg].concat(args));
  24817. cache[arg] = true;
  24818. }
  24819. },
  24820. error: function error(arg) {
  24821. var _console4;
  24822. for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
  24823. args[_key5 - 1] = arguments[_key5];
  24824. }
  24825. (_console4 = console).error.apply(_console4, ['luma.gl: ' + arg].concat(args));
  24826. },
  24827. image: function image(_ref) {
  24828. var priority = _ref.priority,
  24829. _image = _ref.image,
  24830. _ref$message = _ref.message,
  24831. message = _ref$message === undefined ? '' : _ref$message,
  24832. _ref$scale = _ref.scale,
  24833. scale = _ref$scale === undefined ? 1 : _ref$scale;
  24834. if (priority > _log.priority) {
  24835. return;
  24836. }
  24837. if (typeof window === 'undefined') {
  24838. // Let's not try this under node
  24839. return;
  24840. }
  24841. if (typeof _image === 'string') {
  24842. var img = new Image();
  24843. img.onload = logImage.bind(null, img, message, scale);
  24844. img.src = _image;
  24845. }
  24846. var element = _image.nodeName || '';
  24847. if (element.toLowerCase() === 'img') {
  24848. logImage(_image, message, scale);
  24849. }
  24850. if (element.toLowerCase() === 'canvas') {
  24851. var _img = new Image();
  24852. _img.onload = logImage.bind(null, _img, message, scale);
  24853. _img.src = _image.toDataURL();
  24854. }
  24855. },
  24856. deprecated: function deprecated(oldUsage, newUsage) {
  24857. _log.warn('`' + oldUsage + '` is deprecated and will be removed in a later version. Use `' + newUsage + '` instead');
  24858. },
  24859. removed: function removed(oldUsage, newUsage) {
  24860. _log.error('`' + oldUsage + '` is no longer supported. Use `' + newUsage + '` instead, check our Upgrade Guide for more details');
  24861. },
  24862. group: function group(priority, arg) {
  24863. var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
  24864. _ref2$collapsed = _ref2.collapsed,
  24865. collapsed = _ref2$collapsed === undefined ? false : _ref2$collapsed;
  24866. if (priority <= _log.priority) {
  24867. if (collapsed) {
  24868. console.groupCollapsed('luma.gl: ' + arg);
  24869. } else {
  24870. console.group('luma.gl: ' + arg);
  24871. }
  24872. }
  24873. },
  24874. groupEnd: function groupEnd(priority, arg) {
  24875. if (priority <= _log.priority) {
  24876. console.groupEnd('luma.gl: ' + arg);
  24877. }
  24878. },
  24879. time: function time(priority, label) {
  24880. if (priority <= _log.priority) {
  24881. // In case the platform doesn't have console.time
  24882. if (console.time) {
  24883. console.time(label);
  24884. } else {
  24885. console.info(label);
  24886. }
  24887. }
  24888. },
  24889. timeEnd: function timeEnd(priority, label) {
  24890. if (priority <= _log.priority) {
  24891. // In case the platform doesn't have console.timeEnd
  24892. if (console.timeEnd) {
  24893. console.timeEnd(label);
  24894. } else {
  24895. console.info(label);
  24896. }
  24897. }
  24898. }
  24899. };
  24900. // Inspired by https://github.com/hughsk/console-image (MIT license)
  24901. function logImage(image, message, scale) {
  24902. var width = image.width * scale;
  24903. var height = image.height * scale;
  24904. var imageUrl = image.src.replace(/\(/g, '%28').replace(/\)/g, '%29');
  24905. console.log(message + ' %c+', ['font-size:1px;', 'padding:' + Math.floor(height / 2) + 'px ' + Math.floor(width / 2) + 'px;', 'line-height:' + height + 'px;', 'background:url(' + imageUrl + ');', 'background-size:' + width + 'px ' + height + 'px;', 'color:transparent;'].join(''));
  24906. }
  24907. function formatArrayValue(v, opts) {
  24908. var _opts$maxElts = opts.maxElts,
  24909. maxElts = _opts$maxElts === undefined ? 16 : _opts$maxElts,
  24910. _opts$size = opts.size,
  24911. size = _opts$size === undefined ? 1 : _opts$size;
  24912. var string = '[';
  24913. for (var i = 0; i < v.length && i < maxElts; ++i) {
  24914. if (i > 0) {
  24915. string += ',' + (i % size === 0 ? ' ' : '');
  24916. }
  24917. string += formatValue(v[i], opts);
  24918. }
  24919. var terminator = v.length > maxElts ? '...' : ']';
  24920. return '' + string + terminator;
  24921. }
  24922. function formatValue(v) {
  24923. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  24924. var EPSILON = 1e-16;
  24925. var _opts$isInteger = opts.isInteger,
  24926. isInteger = _opts$isInteger === undefined ? false : _opts$isInteger;
  24927. if (Array.isArray(v) || ArrayBuffer.isView(v)) {
  24928. return formatArrayValue(v, opts);
  24929. }
  24930. if (!Number.isFinite(v)) {
  24931. return String(v);
  24932. }
  24933. if (Math.abs(v) < EPSILON) {
  24934. return isInteger ? '0' : '0.';
  24935. }
  24936. if (isInteger) {
  24937. return v.toFixed(0);
  24938. }
  24939. if (Math.abs(v) > 100 && Math.abs(v) < 10000) {
  24940. return v.toFixed(0);
  24941. }
  24942. var string = v.toPrecision(2);
  24943. var decimal = string.indexOf('.0');
  24944. return decimal === string.length - 2 ? string.slice(0, -1) : string;
  24945. }
  24946. /* harmony default export */ __webpack_exports__["a"] = (_log);
  24947. //# sourceMappingURL=log.js.map
  24948. /***/ }),
  24949. /* 264 */
  24950. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24951. "use strict";
  24952. /* harmony export (immutable) */ __webpack_exports__["a"] = getShaderName;
  24953. /* harmony export (immutable) */ __webpack_exports__["b"] = getShaderTypeName;
  24954. var GL_FRAGMENT_SHADER = 0x8B30;
  24955. var GL_VERTEX_SHADER = 0x8B31;
  24956. // Supports GLSLIFY style naming of shaders
  24957. // #define SHADER_NAME ...
  24958. function getShaderName(shader) {
  24959. var SHADER_NAME_REGEXP = /#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/;
  24960. var match = shader.match(SHADER_NAME_REGEXP);
  24961. return match ? match[1] : 'unnamed';
  24962. }
  24963. function getShaderTypeName(type) {
  24964. switch (type) {
  24965. case GL_FRAGMENT_SHADER:
  24966. return 'fragment';
  24967. case GL_VERTEX_SHADER:
  24968. return 'vertex';
  24969. default:
  24970. return 'unknown type';
  24971. }
  24972. }
  24973. //# sourceMappingURL=get-shader-name.js.map
  24974. /***/ }),
  24975. /* 265 */
  24976. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  24977. "use strict";
  24978. /* harmony export (immutable) */ __webpack_exports__["a"] = polyfillContext;
  24979. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert__ = __webpack_require__(1);
  24980. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_assert__);
  24981. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__polyfill_get_parameter__ = __webpack_require__(666);
  24982. var _WEBGL_CONTEXT_POLYFI;
  24983. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  24984. // WebGL1/WebGL2 extension polyfill support
  24985. //
  24986. // Provides a function that creates polyfills for WebGL2 functions based
  24987. // on available extensions and installs them on a supplied target (could be
  24988. // the WebGLContext or its prototype, or a separate object).
  24989. //
  24990. // This is intended to be a stand-alone file with minimal dependencies,
  24991. // easy to reuse or repurpose in other projects.
  24992. /* eslint-disable camelcase, brace-style */
  24993. var OES_vertex_array_object = 'OES_vertex_array_object';
  24994. var ANGLE_instanced_arrays = 'ANGLE_instanced_arrays';
  24995. var WEBGL_draw_buffers = 'WEBGL_draw_buffers';
  24996. var EXT_disjoint_timer_query = 'EXT_disjoint_timer_query';
  24997. var EXT_disjoint_timer_query_webgl2 = 'EXT_disjoint_timer_query_webgl2';
  24998. var EXT_texture_filter_anisotropic = 'EXT_texture_filter_anisotropic';
  24999. var ERR_VAO_NOT_SUPPORTED = 'VertexArray requires WebGL2 or OES_vertex_array_object extension';
  25000. // Return true if WebGL2 context
  25001. function isWebGL2(gl) {
  25002. var GL_TEXTURE_BINDING_3D = 0x806A;
  25003. return gl && gl.TEXTURE_BINDING_3D === GL_TEXTURE_BINDING_3D;
  25004. }
  25005. // Return object with webgl2 flag and an extension
  25006. function getExtensionData(gl, extension) {
  25007. return {
  25008. webgl2: isWebGL2(gl),
  25009. ext: gl.getExtension(extension)
  25010. };
  25011. }
  25012. // function mapExtensionConstant(gl, constant) {
  25013. // switch (constant) {
  25014. // case ext.FRAGMENT_SHADER_DERIVATIVE_HINT_OES: return GL.FRAGMENT_SHADER_DERIVATIVE_HINT;
  25015. // }
  25016. // }
  25017. var WEBGL_CONTEXT_POLYFILLS = (_WEBGL_CONTEXT_POLYFI = {}, _defineProperty(_WEBGL_CONTEXT_POLYFI, OES_vertex_array_object, {
  25018. meta: { suffix: 'OES' },
  25019. // NEW METHODS
  25020. createVertexArray: function createVertexArray() {
  25021. __WEBPACK_IMPORTED_MODULE_0_assert___default()(false, ERR_VAO_NOT_SUPPORTED);
  25022. },
  25023. deleteVertexArray: function deleteVertexArray() {},
  25024. bindVertexArray: function bindVertexArray() {},
  25025. isVertexArray: function isVertexArray() {
  25026. return false;
  25027. }
  25028. }), _defineProperty(_WEBGL_CONTEXT_POLYFI, ANGLE_instanced_arrays, {
  25029. meta: {
  25030. suffix: 'ANGLE'
  25031. // constants: {
  25032. // VERTEX_ATTRIB_ARRAY_DIVISOR: 'VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE'
  25033. // }
  25034. },
  25035. vertexAttribDivisor: function vertexAttribDivisor(location, divisor) {
  25036. // Accept divisor 0 even if instancing is not supported (0 = no instancing)
  25037. __WEBPACK_IMPORTED_MODULE_0_assert___default()(divisor === 0, 'WebGL instanced rendering not supported');
  25038. },
  25039. drawElementsInstanced: function drawElementsInstanced() {},
  25040. drawArraysInstanced: function drawArraysInstanced() {}
  25041. }), _defineProperty(_WEBGL_CONTEXT_POLYFI, WEBGL_draw_buffers, {
  25042. meta: {
  25043. suffix: 'WEBGL'
  25044. },
  25045. drawBuffers: function drawBuffers() {
  25046. __WEBPACK_IMPORTED_MODULE_0_assert___default()(false);
  25047. }
  25048. }), _defineProperty(_WEBGL_CONTEXT_POLYFI, EXT_disjoint_timer_query, {
  25049. meta: { suffix: 'EXT' },
  25050. // WebGL1: Polyfills the WebGL2 Query API
  25051. createQuery: function createQuery() {
  25052. __WEBPACK_IMPORTED_MODULE_0_assert___default()(false);
  25053. },
  25054. deleteQuery: function deleteQuery() {
  25055. __WEBPACK_IMPORTED_MODULE_0_assert___default()(false);
  25056. },
  25057. beginQuery: function beginQuery() {
  25058. __WEBPACK_IMPORTED_MODULE_0_assert___default()(false);
  25059. },
  25060. endQuery: function endQuery() {},
  25061. getQuery: function getQuery(handle, pname) {
  25062. return this.getQueryObject(handle, pname);
  25063. },
  25064. // The WebGL1 extension uses getQueryObject rather then getQueryParameter
  25065. getQueryParameter: function getQueryParameter(handle, pname) {
  25066. return this.getQueryObject(handle, pname);
  25067. },
  25068. // plus the additional `queryCounter` method
  25069. queryCounter: function queryCounter() {},
  25070. getQueryObject: function getQueryObject() {}
  25071. }), _defineProperty(_WEBGL_CONTEXT_POLYFI, EXT_disjoint_timer_query_webgl2, {
  25072. meta: { suffix: 'EXT' },
  25073. // install `queryCounter`
  25074. // `null` avoids overwriting WebGL1 `queryCounter` if the WebGL2 extension is not available
  25075. queryCounter: null
  25076. }), _defineProperty(_WEBGL_CONTEXT_POLYFI, 'OVERRIDES', {
  25077. // Ensure readBuffer is a no-op
  25078. readBuffer: function readBuffer(gl, originalFunc, attachment) {
  25079. if (isWebGL2(gl)) {
  25080. originalFunc(attachment);
  25081. } else {
  25082. // assert(attachment !== GL_COLOR_ATTACHMENT0 && attachment !== GL_FRONT);
  25083. }
  25084. },
  25085. // Override for getVertexAttrib that returns sane values for non-WebGL1 constants
  25086. getVertexAttrib: function getVertexAttrib(gl, originalFunc, location, pname) {
  25087. // const gl = this; // eslint-disable-line
  25088. var _getExtensionData = getExtensionData(gl, ANGLE_instanced_arrays),
  25089. webgl2 = _getExtensionData.webgl2,
  25090. ext = _getExtensionData.ext;
  25091. var GL_VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD;
  25092. var GL_VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE;
  25093. var result = void 0;
  25094. switch (pname) {
  25095. // WebGL1 attributes will never be integer
  25096. case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
  25097. result = !webgl2 ? false : undefined;break;
  25098. // if instancing is not available, return 0 meaning divisor has not been set
  25099. case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
  25100. result = !webgl2 && !ext ? 0 : undefined;break;
  25101. default:
  25102. }
  25103. return result !== undefined ? result : originalFunc(location, pname);
  25104. },
  25105. // Handle transform feedback and uniform block queries in WebGL1
  25106. getProgramParameter: function getProgramParameter(gl, originalFunc, program, pname) {
  25107. var GL_TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F;
  25108. var GL_TRANSFORM_FEEDBACK_VARYINGS = 0x8C83;
  25109. var GL_ACTIVE_UNIFORM_BLOCKS = 0x8A36;
  25110. var GL_SEPARATE_ATTRIBS = 0x8C8D;
  25111. if (!isWebGL2(gl)) {
  25112. switch (pname) {
  25113. case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
  25114. return GL_SEPARATE_ATTRIBS;
  25115. case GL_TRANSFORM_FEEDBACK_VARYINGS:
  25116. return 0;
  25117. case GL_ACTIVE_UNIFORM_BLOCKS:
  25118. return 0;
  25119. default:
  25120. }
  25121. }
  25122. return originalFunc(program, pname);
  25123. },
  25124. getInternalformatParameter: function getInternalformatParameter(gl, originalFunc, target, format, pname) {
  25125. var GL_SAMPLES = 0x80A9;
  25126. if (!isWebGL2(gl)) {
  25127. switch (pname) {
  25128. case GL_SAMPLES:
  25129. return new Int32Array([0]);
  25130. default:
  25131. }
  25132. }
  25133. return gl.getInternalformatParameter(target, format, pname);
  25134. },
  25135. getTexParameter: function getTexParameter(gl, originalFunc, target, pname) {
  25136. var GL_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
  25137. switch (pname) {
  25138. case GL_TEXTURE_MAX_ANISOTROPY_EXT:
  25139. var extensions = gl.luma.extensions;
  25140. var ext = extensions[EXT_texture_filter_anisotropic];
  25141. pname = ext && ext.TEXTURE_MAX_ANISOTROPY_EXT || GL_TEXTURE_MAX_ANISOTROPY_EXT;
  25142. break;
  25143. default:
  25144. }
  25145. return originalFunc(target, pname);
  25146. },
  25147. getParameter: __WEBPACK_IMPORTED_MODULE_1__polyfill_get_parameter__["a" /* getParameterPolyfill */],
  25148. hint: function hint(gl, originalFunc, pname, value) {
  25149. // TODO - handle GL.FRAGMENT_SHADER_DERIVATIVE_HINT:
  25150. // switch (pname) {
  25151. // case GL.FRAGMENT_SHADER_DERIVATIVE_HINT:
  25152. // }
  25153. return originalFunc(pname, value);
  25154. }
  25155. }), _WEBGL_CONTEXT_POLYFI);
  25156. function initializeExtensions(gl) {
  25157. gl.luma.extensions = {};
  25158. var EXTENSIONS = gl.getSupportedExtensions();
  25159. var _iteratorNormalCompletion = true;
  25160. var _didIteratorError = false;
  25161. var _iteratorError = undefined;
  25162. try {
  25163. for (var _iterator = EXTENSIONS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  25164. var extension = _step.value;
  25165. gl.luma[extension] = gl.getExtension(extension);
  25166. }
  25167. } catch (err) {
  25168. _didIteratorError = true;
  25169. _iteratorError = err;
  25170. } finally {
  25171. try {
  25172. if (!_iteratorNormalCompletion && _iterator.return) {
  25173. _iterator.return();
  25174. }
  25175. } finally {
  25176. if (_didIteratorError) {
  25177. throw _iteratorError;
  25178. }
  25179. }
  25180. }
  25181. }
  25182. // Polyfills a single WebGL extension into the `target` object
  25183. function polyfillExtension(gl, _ref) {
  25184. var extension = _ref.extension,
  25185. target = _ref.target,
  25186. target2 = _ref.target2;
  25187. var defaults = WEBGL_CONTEXT_POLYFILLS[extension];
  25188. __WEBPACK_IMPORTED_MODULE_0_assert___default()(defaults);
  25189. var _defaults$meta = defaults.meta,
  25190. meta = _defaults$meta === undefined ? {} : _defaults$meta;
  25191. var _meta$suffix = meta.suffix,
  25192. suffix = _meta$suffix === undefined ? '' : _meta$suffix;
  25193. var ext = gl.getExtension(extension);
  25194. Object.keys(defaults).forEach(function (key) {
  25195. var extKey = '' + key + suffix;
  25196. var polyfill = null;
  25197. if (key === 'meta') {
  25198. // ignore
  25199. } else if (typeof gl[key] === 'function') {
  25200. // WebGL2 implementation is already
  25201. } else if (ext && typeof ext[extKey] === 'function') {
  25202. // pick extension implemenentation,if available
  25203. polyfill = function polyfill() {
  25204. return ext[extKey].apply(ext, arguments);
  25205. };
  25206. } else if (typeof defaults[key] === 'function') {
  25207. // pick the mock implementation, if no implementation was detected
  25208. polyfill = defaults[key].bind(target);
  25209. }
  25210. if (polyfill) {
  25211. target[key] = polyfill;
  25212. target2[key] = polyfill;
  25213. }
  25214. });
  25215. }
  25216. // Install simple overrides (mostly get* functions)
  25217. function installOverrides(gl, _ref2) {
  25218. var target = _ref2.target,
  25219. target2 = _ref2.target2;
  25220. var OVERRIDES = WEBGL_CONTEXT_POLYFILLS.OVERRIDES;
  25221. Object.keys(OVERRIDES).forEach(function (key) {
  25222. if (typeof OVERRIDES[key] === 'function') {
  25223. // install an override, if no implementation was detected
  25224. var originalFunc = gl[key] ? gl[key].bind(gl) : function () {};
  25225. var polyfill = OVERRIDES[key].bind(null, gl, originalFunc);
  25226. target[key] = polyfill;
  25227. target2[key] = polyfill;
  25228. }
  25229. });
  25230. }
  25231. // Registers polyfill or mock functions for all known extensions
  25232. function polyfillContext(gl) {
  25233. gl.luma = gl.luma || {};
  25234. initializeExtensions(gl);
  25235. if (!gl.luma.polyfilled) {
  25236. for (var extension in WEBGL_CONTEXT_POLYFILLS) {
  25237. if (extension !== 'overrides') {
  25238. polyfillExtension(gl, { extension: extension, target: gl.luma, target2: gl });
  25239. }
  25240. }
  25241. installOverrides(gl, { target: gl.luma, target2: gl });
  25242. gl.luma.polyfilled = true;
  25243. }
  25244. return gl;
  25245. }
  25246. //# sourceMappingURL=polyfill-context.js.map
  25247. /***/ }),
  25248. /* 266 */
  25249. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  25250. "use strict";
  25251. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return GL_PARAMETER_DEFAULTS; });
  25252. /* unused harmony export GL_PARAMETER_SETTERS */
  25253. /* unused harmony export GL_PARAMETER_GETTERS */
  25254. /* harmony export (immutable) */ __webpack_exports__["e"] = setParameter;
  25255. /* harmony export (immutable) */ __webpack_exports__["c"] = setParameters;
  25256. /* harmony export (immutable) */ __webpack_exports__["d"] = getParameter;
  25257. /* harmony export (immutable) */ __webpack_exports__["a"] = getParameters;
  25258. /* unused harmony export getDefaultParameters */
  25259. /* harmony export (immutable) */ __webpack_exports__["f"] = resetParameters;
  25260. /* harmony export (immutable) */ __webpack_exports__["g"] = getModifiedParameters;
  25261. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants__ = __webpack_require__(46);
  25262. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_context__ = __webpack_require__(7);
  25263. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert__ = __webpack_require__(1);
  25264. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_assert__);
  25265. var _GL_PARAMETER_DEFAULT, _GL_PARAMETER_SETTERS, _GL_PARAMETER_GETTERS;
  25266. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  25267. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  25268. // Provides a unified API for getting and setting any WebGL parameter
  25269. // Also knows default values of all parameters, enabling fast cache initialization
  25270. // Provides base functionality for the state caching.
  25271. // DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS
  25272. var GL_PARAMETER_DEFAULTS = (_GL_PARAMETER_DEFAULT = {}, _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_COLOR, new Float32Array([0, 0, 0, 0])), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_RGB, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FUNC_ADD), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_ALPHA, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FUNC_ADD), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_RGB, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].ONE), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_RGB, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].ZERO), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_ALPHA, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].ONE), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_ALPHA, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].ZERO), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].COLOR_CLEAR_VALUE, new Float32Array([0, 0, 0, 0])), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].COLOR_WRITEMASK, [true, true, true, true]), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].CULL_FACE, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].CULL_FACE_MODE, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BACK), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_TEST, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_CLEAR_VALUE, 1), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_FUNC, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].LESS), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_RANGE, new Float32Array([0, 1])), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_WRITEMASK, true), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DITHER, true), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRAMEBUFFER_BINDING, null), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT_FACE, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].CCW), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].GENERATE_MIPMAP_HINT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DONT_CARE), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].LINE_WIDTH, 1), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_FILL, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_FACTOR, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_UNITS, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_COVERAGE_VALUE, 1.0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_COVERAGE_INVERT, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SCISSOR_TEST, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SCISSOR_BOX, new Int32Array([0, 0, 1024, 1024])), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_TEST, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_CLEAR_VALUE, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_WRITEMASK, 0xFFFFFFFF), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_WRITEMASK, 0xFFFFFFFF), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FUNC, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].ALWAYS), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_REF, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_VALUE_MASK, 0xFFFFFFFF), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FUNC, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].ALWAYS), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_REF, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_VALUE_MASK, 0xFFFFFFFF), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FAIL, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].KEEP), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_FAIL, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].KEEP), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_PASS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].KEEP), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FAIL, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].KEEP), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_FAIL, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].KEEP), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_PASS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].KEEP), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].VIEWPORT, new Int32Array([0, 0, 1024, 1024])), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].PACK_ALIGNMENT, 4), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_ALIGNMENT, 4), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_FLIP_Y_WEBGL, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_PREMULTIPLY_ALPHA_WEBGL, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_COLORSPACE_CONVERSION_WEBGL, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BROWSER_DEFAULT_WEBGL), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRAGMENT_SHADER_DERIVATIVE_HINT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DONT_CARE), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].READ_FRAMEBUFFER_BINDING, null), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].RASTERIZER_DISCARD, false), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].PACK_ROW_LENGTH, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].PACK_SKIP_PIXELS, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].PACK_SKIP_ROWS, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_ROW_LENGTH, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_IMAGE_HEIGHT, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_SKIP_PIXELS, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_SKIP_ROWS, 0), _defineProperty(_GL_PARAMETER_DEFAULT, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_SKIP_IMAGES, 0), _GL_PARAMETER_DEFAULT);
  25273. // SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
  25274. var enable = function enable(gl, value, key) {
  25275. return value ? gl.enable(key) : gl.disable(key);
  25276. };
  25277. var hint = function hint(gl, value, key) {
  25278. return gl.hint(key, value);
  25279. };
  25280. var pixelStorei = function pixelStorei(gl, value, key) {
  25281. return gl.pixelStorei(key, value);
  25282. };
  25283. var drawFramebuffer = function drawFramebuffer(gl, value) {
  25284. var target = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_context__["b" /* isWebGL2 */])(gl) ? __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DRAW_FRAMEBUFFER : __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRAMEBUFFER;
  25285. return gl.bindFramebuffer(target, value);
  25286. };
  25287. var readFramebuffer = function readFramebuffer(gl, value) {
  25288. return gl.bindFramebuffer(__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].READ_FRAMEBUFFER, value);
  25289. };
  25290. // Map from WebGL parameter names to corresponding WebGL setter functions
  25291. // WegGL constants are read by parameter names, but set by function names
  25292. // NOTE: When value type is a string, it will be handled by 'COMPOSITE_GL_PARAMETER_SETTERS'
  25293. var GL_PARAMETER_SETTERS = (_GL_PARAMETER_SETTERS = {}, _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND, enable), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_COLOR, function (gl, value) {
  25294. return gl.blendColor.apply(gl, _toConsumableArray(value));
  25295. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_RGB, 'blendEquation'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_ALPHA, 'blendEquation'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_RGB, 'blendFunc'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_RGB, 'blendFunc'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_ALPHA, 'blendFunc'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_ALPHA, 'blendFunc'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].COLOR_CLEAR_VALUE, function (gl, value) {
  25296. return gl.clearColor.apply(gl, _toConsumableArray(value));
  25297. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].COLOR_WRITEMASK, function (gl, value) {
  25298. return gl.colorMask.apply(gl, _toConsumableArray(value));
  25299. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].CULL_FACE, enable), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].CULL_FACE_MODE, function (gl, value) {
  25300. return gl.cullFace(value);
  25301. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_TEST, enable), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_CLEAR_VALUE, function (gl, value) {
  25302. return gl.clearDepth(value);
  25303. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_FUNC, function (gl, value) {
  25304. return gl.depthFunc(value);
  25305. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_RANGE, function (gl, value) {
  25306. return gl.depthRange.apply(gl, _toConsumableArray(value));
  25307. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_WRITEMASK, function (gl, value) {
  25308. return gl.depthMask(value);
  25309. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DITHER, enable), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRAGMENT_SHADER_DERIVATIVE_HINT, hint), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRAMEBUFFER_BINDING, drawFramebuffer), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT_FACE, function (gl, value) {
  25310. return gl.frontFace(value);
  25311. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].GENERATE_MIPMAP_HINT, hint), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].LINE_WIDTH, function (gl, value) {
  25312. return gl.lineWidth(value);
  25313. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_FILL, enable), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_FACTOR, 'polygonOffset'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_UNITS, 'polygonOffset'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].RASTERIZER_DISCARD, enable), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_COVERAGE_VALUE, 'sampleCoverage'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_COVERAGE_INVERT, 'sampleCoverage'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SCISSOR_TEST, enable), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SCISSOR_BOX, function (gl, value) {
  25314. return gl.scissor.apply(gl, _toConsumableArray(value));
  25315. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_TEST, enable), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_CLEAR_VALUE, function (gl, value) {
  25316. return gl.clearStencil(value);
  25317. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_WRITEMASK, function (gl, value) {
  25318. return gl.stencilMaskSeparate(__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT, value);
  25319. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_WRITEMASK, function (gl, value) {
  25320. return gl.stencilMaskSeparate(__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BACK, value);
  25321. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FUNC, 'stencilFuncFront'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_REF, 'stencilFuncFront'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_VALUE_MASK, 'stencilFuncFront'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FUNC, 'stencilFuncBack'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_REF, 'stencilFuncBack'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_VALUE_MASK, 'stencilFuncBack'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FAIL, 'stencilOpFront'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_FAIL, 'stencilOpFront'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_PASS, 'stencilOpFront'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FAIL, 'stencilOpBack'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_FAIL, 'stencilOpBack'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_PASS, 'stencilOpBack'), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].VIEWPORT, function (gl, value) {
  25322. return gl.viewport.apply(gl, _toConsumableArray(value));
  25323. }), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].PACK_ALIGNMENT, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_ALIGNMENT, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_FLIP_Y_WEBGL, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_PREMULTIPLY_ALPHA_WEBGL, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_COLORSPACE_CONVERSION_WEBGL, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].PACK_ROW_LENGTH, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].PACK_SKIP_PIXELS, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].PACK_SKIP_ROWS, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].READ_FRAMEBUFFER_BINDING, readFramebuffer), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_ROW_LENGTH, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_IMAGE_HEIGHT, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_SKIP_PIXELS, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_SKIP_ROWS, pixelStorei), _defineProperty(_GL_PARAMETER_SETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNPACK_SKIP_IMAGES, pixelStorei), _GL_PARAMETER_SETTERS);
  25324. // COMPOSITE_WEBGL_PARAMETER_
  25325. var COMPOSITE_GL_PARAMETER_SETTERS = {
  25326. blendEquation: function blendEquation(gl, values) {
  25327. return gl.blendEquationSeparate(values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_RGB], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_EQUATION_ALPHA]);
  25328. },
  25329. blendFunc: function blendFunc(gl, values) {
  25330. return gl.blendFuncSeparate(values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_RGB], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_RGB], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_SRC_ALPHA], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND_DST_ALPHA]);
  25331. },
  25332. polygonOffset: function polygonOffset(gl, values) {
  25333. return gl.polygonOffset(values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_FACTOR], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_UNITS]);
  25334. },
  25335. sampleCoverage: function sampleCoverage(gl, values) {
  25336. return gl.sampleCoverage(values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_COVERAGE_VALUE], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_COVERAGE_INVERT]);
  25337. },
  25338. stencilFuncFront: function stencilFuncFront(gl, values) {
  25339. return gl.stencilFuncSeparate(__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT, values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FUNC], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_REF], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_VALUE_MASK]);
  25340. },
  25341. stencilFuncBack: function stencilFuncBack(gl, values) {
  25342. return gl.stencilFuncSeparate(__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BACK, values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FUNC], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_REF], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_VALUE_MASK]);
  25343. },
  25344. stencilOpFront: function stencilOpFront(gl, values) {
  25345. return gl.stencilOpSeparate(__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].FRONT, values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_FAIL], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_FAIL], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_PASS_DEPTH_PASS]);
  25346. },
  25347. stencilOpBack: function stencilOpBack(gl, values) {
  25348. return gl.stencilOpSeparate(__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BACK, values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_FAIL], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_FAIL], values[__WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_BACK_PASS_DEPTH_PASS]);
  25349. }
  25350. };
  25351. // GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
  25352. var isEnabled = function isEnabled(gl, key) {
  25353. return gl.isEnabled(key);
  25354. };
  25355. // Exceptions for any keys that cannot be queried by gl.getParameters
  25356. var GL_PARAMETER_GETTERS = (_GL_PARAMETER_GETTERS = {}, _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].BLEND, isEnabled), _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].CULL_FACE, isEnabled), _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DEPTH_TEST, isEnabled), _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].DITHER, isEnabled), _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].POLYGON_OFFSET_FILL, isEnabled), _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_ALPHA_TO_COVERAGE, isEnabled), _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLE_COVERAGE, isEnabled), _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SCISSOR_TEST, isEnabled), _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].STENCIL_TEST, isEnabled), _defineProperty(_GL_PARAMETER_GETTERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].RASTERIZER_DISCARD, isEnabled), _GL_PARAMETER_GETTERS);
  25357. // HELPER METHODS
  25358. var deepArrayEqual = function deepArrayEqual(x, y) {
  25359. if (x === y) {
  25360. return true;
  25361. }
  25362. var isArrayX = Array.isArray(x) || ArrayBuffer.isView(x);
  25363. var isArrayY = Array.isArray(y) || ArrayBuffer.isView(y);
  25364. if (isArrayX && isArrayY && x.length === y.length) {
  25365. for (var i = 0; i < x.length; ++i) {
  25366. if (x[i] !== y[i]) {
  25367. return false;
  25368. }
  25369. }
  25370. return true;
  25371. }
  25372. return false;
  25373. };
  25374. // PUBLIC METHODS
  25375. // Sets any single GL parameter regardless of function (gl.getParameter/gl.isEnabled...)
  25376. // Returns the previous value
  25377. // Note: limited to parameter values
  25378. function setParameter(gl, key, value) {
  25379. var getter = GL_PARAMETER_GETTERS[key];
  25380. var prevValue = getter ? getter(gl, Number(key)) : gl.getParameter(Number(key));
  25381. var setter = GL_PARAMETER_SETTERS[key];
  25382. __WEBPACK_IMPORTED_MODULE_2_assert___default()(typeof setter === 'function');
  25383. setter(gl, value, Number(key));
  25384. return prevValue;
  25385. }
  25386. // Sets any GL parameter regardless of function (gl.blendMode, ...)
  25387. // Note: requires a `cache` object to be set on the context (gl.state.cache)
  25388. // This object is used to fill in any missing values for composite setter functions
  25389. function setParameters(gl, values) {
  25390. var compositeSetters = {};
  25391. // HANDLE PRIMITIVE SETTERS (and make note of any composite setters)
  25392. for (var key in values) {
  25393. var setter = GL_PARAMETER_SETTERS[key];
  25394. if (setter) {
  25395. // Composite setters should only be called once, so save them
  25396. if (typeof setter === 'string') {
  25397. compositeSetters[setter] = true;
  25398. // only call setter if value has changed
  25399. // TODO - deep equal on values?
  25400. } else {
  25401. // Note - the setter will automatically update this.state
  25402. setter(gl, values[key], Number(key));
  25403. }
  25404. }
  25405. }
  25406. // HANDLE COMPOSITE SETTERS
  25407. // NOTE: any non-provided values needed by composite setters are filled in from state cache
  25408. // The cache parameter is automatically retrieved from the context
  25409. // This depends on `trackContextState`, which is technically a "circular" dependency.
  25410. // But it is too inconvenient to always require a cache parameter here.
  25411. // This is the ONLY external dependency in this module/
  25412. var cache = gl.state && gl.state.cache;
  25413. if (cache) {
  25414. var mergedValues = Object.assign({}, cache, values);
  25415. for (var _key in compositeSetters) {
  25416. // TODO - avoid calling composite setters if values have not changed.
  25417. var compositeSetter = COMPOSITE_GL_PARAMETER_SETTERS[_key];
  25418. // Note - if `trackContextState` has been called,
  25419. // the setter will automatically update this.state.cache
  25420. compositeSetter(gl, mergedValues);
  25421. }
  25422. }
  25423. // Add a log for the else case?
  25424. }
  25425. // Queries any single GL parameter regardless of function (gl.getParameter/gl.isEnabled...)
  25426. function getParameter(gl, key) {
  25427. var getter = GL_PARAMETER_GETTERS[key];
  25428. return getter ? getter(gl, Number(key)) : gl.getParameter(Number(key));
  25429. }
  25430. // Copies the state from a context (gl.getParameter should not be overriden)
  25431. // Reads the entire WebGL state from a context
  25432. // Caveat: This generates a huge amount of synchronous driver roundtrips and should be
  25433. // considered a very slow operation, to be used only if/when a context already manipulated
  25434. // by external code needs to be synchronized for the first time
  25435. // @return {Object} - a newly created map, with values keyed by GL parameters
  25436. function getParameters(gl, parameters) {
  25437. // default to querying all parameters
  25438. parameters = parameters || GL_PARAMETER_DEFAULTS;
  25439. // support both arrays of parameters and objects (keys represent parameters)
  25440. var parameterKeys = Array.isArray(parameters) ? parameters : Object.keys(parameters);
  25441. var state = {};
  25442. var _iteratorNormalCompletion = true;
  25443. var _didIteratorError = false;
  25444. var _iteratorError = undefined;
  25445. try {
  25446. for (var _iterator = parameterKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  25447. var key = _step.value;
  25448. state[key] = getParameter(gl, key);
  25449. }
  25450. } catch (err) {
  25451. _didIteratorError = true;
  25452. _iteratorError = err;
  25453. } finally {
  25454. try {
  25455. if (!_iteratorNormalCompletion && _iterator.return) {
  25456. _iterator.return();
  25457. }
  25458. } finally {
  25459. if (_didIteratorError) {
  25460. throw _iteratorError;
  25461. }
  25462. }
  25463. }
  25464. return state;
  25465. }
  25466. function getDefaultParameters(gl) {
  25467. // TODO - Query GL.VIEWPORT and GL.SCISSOR_BOX since these are dynamic
  25468. return Object.assign({}, GL_PARAMETER_DEFAULTS, {
  25469. // TODO: For viewport and scissor default values are set at the time of
  25470. // context creation based on canvas size, we can query them here but it will
  25471. // not match with what we have in GL_PARAMETER_DEFAULTS table, we should revisit.
  25472. // [GL.VIEWPORT]: gl.constructor.prototype.getParameter.call(gl, GL.VIEWPORT),
  25473. // [GL.SCISSOR_BOX]: gl.constructor.prototype.getParameter.call(gl, GL.SCISSOR_BOX)
  25474. });
  25475. }
  25476. // Reset all parameters to a pure context state
  25477. function resetParameters(gl) {
  25478. setParameters(gl, getDefaultParameters(gl));
  25479. }
  25480. // Get all parameters that have been modified from a pure context state
  25481. function getModifiedParameters(gl) {
  25482. var values = getParameters(GL_PARAMETER_DEFAULTS);
  25483. var modified = {};
  25484. for (var key in GL_PARAMETER_DEFAULTS) {
  25485. if (!deepArrayEqual(values[key], GL_PARAMETER_DEFAULTS[key])) {
  25486. modified[key] = values[key];
  25487. }
  25488. }
  25489. return modified;
  25490. }
  25491. //# sourceMappingURL=set-parameters.js.map
  25492. /***/ }),
  25493. /* 267 */
  25494. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  25495. "use strict";
  25496. /* unused harmony export GLenum */
  25497. /* unused harmony export GLfloat */
  25498. /* unused harmony export GLint */
  25499. /* unused harmony export GLuint */
  25500. /* unused harmony export GLboolean */
  25501. /* harmony export (immutable) */ __webpack_exports__["a"] = installParameterDefinitions;
  25502. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__ = __webpack_require__(46);
  25503. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__buffer__ = __webpack_require__(67);
  25504. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__fence_sync__ = __webpack_require__(271);
  25505. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__framebuffer__ = __webpack_require__(69);
  25506. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__program__ = __webpack_require__(109);
  25507. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__renderbuffer__ = __webpack_require__(110);
  25508. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__sampler__ = __webpack_require__(274);
  25509. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__texture__ = __webpack_require__(62);
  25510. var _BUFFER_PARAMETERS, _FRAMEBUFFER_STATUS, _PROGRAM_PARAMETERS, _RENDERBUFFER_PARAMET, _SAMPLER_PARAMETERS, _TEXTURE_PARAMETERS;
  25511. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  25512. // Parameter support.
  25513. // Installs definitions that enable querying an object for all its parameters
  25514. // with resource.getParameters(). This is mainly useful during debugging.
  25515. // Note: Kept separate to avoid bundling in production applications
  25516. // TODO - separate install parameter definitions function from api metadata
  25517. // import Shader from './shader';
  25518. // WebGL specification 'types'
  25519. var GLenum = 'GLenum';
  25520. var GLfloat = 'GLfloat';
  25521. var GLint = 'GLint';
  25522. var GLuint = 'GLint';
  25523. var GLboolean = 'GLboolean';
  25524. /*
  25525. TODO - will most likely remove some of these fields from the main struct
  25526. but they can be useful for debugging/seer integration, so keep them here for now
  25527. export const DBG_PARAMETERS = {
  25528. blend: {
  25529. type: GLboolean,
  25530. params: GL.BLEND,
  25531. value: false,
  25532. setter: (gl, value) => value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)
  25533. },
  25534. blendColor: {
  25535. type: new Float32Array(4),
  25536. value: new Float32Array([0, 0, 0, 0]),
  25537. params: GL.BLEND_COLOR,
  25538. setter: (gl, value) => gl.blendColor(...value)
  25539. },
  25540. blendEquation: {
  25541. type: [GLenum, GLenum],
  25542. object: ['rgb', 'alpha'],
  25543. alias: 'blendEquationSeparate',
  25544. value: [GL.FUNC_ADD, GL.FUNC_ADD],
  25545. params: [GL.BLEND_EQUATION_RGB, GL.BLEND_EQUATION_ALPHA],
  25546. setter: (gl, value) => gl.blendEquationSeparate(...value),
  25547. normalizeArgs: args => isArray(args) ? args : [args, args]
  25548. },
  25549. // blend func
  25550. blendFunc: {
  25551. type: [GLenum, GLenum, GLenum, GLenum],
  25552. object: ['srcRgb', 'dstRgb', 'srcAlpha', 'dstAlpha'],
  25553. value: [GL.ONE, GL.ZERO, GL.ONE, GL.ZERO],
  25554. params: [GL.BLEND_SRC_RGB, GL.BLEND_DST_RGB, GL.BLEND_SRC_ALPHA, GL.BLEND_DST_ALPHA],
  25555. setter: (gl, value) => gl.blendFuncSeparate(...value),
  25556. normalizeArgs: args => isArray(args) && args.length === 3 ? [...args, ...args] : args
  25557. },
  25558. clearColor: {
  25559. type: new Float32Array(4),
  25560. params: GL.COLOR_CLEAR_VALUE,
  25561. value: new Float32Array([0, 0, 0, 0]), // TBD
  25562. setter: (gl, value) => gl.clearColor(...value)
  25563. },
  25564. colorMask: {
  25565. type: [GLboolean, GLboolean, GLboolean, GLboolean],
  25566. params: GL.COLOR_WRITEMASK,
  25567. value: [true, true, true, true],
  25568. setter: (gl, value) => gl.colorMask(...value)
  25569. },
  25570. // TODO - We have a name clash here
  25571. cullFace: {
  25572. type: GLboolean,
  25573. params: GL.CULL_FACE,
  25574. value: false,
  25575. setter: (gl, value) => value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE)
  25576. },
  25577. cullFaceMode: {
  25578. type: GLenum,
  25579. params: GL.CULL_FACE_MODE,
  25580. value: GL.BACK,
  25581. setter: (gl, value) => gl.cullFace(value)
  25582. },
  25583. depthTest: {
  25584. type: GLboolean,
  25585. params: GL.DEPTH_TEST,
  25586. value: false,
  25587. setter: (gl, value) => value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST)
  25588. },
  25589. depthClearValue: {
  25590. type: GLfloat,
  25591. params: GL.DEPTH_CLEAR_VALUE,
  25592. value: 1,
  25593. setter: (gl, value) => gl.clearDepth(value)
  25594. },
  25595. depthFunc: {
  25596. type: GLenum,
  25597. params: GL.DEPTH_FUNC,
  25598. value: GL.LESS,
  25599. setter: (gl, value) => gl.depthFunc(value)
  25600. },
  25601. depthRange: {
  25602. type: new Float32Array(2),
  25603. object: ['min', 'max'],
  25604. params: GL.DEPTH_RANGE,
  25605. value: new Float32Array([0, 1]), // TBD
  25606. setter: (gl, value) => gl.depthRange(...value)
  25607. },
  25608. depthWritemask: {
  25609. type: GLboolean,
  25610. params: GL.DEPTH_WRITEMASK,
  25611. value: true,
  25612. setter: (gl, value) => gl.depthMask(value)
  25613. },
  25614. dither: {
  25615. type: GLboolean,
  25616. params: GL.DITHER,
  25617. value: true,
  25618. setter: (gl, value) => value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER)
  25619. },
  25620. fragmentShaderDerivativeHint: {
  25621. type: GLenum,
  25622. params: GL.FRAGMENT_SHADER_DERIVATIVE_HINT,
  25623. value: GL.DONT_CARE,
  25624. setter: (gl, value) => gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value),
  25625. gl1: 'OES_standard_derivatives'
  25626. },
  25627. frontFace: {
  25628. type: GLenum,
  25629. params: GL.FRONT_FACE,
  25630. value: GL.CCW,
  25631. setter: (gl, value) => gl.frontFace(value)
  25632. },
  25633. // Hint for quality of images generated with glGenerateMipmap
  25634. generateMipmapHint: {
  25635. type: GLenum,
  25636. params: GL.GENERATE_MIPMAP_HINT,
  25637. value: GL.DONT_CARE,
  25638. setter: (gl, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value)
  25639. },
  25640. lineWidth: {
  25641. type: GLfloat,
  25642. params: GL.LINE_WIDTH,
  25643. value: 1,
  25644. setter: (gl, value) => gl.lineWidth(value)
  25645. },
  25646. polygonOffsetFill: {
  25647. type: GLboolean,
  25648. params: GL.POLYGON_OFFSET_FILL,
  25649. value: false,
  25650. setter: (gl, value) =>
  25651. value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL)
  25652. },
  25653. // Add small offset to fragment depth values (by factor × DZ + r × units)
  25654. // Useful for rendering hidden-line images, for applying decals to surfaces,
  25655. // and for rendering solids with highlighted edges.
  25656. // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml
  25657. polygonOffset: {
  25658. type: [GLfloat, GLfloat],
  25659. object: ['factor', 'units'],
  25660. params: [GL.POLYGON_OFFSET_FACTOR, GL.POLYGON_OFFSET_UNITS],
  25661. value: [0, 0],
  25662. setter: (gl, value) => gl.polygonOffset(...value)
  25663. },
  25664. // TODO - enabling multisampling
  25665. // glIsEnabled with argument GL_SAMPLE_ALPHA_TO_COVERAGE
  25666. // glIsEnabled with argument GL_SAMPLE_COVERAGE
  25667. // specify multisample coverage parameters
  25668. // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glSampleCoverage.xml
  25669. sampleCoverage: {
  25670. type: [GLfloat, GLboolean],
  25671. object: ['value', 'invert'],
  25672. params: [GL.SAMPLE_COVERAGE_VALUE, GL.SAMPLE_COVERAGE_INVERT],
  25673. value: [1.0, false],
  25674. setter: (gl, value) => gl.sampleCoverage(...value)
  25675. },
  25676. scissorTest: {
  25677. type: GLboolean,
  25678. params: GL.SCISSOR_TEST,
  25679. value: false,
  25680. setter: (gl, value) => value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST)
  25681. },
  25682. scissorBox: {
  25683. type: new Int32Array(4),
  25684. object: ['x', 'y', 'width', 'height'],
  25685. // When scissor test enabled we expect users to set correct scissor box,
  25686. // otherwise we default to following value array.
  25687. params: GL.SCISSOR_BOX,
  25688. value: new Int32Array([0, 0, 1024, 1024]),
  25689. setter: (gl, value) => gl.scissor(...value)
  25690. },
  25691. stencilTest: {
  25692. type: GLboolean,
  25693. params: GL.STENCIL_TEST,
  25694. value: false,
  25695. setter: (gl, value) => value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST)
  25696. },
  25697. // Sets index used when stencil buffer is cleared.
  25698. stencilClearValue: {
  25699. type: GLint,
  25700. params: GL.STENCIL_CLEAR_VALUE,
  25701. value: 0,
  25702. setter: (gl, value) => gl.clearStencil(value)
  25703. },
  25704. // Sets bit mask enabling writing of individual bits in the stencil planes
  25705. // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glStencilMaskSeparate.xml
  25706. stencilMask: {
  25707. type: [GLuint, GLuint],
  25708. object: ['mask', 'backMask'],
  25709. value: [0xFFFFFFFF, 0xFFFFFFFF],
  25710. params: [GL.STENCIL_WRITEMASK, GL.STENCIL_BACK_WRITEMASK],
  25711. setter: (gl, value) => {
  25712. value = isArray(value) ? value : [value, value];
  25713. const [mask, backMask] = value;
  25714. gl.stencilMaskSeparate(GL.FRONT, mask);
  25715. gl.stencilMaskSeparate(GL.BACK, backMask);
  25716. }
  25717. },
  25718. // Set stencil testing function, reference value and mask for front and back
  25719. // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glStencilFuncSeparate.xml
  25720. stencilFunc: {
  25721. type: [GLenum, GLint, GLuint, GLenum, GLint, GLuint],
  25722. object: [
  25723. 'func', 'ref', 'valueMask', 'backFunc', 'backRef', 'backValueMask'
  25724. ],
  25725. value: [GL.ALWAYS, 0, 0xFFFFFFFF, GL.ALWAYS, 0, 0xFFFFFFFF],
  25726. params: [
  25727. // front
  25728. GL.STENCIL_FUNC,
  25729. GL.STENCIL_REF,
  25730. GL.STENCIL_VALUE_MASK,
  25731. // back
  25732. GL.STENCIL_BACK_FUNC,
  25733. GL.STENCIL_BACK_REF,
  25734. GL.STENCIL_BACK_VALUE_MASK
  25735. ],
  25736. setter: (gl, value) => {
  25737. const [func, ref, mask, backFunc, backRef, backMask] = value;
  25738. gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
  25739. gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
  25740. }
  25741. },
  25742. // Specifies the action to take when the stencil test fails, front and back.
  25743. // Stencil test fail action, depth test fail action, pass action
  25744. // GL.KEEP, GL.ZERO, GL.REPLACE, GL.INCR, GL.INCR_WRAP, GL.DECR, GL.DECR_WRAP,
  25745. // and GL.INVERT
  25746. // https://www.khronos.org/opengles/sdk/docs/man/xhtml/glStencilOpSeparate.xml
  25747. stencilOp: {
  25748. type: [GLenum, GLenum, GLenum, GLenum, GLenum, GLenum],
  25749. object: [
  25750. 'fail', 'passDepthFail', 'passDepthPass',
  25751. 'backFail', 'backPassDepthFail', 'backPassDepthPass'
  25752. ],
  25753. params: [
  25754. // front
  25755. GL.STENCIL_FAIL,
  25756. GL.STENCIL_PASS_DEPTH_FAIL,
  25757. GL.STENCIL_PASS_DEPTH_PASS,
  25758. // back
  25759. GL.STENCIL_BACK_FAIL,
  25760. GL.STENCIL_BACK_PASS_DEPTH_FAIL,
  25761. GL.STENCIL_BACK_PASS_DEPTH_PASS
  25762. ],
  25763. value: [GL.KEEP, GL.KEEP, GL.KEEP, GL.KEEP, GL.KEEP, GL.KEEP],
  25764. setter: (gl, value) => {
  25765. const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = value;
  25766. gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
  25767. gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
  25768. }
  25769. },
  25770. viewport: {
  25771. type: new Int32Array(4),
  25772. object: ['x', 'y', 'width', 'height'],
  25773. // We use [0, 0, 1024, 1024] as default, but usually this is updated in each frame.
  25774. params: GL.VIEWPORT,
  25775. value: new Int32Array([0, 0, 1024, 1024]),
  25776. setter: (gl, value) => gl.viewport(...value)
  25777. },
  25778. // WEBGL1 PIXEL PACK/UNPACK MODES
  25779. // Packing of pixel data in memory (1,2,4,8)
  25780. [GL.PACK_ALIGNMENT]: {
  25781. type: GLint,
  25782. params: GL.PACK_ALIGNMENT,
  25783. value: 4,
  25784. setter: (gl, value) => gl.pixelStorei(GL.PACK_ALIGNMENT, value)
  25785. },
  25786. // Unpacking pixel data from memory(1,2,4,8)
  25787. [GL.UNPACK_ALIGNMENT]: {
  25788. type: GLint,
  25789. params: GL.UNPACK_ALIGNMENT,
  25790. value: 4,
  25791. setter: (gl, value) => gl.pixelStorei(GL.UNPACK_ALIGNMENT, value)
  25792. },
  25793. // Flip source data along its vertical axis
  25794. [GL.UNPACK_FLIP_Y_WEBGL]: {
  25795. type: GLboolean,
  25796. params: GL.UNPACK_FLIP_Y_WEBGL,
  25797. value: false,
  25798. setter: (gl, value) => gl.pixelStorei(GL.UNPACK_FLIP_Y_WEBGL, value)
  25799. },
  25800. // Multiplies the alpha channel into the other color channels
  25801. [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: {
  25802. type: GLboolean,
  25803. params: GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL,
  25804. value: false,
  25805. setter: (gl, value) => gl.pixelStorei(GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL, value)
  25806. },
  25807. // Default color space conversion or no color space conversion.
  25808. [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: {
  25809. type: GLenum,
  25810. params: GL.UNPACK_COLORSPACE_CONVERSION_WEBGL,
  25811. value: GL.BROWSER_DEFAULT_WEBGL,
  25812. setter: (gl, value) => gl.pixelStorei(GL.UNPACK_COLORSPACE_CONVERSION_WEBGL, value)
  25813. },
  25814. // WEBGL2 PIXEL PACK/UNPACK MODES
  25815. // Number of pixels in a row.
  25816. [GL.PACK_ROW_LENGTH]: {
  25817. type: GLint,
  25818. params: GL.PACK_ROW_LENGTH,
  25819. value: 0,
  25820. setter: (gl, value) => gl.pixelStorei(GL.PACK_ROW_LENGTH, value),
  25821. webgl2: true
  25822. },
  25823. // Number of pixels skipped before the first pixel is written into memory.
  25824. [GL.PACK_SKIP_PIXELS]: {
  25825. type: GLint,
  25826. params: GL.PACK_SKIP_PIXELS,
  25827. value: 0,
  25828. setter: (gl, value) => gl.pixelStorei(GL.PACK_SKIP_PIXELS, value),
  25829. webgl2: true
  25830. },
  25831. // Number of rows of pixels skipped before first pixel is written to memory.
  25832. [GL.PACK_SKIP_ROWS]: {
  25833. type: GLint,
  25834. params: GL.PACK_SKIP_ROWS,
  25835. value: 0,
  25836. setter: (gl, value) => gl.pixelStorei(GL.PACK_SKIP_ROWS, value),
  25837. webgl2: true
  25838. },
  25839. // Number of pixels in a row.
  25840. [GL.UNPACK_ROW_LENGTH]: {
  25841. type: GLint,
  25842. params: GL.UNPACK_ROW_LENGTH,
  25843. value: 0,
  25844. setter: (gl, value) => gl.pixelStorei(GL.UNPACK_ROW_LENGTH, value),
  25845. webgl2: true
  25846. },
  25847. // Image height used for reading pixel data from memory
  25848. [GL.UNPACK_IMAGE_HEIGHT]: {
  25849. type: GLint,
  25850. params: GL.UNPACK_IMAGE_HEIGHT,
  25851. value: 0,
  25852. setter: (gl, value) => gl.pixelStorei(GL.UNPACK_IMAGE_HEIGHT, value),
  25853. webgl2: true
  25854. },
  25855. // Number of pixel images skipped before first pixel is read from memory
  25856. [GL.UNPACK_SKIP_PIXELS]: {
  25857. type: GLint,
  25858. params: GL.UNPACK_SKIP_PIXELS,
  25859. value: 0,
  25860. setter: (gl, value) => gl.pixelStorei(GL.UNPACK_SKIP_PIXELS, value),
  25861. webgl2: true
  25862. },
  25863. // Number of rows of pixels skipped before first pixel is read from memory
  25864. [GL.UNPACK_SKIP_ROWS]: {
  25865. type: GLint,
  25866. params: GL.UNPACK_SKIP_ROWS,
  25867. value: 0,
  25868. setter: (gl, value) => gl.pixelStorei(GL.UNPACK_SKIP_ROWS, value),
  25869. webgl2: true
  25870. },
  25871. // Number of pixel images skipped before first pixel is read from memory
  25872. [GL.UNPACK_SKIP_IMAGES]: {
  25873. type: GLint,
  25874. params: GL.UNPACK_SKIP_IMAGES,
  25875. value: 0,
  25876. setter: (gl, value) => gl.pixelStorei(GL.UNPACK_SKIP_IMAGES, value),
  25877. webgl2: true
  25878. }
  25879. };
  25880. */
  25881. var BUFFER_PARAMETERS = (_BUFFER_PARAMETERS = {}, _defineProperty(_BUFFER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].BUFFER_SIZE, { webgl1: 0 }), _defineProperty(_BUFFER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].BUFFER_USAGE, { webgl1: 0 // GLenum indicating the usage pattern of the buffer.
  25882. }), _BUFFER_PARAMETERS);
  25883. var FENCE_SYNC_PARAMETERS = [__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].OBJECT_TYPE, // GLenum, type of sync object (always GL.SYNC_FENCE).
  25884. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].SYNC_STATUS, // GLenum, status of sync object (GL.SIGNALED/GL.UNSIGNALED)
  25885. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].SYNC_CONDITION, // GLenum. object condition (always GL.SYNC_GPU_COMMANDS_COMPLETE).
  25886. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].SYNC_FLAGS // GLenum, flags sync object was created with (always 0)
  25887. ];
  25888. var FRAMEBUFFER_ATTACHMENT_PARAMETERS = [__WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, // WebGLRenderbuffer or WebGLTexture
  25889. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, // GL.RENDERBUFFER, GL.TEXTURE, GL.NONE
  25890. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, // GL.TEXTURE_CUBE_MAP_POSITIVE_X, etc.
  25891. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, // GLint
  25892. // EXT_sRGB or WebGL2
  25893. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, // GL.LINEAR, GL.SRBG
  25894. // WebGL2
  25895. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, // GLint
  25896. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_RED_SIZE, // GLint
  25897. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, // GLint
  25898. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, // GLint
  25899. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, // GLint
  25900. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, // GLint
  25901. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, // GLint
  25902. __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE
  25903. // GL.FLOAT, GL.INT, GL.UNSIGNED_INT, GL.SIGNED_NORMALIZED, OR GL.UNSIGNED_NORMALIZED.
  25904. ];
  25905. var FRAMEBUFFER_STATUS = (_FRAMEBUFFER_STATUS = {}, _defineProperty(_FRAMEBUFFER_STATUS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_COMPLETE, 'Success. Framebuffer is correctly set up'), _defineProperty(_FRAMEBUFFER_STATUS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_INCOMPLETE_ATTACHMENT, 'Framebuffer attachment types mismatched or some attachment point not attachment complete'), _defineProperty(_FRAMEBUFFER_STATUS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT, 'Framebuffer has no attachment'), _defineProperty(_FRAMEBUFFER_STATUS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_INCOMPLETE_DIMENSIONS, 'Framebuffer attachments do not have the same size'), _defineProperty(_FRAMEBUFFER_STATUS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_UNSUPPORTED, 'Framebuffer attachment format not supported or depth and stencil attachments are not same'), _defineProperty(_FRAMEBUFFER_STATUS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].FRAMEBUFFER_INCOMPLETE_MULTISAMPLE, 'Framebuffer attachement SAMPLES differs among renderbuffers, or are mixed with textures'), _FRAMEBUFFER_STATUS);
  25906. var PROGRAM_PARAMETERS = (_PROGRAM_PARAMETERS = {}, _defineProperty(_PROGRAM_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].DELETE_STATUS, { webgl1: 0 }), _defineProperty(_PROGRAM_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].LINK_STATUS, { webgl1: 0 }), _defineProperty(_PROGRAM_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].VALIDATE_STATUS, { webgl1: 0 }), _defineProperty(_PROGRAM_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].ATTACHED_SHADERS, { webgl1: 0 }), _defineProperty(_PROGRAM_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].ACTIVE_ATTRIBUTES, { webgl1: 0 }), _defineProperty(_PROGRAM_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].ACTIVE_UNIFORMS, { webgl1: 0 }), _defineProperty(_PROGRAM_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TRANSFORM_FEEDBACK_BUFFER_MODE, { webgl2: 0 }), _defineProperty(_PROGRAM_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TRANSFORM_FEEDBACK_VARYINGS, { webgl2: 0 }), _defineProperty(_PROGRAM_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].ACTIVE_UNIFORM_BLOCKS, { webgl2: 0 // GLint
  25907. }), _PROGRAM_PARAMETERS);
  25908. // parameters
  25909. var RENDERBUFFER_PARAMETERS = (_RENDERBUFFER_PARAMET = {}, _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_WIDTH, { webgl1: 0 }), _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_HEIGHT, { webgl1: 0 }), _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_INTERNAL_FORMAT, { type: 'GLenum', webgl1: __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RGBA4 }), _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_GREEN_SIZE, { webgl1: 0 }), _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_BLUE_SIZE, { webgl1: 0 }), _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_RED_SIZE, { webgl1: 0 }), _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_ALPHA_SIZE, { webgl1: 0 }), _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_DEPTH_SIZE, { webgl1: 0 }), _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_STENCIL_SIZE, { webgl1: 0 }), _defineProperty(_RENDERBUFFER_PARAMET, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].RENDERBUFFER_SAMPLES, { webgl2: 1 }), _RENDERBUFFER_PARAMET);
  25910. var SAMPLER_PARAMETERS = (_SAMPLER_PARAMETERS = {}, _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MAG_FILTER, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MIN_FILTER, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_WRAP_S, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_WRAP_T, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_WRAP_R, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_BASE_LEVEL, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MAX_LEVEL, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_COMPARE_FUNC, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_COMPARE_MODE, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MIN_LOD, { webgl2: true }), _defineProperty(_SAMPLER_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MAX_LOD, { webgl2: true // maximum level-of-detail value
  25911. // [GL.TEXTURE_MAX_ANISOTROPY_EXT]: {webgl2: 'EXT_texture_filter_anisotropic'}
  25912. }), _SAMPLER_PARAMETERS);
  25913. // const SHADER_PARAMETERS = [
  25914. // GL.DELETE_STATUS, // GLboolean - whether shader is flagged for deletion.
  25915. // GL.COMPILE_STATUS, // GLboolean - was last shader compilation successful.
  25916. // GL.SHADER_TYPE // GLenum - GL.VERTEX_SHADER or GL.FRAGMENT_SHADER.
  25917. // ];
  25918. var TEXTURE_PARAMETERS = (_TEXTURE_PARAMETERS = {}, _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MAG_FILTER, { type: 'GLenum', webgl1: __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].LINEAR }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MIN_FILTER, { type: 'GLenum', webgl1: __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].NEAREST_MIPMAP_LINEAR }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_WRAP_S, { type: 'GLenum', webgl1: __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].REPEAT }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_WRAP_T, { type: 'GLenum', webgl1: __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].REPEAT }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_WRAP_R, { type: 'GLenum', webgl2: __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].REPEAT }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_BASE_LEVEL, { webgl2: 0 }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MAX_LEVEL, { webgl2: 1000 }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_COMPARE_FUNC, { type: 'GLenum', webgl2: __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].LEQUAL }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_COMPARE_MODE, { type: 'GLenum', webgl2: __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].NONE }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MIN_LOD, { webgl2: -1000 }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_MAX_LOD, { webgl2: 1000 }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_WIDTH, { webgl1: 0 }), _defineProperty(_TEXTURE_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__webgl_utils_constants__["a" /* default */].TEXTURE_HEIGHT, { webgl1: 0 }), _TEXTURE_PARAMETERS);
  25919. function installParameterDefinitions() {
  25920. __WEBPACK_IMPORTED_MODULE_1__buffer__["a" /* default */].PARAMETERS = BUFFER_PARAMETERS;
  25921. __WEBPACK_IMPORTED_MODULE_2__fence_sync__["a" /* default */].PARAMETERS = FENCE_SYNC_PARAMETERS;
  25922. __WEBPACK_IMPORTED_MODULE_3__framebuffer__["a" /* default */].ATTACHMENT_PARAMETERS = FRAMEBUFFER_ATTACHMENT_PARAMETERS;
  25923. __WEBPACK_IMPORTED_MODULE_3__framebuffer__["a" /* default */].STATUS = FRAMEBUFFER_STATUS;
  25924. __WEBPACK_IMPORTED_MODULE_4__program__["a" /* default */].PARAMETERS = PROGRAM_PARAMETERS;
  25925. __WEBPACK_IMPORTED_MODULE_5__renderbuffer__["a" /* default */].PARAMETERS = RENDERBUFFER_PARAMETERS;
  25926. __WEBPACK_IMPORTED_MODULE_6__sampler__["a" /* default */].PARAMETERS = SAMPLER_PARAMETERS;
  25927. // Shader.PARAMETERS = SHADER_PARAMETERS;
  25928. __WEBPACK_IMPORTED_MODULE_7__texture__["a" /* default */].PARAMETERS = TEXTURE_PARAMETERS;
  25929. }
  25930. //# sourceMappingURL=debug-parameters.js.map
  25931. /***/ }),
  25932. /* 268 */
  25933. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  25934. "use strict";
  25935. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return webGLTypesAvailable; });
  25936. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return Image; });
  25937. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return WebGLRenderingContext; });
  25938. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return WebGLProgram; });
  25939. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return WebGLShader; });
  25940. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return WebGLBuffer; });
  25941. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return WebGLFramebuffer; });
  25942. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return WebGLRenderbuffer; });
  25943. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return WebGLTexture; });
  25944. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return WebGLUniformLocation; });
  25945. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return WebGLActiveInfo; });
  25946. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return WebGLShaderPrecisionFormat; });
  25947. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return WebGL2RenderingContext; });
  25948. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__init__ = __webpack_require__(106);
  25949. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  25950. // WEBGL BUILT-IN TYPES
  25951. // 1) Exports all WebGL constants as {GL}
  25952. // 2) Enables app to "import" WebGL types
  25953. // - Importing these types makes them known to eslint etc.
  25954. // - Provides dummy types for WebGL2 when not available to streamline
  25955. // library code.
  25956. // - Exports types from headless gl when running under Node.js
  25957. var DummyType = /*#__PURE__*/function DummyType() {
  25958. _classCallCheck(this, DummyType);
  25959. };
  25960. var _ref = __WEBPACK_IMPORTED_MODULE_0__init__["default"].globals.headlessTypes || __WEBPACK_IMPORTED_MODULE_0__init__["global"],
  25961. _ref$WebGLRenderingCo = _ref.WebGLRenderingContext,
  25962. WebGLRenderingContext = _ref$WebGLRenderingCo === undefined ? DummyType : _ref$WebGLRenderingCo,
  25963. _ref$WebGLProgram = _ref.WebGLProgram,
  25964. WebGLProgram = _ref$WebGLProgram === undefined ? DummyType : _ref$WebGLProgram,
  25965. _ref$WebGLShader = _ref.WebGLShader,
  25966. WebGLShader = _ref$WebGLShader === undefined ? DummyType : _ref$WebGLShader,
  25967. _ref$WebGLBuffer = _ref.WebGLBuffer,
  25968. WebGLBuffer = _ref$WebGLBuffer === undefined ? DummyType : _ref$WebGLBuffer,
  25969. _ref$WebGLFramebuffer = _ref.WebGLFramebuffer,
  25970. WebGLFramebuffer = _ref$WebGLFramebuffer === undefined ? DummyType : _ref$WebGLFramebuffer,
  25971. _ref$WebGLRenderbuffe = _ref.WebGLRenderbuffer,
  25972. WebGLRenderbuffer = _ref$WebGLRenderbuffe === undefined ? DummyType : _ref$WebGLRenderbuffe,
  25973. _ref$WebGLTexture = _ref.WebGLTexture,
  25974. WebGLTexture = _ref$WebGLTexture === undefined ? DummyType : _ref$WebGLTexture,
  25975. _ref$WebGLUniformLoca = _ref.WebGLUniformLocation,
  25976. WebGLUniformLocation = _ref$WebGLUniformLoca === undefined ? DummyType : _ref$WebGLUniformLoca,
  25977. _ref$WebGLActiveInfo = _ref.WebGLActiveInfo,
  25978. WebGLActiveInfo = _ref$WebGLActiveInfo === undefined ? DummyType : _ref$WebGLActiveInfo,
  25979. _ref$WebGLShaderPreci = _ref.WebGLShaderPrecisionFormat,
  25980. WebGLShaderPrecisionFormat = _ref$WebGLShaderPreci === undefined ? DummyType : _ref$WebGLShaderPreci;
  25981. var webGLTypesAvailable = WebGLRenderingContext !== DummyType && WebGLProgram !== DummyType && WebGLShader !== DummyType && WebGLBuffer !== DummyType && WebGLFramebuffer !== DummyType && WebGLRenderbuffer !== DummyType && WebGLTexture !== DummyType && WebGLUniformLocation !== DummyType && WebGLActiveInfo !== DummyType && WebGLShaderPrecisionFormat !== DummyType;
  25982. // Ensures that WebGL2RenderingContext is defined in non-WebGL2 environments
  25983. // so that apps can test their gl contexts with instanceof
  25984. // E.g. if (gl instanceof WebGL2RenderingContext) { }
  25985. function getWebGL2RenderingContext() {
  25986. var WebGL2RenderingContextNotSupported = /*#__PURE__*/function WebGL2RenderingContextNotSupported() {
  25987. _classCallCheck(this, WebGL2RenderingContextNotSupported);
  25988. };
  25989. return __WEBPACK_IMPORTED_MODULE_0__init__["global"].WebGL2RenderingContext || WebGL2RenderingContextNotSupported;
  25990. }
  25991. // Ensure that Image is defined under Node.js
  25992. function getImage() {
  25993. var ImageNotSupported = /*#__PURE__*/function ImageNotSupported() {
  25994. _classCallCheck(this, ImageNotSupported);
  25995. };
  25996. return __WEBPACK_IMPORTED_MODULE_0__init__["global"].Image || ImageNotSupported;
  25997. }
  25998. var WebGL2RenderingContext = getWebGL2RenderingContext();
  25999. var Image = getImage();
  26000. // Export the standard WebGL types
  26001. //# sourceMappingURL=types.js.map
  26002. /***/ }),
  26003. /* 269 */
  26004. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  26005. "use strict";
  26006. /* unused harmony export enableDebug */
  26007. /* harmony export (immutable) */ __webpack_exports__["a"] = makeDebugContext;
  26008. /* unused harmony export getRealContext */
  26009. /* unused harmony export getDebugContext */
  26010. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_webgl_debug__ = __webpack_require__(688);
  26011. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_webgl_debug___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_webgl_debug__);
  26012. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(8);
  26013. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__api_debug_parameters__ = __webpack_require__(267);
  26014. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  26015. // Khronos Debug support module
  26016. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__api_debug_parameters__["a" /* installParameterDefinitions */])();
  26017. // Helper to get shared context data
  26018. function getContextData(gl) {
  26019. gl.luma = gl.luma || {};
  26020. return gl.luma;
  26021. }
  26022. // Enable or disable debug checks in debug contexts
  26023. // Non-debug contexts do not have checks (to ensure performance)
  26024. // Turning off debug for debug contexts removes most of the performance penalty
  26025. function enableDebug(debug) {
  26026. __WEBPACK_IMPORTED_MODULE_1__utils__["b" /* log */].debug = debug;
  26027. }
  26028. // Returns (a potentially new) context with debug instrumentation turned off or on.
  26029. // Note that this actually returns a new context
  26030. function makeDebugContext(gl) {
  26031. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  26032. debug = _ref.debug;
  26033. if (gl === null) {
  26034. // Return to ensure we don't create a context in this case.
  26035. return null;
  26036. }
  26037. return debug ? getDebugContext(gl) : getRealContext(gl);
  26038. }
  26039. // Returns the real context from either of the real/debug contexts
  26040. function getRealContext(gl) {
  26041. if (gl === null) {
  26042. // Return to ensure we don't create a context in this case.
  26043. return null;
  26044. }
  26045. var data = getContextData(gl);
  26046. // If the context has a realContext member, it is a debug context so return the realContext
  26047. return data.realContext ? data.realContext : gl;
  26048. }
  26049. // Returns the debug context from either of the real/debug contexts
  26050. function getDebugContext(gl) {
  26051. if (gl === null) {
  26052. // Return to ensure we don't create a context in this case.
  26053. return null;
  26054. }
  26055. var data = getContextData(gl);
  26056. // If this *is* a debug context, return itself
  26057. if (data.realContext) {
  26058. return gl;
  26059. }
  26060. // If this already has a debug context, return it.
  26061. if (data.debugContext) {
  26062. return data.debugContext;
  26063. }
  26064. // Create a new debug context
  26065. var WebGLDebugContext = /*#__PURE__*/function WebGLDebugContext() {
  26066. _classCallCheck(this, WebGLDebugContext);
  26067. };
  26068. var debugContext = __WEBPACK_IMPORTED_MODULE_0_webgl_debug___default.a.makeDebugContext(gl, throwOnError, validateArgsAndLog);
  26069. Object.assign(WebGLDebugContext.prototype, debugContext);
  26070. // Store the debug context
  26071. data.debugContext = debugContext;
  26072. debugContext.debug = true;
  26073. debugContext.gl = gl;
  26074. // Return it
  26075. return debugContext;
  26076. }
  26077. // DEBUG TRACING
  26078. function getFunctionString(functionName, functionArgs) {
  26079. var args = __WEBPACK_IMPORTED_MODULE_0_webgl_debug___default.a.glFunctionArgsToString(functionName, functionArgs);
  26080. args = '' + args.slice(0, 100) + (args.length > 100 ? '...' : '');
  26081. return 'gl.' + functionName + '(' + args + ')';
  26082. }
  26083. function throwOnError(err, functionName, args) {
  26084. if (!__WEBPACK_IMPORTED_MODULE_1__utils__["b" /* log */].nothrow) {
  26085. var errorMessage = __WEBPACK_IMPORTED_MODULE_0_webgl_debug___default.a.glEnumToString(err);
  26086. var functionArgs = __WEBPACK_IMPORTED_MODULE_0_webgl_debug___default.a.glFunctionArgsToString(functionName, args);
  26087. throw new Error(errorMessage + ' in gl.' + functionName + '(' + functionArgs + ')');
  26088. }
  26089. }
  26090. // Don't generate function string until it is needed
  26091. function validateArgsAndLog(functionName, functionArgs) {
  26092. if (!__WEBPACK_IMPORTED_MODULE_1__utils__["b" /* log */].debug) {
  26093. return;
  26094. }
  26095. var functionString = void 0;
  26096. if (__WEBPACK_IMPORTED_MODULE_1__utils__["b" /* log */].priority >= 4) {
  26097. functionString = getFunctionString(functionName, functionArgs);
  26098. __WEBPACK_IMPORTED_MODULE_1__utils__["b" /* log */].info(4, '' + functionString);
  26099. }
  26100. if (__WEBPACK_IMPORTED_MODULE_1__utils__["b" /* log */].break) {
  26101. functionString = functionString || getFunctionString(functionName, functionArgs);
  26102. var isBreakpoint = __WEBPACK_IMPORTED_MODULE_1__utils__["b" /* log */].break && __WEBPACK_IMPORTED_MODULE_1__utils__["b" /* log */].break.every(function (breakOn) {
  26103. return functionString.indexOf(breakOn) !== -1;
  26104. });
  26105. if (isBreakpoint) {
  26106. /* eslint-disable no-debugger */
  26107. debugger;
  26108. /* eslint-enable no-debugger */
  26109. }
  26110. }
  26111. var _iteratorNormalCompletion = true;
  26112. var _didIteratorError = false;
  26113. var _iteratorError = undefined;
  26114. try {
  26115. for (var _iterator = functionArgs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  26116. var arg = _step.value;
  26117. if (arg === undefined) {
  26118. functionString = functionString || getFunctionString(functionName, functionArgs);
  26119. throw new Error('Undefined argument: ' + functionString);
  26120. }
  26121. }
  26122. } catch (err) {
  26123. _didIteratorError = true;
  26124. _iteratorError = err;
  26125. } finally {
  26126. try {
  26127. if (!_iteratorNormalCompletion && _iterator.return) {
  26128. _iterator.return();
  26129. }
  26130. } finally {
  26131. if (_didIteratorError) {
  26132. throw _iteratorError;
  26133. }
  26134. }
  26135. }
  26136. }
  26137. //# sourceMappingURL=context-debug.js.map
  26138. /***/ }),
  26139. /* 270 */
  26140. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  26141. "use strict";
  26142. /* harmony export (immutable) */ __webpack_exports__["a"] = draw;
  26143. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gl_constants__ = __webpack_require__(25);
  26144. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  26145. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert__ = __webpack_require__(1);
  26146. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_assert__);
  26147. /* eslint-disable */
  26148. // TODO - generic draw call
  26149. // One of the good things about GL is that there are so many ways to draw things
  26150. // A good thing about webGL is that there are so many ways to draw things,
  26151. // e.g. depending on whether data is indexed and/or isInstanced.
  26152. // This function unifies those into a single call with simple parameters
  26153. // that have sane defaults.
  26154. function draw(gl, _ref) {
  26155. var _ref$drawMode = _ref.drawMode,
  26156. drawMode = _ref$drawMode === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLES : _ref$drawMode,
  26157. vertexCount = _ref.vertexCount,
  26158. _ref$offset = _ref.offset,
  26159. offset = _ref$offset === undefined ? 0 : _ref$offset,
  26160. _ref$isIndexed = _ref.isIndexed,
  26161. isIndexed = _ref$isIndexed === undefined ? false : _ref$isIndexed,
  26162. _ref$indexType = _ref.indexType,
  26163. indexType = _ref$indexType === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].UNSIGNED_SHORT : _ref$indexType,
  26164. _ref$isInstanced = _ref.isInstanced,
  26165. isInstanced = _ref$isInstanced === undefined ? false : _ref$isInstanced,
  26166. _ref$instanceCount = _ref.instanceCount,
  26167. instanceCount = _ref$instanceCount === undefined ? 0 : _ref$instanceCount;
  26168. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["j" /* assertWebGLContext */])(gl);
  26169. var extension = gl.getExtension('ANGLE_instanced_arrays');
  26170. // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
  26171. if (isInstanced) {
  26172. var webgl2 = isWebGL2(gl);
  26173. var _extension = gl.getExtension('ANGLE_instanced_arrays');
  26174. var context = webgl2 ? gl : _extension;
  26175. var suffix = webgl2 ? '' : 'ANGLE';
  26176. var drawElements = 'drawElementsInstanced' + suffix;
  26177. var drawArrays = 'drawArraysInstanced' + suffix;
  26178. if (isIndexed) {
  26179. context[drawElements](drawMode, vertexCount, indexType, offset, instanceCount);
  26180. } else {
  26181. context[drawArrays](drawMode, offset, vertexCount, instanceCount);
  26182. }
  26183. } else if (isIndexed) {
  26184. gl.drawElements(drawMode, vertexCount, indexType, offset);
  26185. } else {
  26186. gl.drawArrays(drawMode, offset, vertexCount);
  26187. }
  26188. }
  26189. //# sourceMappingURL=draw.js.map
  26190. /***/ }),
  26191. /* 271 */
  26192. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  26193. "use strict";
  26194. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(38);
  26195. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  26196. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__resource__ = __webpack_require__(30);
  26197. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__helpers_query_manager__ = __webpack_require__(166);
  26198. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  26199. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  26200. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  26201. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  26202. var FenceSync = /*#__PURE__*/function (_Resource) {
  26203. _inherits(FenceSync, _Resource);
  26204. /*
  26205. * @class
  26206. * @param {WebGL2RenderingContext} gl
  26207. */
  26208. function FenceSync(gl, opts) {
  26209. _classCallCheck(this, FenceSync);
  26210. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(gl);
  26211. // query manager needs a promise field
  26212. var _this = _possibleConstructorReturn(this, (FenceSync.__proto__ || Object.getPrototypeOf(FenceSync)).call(this, gl, opts));
  26213. _this.promise = null;
  26214. Object.seal(_this);
  26215. return _this;
  26216. }
  26217. /**
  26218. * The method is a no-op in the absence of the possibility of
  26219. * synchronizing between multiple GL contexts.
  26220. * Prevent commands from being added to GPU command queue.
  26221. * Note: commands can still be buffered in driver.
  26222. *
  26223. * @param {GLbitfield} flags
  26224. * @param {GLint64} timeout
  26225. * @return {Sync} status
  26226. */
  26227. _createClass(FenceSync, [{
  26228. key: 'wait',
  26229. value: function wait() {
  26230. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  26231. _ref$flags = _ref.flags,
  26232. flags = _ref$flags === undefined ? 0 : _ref$flags,
  26233. _ref$timeout = _ref.timeout,
  26234. timeout = _ref$timeout === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TIMEOUT_IGNORED : _ref$timeout;
  26235. this.gl.waitSync(this.handle, flags, timeout);
  26236. return this;
  26237. }
  26238. /**
  26239. * Block all CPU operations until fence is signalled
  26240. * @param {GLbitfield} flags
  26241. * @param {GLint64} timeout
  26242. * @return {GLenum} result
  26243. */
  26244. }, {
  26245. key: 'clientWait',
  26246. value: function clientWait(_ref2) {
  26247. var _ref2$flags = _ref2.flags,
  26248. flags = _ref2$flags === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].SYNC_FLUSH_COMMANDS_BIT : _ref2$flags,
  26249. timeout = _ref2.timeout;
  26250. var result = this.gl.clientWaitSync(this.handle, flags, timeout);
  26251. // TODO - map to boolean?
  26252. switch (result) {
  26253. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].ALREADY_SIGNALED:
  26254. // Indicates that sync object was signaled when this method was called.
  26255. break;
  26256. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TIMEOUT_EXPIRED:
  26257. // Indicates that timeout time passed, sync object did not become signaled
  26258. break;
  26259. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].CONDITION_SATISFIED:
  26260. // Indicates that sync object was signaled before timeout expired.
  26261. break;
  26262. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].WAIT_FAILED:
  26263. // Indicates that an error occurred during execution.
  26264. break;
  26265. default:
  26266. }
  26267. return result;
  26268. }
  26269. }, {
  26270. key: 'cancel',
  26271. value: function cancel() {
  26272. __WEBPACK_IMPORTED_MODULE_3__helpers_query_manager__["a" /* default */].cancelQuery(this);
  26273. }
  26274. }, {
  26275. key: 'isSignaled',
  26276. value: function isSignaled() {
  26277. return this.getParameter(__WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].SYNC_STATUS) === __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].SIGNALED;
  26278. }
  26279. // TODO - Query manager needs these?
  26280. }, {
  26281. key: 'isResultAvailable',
  26282. value: function isResultAvailable() {
  26283. return this.isSignaled();
  26284. }
  26285. }, {
  26286. key: 'getResult',
  26287. value: function getResult() {
  26288. return this.isSignaled();
  26289. }
  26290. }, {
  26291. key: 'getParameter',
  26292. value: function getParameter(pname) {
  26293. return this.gl.getSyncParameter(this.handle, pname);
  26294. }
  26295. // PRIVATE METHODS
  26296. }, {
  26297. key: '_createHandle',
  26298. value: function _createHandle() {
  26299. return this.gl.fenceSync(__WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].SYNC_GPU_COMMANDS_COMPLETE, 0);
  26300. }
  26301. }, {
  26302. key: '_deleteHandle',
  26303. value: function _deleteHandle() {
  26304. __WEBPACK_IMPORTED_MODULE_3__helpers_query_manager__["a" /* default */].deleteQuery(this);
  26305. this.gl.deleteSync(this.handle);
  26306. }
  26307. }]);
  26308. return FenceSync;
  26309. }(__WEBPACK_IMPORTED_MODULE_2__resource__["a" /* default */]);
  26310. /* harmony default export */ __webpack_exports__["a"] = (FenceSync);
  26311. //# sourceMappingURL=fence-sync.js.map
  26312. /***/ }),
  26313. /* 272 */
  26314. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  26315. "use strict";
  26316. /* harmony export (immutable) */ __webpack_exports__["a"] = readPixels;
  26317. /* unused harmony export readPixelsToBuffer */
  26318. /* unused harmony export blitFramebuffer */
  26319. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(38);
  26320. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  26321. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert__ = __webpack_require__(1);
  26322. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_assert__);
  26323. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  26324. /* eslint-disable */
  26325. // TODO - generic draw call
  26326. // One of the good things about GL is that there are so many ways to draw things
  26327. /**
  26328. * Read pixels from a target
  26329. *
  26330. * Will read from the currently bound framebuffer, or the currently bound
  26331. * drawing buffer - if context has been created with
  26332. * preserveDrawingBuffers
  26333. *
  26334. * @param {WebGLRenderingContext} gl
  26335. * @param {Object} opts
  26336. * @param {Number} opts.x - leftmost coord to be read
  26337. * @param {Number} opts.y - bottommost (or topmost if sourceHeight supplied)
  26338. * @param {Number} opts.width=1 - width of area to be read
  26339. * @param {Number} opts.height=1 - height of area to be read
  26340. * @param {Number} opts.sourceHeight= - target height, implies top left coords
  26341. * @param {Number} opts.dataOffset=0 - WebGL2 only - offset into data array
  26342. * @param {Number} opts.format=GL.RBGA - Can be set to GL.RGB or GL.ALPHA
  26343. *
  26344. * @return {ArrayView} - types array, either passed in or autoallocated
  26345. */
  26346. function readPixels(gl, _ref) {
  26347. var x = _ref.x,
  26348. y = _ref.y,
  26349. _ref$width = _ref.width,
  26350. width = _ref$width === undefined ? 1 : _ref$width,
  26351. _ref$height = _ref.height,
  26352. height = _ref$height === undefined ? 1 : _ref$height,
  26353. data = _ref.data,
  26354. _ref$dataOffset = _ref.dataOffset,
  26355. dataOffset = _ref$dataOffset === undefined ? 0 : _ref$dataOffset,
  26356. _ref$type = _ref.type,
  26357. type = _ref$type === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].UNSIGNED_BYTE : _ref$type,
  26358. sourceHeight = _ref.sourceHeight,
  26359. _ref$format = _ref.format,
  26360. format = _ref$format === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].RGBA : _ref$format;
  26361. // Read color in the central pixel, to be mapped with picking colors
  26362. data = data || new Uint8Array(4 * width * height);
  26363. // If source height is specified, a top left coordinate system is used
  26364. y = sourceHeight ? sourceHeight - y : y;
  26365. if (dataOffset) {
  26366. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(gl);
  26367. gl.readPixels(x, y, width, height, format, type, data, dataOffset);
  26368. } else {
  26369. gl.readPixels(x, y, width, height, format, type, data);
  26370. }
  26371. return data;
  26372. }
  26373. /**
  26374. * Read pixels directly into webgl buffer
  26375. * NOTE: WebGL2 only
  26376. *
  26377. * @param {WebGLRenderingContext} gl
  26378. * @param {Object} options
  26379. * @return {WebGLBuffer} the passed in buffer
  26380. */
  26381. function readPixelsToBuffer(gl, _ref2) {
  26382. var x = _ref2.x,
  26383. y = _ref2.y,
  26384. _ref2$width = _ref2.width,
  26385. width = _ref2$width === undefined ? 1 : _ref2$width,
  26386. _ref2$height = _ref2.height,
  26387. height = _ref2$height === undefined ? 1 : _ref2$height,
  26388. buffer = _ref2.buffer,
  26389. _ref2$dataOffset = _ref2.dataOffset,
  26390. dataOffset = _ref2$dataOffset === undefined ? 0 : _ref2$dataOffset,
  26391. _ref2$type = _ref2.type,
  26392. type = _ref2$type === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].UNSIGNED_BYTE : _ref2$type,
  26393. sourceHeight = _ref2.sourceHeight,
  26394. _ref2$format = _ref2.format,
  26395. format = _ref2$format === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].RGBA : _ref2$format;
  26396. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(gl);
  26397. // If source height is specified, a top left coordinate system is used
  26398. y = sourceHeight ? sourceHeight - y : y;
  26399. gl.bindBuffer(__WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].PIXEL_PACK_BUFFER, buffer.handle);
  26400. gl.readPixels(x, y, width, height, format, type, dataOffset);
  26401. gl.bindBuffer(__WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].PIXEL_PACK_BUFFER, null);
  26402. return buffer;
  26403. }
  26404. /*
  26405. * @param {} opt.filter
  26406. */
  26407. function blitFramebuffer(gl, _ref3) {
  26408. var _ref3$source = _slicedToArray(_ref3.source, 4),
  26409. sourceX = _ref3$source[0],
  26410. sourceY = _ref3$source[1],
  26411. sourceWidth = _ref3$source[2],
  26412. sourceHeight = _ref3$source[3],
  26413. _ref3$dest = _slicedToArray(_ref3.dest, 4),
  26414. destX = _ref3$dest[0],
  26415. destY = _ref3$dest[1],
  26416. destWidth = _ref3$dest[2],
  26417. destHeight = _ref3$dest[3],
  26418. _ref3$mask = _ref3.mask,
  26419. mask = _ref3$mask === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].COLOR_BUFFER_BIT | __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].DEPTH_BUFFER_BIT | __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].STENCIL_BUFFER_BIT : _ref3$mask,
  26420. _ref3$filter = _ref3.filter,
  26421. filter = _ref3$filter === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].LINEAR : _ref3$filter;
  26422. }
  26423. //# sourceMappingURL=functions.js.map
  26424. /***/ }),
  26425. /* 273 */
  26426. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  26427. "use strict";
  26428. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__resource__ = __webpack_require__(30);
  26429. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers_query_manager__ = __webpack_require__(166);
  26430. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__context_features__ = __webpack_require__(108);
  26431. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__context__ = __webpack_require__(7);
  26432. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__webgl_utils__ = __webpack_require__(60);
  26433. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  26434. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  26435. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  26436. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  26437. // WebGL2 Query (also handles disjoint timer extensions)
  26438. var noop = function noop(x) {
  26439. return x;
  26440. };
  26441. var ERR_GPU_DISJOINT = 'Disjoint GPU operation invalidated timer queries';
  26442. var ERR_TIMER_QUERY_NOT_SUPPORTED = 'Timer queries require "EXT_disjoint_timer_query" extension';
  26443. var GL_QUERY_COUNTER_BITS_EXT = 0x8864; // # bits in query result for the given target.
  26444. var GL_QUERY_RESULT = 0x8866; // Returns a GLuint containing the query result.
  26445. var GL_QUERY_RESULT_AVAILABLE = 0x8867; // whether query result is available.
  26446. var GL_TIME_ELAPSED_EXT = 0x88BF; // Elapsed time (in nanoseconds).
  26447. var GL_TIMESTAMP_EXT = 0x8E28; // The current time.
  26448. var GL_GPU_DISJOINT_EXT = 0x8FBB; // Whether GPU performed any disjoint operation.
  26449. var GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88; // #primitives written to feedback buffers
  26450. var GL_ANY_SAMPLES_PASSED = 0x8C2F; // Occlusion query (if drawing passed depth test)
  26451. var GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A; // Occlusion query less accurate/faster version
  26452. var Query = /*#__PURE__*/function (_Resource) {
  26453. _inherits(Query, _Resource);
  26454. _createClass(Query, null, [{
  26455. key: 'isSupported',
  26456. // Returns true if Query is supported by the WebGL implementation
  26457. // Can also check whether timestamp queries are available.
  26458. value: function isSupported(gl) {
  26459. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  26460. _ref$queries = _ref.queries,
  26461. queries = _ref$queries === undefined ? false : _ref$queries,
  26462. _ref$timers = _ref.timers,
  26463. timers = _ref$timers === undefined ? false : _ref$timers,
  26464. _ref$timestamps = _ref.timestamps,
  26465. timestamps = _ref$timestamps === undefined ? false : _ref$timestamps;
  26466. var webgl2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__context__["b" /* isWebGL2 */])(gl);
  26467. var hasTimerQueries = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context_features__["c" /* hasFeatures */])(gl, __WEBPACK_IMPORTED_MODULE_2__context_features__["a" /* FEATURES */].TIMER_QUERY);
  26468. var supported = webgl2 || hasTimerQueries;
  26469. if (queries) {
  26470. supported = supported && webgl2;
  26471. }
  26472. if (timers) {
  26473. supported = supported && hasTimerQueries;
  26474. }
  26475. if (timestamps) {
  26476. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__webgl_utils__["f" /* polyfillContext */])(gl);
  26477. var queryCounterBits = gl.getQuery(GL_TIMESTAMP_EXT, GL_QUERY_COUNTER_BITS_EXT);
  26478. supported = supported && queryCounterBits > 0;
  26479. }
  26480. return supported;
  26481. }
  26482. // Create a query class
  26483. }]);
  26484. function Query(gl) {
  26485. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  26486. _classCallCheck(this, Query);
  26487. var _this = _possibleConstructorReturn(this, (Query.__proto__ || Object.getPrototypeOf(Query)).call(this, gl, opts));
  26488. var _opts$onComplete = opts.onComplete,
  26489. onComplete = _opts$onComplete === undefined ? noop : _opts$onComplete,
  26490. _opts$onError = opts.onError,
  26491. onError = _opts$onError === undefined ? noop : _opts$onError;
  26492. _this.target = null;
  26493. _this.onComplete = onComplete;
  26494. _this.onError = onError;
  26495. // query manager needs a promise field
  26496. _this.promise = null;
  26497. Object.seal(_this);
  26498. return _this;
  26499. }
  26500. // Shortcut for timer query (dependent on extension in both WebGL1 and 2)
  26501. // Measures GPU time delta between this call and a matching `end` call in the
  26502. // GPU instruction stream.
  26503. _createClass(Query, [{
  26504. key: 'beginTimeElapsedQuery',
  26505. value: function beginTimeElapsedQuery() {
  26506. return this.begin(GL_TIME_ELAPSED_EXT);
  26507. }
  26508. // Shortcut for occlusion queries
  26509. }, {
  26510. key: 'beginOcclusionQuery',
  26511. value: function beginOcclusionQuery() {
  26512. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  26513. _ref2$conservative = _ref2.conservative,
  26514. conservative = _ref2$conservative === undefined ? false : _ref2$conservative;
  26515. return this.begin(conservative ? GL_ANY_SAMPLES_PASSED_CONSERVATIVE : GL_ANY_SAMPLES_PASSED);
  26516. }
  26517. // Shortcut for transformFeedbackQuery
  26518. }, {
  26519. key: 'beginTransformFeedbackQuery',
  26520. value: function beginTransformFeedbackQuery() {
  26521. return this.begin(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);
  26522. }
  26523. // Generates a GPU time stamp when the GPU instruction stream reaches this instruction.
  26524. // To measure time deltas, two timestamp queries are needed.
  26525. // Note: timestamp() queries may not be available even when the timer query extension is.
  26526. }, {
  26527. key: 'getTimestamp',
  26528. value: function getTimestamp() {
  26529. __WEBPACK_IMPORTED_MODULE_1__helpers_query_manager__["a" /* default */].beginQuery(this, this.onComplete, this.onError);
  26530. try {
  26531. this.gl.queryCounter(this.handle, GL_TIMESTAMP_EXT);
  26532. } catch (error) {
  26533. __WEBPACK_IMPORTED_MODULE_1__helpers_query_manager__["a" /* default */].rejectQuery(this, ERR_TIMER_QUERY_NOT_SUPPORTED);
  26534. }
  26535. return this;
  26536. }
  26537. // Due to OpenGL API limitations, after calling `begin()` on one Query
  26538. // instance, `end()` must be called on that same instance before
  26539. // calling `begin()` on another query. While there can be multiple
  26540. // outstanding queries representing disjoint `begin()`/`end()` intervals.
  26541. // It is not possible to interleave or overlap `begin` and `end` calls.
  26542. }, {
  26543. key: 'begin',
  26544. value: function begin(target) {
  26545. // - Triggering a new query when a Query is already tracking an
  26546. // unresolved query causes that query to be cancelled.
  26547. __WEBPACK_IMPORTED_MODULE_1__helpers_query_manager__["a" /* default */].beginQuery(this, this.onComplete, this.onError);
  26548. this.target = target;
  26549. try {
  26550. this.gl.beginQuery(this.target, this.handle);
  26551. } catch (error) {
  26552. __WEBPACK_IMPORTED_MODULE_1__helpers_query_manager__["a" /* default */].rejectQuery(this, 'Query not supported');
  26553. }
  26554. return this;
  26555. }
  26556. // ends the current query
  26557. }, {
  26558. key: 'end',
  26559. value: function end() {
  26560. // Note: calling end does not affect the pending promise
  26561. if (this.target) {
  26562. this.ext.endQuery(this.target);
  26563. this.target = null;
  26564. }
  26565. return this;
  26566. }
  26567. // Cancels a pending query
  26568. }, {
  26569. key: 'cancel',
  26570. value: function cancel() {
  26571. this.end();
  26572. __WEBPACK_IMPORTED_MODULE_1__helpers_query_manager__["a" /* default */].cancelQuery(this);
  26573. return this;
  26574. }
  26575. // Returns true if the query result is available
  26576. }, {
  26577. key: 'isResultAvailable',
  26578. value: function isResultAvailable() {
  26579. return this.gl.getQueryParameter(this.handle, GL_QUERY_RESULT_AVAILABLE);
  26580. }
  26581. // Returns the query result, converted to milliseconds to match JavaScript conventions.
  26582. // TODO - what about non-timer queries
  26583. }, {
  26584. key: 'getResult',
  26585. value: function getResult() {
  26586. var result = this.gl.getQueryParameter(this.handle, GL_QUERY_RESULT);
  26587. return Number.isFinite(result) ? result / 1e6 : 0;
  26588. }
  26589. }, {
  26590. key: '_createHandle',
  26591. value: function _createHandle() {
  26592. return Query.isSupported(this.gl) ? this.gl.createQuery() : null;
  26593. }
  26594. }, {
  26595. key: '_deleteHandle',
  26596. value: function _deleteHandle() {
  26597. __WEBPACK_IMPORTED_MODULE_1__helpers_query_manager__["a" /* default */].deleteQuery(this);
  26598. this.gl.deleteQuery(this.handle);
  26599. }
  26600. }], [{
  26601. key: 'poll',
  26602. value: function poll(gl) {
  26603. __WEBPACK_IMPORTED_MODULE_1__helpers_query_manager__["a" /* default */].poll(gl);
  26604. }
  26605. }]);
  26606. return Query;
  26607. }(__WEBPACK_IMPORTED_MODULE_0__resource__["a" /* default */]);
  26608. // NOTE: This call lets the queryManager know how to detect disjoint GPU state
  26609. // It will check dsjoint state on polls and before adding a new query
  26610. // and reject any outstanding TimerQueries with our supplied error message.
  26611. /* harmony default export */ __webpack_exports__["a"] = (Query);
  26612. __WEBPACK_IMPORTED_MODULE_1__helpers_query_manager__["a" /* default */].setInvalidator({
  26613. queryType: Query,
  26614. errorMessage: ERR_GPU_DISJOINT,
  26615. // Note: Querying the disjoint state resets it
  26616. checkInvalid: function checkInvalid(gl) {
  26617. return gl.getParameter(GL_GPU_DISJOINT_EXT);
  26618. }
  26619. });
  26620. //# sourceMappingURL=query.js.map
  26621. /***/ }),
  26622. /* 274 */
  26623. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  26624. "use strict";
  26625. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(38);
  26626. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  26627. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__resource__ = __webpack_require__(30);
  26628. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  26629. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  26630. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  26631. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  26632. /* eslint-disable no-inline-comments */
  26633. var Sampler = /*#__PURE__*/function (_Resource) {
  26634. _inherits(Sampler, _Resource);
  26635. _createClass(Sampler, null, [{
  26636. key: 'isSupported',
  26637. value: function isSupported(gl) {
  26638. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl);
  26639. }
  26640. }, {
  26641. key: 'isHandle',
  26642. value: function isHandle(handle) {
  26643. return this.gl.isSampler(this.handle);
  26644. }
  26645. }]);
  26646. function Sampler(gl, opts) {
  26647. _classCallCheck(this, Sampler);
  26648. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(gl);
  26649. var _this = _possibleConstructorReturn(this, (Sampler.__proto__ || Object.getPrototypeOf(Sampler)).call(this, gl, opts));
  26650. Object.seal(_this);
  26651. return _this;
  26652. }
  26653. /**
  26654. * Bind to the same texture unit as a texture to control sampling for that texture
  26655. * @param {GLuint} unit - texture unit index
  26656. * @return {Sampler} - returns self to enable chaining
  26657. */
  26658. _createClass(Sampler, [{
  26659. key: 'bind',
  26660. value: function bind(unit) {
  26661. this.gl.bindSampler(unit, this.handle);
  26662. return this;
  26663. }
  26664. /**
  26665. * Bind to the same texture unit as a texture to control sampling for that texture
  26666. * @param {GLuint} unit - texture unit index
  26667. * @return {Sampler} - returns self to enable chaining
  26668. */
  26669. }, {
  26670. key: 'unbind',
  26671. value: function unbind(unit) {
  26672. this.gl.bindSampler(unit, null);
  26673. return this;
  26674. }
  26675. // RESOURCE METHODS
  26676. }, {
  26677. key: '_createHandle',
  26678. value: function _createHandle() {
  26679. return this.gl.createSampler();
  26680. }
  26681. }, {
  26682. key: '_deleteHandle',
  26683. value: function _deleteHandle() {
  26684. this.gl.deleteSampler(this.handle);
  26685. }
  26686. }, {
  26687. key: '_getParameter',
  26688. value: function _getParameter(pname) {
  26689. var value = this.gl.getSamplerParameter(this.handle, pname);
  26690. return value;
  26691. }
  26692. }, {
  26693. key: '_setParameter',
  26694. value: function _setParameter(pname, param) {
  26695. // Apparently there are some conversion integer/float rules that made
  26696. // the WebGL committe expose two parameter setting functions in JavaScript.
  26697. // For now, pick the float version for parameters specified as GLfloat.
  26698. switch (pname) {
  26699. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TEXTURE_MIN_LOD:
  26700. case __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TEXTURE_MAX_LOD:
  26701. this.gl.samplerParameterf(this.handle, pname, param);
  26702. break;
  26703. default:
  26704. this.gl.samplerParameteri(this.handle, pname, param);
  26705. break;
  26706. }
  26707. return this;
  26708. }
  26709. }]);
  26710. return Sampler;
  26711. }(__WEBPACK_IMPORTED_MODULE_2__resource__["a" /* default */]);
  26712. /* harmony default export */ __webpack_exports__["a"] = (Sampler);
  26713. //# sourceMappingURL=sampler.js.map
  26714. /***/ }),
  26715. /* 275 */
  26716. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  26717. "use strict";
  26718. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gl_constants__ = __webpack_require__(25);
  26719. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__texture__ = __webpack_require__(62);
  26720. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert__ = __webpack_require__(1);
  26721. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_assert__);
  26722. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  26723. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  26724. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  26725. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  26726. // import {withParameters} from './context';
  26727. var FACES = [__WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP_POSITIVE_X, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP_NEGATIVE_X, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP_POSITIVE_Y, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP_NEGATIVE_Y, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP_POSITIVE_Z, __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP_NEGATIVE_Z];
  26728. var TextureCube = /*#__PURE__*/function (_Texture) {
  26729. _inherits(TextureCube, _Texture);
  26730. function TextureCube(gl) {
  26731. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  26732. _classCallCheck(this, TextureCube);
  26733. var _this = _possibleConstructorReturn(this, (TextureCube.__proto__ || Object.getPrototypeOf(TextureCube)).call(this, gl, Object.assign({}, opts, { target: __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP })));
  26734. _this.initialize(opts);
  26735. Object.seal(_this);
  26736. return _this;
  26737. }
  26738. /* eslint-disable max-len, max-statements */
  26739. _createClass(TextureCube, [{
  26740. key: 'initialize',
  26741. value: function initialize() {
  26742. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  26743. var _opts$format = opts.format,
  26744. format = _opts$format === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].RGBA : _opts$format,
  26745. _opts$mipmaps = opts.mipmaps,
  26746. mipmaps = _opts$mipmaps === undefined ? true : _opts$mipmaps;
  26747. var _opts$width = opts.width,
  26748. width = _opts$width === undefined ? 1 : _opts$width,
  26749. _opts$height = opts.height,
  26750. height = _opts$height === undefined ? 1 : _opts$height,
  26751. _opts$type = opts.type,
  26752. type = _opts$type === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].UNSIGNED_BYTE : _opts$type,
  26753. dataFormat = opts.dataFormat;
  26754. // Deduce width and height based on one of the faces
  26755. var _deduceParameters = this._deduceParameters({ format: format, type: type, dataFormat: dataFormat });
  26756. type = _deduceParameters.type;
  26757. dataFormat = _deduceParameters.dataFormat;
  26758. // Enforce cube
  26759. var _deduceImageSize = this._deduceImageSize({
  26760. data: opts[__WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP_POSITIVE_X], width: width, height: height
  26761. });
  26762. width = _deduceImageSize.width;
  26763. height = _deduceImageSize.height;
  26764. __WEBPACK_IMPORTED_MODULE_2_assert___default()(width === height);
  26765. // Temporarily apply any pixel store paramaters and build textures
  26766. // withParameters(this.gl, opts, () => {
  26767. // for (const face of CUBE_MAP_FACES) {
  26768. // this.setImageData({
  26769. // target: face,
  26770. // data: opts[face],
  26771. // width, height, format, type, dataFormat, border, mipmaps
  26772. // });
  26773. // }
  26774. // });
  26775. this.setCubeMapImageData(opts);
  26776. // Called here so that GL.
  26777. // TODO - should genMipmap() be called on the cubemap or on the faces?
  26778. if (mipmaps) {
  26779. this.generateMipmap(opts);
  26780. }
  26781. // Store opts for accessors
  26782. this.opts = opts;
  26783. }
  26784. }, {
  26785. key: 'subImage',
  26786. value: function subImage(_ref) {
  26787. var face = _ref.face,
  26788. data = _ref.data,
  26789. _ref$x = _ref.x,
  26790. x = _ref$x === undefined ? 0 : _ref$x,
  26791. _ref$y = _ref.y,
  26792. y = _ref$y === undefined ? 0 : _ref$y,
  26793. _ref$mipmapLevel = _ref.mipmapLevel,
  26794. mipmapLevel = _ref$mipmapLevel === undefined ? 0 : _ref$mipmapLevel;
  26795. return this._subImage({ target: face, data: data, x: x, y: y, mipmapLevel: mipmapLevel });
  26796. }
  26797. /* eslint-disable max-statements, max-len */
  26798. }, {
  26799. key: 'setCubeMapImageData',
  26800. value: function setCubeMapImageData(_ref2) {
  26801. var width = _ref2.width,
  26802. height = _ref2.height,
  26803. pixels = _ref2.pixels,
  26804. data = _ref2.data,
  26805. _ref2$border = _ref2.border,
  26806. border = _ref2$border === undefined ? 0 : _ref2$border,
  26807. _ref2$format = _ref2.format,
  26808. format = _ref2$format === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].RGBA : _ref2$format,
  26809. _ref2$type = _ref2.type,
  26810. type = _ref2$type === undefined ? __WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].UNSIGNED_BYTE : _ref2$type,
  26811. _ref2$generateMipmap = _ref2.generateMipmap,
  26812. generateMipmap = _ref2$generateMipmap === undefined ? false : _ref2$generateMipmap;
  26813. var gl = this.gl;
  26814. pixels = pixels || data;
  26815. this.bind();
  26816. if (this.width || this.height) {
  26817. var _iteratorNormalCompletion = true;
  26818. var _didIteratorError = false;
  26819. var _iteratorError = undefined;
  26820. try {
  26821. for (var _iterator = FACES[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  26822. var face = _step.value;
  26823. gl.texImage2D(face, 0, format, width, height, border, format, type, pixels[face]);
  26824. }
  26825. } catch (err) {
  26826. _didIteratorError = true;
  26827. _iteratorError = err;
  26828. } finally {
  26829. try {
  26830. if (!_iteratorNormalCompletion && _iterator.return) {
  26831. _iterator.return();
  26832. }
  26833. } finally {
  26834. if (_didIteratorError) {
  26835. throw _iteratorError;
  26836. }
  26837. }
  26838. }
  26839. } else {
  26840. var _iteratorNormalCompletion2 = true;
  26841. var _didIteratorError2 = false;
  26842. var _iteratorError2 = undefined;
  26843. try {
  26844. for (var _iterator2 = FACES[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  26845. var _face = _step2.value;
  26846. gl.texImage2D(_face, 0, format, format, type, pixels[_face]);
  26847. }
  26848. } catch (err) {
  26849. _didIteratorError2 = true;
  26850. _iteratorError2 = err;
  26851. } finally {
  26852. try {
  26853. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  26854. _iterator2.return();
  26855. }
  26856. } finally {
  26857. if (_didIteratorError2) {
  26858. throw _iteratorError2;
  26859. }
  26860. }
  26861. }
  26862. }
  26863. }
  26864. }, {
  26865. key: 'bind',
  26866. value: function bind() {
  26867. var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  26868. index = _ref3.index;
  26869. if (index !== undefined) {
  26870. this.gl.activeTexture(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE0 + index);
  26871. }
  26872. this.gl.bindTexture(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP, this.handle);
  26873. return index;
  26874. }
  26875. }, {
  26876. key: 'unbind',
  26877. value: function unbind() {
  26878. this.gl.bindTexture(__WEBPACK_IMPORTED_MODULE_0__gl_constants__["d" /* GL */].TEXTURE_CUBE_MAP, null);
  26879. return this;
  26880. }
  26881. }]);
  26882. return TextureCube;
  26883. }(__WEBPACK_IMPORTED_MODULE_1__texture__["a" /* default */]);
  26884. /* harmony default export */ __webpack_exports__["a"] = (TextureCube);
  26885. TextureCube.FACES = FACES;
  26886. //# sourceMappingURL=texture-cube.js.map
  26887. /***/ }),
  26888. /* 276 */
  26889. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  26890. "use strict";
  26891. /* unused harmony export getPrimitiveCount */
  26892. /* unused harmony export getVertexCount */
  26893. /* harmony export (immutable) */ __webpack_exports__["b"] = getTransformFeedbackMode;
  26894. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__gl_constants__ = __webpack_require__(25);
  26895. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__resource__ = __webpack_require__(30);
  26896. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__context__ = __webpack_require__(7);
  26897. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert__ = __webpack_require__(1);
  26898. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_assert__);
  26899. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  26900. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  26901. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  26902. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  26903. var GL_TRANSFORM_FEEDBACK_BUFFER = 0x8C8E;
  26904. var GL_TRANSFORM_FEEDBACK = 0x8E22;
  26905. var TranformFeedback = /*#__PURE__*/function (_Resource) {
  26906. _inherits(TranformFeedback, _Resource);
  26907. _createClass(TranformFeedback, null, [{
  26908. key: 'isSupported',
  26909. value: function isSupported(gl) {
  26910. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context__["b" /* isWebGL2 */])(gl);
  26911. }
  26912. }, {
  26913. key: 'isHandle',
  26914. value: function isHandle(handle) {
  26915. return this.gl.isTransformFeedback(this.handle);
  26916. }
  26917. /**
  26918. * @class
  26919. * @param {WebGL2RenderingContext} gl - context
  26920. * @param {Object} opts - options
  26921. */
  26922. }]);
  26923. function TranformFeedback(gl) {
  26924. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  26925. _classCallCheck(this, TranformFeedback);
  26926. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context__["g" /* assertWebGL2Context */])(gl);
  26927. var _this = _possibleConstructorReturn(this, (TranformFeedback.__proto__ || Object.getPrototypeOf(TranformFeedback)).call(this, gl, opts));
  26928. _this.buffers = {};
  26929. Object.seal(_this);
  26930. _this.initialize(opts);
  26931. return _this;
  26932. }
  26933. _createClass(TranformFeedback, [{
  26934. key: 'initialize',
  26935. value: function initialize(_ref) {
  26936. var _ref$buffers = _ref.buffers,
  26937. buffers = _ref$buffers === undefined ? {} : _ref$buffers,
  26938. _ref$varyingMap = _ref.varyingMap,
  26939. varyingMap = _ref$varyingMap === undefined ? {} : _ref$varyingMap;
  26940. this.bindBuffers(buffers, { clear: true, varyingMap: varyingMap });
  26941. }
  26942. }, {
  26943. key: 'bindBuffers',
  26944. value: function bindBuffers() {
  26945. var buffers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  26946. var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  26947. _ref2$clear = _ref2.clear,
  26948. clear = _ref2$clear === undefined ? false : _ref2$clear,
  26949. _ref2$varyingMap = _ref2.varyingMap,
  26950. varyingMap = _ref2$varyingMap === undefined ? {} : _ref2$varyingMap;
  26951. if (clear) {
  26952. this._unbindBuffers();
  26953. this.buffers = {};
  26954. }
  26955. for (var bufferName in buffers) {
  26956. var buffer = buffers[bufferName];
  26957. var index = Number.isFinite(Number(bufferName)) ? Number(bufferName) : varyingMap[bufferName];
  26958. __WEBPACK_IMPORTED_MODULE_3_assert___default()(Number.isFinite(index));
  26959. this.buffers[index] = buffer;
  26960. }
  26961. }
  26962. // TODO: Activation is tightly coupled to the current program. Since we try to encapsulate
  26963. // program.use, should we move these methods (begin/pause/resume/end) to the Program?
  26964. }, {
  26965. key: 'begin',
  26966. value: function begin(primitiveMode) {
  26967. this._bindBuffers();
  26968. this.gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, this.handle);
  26969. this.gl.beginTransformFeedback(primitiveMode);
  26970. return this;
  26971. }
  26972. }, {
  26973. key: 'pause',
  26974. value: function pause() {
  26975. this.gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, this.handle);
  26976. this.gl.pauseTransformFeedback();
  26977. this.gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, null);
  26978. this._unbindBuffers();
  26979. return this;
  26980. }
  26981. }, {
  26982. key: 'resume',
  26983. value: function resume() {
  26984. this._bindBuffers();
  26985. this.gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, this.handle);
  26986. this.gl.resumeTransformFeedback();
  26987. return this;
  26988. }
  26989. }, {
  26990. key: 'end',
  26991. value: function end() {
  26992. this.gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, this.handle);
  26993. this.gl.endTransformFeedback();
  26994. this.gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, null);
  26995. this._unbindBuffers();
  26996. return this;
  26997. }
  26998. }, {
  26999. key: 'bindBuffer',
  27000. value: function bindBuffer(_ref3) {
  27001. var index = _ref3.index,
  27002. buffer = _ref3.buffer,
  27003. _ref3$offset = _ref3.offset,
  27004. offset = _ref3$offset === undefined ? 0 : _ref3$offset,
  27005. size = _ref3.size;
  27006. // Need to avoid chrome bug where buffer that is already bound to a different target
  27007. // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.
  27008. buffer.unbind();
  27009. this.gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, this.handle);
  27010. if (size === undefined) {
  27011. this.gl.bindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, index, buffer.handle);
  27012. } else {
  27013. this.gl.bindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, index, buffer.handle, offset, size);
  27014. }
  27015. return this;
  27016. }
  27017. }, {
  27018. key: 'unbindBuffer',
  27019. value: function unbindBuffer(_ref4) {
  27020. var index = _ref4.index;
  27021. this.gl.bindTransformFeedback(GL_TRANSFORM_FEEDBACK, this.handle);
  27022. this.gl.bindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, index, null);
  27023. return this;
  27024. }
  27025. // PRIVATE METHODS
  27026. // See https://github.com/KhronosGroup/WebGL/issues/2346
  27027. // If it was true that having a buffer on an unused TF was a problem
  27028. // it would make the entire concept of transform feedback objects pointless.
  27029. // The whole point of them is like VertexArrayObjects.
  27030. // You set them up with all in outputs at init time and
  27031. // then in one call you can setup all the outputs just before drawing.
  27032. // Since the point of transform feedback is to generate data that will
  27033. // then be used as inputs to attributes it makes zero sense you'd
  27034. // have to unbind them from every unused transform feedback object
  27035. // before you could use them in an attribute. If that was the case
  27036. // there would be no reason to setup transform feedback objects ever.
  27037. // You'd always use the default because you'd always have to bind and
  27038. // unbind all the buffers.
  27039. }, {
  27040. key: '_bindBuffers',
  27041. value: function _bindBuffers() {
  27042. for (var bufferIndex in this.buffers) {
  27043. this.bindBuffer({ buffer: this.buffers[bufferIndex], index: Number(bufferIndex) });
  27044. }
  27045. }
  27046. }, {
  27047. key: '_unbindBuffers',
  27048. value: function _unbindBuffers() {
  27049. for (var bufferIndex in this.buffers) {
  27050. this.unbindBuffer({ buffer: this.buffers[bufferIndex], index: Number(bufferIndex) });
  27051. }
  27052. }
  27053. // RESOURCE METHODS
  27054. }, {
  27055. key: '_createHandle',
  27056. value: function _createHandle() {
  27057. return this.gl.createTransformFeedback();
  27058. }
  27059. }, {
  27060. key: '_deleteHandle',
  27061. value: function _deleteHandle() {
  27062. this.gl.deleteTransformFeedback(this.handle);
  27063. }
  27064. }]);
  27065. return TranformFeedback;
  27066. }(__WEBPACK_IMPORTED_MODULE_1__resource__["a" /* default */]);
  27067. // Counts the number of complete "primitives" given a number of vertices and a drawMode
  27068. /* harmony default export */ __webpack_exports__["a"] = (TranformFeedback);
  27069. function getPrimitiveCount(_ref5) {
  27070. var drawMode = _ref5.drawMode,
  27071. vertexCount = _ref5.vertexCount,
  27072. countVertices = _ref5.countVertices;
  27073. switch (drawMode) {
  27074. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].POINTS:
  27075. return vertexCount;
  27076. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINES:
  27077. return vertexCount / 2;
  27078. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINE_STRIP:
  27079. return vertexCount - 1;
  27080. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINE_LOOP:
  27081. return vertexCount;
  27082. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLES:
  27083. return vertexCount / 3;
  27084. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLE_STRIP:
  27085. return vertexCount - 2;
  27086. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLE_FAN:
  27087. return vertexCount - 2;
  27088. default:
  27089. __WEBPACK_IMPORTED_MODULE_3_assert___default()(false);return 0;
  27090. }
  27091. }
  27092. // Counts the number of vertices after splitting the vertex stream into separate "primitives"
  27093. function getVertexCount(_ref6) {
  27094. var drawMode = _ref6.drawMode,
  27095. vertexCount = _ref6.vertexCount;
  27096. var primitiveCount = getPrimitiveCount({ drawMode: drawMode, vertexCount: vertexCount });
  27097. switch (drawMode) {
  27098. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].POINTS:
  27099. return primitiveCount;
  27100. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINES:
  27101. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINE_STRIP:
  27102. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINE_LOOP:
  27103. return vertexCount * 2;
  27104. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLES:
  27105. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLE_STRIP:
  27106. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLE_FAN:
  27107. return vertexCount * 3;
  27108. default:
  27109. __WEBPACK_IMPORTED_MODULE_3_assert___default()(false);return 0;
  27110. }
  27111. }
  27112. // Counts the number of complete primitives given a number of vertices and a drawMode
  27113. function getTransformFeedbackMode(_ref7) {
  27114. var drawMode = _ref7.drawMode;
  27115. switch (drawMode) {
  27116. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].POINTS:
  27117. return __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].POINTS;
  27118. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINES:
  27119. return __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINES;
  27120. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINE_STRIP:
  27121. return __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINES;
  27122. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINE_LOOP:
  27123. return __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].LINES;
  27124. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLES:
  27125. return __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLES;
  27126. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLE_STRIP:
  27127. return __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLES;
  27128. case __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLE_FAN:
  27129. return __WEBPACK_IMPORTED_MODULE_0__gl_constants__["a" /* default */].TRIANGLES;
  27130. default:
  27131. __WEBPACK_IMPORTED_MODULE_3_assert___default()(false);return 0;
  27132. }
  27133. }
  27134. //# sourceMappingURL=transform-feedback.js.map
  27135. /***/ }),
  27136. /* 277 */
  27137. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  27138. "use strict";
  27139. /* harmony export (immutable) */ __webpack_exports__["a"] = assert;
  27140. function assert(condition,message){if(!condition)throw new Error("Assertion failed. "+message)}
  27141. //# sourceMappingURL=assert.js.map
  27142. /***/ }),
  27143. /* 278 */
  27144. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  27145. "use strict";
  27146. /* unused harmony export validateMatrix4 */
  27147. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math_array__ = __webpack_require__(112);
  27148. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common__ = __webpack_require__(31);
  27149. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__vector2__ = __webpack_require__(280);
  27150. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__vector3__ = __webpack_require__(113);
  27151. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__vector4__ = __webpack_require__(281);
  27152. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__lib_assert__ = __webpack_require__(277);
  27153. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_mat4_determinant__ = __webpack_require__(569);
  27154. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_mat4_determinant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_gl_mat4_determinant__);
  27155. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_mat4_fromQuat__ = __webpack_require__(570);
  27156. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_mat4_fromQuat___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_gl_mat4_fromQuat__);
  27157. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_mat4_frustum__ = __webpack_require__(571);
  27158. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_mat4_frustum___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_gl_mat4_frustum__);
  27159. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_mat4_lookAt__ = __webpack_require__(102);
  27160. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_mat4_lookAt___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_gl_mat4_lookAt__);
  27161. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_mat4_ortho__ = __webpack_require__(234);
  27162. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_mat4_ortho___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_gl_mat4_ortho__);
  27163. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_mat4_perspective__ = __webpack_require__(76);
  27164. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_mat4_perspective___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_gl_mat4_perspective__);
  27165. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_mat4_transpose__ = __webpack_require__(574);
  27166. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_mat4_transpose___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_gl_mat4_transpose__);
  27167. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_mat4_invert__ = __webpack_require__(156);
  27168. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_mat4_invert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_gl_mat4_invert__);
  27169. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_gl_mat4_multiply__ = __webpack_require__(75);
  27170. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_gl_mat4_multiply___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_14_gl_mat4_multiply__);
  27171. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_gl_mat4_rotateX__ = __webpack_require__(157);
  27172. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_gl_mat4_rotateX___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15_gl_mat4_rotateX__);
  27173. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_gl_mat4_rotateY__ = __webpack_require__(235);
  27174. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_gl_mat4_rotateY___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_16_gl_mat4_rotateY__);
  27175. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_gl_mat4_rotateZ__ = __webpack_require__(158);
  27176. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_gl_mat4_rotateZ___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_17_gl_mat4_rotateZ__);
  27177. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_gl_mat4_rotate__ = __webpack_require__(573);
  27178. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_gl_mat4_rotate___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_18_gl_mat4_rotate__);
  27179. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_gl_mat4_scale__ = __webpack_require__(77);
  27180. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_gl_mat4_scale___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_19_gl_mat4_scale__);
  27181. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_gl_mat4_translate__ = __webpack_require__(78);
  27182. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_gl_mat4_translate___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_20_gl_mat4_translate__);
  27183. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_gl_vec2_transformMat4__ = __webpack_require__(602);
  27184. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_gl_vec2_transformMat4___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_21_gl_vec2_transformMat4__);
  27185. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22_gl_vec3_transformMat4__ = __webpack_require__(615);
  27186. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22_gl_vec3_transformMat4___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_22_gl_vec3_transformMat4__);
  27187. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4__ = __webpack_require__(103);
  27188. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4__);
  27189. var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!(i&&_arr.length===i));_n=!0);}catch(err){_d=!0,_e=err}finally{try{!_n&&_i['return']&&_i['return']()}finally{if(_d)throw _e}}return _arr}return function(arr,i){if(Array.isArray(arr))return arr;if(Symbol.iterator in Object(arr))return sliceIterator(arr,i);throw new TypeError('Invalid attempt to destructure non-iterable instance')}}(),_createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)throw new TypeError('Super expression must either be null or a function, not '+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}var IDENTITY=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function validateMatrix4(m){var _NumberisFinite=Number.isFinite;return 16===m.length&&_NumberisFinite(m[0])&&_NumberisFinite(m[1])&&_NumberisFinite(m[2])&&_NumberisFinite(m[3])&&_NumberisFinite(m[4])&&_NumberisFinite(m[5])&&_NumberisFinite(m[6])&&_NumberisFinite(m[7])&&_NumberisFinite(m[8])&&_NumberisFinite(m[9])&&_NumberisFinite(m[10])&&_NumberisFinite(m[11])&&_NumberisFinite(m[12])&&_NumberisFinite(m[13])&&_NumberisFinite(m[14])&&_NumberisFinite(m[15])}var tempVector4=[0,0,0,0],Matrix4=function(_MathArray){function Matrix4(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];_classCallCheck(this,Matrix4);var _this=_possibleConstructorReturn(this,(Matrix4.__proto__||Object.getPrototypeOf(Matrix4)).call(this));return Array.isArray(args[0])&&1===arguments.length?_this.copy(args[0]):_this.identity(),_this}return _inherits(Matrix4,_MathArray),_createClass(Matrix4,[{key:'setRowMajor',value:function setRowMajor(){var m00=0<arguments.length&&void 0!==arguments[0]?arguments[0]:1,m10=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,m20=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,m30=3<arguments.length&&void 0!==arguments[3]?arguments[3]:0,m01=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,m11=5<arguments.length&&void 0!==arguments[5]?arguments[5]:1,m21=6<arguments.length&&void 0!==arguments[6]?arguments[6]:0,m31=7<arguments.length&&void 0!==arguments[7]?arguments[7]:0,m02=8<arguments.length&&void 0!==arguments[8]?arguments[8]:0,m12=9<arguments.length&&void 0!==arguments[9]?arguments[9]:0,m22=10<arguments.length&&void 0!==arguments[10]?arguments[10]:1,m32=11<arguments.length&&void 0!==arguments[11]?arguments[11]:0,m03=12<arguments.length&&void 0!==arguments[12]?arguments[12]:0,m13=13<arguments.length&&void 0!==arguments[13]?arguments[13]:0,m23=14<arguments.length&&void 0!==arguments[14]?arguments[14]:0,m33=15<arguments.length&&void 0!==arguments[15]?arguments[15]:1;return this.set(m00,m01,m02,m03,m10,m11,m12,m13,m20,m21,m22,m23,m30,m31,m32,m33)}},{key:'setColumnMajor',value:function setColumnMajor(){var m00=0<arguments.length&&void 0!==arguments[0]?arguments[0]:1,m01=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,m02=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,m03=3<arguments.length&&void 0!==arguments[3]?arguments[3]:0,m10=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,m11=5<arguments.length&&void 0!==arguments[5]?arguments[5]:1,m12=6<arguments.length&&void 0!==arguments[6]?arguments[6]:0,m13=7<arguments.length&&void 0!==arguments[7]?arguments[7]:0,m20=8<arguments.length&&void 0!==arguments[8]?arguments[8]:0,m21=9<arguments.length&&void 0!==arguments[9]?arguments[9]:0,m22=10<arguments.length&&void 0!==arguments[10]?arguments[10]:1,m23=11<arguments.length&&void 0!==arguments[11]?arguments[11]:0,m30=12<arguments.length&&void 0!==arguments[12]?arguments[12]:0,m31=13<arguments.length&&void 0!==arguments[13]?arguments[13]:0,m32=14<arguments.length&&void 0!==arguments[14]?arguments[14]:0,m33=15<arguments.length&&void 0!==arguments[15]?arguments[15]:1;return this.set(m00,m01,m02,m03,m10,m11,m12,m13,m20,m21,m22,m23,m30,m31,m32,m33)}},{key:'set',value:function set(m00,m01,m02,m03,m10,m11,m12,m13,m20,m21,m22,m23,m30,m31,m32,m33){return this[0]=m00,this[1]=m01,this[2]=m02,this[3]=m03,this[4]=m10,this[5]=m11,this[6]=m12,this[7]=m13,this[8]=m20,this[9]=m21,this[10]=m22,this[11]=m23,this[12]=m30,this[13]=m31,this[14]=m32,this[15]=m33,this.check(),this}},{key:'determinant',value:function determinant(){return __WEBPACK_IMPORTED_MODULE_6_gl_mat4_determinant___default()(this)}},{key:'identity',value:function identity(){for(var i=0;i<IDENTITY.length;++i)this[i]=IDENTITY[i];return this.check(),this}},{key:'fromQuaternion',value:function fromQuaternion(q){return __WEBPACK_IMPORTED_MODULE_7_gl_mat4_fromQuat___default()(this,q),this.check(),this}},{key:'frustum',value:function frustum(_ref){var left=_ref.left,right=_ref.right,bottom=_ref.bottom,top=_ref.top,near=_ref.near,far=_ref.far;return __WEBPACK_IMPORTED_MODULE_8_gl_mat4_frustum___default()(this,left,right,bottom,top,near,far),this.check(),this}},{key:'lookAt',value:function lookAt(){var _ref2=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},eye=_ref2.eye,_ref2$center=_ref2.center,center=void 0===_ref2$center?[0,0,0]:_ref2$center,_ref2$up=_ref2.up,up=void 0===_ref2$up?[0,1,0]:_ref2$up;return __WEBPACK_IMPORTED_MODULE_9_gl_mat4_lookAt___default()(this,eye,center,up),this.check(),this}},{key:'ortho',value:function ortho(_ref3){var left=_ref3.left,right=_ref3.right,bottom=_ref3.bottom,top=_ref3.top,_ref3$near=_ref3.near,near=void 0===_ref3$near?.1:_ref3$near,_ref3$far=_ref3.far,far=void 0===_ref3$far?500:_ref3$far;return __WEBPACK_IMPORTED_MODULE_10_gl_mat4_ortho___default()(this,left,right,bottom,top,near,far),this.check(),this}},{key:'perspective',value:function perspective(){var _MathPI=Math.PI,_ref4=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},_ref4$fov=_ref4.fov,fov=void 0===_ref4$fov?45*_MathPI/180:_ref4$fov,_ref4$aspect=_ref4.aspect,aspect=void 0===_ref4$aspect?1:_ref4$aspect,_ref4$near=_ref4.near,near=void 0===_ref4$near?.1:_ref4$near,_ref4$far=_ref4.far,far=void 0===_ref4$far?500:_ref4$far;if(fov>2*_MathPI)throw Error('radians');return __WEBPACK_IMPORTED_MODULE_11_gl_mat4_perspective___default()(this,fov,aspect,near,far),this.check(),this}},{key:'transpose',value:function transpose(){return __WEBPACK_IMPORTED_MODULE_12_gl_mat4_transpose___default()(this,this),this.check(),this}},{key:'invert',value:function invert(){return __WEBPACK_IMPORTED_MODULE_13_gl_mat4_invert___default()(this,this),this.check(),this}},{key:'multiplyLeft',value:function multiplyLeft(a){return __WEBPACK_IMPORTED_MODULE_14_gl_mat4_multiply___default()(this,a,this),this.check(),this}},{key:'multiplyRight',value:function multiplyRight(a){return __WEBPACK_IMPORTED_MODULE_14_gl_mat4_multiply___default()(this,this,a),this.check(),this}},{key:'rotateX',value:function rotateX(radians){return __WEBPACK_IMPORTED_MODULE_15_gl_mat4_rotateX___default()(this,this,radians),this.check(),this}},{key:'rotateY',value:function rotateY(radians){return __WEBPACK_IMPORTED_MODULE_16_gl_mat4_rotateY___default()(this,this,radians),this.check(),this}},{key:'rotateZ',value:function rotateZ(radians){return __WEBPACK_IMPORTED_MODULE_17_gl_mat4_rotateZ___default()(this,this,radians),this.check(),this}},{key:'rotateXYZ',value:function rotateXYZ(_ref5){var _ref6=_slicedToArray(_ref5,3),rx=_ref6[0],ry=_ref6[1],rz=_ref6[2];return this.rotateX(rx).rotateY(ry).rotateZ(rz)}},{key:'rotateAxis',value:function rotateAxis(radians,axis){return __WEBPACK_IMPORTED_MODULE_18_gl_mat4_rotate___default()(this,this,radians,axis),this.check(),this}},{key:'scale',value:function scale(vec){return __WEBPACK_IMPORTED_MODULE_19_gl_mat4_scale___default()(this,this,vec),this.check(),this}},{key:'translate',value:function translate(vec){return __WEBPACK_IMPORTED_MODULE_20_gl_mat4_translate___default()(this,this,vec),this.check(),this}},{key:'transformVector2',value:function transformVector2(vector,out){return out=out||new __WEBPACK_IMPORTED_MODULE_2__vector2__["a" /* default */],__WEBPACK_IMPORTED_MODULE_21_gl_vec2_transformMat4___default()(out,vector,this),__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__lib_assert__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__vector2__["b" /* validateVector2 */])(out)),out}},{key:'transformVector3',value:function transformVector3(vector){var out=1<arguments.length&&void 0!==arguments[1]?arguments[1]:new __WEBPACK_IMPORTED_MODULE_3__vector3__["a" /* default */];return out=out||new __WEBPACK_IMPORTED_MODULE_3__vector3__["a" /* default */],__WEBPACK_IMPORTED_MODULE_22_gl_vec3_transformMat4___default()(out,vector,this),__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__lib_assert__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__vector3__["b" /* validateVector3 */])(out)),out}},{key:'transformVector4',value:function transformVector4(vector){var out=1<arguments.length&&void 0!==arguments[1]?arguments[1]:new __WEBPACK_IMPORTED_MODULE_4__vector4__["a" /* default */];return out=out||new __WEBPACK_IMPORTED_MODULE_4__vector4__["a" /* default */],__WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4___default()(out,vector,this),__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__lib_assert__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__vector4__["b" /* validateVector4 */])(out)),out}},{key:'transformVector',value:function transformVector(vector,out){switch(vector.length){case 2:return this.transformVector2(vector,out);case 3:return this.transformVector3(vector,out);case 4:return this.transformVector4(vector,out);default:throw new Error('Illegal vector');}}},{key:'transformDirection',value:function transformDirection(vector,out){switch(vector.length){case 2:__WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4___default()(tempVector4,[vector[0],vector[1],0,0],this),out=out||new __WEBPACK_IMPORTED_MODULE_2__vector2__["a" /* default */],out[0]=tempVector4[0],out[1]=tempVector4[1];break;case 3:__WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4___default()(tempVector4,[vector[0],vector[1],vector[2],0],this),out=out||new __WEBPACK_IMPORTED_MODULE_3__vector3__["a" /* default */],out[0]=tempVector4[0],out[1]=tempVector4[1],out[2]=tempVector4[2];break;case 4:__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__lib_assert__["a" /* default */])(0===vector[3]),out=out||new __WEBPACK_IMPORTED_MODULE_4__vector4__["a" /* default */],__WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4___default()(out,vector,this);break;default:throw new Error('Illegal vector');}return out}},{key:'transformPoint',value:function transformPoint(vector,out){switch(vector.length){case 2:out=out||new __WEBPACK_IMPORTED_MODULE_2__vector2__["a" /* default */],__WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4___default()(out,[vector[0],vector[1],0,1],this),out.length=2,__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__lib_assert__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__vector2__["b" /* validateVector2 */])(out));break;case 3:out=out||new __WEBPACK_IMPORTED_MODULE_3__vector3__["a" /* default */],__WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4___default()(out,[vector[0],vector[1],vector[2],1],this),out.length=3,__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__lib_assert__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__vector3__["b" /* validateVector3 */])(out));break;case 4:__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__lib_assert__["a" /* default */])(0!==vector[3]),out=out||new __WEBPACK_IMPORTED_MODULE_4__vector4__["a" /* default */],__WEBPACK_IMPORTED_MODULE_23_gl_vec4_transformMat4___default()(out,vector,this),__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__lib_assert__["a" /* default */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__vector4__["b" /* validateVector4 */])(out));break;default:throw new Error('Illegal vector');}return out}},{key:'ELEMENTS',get:function get(){return 16}},{key:'m00',get:function get(){return this[0]},set:function set(value){return this[0]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m01',get:function get(){return this[4]},set:function set(value){return this[4]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m02',get:function get(){return this[8]},set:function set(value){return this[8]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m03',get:function get(){return this[12]},set:function set(value){return this[12]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m10',get:function get(){return this[1]},set:function set(value){return this[1]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m11',get:function get(){return this[5]},set:function set(value){return this[5]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m12',get:function get(){return this[9]},set:function set(value){return this[9]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m13',get:function get(){return this[13]},set:function set(value){return this[13]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m20',get:function get(){return this[2]},set:function set(value){return this[2]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m21',get:function get(){return this[6]},set:function set(value){return this[6]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m22',get:function get(){return this[10]},set:function set(value){return this[10]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m23',get:function get(){return this[14]},set:function set(value){return this[14]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m30',get:function get(){return this[3]},set:function set(value){return this[3]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m31',get:function get(){return this[7]},set:function set(value){return this[7]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m32',get:function get(){return this[11]},set:function set(value){return this[11]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'m33',get:function get(){return this[15]},set:function set(value){return this[15]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}}]),Matrix4}(__WEBPACK_IMPORTED_MODULE_0__math_array__["a" /* default */]);/* harmony default export */ __webpack_exports__["a"] = (Matrix4);
  27190. //# sourceMappingURL=matrix4.js.map
  27191. /***/ }),
  27192. /* 279 */
  27193. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  27194. "use strict";
  27195. /* unused harmony export validateQuaternion */
  27196. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math_array__ = __webpack_require__(112);
  27197. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common__ = __webpack_require__(31);
  27198. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_quat_fromMat3__ = __webpack_require__(579);
  27199. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_quat_fromMat3___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_gl_quat_fromMat3__);
  27200. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_quat_identity__ = __webpack_require__(580);
  27201. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_quat_identity___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_gl_quat_identity__);
  27202. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_quat_length__ = __webpack_require__(582);
  27203. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_quat_length___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_gl_quat_length__);
  27204. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_quat_squaredLength__ = __webpack_require__(592);
  27205. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_quat_squaredLength___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_gl_quat_squaredLength__);
  27206. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_quat_dot__ = __webpack_require__(578);
  27207. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_quat_dot___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_gl_quat_dot__);
  27208. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_quat_rotationTo__ = __webpack_require__(588);
  27209. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_quat_rotationTo___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_gl_quat_rotationTo__);
  27210. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_quat_add__ = __webpack_require__(575);
  27211. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_quat_add___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_gl_quat_add__);
  27212. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_quat_calculateW__ = __webpack_require__(576);
  27213. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_quat_calculateW___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_gl_quat_calculateW__);
  27214. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_quat_conjugate__ = __webpack_require__(577);
  27215. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_quat_conjugate___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_gl_quat_conjugate__);
  27216. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_quat_invert__ = __webpack_require__(581);
  27217. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_quat_invert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_gl_quat_invert__);
  27218. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_quat_lerp__ = __webpack_require__(583);
  27219. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_quat_lerp___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_gl_quat_lerp__);
  27220. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_quat_multiply__ = __webpack_require__(584);
  27221. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_quat_multiply___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_gl_quat_multiply__);
  27222. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_gl_quat_normalize__ = __webpack_require__(236);
  27223. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_gl_quat_normalize___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_14_gl_quat_normalize__);
  27224. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_gl_quat_rotateX__ = __webpack_require__(585);
  27225. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_gl_quat_rotateX___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15_gl_quat_rotateX__);
  27226. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_gl_quat_rotateY__ = __webpack_require__(586);
  27227. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_gl_quat_rotateY___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_16_gl_quat_rotateY__);
  27228. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_gl_quat_rotateZ__ = __webpack_require__(587);
  27229. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_gl_quat_rotateZ___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_17_gl_quat_rotateZ__);
  27230. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_gl_quat_scale__ = __webpack_require__(589);
  27231. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_gl_quat_scale___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_18_gl_quat_scale__);
  27232. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_gl_quat_set__ = __webpack_require__(590);
  27233. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_gl_quat_set___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_19_gl_quat_set__);
  27234. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_gl_quat_setAxisAngle__ = __webpack_require__(237);
  27235. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_gl_quat_setAxisAngle___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_20_gl_quat_setAxisAngle__);
  27236. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_gl_quat_slerp__ = __webpack_require__(591);
  27237. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_gl_quat_slerp___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_21_gl_quat_slerp__);
  27238. var _createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)throw new TypeError('Super expression must either be null or a function, not '+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}var IDENTITY_QUATERNION=[0,0,0,1];function validateQuaternion(q){var _NumberisFinite=Number.isFinite;return 4===q.length&&_NumberisFinite(q[0])&&_NumberisFinite(q[1])&&_NumberisFinite(q[2])&&_NumberisFinite(q[3])}var Quaternion=function(_MathArray){function Quaternion(){var x=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,y=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,z=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,w=3<arguments.length&&void 0!==arguments[3]?arguments[3]:1;_classCallCheck(this,Quaternion);var _this=_possibleConstructorReturn(this,(Quaternion.__proto__||Object.getPrototypeOf(Quaternion)).call(this));return Array.isArray(x)&&1===arguments.length?_this.copy(x):_this.set(x,y,z,w),_this}return _inherits(Quaternion,_MathArray),_createClass(Quaternion,[{key:'fromMatrix3',value:function fromMatrix3(m){return __WEBPACK_IMPORTED_MODULE_2_gl_quat_fromMat3___default()(this,m),this.check(),this}},{key:'fromValues',value:function fromValues(x,y,z,w){return this.set(x,y,z,w)}},{key:'identity',value:function identity(){return __WEBPACK_IMPORTED_MODULE_3_gl_quat_identity___default()(this),this.check(),this}},{key:'length',value:function length(){return __WEBPACK_IMPORTED_MODULE_4_gl_quat_length___default()(this)}},{key:'squaredLength',value:function squaredLength(){return __WEBPACK_IMPORTED_MODULE_5_gl_quat_squaredLength___default()(this)}},{key:'dot',value:function dot(a,b){if(void 0!==b)throw new Error('Quaternion.dot only takes one argument');return __WEBPACK_IMPORTED_MODULE_6_gl_quat_dot___default()(this,a)}},{key:'rotationTo',value:function rotationTo(vectorA,vectorB){return __WEBPACK_IMPORTED_MODULE_7_gl_quat_rotationTo___default()(this,vectorA,vectorB),this.check(),this}},{key:'add',value:function add(a,b){if(void 0!==b)throw new Error('Quaternion.add only takes one argument');return __WEBPACK_IMPORTED_MODULE_8_gl_quat_add___default()(this,a),this.check(),this}},{key:'calculateW',value:function calculateW(){return __WEBPACK_IMPORTED_MODULE_9_gl_quat_calculateW___default()(this,this),this.check(),this}},{key:'conjugate',value:function conjugate(){return __WEBPACK_IMPORTED_MODULE_10_gl_quat_conjugate___default()(this,this),this.check(),this}},{key:'invert',value:function invert(){return __WEBPACK_IMPORTED_MODULE_11_gl_quat_invert___default()(this,this),this.check(),this}},{key:'lerp',value:function lerp(a,b,t){return __WEBPACK_IMPORTED_MODULE_12_gl_quat_lerp___default()(this,a,b,t),this.check(),this}},{key:'multiply',value:function multiply(a,b){if(void 0!==b)throw new Error('Quaternion.multiply only takes one argument');return __WEBPACK_IMPORTED_MODULE_13_gl_quat_multiply___default()(this,this,b),this.check(),this}},{key:'normalize',value:function normalize(){return __WEBPACK_IMPORTED_MODULE_14_gl_quat_normalize___default()(this,this),this.check(),this}},{key:'rotateX',value:function rotateX(rad){return __WEBPACK_IMPORTED_MODULE_15_gl_quat_rotateX___default()(this,this,rad),this.check(),this}},{key:'rotateY',value:function rotateY(rad){return __WEBPACK_IMPORTED_MODULE_16_gl_quat_rotateY___default()(this,this,rad),this.check(),this}},{key:'rotateZ',value:function rotateZ(rad){return __WEBPACK_IMPORTED_MODULE_17_gl_quat_rotateZ___default()(this,this,rad),this.check(),this}},{key:'scale',value:function scale(b){return __WEBPACK_IMPORTED_MODULE_18_gl_quat_scale___default()(this,this,b),this.check(),this}},{key:'set',value:function set(i,j,k,l){return __WEBPACK_IMPORTED_MODULE_19_gl_quat_set___default()(this,i,j,k,l),this.check(),this}},{key:'setAxisAngle',value:function setAxisAngle(axis,rad){return __WEBPACK_IMPORTED_MODULE_20_gl_quat_setAxisAngle___default()(this,axis,rad),this.check(),this}},{key:'slerp',value:function slerp(_ref){var _ref$start=_ref.start,start=void 0===_ref$start?IDENTITY_QUATERNION:_ref$start,target=_ref.target,ratio=_ref.ratio;return __WEBPACK_IMPORTED_MODULE_21_gl_quat_slerp___default()(this,start,target,ratio),this.check(),this}},{key:'ELEMENTS',get:function get(){return 4}},{key:'x',get:function get(){return this[0]},set:function set(value){return this[0]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'y',get:function get(){return this[1]},set:function set(value){return this[1]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'z',get:function get(){return this[2]},set:function set(value){return this[2]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'w',get:function get(){return this[3]},set:function set(value){return this[3]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}}]),Quaternion}(__WEBPACK_IMPORTED_MODULE_0__math_array__["a" /* default */]);/* harmony default export */ __webpack_exports__["a"] = (Quaternion);
  27239. //# sourceMappingURL=quaternion.js.map
  27240. /***/ }),
  27241. /* 280 */
  27242. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  27243. "use strict";
  27244. /* harmony export (immutable) */ __webpack_exports__["b"] = validateVector2;
  27245. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vector__ = __webpack_require__(170);
  27246. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common__ = __webpack_require__(31);
  27247. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_vec2_set__ = __webpack_require__(600);
  27248. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_vec2_set___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_gl_vec2_set__);
  27249. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_vec2_add__ = __webpack_require__(159);
  27250. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_vec2_add___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_gl_vec2_add__);
  27251. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_vec2_subtract__ = __webpack_require__(601);
  27252. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_vec2_subtract___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_gl_vec2_subtract__);
  27253. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_vec2_multiply__ = __webpack_require__(596);
  27254. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_vec2_multiply___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_gl_vec2_multiply__);
  27255. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_vec2_divide__ = __webpack_require__(594);
  27256. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_vec2_divide___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_gl_vec2_divide__);
  27257. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_vec2_scale__ = __webpack_require__(598);
  27258. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_vec2_scale___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_gl_vec2_scale__);
  27259. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_vec2_scaleAndAdd__ = __webpack_require__(599);
  27260. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_vec2_scaleAndAdd___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_gl_vec2_scaleAndAdd__);
  27261. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_vec2_negate__ = __webpack_require__(160);
  27262. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_vec2_negate___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_gl_vec2_negate__);
  27263. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_vec2_normalize__ = __webpack_require__(597);
  27264. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_vec2_normalize___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_gl_vec2_normalize__);
  27265. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_vec2_dot__ = __webpack_require__(595);
  27266. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_vec2_dot___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_gl_vec2_dot__);
  27267. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_vec2_cross__ = __webpack_require__(593);
  27268. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_vec2_cross___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_gl_vec2_cross__);
  27269. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_vec2_lerp__ = __webpack_require__(238);
  27270. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_vec2_lerp___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_gl_vec2_lerp__);
  27271. var _createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)throw new TypeError('Super expression must either be null or a function, not '+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}function validateVector2(v){var _NumberisFinite=Number.isFinite;return 2===v.length&&_NumberisFinite(v[0])&&_NumberisFinite(v[1])}var Vector2=function(_Vector){function Vector2(){var x=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,y=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;_classCallCheck(this,Vector2);var _this=_possibleConstructorReturn(this,(Vector2.__proto__||Object.getPrototypeOf(Vector2)).call(this));return Array.isArray(x)&&1===arguments.length?_this.copy(x):_this.set(x,y),_this}var _Mathatan=Math.atan2;return _inherits(Vector2,_Vector),_createClass(Vector2,[{key:'set',value:function set(x,y){return __WEBPACK_IMPORTED_MODULE_2_gl_vec2_set___default()(this,x,y),this.check(),this}},{key:'add',value:function add(){for(var _len=arguments.length,vectors=Array(_len),_key=0;_key<_len;_key++)vectors[_key]=arguments[_key];var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,vector,_iterator=vectors[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0)vector=_step.value,__WEBPACK_IMPORTED_MODULE_3_gl_vec2_add___default()(this,this,vector)}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{!_iteratorNormalCompletion&&_iterator.return&&_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return this}},{key:'subtract',value:function subtract(){for(var _len2=arguments.length,vectors=Array(_len2),_key2=0;_key2<_len2;_key2++)vectors[_key2]=arguments[_key2];var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,vector,_iterator2=vectors[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0)vector=_step2.value,__WEBPACK_IMPORTED_MODULE_4_gl_vec2_subtract___default()(this,this,vector)}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{!_iteratorNormalCompletion2&&_iterator2.return&&_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}return this.check(),this}},{key:'multiply',value:function multiply(){for(var _len3=arguments.length,vectors=Array(_len3),_key3=0;_key3<_len3;_key3++)vectors[_key3]=arguments[_key3];var _iteratorNormalCompletion3=!0,_didIteratorError3=!1,_iteratorError3=void 0;try{for(var _step3,vector,_iterator3=vectors[Symbol.iterator]();!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=!0)vector=_step3.value,__WEBPACK_IMPORTED_MODULE_5_gl_vec2_multiply___default()(this,this,vector)}catch(err){_didIteratorError3=!0,_iteratorError3=err}finally{try{!_iteratorNormalCompletion3&&_iterator3.return&&_iterator3.return()}finally{if(_didIteratorError3)throw _iteratorError3}}return this.check(),this}},{key:'divide',value:function divide(){for(var _len4=arguments.length,vectors=Array(_len4),_key4=0;_key4<_len4;_key4++)vectors[_key4]=arguments[_key4];var _iteratorNormalCompletion4=!0,_didIteratorError4=!1,_iteratorError4=void 0;try{for(var _step4,vector,_iterator4=vectors[Symbol.iterator]();!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=!0)vector=_step4.value,__WEBPACK_IMPORTED_MODULE_6_gl_vec2_divide___default()(this,this,vector)}catch(err){_didIteratorError4=!0,_iteratorError4=err}finally{try{!_iteratorNormalCompletion4&&_iterator4.return&&_iterator4.return()}finally{if(_didIteratorError4)throw _iteratorError4}}return this.check(),this}},{key:'scale',value:function scale(_scale){return Number.isFinite(_scale)&&__WEBPACK_IMPORTED_MODULE_7_gl_vec2_scale___default()(this,this,_scale),this.check(),this}},{key:'scaleAndAdd',value:function scaleAndAdd(vector,scale){return __WEBPACK_IMPORTED_MODULE_8_gl_vec2_scaleAndAdd___default()(this,this,vector,scale),this.check(),this}},{key:'negate',value:function negate(){return __WEBPACK_IMPORTED_MODULE_9_gl_vec2_negate___default()(this,this),this.check(),this}},{key:'normalize',value:function normalize(){return __WEBPACK_IMPORTED_MODULE_10_gl_vec2_normalize___default()(this,this),this.check(),this}},{key:'dot',value:function dot(vector){return __WEBPACK_IMPORTED_MODULE_11_gl_vec2_dot___default()(this,vector)}},{key:'cross',value:function cross(vector){return __WEBPACK_IMPORTED_MODULE_12_gl_vec2_cross___default()(this,this,vector),this.check(),this}},{key:'lerp',value:function lerp(vector,coeff){return __WEBPACK_IMPORTED_MODULE_13_gl_vec2_lerp___default()(this,this,vector,coeff),this.check(),this}},{key:'horizontalAngle',value:function horizontalAngle(){return _Mathatan(this.y,this.x)}},{key:'verticalAngle',value:function verticalAngle(){return _Mathatan(this.x,this.y)}},{key:'operation',value:function operation(_operation){for(var _len5=arguments.length,args=Array(1<_len5?_len5-1:0),_key5=1;_key5<_len5;_key5++)args[_key5-1]=arguments[_key5];return _operation.apply(void 0,[this,this].concat(args)),this.check(),this}},{key:'ELEMENTS',get:function get(){return 2}},{key:'x',get:function get(){return this[0]},set:function set(value){return this[0]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'y',get:function get(){return this[1]},set:function set(value){return this[1]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}}]),Vector2}(__WEBPACK_IMPORTED_MODULE_0__vector__["a" /* default */]);/* harmony default export */ __webpack_exports__["a"] = (Vector2);
  27272. //# sourceMappingURL=vector2.js.map
  27273. /***/ }),
  27274. /* 281 */
  27275. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  27276. "use strict";
  27277. /* harmony export (immutable) */ __webpack_exports__["b"] = validateVector4;
  27278. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vector__ = __webpack_require__(170);
  27279. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common__ = __webpack_require__(31);
  27280. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_vec4_set__ = __webpack_require__(248);
  27281. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_vec4_set___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_gl_vec4_set__);
  27282. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_vec4_distance__ = __webpack_require__(616);
  27283. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_vec4_distance___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_gl_vec4_distance__);
  27284. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_vec4_add__ = __webpack_require__(243);
  27285. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_vec4_add___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_gl_vec4_add__);
  27286. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_vec4_subtract__ = __webpack_require__(623);
  27287. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_vec4_subtract___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_gl_vec4_subtract__);
  27288. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_vec4_multiply__ = __webpack_require__(246);
  27289. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_vec4_multiply___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_gl_vec4_multiply__);
  27290. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_vec4_divide__ = __webpack_require__(617);
  27291. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_gl_vec4_divide___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_gl_vec4_divide__);
  27292. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_vec4_scale__ = __webpack_require__(161);
  27293. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_gl_vec4_scale___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_gl_vec4_scale__);
  27294. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_vec4_scaleAndAdd__ = __webpack_require__(621);
  27295. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_gl_vec4_scaleAndAdd___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_gl_vec4_scaleAndAdd__);
  27296. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_vec4_negate__ = __webpack_require__(620);
  27297. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_gl_vec4_negate___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_gl_vec4_negate__);
  27298. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_vec4_inverse__ = __webpack_require__(618);
  27299. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_gl_vec4_inverse___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_gl_vec4_inverse__);
  27300. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_vec4_normalize__ = __webpack_require__(247);
  27301. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_gl_vec4_normalize___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_gl_vec4_normalize__);
  27302. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_vec4_dot__ = __webpack_require__(244);
  27303. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_gl_vec4_dot___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_gl_vec4_dot__);
  27304. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_gl_vec4_lerp__ = __webpack_require__(245);
  27305. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_gl_vec4_lerp___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_14_gl_vec4_lerp__);
  27306. var _createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)throw new TypeError('Super expression must either be null or a function, not '+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}function validateVector4(v){var _NumberisFinite=Number.isFinite;return 4===v.length&&_NumberisFinite(v[0])&&_NumberisFinite(v[1])&&_NumberisFinite(v[2])&&_NumberisFinite(v[3])}var Vector4=function(_Vector){function Vector4(){var x=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,y=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,z=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,w=3<arguments.length&&void 0!==arguments[3]?arguments[3]:0;_classCallCheck(this,Vector4);var _this=_possibleConstructorReturn(this,(Vector4.__proto__||Object.getPrototypeOf(Vector4)).call(this));return Array.isArray(x)&&1===arguments.length?_this.copy(x):_this.set(x,y,z,w),_this}return _inherits(Vector4,_Vector),_createClass(Vector4,[{key:'set',value:function set(x,y,z,w){return __WEBPACK_IMPORTED_MODULE_2_gl_vec4_set___default()(this,x,y,z,w),this.check(),this}},{key:'distance',value:function distance(vector){return __WEBPACK_IMPORTED_MODULE_3_gl_vec4_distance___default()(vector)}},{key:'add',value:function add(){for(var _len=arguments.length,vectors=Array(_len),_key=0;_key<_len;_key++)vectors[_key]=arguments[_key];var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,vector,_iterator=vectors[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0)vector=_step.value,__WEBPACK_IMPORTED_MODULE_4_gl_vec4_add___default()(this,this,vector)}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{!_iteratorNormalCompletion&&_iterator.return&&_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return this.check(),this}},{key:'subtract',value:function subtract(){for(var _len2=arguments.length,vectors=Array(_len2),_key2=0;_key2<_len2;_key2++)vectors[_key2]=arguments[_key2];var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,vector,_iterator2=vectors[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0)vector=_step2.value,__WEBPACK_IMPORTED_MODULE_5_gl_vec4_subtract___default()(this,this,vector)}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{!_iteratorNormalCompletion2&&_iterator2.return&&_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}return this.check(),this}},{key:'multiply',value:function multiply(){for(var _len3=arguments.length,vectors=Array(_len3),_key3=0;_key3<_len3;_key3++)vectors[_key3]=arguments[_key3];var _iteratorNormalCompletion3=!0,_didIteratorError3=!1,_iteratorError3=void 0;try{for(var _step3,vector,_iterator3=vectors[Symbol.iterator]();!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=!0)vector=_step3.value,__WEBPACK_IMPORTED_MODULE_6_gl_vec4_multiply___default()(this,this,vector)}catch(err){_didIteratorError3=!0,_iteratorError3=err}finally{try{!_iteratorNormalCompletion3&&_iterator3.return&&_iterator3.return()}finally{if(_didIteratorError3)throw _iteratorError3}}return this.check(),this}},{key:'divide',value:function divide(){for(var _len4=arguments.length,vectors=Array(_len4),_key4=0;_key4<_len4;_key4++)vectors[_key4]=arguments[_key4];var _iteratorNormalCompletion4=!0,_didIteratorError4=!1,_iteratorError4=void 0;try{for(var _step4,vector,_iterator4=vectors[Symbol.iterator]();!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=!0)vector=_step4.value,__WEBPACK_IMPORTED_MODULE_7_gl_vec4_divide___default()(this,this,vector)}catch(err){_didIteratorError4=!0,_iteratorError4=err}finally{try{!_iteratorNormalCompletion4&&_iterator4.return&&_iterator4.return()}finally{if(_didIteratorError4)throw _iteratorError4}}return this.check(),this}},{key:'scale',value:function scale(_scale){return __WEBPACK_IMPORTED_MODULE_8_gl_vec4_scale___default()(this,this,_scale),this.check(),this}},{key:'scaleAndAdd',value:function scaleAndAdd(vector,scale){return __WEBPACK_IMPORTED_MODULE_9_gl_vec4_scaleAndAdd___default()(this,this,vector,scale),this.check(),this}},{key:'negate',value:function negate(){return __WEBPACK_IMPORTED_MODULE_10_gl_vec4_negate___default()(this,this),this.check(),this}},{key:'inverse',value:function inverse(){return __WEBPACK_IMPORTED_MODULE_11_gl_vec4_inverse___default()(this,this),this.check(),this}},{key:'normalize',value:function normalize(){return __WEBPACK_IMPORTED_MODULE_12_gl_vec4_normalize___default()(this,this),this.check(),this}},{key:'dot',value:function dot(vector){return __WEBPACK_IMPORTED_MODULE_13_gl_vec4_dot___default()(this,vector)}},{key:'lerp',value:function lerp(vector,coeff){return __WEBPACK_IMPORTED_MODULE_14_gl_vec4_lerp___default()(this,this,vector,coeff),this.check(),this}},{key:'ELEMENTS',get:function get(){return 4}},{key:'x',get:function get(){return this[0]},set:function set(value){return this[0]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'y',get:function get(){return this[1]},set:function set(value){return this[1]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'z',get:function get(){return this[2]},set:function set(value){return this[2]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'w',get:function get(){return this[3]},set:function set(value){return this[3]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}}]),Vector4}(__WEBPACK_IMPORTED_MODULE_0__vector__["a" /* default */]);/* harmony default export */ __webpack_exports__["a"] = (Vector4);
  27307. //# sourceMappingURL=vector4.js.map
  27308. /***/ }),
  27309. /* 282 */
  27310. /***/ (function(module, exports, __webpack_require__) {
  27311. /* WEBPACK VAR INJECTION */(function(process, global) {var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  27312. // Copyright (c) 2017 Uber Technologies, Inc.
  27313. //
  27314. // Permission is hereby granted, free of charge, to any person obtaining a copy
  27315. // of this software and associated documentation files (the "Software"), to deal
  27316. // in the Software without restriction, including without limitation the rights
  27317. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  27318. // copies of the Software, and to permit persons to whom the Software is
  27319. // furnished to do so, subject to the following conditions:
  27320. //
  27321. // The above copyright notice and this permission notice shall be included in
  27322. // all copies or substantial portions of the Software.
  27323. //
  27324. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  27325. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  27326. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27327. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27328. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  27329. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  27330. // THE SOFTWARE.
  27331. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  27332. //
  27333. // Permission is hereby granted, free of charge, to any person obtaining a copy
  27334. // of this software and associated documentation files (the "Software"), to deal
  27335. // in the Software without restriction, including without limitation the rights
  27336. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  27337. // copies of the Software, and to permit persons to whom the Software is
  27338. // furnished to do so, subject to the following conditions:
  27339. //
  27340. // The above copyright notice and this permission notice shall be included in
  27341. // all copies or substantial portions of the Software.
  27342. //
  27343. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  27344. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  27345. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27346. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27347. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  27348. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  27349. // THE SOFTWARE.
  27350. // Purpose: include this in your module to avoids adding dependencies on
  27351. // micro modules like 'global' and 'is-browser';
  27352. /* global process, window, global, document, navigator */
  27353. var isBrowser = (typeof process === 'undefined' ? 'undefined' : _typeof(process)) !== 'object' || String(process) !== '[object process]' || process.browser;
  27354. var userAgent = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase() : '';
  27355. module.exports = {
  27356. window: typeof window !== 'undefined' ? window : global,
  27357. global: typeof global !== 'undefined' ? global : window,
  27358. document: typeof document !== 'undefined' ? document : {},
  27359. isBrowser: isBrowser,
  27360. userAgent: userAgent
  27361. };
  27362. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9nbG9iYWxzLmpzIl0sIm5hbWVzIjpbImlzQnJvd3NlciIsInByb2Nlc3MiLCJTdHJpbmciLCJicm93c2VyIiwidXNlckFnZW50IiwibmF2aWdhdG9yIiwidG9Mb3dlckNhc2UiLCJtb2R1bGUiLCJleHBvcnRzIiwid2luZG93IiwiZ2xvYmFsIiwiZG9jdW1lbnQiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLElBQU1BLFlBQ0osUUFBT0MsT0FBUCx5Q0FBT0EsT0FBUCxPQUFtQixRQUFuQixJQUNBQyxPQUFPRCxPQUFQLE1BQW9CLGtCQURwQixJQUVBQSxRQUFRRSxPQUhWOztBQUtBLElBQU1DLFlBQVksT0FBT0MsU0FBUCxLQUFxQixXQUFyQixHQUNoQkEsVUFBVUQsU0FBVixDQUFvQkUsV0FBcEIsRUFEZ0IsR0FDb0IsRUFEdEM7O0FBR0FDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsVUFBUSxPQUFPQSxNQUFQLEtBQWtCLFdBQWxCLEdBQWdDQSxNQUFoQyxHQUF5Q0MsTUFEbEM7QUFFZkEsVUFBUSxPQUFPQSxNQUFQLEtBQWtCLFdBQWxCLEdBQWdDQSxNQUFoQyxHQUF5Q0QsTUFGbEM7QUFHZkUsWUFBVSxPQUFPQSxRQUFQLEtBQW9CLFdBQXBCLEdBQWtDQSxRQUFsQyxHQUE2QyxFQUh4QztBQUlmWCxzQkFKZTtBQUtmSTtBQUxlLENBQWpCIiwiZmlsZSI6Imdsb2JhbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTcgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE3IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLy8gUHVycG9zZTogaW5jbHVkZSB0aGlzIGluIHlvdXIgbW9kdWxlIHRvIGF2b2lkcyBhZGRpbmcgZGVwZW5kZW5jaWVzIG9uXG4vLyBtaWNybyBtb2R1bGVzIGxpa2UgJ2dsb2JhbCcgYW5kICdpcy1icm93c2VyJztcblxuLyogZ2xvYmFsIHByb2Nlc3MsIHdpbmRvdywgZ2xvYmFsLCBkb2N1bWVudCwgbmF2aWdhdG9yICovXG5jb25zdCBpc0Jyb3dzZXIgPVxuICB0eXBlb2YgcHJvY2VzcyAhPT0gJ29iamVjdCcgfHxcbiAgU3RyaW5nKHByb2Nlc3MpICE9PSAnW29iamVjdCBwcm9jZXNzXScgfHxcbiAgcHJvY2Vzcy5icm93c2VyO1xuXG5jb25zdCB1c2VyQWdlbnQgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/XG4gIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSA6ICcnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd2luZG93OiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbCxcbiAgZ2xvYmFsOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHdpbmRvdyxcbiAgZG9jdW1lbnQ6IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHt9LFxuICBpc0Jyb3dzZXIsXG4gIHVzZXJBZ2VudFxufTtcbiJdfQ==
  27363. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26), __webpack_require__(47)))
  27364. /***/ }),
  27365. /* 283 */
  27366. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  27367. "use strict";
  27368. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Manager; });
  27369. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__globals__ = __webpack_require__(282);
  27370. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__globals___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__globals__);
  27371. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__hammer_overrides__ = __webpack_require__(677);
  27372. // Copyright (c) 2017 Uber Technologies, Inc.
  27373. //
  27374. // Permission is hereby granted, free of charge, to any person obtaining a copy
  27375. // of this software and associated documentation files (the "Software"), to deal
  27376. // in the Software without restriction, including without limitation the rights
  27377. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  27378. // copies of the Software, and to permit persons to whom the Software is
  27379. // furnished to do so, subject to the following conditions:
  27380. //
  27381. // The above copyright notice and this permission notice shall be included in
  27382. // all copies or substantial portions of the Software.
  27383. //
  27384. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  27385. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  27386. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27387. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27388. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  27389. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  27390. // THE SOFTWARE.
  27391. var hammerjs = void 0;
  27392. if (__WEBPACK_IMPORTED_MODULE_0__globals__["isBrowser"]) {
  27393. hammerjs = __webpack_require__(624);
  27394. }
  27395. // Hammer.Manager mock for use in environments without `document` / `window`.
  27396. function HammerManagerMock(m) {
  27397. var instance = {};
  27398. var chainedNoop = function chainedNoop() {
  27399. return instance;
  27400. };
  27401. instance.get = function () {
  27402. return null;
  27403. };
  27404. instance.set = chainedNoop;
  27405. instance.on = chainedNoop;
  27406. instance.off = chainedNoop;
  27407. instance.destroy = chainedNoop;
  27408. instance.emit = chainedNoop;
  27409. return instance;
  27410. }
  27411. if (hammerjs) {
  27412. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__hammer_overrides__["a" /* enhancePointerEventInput */])(hammerjs.PointerEventInput);
  27413. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__hammer_overrides__["b" /* enhanceMouseInput */])(hammerjs.MouseInput);
  27414. }
  27415. var Manager = hammerjs ? hammerjs.Manager : HammerManagerMock;
  27416. /* harmony default export */ __webpack_exports__["b"] = (hammerjs);
  27417. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oYW1tZXIuanMiXSwibmFtZXMiOlsiaXNCcm93c2VyIiwiZW5oYW5jZVBvaW50ZXJFdmVudElucHV0IiwiZW5oYW5jZU1vdXNlSW5wdXQiLCJoYW1tZXJqcyIsInJlcXVpcmUiLCJIYW1tZXJNYW5hZ2VyTW9jayIsIm0iLCJpbnN0YW5jZSIsImNoYWluZWROb29wIiwiZ2V0Iiwic2V0Iiwib24iLCJvZmYiLCJkZXN0cm95IiwiZW1pdCIsIlBvaW50ZXJFdmVudElucHV0IiwiTW91c2VJbnB1dCIsIk1hbmFnZXIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVFBLFNBQVIsUUFBd0IsV0FBeEI7QUFDQSxTQUFRQyx3QkFBUixFQUFrQ0MsaUJBQWxDLFFBQTBELG9CQUExRDs7QUFFQSxJQUFJQyxpQkFBSjtBQUNBLElBQUlILFNBQUosRUFBZTtBQUNiRyxhQUFXQyxRQUFRLFVBQVIsQ0FBWDtBQUNEOztBQUVEO0FBQ0EsU0FBU0MsaUJBQVQsQ0FBMkJDLENBQTNCLEVBQThCO0FBQzVCLE1BQU1DLFdBQVcsRUFBakI7QUFDQSxNQUFNQyxjQUFjLFNBQWRBLFdBQWM7QUFBQSxXQUFNRCxRQUFOO0FBQUEsR0FBcEI7QUFDQUEsV0FBU0UsR0FBVCxHQUFlO0FBQUEsV0FBTSxJQUFOO0FBQUEsR0FBZjtBQUNBRixXQUFTRyxHQUFULEdBQWVGLFdBQWY7QUFDQUQsV0FBU0ksRUFBVCxHQUFjSCxXQUFkO0FBQ0FELFdBQVNLLEdBQVQsR0FBZUosV0FBZjtBQUNBRCxXQUFTTSxPQUFULEdBQW1CTCxXQUFuQjtBQUNBRCxXQUFTTyxJQUFULEdBQWdCTixXQUFoQjtBQUNBLFNBQU9ELFFBQVA7QUFDRDs7QUFFRCxJQUFJSixRQUFKLEVBQWM7QUFDWkYsMkJBQXlCRSxTQUFTWSxpQkFBbEM7QUFDQWIsb0JBQWtCQyxTQUFTYSxVQUEzQjtBQUNEOztBQUVELE9BQU8sSUFBTUMsVUFBVWQsV0FBV0EsU0FBU2MsT0FBcEIsR0FBOEJaLGlCQUE5Qzs7QUFFUCxlQUFlRixRQUFmIiwiZmlsZSI6ImhhbW1lci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxNyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7aXNCcm93c2VyfSBmcm9tICcuL2dsb2JhbHMnO1xuaW1wb3J0IHtlbmhhbmNlUG9pbnRlckV2ZW50SW5wdXQsIGVuaGFuY2VNb3VzZUlucHV0fSBmcm9tICcuL2hhbW1lci1vdmVycmlkZXMnO1xuXG5sZXQgaGFtbWVyanM7XG5pZiAoaXNCcm93c2VyKSB7XG4gIGhhbW1lcmpzID0gcmVxdWlyZSgnaGFtbWVyanMnKTtcbn1cblxuLy8gSGFtbWVyLk1hbmFnZXIgbW9jayBmb3IgdXNlIGluIGVudmlyb25tZW50cyB3aXRob3V0IGBkb2N1bWVudGAgLyBgd2luZG93YC5cbmZ1bmN0aW9uIEhhbW1lck1hbmFnZXJNb2NrKG0pIHtcbiAgY29uc3QgaW5zdGFuY2UgPSB7fTtcbiAgY29uc3QgY2hhaW5lZE5vb3AgPSAoKSA9PiBpbnN0YW5jZTtcbiAgaW5zdGFuY2UuZ2V0ID0gKCkgPT4gbnVsbDtcbiAgaW5zdGFuY2Uuc2V0ID0gY2hhaW5lZE5vb3A7XG4gIGluc3RhbmNlLm9uID0gY2hhaW5lZE5vb3A7XG4gIGluc3RhbmNlLm9mZiA9IGNoYWluZWROb29wO1xuICBpbnN0YW5jZS5kZXN0cm95ID0gY2hhaW5lZE5vb3A7XG4gIGluc3RhbmNlLmVtaXQgPSBjaGFpbmVkTm9vcDtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5pZiAoaGFtbWVyanMpIHtcbiAgZW5oYW5jZVBvaW50ZXJFdmVudElucHV0KGhhbW1lcmpzLlBvaW50ZXJFdmVudElucHV0KTtcbiAgZW5oYW5jZU1vdXNlSW5wdXQoaGFtbWVyanMuTW91c2VJbnB1dCk7XG59XG5cbmV4cG9ydCBjb25zdCBNYW5hZ2VyID0gaGFtbWVyanMgPyBoYW1tZXJqcy5NYW5hZ2VyIDogSGFtbWVyTWFuYWdlck1vY2s7XG5cbmV4cG9ydCBkZWZhdWx0IGhhbW1lcmpzO1xuIl19
  27418. /***/ }),
  27419. /* 284 */
  27420. /***/ (function(module, exports, __webpack_require__) {
  27421. "use strict";
  27422. /* WEBPACK VAR INJECTION */(function(process) {/**
  27423. * Copyright (c) 2013-present, Facebook, Inc.
  27424. *
  27425. * This source code is licensed under the MIT license found in the
  27426. * LICENSE file in the root directory of this source tree.
  27427. */
  27428. if (process.env.NODE_ENV !== 'production') {
  27429. var invariant = __webpack_require__(101);
  27430. var warning = __webpack_require__(155);
  27431. var ReactPropTypesSecret = __webpack_require__(172);
  27432. var loggedTypeFailures = {};
  27433. }
  27434. /**
  27435. * Assert that the values match with the type specs.
  27436. * Error messages are memorized and will only be shown once.
  27437. *
  27438. * @param {object} typeSpecs Map of name to a ReactPropType
  27439. * @param {object} values Runtime values that need to be type-checked
  27440. * @param {string} location e.g. "prop", "context", "child context"
  27441. * @param {string} componentName Name of the component for error messages.
  27442. * @param {?Function} getStack Returns the component stack.
  27443. * @private
  27444. */
  27445. function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
  27446. if (process.env.NODE_ENV !== 'production') {
  27447. for (var typeSpecName in typeSpecs) {
  27448. if (typeSpecs.hasOwnProperty(typeSpecName)) {
  27449. var error;
  27450. // Prop type validation may throw. In case they do, we don't want to
  27451. // fail the render phase where it didn't fail before. So we log it.
  27452. // After these have been cleaned up, we'll let them throw.
  27453. try {
  27454. // This is intentionally an invariant that gets caught. It's the same
  27455. // behavior as without this statement except with a better message.
  27456. invariant(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]);
  27457. error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
  27458. } catch (ex) {
  27459. error = ex;
  27460. }
  27461. warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error);
  27462. if (error instanceof Error && !(error.message in loggedTypeFailures)) {
  27463. // Only monitor this failure once because there tends to be a lot of the
  27464. // same error.
  27465. loggedTypeFailures[error.message] = true;
  27466. var stack = getStack ? getStack() : '';
  27467. warning(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');
  27468. }
  27469. }
  27470. }
  27471. }
  27472. }
  27473. module.exports = checkPropTypes;
  27474. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)))
  27475. /***/ }),
  27476. /* 285 */
  27477. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  27478. "use strict";
  27479. /* harmony export (immutable) */ __webpack_exports__["a"] = fitBounds;
  27480. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__web_mercator_viewport__ = __webpack_require__(81);
  27481. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  27482. /**
  27483. * Returns map settings {latitude, longitude, zoom}
  27484. * that will contain the provided corners within the provided width.
  27485. * Only supports non-perspective mode.
  27486. * @param {Number} width - viewport width
  27487. * @param {Number} height - viewport height
  27488. * @param {Array} bounds - [[lon, lat], [lon, lat]]
  27489. * @param {Number} [padding] - The amount of padding in pixels to add to the given bounds.
  27490. * @param {Array} [offset] - The center of the given bounds relative to the map's center,
  27491. * [x, y] measured in pixels.
  27492. * @returns {Object} - latitude, longitude and zoom
  27493. */
  27494. function fitBounds(_ref) {
  27495. var width = _ref.width,
  27496. height = _ref.height,
  27497. bounds = _ref.bounds,
  27498. _ref$padding = _ref.padding,
  27499. padding = _ref$padding === undefined ? 0 : _ref$padding,
  27500. _ref$offset = _ref.offset,
  27501. offset = _ref$offset === undefined ? [0, 0] : _ref$offset;
  27502. var _bounds = _slicedToArray(bounds, 2),
  27503. _bounds$ = _slicedToArray(_bounds[0], 2),
  27504. west = _bounds$[0],
  27505. south = _bounds$[1],
  27506. _bounds$2 = _slicedToArray(_bounds[1], 2),
  27507. east = _bounds$2[0],
  27508. north = _bounds$2[1];
  27509. var viewport = new __WEBPACK_IMPORTED_MODULE_0__web_mercator_viewport__["a" /* default */]({
  27510. width: width,
  27511. height: height,
  27512. longitude: 0,
  27513. latitude: 0,
  27514. zoom: 0
  27515. });
  27516. var nw = viewport.project([west, north]);
  27517. var se = viewport.project([east, south]);
  27518. var size = [Math.abs(se[0] - nw[0]), Math.abs(se[1] - nw[1])];
  27519. var center = [(se[0] + nw[0]) / 2, (se[1] + nw[1]) / 2];
  27520. var scaleX = (width - padding * 2 - Math.abs(offset[0]) * 2) / size[0];
  27521. var scaleY = (height - padding * 2 - Math.abs(offset[1]) * 2) / size[1];
  27522. var centerLngLat = viewport.unproject(center);
  27523. var zoom = viewport.zoom + Math.log2(Math.abs(Math.min(scaleX, scaleY)));
  27524. return {
  27525. longitude: centerLngLat[0],
  27526. latitude: centerLngLat[1],
  27527. zoom: zoom
  27528. };
  27529. }
  27530. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9maXQtYm91bmRzLmpzIl0sIm5hbWVzIjpbIldlYk1lcmNhdG9yVmlld3BvcnQiLCJmaXRCb3VuZHMiLCJ3aWR0aCIsImhlaWdodCIsImJvdW5kcyIsInBhZGRpbmciLCJvZmZzZXQiLCJ3ZXN0Iiwic291dGgiLCJlYXN0Iiwibm9ydGgiLCJ2aWV3cG9ydCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsIm53IiwicHJvamVjdCIsInNlIiwic2l6ZSIsIk1hdGgiLCJhYnMiLCJjZW50ZXIiLCJzY2FsZVgiLCJzY2FsZVkiLCJjZW50ZXJMbmdMYXQiLCJ1bnByb2plY3QiLCJsb2cyIiwibWluIl0sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU9BLG1CQUFQLE1BQWdDLHlCQUFoQzs7QUFFQTs7Ozs7Ozs7Ozs7O0FBWUEsZUFBZSxTQUFTQyxTQUFULE9BT1o7QUFBQSxNQU5EQyxLQU1DLFFBTkRBLEtBTUM7QUFBQSxNQUxEQyxNQUtDLFFBTERBLE1BS0M7QUFBQSxNQUpEQyxNQUlDLFFBSkRBLE1BSUM7QUFBQSwwQkFGREMsT0FFQztBQUFBLE1BRkRBLE9BRUMsZ0NBRlMsQ0FFVDtBQUFBLHlCQUREQyxNQUNDO0FBQUEsTUFEREEsTUFDQywrQkFEUSxDQUFDLENBQUQsRUFBSSxDQUFKLENBQ1I7O0FBQUEsK0JBQ3NDRixNQUR0QztBQUFBO0FBQUEsTUFDT0csSUFEUDtBQUFBLE1BQ2FDLEtBRGI7QUFBQTtBQUFBLE1BQ3NCQyxJQUR0QjtBQUFBLE1BQzRCQyxLQUQ1Qjs7QUFHRCxNQUFNQyxXQUFXLElBQUlYLG1CQUFKLENBQXdCO0FBQ3ZDRSxnQkFEdUM7QUFFdkNDLGtCQUZ1QztBQUd2Q1MsZUFBVyxDQUg0QjtBQUl2Q0MsY0FBVSxDQUo2QjtBQUt2Q0MsVUFBTTtBQUxpQyxHQUF4QixDQUFqQjs7QUFRQSxNQUFNQyxLQUFLSixTQUFTSyxPQUFULENBQWlCLENBQUNULElBQUQsRUFBT0csS0FBUCxDQUFqQixDQUFYO0FBQ0EsTUFBTU8sS0FBS04sU0FBU0ssT0FBVCxDQUFpQixDQUFDUCxJQUFELEVBQU9ELEtBQVAsQ0FBakIsQ0FBWDtBQUNBLE1BQU1VLE9BQU8sQ0FDWEMsS0FBS0MsR0FBTCxDQUFTSCxHQUFHLENBQUgsSUFBUUYsR0FBRyxDQUFILENBQWpCLENBRFcsRUFFWEksS0FBS0MsR0FBTCxDQUFTSCxHQUFHLENBQUgsSUFBUUYsR0FBRyxDQUFILENBQWpCLENBRlcsQ0FBYjtBQUlBLE1BQU1NLFNBQVMsQ0FDYixDQUFDSixHQUFHLENBQUgsSUFBUUYsR0FBRyxDQUFILENBQVQsSUFBa0IsQ0FETCxFQUViLENBQUNFLEdBQUcsQ0FBSCxJQUFRRixHQUFHLENBQUgsQ0FBVCxJQUFrQixDQUZMLENBQWY7O0FBS0EsTUFBTU8sU0FBUyxDQUFDcEIsUUFBUUcsVUFBVSxDQUFsQixHQUFzQmMsS0FBS0MsR0FBTCxDQUFTZCxPQUFPLENBQVAsQ0FBVCxJQUFzQixDQUE3QyxJQUFrRFksS0FBSyxDQUFMLENBQWpFO0FBQ0EsTUFBTUssU0FBUyxDQUFDcEIsU0FBU0UsVUFBVSxDQUFuQixHQUF1QmMsS0FBS0MsR0FBTCxDQUFTZCxPQUFPLENBQVAsQ0FBVCxJQUFzQixDQUE5QyxJQUFtRFksS0FBSyxDQUFMLENBQWxFOztBQUVBLE1BQU1NLGVBQWViLFNBQVNjLFNBQVQsQ0FBbUJKLE1BQW5CLENBQXJCO0FBQ0EsTUFBTVAsT0FBT0gsU0FBU0csSUFBVCxHQUFnQkssS0FBS08sSUFBTCxDQUFVUCxLQUFLQyxHQUFMLENBQVNELEtBQUtRLEdBQUwsQ0FBU0wsTUFBVCxFQUFpQkMsTUFBakIsQ0FBVCxDQUFWLENBQTdCOztBQUVBLFNBQU87QUFDTFgsZUFBV1ksYUFBYSxDQUFiLENBRE47QUFFTFgsY0FBVVcsYUFBYSxDQUFiLENBRkw7QUFHTFY7QUFISyxHQUFQO0FBS0QiLCJmaWxlIjoiZml0LWJvdW5kcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBXZWJNZXJjYXRvclZpZXdwb3J0IGZyb20gJy4vd2ViLW1lcmNhdG9yLXZpZXdwb3J0JztcblxuLyoqXG4gKiBSZXR1cm5zIG1hcCBzZXR0aW5ncyB7bGF0aXR1ZGUsIGxvbmdpdHVkZSwgem9vbX1cbiAqIHRoYXQgd2lsbCBjb250YWluIHRoZSBwcm92aWRlZCBjb3JuZXJzIHdpdGhpbiB0aGUgcHJvdmlkZWQgd2lkdGguXG4gKiBPbmx5IHN1cHBvcnRzIG5vbi1wZXJzcGVjdGl2ZSBtb2RlLlxuICogQHBhcmFtIHtOdW1iZXJ9IHdpZHRoIC0gdmlld3BvcnQgd2lkdGhcbiAqIEBwYXJhbSB7TnVtYmVyfSBoZWlnaHQgLSB2aWV3cG9ydCBoZWlnaHRcbiAqIEBwYXJhbSB7QXJyYXl9IGJvdW5kcyAtIFtbbG9uLCBsYXRdLCBbbG9uLCBsYXRdXVxuICogQHBhcmFtIHtOdW1iZXJ9IFtwYWRkaW5nXSAtIFRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgdG8gYWRkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gKiBAcGFyYW0ge0FycmF5fSBbb2Zmc2V0XSAtIFRoZSBjZW50ZXIgb2YgdGhlIGdpdmVuIGJvdW5kcyByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgY2VudGVyLFxuICogICAgW3gsIHldIG1lYXN1cmVkIGluIHBpeGVscy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gbGF0aXR1ZGUsIGxvbmdpdHVkZSBhbmQgem9vbVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaXRCb3VuZHMoe1xuICB3aWR0aCxcbiAgaGVpZ2h0LFxuICBib3VuZHMsXG4gIC8vIG9wdGlvbnNcbiAgcGFkZGluZyA9IDAsXG4gIG9mZnNldCA9IFswLCAwXVxufSkge1xuICBjb25zdCBbW3dlc3QsIHNvdXRoXSwgW2Vhc3QsIG5vcnRoXV0gPSBib3VuZHM7XG5cbiAgY29uc3Qgdmlld3BvcnQgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGxvbmdpdHVkZTogMCxcbiAgICBsYXRpdHVkZTogMCxcbiAgICB6b29tOiAwXG4gIH0pO1xuXG4gIGNvbnN0IG53ID0gdmlld3BvcnQucHJvamVjdChbd2VzdCwgbm9ydGhdKTtcbiAgY29uc3Qgc2UgPSB2aWV3cG9ydC5wcm9qZWN0KFtlYXN0LCBzb3V0aF0pO1xuICBjb25zdCBzaXplID0gW1xuICAgIE1hdGguYWJzKHNlWzBdIC0gbndbMF0pLFxuICAgIE1hdGguYWJzKHNlWzFdIC0gbndbMV0pXG4gIF07XG4gIGNvbnN0IGNlbnRlciA9IFtcbiAgICAoc2VbMF0gKyBud1swXSkgLyAyLFxuICAgIChzZVsxXSArIG53WzFdKSAvIDJcbiAgXTtcblxuICBjb25zdCBzY2FsZVggPSAod2lkdGggLSBwYWRkaW5nICogMiAtIE1hdGguYWJzKG9mZnNldFswXSkgKiAyKSAvIHNpemVbMF07XG4gIGNvbnN0IHNjYWxlWSA9IChoZWlnaHQgLSBwYWRkaW5nICogMiAtIE1hdGguYWJzKG9mZnNldFsxXSkgKiAyKSAvIHNpemVbMV07XG5cbiAgY29uc3QgY2VudGVyTG5nTGF0ID0gdmlld3BvcnQudW5wcm9qZWN0KGNlbnRlcik7XG4gIGNvbnN0IHpvb20gPSB2aWV3cG9ydC56b29tICsgTWF0aC5sb2cyKE1hdGguYWJzKE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKSkpO1xuXG4gIHJldHVybiB7XG4gICAgbG9uZ2l0dWRlOiBjZW50ZXJMbmdMYXRbMF0sXG4gICAgbGF0aXR1ZGU6IGNlbnRlckxuZ0xhdFsxXSxcbiAgICB6b29tXG4gIH07XG59XG4iXX0=
  27531. /***/ }),
  27532. /* 286 */
  27533. /***/ (function(module, exports, __webpack_require__) {
  27534. "use strict";
  27535. Object.defineProperty(exports, "__esModule", {
  27536. value: true
  27537. });
  27538. exports.experimental = exports.DeckGL = exports.default = exports.GeoJsonLayer = exports.PolygonLayer = exports.PathLayer = exports.HexagonCellLayer = exports.HexagonLayer = exports.GridCellLayer = exports.GridLayer = exports.ScreenGridLayer = exports.ScatterplotLayer = exports.PointCloudLayer = exports.LineLayer = exports.IconLayer = exports.ArcLayer = exports.lighting = exports.project64 = exports.project = exports.OrthographicViewport = exports.PerspectiveViewport = exports.WebMercatorViewport = exports.Viewport = exports.CompositeLayer = exports.Layer = exports.AttributeManager = exports.LayerManager = exports.COORDINATE_SYSTEM = undefined;
  27539. var _core = __webpack_require__(13);
  27540. Object.defineProperty(exports, 'COORDINATE_SYSTEM', {
  27541. enumerable: true,
  27542. get: function get() {
  27543. return _core.COORDINATE_SYSTEM;
  27544. }
  27545. });
  27546. Object.defineProperty(exports, 'LayerManager', {
  27547. enumerable: true,
  27548. get: function get() {
  27549. return _core.LayerManager;
  27550. }
  27551. });
  27552. Object.defineProperty(exports, 'AttributeManager', {
  27553. enumerable: true,
  27554. get: function get() {
  27555. return _core.AttributeManager;
  27556. }
  27557. });
  27558. Object.defineProperty(exports, 'Layer', {
  27559. enumerable: true,
  27560. get: function get() {
  27561. return _core.Layer;
  27562. }
  27563. });
  27564. Object.defineProperty(exports, 'CompositeLayer', {
  27565. enumerable: true,
  27566. get: function get() {
  27567. return _core.CompositeLayer;
  27568. }
  27569. });
  27570. Object.defineProperty(exports, 'Viewport', {
  27571. enumerable: true,
  27572. get: function get() {
  27573. return _core.Viewport;
  27574. }
  27575. });
  27576. Object.defineProperty(exports, 'WebMercatorViewport', {
  27577. enumerable: true,
  27578. get: function get() {
  27579. return _core.WebMercatorViewport;
  27580. }
  27581. });
  27582. Object.defineProperty(exports, 'PerspectiveViewport', {
  27583. enumerable: true,
  27584. get: function get() {
  27585. return _core.PerspectiveViewport;
  27586. }
  27587. });
  27588. Object.defineProperty(exports, 'OrthographicViewport', {
  27589. enumerable: true,
  27590. get: function get() {
  27591. return _core.OrthographicViewport;
  27592. }
  27593. });
  27594. Object.defineProperty(exports, 'project', {
  27595. enumerable: true,
  27596. get: function get() {
  27597. return _core.project;
  27598. }
  27599. });
  27600. Object.defineProperty(exports, 'project64', {
  27601. enumerable: true,
  27602. get: function get() {
  27603. return _core.project64;
  27604. }
  27605. });
  27606. Object.defineProperty(exports, 'lighting', {
  27607. enumerable: true,
  27608. get: function get() {
  27609. return _core.lighting;
  27610. }
  27611. });
  27612. var _coreLayers = __webpack_require__(309);
  27613. Object.defineProperty(exports, 'ArcLayer', {
  27614. enumerable: true,
  27615. get: function get() {
  27616. return _coreLayers.ArcLayer;
  27617. }
  27618. });
  27619. Object.defineProperty(exports, 'IconLayer', {
  27620. enumerable: true,
  27621. get: function get() {
  27622. return _coreLayers.IconLayer;
  27623. }
  27624. });
  27625. Object.defineProperty(exports, 'LineLayer', {
  27626. enumerable: true,
  27627. get: function get() {
  27628. return _coreLayers.LineLayer;
  27629. }
  27630. });
  27631. Object.defineProperty(exports, 'PointCloudLayer', {
  27632. enumerable: true,
  27633. get: function get() {
  27634. return _coreLayers.PointCloudLayer;
  27635. }
  27636. });
  27637. Object.defineProperty(exports, 'ScatterplotLayer', {
  27638. enumerable: true,
  27639. get: function get() {
  27640. return _coreLayers.ScatterplotLayer;
  27641. }
  27642. });
  27643. Object.defineProperty(exports, 'ScreenGridLayer', {
  27644. enumerable: true,
  27645. get: function get() {
  27646. return _coreLayers.ScreenGridLayer;
  27647. }
  27648. });
  27649. Object.defineProperty(exports, 'GridLayer', {
  27650. enumerable: true,
  27651. get: function get() {
  27652. return _coreLayers.GridLayer;
  27653. }
  27654. });
  27655. Object.defineProperty(exports, 'GridCellLayer', {
  27656. enumerable: true,
  27657. get: function get() {
  27658. return _coreLayers.GridCellLayer;
  27659. }
  27660. });
  27661. Object.defineProperty(exports, 'HexagonLayer', {
  27662. enumerable: true,
  27663. get: function get() {
  27664. return _coreLayers.HexagonLayer;
  27665. }
  27666. });
  27667. Object.defineProperty(exports, 'HexagonCellLayer', {
  27668. enumerable: true,
  27669. get: function get() {
  27670. return _coreLayers.HexagonCellLayer;
  27671. }
  27672. });
  27673. Object.defineProperty(exports, 'PathLayer', {
  27674. enumerable: true,
  27675. get: function get() {
  27676. return _coreLayers.PathLayer;
  27677. }
  27678. });
  27679. Object.defineProperty(exports, 'PolygonLayer', {
  27680. enumerable: true,
  27681. get: function get() {
  27682. return _coreLayers.PolygonLayer;
  27683. }
  27684. });
  27685. Object.defineProperty(exports, 'GeoJsonLayer', {
  27686. enumerable: true,
  27687. get: function get() {
  27688. return _coreLayers.GeoJsonLayer;
  27689. }
  27690. });
  27691. var _react = __webpack_require__(362);
  27692. Object.defineProperty(exports, 'default', {
  27693. enumerable: true,
  27694. get: function get() {
  27695. return _interopRequireDefault(_react).default;
  27696. }
  27697. });
  27698. Object.defineProperty(exports, 'DeckGL', {
  27699. enumerable: true,
  27700. get: function get() {
  27701. return _react.DeckGL;
  27702. }
  27703. });
  27704. var _reflectionEffect = __webpack_require__(359);
  27705. var _reflectionEffect2 = _interopRequireDefault(_reflectionEffect);
  27706. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  27707. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  27708. //
  27709. // Permission is hereby granted, free of charge, to any person obtaining a copy
  27710. // of this software and associated documentation files (the "Software"), to deal
  27711. // in the Software without restriction, including without limitation the rights
  27712. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  27713. // copies of the Software, and to permit persons to whom the Software is
  27714. // furnished to do so, subject to the following conditions:
  27715. //
  27716. // The above copyright notice and this permission notice shall be included in
  27717. // all copies or substantial portions of the Software.
  27718. //
  27719. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  27720. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  27721. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27722. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27723. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  27724. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  27725. // THE SOFTWARE.
  27726. /* eslint-disable max-len */
  27727. var experimental = {};
  27728. //
  27729. // CORE LIBRARY
  27730. //
  27731. // EXPERIMENTAL CORE LIB CLASSES (May change in minor version bumps, use at your own risk)
  27732. var ViewState = _core.experimental.ViewState,
  27733. FirstPersonState = _core.experimental.FirstPersonState,
  27734. OrbitState = _core.experimental.OrbitState,
  27735. MapState = _core.experimental.MapState,
  27736. Controller = _core.experimental.Controller,
  27737. FirstPersonController = _core.experimental.FirstPersonController,
  27738. FirstPersonViewport = _core.experimental.FirstPersonViewport,
  27739. OrbitViewport = _core.experimental.OrbitViewport,
  27740. ThirdPersonViewport = _core.experimental.ThirdPersonViewport,
  27741. TRANSITION_EVENTS = _core.experimental.TRANSITION_EVENTS,
  27742. LinearInterpolator = _core.experimental.LinearInterpolator,
  27743. ViewportFlyToInterpolator = _core.experimental.ViewportFlyToInterpolator,
  27744. DeckGLJS = _core.experimental.DeckGLJS,
  27745. MapControllerJS = _core.experimental.MapControllerJS,
  27746. EffectManager = _core.experimental.EffectManager,
  27747. Effect = _core.experimental.Effect;
  27748. Object.assign(experimental, {
  27749. // Unfinished controller/viewport classes
  27750. ViewState: ViewState,
  27751. FirstPersonState: FirstPersonState,
  27752. OrbitState: OrbitState,
  27753. MapState: MapState,
  27754. Controller: Controller,
  27755. FirstPersonController: FirstPersonController,
  27756. FirstPersonViewport: FirstPersonViewport,
  27757. OrbitViewport: OrbitViewport,
  27758. ThirdPersonViewport: ThirdPersonViewport,
  27759. // Transition bindings
  27760. TRANSITION_EVENTS: TRANSITION_EVENTS,
  27761. LinearInterpolator: LinearInterpolator,
  27762. ViewportFlyToInterpolator: ViewportFlyToInterpolator,
  27763. // Pure JS (non-React) API
  27764. DeckGLJS: DeckGLJS,
  27765. MapControllerJS: MapControllerJS,
  27766. // Effects base classes
  27767. EffectManager: EffectManager,
  27768. Effect: Effect
  27769. });
  27770. // Experimental Data Accessor Helpers
  27771. // INTERNAL - TODO remove from experimental exports
  27772. var TransitionManager = _core.experimental.TransitionManager,
  27773. extractViewportFrom = _core.experimental.extractViewportFrom,
  27774. BinSorter = _core.experimental.BinSorter,
  27775. linearScale = _core.experimental.linearScale,
  27776. getLinearScale = _core.experimental.getLinearScale,
  27777. quantizeScale = _core.experimental.quantizeScale,
  27778. getQuantizeScale = _core.experimental.getQuantizeScale,
  27779. clamp = _core.experimental.clamp,
  27780. defaultColorRange = _core.experimental.defaultColorRange,
  27781. log = _core.experimental.log,
  27782. get = _core.experimental.get,
  27783. count = _core.experimental.count,
  27784. flatten = _core.experimental.flatten,
  27785. countVertices = _core.experimental.countVertices,
  27786. flattenVertices = _core.experimental.flattenVertices,
  27787. fillArray = _core.experimental.fillArray,
  27788. enable64bitSupport = _core.experimental.enable64bitSupport,
  27789. fp64ify = _core.experimental.fp64ify,
  27790. fp64LowPart = _core.experimental.fp64LowPart;
  27791. Object.assign(experimental, {
  27792. // For react module
  27793. TransitionManager: TransitionManager,
  27794. extractViewportFrom: extractViewportFrom,
  27795. // For layers
  27796. BinSorter: BinSorter,
  27797. linearScale: linearScale,
  27798. getLinearScale: getLinearScale,
  27799. quantizeScale: quantizeScale,
  27800. getQuantizeScale: getQuantizeScale,
  27801. clamp: clamp,
  27802. defaultColorRange: defaultColorRange,
  27803. log: log,
  27804. get: get,
  27805. count: count,
  27806. flatten: flatten,
  27807. countVertices: countVertices,
  27808. flattenVertices: flattenVertices,
  27809. fillArray: fillArray,
  27810. enable64bitSupport: enable64bitSupport,
  27811. fp64ify: fp64ify,
  27812. fp64LowPart: fp64LowPart
  27813. });
  27814. //
  27815. // CORE LAYERS PACKAGE
  27816. //
  27817. //
  27818. // EFFECTS PACKAGE
  27819. //
  27820. Object.assign(experimental, {
  27821. ReflectionEffect: _reflectionEffect2.default
  27822. });
  27823. //
  27824. // REACT BINDINGS PACKAGE
  27825. //
  27826. // TODO - do we need to expose these?
  27827. Object.assign(experimental, {
  27828. MapController: _react.MapController,
  27829. OrbitController: _react.OrbitController,
  27830. ViewportController: _react.ViewportController
  27831. });
  27832. //
  27833. // EXPERIMENTAL EXPORTS
  27834. //
  27835. exports.experimental = experimental;
  27836. /***/ }),
  27837. /* 287 */
  27838. /***/ (function(module, exports, __webpack_require__) {
  27839. "use strict";
  27840. /* WEBPACK VAR INJECTION */(function(global) {
  27841. __webpack_require__(566);
  27842. __webpack_require__(366);
  27843. __webpack_require__(367);
  27844. if (global._babelPolyfill) {
  27845. throw new Error("only one instance of babel-polyfill is allowed");
  27846. }
  27847. global._babelPolyfill = true;
  27848. var DEFINE_PROPERTY = "defineProperty";
  27849. function define(O, key, value) {
  27850. O[key] || Object[DEFINE_PROPERTY](O, key, {
  27851. writable: true,
  27852. configurable: true,
  27853. value: value
  27854. });
  27855. }
  27856. define(String.prototype, "padLeft", "".padStart);
  27857. define(String.prototype, "padRight", "".padEnd);
  27858. "pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {
  27859. [][key] && define(Array, key, Function.call.bind([][key]));
  27860. });
  27861. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(47)))
  27862. /***/ }),
  27863. /* 288 */
  27864. /***/ (function(module, exports, __webpack_require__) {
  27865. "use strict";
  27866. __webpack_require__(287);
  27867. var _index = __webpack_require__(286);
  27868. var DeckGL = _interopRequireWildcard(_index);
  27869. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  27870. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  27871. //
  27872. // Permission is hereby granted, free of charge, to any person obtaining a copy
  27873. // of this software and associated documentation files (the "Software"), to deal
  27874. // in the Software without restriction, including without limitation the rights
  27875. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  27876. // copies of the Software, and to permit persons to whom the Software is
  27877. // furnished to do so, subject to the following conditions:
  27878. //
  27879. // The above copyright notice and this permission notice shall be included in
  27880. // all copies or substantial portions of the Software.
  27881. //
  27882. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  27883. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  27884. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27885. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27886. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  27887. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  27888. // THE SOFTWARE.
  27889. /* Generate script that can be used in browser without browserify */
  27890. /* global window */
  27891. (function exposeAsGlobal() {
  27892. if (typeof window !== 'undefined') {
  27893. window.DeckGL = DeckGL;
  27894. }
  27895. })();
  27896. /***/ }),
  27897. /* 289 */
  27898. /***/ (function(module, exports, __webpack_require__) {
  27899. "use strict";
  27900. Object.defineProperty(exports, "__esModule", {
  27901. value: true
  27902. });
  27903. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  27904. //
  27905. // Permission is hereby granted, free of charge, to any person obtaining a copy
  27906. // of this software and associated documentation files (the "Software"), to deal
  27907. // in the Software without restriction, including without limitation the rights
  27908. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  27909. // copies of the Software, and to permit persons to whom the Software is
  27910. // furnished to do so, subject to the following conditions:
  27911. //
  27912. // The above copyright notice and this permission notice shall be included in
  27913. // all copies or substantial portions of the Software.
  27914. //
  27915. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  27916. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  27917. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27918. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27919. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  27920. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  27921. // THE SOFTWARE.
  27922. exports.default = "#define SHADER_NAME arc-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 vColor;\n\nvoid main(void) {\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  27923. /***/ }),
  27924. /* 290 */
  27925. /***/ (function(module, exports, __webpack_require__) {
  27926. "use strict";
  27927. Object.defineProperty(exports, "__esModule", {
  27928. value: true
  27929. });
  27930. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  27931. //
  27932. // Permission is hereby granted, free of charge, to any person obtaining a copy
  27933. // of this software and associated documentation files (the "Software"), to deal
  27934. // in the Software without restriction, including without limitation the rights
  27935. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  27936. // copies of the Software, and to permit persons to whom the Software is
  27937. // furnished to do so, subject to the following conditions:
  27938. //
  27939. // The above copyright notice and this permission notice shall be included in
  27940. // all copies or substantial portions of the Software.
  27941. //
  27942. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  27943. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  27944. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27945. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27946. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  27947. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  27948. // THE SOFTWARE.
  27949. exports.default = "#define SHADER_NAME arc-layer-vertex-shader-64\n\nattribute vec3 positions;\nattribute vec4 instanceSourceColors;\nattribute vec4 instanceTargetColors;\n\nattribute vec4 instancePositions;\nattribute vec4 instancePositions64Low;\n\nattribute vec3 instancePickingColors;\n\nuniform float numSegments;\nuniform float strokeWidth;\nuniform float opacity;\n\nvarying vec4 vColor;\n\nvec2 paraboloid_fp64(vec2 source[2], vec2 target[2], float ratio) {\n\n vec2 x[2];\n vec2_mix_fp64(source, target, ratio, x);\n vec2 center[2];\n vec2_mix_fp64(source, target, 0.5, center);\n\n vec2 dSourceCenter = vec2_distance_fp64(source, center);\n vec2 dXCenter = vec2_distance_fp64(x, center);\n return mul_fp64(sum_fp64(dSourceCenter, dXCenter), sub_fp64(dSourceCenter, dXCenter));\n}\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n vec2 offset_screenspace = dir_screenspace * offset_direction * strokeWidth / 2.0;\n vec2 offset_clipspace = project_pixel_to_clipspace(offset_screenspace).xy;\n\n return offset_clipspace;\n}\n\nfloat getSegmentRatio(float index) {\n return smoothstep(0.0, 1.0, index / (numSegments - 1.0));\n}\n\nvoid get_pos_fp64(vec2 source[2], vec2 target[2], float segmentRatio, out vec2 position[4]) {\n\n vec2 vertex_height = paraboloid_fp64(source, target, segmentRatio);\n\n vec2 position_temp[2];\n\n vec2_mix_fp64(source, target, segmentRatio, position_temp);\n\n position[0] = position_temp[0];\n position[1] = position_temp[1];\n\n if (vertex_height.x < 0.0 || (vertex_height.x == 0.0 && vertex_height.y <= 0.0)) {\n vertex_height = vec2(0.0, 0.0);\n }\n\n position[2] = sqrt_fp64(vertex_height);\n position[3] = vec2(1.0, 0.0);\n}\n\nvoid main(void) {\n vec4 instanceSourcePositions64 = vec4(instancePositions.x,\n instancePositions64Low.x, instancePositions.y, instancePositions64Low.y);\n vec4 instanceTargetPositions64 = vec4(instancePositions.z,\n instancePositions64Low.z, instancePositions.w, instancePositions64Low.w);\n\n vec2 projected_source_coord[2];\n vec2 projected_target_coord[2];\n\n project_position_fp64(instanceSourcePositions64, projected_source_coord);\n project_position_fp64(instanceTargetPositions64, projected_target_coord);\n\n float segmentIndex = positions.x;\n float segmentRatio = getSegmentRatio(segmentIndex);\n\n // if it's the first point, use next - current as direction\n // otherwise use current - prev\n float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));\n float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);\n\n vec2 curr_pos_modelspace[4];\n\n get_pos_fp64(projected_source_coord, projected_target_coord, segmentRatio,\n curr_pos_modelspace);\n\n vec2 next_pos_modelspace[4];\n\n get_pos_fp64(projected_source_coord, projected_target_coord, nextSegmentRatio,\n next_pos_modelspace);\n\n vec4 curr_pos_clipspace = project_to_clipspace_fp64(curr_pos_modelspace);\n vec4 next_pos_clipspace = project_to_clipspace_fp64(next_pos_modelspace);\n\n vec2 offset = getExtrusionOffset(next_pos_clipspace.xy - curr_pos_clipspace.xy, positions.y);\n\n gl_Position = curr_pos_clipspace + vec4(offset, 0.0, 0.0);\n\n vec4 color = mix(instanceSourceColors, instanceTargetColors, segmentRatio) / 255.;\n vColor = vec4(color.rgb, color.a * opacity);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  27950. /***/ }),
  27951. /* 291 */
  27952. /***/ (function(module, exports, __webpack_require__) {
  27953. "use strict";
  27954. Object.defineProperty(exports, "__esModule", {
  27955. value: true
  27956. });
  27957. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  27958. //
  27959. // Permission is hereby granted, free of charge, to any person obtaining a copy
  27960. // of this software and associated documentation files (the "Software"), to deal
  27961. // in the Software without restriction, including without limitation the rights
  27962. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  27963. // copies of the Software, and to permit persons to whom the Software is
  27964. // furnished to do so, subject to the following conditions:
  27965. //
  27966. // The above copyright notice and this permission notice shall be included in
  27967. // all copies or substantial portions of the Software.
  27968. //
  27969. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  27970. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  27971. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  27972. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27973. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  27974. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  27975. // THE SOFTWARE.
  27976. exports.default = "#define SHADER_NAME arc-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec4 instanceSourceColors;\nattribute vec4 instanceTargetColors;\nattribute vec4 instancePositions;\nattribute vec3 instancePickingColors;\n\nuniform float numSegments;\nuniform float strokeWidth;\nuniform float opacity;\n\nvarying vec4 vColor;\n\nfloat paraboloid(vec2 source, vec2 target, float ratio) {\n\n vec2 x = mix(source, target, ratio);\n vec2 center = mix(source, target, 0.5);\n\n float dSourceCenter = distance(source, center);\n float dXCenter = distance(x, center);\n return (dSourceCenter + dXCenter) * (dSourceCenter - dXCenter);\n}\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n vec2 offset_screenspace = dir_screenspace * offset_direction * strokeWidth / 2.0;\n vec2 offset_clipspace = project_pixel_to_clipspace(offset_screenspace).xy;\n\n return offset_clipspace;\n}\n\nfloat getSegmentRatio(float index) {\n return smoothstep(0.0, 1.0, index / (numSegments - 1.0));\n}\n\nvec3 getPos(vec2 source, vec2 target, float segmentRatio) {\n float vertex_height = paraboloid(source, target, segmentRatio);\n\n return vec3(\n mix(source, target, segmentRatio),\n sqrt(max(0.0, vertex_height))\n );\n}\n\nvoid main(void) {\n vec2 source = project_position(instancePositions.xy);\n vec2 target = project_position(instancePositions.zw);\n\n float segmentIndex = positions.x;\n float segmentRatio = getSegmentRatio(segmentIndex);\n // if it's the first point, use next - current as direction\n // otherwise use current - prev\n float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));\n float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);\n\n vec3 currPos = getPos(source, target, segmentRatio);\n vec3 nextPos = getPos(source, target, nextSegmentRatio);\n vec4 curr = project_to_clipspace(vec4(currPos, 1.0));\n vec4 next = project_to_clipspace(vec4(nextPos, 1.0));\n\n // extrude\n vec2 offset = getExtrusionOffset((next.xy - curr.xy) * indexDir, positions.y);\n gl_Position = curr + vec4(offset, 0.0, 0.0);\n\n vec4 color = mix(instanceSourceColors, instanceTargetColors, segmentRatio) / 255.;\n vColor = vec4(color.rgb, color.a * opacity);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  27977. /***/ }),
  27978. /* 292 */
  27979. /***/ (function(module, exports, __webpack_require__) {
  27980. "use strict";
  27981. Object.defineProperty(exports, "__esModule", {
  27982. value: true
  27983. });
  27984. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  27985. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  27986. var _core = __webpack_require__(13);
  27987. var _luma = __webpack_require__(12);
  27988. var _arcLayerVertex = __webpack_require__(291);
  27989. var _arcLayerVertex2 = _interopRequireDefault(_arcLayerVertex);
  27990. var _arcLayerVertex3 = __webpack_require__(290);
  27991. var _arcLayerVertex4 = _interopRequireDefault(_arcLayerVertex3);
  27992. var _arcLayerFragment = __webpack_require__(289);
  27993. var _arcLayerFragment2 = _interopRequireDefault(_arcLayerFragment);
  27994. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  27995. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  27996. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  27997. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  27998. //
  27999. // Permission is hereby granted, free of charge, to any person obtaining a copy
  28000. // of this software and associated documentation files (the "Software"), to deal
  28001. // in the Software without restriction, including without limitation the rights
  28002. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  28003. // copies of the Software, and to permit persons to whom the Software is
  28004. // furnished to do so, subject to the following conditions:
  28005. //
  28006. // The above copyright notice and this permission notice shall be included in
  28007. // all copies or substantial portions of the Software.
  28008. //
  28009. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28010. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  28011. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  28012. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28013. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28014. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  28015. // THE SOFTWARE.
  28016. var fp64LowPart = _core.experimental.fp64LowPart,
  28017. enable64bitSupport = _core.experimental.enable64bitSupport;
  28018. var DEFAULT_COLOR = [0, 0, 0, 255];
  28019. var defaultProps = {
  28020. strokeWidth: 1,
  28021. fp64: false,
  28022. getSourcePosition: function getSourcePosition(x) {
  28023. return x.sourcePosition;
  28024. },
  28025. getTargetPosition: function getTargetPosition(x) {
  28026. return x.targetPosition;
  28027. },
  28028. getSourceColor: function getSourceColor(x) {
  28029. return x.color || DEFAULT_COLOR;
  28030. },
  28031. getTargetColor: function getTargetColor(x) {
  28032. return x.color || DEFAULT_COLOR;
  28033. }
  28034. };
  28035. var ArcLayer = function (_Layer) {
  28036. _inherits(ArcLayer, _Layer);
  28037. function ArcLayer() {
  28038. _classCallCheck(this, ArcLayer);
  28039. return _possibleConstructorReturn(this, (ArcLayer.__proto__ || Object.getPrototypeOf(ArcLayer)).apply(this, arguments));
  28040. }
  28041. _createClass(ArcLayer, [{
  28042. key: 'getShaders',
  28043. value: function getShaders() {
  28044. return enable64bitSupport(this.props) ? { vs: _arcLayerVertex4.default, fs: _arcLayerFragment2.default, modules: ['project64', 'picking'] } : { vs: _arcLayerVertex2.default, fs: _arcLayerFragment2.default, modules: ['picking'] }; // 'project' module added by default.
  28045. }
  28046. }, {
  28047. key: 'initializeState',
  28048. value: function initializeState() {
  28049. var attributeManager = this.getAttributeManager();
  28050. /* eslint-disable max-len */
  28051. attributeManager.addInstanced({
  28052. instancePositions: {
  28053. size: 4,
  28054. transition: true,
  28055. accessor: ['getSourcePosition', 'getTargetPosition'],
  28056. update: this.calculateInstancePositions
  28057. },
  28058. instanceSourceColors: {
  28059. size: 4,
  28060. type: _luma.GL.UNSIGNED_BYTE,
  28061. transition: true,
  28062. accessor: 'getSourceColor',
  28063. update: this.calculateInstanceSourceColors
  28064. },
  28065. instanceTargetColors: {
  28066. size: 4,
  28067. type: _luma.GL.UNSIGNED_BYTE,
  28068. transition: true,
  28069. accessor: 'getTargetColor',
  28070. update: this.calculateInstanceTargetColors
  28071. }
  28072. });
  28073. /* eslint-enable max-len */
  28074. }
  28075. }, {
  28076. key: 'updateAttribute',
  28077. value: function updateAttribute(_ref) {
  28078. var props = _ref.props,
  28079. oldProps = _ref.oldProps,
  28080. changeFlags = _ref.changeFlags;
  28081. if (props.fp64 !== oldProps.fp64) {
  28082. var attributeManager = this.getAttributeManager();
  28083. attributeManager.invalidateAll();
  28084. if (props.fp64 && props.coordinateSystem === _core.COORDINATE_SYSTEM.LNGLAT) {
  28085. attributeManager.addInstanced({
  28086. instancePositions64Low: {
  28087. size: 4,
  28088. accessor: ['getSourcePosition', 'getTargetPosition'],
  28089. update: this.calculateInstancePositions64Low
  28090. }
  28091. });
  28092. } else {
  28093. attributeManager.remove(['instancePositions64Low']);
  28094. }
  28095. }
  28096. }
  28097. }, {
  28098. key: 'updateState',
  28099. value: function updateState(_ref2) {
  28100. var props = _ref2.props,
  28101. oldProps = _ref2.oldProps,
  28102. changeFlags = _ref2.changeFlags;
  28103. _get(ArcLayer.prototype.__proto__ || Object.getPrototypeOf(ArcLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  28104. // Re-generate model if geometry changed
  28105. if (props.fp64 !== oldProps.fp64) {
  28106. var gl = this.context.gl;
  28107. this.setState({ model: this._getModel(gl) });
  28108. }
  28109. this.updateAttribute({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  28110. }
  28111. }, {
  28112. key: 'draw',
  28113. value: function draw(_ref3) {
  28114. var uniforms = _ref3.uniforms;
  28115. var strokeWidth = this.props.strokeWidth;
  28116. this.state.model.render(Object.assign({}, uniforms, {
  28117. strokeWidth: strokeWidth
  28118. }));
  28119. }
  28120. }, {
  28121. key: '_getModel',
  28122. value: function _getModel(gl) {
  28123. var positions = [];
  28124. var NUM_SEGMENTS = 50;
  28125. /*
  28126. * (0, -1)-------------_(1, -1)
  28127. * | _,-" |
  28128. * o _,-" o
  28129. * | _,-" |
  28130. * (0, 1)"-------------(1, 1)
  28131. */
  28132. for (var i = 0; i < NUM_SEGMENTS; i++) {
  28133. positions = positions.concat([i, -1, 0, i, 1, 0]);
  28134. }
  28135. var model = new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  28136. id: this.props.id,
  28137. geometry: new _luma.Geometry({
  28138. drawMode: _luma.GL.TRIANGLE_STRIP,
  28139. attributes: {
  28140. positions: new Float32Array(positions)
  28141. }
  28142. }),
  28143. isInstanced: true,
  28144. shaderCache: this.context.shaderCache
  28145. }));
  28146. model.setUniforms({ numSegments: NUM_SEGMENTS });
  28147. return model;
  28148. }
  28149. }, {
  28150. key: 'calculateInstancePositions',
  28151. value: function calculateInstancePositions(attribute) {
  28152. var _props = this.props,
  28153. data = _props.data,
  28154. getSourcePosition = _props.getSourcePosition,
  28155. getTargetPosition = _props.getTargetPosition;
  28156. var value = attribute.value,
  28157. size = attribute.size;
  28158. var i = 0;
  28159. var _iteratorNormalCompletion = true;
  28160. var _didIteratorError = false;
  28161. var _iteratorError = undefined;
  28162. try {
  28163. for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  28164. var object = _step.value;
  28165. var sourcePosition = getSourcePosition(object);
  28166. var targetPosition = getTargetPosition(object);
  28167. value[i + 0] = sourcePosition[0];
  28168. value[i + 1] = sourcePosition[1];
  28169. value[i + 2] = targetPosition[0];
  28170. value[i + 3] = targetPosition[1];
  28171. i += size;
  28172. }
  28173. } catch (err) {
  28174. _didIteratorError = true;
  28175. _iteratorError = err;
  28176. } finally {
  28177. try {
  28178. if (!_iteratorNormalCompletion && _iterator.return) {
  28179. _iterator.return();
  28180. }
  28181. } finally {
  28182. if (_didIteratorError) {
  28183. throw _iteratorError;
  28184. }
  28185. }
  28186. }
  28187. }
  28188. }, {
  28189. key: 'calculateInstancePositions64Low',
  28190. value: function calculateInstancePositions64Low(attribute) {
  28191. var _props2 = this.props,
  28192. data = _props2.data,
  28193. getSourcePosition = _props2.getSourcePosition,
  28194. getTargetPosition = _props2.getTargetPosition;
  28195. var value = attribute.value,
  28196. size = attribute.size;
  28197. var i = 0;
  28198. var _iteratorNormalCompletion2 = true;
  28199. var _didIteratorError2 = false;
  28200. var _iteratorError2 = undefined;
  28201. try {
  28202. for (var _iterator2 = data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  28203. var object = _step2.value;
  28204. var sourcePosition = getSourcePosition(object);
  28205. var targetPosition = getTargetPosition(object);
  28206. value[i + 0] = fp64LowPart(sourcePosition[0]);
  28207. value[i + 1] = fp64LowPart(sourcePosition[1]);
  28208. value[i + 2] = fp64LowPart(targetPosition[0]);
  28209. value[i + 3] = fp64LowPart(targetPosition[1]);
  28210. i += size;
  28211. }
  28212. } catch (err) {
  28213. _didIteratorError2 = true;
  28214. _iteratorError2 = err;
  28215. } finally {
  28216. try {
  28217. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  28218. _iterator2.return();
  28219. }
  28220. } finally {
  28221. if (_didIteratorError2) {
  28222. throw _iteratorError2;
  28223. }
  28224. }
  28225. }
  28226. }
  28227. }, {
  28228. key: 'calculateInstanceSourceColors',
  28229. value: function calculateInstanceSourceColors(attribute) {
  28230. var _props3 = this.props,
  28231. data = _props3.data,
  28232. getSourceColor = _props3.getSourceColor;
  28233. var value = attribute.value,
  28234. size = attribute.size;
  28235. var i = 0;
  28236. var _iteratorNormalCompletion3 = true;
  28237. var _didIteratorError3 = false;
  28238. var _iteratorError3 = undefined;
  28239. try {
  28240. for (var _iterator3 = data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  28241. var object = _step3.value;
  28242. var color = getSourceColor(object);
  28243. value[i + 0] = color[0];
  28244. value[i + 1] = color[1];
  28245. value[i + 2] = color[2];
  28246. value[i + 3] = isNaN(color[3]) ? 255 : color[3];
  28247. i += size;
  28248. }
  28249. } catch (err) {
  28250. _didIteratorError3 = true;
  28251. _iteratorError3 = err;
  28252. } finally {
  28253. try {
  28254. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  28255. _iterator3.return();
  28256. }
  28257. } finally {
  28258. if (_didIteratorError3) {
  28259. throw _iteratorError3;
  28260. }
  28261. }
  28262. }
  28263. }
  28264. }, {
  28265. key: 'calculateInstanceTargetColors',
  28266. value: function calculateInstanceTargetColors(attribute) {
  28267. var _props4 = this.props,
  28268. data = _props4.data,
  28269. getTargetColor = _props4.getTargetColor;
  28270. var value = attribute.value,
  28271. size = attribute.size;
  28272. var i = 0;
  28273. var _iteratorNormalCompletion4 = true;
  28274. var _didIteratorError4 = false;
  28275. var _iteratorError4 = undefined;
  28276. try {
  28277. for (var _iterator4 = data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
  28278. var object = _step4.value;
  28279. var color = getTargetColor(object);
  28280. value[i + 0] = color[0];
  28281. value[i + 1] = color[1];
  28282. value[i + 2] = color[2];
  28283. value[i + 3] = isNaN(color[3]) ? 255 : color[3];
  28284. i += size;
  28285. }
  28286. } catch (err) {
  28287. _didIteratorError4 = true;
  28288. _iteratorError4 = err;
  28289. } finally {
  28290. try {
  28291. if (!_iteratorNormalCompletion4 && _iterator4.return) {
  28292. _iterator4.return();
  28293. }
  28294. } finally {
  28295. if (_didIteratorError4) {
  28296. throw _iteratorError4;
  28297. }
  28298. }
  28299. }
  28300. }
  28301. }]);
  28302. return ArcLayer;
  28303. }(_core.Layer);
  28304. exports.default = ArcLayer;
  28305. ArcLayer.layerName = 'ArcLayer';
  28306. ArcLayer.defaultProps = defaultProps;
  28307. /***/ }),
  28308. /* 293 */
  28309. /***/ (function(module, exports, __webpack_require__) {
  28310. "use strict";
  28311. Object.defineProperty(exports, "__esModule", {
  28312. value: true
  28313. });
  28314. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  28315. var _core = __webpack_require__(13);
  28316. var _scatterplotLayer = __webpack_require__(176);
  28317. var _scatterplotLayer2 = _interopRequireDefault(_scatterplotLayer);
  28318. var _pathLayer = __webpack_require__(119);
  28319. var _pathLayer2 = _interopRequireDefault(_pathLayer);
  28320. var _solidPolygonLayer = __webpack_require__(177);
  28321. var _solidPolygonLayer2 = _interopRequireDefault(_solidPolygonLayer);
  28322. var _geojson = __webpack_require__(294);
  28323. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  28324. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  28325. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  28326. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  28327. //
  28328. // Permission is hereby granted, free of charge, to any person obtaining a copy
  28329. // of this software and associated documentation files (the "Software"), to deal
  28330. // in the Software without restriction, including without limitation the rights
  28331. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  28332. // copies of the Software, and to permit persons to whom the Software is
  28333. // furnished to do so, subject to the following conditions:
  28334. //
  28335. // The above copyright notice and this permission notice shall be included in
  28336. // all copies or substantial portions of the Software.
  28337. //
  28338. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28339. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  28340. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  28341. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28342. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28343. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  28344. // THE SOFTWARE.
  28345. var get = _core.experimental.get;
  28346. // Use primitive layer to avoid "Composite Composite" layers for now
  28347. var defaultLineColor = [0x0, 0x0, 0x0, 0xff];
  28348. var defaultFillColor = [0x0, 0x0, 0x0, 0xff];
  28349. var defaultProps = {
  28350. stroked: true,
  28351. filled: true,
  28352. extruded: false,
  28353. wireframe: false,
  28354. lineWidthScale: 1,
  28355. lineWidthMinPixels: 0,
  28356. lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,
  28357. lineJointRounded: false,
  28358. lineMiterLimit: 4,
  28359. elevationScale: 1,
  28360. pointRadiusScale: 1,
  28361. pointRadiusMinPixels: 0, // min point radius in pixels
  28362. pointRadiusMaxPixels: Number.MAX_SAFE_INTEGER, // max point radius in pixels
  28363. fp64: false,
  28364. // Line and polygon outline color
  28365. getLineColor: function getLineColor(f) {
  28366. return get(f, 'properties.lineColor') || defaultLineColor;
  28367. },
  28368. // Point and polygon fill color
  28369. getFillColor: function getFillColor(f) {
  28370. return get(f, 'properties.fillColor') || defaultFillColor;
  28371. },
  28372. // Point radius
  28373. getRadius: function getRadius(f) {
  28374. return get(f, 'properties.radius') || get(f, 'properties.size') || 1;
  28375. },
  28376. // Line and polygon outline accessors
  28377. getLineWidth: function getLineWidth(f) {
  28378. return get(f, 'properties.lineWidth') || 1;
  28379. },
  28380. // Polygon extrusion accessor
  28381. getElevation: function getElevation(f) {
  28382. return get(f, 'properties.elevation') || 1000;
  28383. },
  28384. subLayers: {
  28385. PointLayer: _scatterplotLayer2.default,
  28386. LineLayer: _pathLayer2.default,
  28387. PolygonLayer: _solidPolygonLayer2.default
  28388. },
  28389. // Optional settings for 'lighting' shader module
  28390. lightSettings: {
  28391. lightsPosition: [-122.45, 37.75, 8000, -122.0, 38.0, 5000],
  28392. ambientRatio: 0.05,
  28393. diffuseRatio: 0.6,
  28394. specularRatio: 0.8,
  28395. lightsStrength: [2.0, 0.0, 0.0, 0.0],
  28396. numberOfLights: 2
  28397. }
  28398. };
  28399. var getCoordinates = function getCoordinates(f) {
  28400. return f.geometry.coordinates;
  28401. };
  28402. var GeoJsonLayer = function (_CompositeLayer) {
  28403. _inherits(GeoJsonLayer, _CompositeLayer);
  28404. function GeoJsonLayer() {
  28405. _classCallCheck(this, GeoJsonLayer);
  28406. return _possibleConstructorReturn(this, (GeoJsonLayer.__proto__ || Object.getPrototypeOf(GeoJsonLayer)).apply(this, arguments));
  28407. }
  28408. _createClass(GeoJsonLayer, [{
  28409. key: 'initializeState',
  28410. value: function initializeState() {
  28411. this.state = {
  28412. features: {}
  28413. };
  28414. }
  28415. }, {
  28416. key: 'updateState',
  28417. value: function updateState(_ref) {
  28418. var oldProps = _ref.oldProps,
  28419. props = _ref.props,
  28420. changeFlags = _ref.changeFlags;
  28421. if (changeFlags.dataChanged) {
  28422. var data = this.props.data;
  28423. var features = (0, _geojson.getGeojsonFeatures)(data);
  28424. this.state.features = (0, _geojson.separateGeojsonFeatures)(features);
  28425. }
  28426. }
  28427. }, {
  28428. key: 'getPickingInfo',
  28429. value: function getPickingInfo(_ref2) {
  28430. var info = _ref2.info;
  28431. return Object.assign(info, {
  28432. // override object with picked feature
  28433. object: info.object && info.object.feature || info.object
  28434. });
  28435. }
  28436. /* eslint-disable complexity */
  28437. }, {
  28438. key: 'renderLayers',
  28439. value: function renderLayers() {
  28440. var features = this.state.features;
  28441. var pointFeatures = features.pointFeatures,
  28442. lineFeatures = features.lineFeatures,
  28443. polygonFeatures = features.polygonFeatures,
  28444. polygonOutlineFeatures = features.polygonOutlineFeatures;
  28445. // Layer composition props
  28446. var _props = this.props,
  28447. stroked = _props.stroked,
  28448. filled = _props.filled,
  28449. extruded = _props.extruded,
  28450. wireframe = _props.wireframe,
  28451. subLayers = _props.subLayers,
  28452. lightSettings = _props.lightSettings;
  28453. // Rendering props underlying layer
  28454. var _props2 = this.props,
  28455. lineWidthScale = _props2.lineWidthScale,
  28456. lineWidthMinPixels = _props2.lineWidthMinPixels,
  28457. lineWidthMaxPixels = _props2.lineWidthMaxPixels,
  28458. lineJointRounded = _props2.lineJointRounded,
  28459. lineMiterLimit = _props2.lineMiterLimit,
  28460. pointRadiusScale = _props2.pointRadiusScale,
  28461. pointRadiusMinPixels = _props2.pointRadiusMinPixels,
  28462. pointRadiusMaxPixels = _props2.pointRadiusMaxPixels,
  28463. elevationScale = _props2.elevationScale,
  28464. fp64 = _props2.fp64;
  28465. // Accessor props for underlying layers
  28466. var _props3 = this.props,
  28467. getLineColor = _props3.getLineColor,
  28468. getFillColor = _props3.getFillColor,
  28469. getRadius = _props3.getRadius,
  28470. getLineWidth = _props3.getLineWidth,
  28471. getElevation = _props3.getElevation,
  28472. updateTriggers = _props3.updateTriggers;
  28473. var drawPoints = pointFeatures && pointFeatures.length > 0;
  28474. var drawLines = lineFeatures && lineFeatures.length > 0;
  28475. var hasPolygonLines = polygonOutlineFeatures && polygonOutlineFeatures.length > 0;
  28476. var hasPolygon = polygonFeatures && polygonFeatures.length > 0;
  28477. // Filled Polygon Layer
  28478. var polygonFillLayer = filled && hasPolygon && new subLayers.PolygonLayer(this.getSubLayerProps({
  28479. id: 'polygon-fill',
  28480. updateTriggers: {
  28481. getElevation: updateTriggers.getElevation,
  28482. getColor: updateTriggers.getFillColor
  28483. }
  28484. }), {
  28485. data: polygonFeatures,
  28486. fp64: fp64,
  28487. extruded: extruded,
  28488. elevationScale: elevationScale,
  28489. wireframe: false,
  28490. lightSettings: lightSettings,
  28491. getPolygon: getCoordinates,
  28492. getElevation: getElevation,
  28493. getColor: getFillColor
  28494. });
  28495. var polygonWireframeLayer = wireframe && extruded && hasPolygon && new subLayers.PolygonLayer(this.getSubLayerProps({
  28496. id: 'polygon-wireframe',
  28497. updateTriggers: {
  28498. getElevation: updateTriggers.getElevation,
  28499. getColor: updateTriggers.getLineColor
  28500. }
  28501. }), {
  28502. data: polygonFeatures,
  28503. fp64: fp64,
  28504. extruded: extruded,
  28505. elevationScale: elevationScale,
  28506. wireframe: true,
  28507. getPolygon: getCoordinates,
  28508. getElevation: getElevation,
  28509. getColor: getLineColor
  28510. });
  28511. var polygonLineLayer = !extruded && stroked && hasPolygonLines && new subLayers.LineLayer(this.getSubLayerProps({
  28512. id: 'polygon-outline',
  28513. updateTriggers: {
  28514. getColor: updateTriggers.getLineColor,
  28515. getWidth: updateTriggers.getLineWidth
  28516. }
  28517. }), {
  28518. data: polygonOutlineFeatures,
  28519. fp64: fp64,
  28520. widthScale: lineWidthScale,
  28521. widthMinPixels: lineWidthMinPixels,
  28522. widthMaxPixels: lineWidthMaxPixels,
  28523. rounded: lineJointRounded,
  28524. miterLimit: lineMiterLimit,
  28525. getPath: getCoordinates,
  28526. getColor: getLineColor,
  28527. getWidth: getLineWidth
  28528. });
  28529. var pathLayer = drawLines && new subLayers.LineLayer(this.getSubLayerProps({
  28530. id: 'line-paths',
  28531. updateTriggers: {
  28532. getColor: updateTriggers.getLineColor,
  28533. getWidth: updateTriggers.getLineWidth
  28534. }
  28535. }), {
  28536. data: lineFeatures,
  28537. fp64: fp64,
  28538. widthScale: lineWidthScale,
  28539. widthMinPixels: lineWidthMinPixels,
  28540. widthMaxPixels: lineWidthMaxPixels,
  28541. rounded: lineJointRounded,
  28542. miterLimit: lineMiterLimit,
  28543. getPath: getCoordinates,
  28544. getColor: getLineColor,
  28545. getWidth: getLineWidth
  28546. });
  28547. var pointLayer = drawPoints && new subLayers.PointLayer(this.getSubLayerProps({
  28548. id: 'points',
  28549. updateTriggers: {
  28550. getColor: updateTriggers.getFillColor,
  28551. getRadius: updateTriggers.getRadius
  28552. }
  28553. }), {
  28554. data: pointFeatures,
  28555. fp64: fp64,
  28556. radiusScale: pointRadiusScale,
  28557. radiusMinPixels: pointRadiusMinPixels,
  28558. radiusMaxPixels: pointRadiusMaxPixels,
  28559. getPosition: getCoordinates,
  28560. getColor: getFillColor,
  28561. getRadius: getRadius
  28562. });
  28563. return [
  28564. // If not extruded: flat fill layer is drawn below outlines
  28565. !extruded && polygonFillLayer, polygonWireframeLayer, polygonLineLayer, pathLayer, pointLayer,
  28566. // If extruded: draw fill layer last for correct blending behavior
  28567. extruded && polygonFillLayer];
  28568. }
  28569. /* eslint-enable complexity */
  28570. }]);
  28571. return GeoJsonLayer;
  28572. }(_core.CompositeLayer);
  28573. exports.default = GeoJsonLayer;
  28574. GeoJsonLayer.layerName = 'GeoJsonLayer';
  28575. GeoJsonLayer.defaultProps = defaultProps;
  28576. /***/ }),
  28577. /* 294 */
  28578. /***/ (function(module, exports, __webpack_require__) {
  28579. "use strict";
  28580. Object.defineProperty(exports, "__esModule", {
  28581. value: true
  28582. });
  28583. exports.getGeojsonFeatures = getGeojsonFeatures;
  28584. exports.separateGeojsonFeatures = separateGeojsonFeatures;
  28585. var _assert = __webpack_require__(1);
  28586. var _assert2 = _interopRequireDefault(_assert);
  28587. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  28588. /**
  28589. * "Normalizes" complete or partial GeoJSON data into iterable list of features
  28590. * Can accept GeoJSON geometry or "Feature", "FeatureCollection" in addition
  28591. * to plain arrays and iterables.
  28592. * Works by extracting the feature array or wrapping single objects in an array,
  28593. * so that subsequent code can simply iterate over features.
  28594. *
  28595. * @param {object} geojson - geojson data
  28596. * @param {Object|Array} data - geojson object (FeatureCollection, Feature or
  28597. * Geometry) or array of features
  28598. * @return {Array|"iteratable"} - iterable list of features
  28599. */
  28600. function getGeojsonFeatures(geojson) {
  28601. // If array, assume this is a list of features
  28602. if (Array.isArray(geojson)) {
  28603. return geojson;
  28604. }
  28605. (0, _assert2.default)(geojson.type, 'GeoJSON does not have type');
  28606. switch (geojson.type) {
  28607. case 'GeometryCollection':
  28608. (0, _assert2.default)(Array.isArray(geojson.geometries), 'GeoJSON does not have geometries array');
  28609. return geojson.geometries.map(function (geometry) {
  28610. return { geometry: geometry };
  28611. });
  28612. case 'Feature':
  28613. // Wrap the feature in a 'Features' array
  28614. return [geojson];
  28615. case 'FeatureCollection':
  28616. // Just return the 'Features' array from the collection
  28617. (0, _assert2.default)(Array.isArray(geojson.features), 'GeoJSON does not have features array');
  28618. return geojson.features;
  28619. default:
  28620. // Assume it's a geometry, we'll check type in separateGeojsonFeatures
  28621. // Wrap the geometry object in a 'Feature' object and wrap in an array
  28622. return [{ geometry: geojson }];
  28623. }
  28624. }
  28625. // Linearize
  28626. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  28627. //
  28628. // Permission is hereby granted, free of charge, to any person obtaining a copy
  28629. // of this software and associated documentation files (the "Software"), to deal
  28630. // in the Software without restriction, including without limitation the rights
  28631. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  28632. // copies of the Software, and to permit persons to whom the Software is
  28633. // furnished to do so, subject to the following conditions:
  28634. //
  28635. // The above copyright notice and this permission notice shall be included in
  28636. // all copies or substantial portions of the Software.
  28637. //
  28638. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28639. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  28640. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  28641. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28642. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28643. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  28644. // THE SOFTWARE.
  28645. function separateGeojsonFeatures(features) {
  28646. var pointFeatures = [];
  28647. var lineFeatures = [];
  28648. var polygonFeatures = [];
  28649. var polygonOutlineFeatures = [];
  28650. features.forEach(function (feature) {
  28651. (0, _assert2.default)(feature && feature.geometry, 'GeoJSON does not have geometry');
  28652. var _feature$geometry = feature.geometry,
  28653. type = _feature$geometry.type,
  28654. coordinates = _feature$geometry.coordinates,
  28655. properties = feature.properties;
  28656. checkCoordinates(type, coordinates);
  28657. switch (type) {
  28658. case 'Point':
  28659. pointFeatures.push(feature);
  28660. break;
  28661. case 'MultiPoint':
  28662. // TODO - split multipoints
  28663. coordinates.forEach(function (point) {
  28664. pointFeatures.push({ geometry: { coordinates: point }, properties: properties, feature: feature });
  28665. });
  28666. break;
  28667. case 'LineString':
  28668. lineFeatures.push(feature);
  28669. break;
  28670. case 'MultiLineString':
  28671. // Break multilinestrings into multiple lines with same properties
  28672. coordinates.forEach(function (path) {
  28673. lineFeatures.push({ geometry: { coordinates: path }, properties: properties, feature: feature });
  28674. });
  28675. break;
  28676. case 'Polygon':
  28677. polygonFeatures.push(feature);
  28678. // Break polygon into multiple lines with same properties
  28679. coordinates.forEach(function (path) {
  28680. polygonOutlineFeatures.push({ geometry: { coordinates: path }, properties: properties, feature: feature });
  28681. });
  28682. break;
  28683. case 'MultiPolygon':
  28684. // Break multipolygons into multiple polygons with same properties
  28685. coordinates.forEach(function (polygon) {
  28686. polygonFeatures.push({ geometry: { coordinates: polygon }, properties: properties, feature: feature });
  28687. // Break polygon into multiple lines with same properties
  28688. polygon.forEach(function (path) {
  28689. polygonOutlineFeatures.push({ geometry: { coordinates: path }, properties: properties, feature: feature });
  28690. });
  28691. });
  28692. break;
  28693. default:
  28694. }
  28695. });
  28696. return {
  28697. pointFeatures: pointFeatures,
  28698. lineFeatures: lineFeatures,
  28699. polygonFeatures: polygonFeatures,
  28700. polygonOutlineFeatures: polygonOutlineFeatures
  28701. };
  28702. }
  28703. /**
  28704. * Simple GeoJSON validation util. For perf reasons we do not validate against the full spec,
  28705. * only the following:
  28706. - geometry.type is supported
  28707. - geometry.coordinate has correct nesting level
  28708. */
  28709. var COORDINATE_NEST_LEVEL = {
  28710. Point: 1,
  28711. MultiPoint: 2,
  28712. LineString: 2,
  28713. MultiLineString: 3,
  28714. Polygon: 3,
  28715. MultiPolygon: 4
  28716. };
  28717. function checkCoordinates(type, coordinates) {
  28718. var nestLevel = COORDINATE_NEST_LEVEL[type];
  28719. (0, _assert2.default)(nestLevel, 'Unknown GeoJSON type ' + type);
  28720. while (coordinates && --nestLevel > 0) {
  28721. coordinates = coordinates[0];
  28722. }
  28723. (0, _assert2.default)(coordinates && Number.isFinite(coordinates[0]), type + ' coordinates are malformed');
  28724. }
  28725. /***/ }),
  28726. /* 295 */
  28727. /***/ (function(module, exports, __webpack_require__) {
  28728. "use strict";
  28729. Object.defineProperty(exports, "__esModule", {
  28730. value: true
  28731. });
  28732. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  28733. //
  28734. // Permission is hereby granted, free of charge, to any person obtaining a copy
  28735. // of this software and associated documentation files (the "Software"), to deal
  28736. // in the Software without restriction, including without limitation the rights
  28737. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  28738. // copies of the Software, and to permit persons to whom the Software is
  28739. // furnished to do so, subject to the following conditions:
  28740. //
  28741. // The above copyright notice and this permission notice shall be included in
  28742. // all copies or substantial portions of the Software.
  28743. //
  28744. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28745. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  28746. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  28747. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28748. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28749. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  28750. // THE SOFTWARE.
  28751. exports.default = "#define SHADER_NAME grid-cell-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 vColor;\n\nvoid main(void) {\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  28752. /***/ }),
  28753. /* 296 */
  28754. /***/ (function(module, exports, __webpack_require__) {
  28755. "use strict";
  28756. Object.defineProperty(exports, "__esModule", {
  28757. value: true
  28758. });
  28759. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  28760. //
  28761. // Permission is hereby granted, free of charge, to any person obtaining a copy
  28762. // of this software and associated documentation files (the "Software"), to deal
  28763. // in the Software without restriction, including without limitation the rights
  28764. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  28765. // copies of the Software, and to permit persons to whom the Software is
  28766. // furnished to do so, subject to the following conditions:
  28767. //
  28768. // The above copyright notice and this permission notice shall be included in
  28769. // all copies or substantial portions of the Software.
  28770. //
  28771. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28772. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  28773. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  28774. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28775. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28776. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  28777. // THE SOFTWARE.
  28778. // Inspired by screen-grid-layer vertex shader in deck.gl
  28779. exports.default = "#define SHADER_NAME grid-cell-layer-vertex-shader-64\n\nattribute vec3 positions;\nattribute vec3 normals;\n\nattribute vec4 instancePositions;\nattribute vec2 instancePositions64xyLow;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\n// Custom uniforms\nuniform float extruded;\nuniform float cellSize;\nuniform float coverage;\nuniform float opacity;\nuniform float elevationScale;\n\n// A magic number to scale elevation so that 1 unit approximate to 1 meter\n#define ELEVATION_SCALE 0.8\n\n// Result\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 instancePositions64xy = vec4(\n instancePositions.x,\n instancePositions64xyLow.x,\n instancePositions.y,\n instancePositions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(instancePositions64xy, projected_coord_xy);\n\n // if ahpha == 0.0 or z < 0.0, do not render element\n float noRender = float(instanceColors.a == 0.0 || instancePositions.w < 0.0);\n float finalCellSize = cellSize * mix(1.0, 0.0, noRender);\n\n projected_coord_xy[0] = sum_fp64(projected_coord_xy[0],\n vec2((positions.x * coverage + 1.0) * finalCellSize / 2.0, 0.0));\n projected_coord_xy[1] = sum_fp64(projected_coord_xy[1],\n vec2((positions.y * coverage - 1.0) * finalCellSize / 2.0, 0.0));\n\n float elevation = 0.0;\n\n if (extruded > 0.5) {\n elevation = project_scale(instancePositions.w * (positions.z + 1.0) *\n ELEVATION_SCALE * elevationScale) + 1.0;\n }\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = projected_coord_xy[0];\n vertex_pos_modelspace[1] = projected_coord_xy[1];\n vertex_pos_modelspace[2] = vec2(elevation, 0.0);\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n vec4 position_worldspace = vec4(\n vertex_pos_modelspace[0].x, vertex_pos_modelspace[1].x,\n vertex_pos_modelspace[2].x, vertex_pos_modelspace[3].x);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace);\n\n float lightWeight = 1.0;\n\n if (extruded > 0.5) {\n lightWeight = getLightWeight(\n position_worldspace.xyz, // the w component is always 1.0\n normals\n );\n }\n\n vec3 lightWeightedColor = lightWeight * instanceColors.rgb;\n vec4 color = vec4(lightWeightedColor, instanceColors.a * opacity) / 255.0;\n vColor = color;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  28780. /***/ }),
  28781. /* 297 */
  28782. /***/ (function(module, exports, __webpack_require__) {
  28783. "use strict";
  28784. Object.defineProperty(exports, "__esModule", {
  28785. value: true
  28786. });
  28787. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  28788. //
  28789. // Permission is hereby granted, free of charge, to any person obtaining a copy
  28790. // of this software and associated documentation files (the "Software"), to deal
  28791. // in the Software without restriction, including without limitation the rights
  28792. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  28793. // copies of the Software, and to permit persons to whom the Software is
  28794. // furnished to do so, subject to the following conditions:
  28795. //
  28796. // The above copyright notice and this permission notice shall be included in
  28797. // all copies or substantial portions of the Software.
  28798. //
  28799. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28800. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  28801. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  28802. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28803. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28804. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  28805. // THE SOFTWARE.
  28806. // Inspired by screen-grid-layer vertex shader in deck.gl
  28807. exports.default = "#define SHADER_NAME grid-cell-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 normals;\n\nattribute vec4 instancePositions;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\n// Custom uniforms\nuniform float extruded;\nuniform float cellSize;\nuniform float coverage;\nuniform float opacity;\nuniform float elevationScale;\n\n// A magic number to scale elevation so that 1 unit approximate to 1 meter\n#define ELEVATION_SCALE 0.8\n\n// Result\nvarying vec4 vColor;\n\nvoid main(void) {\n\n vec2 topLeftPos = project_position(instancePositions.xy);\n\n // if ahpha == 0.0 or z < 0.0, do not render element\n float noRender = float(instanceColors.a == 0.0 || instancePositions.w < 0.0);\n float finalCellSize = cellSize * mix(1.0, 0.0, noRender);\n\n // cube gemoetry vertics are between -1 to 1, scale and transform it to between 0, 1\n vec2 pos = topLeftPos + vec2(\n (positions.x * coverage + 1.0) / 2.0 * finalCellSize,\n (positions.y * coverage - 1.0) / 2.0 * finalCellSize);\n\n float elevation = 0.0;\n\n if (extruded > 0.5) {\n elevation = project_scale(instancePositions.w * (positions.z + 1.0) *\n ELEVATION_SCALE * elevationScale);\n }\n\n // extrude positions\n vec3 extrudedPosition = vec3(pos.xy, elevation + 1.0);\n vec4 position_worldspace = vec4(extrudedPosition, 1.0);\n gl_Position = project_to_clipspace(position_worldspace);\n\n float lightWeight = 1.0;\n\n if (extruded > 0.5) {\n lightWeight = getLightWeight(\n position_worldspace.xyz, // the w component is always 1.0\n normals\n );\n }\n\n vec3 lightWeightedColor = lightWeight * instanceColors.rgb;\n vec4 color = vec4(lightWeightedColor, instanceColors.a * opacity) / 255.0;\n vColor = color;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  28808. /***/ }),
  28809. /* 298 */
  28810. /***/ (function(module, exports, __webpack_require__) {
  28811. "use strict";
  28812. Object.defineProperty(exports, "__esModule", {
  28813. value: true
  28814. });
  28815. exports.pointToDensityGridData = pointToDensityGridData;
  28816. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  28817. //
  28818. // Permission is hereby granted, free of charge, to any person obtaining a copy
  28819. // of this software and associated documentation files (the "Software"), to deal
  28820. // in the Software without restriction, including without limitation the rights
  28821. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  28822. // copies of the Software, and to permit persons to whom the Software is
  28823. // furnished to do so, subject to the following conditions:
  28824. //
  28825. // The above copyright notice and this permission notice shall be included in
  28826. // all copies or substantial portions of the Software.
  28827. //
  28828. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28829. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  28830. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  28831. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28832. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28833. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  28834. // THE SOFTWARE.
  28835. var R_EARTH = 6378000;
  28836. /**
  28837. * Calculate density grid from an array of points
  28838. * @param {array} points
  28839. * @param {number} cellSize - cell size in meters
  28840. * @param {function} getPosition - position accessor
  28841. * @returns {object} - grid data, cell dimension
  28842. */
  28843. function pointToDensityGridData(points, cellSize, getPosition) {
  28844. var _pointsToGridHashing2 = _pointsToGridHashing(points, cellSize, getPosition),
  28845. gridHash = _pointsToGridHashing2.gridHash,
  28846. gridOffset = _pointsToGridHashing2.gridOffset;
  28847. var layerData = _getGridLayerDataFromGridHash(gridHash, gridOffset);
  28848. return {
  28849. gridOffset: gridOffset,
  28850. layerData: layerData
  28851. };
  28852. }
  28853. /**
  28854. * Project points into each cell, return a hash table of cells
  28855. * @param {array} points
  28856. * @param {number} cellSize - unit size in meters
  28857. * @param {function} getPosition - position accessor
  28858. * @returns {object} - grid hash and cell dimension
  28859. */
  28860. function _pointsToGridHashing() {
  28861. var points = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  28862. var cellSize = arguments[1];
  28863. var getPosition = arguments[2];
  28864. // find the geometric center of sample points
  28865. var latMin = Infinity;
  28866. var latMax = -Infinity;
  28867. var pLat = void 0;
  28868. for (var p = 0; p < points.length; p++) {
  28869. pLat = getPosition(points[p])[1];
  28870. if (Number.isFinite(pLat)) {
  28871. latMin = pLat < latMin ? pLat : latMin;
  28872. latMax = pLat > latMax ? pLat : latMax;
  28873. }
  28874. }
  28875. var centerLat = (latMin + latMax) / 2;
  28876. var gridOffset = _calculateGridLatLonOffset(cellSize, centerLat);
  28877. if (gridOffset.xOffset <= 0 || gridOffset.yOffset <= 0) {
  28878. return { gridHash: {}, gridOffset: gridOffset };
  28879. }
  28880. // calculate count per cell
  28881. var gridHash = points.reduce(function (accu, pt) {
  28882. var lat = getPosition(pt)[1];
  28883. var lng = getPosition(pt)[0];
  28884. if (!Number.isFinite(lat) || !Number.isFinite(lng)) {
  28885. return accu;
  28886. }
  28887. var latIdx = Math.floor((lat + 90) / gridOffset.yOffset);
  28888. var lonIdx = Math.floor((lng + 180) / gridOffset.xOffset);
  28889. var key = latIdx + '-' + lonIdx;
  28890. accu[key] = accu[key] || { count: 0, points: [] };
  28891. accu[key].count += 1;
  28892. accu[key].points.push(pt);
  28893. return accu;
  28894. }, {});
  28895. return { gridHash: gridHash, gridOffset: gridOffset };
  28896. }
  28897. function _getGridLayerDataFromGridHash(gridHash, gridOffset) {
  28898. return Object.keys(gridHash).reduce(function (accu, key, i) {
  28899. var idxs = key.split('-');
  28900. var latIdx = parseInt(idxs[0], 10);
  28901. var lonIdx = parseInt(idxs[1], 10);
  28902. accu.push(Object.assign({
  28903. index: i,
  28904. position: [-180 + gridOffset.xOffset * lonIdx, -90 + gridOffset.yOffset * latIdx]
  28905. }, gridHash[key]));
  28906. return accu;
  28907. }, []);
  28908. }
  28909. /**
  28910. * calculate grid layer cell size in lat lon based on world unit size
  28911. * and current latitude
  28912. * @param {number} cellSize
  28913. * @param {number} latitude
  28914. * @returns {object} - lat delta and lon delta
  28915. */
  28916. function _calculateGridLatLonOffset(cellSize, latitude) {
  28917. var yOffset = _calculateLatOffset(cellSize);
  28918. var xOffset = _calculateLonOffset(latitude, cellSize);
  28919. return { yOffset: yOffset, xOffset: xOffset };
  28920. }
  28921. /**
  28922. * with a given x-km change, calculate the increment of latitude
  28923. * based on stackoverflow http://stackoverflow.com/questions/7477003
  28924. * @param {number} dy - change in km
  28925. * @return {number} - increment in latitude
  28926. */
  28927. function _calculateLatOffset(dy) {
  28928. return dy / R_EARTH * (180 / Math.PI);
  28929. }
  28930. /**
  28931. * with a given x-km change, and current latitude
  28932. * calculate the increment of longitude
  28933. * based on stackoverflow http://stackoverflow.com/questions/7477003
  28934. * @param {number} lat - latitude of current location (based on city)
  28935. * @param {number} dx - change in km
  28936. * @return {number} - increment in longitude
  28937. */
  28938. function _calculateLonOffset(lat, dx) {
  28939. return dx / R_EARTH * (180 / Math.PI) / Math.cos(lat * Math.PI / 180);
  28940. }
  28941. /***/ }),
  28942. /* 299 */
  28943. /***/ (function(module, exports, __webpack_require__) {
  28944. "use strict";
  28945. Object.defineProperty(exports, "__esModule", {
  28946. value: true
  28947. });
  28948. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  28949. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  28950. var _core = __webpack_require__(13);
  28951. var _gridCellLayer = __webpack_require__(174);
  28952. var _gridCellLayer2 = _interopRequireDefault(_gridCellLayer);
  28953. var _gridAggregator = __webpack_require__(298);
  28954. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  28955. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  28956. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  28957. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  28958. //
  28959. // Permission is hereby granted, free of charge, to any person obtaining a copy
  28960. // of this software and associated documentation files (the "Software"), to deal
  28961. // in the Software without restriction, including without limitation the rights
  28962. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  28963. // copies of the Software, and to permit persons to whom the Software is
  28964. // furnished to do so, subject to the following conditions:
  28965. //
  28966. // The above copyright notice and this permission notice shall be included in
  28967. // all copies or substantial portions of the Software.
  28968. //
  28969. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28970. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  28971. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  28972. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28973. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28974. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  28975. // THE SOFTWARE.
  28976. var BinSorter = _core.experimental.BinSorter,
  28977. defaultColorRange = _core.experimental.defaultColorRange,
  28978. getQuantizeScale = _core.experimental.getQuantizeScale,
  28979. getLinearScale = _core.experimental.getLinearScale;
  28980. function nop() {}
  28981. var defaultProps = {
  28982. // color
  28983. colorDomain: null,
  28984. colorRange: defaultColorRange,
  28985. getColorValue: function getColorValue(points) {
  28986. return points.length;
  28987. },
  28988. lowerPercentile: 0,
  28989. upperPercentile: 100,
  28990. onSetColorDomain: nop,
  28991. // elevation
  28992. elevationDomain: null,
  28993. elevationRange: [0, 1000],
  28994. getElevationValue: function getElevationValue(points) {
  28995. return points.length;
  28996. },
  28997. elevationLowerPercentile: 0,
  28998. elevationUpperPercentile: 100,
  28999. elevationScale: 1,
  29000. onSetElevationDomain: nop,
  29001. // grid
  29002. cellSize: 1000,
  29003. coverage: 1,
  29004. getPosition: function getPosition(x) {
  29005. return x.position;
  29006. },
  29007. extruded: false,
  29008. fp64: false,
  29009. // Optional settings for 'lighting' shader module
  29010. lightSettings: {
  29011. lightsPosition: [-122.45, 37.75, 8000, -122.0, 38.0, 5000],
  29012. ambientRatio: 0.05,
  29013. diffuseRatio: 0.6,
  29014. specularRatio: 0.8,
  29015. lightsStrength: [2.0, 0.0, 0.0, 0.0],
  29016. numberOfLights: 2
  29017. }
  29018. };
  29019. var GridLayer = function (_CompositeLayer) {
  29020. _inherits(GridLayer, _CompositeLayer);
  29021. function GridLayer() {
  29022. _classCallCheck(this, GridLayer);
  29023. return _possibleConstructorReturn(this, (GridLayer.__proto__ || Object.getPrototypeOf(GridLayer)).apply(this, arguments));
  29024. }
  29025. _createClass(GridLayer, [{
  29026. key: 'initializeState',
  29027. value: function initializeState() {
  29028. this.state = {
  29029. layerData: [],
  29030. sortedColorBins: null,
  29031. sortedElevationBins: null,
  29032. colorValueDomain: null,
  29033. elevationValueDomain: null,
  29034. colorScaleFunc: nop,
  29035. elevationScaleFunc: nop,
  29036. dimensionUpdaters: this.getDimensionUpdaters()
  29037. };
  29038. }
  29039. }, {
  29040. key: 'updateState',
  29041. value: function updateState(_ref) {
  29042. var _this2 = this;
  29043. var oldProps = _ref.oldProps,
  29044. props = _ref.props,
  29045. changeFlags = _ref.changeFlags;
  29046. var dimensionChanges = this.getDimensionChanges(oldProps, props);
  29047. if (changeFlags.dataChanged || this.needsReProjectPoints(oldProps, props)) {
  29048. // project data into hexagons, and get sortedBins
  29049. this.getLayerData();
  29050. } else if (dimensionChanges) {
  29051. dimensionChanges.forEach(function (f) {
  29052. return typeof f === 'function' && f.apply(_this2);
  29053. });
  29054. }
  29055. }
  29056. }, {
  29057. key: 'needsReProjectPoints',
  29058. value: function needsReProjectPoints(oldProps, props) {
  29059. return oldProps.cellSize !== props.cellSize;
  29060. }
  29061. }, {
  29062. key: 'getDimensionUpdaters',
  29063. value: function getDimensionUpdaters() {
  29064. // dimension updaters are sequential,
  29065. // if the first one needs to be called, the 2nd and 3rd one will automatically
  29066. // be called. e.g. if ColorValue needs to be updated, getColorValueDomain and getColorScale
  29067. // will automatically be called
  29068. return {
  29069. getColor: [{
  29070. id: 'value',
  29071. triggers: ['getColorValue'],
  29072. updater: this.getSortedColorBins
  29073. }, {
  29074. id: 'domain',
  29075. triggers: ['lowerPercentile', 'upperPercentile'],
  29076. updater: this.getColorValueDomain
  29077. }, {
  29078. id: 'scaleFunc',
  29079. triggers: ['colorDomain', 'colorRange'],
  29080. updater: this.getColorScale
  29081. }],
  29082. getElevation: [{
  29083. id: 'value',
  29084. triggers: ['getElevationValue'],
  29085. updater: this.getSortedElevationBins
  29086. }, {
  29087. id: 'domain',
  29088. triggers: ['elevationLowerPercentile', 'elevationUpperPercentile'],
  29089. updater: this.getElevationValueDomain
  29090. }, {
  29091. id: 'scaleFunc',
  29092. triggers: ['elevationDomain', 'elevationRange'],
  29093. updater: this.getElevationScale
  29094. }]
  29095. };
  29096. }
  29097. }, {
  29098. key: 'getDimensionChanges',
  29099. value: function getDimensionChanges(oldProps, props) {
  29100. var dimensionUpdaters = this.state.dimensionUpdaters;
  29101. var updaters = [];
  29102. // get dimension to be updated
  29103. for (var dimensionKey in dimensionUpdaters) {
  29104. // return the first triggered updater for each dimension
  29105. var needUpdate = dimensionUpdaters[dimensionKey].find(function (item) {
  29106. return item.triggers.some(function (t) {
  29107. return oldProps[t] !== props[t];
  29108. });
  29109. });
  29110. if (needUpdate) {
  29111. updaters.push(needUpdate.updater);
  29112. }
  29113. }
  29114. return updaters.length ? updaters : null;
  29115. }
  29116. }, {
  29117. key: 'getPickingInfo',
  29118. value: function getPickingInfo(_ref2) {
  29119. var info = _ref2.info;
  29120. var _state = this.state,
  29121. sortedColorBins = _state.sortedColorBins,
  29122. sortedElevationBins = _state.sortedElevationBins;
  29123. var isPicked = info.picked && info.index > -1;
  29124. var object = null;
  29125. if (isPicked) {
  29126. var cell = this.state.layerData[info.index];
  29127. var colorValue = sortedColorBins.binMap[cell.index] && sortedColorBins.binMap[cell.index].value;
  29128. var elevationValue = sortedElevationBins.binMap[cell.index] && sortedElevationBins.binMap[cell.index].value;
  29129. object = Object.assign({
  29130. colorValue: colorValue,
  29131. elevationValue: elevationValue
  29132. }, cell);
  29133. }
  29134. // add bin colorValue and elevationValue to info
  29135. return Object.assign(info, {
  29136. picked: Boolean(object),
  29137. // override object with picked cell
  29138. object: object
  29139. });
  29140. }
  29141. }, {
  29142. key: 'getUpdateTriggers',
  29143. value: function getUpdateTriggers() {
  29144. var _this3 = this;
  29145. var dimensionUpdaters = this.state.dimensionUpdaters;
  29146. // merge all dimension triggers
  29147. var updateTriggers = {};
  29148. var _loop = function _loop(dimensionKey) {
  29149. updateTriggers[dimensionKey] = {};
  29150. var _iteratorNormalCompletion = true;
  29151. var _didIteratorError = false;
  29152. var _iteratorError = undefined;
  29153. try {
  29154. for (var _iterator = dimensionUpdaters[dimensionKey][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  29155. var step = _step.value;
  29156. step.triggers.forEach(function (prop) {
  29157. updateTriggers[dimensionKey][prop] = _this3.props[prop];
  29158. });
  29159. }
  29160. } catch (err) {
  29161. _didIteratorError = true;
  29162. _iteratorError = err;
  29163. } finally {
  29164. try {
  29165. if (!_iteratorNormalCompletion && _iterator.return) {
  29166. _iterator.return();
  29167. }
  29168. } finally {
  29169. if (_didIteratorError) {
  29170. throw _iteratorError;
  29171. }
  29172. }
  29173. }
  29174. };
  29175. for (var dimensionKey in dimensionUpdaters) {
  29176. _loop(dimensionKey);
  29177. }
  29178. return updateTriggers;
  29179. }
  29180. }, {
  29181. key: 'getLayerData',
  29182. value: function getLayerData() {
  29183. var _props = this.props,
  29184. data = _props.data,
  29185. cellSize = _props.cellSize,
  29186. getPosition = _props.getPosition;
  29187. var _pointToDensityGridDa = (0, _gridAggregator.pointToDensityGridData)(data, cellSize, getPosition),
  29188. layerData = _pointToDensityGridDa.layerData;
  29189. this.setState({ layerData: layerData });
  29190. this.getSortedBins();
  29191. }
  29192. }, {
  29193. key: 'getValueDomain',
  29194. value: function getValueDomain() {
  29195. this.getColorValueDomain();
  29196. this.getElevationValueDomain();
  29197. }
  29198. }, {
  29199. key: 'getSortedBins',
  29200. value: function getSortedBins() {
  29201. this.getSortedColorBins();
  29202. this.getSortedElevationBins();
  29203. }
  29204. }, {
  29205. key: 'getSortedColorBins',
  29206. value: function getSortedColorBins() {
  29207. var getColorValue = this.props.getColorValue;
  29208. var sortedColorBins = new BinSorter(this.state.layerData || [], getColorValue);
  29209. this.setState({ sortedColorBins: sortedColorBins });
  29210. this.getColorValueDomain();
  29211. }
  29212. }, {
  29213. key: 'getSortedElevationBins',
  29214. value: function getSortedElevationBins() {
  29215. var getElevationValue = this.props.getElevationValue;
  29216. var sortedElevationBins = new BinSorter(this.state.layerData || [], getElevationValue);
  29217. this.setState({ sortedElevationBins: sortedElevationBins });
  29218. this.getElevationValueDomain();
  29219. }
  29220. }, {
  29221. key: 'getColorValueDomain',
  29222. value: function getColorValueDomain() {
  29223. var _props2 = this.props,
  29224. lowerPercentile = _props2.lowerPercentile,
  29225. upperPercentile = _props2.upperPercentile,
  29226. onSetColorDomain = _props2.onSetColorDomain;
  29227. this.state.colorValueDomain = this.state.sortedColorBins.getValueRange([lowerPercentile, upperPercentile]);
  29228. if (typeof onSetColorDomain === 'function') {
  29229. onSetColorDomain(this.state.colorValueDomain);
  29230. }
  29231. this.getColorScale();
  29232. }
  29233. }, {
  29234. key: 'getElevationValueDomain',
  29235. value: function getElevationValueDomain() {
  29236. var _props3 = this.props,
  29237. elevationLowerPercentile = _props3.elevationLowerPercentile,
  29238. elevationUpperPercentile = _props3.elevationUpperPercentile,
  29239. onSetElevationDomain = _props3.onSetElevationDomain;
  29240. this.state.elevationValueDomain = this.state.sortedElevationBins.getValueRange([elevationLowerPercentile, elevationUpperPercentile]);
  29241. if (typeof onSetElevationDomain === 'function') {
  29242. onSetElevationDomain(this.state.elevationValueDomain);
  29243. }
  29244. this.getElevationScale();
  29245. }
  29246. }, {
  29247. key: 'getColorScale',
  29248. value: function getColorScale() {
  29249. var colorRange = this.props.colorRange;
  29250. var colorDomain = this.props.colorDomain || this.state.colorValueDomain;
  29251. this.state.colorScaleFunc = getQuantizeScale(colorDomain, colorRange);
  29252. }
  29253. }, {
  29254. key: 'getElevationScale',
  29255. value: function getElevationScale() {
  29256. var elevationRange = this.props.elevationRange;
  29257. var elevationDomain = this.props.elevationDomain || this.state.elevationValueDomain;
  29258. this.state.elevationScaleFunc = getLinearScale(elevationDomain, elevationRange);
  29259. }
  29260. }, {
  29261. key: '_onGetSublayerColor',
  29262. value: function _onGetSublayerColor(cell) {
  29263. var _state2 = this.state,
  29264. sortedColorBins = _state2.sortedColorBins,
  29265. colorScaleFunc = _state2.colorScaleFunc,
  29266. colorValueDomain = _state2.colorValueDomain;
  29267. var cv = sortedColorBins.binMap[cell.index] && sortedColorBins.binMap[cell.index].value;
  29268. var colorDomain = this.props.colorDomain || colorValueDomain;
  29269. var isColorValueInDomain = cv >= colorDomain[0] && cv <= colorDomain[colorDomain.length - 1];
  29270. // if cell value is outside domain, set alpha to 0
  29271. var color = isColorValueInDomain ? colorScaleFunc(cv) : [0, 0, 0, 0];
  29272. // add alpha to color if not defined in colorRange
  29273. color[3] = Number.isFinite(color[3]) ? color[3] : 255;
  29274. return color;
  29275. }
  29276. }, {
  29277. key: '_onGetSublayerElevation',
  29278. value: function _onGetSublayerElevation(cell) {
  29279. var _state3 = this.state,
  29280. sortedElevationBins = _state3.sortedElevationBins,
  29281. elevationScaleFunc = _state3.elevationScaleFunc,
  29282. elevationValueDomain = _state3.elevationValueDomain;
  29283. var ev = sortedElevationBins.binMap[cell.index] && sortedElevationBins.binMap[cell.index].value;
  29284. var elevationDomain = this.props.elevationDomain || elevationValueDomain;
  29285. var isElevationValueInDomain = ev >= elevationDomain[0] && ev <= elevationDomain[elevationDomain.length - 1];
  29286. // if cell value is outside domain, set elevation to -1
  29287. return isElevationValueInDomain ? elevationScaleFunc(ev) : -1;
  29288. }
  29289. // for subclassing, override this method to return
  29290. // customized sub layer props
  29291. }, {
  29292. key: 'getSubLayerProps',
  29293. value: function getSubLayerProps() {
  29294. var _props4 = this.props,
  29295. elevationScale = _props4.elevationScale,
  29296. fp64 = _props4.fp64,
  29297. extruded = _props4.extruded,
  29298. cellSize = _props4.cellSize,
  29299. coverage = _props4.coverage,
  29300. lightSettings = _props4.lightSettings;
  29301. // return props to the sublayer constructor
  29302. return _get(GridLayer.prototype.__proto__ || Object.getPrototypeOf(GridLayer.prototype), 'getSubLayerProps', this).call(this, {
  29303. id: 'grid-cell',
  29304. data: this.state.layerData,
  29305. fp64: fp64,
  29306. cellSize: cellSize,
  29307. coverage: coverage,
  29308. lightSettings: lightSettings,
  29309. elevationScale: elevationScale,
  29310. extruded: extruded,
  29311. getColor: this._onGetSublayerColor.bind(this),
  29312. getElevation: this._onGetSublayerElevation.bind(this),
  29313. updateTriggers: this.getUpdateTriggers()
  29314. });
  29315. }
  29316. // for subclassing, override this method to return
  29317. // customized sub layer class
  29318. }, {
  29319. key: 'getSubLayerClass',
  29320. value: function getSubLayerClass() {
  29321. return _gridCellLayer2.default;
  29322. }
  29323. }, {
  29324. key: 'renderLayers',
  29325. value: function renderLayers() {
  29326. var SubLayerClass = this.getSubLayerClass();
  29327. return new SubLayerClass(this.getSubLayerProps());
  29328. }
  29329. }]);
  29330. return GridLayer;
  29331. }(_core.CompositeLayer);
  29332. exports.default = GridLayer;
  29333. GridLayer.layerName = 'GridLayer';
  29334. GridLayer.defaultProps = defaultProps;
  29335. /***/ }),
  29336. /* 300 */
  29337. /***/ (function(module, exports, __webpack_require__) {
  29338. "use strict";
  29339. Object.defineProperty(exports, "__esModule", {
  29340. value: true
  29341. });
  29342. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  29343. //
  29344. // Permission is hereby granted, free of charge, to any person obtaining a copy
  29345. // of this software and associated documentation files (the "Software"), to deal
  29346. // in the Software without restriction, including without limitation the rights
  29347. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  29348. // copies of the Software, and to permit persons to whom the Software is
  29349. // furnished to do so, subject to the following conditions:
  29350. //
  29351. // The above copyright notice and this permission notice shall be included in
  29352. // all copies or substantial portions of the Software.
  29353. //
  29354. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  29355. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29356. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  29357. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  29358. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  29359. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29360. // THE SOFTWARE.
  29361. exports.default = "#define SHADER_NAME hexagon-cell-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 vColor;\n\nvoid main(void) {\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  29362. /***/ }),
  29363. /* 301 */
  29364. /***/ (function(module, exports, __webpack_require__) {
  29365. "use strict";
  29366. Object.defineProperty(exports, "__esModule", {
  29367. value: true
  29368. });
  29369. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  29370. //
  29371. // Permission is hereby granted, free of charge, to any person obtaining a copy
  29372. // of this software and associated documentation files (the "Software"), to deal
  29373. // in the Software without restriction, including without limitation the rights
  29374. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  29375. // copies of the Software, and to permit persons to whom the Software is
  29376. // furnished to do so, subject to the following conditions:
  29377. //
  29378. // The above copyright notice and this permission notice shall be included in
  29379. // all copies or substantial portions of the Software.
  29380. //
  29381. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  29382. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29383. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  29384. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  29385. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  29386. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29387. // THE SOFTWARE.
  29388. exports.default = "#define SHADER_NAME hexagon-cell-layer-vertex-shader-64\n\nattribute vec3 positions;\nattribute vec3 normals;\n\nattribute vec3 instancePositions;\nattribute vec2 instancePositions64xyLow;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\n// Custom uniforms\nuniform float opacity;\nuniform float radius;\nuniform float angle;\nuniform float extruded;\nuniform float coverage;\nuniform float elevationScale;\n\n// Result\nvarying vec4 vColor;\n\n// A magic number to scale elevation so that 1 unit approximate to 1 meter.\n#define ELEVATION_SCALE 0.8\n\nvoid main(void) {\n\n // rotate primitive position and normal\n mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\n\n vec2 rPos = rotationMatrix * positions.xz;\n vec2 rNorm = rotationMatrix * normals.xz; // the hexagon cells has y axis as the vertical axis\n\n vec3 rotatedPositions = vec3(rPos.x, positions.y, rPos.y);\n vec3 rotatedNormals = vec3(rNorm.x, rNorm.y, normals.y);\n\n // calculate elevation, if 3d not enabled set to 0\n // cylindar gemoetry height are between -0.5 to 0.5, transform it to between 0, 1\n float elevation = 0.0;\n\n if (extruded > 0.5) {\n elevation = project_scale(instancePositions.z * (positions.y + 0.5) *\n ELEVATION_SCALE * elevationScale);\n }\n\n // if alpha == 0.0 or z < 0.0, do not render element\n float noRender = float(instanceColors.a == 0.0 || instancePositions.z < 0.0);\n float dotRadius = radius * mix(coverage, 0.0, noRender);\n\n // project center of hexagon\n\n vec4 instancePositions64xy = vec4(\n instancePositions.x, instancePositions64xyLow.x,\n instancePositions.y, instancePositions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(instancePositions64xy, projected_coord_xy);\n\n vec2 vertex_pos_localspace[4];\n vec4_fp64(vec4(rotatedPositions.xz * dotRadius, 0.0, 1.0), vertex_pos_localspace);\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = sum_fp64(vertex_pos_localspace[0], projected_coord_xy[0]);\n vertex_pos_modelspace[1] = sum_fp64(vertex_pos_localspace[1], projected_coord_xy[1]);\n vertex_pos_modelspace[2] = sum_fp64(vertex_pos_localspace[2], vec2(elevation, 0.0));\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n vec4 position_worldspace = vec4(\n vertex_pos_modelspace[0].x, vertex_pos_modelspace[1].x,\n vertex_pos_modelspace[2].x, vertex_pos_modelspace[3].x);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace);\n\n // Light calculations\n // Worldspace is the linear space after Mercator projection\n\n vec3 normals_worldspace = rotatedNormals;\n\n float lightWeight = 1.0;\n\n if (extruded > 0.5) {\n lightWeight = getLightWeight(\n position_worldspace.xyz, // the w component is always 1.0\n normals_worldspace\n );\n }\n\n vec3 lightWeightedColor = lightWeight * instanceColors.rgb;\n\n // Color: Either opacity-multiplied instance color, or picking color\n vColor = vec4(lightWeightedColor, opacity * instanceColors.a) / 255.0;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  29389. /***/ }),
  29390. /* 302 */
  29391. /***/ (function(module, exports, __webpack_require__) {
  29392. "use strict";
  29393. Object.defineProperty(exports, "__esModule", {
  29394. value: true
  29395. });
  29396. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  29397. //
  29398. // Permission is hereby granted, free of charge, to any person obtaining a copy
  29399. // of this software and associated documentation files (the "Software"), to deal
  29400. // in the Software without restriction, including without limitation the rights
  29401. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  29402. // copies of the Software, and to permit persons to whom the Software is
  29403. // furnished to do so, subject to the following conditions:
  29404. //
  29405. // The above copyright notice and this permission notice shall be included in
  29406. // all copies or substantial portions of the Software.
  29407. //
  29408. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  29409. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29410. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  29411. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  29412. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  29413. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29414. // THE SOFTWARE.
  29415. exports.default = "\n#define SHADER_NAME hexagon-cell-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 normals;\n\nattribute vec3 instancePositions;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\n// Custom uniforms\nuniform float opacity;\nuniform float radius;\nuniform float angle;\nuniform float extruded;\nuniform float coverage;\nuniform float elevationScale;\n\n// Result\nvarying vec4 vColor;\n\n// A magic number to scale elevation so that 1 unit approximate to 1 meter.\n#define ELEVATION_SCALE 0.8\n\nvoid main(void) {\n\n // rotate primitive position and normal\n mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\n\n vec2 rPos = rotationMatrix * positions.xz;\n vec2 rNorm = rotationMatrix * normals.xz; // the hexagon cells has y axis as the vertical axis\n\n vec3 rotatedPositions = vec3(rPos.x, positions.y, rPos.y);\n vec3 rotatedNormals = vec3(rNorm.x, rNorm.y, normals.y);\n\n // calculate elevation, if 3d not enabled set to 0\n // cylindar gemoetry height are between -0.5 to 0.5, transform it to between 0, 1\n float elevation = 0.0;\n\n if (extruded > 0.5) {\n elevation = project_scale(instancePositions.z * (positions.y + 0.5) *\n ELEVATION_SCALE * elevationScale);\n }\n\n // if ahpha == 0.0 or z < 0.0, do not render element\n float noRender = float(instanceColors.a == 0.0 || instancePositions.z < 0.0);\n float dotRadius = radius * mix(coverage, 0.0, noRender);\n\n // project center of hexagon\n vec4 centroidPosition = vec4(project_position(instancePositions.xy), elevation, 0.0);\n\n vec4 position_worldspace = centroidPosition + vec4(vec2(rotatedPositions.xz * dotRadius), 0., 1.);\n\n gl_Position = project_to_clipspace(position_worldspace);\n\n // Light calculations\n // Worldspace is the linear space after Mercator projection\n\n vec3 normals_worldspace = rotatedNormals;\n\n float lightWeight = 1.0;\n\n if (extruded > 0.5) {\n lightWeight = getLightWeight(\n position_worldspace.xyz, // the w component is always 1.0\n normals_worldspace\n );\n }\n\n vec3 lightWeightedColor = lightWeight * instanceColors.rgb;\n\n // opacity-multiplied instance color\n vColor = vec4(lightWeightedColor, opacity * instanceColors.a) / 255.0;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  29416. /***/ }),
  29417. /* 303 */
  29418. /***/ (function(module, exports, __webpack_require__) {
  29419. "use strict";
  29420. Object.defineProperty(exports, "__esModule", {
  29421. value: true
  29422. });
  29423. exports.pointToHexbin = pointToHexbin;
  29424. exports.getRadiusInPixel = getRadiusInPixel;
  29425. var _d3Hexbin = __webpack_require__(567);
  29426. /**
  29427. * Use d3-hexbin to performs hexagonal binning from geo points to hexagons
  29428. * @param {Array} data - array of points
  29429. * @param {Number} radius - hexagon radius in meter
  29430. * @param {function} getPosition - get points lon lat
  29431. * @param {Object} viewport - current viewport object
  29432. * @return {Object} - hexagons and countRange
  29433. */
  29434. function pointToHexbin(_ref, viewport) {
  29435. var data = _ref.data,
  29436. radius = _ref.radius,
  29437. getPosition = _ref.getPosition;
  29438. // get hexagon radius in mercator world unit
  29439. var radiusInPixel = getRadiusInPixel(radius, viewport);
  29440. // add world space coordinates to points
  29441. var screenPoints = data.map(function (pt) {
  29442. return Object.assign({
  29443. screenCoord: viewport.projectFlat(getPosition(pt))
  29444. }, pt);
  29445. });
  29446. var newHexbin = (0, _d3Hexbin.hexbin)().radius(radiusInPixel).x(function (d) {
  29447. return d.screenCoord[0];
  29448. }).y(function (d) {
  29449. return d.screenCoord[1];
  29450. });
  29451. var hexagonBins = newHexbin(screenPoints);
  29452. return {
  29453. hexagons: hexagonBins.map(function (hex, index) {
  29454. return {
  29455. centroid: viewport.unprojectFlat([hex.x, hex.y]),
  29456. points: hex,
  29457. index: index
  29458. };
  29459. })
  29460. };
  29461. }
  29462. /**
  29463. * Get radius in mercator world space coordinates from meter
  29464. * @param {Number} radius - in meter
  29465. * @param {Object} viewport - current viewport object
  29466. * @return {Number} radius in mercator world spcae coordinates
  29467. */
  29468. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  29469. //
  29470. // Permission is hereby granted, free of charge, to any person obtaining a copy
  29471. // of this software and associated documentation files (the "Software"), to deal
  29472. // in the Software without restriction, including without limitation the rights
  29473. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  29474. // copies of the Software, and to permit persons to whom the Software is
  29475. // furnished to do so, subject to the following conditions:
  29476. //
  29477. // The above copyright notice and this permission notice shall be included in
  29478. // all copies or substantial portions of the Software.
  29479. //
  29480. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  29481. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29482. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  29483. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  29484. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  29485. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29486. // THE SOFTWARE.
  29487. function getRadiusInPixel(radius, viewport) {
  29488. var _viewport$getDistance = viewport.getDistanceScales(),
  29489. pixelsPerMeter = _viewport$getDistance.pixelsPerMeter;
  29490. // x, y distance should be the same
  29491. return radius * pixelsPerMeter[0];
  29492. }
  29493. /***/ }),
  29494. /* 304 */
  29495. /***/ (function(module, exports, __webpack_require__) {
  29496. "use strict";
  29497. Object.defineProperty(exports, "__esModule", {
  29498. value: true
  29499. });
  29500. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  29501. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  29502. var _core = __webpack_require__(13);
  29503. var _hexagonCellLayer = __webpack_require__(175);
  29504. var _hexagonCellLayer2 = _interopRequireDefault(_hexagonCellLayer);
  29505. var _hexagonAggregator2 = __webpack_require__(303);
  29506. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  29507. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  29508. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  29509. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  29510. //
  29511. // Permission is hereby granted, free of charge, to any person obtaining a copy
  29512. // of this software and associated documentation files (the "Software"), to deal
  29513. // in the Software without restriction, including without limitation the rights
  29514. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  29515. // copies of the Software, and to permit persons to whom the Software is
  29516. // furnished to do so, subject to the following conditions:
  29517. //
  29518. // The above copyright notice and this permission notice shall be included in
  29519. // all copies or substantial portions of the Software.
  29520. //
  29521. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  29522. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29523. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  29524. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  29525. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  29526. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29527. // THE SOFTWARE.
  29528. var log = _core.experimental.log,
  29529. BinSorter = _core.experimental.BinSorter,
  29530. getQuantizeScale = _core.experimental.getQuantizeScale,
  29531. getLinearScale = _core.experimental.getLinearScale,
  29532. defaultColorRange = _core.experimental.defaultColorRange;
  29533. function nop() {}
  29534. var defaultProps = {
  29535. // color
  29536. colorDomain: null,
  29537. colorRange: defaultColorRange,
  29538. getColorValue: function getColorValue(points) {
  29539. return points.length;
  29540. },
  29541. lowerPercentile: 0,
  29542. upperPercentile: 100,
  29543. onSetColorDomain: nop,
  29544. // elevation
  29545. elevationDomain: null,
  29546. elevationRange: [0, 1000],
  29547. getElevationValue: function getElevationValue(points) {
  29548. return points.length;
  29549. },
  29550. elevationLowerPercentile: 0,
  29551. elevationUpperPercentile: 100,
  29552. elevationScale: 1,
  29553. onSetElevationDomain: nop,
  29554. radius: 1000,
  29555. coverage: 1,
  29556. extruded: false,
  29557. hexagonAggregator: _hexagonAggregator2.pointToHexbin,
  29558. getPosition: function getPosition(x) {
  29559. return x.position;
  29560. },
  29561. fp64: false,
  29562. // Optional settings for 'lighting' shader module
  29563. lightSettings: {
  29564. lightsPosition: [-122.45, 37.75, 8000, -122.0, 38.0, 5000],
  29565. ambientRatio: 0.05,
  29566. diffuseRatio: 0.6,
  29567. specularRatio: 0.8,
  29568. lightsStrength: [2.0, 0.0, 0.0, 0.0],
  29569. numberOfLights: 2
  29570. }
  29571. };
  29572. var HexagonLayer = function (_CompositeLayer) {
  29573. _inherits(HexagonLayer, _CompositeLayer);
  29574. function HexagonLayer(props) {
  29575. _classCallCheck(this, HexagonLayer);
  29576. if (!props.hexagonAggregator && !props.radius) {
  29577. log.once(0, 'HexagonLayer: Default hexagonAggregator requires radius prop to be set, ' + 'Now using 1000 meter as default');
  29578. props.radius = defaultProps.radius;
  29579. }
  29580. if (Number.isFinite(props.upperPercentile) && (props.upperPercentile > 100 || props.upperPercentile < 0)) {
  29581. log.once(0, 'HexagonLayer: upperPercentile should be between 0 and 100. ' + 'Assign to 100 by default');
  29582. props.upperPercentile = defaultProps.upperPercentile;
  29583. }
  29584. if (Number.isFinite(props.lowerPercentile) && (props.lowerPercentile > 100 || props.lowerPercentile < 0)) {
  29585. log.once(0, 'HexagonLayer: lowerPercentile should be between 0 and 100. ' + 'Assign to 0 by default');
  29586. props.lowerPercentile = defaultProps.upperPercentile;
  29587. }
  29588. if (props.lowerPercentile >= props.upperPercentile) {
  29589. log.once(0, 'HexagonLayer: lowerPercentile should not be bigger than ' + 'upperPercentile. Assign to 0 by default');
  29590. props.lowerPercentile = defaultProps.lowerPercentile;
  29591. }
  29592. return _possibleConstructorReturn(this, (HexagonLayer.__proto__ || Object.getPrototypeOf(HexagonLayer)).call(this, props));
  29593. }
  29594. _createClass(HexagonLayer, [{
  29595. key: 'initializeState',
  29596. value: function initializeState() {
  29597. this.state = {
  29598. hexagons: [],
  29599. hexagonVertices: null,
  29600. sortedColorBins: null,
  29601. sortedElevationBins: null,
  29602. colorValueDomain: null,
  29603. elevationValueDomain: null,
  29604. colorScaleFunc: nop,
  29605. elevationScaleFunc: nop,
  29606. dimensionUpdaters: this.getDimensionUpdaters()
  29607. };
  29608. }
  29609. }, {
  29610. key: 'updateState',
  29611. value: function updateState(_ref) {
  29612. var _this2 = this;
  29613. var oldProps = _ref.oldProps,
  29614. props = _ref.props,
  29615. changeFlags = _ref.changeFlags;
  29616. var dimensionChanges = this.getDimensionChanges(oldProps, props);
  29617. if (changeFlags.dataChanged || this.needsReProjectPoints(oldProps, props)) {
  29618. // project data into hexagons, and get sortedColorBins
  29619. this.getHexagons();
  29620. } else if (dimensionChanges) {
  29621. dimensionChanges.forEach(function (f) {
  29622. return typeof f === 'function' && f.apply(_this2);
  29623. });
  29624. }
  29625. }
  29626. }, {
  29627. key: 'needsReProjectPoints',
  29628. value: function needsReProjectPoints(oldProps, props) {
  29629. return oldProps.radius !== props.radius || oldProps.hexagonAggregator !== props.hexagonAggregator;
  29630. }
  29631. }, {
  29632. key: 'getDimensionUpdaters',
  29633. value: function getDimensionUpdaters() {
  29634. // dimension updaters are sequential,
  29635. // if the first one needs to be called, the 2nd and 3rd one will automatically
  29636. // be called. e.g. if ColorValue needs to be updated, getColorValueDomain and getColorScale
  29637. // will automatically be called
  29638. return {
  29639. getColor: [{
  29640. id: 'value',
  29641. triggers: ['getColorValue'],
  29642. updater: this.getSortedColorBins
  29643. }, {
  29644. id: 'domain',
  29645. triggers: ['lowerPercentile', 'upperPercentile'],
  29646. updater: this.getColorValueDomain
  29647. }, {
  29648. id: 'scaleFunc',
  29649. triggers: ['colorDomain', 'colorRange'],
  29650. updater: this.getColorScale
  29651. }],
  29652. getElevation: [{
  29653. id: 'value',
  29654. triggers: ['getElevationValue'],
  29655. updater: this.getSortedElevationBins
  29656. }, {
  29657. id: 'domain',
  29658. triggers: ['elevationLowerPercentile', 'elevationUpperPercentile'],
  29659. updater: this.getElevationValueDomain
  29660. }, {
  29661. id: 'scaleFunc',
  29662. triggers: ['elevationDomain', 'elevationRange'],
  29663. updater: this.getElevationScale
  29664. }]
  29665. };
  29666. }
  29667. }, {
  29668. key: 'getDimensionChanges',
  29669. value: function getDimensionChanges(oldProps, props) {
  29670. var dimensionUpdaters = this.state.dimensionUpdaters;
  29671. var updaters = [];
  29672. // get dimension to be updated
  29673. for (var dimensionKey in dimensionUpdaters) {
  29674. // return the first triggered updater for each dimension
  29675. var needUpdate = dimensionUpdaters[dimensionKey].find(function (item) {
  29676. return item.triggers.some(function (t) {
  29677. return oldProps[t] !== props[t];
  29678. });
  29679. });
  29680. if (needUpdate) {
  29681. updaters.push(needUpdate.updater);
  29682. }
  29683. }
  29684. return updaters.length ? updaters : null;
  29685. }
  29686. }, {
  29687. key: 'getHexagons',
  29688. value: function getHexagons() {
  29689. var hexagonAggregator = this.props.hexagonAggregator;
  29690. var viewport = this.context.viewport;
  29691. var _hexagonAggregator = hexagonAggregator(this.props, viewport),
  29692. hexagons = _hexagonAggregator.hexagons,
  29693. hexagonVertices = _hexagonAggregator.hexagonVertices;
  29694. this.setState({ hexagons: hexagons, hexagonVertices: hexagonVertices });
  29695. this.getSortedBins();
  29696. }
  29697. }, {
  29698. key: 'getPickingInfo',
  29699. value: function getPickingInfo(_ref2) {
  29700. var info = _ref2.info;
  29701. var _state = this.state,
  29702. sortedColorBins = _state.sortedColorBins,
  29703. sortedElevationBins = _state.sortedElevationBins;
  29704. var isPicked = info.picked && info.index > -1;
  29705. var object = null;
  29706. if (isPicked) {
  29707. var cell = this.state.hexagons[info.index];
  29708. var colorValue = sortedColorBins.binMap[cell.index] && sortedColorBins.binMap[cell.index].value;
  29709. var elevationValue = sortedElevationBins.binMap[cell.index] && sortedElevationBins.binMap[cell.index].value;
  29710. object = Object.assign({
  29711. colorValue: colorValue,
  29712. elevationValue: elevationValue
  29713. }, cell);
  29714. }
  29715. // add bin colorValue and elevationValue to info
  29716. return Object.assign(info, {
  29717. picked: Boolean(object),
  29718. // override object with picked cell
  29719. object: object
  29720. });
  29721. }
  29722. }, {
  29723. key: 'getUpdateTriggers',
  29724. value: function getUpdateTriggers() {
  29725. var _this3 = this;
  29726. var dimensionUpdaters = this.state.dimensionUpdaters;
  29727. // merge all dimension triggers
  29728. var updateTriggers = {};
  29729. var _loop = function _loop(dimensionKey) {
  29730. updateTriggers[dimensionKey] = {};
  29731. var _iteratorNormalCompletion = true;
  29732. var _didIteratorError = false;
  29733. var _iteratorError = undefined;
  29734. try {
  29735. for (var _iterator = dimensionUpdaters[dimensionKey][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  29736. var step = _step.value;
  29737. step.triggers.forEach(function (prop) {
  29738. updateTriggers[dimensionKey][prop] = _this3.props[prop];
  29739. });
  29740. }
  29741. } catch (err) {
  29742. _didIteratorError = true;
  29743. _iteratorError = err;
  29744. } finally {
  29745. try {
  29746. if (!_iteratorNormalCompletion && _iterator.return) {
  29747. _iterator.return();
  29748. }
  29749. } finally {
  29750. if (_didIteratorError) {
  29751. throw _iteratorError;
  29752. }
  29753. }
  29754. }
  29755. };
  29756. for (var dimensionKey in dimensionUpdaters) {
  29757. _loop(dimensionKey);
  29758. }
  29759. return updateTriggers;
  29760. }
  29761. }, {
  29762. key: 'getValueDomain',
  29763. value: function getValueDomain() {
  29764. this.getColorValueDomain();
  29765. this.getElevationValueDomain();
  29766. }
  29767. }, {
  29768. key: 'getSortedBins',
  29769. value: function getSortedBins() {
  29770. this.getSortedColorBins();
  29771. this.getSortedElevationBins();
  29772. }
  29773. }, {
  29774. key: 'getSortedColorBins',
  29775. value: function getSortedColorBins() {
  29776. var getColorValue = this.props.getColorValue;
  29777. var sortedColorBins = new BinSorter(this.state.hexagons || [], getColorValue);
  29778. this.setState({ sortedColorBins: sortedColorBins });
  29779. this.getColorValueDomain();
  29780. }
  29781. }, {
  29782. key: 'getSortedElevationBins',
  29783. value: function getSortedElevationBins() {
  29784. var getElevationValue = this.props.getElevationValue;
  29785. var sortedElevationBins = new BinSorter(this.state.hexagons || [], getElevationValue);
  29786. this.setState({ sortedElevationBins: sortedElevationBins });
  29787. this.getElevationValueDomain();
  29788. }
  29789. }, {
  29790. key: 'getColorValueDomain',
  29791. value: function getColorValueDomain() {
  29792. var _props = this.props,
  29793. lowerPercentile = _props.lowerPercentile,
  29794. upperPercentile = _props.upperPercentile,
  29795. onSetColorDomain = _props.onSetColorDomain;
  29796. this.state.colorValueDomain = this.state.sortedColorBins.getValueRange([lowerPercentile, upperPercentile]);
  29797. if (typeof onSetColorDomain === 'function') {
  29798. onSetColorDomain(this.state.colorValueDomain);
  29799. }
  29800. this.getColorScale();
  29801. }
  29802. }, {
  29803. key: 'getElevationValueDomain',
  29804. value: function getElevationValueDomain() {
  29805. var _props2 = this.props,
  29806. elevationLowerPercentile = _props2.elevationLowerPercentile,
  29807. elevationUpperPercentile = _props2.elevationUpperPercentile,
  29808. onSetElevationDomain = _props2.onSetElevationDomain;
  29809. this.state.elevationValueDomain = this.state.sortedElevationBins.getValueRange([elevationLowerPercentile, elevationUpperPercentile]);
  29810. if (typeof onSetElevationDomain === 'function') {
  29811. onSetElevationDomain(this.state.elevationValueDomain);
  29812. }
  29813. this.getElevationScale();
  29814. }
  29815. }, {
  29816. key: 'getColorScale',
  29817. value: function getColorScale() {
  29818. var colorRange = this.props.colorRange;
  29819. var colorDomain = this.props.colorDomain || this.state.colorValueDomain;
  29820. this.state.colorScaleFunc = getQuantizeScale(colorDomain, colorRange);
  29821. }
  29822. }, {
  29823. key: 'getElevationScale',
  29824. value: function getElevationScale() {
  29825. var elevationRange = this.props.elevationRange;
  29826. var elevationDomain = this.props.elevationDomain || this.state.elevationValueDomain;
  29827. this.state.elevationScaleFunc = getLinearScale(elevationDomain, elevationRange);
  29828. }
  29829. }, {
  29830. key: '_onGetSublayerColor',
  29831. value: function _onGetSublayerColor(cell) {
  29832. var _state2 = this.state,
  29833. sortedColorBins = _state2.sortedColorBins,
  29834. colorScaleFunc = _state2.colorScaleFunc,
  29835. colorValueDomain = _state2.colorValueDomain;
  29836. var cv = sortedColorBins.binMap[cell.index] && sortedColorBins.binMap[cell.index].value;
  29837. var colorDomain = this.props.colorDomain || colorValueDomain;
  29838. var isColorValueInDomain = cv >= colorDomain[0] && cv <= colorDomain[colorDomain.length - 1];
  29839. // if cell value is outside domain, set alpha to 0
  29840. var color = isColorValueInDomain ? colorScaleFunc(cv) : [0, 0, 0, 0];
  29841. // add alpha to color if not defined in colorRange
  29842. color[3] = Number.isFinite(color[3]) ? color[3] : 255;
  29843. return color;
  29844. }
  29845. }, {
  29846. key: '_onGetSublayerElevation',
  29847. value: function _onGetSublayerElevation(cell) {
  29848. var _state3 = this.state,
  29849. sortedElevationBins = _state3.sortedElevationBins,
  29850. elevationScaleFunc = _state3.elevationScaleFunc,
  29851. elevationValueDomain = _state3.elevationValueDomain;
  29852. var ev = sortedElevationBins.binMap[cell.index] && sortedElevationBins.binMap[cell.index].value;
  29853. var elevationDomain = this.props.elevationDomain || elevationValueDomain;
  29854. var isElevationValueInDomain = ev >= elevationDomain[0] && ev <= elevationDomain[elevationDomain.length - 1];
  29855. // if cell value is outside domain, set elevation to -1
  29856. return isElevationValueInDomain ? elevationScaleFunc(ev) : -1;
  29857. }
  29858. // for subclassing, override this method to return
  29859. // customized sub layer props
  29860. }, {
  29861. key: 'getSubLayerProps',
  29862. value: function getSubLayerProps() {
  29863. var _props3 = this.props,
  29864. radius = _props3.radius,
  29865. elevationScale = _props3.elevationScale,
  29866. extruded = _props3.extruded,
  29867. coverage = _props3.coverage,
  29868. lightSettings = _props3.lightSettings,
  29869. fp64 = _props3.fp64;
  29870. // return props to the sublayer constructor
  29871. return _get(HexagonLayer.prototype.__proto__ || Object.getPrototypeOf(HexagonLayer.prototype), 'getSubLayerProps', this).call(this, {
  29872. id: 'hexagon-cell',
  29873. data: this.state.hexagons,
  29874. fp64: fp64,
  29875. hexagonVertices: this.state.hexagonVertices,
  29876. radius: radius,
  29877. elevationScale: elevationScale,
  29878. angle: Math.PI,
  29879. extruded: extruded,
  29880. coverage: coverage,
  29881. lightSettings: lightSettings,
  29882. getColor: this._onGetSublayerColor.bind(this),
  29883. getElevation: this._onGetSublayerElevation.bind(this),
  29884. updateTriggers: this.getUpdateTriggers()
  29885. });
  29886. }
  29887. // for subclassing, override this method to return
  29888. // customized sub layer class
  29889. }, {
  29890. key: 'getSubLayerClass',
  29891. value: function getSubLayerClass() {
  29892. return _hexagonCellLayer2.default;
  29893. }
  29894. }, {
  29895. key: 'renderLayers',
  29896. value: function renderLayers() {
  29897. var SubLayerClass = this.getSubLayerClass();
  29898. return new SubLayerClass(this.getSubLayerProps());
  29899. }
  29900. }]);
  29901. return HexagonLayer;
  29902. }(_core.CompositeLayer);
  29903. exports.default = HexagonLayer;
  29904. HexagonLayer.layerName = 'HexagonLayer';
  29905. HexagonLayer.defaultProps = defaultProps;
  29906. /***/ }),
  29907. /* 305 */
  29908. /***/ (function(module, exports, __webpack_require__) {
  29909. "use strict";
  29910. Object.defineProperty(exports, "__esModule", {
  29911. value: true
  29912. });
  29913. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  29914. //
  29915. // Permission is hereby granted, free of charge, to any person obtaining a copy
  29916. // of this software and associated documentation files (the "Software"), to deal
  29917. // in the Software without restriction, including without limitation the rights
  29918. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  29919. // copies of the Software, and to permit persons to whom the Software is
  29920. // furnished to do so, subject to the following conditions:
  29921. //
  29922. // The above copyright notice and this permission notice shall be included in
  29923. // all copies or substantial portions of the Software.
  29924. //
  29925. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  29926. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29927. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  29928. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  29929. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  29930. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29931. // THE SOFTWARE.
  29932. exports.default = "#define SHADER_NAME icon-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform float opacity;\nuniform sampler2D iconsTexture;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nconst float MIN_ALPHA = 0.05;\n\nvoid main(void) {\n vec4 texColor = texture2D(iconsTexture, vTextureCoords);\n\n // if colorMode == 0, use pixel color from the texture\n // if colorMode == 1 or rendering picking buffer, use texture as transparency mask\n vec3 color = mix(texColor.rgb, vColor.rgb, vColorMode);\n float a = texColor.a * opacity * mix(1.0, vColor.a, vColorMode);\n\n if (a < MIN_ALPHA) {\n discard;\n }\n\n gl_FragColor = vec4(color, a);\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  29933. /***/ }),
  29934. /* 306 */
  29935. /***/ (function(module, exports, __webpack_require__) {
  29936. "use strict";
  29937. Object.defineProperty(exports, "__esModule", {
  29938. value: true
  29939. });
  29940. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  29941. //
  29942. // Permission is hereby granted, free of charge, to any person obtaining a copy
  29943. // of this software and associated documentation files (the "Software"), to deal
  29944. // in the Software without restriction, including without limitation the rights
  29945. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  29946. // copies of the Software, and to permit persons to whom the Software is
  29947. // furnished to do so, subject to the following conditions:
  29948. //
  29949. // The above copyright notice and this permission notice shall be included in
  29950. // all copies or substantial portions of the Software.
  29951. //
  29952. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  29953. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29954. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  29955. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  29956. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  29957. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29958. // THE SOFTWARE.
  29959. exports.default = "#define SHADER_NAME icon-layer-vertex-shader-64\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute vec2 instancePositions64xyLow;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform float sizeScale;\nuniform vec2 iconsTextureDim;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n\n // scale and rotate vertex in \"pixel\" value and convert back to fraction in clipspace\n vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) * sizeScale * instanceScale;\n pixelOffset.y *= -1.0;\n\n vec4 instancePositions64xy = vec4(\n instancePositions.x, instancePositions64xyLow.x,\n instancePositions.y, instancePositions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(instancePositions64xy, projected_coord_xy);\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = projected_coord_xy[0];\n vertex_pos_modelspace[1] = projected_coord_xy[1];\n vertex_pos_modelspace[2] = vec2(project_scale(instancePositions.z), 0.0);\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace);\n gl_Position += project_pixel_to_clipspace(pixelOffset);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vColor = instanceColors / 255.;\n\n vColorMode = instanceColorModes;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  29960. /***/ }),
  29961. /* 307 */
  29962. /***/ (function(module, exports, __webpack_require__) {
  29963. "use strict";
  29964. Object.defineProperty(exports, "__esModule", {
  29965. value: true
  29966. });
  29967. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  29968. //
  29969. // Permission is hereby granted, free of charge, to any person obtaining a copy
  29970. // of this software and associated documentation files (the "Software"), to deal
  29971. // in the Software without restriction, including without limitation the rights
  29972. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  29973. // copies of the Software, and to permit persons to whom the Software is
  29974. // furnished to do so, subject to the following conditions:
  29975. //
  29976. // The above copyright notice and this permission notice shall be included in
  29977. // all copies or substantial portions of the Software.
  29978. //
  29979. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  29980. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29981. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  29982. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  29983. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  29984. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29985. // THE SOFTWARE.
  29986. exports.default = "#define SHADER_NAME icon-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform float sizeScale;\nuniform vec2 iconsTextureDim;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n\n // scale and rotate vertex in \"pixel\" value and convert back to fraction in clipspace\n vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) * sizeScale * instanceScale;\n pixelOffset.y *= -1.0;\n\n vec3 center = project_position(instancePositions);\n gl_Position = project_to_clipspace(vec4(center, 1.0));\n gl_Position += project_pixel_to_clipspace(pixelOffset);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vColor = instanceColors / 255.;\n\n vColorMode = instanceColorModes;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  29987. /***/ }),
  29988. /* 308 */
  29989. /***/ (function(module, exports, __webpack_require__) {
  29990. "use strict";
  29991. Object.defineProperty(exports, "__esModule", {
  29992. value: true
  29993. });
  29994. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  29995. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  29996. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  29997. var _core = __webpack_require__(13);
  29998. var _luma = __webpack_require__(12);
  29999. var _iconLayerVertex = __webpack_require__(307);
  30000. var _iconLayerVertex2 = _interopRequireDefault(_iconLayerVertex);
  30001. var _iconLayerVertex3 = __webpack_require__(306);
  30002. var _iconLayerVertex4 = _interopRequireDefault(_iconLayerVertex3);
  30003. var _iconLayerFragment = __webpack_require__(305);
  30004. var _iconLayerFragment2 = _interopRequireDefault(_iconLayerFragment);
  30005. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  30006. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  30007. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  30008. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  30009. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  30010. //
  30011. // Permission is hereby granted, free of charge, to any person obtaining a copy
  30012. // of this software and associated documentation files (the "Software"), to deal
  30013. // in the Software without restriction, including without limitation the rights
  30014. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  30015. // copies of the Software, and to permit persons to whom the Software is
  30016. // furnished to do so, subject to the following conditions:
  30017. //
  30018. // The above copyright notice and this permission notice shall be included in
  30019. // all copies or substantial portions of the Software.
  30020. //
  30021. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  30022. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  30023. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  30024. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  30025. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  30026. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  30027. // THE SOFTWARE.
  30028. var fp64LowPart = _core.experimental.fp64LowPart,
  30029. enable64bitSupport = _core.experimental.enable64bitSupport;
  30030. var DEFAULT_COLOR = [0, 0, 0, 255];
  30031. var DEFAULT_TEXTURE_MIN_FILTER = _luma.GL.LINEAR_MIPMAP_LINEAR;
  30032. // GL.LINEAR is the default value but explicitly set it here
  30033. var DEFAULT_TEXTURE_MAG_FILTER = _luma.GL.LINEAR;
  30034. /*
  30035. * @param {object} props
  30036. * @param {Texture2D | string} props.iconAtlas - atlas image url or texture
  30037. * @param {object} props.iconMapping - icon names mapped to icon definitions
  30038. * @param {object} props.iconMapping[icon_name].x - x position of icon on the atlas image
  30039. * @param {object} props.iconMapping[icon_name].y - y position of icon on the atlas image
  30040. * @param {object} props.iconMapping[icon_name].width - width of icon on the atlas image
  30041. * @param {object} props.iconMapping[icon_name].height - height of icon on the atlas image
  30042. * @param {object} props.iconMapping[icon_name].anchorX - x anchor of icon on the atlas image,
  30043. * default to width / 2
  30044. * @param {object} props.iconMapping[icon_name].anchorY - y anchor of icon on the atlas image,
  30045. * default to height / 2
  30046. * @param {object} props.iconMapping[icon_name].mask - whether icon is treated as a transparency
  30047. * mask. If true, user defined color is applied. If false, original color from the image is
  30048. * applied. Default to false.
  30049. * @param {number} props.size - icon size in pixels
  30050. * @param {func} props.getPosition - returns anchor position of the icon, in [lng, lat, z]
  30051. * @param {func} props.getIcon - returns icon name as a string
  30052. * @param {func} props.getSize - returns icon size multiplier as a number
  30053. * @param {func} props.getColor - returns color of the icon in [r, g, b, a]. Only works on icons
  30054. * with mask: true.
  30055. * @param {func} props.getAngle - returns rotating angle (in degree) of the icon.
  30056. */
  30057. var defaultProps = {
  30058. iconAtlas: null,
  30059. iconMapping: {},
  30060. sizeScale: 1,
  30061. fp64: false,
  30062. getPosition: function getPosition(x) {
  30063. return x.position;
  30064. },
  30065. getIcon: function getIcon(x) {
  30066. return x.icon;
  30067. },
  30068. getColor: function getColor(x) {
  30069. return x.color || DEFAULT_COLOR;
  30070. },
  30071. getSize: function getSize(x) {
  30072. return x.size || 1;
  30073. },
  30074. getAngle: function getAngle(x) {
  30075. return x.angle || 0;
  30076. }
  30077. };
  30078. var IconLayer = function (_Layer) {
  30079. _inherits(IconLayer, _Layer);
  30080. function IconLayer() {
  30081. _classCallCheck(this, IconLayer);
  30082. return _possibleConstructorReturn(this, (IconLayer.__proto__ || Object.getPrototypeOf(IconLayer)).apply(this, arguments));
  30083. }
  30084. _createClass(IconLayer, [{
  30085. key: 'getShaders',
  30086. value: function getShaders() {
  30087. return enable64bitSupport(this.props) ? { vs: _iconLayerVertex4.default, fs: _iconLayerFragment2.default, modules: ['project64', 'picking'] } : { vs: _iconLayerVertex2.default, fs: _iconLayerFragment2.default, modules: ['picking'] }; // 'project' module added by default.
  30088. }
  30089. }, {
  30090. key: 'initializeState',
  30091. value: function initializeState() {
  30092. var attributeManager = this.getAttributeManager();
  30093. /* eslint-disable max-len */
  30094. attributeManager.addInstanced({
  30095. instancePositions: {
  30096. size: 3,
  30097. transition: true,
  30098. accessor: 'getPosition',
  30099. update: this.calculateInstancePositions
  30100. },
  30101. instanceSizes: {
  30102. size: 1,
  30103. transition: true,
  30104. accessor: 'getSize',
  30105. update: this.calculateInstanceSizes
  30106. },
  30107. instanceOffsets: { size: 2, accessor: 'getIcon', update: this.calculateInstanceOffsets },
  30108. instanceIconFrames: { size: 4, accessor: 'getIcon', update: this.calculateInstanceIconFrames },
  30109. instanceColorModes: {
  30110. size: 1,
  30111. type: _luma.GL.UNSIGNED_BYTE,
  30112. accessor: 'getIcon',
  30113. update: this.calculateInstanceColorMode
  30114. },
  30115. instanceColors: {
  30116. size: 4,
  30117. type: _luma.GL.UNSIGNED_BYTE,
  30118. transition: true,
  30119. accessor: 'getColor',
  30120. update: this.calculateInstanceColors
  30121. },
  30122. instanceAngles: {
  30123. size: 1,
  30124. transition: true,
  30125. accessor: 'getAngle',
  30126. update: this.calculateInstanceAngles
  30127. }
  30128. });
  30129. /* eslint-enable max-len */
  30130. }
  30131. }, {
  30132. key: 'updateAttribute',
  30133. value: function updateAttribute(_ref) {
  30134. var props = _ref.props,
  30135. oldProps = _ref.oldProps,
  30136. changeFlags = _ref.changeFlags;
  30137. if (props.fp64 !== oldProps.fp64) {
  30138. var attributeManager = this.getAttributeManager();
  30139. attributeManager.invalidateAll();
  30140. if (props.fp64 && props.coordinateSystem === _core.COORDINATE_SYSTEM.LNGLAT) {
  30141. attributeManager.addInstanced({
  30142. instancePositions64xyLow: {
  30143. size: 2,
  30144. accessor: 'getPosition',
  30145. update: this.calculateInstancePositions64xyLow
  30146. }
  30147. });
  30148. } else {
  30149. attributeManager.remove(['instancePositions64xyLow']);
  30150. }
  30151. }
  30152. }
  30153. }, {
  30154. key: 'updateState',
  30155. value: function updateState(_ref2) {
  30156. var _this2 = this;
  30157. var oldProps = _ref2.oldProps,
  30158. props = _ref2.props,
  30159. changeFlags = _ref2.changeFlags;
  30160. _get(IconLayer.prototype.__proto__ || Object.getPrototypeOf(IconLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  30161. var iconAtlas = props.iconAtlas,
  30162. iconMapping = props.iconMapping;
  30163. if (oldProps.iconMapping !== iconMapping) {
  30164. var attributeManager = this.getAttributeManager();
  30165. attributeManager.invalidate('instanceOffsets');
  30166. attributeManager.invalidate('instanceIconFrames');
  30167. attributeManager.invalidate('instanceColorModes');
  30168. }
  30169. if (oldProps.iconAtlas !== iconAtlas) {
  30170. if (iconAtlas instanceof _luma.Texture2D) {
  30171. var _iconAtlas$setParamet;
  30172. iconAtlas.setParameters((_iconAtlas$setParamet = {}, _defineProperty(_iconAtlas$setParamet, _luma.GL.TEXTURE_MIN_FILTER, DEFAULT_TEXTURE_MIN_FILTER), _defineProperty(_iconAtlas$setParamet, _luma.GL.TEXTURE_MAG_FILTER, DEFAULT_TEXTURE_MAG_FILTER), _iconAtlas$setParamet));
  30173. this.setState({ iconsTexture: iconAtlas });
  30174. } else if (typeof iconAtlas === 'string') {
  30175. (0, _luma.loadTextures)(this.context.gl, {
  30176. urls: [iconAtlas]
  30177. }).then(function (_ref3) {
  30178. var _texture$setParameter;
  30179. var _ref4 = _slicedToArray(_ref3, 1),
  30180. texture = _ref4[0];
  30181. texture.setParameters((_texture$setParameter = {}, _defineProperty(_texture$setParameter, _luma.GL.TEXTURE_MIN_FILTER, DEFAULT_TEXTURE_MIN_FILTER), _defineProperty(_texture$setParameter, _luma.GL.TEXTURE_MAG_FILTER, DEFAULT_TEXTURE_MAG_FILTER), _texture$setParameter));
  30182. _this2.setState({ iconsTexture: texture });
  30183. });
  30184. }
  30185. }
  30186. if (props.fp64 !== oldProps.fp64) {
  30187. var gl = this.context.gl;
  30188. this.setState({ model: this._getModel(gl) });
  30189. }
  30190. this.updateAttribute({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  30191. }
  30192. }, {
  30193. key: 'draw',
  30194. value: function draw(_ref5) {
  30195. var uniforms = _ref5.uniforms;
  30196. var sizeScale = this.props.sizeScale;
  30197. var iconsTexture = this.state.iconsTexture;
  30198. if (iconsTexture) {
  30199. this.state.model.render(Object.assign({}, uniforms, {
  30200. iconsTexture: iconsTexture,
  30201. iconsTextureDim: [iconsTexture.width, iconsTexture.height],
  30202. sizeScale: sizeScale
  30203. }));
  30204. }
  30205. }
  30206. }, {
  30207. key: '_getModel',
  30208. value: function _getModel(gl) {
  30209. var positions = [-1, -1, 0, -1, 1, 0, 1, 1, 0, 1, -1, 0];
  30210. return new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  30211. id: this.props.id,
  30212. geometry: new _luma.Geometry({
  30213. drawMode: _luma.GL.TRIANGLE_FAN,
  30214. attributes: {
  30215. positions: new Float32Array(positions)
  30216. }
  30217. }),
  30218. isInstanced: true,
  30219. shaderCache: this.context.shaderCache
  30220. }));
  30221. }
  30222. }, {
  30223. key: 'calculateInstancePositions',
  30224. value: function calculateInstancePositions(attribute) {
  30225. var _props = this.props,
  30226. data = _props.data,
  30227. getPosition = _props.getPosition;
  30228. var value = attribute.value;
  30229. var i = 0;
  30230. var _iteratorNormalCompletion = true;
  30231. var _didIteratorError = false;
  30232. var _iteratorError = undefined;
  30233. try {
  30234. for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  30235. var object = _step.value;
  30236. var position = getPosition(object);
  30237. value[i++] = position[0];
  30238. value[i++] = position[1];
  30239. value[i++] = position[2] || 0;
  30240. }
  30241. } catch (err) {
  30242. _didIteratorError = true;
  30243. _iteratorError = err;
  30244. } finally {
  30245. try {
  30246. if (!_iteratorNormalCompletion && _iterator.return) {
  30247. _iterator.return();
  30248. }
  30249. } finally {
  30250. if (_didIteratorError) {
  30251. throw _iteratorError;
  30252. }
  30253. }
  30254. }
  30255. }
  30256. }, {
  30257. key: 'calculateInstancePositions64xyLow',
  30258. value: function calculateInstancePositions64xyLow(attribute) {
  30259. var _props2 = this.props,
  30260. data = _props2.data,
  30261. getPosition = _props2.getPosition;
  30262. var value = attribute.value;
  30263. var i = 0;
  30264. var _iteratorNormalCompletion2 = true;
  30265. var _didIteratorError2 = false;
  30266. var _iteratorError2 = undefined;
  30267. try {
  30268. for (var _iterator2 = data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  30269. var point = _step2.value;
  30270. var position = getPosition(point);
  30271. value[i++] = fp64LowPart(position[0]);
  30272. value[i++] = fp64LowPart(position[1]);
  30273. }
  30274. } catch (err) {
  30275. _didIteratorError2 = true;
  30276. _iteratorError2 = err;
  30277. } finally {
  30278. try {
  30279. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  30280. _iterator2.return();
  30281. }
  30282. } finally {
  30283. if (_didIteratorError2) {
  30284. throw _iteratorError2;
  30285. }
  30286. }
  30287. }
  30288. }
  30289. }, {
  30290. key: 'calculateInstanceSizes',
  30291. value: function calculateInstanceSizes(attribute) {
  30292. var _props3 = this.props,
  30293. data = _props3.data,
  30294. getSize = _props3.getSize;
  30295. var value = attribute.value;
  30296. var i = 0;
  30297. var _iteratorNormalCompletion3 = true;
  30298. var _didIteratorError3 = false;
  30299. var _iteratorError3 = undefined;
  30300. try {
  30301. for (var _iterator3 = data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  30302. var object = _step3.value;
  30303. value[i++] = getSize(object);
  30304. }
  30305. } catch (err) {
  30306. _didIteratorError3 = true;
  30307. _iteratorError3 = err;
  30308. } finally {
  30309. try {
  30310. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  30311. _iterator3.return();
  30312. }
  30313. } finally {
  30314. if (_didIteratorError3) {
  30315. throw _iteratorError3;
  30316. }
  30317. }
  30318. }
  30319. }
  30320. }, {
  30321. key: 'calculateInstanceAngles',
  30322. value: function calculateInstanceAngles(attribute) {
  30323. var _props4 = this.props,
  30324. data = _props4.data,
  30325. getAngle = _props4.getAngle;
  30326. var value = attribute.value;
  30327. var i = 0;
  30328. var _iteratorNormalCompletion4 = true;
  30329. var _didIteratorError4 = false;
  30330. var _iteratorError4 = undefined;
  30331. try {
  30332. for (var _iterator4 = data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
  30333. var object = _step4.value;
  30334. value[i++] = getAngle(object);
  30335. }
  30336. } catch (err) {
  30337. _didIteratorError4 = true;
  30338. _iteratorError4 = err;
  30339. } finally {
  30340. try {
  30341. if (!_iteratorNormalCompletion4 && _iterator4.return) {
  30342. _iterator4.return();
  30343. }
  30344. } finally {
  30345. if (_didIteratorError4) {
  30346. throw _iteratorError4;
  30347. }
  30348. }
  30349. }
  30350. }
  30351. }, {
  30352. key: 'calculateInstanceColors',
  30353. value: function calculateInstanceColors(attribute) {
  30354. var _props5 = this.props,
  30355. data = _props5.data,
  30356. getColor = _props5.getColor;
  30357. var value = attribute.value;
  30358. var i = 0;
  30359. var _iteratorNormalCompletion5 = true;
  30360. var _didIteratorError5 = false;
  30361. var _iteratorError5 = undefined;
  30362. try {
  30363. for (var _iterator5 = data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
  30364. var object = _step5.value;
  30365. var color = getColor(object);
  30366. value[i++] = color[0];
  30367. value[i++] = color[1];
  30368. value[i++] = color[2];
  30369. value[i++] = isNaN(color[3]) ? 255 : color[3];
  30370. }
  30371. } catch (err) {
  30372. _didIteratorError5 = true;
  30373. _iteratorError5 = err;
  30374. } finally {
  30375. try {
  30376. if (!_iteratorNormalCompletion5 && _iterator5.return) {
  30377. _iterator5.return();
  30378. }
  30379. } finally {
  30380. if (_didIteratorError5) {
  30381. throw _iteratorError5;
  30382. }
  30383. }
  30384. }
  30385. }
  30386. }, {
  30387. key: 'calculateInstanceOffsets',
  30388. value: function calculateInstanceOffsets(attribute) {
  30389. var _props6 = this.props,
  30390. data = _props6.data,
  30391. iconMapping = _props6.iconMapping,
  30392. getIcon = _props6.getIcon;
  30393. var value = attribute.value;
  30394. var i = 0;
  30395. var _iteratorNormalCompletion6 = true;
  30396. var _didIteratorError6 = false;
  30397. var _iteratorError6 = undefined;
  30398. try {
  30399. for (var _iterator6 = data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
  30400. var object = _step6.value;
  30401. var icon = getIcon(object);
  30402. var rect = iconMapping[icon] || {};
  30403. value[i++] = rect.width / 2 - rect.anchorX || 0;
  30404. value[i++] = rect.height / 2 - rect.anchorY || 0;
  30405. }
  30406. } catch (err) {
  30407. _didIteratorError6 = true;
  30408. _iteratorError6 = err;
  30409. } finally {
  30410. try {
  30411. if (!_iteratorNormalCompletion6 && _iterator6.return) {
  30412. _iterator6.return();
  30413. }
  30414. } finally {
  30415. if (_didIteratorError6) {
  30416. throw _iteratorError6;
  30417. }
  30418. }
  30419. }
  30420. }
  30421. }, {
  30422. key: 'calculateInstanceColorMode',
  30423. value: function calculateInstanceColorMode(attribute) {
  30424. var _props7 = this.props,
  30425. data = _props7.data,
  30426. iconMapping = _props7.iconMapping,
  30427. getIcon = _props7.getIcon;
  30428. var value = attribute.value;
  30429. var i = 0;
  30430. var _iteratorNormalCompletion7 = true;
  30431. var _didIteratorError7 = false;
  30432. var _iteratorError7 = undefined;
  30433. try {
  30434. for (var _iterator7 = data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
  30435. var object = _step7.value;
  30436. var icon = getIcon(object);
  30437. var colorMode = iconMapping[icon] && iconMapping[icon].mask;
  30438. value[i++] = colorMode ? 1 : 0;
  30439. }
  30440. } catch (err) {
  30441. _didIteratorError7 = true;
  30442. _iteratorError7 = err;
  30443. } finally {
  30444. try {
  30445. if (!_iteratorNormalCompletion7 && _iterator7.return) {
  30446. _iterator7.return();
  30447. }
  30448. } finally {
  30449. if (_didIteratorError7) {
  30450. throw _iteratorError7;
  30451. }
  30452. }
  30453. }
  30454. }
  30455. }, {
  30456. key: 'calculateInstanceIconFrames',
  30457. value: function calculateInstanceIconFrames(attribute) {
  30458. var _props8 = this.props,
  30459. data = _props8.data,
  30460. iconMapping = _props8.iconMapping,
  30461. getIcon = _props8.getIcon;
  30462. var value = attribute.value;
  30463. var i = 0;
  30464. var _iteratorNormalCompletion8 = true;
  30465. var _didIteratorError8 = false;
  30466. var _iteratorError8 = undefined;
  30467. try {
  30468. for (var _iterator8 = data[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
  30469. var object = _step8.value;
  30470. var icon = getIcon(object);
  30471. var rect = iconMapping[icon] || {};
  30472. value[i++] = rect.x || 0;
  30473. value[i++] = rect.y || 0;
  30474. value[i++] = rect.width || 0;
  30475. value[i++] = rect.height || 0;
  30476. }
  30477. } catch (err) {
  30478. _didIteratorError8 = true;
  30479. _iteratorError8 = err;
  30480. } finally {
  30481. try {
  30482. if (!_iteratorNormalCompletion8 && _iterator8.return) {
  30483. _iterator8.return();
  30484. }
  30485. } finally {
  30486. if (_didIteratorError8) {
  30487. throw _iteratorError8;
  30488. }
  30489. }
  30490. }
  30491. }
  30492. }]);
  30493. return IconLayer;
  30494. }(_core.Layer);
  30495. exports.default = IconLayer;
  30496. IconLayer.layerName = 'IconLayer';
  30497. IconLayer.defaultProps = defaultProps;
  30498. /***/ }),
  30499. /* 309 */
  30500. /***/ (function(module, exports, __webpack_require__) {
  30501. "use strict";
  30502. Object.defineProperty(exports, "__esModule", {
  30503. value: true
  30504. });
  30505. var _arcLayer = __webpack_require__(292);
  30506. Object.defineProperty(exports, 'ArcLayer', {
  30507. enumerable: true,
  30508. get: function get() {
  30509. return _interopRequireDefault(_arcLayer).default;
  30510. }
  30511. });
  30512. var _iconLayer = __webpack_require__(308);
  30513. Object.defineProperty(exports, 'IconLayer', {
  30514. enumerable: true,
  30515. get: function get() {
  30516. return _interopRequireDefault(_iconLayer).default;
  30517. }
  30518. });
  30519. var _lineLayer = __webpack_require__(313);
  30520. Object.defineProperty(exports, 'LineLayer', {
  30521. enumerable: true,
  30522. get: function get() {
  30523. return _interopRequireDefault(_lineLayer).default;
  30524. }
  30525. });
  30526. var _pointCloudLayer = __webpack_require__(320);
  30527. Object.defineProperty(exports, 'PointCloudLayer', {
  30528. enumerable: true,
  30529. get: function get() {
  30530. return _interopRequireDefault(_pointCloudLayer).default;
  30531. }
  30532. });
  30533. var _scatterplotLayer = __webpack_require__(176);
  30534. Object.defineProperty(exports, 'ScatterplotLayer', {
  30535. enumerable: true,
  30536. get: function get() {
  30537. return _interopRequireDefault(_scatterplotLayer).default;
  30538. }
  30539. });
  30540. var _screenGridLayer = __webpack_require__(327);
  30541. Object.defineProperty(exports, 'ScreenGridLayer', {
  30542. enumerable: true,
  30543. get: function get() {
  30544. return _interopRequireDefault(_screenGridLayer).default;
  30545. }
  30546. });
  30547. var _gridLayer = __webpack_require__(299);
  30548. Object.defineProperty(exports, 'GridLayer', {
  30549. enumerable: true,
  30550. get: function get() {
  30551. return _interopRequireDefault(_gridLayer).default;
  30552. }
  30553. });
  30554. var _gridCellLayer = __webpack_require__(174);
  30555. Object.defineProperty(exports, 'GridCellLayer', {
  30556. enumerable: true,
  30557. get: function get() {
  30558. return _interopRequireDefault(_gridCellLayer).default;
  30559. }
  30560. });
  30561. var _hexagonLayer = __webpack_require__(304);
  30562. Object.defineProperty(exports, 'HexagonLayer', {
  30563. enumerable: true,
  30564. get: function get() {
  30565. return _interopRequireDefault(_hexagonLayer).default;
  30566. }
  30567. });
  30568. var _hexagonCellLayer = __webpack_require__(175);
  30569. Object.defineProperty(exports, 'HexagonCellLayer', {
  30570. enumerable: true,
  30571. get: function get() {
  30572. return _interopRequireDefault(_hexagonCellLayer).default;
  30573. }
  30574. });
  30575. var _pathLayer = __webpack_require__(119);
  30576. Object.defineProperty(exports, 'PathLayer', {
  30577. enumerable: true,
  30578. get: function get() {
  30579. return _interopRequireDefault(_pathLayer).default;
  30580. }
  30581. });
  30582. var _polygonLayer = __webpack_require__(321);
  30583. Object.defineProperty(exports, 'PolygonLayer', {
  30584. enumerable: true,
  30585. get: function get() {
  30586. return _interopRequireDefault(_polygonLayer).default;
  30587. }
  30588. });
  30589. var _geojsonLayer = __webpack_require__(293);
  30590. Object.defineProperty(exports, 'GeoJsonLayer', {
  30591. enumerable: true,
  30592. get: function get() {
  30593. return _interopRequireDefault(_geojsonLayer).default;
  30594. }
  30595. });
  30596. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  30597. /***/ }),
  30598. /* 310 */
  30599. /***/ (function(module, exports, __webpack_require__) {
  30600. "use strict";
  30601. Object.defineProperty(exports, "__esModule", {
  30602. value: true
  30603. });
  30604. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  30605. //
  30606. // Permission is hereby granted, free of charge, to any person obtaining a copy
  30607. // of this software and associated documentation files (the "Software"), to deal
  30608. // in the Software without restriction, including without limitation the rights
  30609. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  30610. // copies of the Software, and to permit persons to whom the Software is
  30611. // furnished to do so, subject to the following conditions:
  30612. //
  30613. // The above copyright notice and this permission notice shall be included in
  30614. // all copies or substantial portions of the Software.
  30615. //
  30616. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  30617. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  30618. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  30619. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  30620. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  30621. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  30622. // THE SOFTWARE.
  30623. exports.default = "#define SHADER_NAME line-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 vColor;\n\nvoid main(void) {\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  30624. /***/ }),
  30625. /* 311 */
  30626. /***/ (function(module, exports, __webpack_require__) {
  30627. "use strict";
  30628. Object.defineProperty(exports, "__esModule", {
  30629. value: true
  30630. });
  30631. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  30632. //
  30633. // Permission is hereby granted, free of charge, to any person obtaining a copy
  30634. // of this software and associated documentation files (the "Software"), to deal
  30635. // in the Software without restriction, including without limitation the rights
  30636. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  30637. // copies of the Software, and to permit persons to whom the Software is
  30638. // furnished to do so, subject to the following conditions:
  30639. //
  30640. // The above copyright notice and this permission notice shall be included in
  30641. // all copies or substantial portions of the Software.
  30642. //
  30643. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  30644. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  30645. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  30646. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  30647. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  30648. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  30649. // THE SOFTWARE.
  30650. exports.default = "#define SHADER_NAME line-layer-vertex-shader-64\n\nattribute vec3 positions;\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceTargetPositions;\nattribute vec4 instanceSourceTargetPositions64xyLow;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\nuniform float strokeWidth;\nuniform float opacity;\n\nvarying vec4 vColor;\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n vec2 offset_screenspace = dir_screenspace * offset_direction * strokeWidth / 2.0;\n vec2 offset_clipspace = project_pixel_to_clipspace(offset_screenspace).xy;\n\n return offset_clipspace;\n}\n\nvoid main(void) {\n // Position\n vec4 instanceSourcePositions64 = vec4(\n instanceSourcePositions.x, instanceSourceTargetPositions64xyLow.x,\n instanceSourcePositions.y, instanceSourceTargetPositions64xyLow.y);\n\n vec4 instanceTargetPositions64 = vec4(\n instanceTargetPositions.x, instanceSourceTargetPositions64xyLow.z,\n instanceTargetPositions.y, instanceSourceTargetPositions64xyLow.w);\n\n vec2 projected_source_coord[2];\n vec2 projected_target_coord[2];\n\n project_position_fp64(instanceSourcePositions64, projected_source_coord);\n project_position_fp64(instanceTargetPositions64, projected_target_coord);\n\n vec2 source_pos_modelspace[4];\n source_pos_modelspace[0] = projected_source_coord[0];\n source_pos_modelspace[1] = projected_source_coord[1];\n source_pos_modelspace[2] = vec2(project_scale(instanceSourcePositions.z), 0.0);\n source_pos_modelspace[3] = vec2(1.0, 0.0);\n\n vec4 source_pos_clipspace = project_to_clipspace_fp64(source_pos_modelspace);\n\n vec2 target_pos_modelspace[4];\n target_pos_modelspace[0] = projected_target_coord[0];\n target_pos_modelspace[1] = projected_target_coord[1];\n target_pos_modelspace[2] = vec2(project_scale(instanceTargetPositions.z), 0.0);\n target_pos_modelspace[3] = vec2(1.0, 0.0);\n\n vec4 target_pos_clipspace = project_to_clipspace_fp64(target_pos_modelspace);\n\n float segmentIndex = positions.x;\n vec4 p = mix(source_pos_clipspace, target_pos_clipspace, segmentIndex);\n\n vec2 offset = getExtrusionOffset(target_pos_clipspace.xy - source_pos_clipspace.xy, positions.y);\n\n gl_Position = p + vec4(offset, 0.0, 0.0);\n\n // Color\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  30651. /***/ }),
  30652. /* 312 */
  30653. /***/ (function(module, exports, __webpack_require__) {
  30654. "use strict";
  30655. Object.defineProperty(exports, "__esModule", {
  30656. value: true
  30657. });
  30658. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  30659. //
  30660. // Permission is hereby granted, free of charge, to any person obtaining a copy
  30661. // of this software and associated documentation files (the "Software"), to deal
  30662. // in the Software without restriction, including without limitation the rights
  30663. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  30664. // copies of the Software, and to permit persons to whom the Software is
  30665. // furnished to do so, subject to the following conditions:
  30666. //
  30667. // The above copyright notice and this permission notice shall be included in
  30668. // all copies or substantial portions of the Software.
  30669. //
  30670. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  30671. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  30672. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  30673. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  30674. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  30675. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  30676. // THE SOFTWARE.
  30677. exports.default = "#define SHADER_NAME line-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 instanceSourcePositions;\nattribute vec3 instanceTargetPositions;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\nuniform float strokeWidth;\nuniform float opacity;\n\nvarying vec4 vColor;\n\n// offset vector by strokeWidth pixels\n// offset_direction is -1 (left) or 1 (right)\nvec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n vec2 offset_screenspace = dir_screenspace * offset_direction * strokeWidth / 2.0;\n vec2 offset_clipspace = project_pixel_to_clipspace(offset_screenspace).xy;\n\n return offset_clipspace;\n}\n\nvoid main(void) {\n // Position\n vec3 sourcePos = project_position(instanceSourcePositions);\n vec3 targetPos = project_position(instanceTargetPositions);\n vec4 source = project_to_clipspace(vec4(sourcePos, 1.0));\n vec4 target = project_to_clipspace(vec4(targetPos, 1.0));\n\n // linear interpolation of source & target to pick right coord\n float segmentIndex = positions.x;\n vec4 p = mix(source, target, segmentIndex);\n\n // extrude\n vec2 offset = getExtrusionOffset(target.xy - source.xy, positions.y);\n gl_Position = p + vec4(offset, 0.0, 0.0);\n\n // Color\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  30678. /***/ }),
  30679. /* 313 */
  30680. /***/ (function(module, exports, __webpack_require__) {
  30681. "use strict";
  30682. Object.defineProperty(exports, "__esModule", {
  30683. value: true
  30684. });
  30685. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  30686. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  30687. var _core = __webpack_require__(13);
  30688. var _luma = __webpack_require__(12);
  30689. var _lineLayerVertex = __webpack_require__(312);
  30690. var _lineLayerVertex2 = _interopRequireDefault(_lineLayerVertex);
  30691. var _lineLayerVertex3 = __webpack_require__(311);
  30692. var _lineLayerVertex4 = _interopRequireDefault(_lineLayerVertex3);
  30693. var _lineLayerFragment = __webpack_require__(310);
  30694. var _lineLayerFragment2 = _interopRequireDefault(_lineLayerFragment);
  30695. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  30696. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  30697. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  30698. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  30699. //
  30700. // Permission is hereby granted, free of charge, to any person obtaining a copy
  30701. // of this software and associated documentation files (the "Software"), to deal
  30702. // in the Software without restriction, including without limitation the rights
  30703. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  30704. // copies of the Software, and to permit persons to whom the Software is
  30705. // furnished to do so, subject to the following conditions:
  30706. //
  30707. // The above copyright notice and this permission notice shall be included in
  30708. // all copies or substantial portions of the Software.
  30709. //
  30710. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  30711. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  30712. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  30713. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  30714. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  30715. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  30716. // THE SOFTWARE.
  30717. var fp64LowPart = _core.experimental.fp64LowPart,
  30718. enable64bitSupport = _core.experimental.enable64bitSupport;
  30719. var DEFAULT_COLOR = [0, 0, 0, 255];
  30720. var defaultProps = {
  30721. strokeWidth: 1,
  30722. fp64: false,
  30723. getSourcePosition: function getSourcePosition(x) {
  30724. return x.sourcePosition;
  30725. },
  30726. getTargetPosition: function getTargetPosition(x) {
  30727. return x.targetPosition;
  30728. },
  30729. getColor: function getColor(x) {
  30730. return x.color || DEFAULT_COLOR;
  30731. }
  30732. };
  30733. var LineLayer = function (_Layer) {
  30734. _inherits(LineLayer, _Layer);
  30735. function LineLayer() {
  30736. _classCallCheck(this, LineLayer);
  30737. return _possibleConstructorReturn(this, (LineLayer.__proto__ || Object.getPrototypeOf(LineLayer)).apply(this, arguments));
  30738. }
  30739. _createClass(LineLayer, [{
  30740. key: 'getShaders',
  30741. value: function getShaders() {
  30742. return enable64bitSupport(this.props) ? { vs: _lineLayerVertex4.default, fs: _lineLayerFragment2.default, modules: ['project64', 'picking'] } : { vs: _lineLayerVertex2.default, fs: _lineLayerFragment2.default, modules: ['picking'] }; // 'project' module added by default.
  30743. }
  30744. }, {
  30745. key: 'initializeState',
  30746. value: function initializeState() {
  30747. var attributeManager = this.getAttributeManager();
  30748. /* eslint-disable max-len */
  30749. attributeManager.addInstanced({
  30750. instanceSourcePositions: {
  30751. size: 3,
  30752. transition: true,
  30753. accessor: 'getSourcePosition',
  30754. update: this.calculateInstanceSourcePositions
  30755. },
  30756. instanceTargetPositions: {
  30757. size: 3,
  30758. transition: true,
  30759. accessor: 'getTargetPosition',
  30760. update: this.calculateInstanceTargetPositions
  30761. },
  30762. instanceColors: {
  30763. size: 4,
  30764. type: _luma.GL.UNSIGNED_BYTE,
  30765. transition: true,
  30766. accessor: 'getColor',
  30767. update: this.calculateInstanceColors
  30768. }
  30769. });
  30770. /* eslint-enable max-len */
  30771. }
  30772. }, {
  30773. key: 'updateAttribute',
  30774. value: function updateAttribute(_ref) {
  30775. var props = _ref.props,
  30776. oldProps = _ref.oldProps,
  30777. changeFlags = _ref.changeFlags;
  30778. if (props.fp64 !== oldProps.fp64) {
  30779. var attributeManager = this.getAttributeManager();
  30780. attributeManager.invalidateAll();
  30781. if (props.fp64 && props.coordinateSystem === _core.COORDINATE_SYSTEM.LNGLAT) {
  30782. attributeManager.addInstanced({
  30783. instanceSourceTargetPositions64xyLow: {
  30784. size: 4,
  30785. accessor: ['getSourcePosition', 'getTargetPosition'],
  30786. update: this.calculateInstanceSourceTargetPositions64xyLow
  30787. }
  30788. });
  30789. } else {
  30790. attributeManager.remove(['instanceSourceTargetPositions64xyLow']);
  30791. }
  30792. }
  30793. }
  30794. }, {
  30795. key: 'updateState',
  30796. value: function updateState(_ref2) {
  30797. var props = _ref2.props,
  30798. oldProps = _ref2.oldProps,
  30799. changeFlags = _ref2.changeFlags;
  30800. _get(LineLayer.prototype.__proto__ || Object.getPrototypeOf(LineLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  30801. if (props.fp64 !== oldProps.fp64) {
  30802. var gl = this.context.gl;
  30803. this.setState({ model: this._getModel(gl) });
  30804. }
  30805. this.updateAttribute({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  30806. }
  30807. }, {
  30808. key: 'draw',
  30809. value: function draw(_ref3) {
  30810. var uniforms = _ref3.uniforms;
  30811. var strokeWidth = this.props.strokeWidth;
  30812. this.state.model.render(Object.assign({}, uniforms, {
  30813. strokeWidth: strokeWidth
  30814. }));
  30815. }
  30816. }, {
  30817. key: '_getModel',
  30818. value: function _getModel(gl) {
  30819. /*
  30820. * (0, -1)-------------_(1, -1)
  30821. * | _,-" |
  30822. * o _,-" o
  30823. * | _,-" |
  30824. * (0, 1)"-------------(1, 1)
  30825. */
  30826. var positions = [0, -1, 0, 0, 1, 0, 1, -1, 0, 1, 1, 0];
  30827. return new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  30828. id: this.props.id,
  30829. geometry: new _luma.Geometry({
  30830. drawMode: _luma.GL.TRIANGLE_STRIP,
  30831. attributes: {
  30832. positions: new Float32Array(positions)
  30833. }
  30834. }),
  30835. isInstanced: true,
  30836. shaderCache: this.context.shaderCache
  30837. }));
  30838. }
  30839. }, {
  30840. key: 'calculateInstanceSourcePositions',
  30841. value: function calculateInstanceSourcePositions(attribute) {
  30842. var _props = this.props,
  30843. data = _props.data,
  30844. getSourcePosition = _props.getSourcePosition;
  30845. var value = attribute.value,
  30846. size = attribute.size;
  30847. var i = 0;
  30848. var _iteratorNormalCompletion = true;
  30849. var _didIteratorError = false;
  30850. var _iteratorError = undefined;
  30851. try {
  30852. for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  30853. var object = _step.value;
  30854. var sourcePosition = getSourcePosition(object);
  30855. value[i + 0] = sourcePosition[0];
  30856. value[i + 1] = sourcePosition[1];
  30857. value[i + 2] = isNaN(sourcePosition[2]) ? 0 : sourcePosition[2];
  30858. i += size;
  30859. }
  30860. } catch (err) {
  30861. _didIteratorError = true;
  30862. _iteratorError = err;
  30863. } finally {
  30864. try {
  30865. if (!_iteratorNormalCompletion && _iterator.return) {
  30866. _iterator.return();
  30867. }
  30868. } finally {
  30869. if (_didIteratorError) {
  30870. throw _iteratorError;
  30871. }
  30872. }
  30873. }
  30874. }
  30875. }, {
  30876. key: 'calculateInstanceTargetPositions',
  30877. value: function calculateInstanceTargetPositions(attribute) {
  30878. var _props2 = this.props,
  30879. data = _props2.data,
  30880. getTargetPosition = _props2.getTargetPosition;
  30881. var value = attribute.value,
  30882. size = attribute.size;
  30883. var i = 0;
  30884. var _iteratorNormalCompletion2 = true;
  30885. var _didIteratorError2 = false;
  30886. var _iteratorError2 = undefined;
  30887. try {
  30888. for (var _iterator2 = data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  30889. var object = _step2.value;
  30890. var targetPosition = getTargetPosition(object);
  30891. value[i + 0] = targetPosition[0];
  30892. value[i + 1] = targetPosition[1];
  30893. value[i + 2] = isNaN(targetPosition[2]) ? 0 : targetPosition[2];
  30894. i += size;
  30895. }
  30896. } catch (err) {
  30897. _didIteratorError2 = true;
  30898. _iteratorError2 = err;
  30899. } finally {
  30900. try {
  30901. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  30902. _iterator2.return();
  30903. }
  30904. } finally {
  30905. if (_didIteratorError2) {
  30906. throw _iteratorError2;
  30907. }
  30908. }
  30909. }
  30910. }
  30911. }, {
  30912. key: 'calculateInstanceSourceTargetPositions64xyLow',
  30913. value: function calculateInstanceSourceTargetPositions64xyLow(attribute) {
  30914. var _props3 = this.props,
  30915. data = _props3.data,
  30916. getSourcePosition = _props3.getSourcePosition,
  30917. getTargetPosition = _props3.getTargetPosition;
  30918. var value = attribute.value,
  30919. size = attribute.size;
  30920. var i = 0;
  30921. var _iteratorNormalCompletion3 = true;
  30922. var _didIteratorError3 = false;
  30923. var _iteratorError3 = undefined;
  30924. try {
  30925. for (var _iterator3 = data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  30926. var object = _step3.value;
  30927. var sourcePosition = getSourcePosition(object);
  30928. var targetPosition = getTargetPosition(object);
  30929. value[i + 0] = fp64LowPart(sourcePosition[0]);
  30930. value[i + 1] = fp64LowPart(sourcePosition[1]);
  30931. value[i + 2] = fp64LowPart(targetPosition[0]);
  30932. value[i + 3] = fp64LowPart(targetPosition[1]);
  30933. i += size;
  30934. }
  30935. } catch (err) {
  30936. _didIteratorError3 = true;
  30937. _iteratorError3 = err;
  30938. } finally {
  30939. try {
  30940. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  30941. _iterator3.return();
  30942. }
  30943. } finally {
  30944. if (_didIteratorError3) {
  30945. throw _iteratorError3;
  30946. }
  30947. }
  30948. }
  30949. }
  30950. }, {
  30951. key: 'calculateInstanceColors',
  30952. value: function calculateInstanceColors(attribute) {
  30953. var _props4 = this.props,
  30954. data = _props4.data,
  30955. getColor = _props4.getColor;
  30956. var value = attribute.value,
  30957. size = attribute.size;
  30958. var i = 0;
  30959. var _iteratorNormalCompletion4 = true;
  30960. var _didIteratorError4 = false;
  30961. var _iteratorError4 = undefined;
  30962. try {
  30963. for (var _iterator4 = data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
  30964. var object = _step4.value;
  30965. var color = getColor(object);
  30966. value[i + 0] = color[0];
  30967. value[i + 1] = color[1];
  30968. value[i + 2] = color[2];
  30969. value[i + 3] = isNaN(color[3]) ? 255 : color[3];
  30970. i += size;
  30971. }
  30972. } catch (err) {
  30973. _didIteratorError4 = true;
  30974. _iteratorError4 = err;
  30975. } finally {
  30976. try {
  30977. if (!_iteratorNormalCompletion4 && _iterator4.return) {
  30978. _iterator4.return();
  30979. }
  30980. } finally {
  30981. if (_didIteratorError4) {
  30982. throw _iteratorError4;
  30983. }
  30984. }
  30985. }
  30986. }
  30987. }]);
  30988. return LineLayer;
  30989. }(_core.Layer);
  30990. exports.default = LineLayer;
  30991. LineLayer.layerName = 'LineLayer';
  30992. LineLayer.defaultProps = defaultProps;
  30993. /***/ }),
  30994. /* 314 */
  30995. /***/ (function(module, exports, __webpack_require__) {
  30996. "use strict";
  30997. Object.defineProperty(exports, "__esModule", {
  30998. value: true
  30999. });
  31000. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31001. //
  31002. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31003. // of this software and associated documentation files (the "Software"), to deal
  31004. // in the Software without restriction, including without limitation the rights
  31005. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31006. // copies of the Software, and to permit persons to whom the Software is
  31007. // furnished to do so, subject to the following conditions:
  31008. //
  31009. // The above copyright notice and this permission notice shall be included in
  31010. // all copies or substantial portions of the Software.
  31011. //
  31012. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31013. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31014. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31015. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31016. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31017. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31018. // THE SOFTWARE.
  31019. exports.default = "#define SHADER_NAME path-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform float jointType;\nuniform float miterLimit;\nuniform float alignMode;\n\nvarying vec4 vColor;\nvarying vec2 vCornerOffset;\nvarying float vMiterLength;\nvarying vec2 vDashArray;\nvarying float vPathPosition;\nvarying float vPathLength;\n\n// mod doesn't work correctly for negative numbers\nfloat mod2(float a, float b) {\n return a - floor(a / b) * b;\n}\n\nfloat round(float x) {\n return floor(x + 0.5);\n}\n\n// if given position is in the gap part of the dashed line\n// dashArray.x: solid stroke length, relative to width\n// dashArray.y: gap length, relative to width\n// alignMode:\n// 0 - no adjustment\n// o---- ---- ---- ---- o---- -o---- ---- o\n// 1 - stretch to fit, draw half dash at each end for nicer joints\n// o-- ---- ---- ---- --o-- --o-- ---- --o\nbool dash_isFragInGap() {\n float solidLength = vDashArray.x;\n float gapLength = vDashArray.y;\n\n float unitLength = solidLength + gapLength;\n\n if (unitLength == 0.0) {\n return false;\n }\n\n unitLength = mix(\n unitLength,\n vPathLength / round(vPathLength / unitLength),\n alignMode\n );\n\n float offset = alignMode * solidLength / 2.0;\n\n return gapLength > 0.0 &&\n vPathPosition >= 0.0 &&\n vPathPosition <= vPathLength &&\n mod2(vPathPosition + offset, unitLength) > solidLength;\n}\n\nvoid main(void) {\n // if joint is rounded, test distance from the corner\n if (jointType > 0.0 && vMiterLength > 0.0 && length(vCornerOffset) > 1.0) {\n // Enable to debug joints\n // gl_FragColor = vec4(0., 1., 0., 1.);\n // return;\n discard;\n }\n if (jointType == 0.0 && vMiterLength > miterLimit) {\n // Enable to debug joints\n // gl_FragColor = vec4(0., 0., 1., 1.);\n // return;\n discard;\n }\n if (vColor.a == 0.0 || dash_isFragInGap()) {\n // Enable to debug joints\n // gl_FragColor = vec4(0., 1., 1., 1.);\n // return;\n discard;\n }\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  31020. /***/ }),
  31021. /* 315 */
  31022. /***/ (function(module, exports, __webpack_require__) {
  31023. "use strict";
  31024. Object.defineProperty(exports, "__esModule", {
  31025. value: true
  31026. });
  31027. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31028. //
  31029. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31030. // of this software and associated documentation files (the "Software"), to deal
  31031. // in the Software without restriction, including without limitation the rights
  31032. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31033. // copies of the Software, and to permit persons to whom the Software is
  31034. // furnished to do so, subject to the following conditions:
  31035. //
  31036. // The above copyright notice and this permission notice shall be included in
  31037. // all copies or substantial portions of the Software.
  31038. //
  31039. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31040. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31041. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31042. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31043. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31044. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31045. // THE SOFTWARE.
  31046. exports.default = "\n#define SHADER_NAME path-layer-vertex-shader\n\nattribute vec3 positions;\n\nattribute vec3 instanceStartPositions;\nattribute vec3 instanceEndPositions;\nattribute vec4 instanceStartEndPositions64xyLow;\nattribute vec3 instanceLeftDeltas;\nattribute vec3 instanceRightDeltas;\nattribute float instanceStrokeWidths;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec2 instanceDashArrays;\n\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform float jointType;\nuniform float miterLimit;\n\nuniform float opacity;\n\nvarying vec4 vColor;\nvarying vec2 vCornerOffset;\nvarying float vMiterLength;\nvarying vec2 vDashArray;\nvarying float vPathPosition;\nvarying float vPathLength;\n\nconst float EPSILON = 0.001;\nconst float PIXEL_EPSILON = 0.1;\n\nfloat flipIfTrue(bool flag) {\n return -(float(flag) * 2. - 1.);\n}\n\nvec3 lineJoin(vec2 prevPoint64[2], vec2 currPoint64[2], vec2 nextPoint64[2]) {\n\n float width = clamp(project_scale(instanceStrokeWidths * widthScale),\n widthMinPixels, widthMaxPixels) / 2.0;\n\n vec2 deltaA64[2];\n vec2 deltaB64[2];\n\n vec2_sub_fp64(currPoint64, prevPoint64, deltaA64);\n vec2_sub_fp64(nextPoint64, currPoint64, deltaB64);\n\n vec2 lengthA64 = vec2_length_fp64(deltaA64);\n vec2 lengthB64 = vec2_length_fp64(deltaB64);\n\n vec2 deltaA = vec2(deltaA64[0].x, deltaA64[1].x);\n vec2 deltaB = vec2(deltaB64[0].x, deltaB64[1].x);\n\n float lenA = lengthA64.x;\n float lenB = lengthB64.x;\n\n vec2 offsetVec;\n float offsetScale;\n float offsetDirection;\n\n // when two points are closer than PIXEL_EPSILON in pixels,\n // assume they are the same point to avoid precision issue\n lenA = lenA > PIXEL_EPSILON ? lenA : 0.0;\n lenB = lenB > PIXEL_EPSILON ? lenB : 0.0;\n vec2 dirA = lenA > 0. ? deltaA / lenA : vec2(0.0, 0.0);\n vec2 dirB = lenB > 0. ? deltaB / lenB : vec2(0.0, 0.0);\n\n vec2 perpA = vec2(-dirA.y, dirA.x);\n vec2 perpB = vec2(-dirB.y, dirB.x);\n\n // tangent of the corner\n vec2 tangent = vec2(dirA + dirB);\n tangent = length(tangent) > 0. ? normalize(tangent) : perpA;\n // direction of the corner\n vec2 miterVec = vec2(-tangent.y, tangent.x);\n // width offset from current position\n vec2 perp = mix(perpB, perpA, positions.x);\n float L = mix(lenB, lenA, positions.x);\n\n // cap super sharp angles\n float sinHalfA = abs(dot(miterVec, perp));\n float cosHalfA = abs(dot(dirA, miterVec));\n bool turnsRight = dirA.x * dirB.y > dirA.y * dirB.x;\n\n // relative position to the corner:\n // -1: inside (smaller side of the angle)\n // 0: center\n // 1: outside (bigger side of the angle)\n float cornerPosition = mix(\n flipIfTrue(turnsRight == (positions.y > 0.0)),\n 0.0,\n positions.z\n );\n\n offsetScale = 1.0 / max(sinHalfA, EPSILON);\n\n // do not bevel if line segment is too short\n cornerPosition *= float(cornerPosition <= 0.0 || sinHalfA < min(lenA, lenB) / width * cosHalfA);\n // trim if inside corner extends further than the line segment\n offsetScale = mix(\n offsetScale,\n min(offsetScale, L / width / max(cosHalfA, EPSILON)),\n float(cornerPosition < 0.0)\n );\n\n vMiterLength = mix(\n offsetScale * cornerPosition,\n mix(offsetScale, 0.0, cornerPosition),\n step(0.0, cornerPosition)\n ) - sinHalfA * jointType;\n offsetDirection = mix(\n positions.y,\n mix(\n flipIfTrue(turnsRight),\n positions.y * flipIfTrue(turnsRight == (positions.x == 1.)),\n cornerPosition\n ),\n step(0.0, cornerPosition)\n );\n offsetVec = mix(miterVec, -tangent, step(0.5, cornerPosition));\n offsetScale = mix(offsetScale, 1.0 / max(cosHalfA, 0.001), step(0.5, cornerPosition));\n\n // special treatment for start cap and end cap\n // using a small number as the limit for determining if the lenA or lenB is 0\n float isStartCap = step(lenA, 1.0e-5);\n float isEndCap = step(lenB, 1.0e-5);\n float isCap = max(isStartCap, isEndCap);\n\n // 0: center, 1: side\n cornerPosition = isCap * (1.0 - positions.z);\n\n // start of path: use next - curr\n offsetVec = mix(offsetVec, mix(dirB, perpB, cornerPosition), isStartCap);\n // end of path: use curr - prev\n offsetVec = mix(offsetVec, mix(dirA, perpA, cornerPosition), isEndCap);\n\n // extend out a triangle to envelope the round cap\n offsetScale = mix(\n offsetScale,\n mix(4.0 * jointType, 1.0, cornerPosition),\n isCap\n );\n vMiterLength = mix(vMiterLength, 1.0 - cornerPosition, isCap);\n\n offsetDirection = mix(\n offsetDirection,\n mix(flipIfTrue(isStartCap > 0.), positions.y, cornerPosition),\n isCap\n );\n\n vCornerOffset = offsetVec * offsetDirection * offsetScale;\n\n // Generate variables for dash calculation\n vDashArray = instanceDashArrays;\n vPathLength = L / width;\n float isEnd = positions.x;\n vec2 offsetFromStartOfPath = mix(vCornerOffset, vCornerOffset + deltaA / width, isEnd);\n vec2 dir = mix(dirB, dirA, isEnd);\n vPathPosition = dot(offsetFromStartOfPath, dir);\n\n return vec3(vCornerOffset * width, 0.0);\n}\n\nvoid main() {\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n float isEnd = positions.x;\n\n // Calculate current position\n vec3 currPosition = mix(instanceStartPositions, instanceEndPositions, isEnd);\n currPosition = project_position(currPosition);\n\n // Calculate current position 64bit\n\n vec2 instanceStartPositions64[2];\n instanceStartPositions64[0] = vec2(instanceStartPositions.x, instanceStartEndPositions64xyLow.x);\n instanceStartPositions64[1] = vec2(instanceStartPositions.y, instanceStartEndPositions64xyLow.y);\n\n vec2 instanceEndPositions64[2];\n instanceEndPositions64[0] = vec2(instanceEndPositions.x, instanceStartEndPositions64xyLow.z);\n instanceEndPositions64[1] = vec2(instanceEndPositions.y, instanceStartEndPositions64xyLow.w);\n\n vec2 tempCurrPosition64[2];\n vec2_mix_fp64(instanceStartPositions64, instanceEndPositions64, isEnd, tempCurrPosition64);\n\n vec4 currPosition64 = vec4(tempCurrPosition64[0].xy, tempCurrPosition64[1].xy);\n\n vec2 projected_curr_position[2];\n project_position_fp64(currPosition64, projected_curr_position);\n float projected_curr_position_z = project_scale(currPosition.z);\n\n // Calculate previous position\n\n vec3 prevPosition = mix(-instanceLeftDeltas, vec3(0.0), isEnd);\n\n // Calculate prev position 64bit\n\n vec2 tempPrevPosition64[2];\n tempPrevPosition64[0] = sum_fp64(vec2(prevPosition.x, 0.0), instanceStartPositions64[0]);\n tempPrevPosition64[1] = sum_fp64(vec2(prevPosition.y, 0.0), instanceStartPositions64[1]);\n\n vec4 prevPosition64 = vec4(tempPrevPosition64[0].xy, tempPrevPosition64[1].xy);\n\n vec2 projected_prev_position[2];\n project_position_fp64(prevPosition64, projected_prev_position);\n\n // Calculate next positions\n vec3 nextPosition = mix(vec3(0.0), instanceRightDeltas, isEnd);\n\n // Calculate next position 64bit\n\n vec2 tempNextPosition64[2];\n tempNextPosition64[0] = sum_fp64(vec2(nextPosition.x, 0.0), instanceEndPositions64[0]);\n tempNextPosition64[1] = sum_fp64(vec2(nextPosition.y, 0.0), instanceEndPositions64[1]);\n\n vec4 nextPosition64 = vec4(tempNextPosition64[0].xy, tempNextPosition64[1].xy);\n\n vec2 projected_next_position[2];\n project_position_fp64(nextPosition64, projected_next_position);\n\n vec3 pos = lineJoin(projected_prev_position, projected_curr_position, projected_next_position);\n vec2 vertex_pos_modelspace[4];\n\n vertex_pos_modelspace[0] = sum_fp64(vec2(pos.x, 0.0), projected_curr_position[0]);\n vertex_pos_modelspace[1] = sum_fp64(vec2(pos.y, 0.0), projected_curr_position[1]);\n vertex_pos_modelspace[2] = vec2(pos.z + projected_curr_position_z, 0.0);\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace);\n}\n";
  31047. /***/ }),
  31048. /* 316 */
  31049. /***/ (function(module, exports, __webpack_require__) {
  31050. "use strict";
  31051. Object.defineProperty(exports, "__esModule", {
  31052. value: true
  31053. });
  31054. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31055. //
  31056. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31057. // of this software and associated documentation files (the "Software"), to deal
  31058. // in the Software without restriction, including without limitation the rights
  31059. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31060. // copies of the Software, and to permit persons to whom the Software is
  31061. // furnished to do so, subject to the following conditions:
  31062. //
  31063. // The above copyright notice and this permission notice shall be included in
  31064. // all copies or substantial portions of the Software.
  31065. //
  31066. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31067. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31068. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31069. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31070. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31071. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31072. // THE SOFTWARE.
  31073. exports.default = "#define SHADER_NAME path-layer-vertex-shader-64\n\nattribute vec3 positions;\n\nattribute vec3 instanceStartPositions;\nattribute vec3 instanceEndPositions;\nattribute vec3 instanceLeftDeltas;\nattribute vec3 instanceRightDeltas;\nattribute float instanceStrokeWidths;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec2 instanceDashArrays;\n\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform float jointType;\nuniform float miterLimit;\n\nuniform float opacity;\n\nvarying vec4 vColor;\nvarying vec2 vCornerOffset;\nvarying float vMiterLength;\nvarying vec2 vDashArray;\nvarying float vPathPosition;\nvarying float vPathLength;\n\nconst float EPSILON = 0.001;\nconst float PIXEL_EPSILON = 0.1;\n\nfloat flipIfTrue(bool flag) {\n return -(float(flag) * 2. - 1.);\n}\n\n// calculate line join positions\nvec3 lineJoin(\n vec3 prevPoint, vec3 currPoint, vec3 nextPoint,\n float relativePosition, bool isEnd, bool isJoint,\n float width\n) {\n vec2 deltaA = currPoint.xy - prevPoint.xy;\n vec2 deltaB = nextPoint.xy - currPoint.xy;\n\n float lenA = length(deltaA);\n float lenB = length(deltaB);\n\n // when two points are closer than PIXEL_EPSILON in pixels,\n // assume they are the same point to avoid precision issue\n lenA = lenA > PIXEL_EPSILON ? lenA : 0.0;\n lenB = lenB > PIXEL_EPSILON ? lenB : 0.0;\n\n vec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0);\n vec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0);\n\n vec2 perpA = vec2(-dirA.y, dirA.x);\n vec2 perpB = vec2(-dirB.y, dirB.x);\n\n // tangent of the corner\n vec2 tangent = vec2(dirA + dirB);\n tangent = length(tangent) > 0. ? normalize(tangent) : perpA;\n // direction of the corner\n vec2 miterVec = vec2(-tangent.y, tangent.x);\n // width offset from current position\n vec2 perp = isEnd ? perpA : perpB;\n float L = isEnd ? lenA : lenB;\n\n // cap super sharp angles\n float sinHalfA = abs(dot(miterVec, perp));\n float cosHalfA = abs(dot(dirA, miterVec));\n\n bool turnsRight = dirA.x * dirB.y > dirA.y * dirB.x;\n\n float offsetScale = 1.0 / max(sinHalfA, EPSILON);\n\n float cornerPosition = isJoint ?\n 0.0 :\n flipIfTrue(turnsRight == (relativePosition > 0.0));\n\n // do not bevel if line segment is too short\n cornerPosition *=\n float(cornerPosition <= 0.0 || sinHalfA < min(lenA, lenB) / width * cosHalfA);\n\n // trim if inside corner extends further than the line segment\n if (cornerPosition < 0.0) {\n offsetScale = min(offsetScale, L / width / max(cosHalfA, EPSILON));\n }\n\n vMiterLength = cornerPosition >= 0.0 ?\n mix(offsetScale, 0.0, cornerPosition) :\n offsetScale * cornerPosition;\n vMiterLength -= sinHalfA * jointType;\n\n float offsetDirection = mix(\n positions.y,\n mix(\n flipIfTrue(turnsRight),\n positions.y * flipIfTrue(turnsRight == (positions.x == 1.)),\n cornerPosition\n ),\n step(0.0, cornerPosition)\n );\n\n vec2 offsetVec = mix(miterVec, -tangent, step(0.5, cornerPosition));\n offsetScale = mix(offsetScale, 1.0 / max(cosHalfA, 0.001), step(0.5, cornerPosition));\n\n // special treatment for start cap and end cap\n // TODO - This has an issue. len is always positive because it is length.\n // Step returns zero if -lenA<0, so practically this is a comparison of\n // lenA with zero, with lots of problems because of the -lenA. Can we use EPSILON?\n bool isStartCap = step(0.0, -lenA) > 0.5;\n bool isEndCap = step(0.0, -lenB) > 0.5;\n bool isCap = isStartCap || isEndCap;\n\n // 0: center, 1: side\n cornerPosition = isCap ? (1.0 - positions.z) : 0.;\n\n // start of path: use next - curr\n if (isStartCap) {\n offsetVec = mix(dirB, perpB, cornerPosition);\n }\n\n // end of path: use curr - prev\n if (isEndCap) {\n offsetVec = mix(dirA, perpA, cornerPosition);\n }\n\n // extend out a triangle to envelope the round cap\n if (isCap) {\n offsetScale = mix(4.0 * jointType, 1.0, cornerPosition);\n vMiterLength = 1.0 - cornerPosition;\n offsetDirection = mix(flipIfTrue(isStartCap), positions.y, cornerPosition);\n }\n\n vCornerOffset = offsetVec * offsetDirection * offsetScale;\n\n // Generate variables for dash calculation\n vDashArray = instanceDashArrays;\n vPathLength = L / width;\n // vec2 offsetFromStartOfPath = isEnd ? vCornerOffset + deltaA / width : vCornerOffset;\n vec2 offsetFromStartOfPath = vCornerOffset;\n if (isEnd) {\n offsetFromStartOfPath += deltaA / width;\n }\n vec2 dir = isEnd ? dirA : dirB;\n vPathPosition = dot(offsetFromStartOfPath, dir);\n\n return currPoint + vec3(vCornerOffset * width, 0.0);\n}\n\n// calculate line join positions\n// extract params from attributes and uniforms\nvec3 lineJoin(vec3 prevPoint, vec3 currPoint, vec3 nextPoint) {\n\n // relative position to the corner:\n // -1: inside (smaller side of the angle)\n // 0: center\n // 1: outside (bigger side of the angle)\n\n float relativePosition = positions.y;\n bool isEnd = positions.x > EPSILON;\n bool isJoint = positions.z > EPSILON;\n\n float width = clamp(project_scale(instanceStrokeWidths * widthScale),\n widthMinPixels, widthMaxPixels) / 2.0;\n\n return lineJoin(\n prevPoint, currPoint, nextPoint,\n relativePosition, isEnd, isJoint,\n width\n );\n}\n\nvoid main() {\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n float isEnd = positions.x;\n\n vec3 prevPosition = mix(-instanceLeftDeltas, vec3(0.0), isEnd) + instanceStartPositions;\n prevPosition = project_position(prevPosition);\n\n vec3 currPosition = mix(instanceStartPositions, instanceEndPositions, isEnd);\n currPosition = project_position(currPosition);\n\n vec3 nextPosition = mix(vec3(0.0), instanceRightDeltas, isEnd) + instanceEndPositions;\n nextPosition = project_position(nextPosition);\n\n vec3 pos = lineJoin(prevPosition, currPosition, nextPosition);\n\n gl_Position = project_to_clipspace(vec4(pos, 1.0));\n}\n";
  31074. /***/ }),
  31075. /* 317 */
  31076. /***/ (function(module, exports, __webpack_require__) {
  31077. "use strict";
  31078. Object.defineProperty(exports, "__esModule", {
  31079. value: true
  31080. });
  31081. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31082. //
  31083. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31084. // of this software and associated documentation files (the "Software"), to deal
  31085. // in the Software without restriction, including without limitation the rights
  31086. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31087. // copies of the Software, and to permit persons to whom the Software is
  31088. // furnished to do so, subject to the following conditions:
  31089. //
  31090. // The above copyright notice and this permission notice shall be included in
  31091. // all copies or substantial portions of the Software.
  31092. //
  31093. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31094. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31095. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31096. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31097. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31098. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31099. // THE SOFTWARE.
  31100. exports.default = "#define SHADER_NAME point-cloud-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n\n float distToCenter = length(unitPosition);\n\n if (distToCenter > 1.0) {\n discard;\n }\n\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  31101. /***/ }),
  31102. /* 318 */
  31103. /***/ (function(module, exports, __webpack_require__) {
  31104. "use strict";
  31105. Object.defineProperty(exports, "__esModule", {
  31106. value: true
  31107. });
  31108. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31109. //
  31110. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31111. // of this software and associated documentation files (the "Software"), to deal
  31112. // in the Software without restriction, including without limitation the rights
  31113. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31114. // copies of the Software, and to permit persons to whom the Software is
  31115. // furnished to do so, subject to the following conditions:
  31116. //
  31117. // The above copyright notice and this permission notice shall be included in
  31118. // all copies or substantial portions of the Software.
  31119. //
  31120. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31121. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31122. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31123. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31124. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31125. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31126. // THE SOFTWARE.
  31127. exports.default = "#define SHADER_NAME point-cloud-layer-vertex-shader-64\n\nattribute vec3 positions;\n\nattribute vec3 instancePositions;\nattribute vec2 instancePositions64xyLow;\nattribute vec3 instanceNormals;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform float radiusPixels;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n // position on the containing square in [-1, 1] space\n unitPosition = positions.xy;\n\n vec4 instancePositions64xy = vec4(\n instancePositions.x, instancePositions64xyLow.x,\n instancePositions.y, instancePositions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(instancePositions64xy, projected_coord_xy);\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = projected_coord_xy[0];\n vertex_pos_modelspace[1] = projected_coord_xy[1];\n vertex_pos_modelspace[2] = vec2(project_scale(instancePositions.z), 0.0);\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace);\n gl_Position += project_pixel_to_clipspace(positions.xy * radiusPixels);\n\n vec4 position_worldspace = vec4(\n projected_coord_xy[0].x, projected_coord_xy[1].x,\n project_scale(instancePositions.z), 1.0);\n\n // Apply lighting\n float lightWeight = getLightWeight(position_worldspace.xyz, // the w component is always 1.0\n instanceNormals);\n\n // Apply opacity to instance color, or return instance picking color\n vColor = vec4(lightWeight * instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  31128. /***/ }),
  31129. /* 319 */
  31130. /***/ (function(module, exports, __webpack_require__) {
  31131. "use strict";
  31132. Object.defineProperty(exports, "__esModule", {
  31133. value: true
  31134. });
  31135. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31136. //
  31137. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31138. // of this software and associated documentation files (the "Software"), to deal
  31139. // in the Software without restriction, including without limitation the rights
  31140. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31141. // copies of the Software, and to permit persons to whom the Software is
  31142. // furnished to do so, subject to the following conditions:
  31143. //
  31144. // The above copyright notice and this permission notice shall be included in
  31145. // all copies or substantial portions of the Software.
  31146. //
  31147. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31148. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31149. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31150. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31151. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31152. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31153. // THE SOFTWARE.
  31154. exports.default = "#define SHADER_NAME point-cloud-layer-vertex-shader\n\nattribute vec3 positions;\n\nattribute vec3 instancePositions;\nattribute vec3 instanceNormals;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform float radiusPixels;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\n\nvoid main(void) {\n // position on the containing square in [-1, 1] space\n unitPosition = positions.xy;\n\n // Find the center of the point and add the current vertex\n vec4 position_worldspace = vec4(project_position(instancePositions), 1.0);\n gl_Position = project_to_clipspace(position_worldspace) ;\n gl_Position += project_pixel_to_clipspace(positions.xy * radiusPixels);\n\n // Apply lighting\n float lightWeight = getLightWeight(position_worldspace.xyz, // the w component is always 1.0\n instanceNormals);\n\n // Apply opacity to instance color, or return instance picking color\n vColor = vec4(lightWeight * instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  31155. /***/ }),
  31156. /* 320 */
  31157. /***/ (function(module, exports, __webpack_require__) {
  31158. "use strict";
  31159. Object.defineProperty(exports, "__esModule", {
  31160. value: true
  31161. });
  31162. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  31163. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  31164. var _core = __webpack_require__(13);
  31165. var _luma = __webpack_require__(12);
  31166. var _pointCloudLayerVertex = __webpack_require__(319);
  31167. var _pointCloudLayerVertex2 = _interopRequireDefault(_pointCloudLayerVertex);
  31168. var _pointCloudLayerVertex3 = __webpack_require__(318);
  31169. var _pointCloudLayerVertex4 = _interopRequireDefault(_pointCloudLayerVertex3);
  31170. var _pointCloudLayerFragment = __webpack_require__(317);
  31171. var _pointCloudLayerFragment2 = _interopRequireDefault(_pointCloudLayerFragment);
  31172. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  31173. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  31174. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  31175. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31176. //
  31177. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31178. // of this software and associated documentation files (the "Software"), to deal
  31179. // in the Software without restriction, including without limitation the rights
  31180. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31181. // copies of the Software, and to permit persons to whom the Software is
  31182. // furnished to do so, subject to the following conditions:
  31183. //
  31184. // The above copyright notice and this permission notice shall be included in
  31185. // all copies or substantial portions of the Software.
  31186. //
  31187. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31188. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31189. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31190. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31191. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31192. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31193. // THE SOFTWARE.
  31194. var fp64LowPart = _core.experimental.fp64LowPart,
  31195. enable64bitSupport = _core.experimental.enable64bitSupport;
  31196. var DEFAULT_COLOR = [0, 0, 0, 255];
  31197. var defaultProps = {
  31198. radiusPixels: 10, // point radius in pixels
  31199. fp64: false,
  31200. getPosition: function getPosition(x) {
  31201. return x.position;
  31202. },
  31203. getNormal: function getNormal(x) {
  31204. return x.normal;
  31205. },
  31206. getColor: function getColor(x) {
  31207. return x.color || DEFAULT_COLOR;
  31208. },
  31209. lightSettings: {
  31210. lightsPosition: [0, 0, 5000, -1000, 1000, 8000, 5000, -5000, 1000],
  31211. ambientRatio: 0.2,
  31212. diffuseRatio: 0.6,
  31213. specularRatio: 0.8,
  31214. lightsStrength: [1.0, 0.0, 0.8, 0.0, 0.4, 0.0],
  31215. numberOfLights: 3
  31216. }
  31217. };
  31218. var PointCloudLayer = function (_Layer) {
  31219. _inherits(PointCloudLayer, _Layer);
  31220. function PointCloudLayer() {
  31221. _classCallCheck(this, PointCloudLayer);
  31222. return _possibleConstructorReturn(this, (PointCloudLayer.__proto__ || Object.getPrototypeOf(PointCloudLayer)).apply(this, arguments));
  31223. }
  31224. _createClass(PointCloudLayer, [{
  31225. key: 'getShaders',
  31226. value: function getShaders(id) {
  31227. var shaderCache = this.context.shaderCache;
  31228. return enable64bitSupport(this.props) ? { vs: _pointCloudLayerVertex4.default, fs: _pointCloudLayerFragment2.default, modules: ['project64', 'lighting', 'picking'], shaderCache: shaderCache } : { vs: _pointCloudLayerVertex2.default, fs: _pointCloudLayerFragment2.default, modules: ['lighting', 'picking'], shaderCache: shaderCache }; // 'project' module added by default.
  31229. }
  31230. }, {
  31231. key: 'initializeState',
  31232. value: function initializeState() {
  31233. /* eslint-disable max-len */
  31234. this.state.attributeManager.addInstanced({
  31235. instancePositions: {
  31236. size: 3,
  31237. transition: true,
  31238. accessor: 'getPosition',
  31239. update: this.calculateInstancePositions
  31240. },
  31241. instanceNormals: {
  31242. size: 3,
  31243. transition: true,
  31244. accessor: 'getNormal',
  31245. defaultValue: 1,
  31246. update: this.calculateInstanceNormals
  31247. },
  31248. instanceColors: {
  31249. size: 4,
  31250. type: _luma.GL.UNSIGNED_BYTE,
  31251. transition: true,
  31252. accessor: 'getColor',
  31253. update: this.calculateInstanceColors
  31254. }
  31255. });
  31256. /* eslint-enable max-len */
  31257. }
  31258. }, {
  31259. key: 'updateAttribute',
  31260. value: function updateAttribute(_ref) {
  31261. var props = _ref.props,
  31262. oldProps = _ref.oldProps,
  31263. changeFlags = _ref.changeFlags;
  31264. if (props.fp64 !== oldProps.fp64) {
  31265. var attributeManager = this.getAttributeManager();
  31266. attributeManager.invalidateAll();
  31267. if (props.fp64 && props.coordinateSystem === _core.COORDINATE_SYSTEM.LNGLAT) {
  31268. attributeManager.addInstanced({
  31269. instancePositions64xyLow: {
  31270. size: 2,
  31271. accessor: 'getPosition',
  31272. update: this.calculateInstancePositions64xyLow
  31273. }
  31274. });
  31275. } else {
  31276. attributeManager.remove(['instancePositions64xyLow']);
  31277. }
  31278. }
  31279. }
  31280. }, {
  31281. key: 'updateState',
  31282. value: function updateState(_ref2) {
  31283. var props = _ref2.props,
  31284. oldProps = _ref2.oldProps,
  31285. changeFlags = _ref2.changeFlags;
  31286. _get(PointCloudLayer.prototype.__proto__ || Object.getPrototypeOf(PointCloudLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  31287. if (props.fp64 !== oldProps.fp64) {
  31288. var gl = this.context.gl;
  31289. this.setState({ model: this._getModel(gl) });
  31290. }
  31291. this.updateAttribute({ props: props, oldProps: oldProps, changeFlags: changeFlags });
  31292. }
  31293. }, {
  31294. key: 'draw',
  31295. value: function draw(_ref3) {
  31296. var uniforms = _ref3.uniforms;
  31297. var _props = this.props,
  31298. radiusPixels = _props.radiusPixels,
  31299. lightSettings = _props.lightSettings;
  31300. this.state.model.render(Object.assign({}, uniforms, {
  31301. radiusPixels: radiusPixels
  31302. }, lightSettings));
  31303. }
  31304. }, {
  31305. key: '_getModel',
  31306. value: function _getModel(gl) {
  31307. // a triangle that minimally cover the unit circle
  31308. var positions = [];
  31309. for (var i = 0; i < 3; i++) {
  31310. var angle = i / 3 * Math.PI * 2;
  31311. positions.push(Math.cos(angle) * 2, Math.sin(angle) * 2, 0);
  31312. }
  31313. return new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  31314. id: this.props.id,
  31315. geometry: new _luma.Geometry({
  31316. drawMode: _luma.GL.TRIANGLES,
  31317. attributes: {
  31318. positions: new Float32Array(positions)
  31319. }
  31320. }),
  31321. isInstanced: true,
  31322. shaderCache: this.context.shaderCache
  31323. }));
  31324. }
  31325. }, {
  31326. key: 'calculateInstancePositions',
  31327. value: function calculateInstancePositions(attribute) {
  31328. var _props2 = this.props,
  31329. data = _props2.data,
  31330. getPosition = _props2.getPosition;
  31331. var value = attribute.value;
  31332. var i = 0;
  31333. var _iteratorNormalCompletion = true;
  31334. var _didIteratorError = false;
  31335. var _iteratorError = undefined;
  31336. try {
  31337. for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  31338. var point = _step.value;
  31339. var position = getPosition(point);
  31340. value[i++] = position[0];
  31341. value[i++] = position[1];
  31342. value[i++] = position[2] || 0;
  31343. }
  31344. } catch (err) {
  31345. _didIteratorError = true;
  31346. _iteratorError = err;
  31347. } finally {
  31348. try {
  31349. if (!_iteratorNormalCompletion && _iterator.return) {
  31350. _iterator.return();
  31351. }
  31352. } finally {
  31353. if (_didIteratorError) {
  31354. throw _iteratorError;
  31355. }
  31356. }
  31357. }
  31358. }
  31359. }, {
  31360. key: 'calculateInstancePositions64xyLow',
  31361. value: function calculateInstancePositions64xyLow(attribute) {
  31362. var _props3 = this.props,
  31363. data = _props3.data,
  31364. getPosition = _props3.getPosition;
  31365. var value = attribute.value;
  31366. var i = 0;
  31367. var _iteratorNormalCompletion2 = true;
  31368. var _didIteratorError2 = false;
  31369. var _iteratorError2 = undefined;
  31370. try {
  31371. for (var _iterator2 = data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  31372. var point = _step2.value;
  31373. var position = getPosition(point);
  31374. value[i++] = fp64LowPart(position[0]);
  31375. value[i++] = fp64LowPart(position[1]);
  31376. }
  31377. } catch (err) {
  31378. _didIteratorError2 = true;
  31379. _iteratorError2 = err;
  31380. } finally {
  31381. try {
  31382. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  31383. _iterator2.return();
  31384. }
  31385. } finally {
  31386. if (_didIteratorError2) {
  31387. throw _iteratorError2;
  31388. }
  31389. }
  31390. }
  31391. }
  31392. }, {
  31393. key: 'calculateInstanceNormals',
  31394. value: function calculateInstanceNormals(attribute) {
  31395. var _props4 = this.props,
  31396. data = _props4.data,
  31397. getNormal = _props4.getNormal;
  31398. var value = attribute.value;
  31399. var i = 0;
  31400. var _iteratorNormalCompletion3 = true;
  31401. var _didIteratorError3 = false;
  31402. var _iteratorError3 = undefined;
  31403. try {
  31404. for (var _iterator3 = data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  31405. var point = _step3.value;
  31406. var normal = getNormal(point);
  31407. value[i++] = normal[0];
  31408. value[i++] = normal[1];
  31409. value[i++] = normal[2];
  31410. }
  31411. } catch (err) {
  31412. _didIteratorError3 = true;
  31413. _iteratorError3 = err;
  31414. } finally {
  31415. try {
  31416. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  31417. _iterator3.return();
  31418. }
  31419. } finally {
  31420. if (_didIteratorError3) {
  31421. throw _iteratorError3;
  31422. }
  31423. }
  31424. }
  31425. }
  31426. }, {
  31427. key: 'calculateInstanceColors',
  31428. value: function calculateInstanceColors(attribute) {
  31429. var _props5 = this.props,
  31430. data = _props5.data,
  31431. getColor = _props5.getColor;
  31432. var value = attribute.value;
  31433. var i = 0;
  31434. var _iteratorNormalCompletion4 = true;
  31435. var _didIteratorError4 = false;
  31436. var _iteratorError4 = undefined;
  31437. try {
  31438. for (var _iterator4 = data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
  31439. var point = _step4.value;
  31440. var color = getColor(point);
  31441. value[i++] = color[0];
  31442. value[i++] = color[1];
  31443. value[i++] = color[2];
  31444. value[i++] = isNaN(color[3]) ? 255 : color[3];
  31445. }
  31446. } catch (err) {
  31447. _didIteratorError4 = true;
  31448. _iteratorError4 = err;
  31449. } finally {
  31450. try {
  31451. if (!_iteratorNormalCompletion4 && _iterator4.return) {
  31452. _iterator4.return();
  31453. }
  31454. } finally {
  31455. if (_didIteratorError4) {
  31456. throw _iteratorError4;
  31457. }
  31458. }
  31459. }
  31460. }
  31461. }]);
  31462. return PointCloudLayer;
  31463. }(_core.Layer);
  31464. exports.default = PointCloudLayer;
  31465. PointCloudLayer.layerName = 'PointCloudLayer';
  31466. PointCloudLayer.defaultProps = defaultProps;
  31467. /***/ }),
  31468. /* 321 */
  31469. /***/ (function(module, exports, __webpack_require__) {
  31470. "use strict";
  31471. Object.defineProperty(exports, "__esModule", {
  31472. value: true
  31473. });
  31474. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  31475. var _core = __webpack_require__(13);
  31476. var _solidPolygonLayer = __webpack_require__(177);
  31477. var _solidPolygonLayer2 = _interopRequireDefault(_solidPolygonLayer);
  31478. var _pathLayer = __webpack_require__(119);
  31479. var _pathLayer2 = _interopRequireDefault(_pathLayer);
  31480. var _polygon = __webpack_require__(120);
  31481. var Polygon = _interopRequireWildcard(_polygon);
  31482. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  31483. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  31484. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  31485. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  31486. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31487. //
  31488. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31489. // of this software and associated documentation files (the "Software"), to deal
  31490. // in the Software without restriction, including without limitation the rights
  31491. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31492. // copies of the Software, and to permit persons to whom the Software is
  31493. // furnished to do so, subject to the following conditions:
  31494. //
  31495. // The above copyright notice and this permission notice shall be included in
  31496. // all copies or substantial portions of the Software.
  31497. //
  31498. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31499. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31500. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31501. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31502. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31503. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31504. // THE SOFTWARE.
  31505. var get = _core.experimental.get;
  31506. var defaultLineColor = [0x0, 0x0, 0x0, 0xff];
  31507. var defaultFillColor = [0x0, 0x0, 0x0, 0xff];
  31508. var defaultProps = {
  31509. stroked: true,
  31510. filled: true,
  31511. extruded: false,
  31512. elevationScale: 1,
  31513. wireframe: false,
  31514. lineWidthScale: 1,
  31515. lineWidthMinPixels: 0,
  31516. lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,
  31517. lineJointRounded: false,
  31518. lineMiterLimit: 4,
  31519. lineDashJustified: false,
  31520. fp64: false,
  31521. getPolygon: function getPolygon(f) {
  31522. return get(f, 'polygon');
  31523. },
  31524. // Polygon fill color
  31525. getFillColor: function getFillColor(f) {
  31526. return get(f, 'fillColor') || defaultFillColor;
  31527. },
  31528. // Point, line and polygon outline color
  31529. getLineColor: function getLineColor(f) {
  31530. return get(f, 'lineColor') || defaultLineColor;
  31531. },
  31532. // Line and polygon outline accessors
  31533. getLineWidth: function getLineWidth(f) {
  31534. return get(f, 'lineWidth') || 1;
  31535. },
  31536. // Line dash array accessor
  31537. getLineDashArray: null,
  31538. // Polygon extrusion accessor
  31539. getElevation: function getElevation(f) {
  31540. return get(f, 'elevation') || 1000;
  31541. },
  31542. // Optional settings for 'lighting' shader module
  31543. lightSettings: {
  31544. lightsPosition: [-122.45, 37.75, 8000, -122.0, 38.0, 5000],
  31545. ambientRatio: 0.05,
  31546. diffuseRatio: 0.6,
  31547. specularRatio: 0.8,
  31548. lightsStrength: [2.0, 0.0, 0.0, 0.0],
  31549. numberOfLights: 2
  31550. }
  31551. };
  31552. var PolygonLayer = function (_CompositeLayer) {
  31553. _inherits(PolygonLayer, _CompositeLayer);
  31554. function PolygonLayer() {
  31555. _classCallCheck(this, PolygonLayer);
  31556. return _possibleConstructorReturn(this, (PolygonLayer.__proto__ || Object.getPrototypeOf(PolygonLayer)).apply(this, arguments));
  31557. }
  31558. _createClass(PolygonLayer, [{
  31559. key: 'initializeState',
  31560. value: function initializeState() {
  31561. this.state = {
  31562. paths: []
  31563. };
  31564. }
  31565. }, {
  31566. key: 'updateState',
  31567. value: function updateState(_ref) {
  31568. var _this2 = this;
  31569. var oldProps = _ref.oldProps,
  31570. props = _ref.props,
  31571. changeFlags = _ref.changeFlags;
  31572. var geometryChanged = changeFlags.dataChanged || changeFlags.updateTriggersChanged && (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getPolygon);
  31573. if (geometryChanged) {
  31574. var _props = this.props,
  31575. data = _props.data,
  31576. getPolygon = _props.getPolygon;
  31577. this.state.paths = [];
  31578. data.forEach(function (object) {
  31579. var complexPolygon = Polygon.normalize(getPolygon(object));
  31580. complexPolygon.forEach(function (polygon) {
  31581. return _this2.state.paths.push({
  31582. path: polygon,
  31583. object: object
  31584. });
  31585. });
  31586. });
  31587. }
  31588. }
  31589. }, {
  31590. key: 'getPickingInfo',
  31591. value: function getPickingInfo(_ref2) {
  31592. var info = _ref2.info;
  31593. return Object.assign(info, {
  31594. // override object with picked data
  31595. object: info.object && info.object.object || info.object
  31596. });
  31597. }
  31598. /* eslint-disable complexity */
  31599. }, {
  31600. key: 'renderLayers',
  31601. value: function renderLayers() {
  31602. // Layer composition props
  31603. var _props2 = this.props,
  31604. data = _props2.data,
  31605. stroked = _props2.stroked,
  31606. filled = _props2.filled,
  31607. extruded = _props2.extruded,
  31608. wireframe = _props2.wireframe,
  31609. elevationScale = _props2.elevationScale;
  31610. // Rendering props underlying layer
  31611. var _props3 = this.props,
  31612. lineWidthScale = _props3.lineWidthScale,
  31613. lineWidthMinPixels = _props3.lineWidthMinPixels,
  31614. lineWidthMaxPixels = _props3.lineWidthMaxPixels,
  31615. lineJointRounded = _props3.lineJointRounded,
  31616. lineMiterLimit = _props3.lineMiterLimit,
  31617. lineDashJustified = _props3.lineDashJustified,
  31618. fp64 = _props3.fp64;
  31619. // Accessor props for underlying layers
  31620. var _props4 = this.props,
  31621. getFillColor = _props4.getFillColor,
  31622. getLineColor = _props4.getLineColor,
  31623. getLineWidth = _props4.getLineWidth,
  31624. getLineDashArray = _props4.getLineDashArray,
  31625. getElevation = _props4.getElevation,
  31626. getPolygon = _props4.getPolygon,
  31627. updateTriggers = _props4.updateTriggers,
  31628. lightSettings = _props4.lightSettings;
  31629. var paths = this.state.paths;
  31630. var hasData = data && data.length > 0;
  31631. // Filled Polygon Layer
  31632. var polygonLayer = filled && hasData && new _solidPolygonLayer2.default(this.getSubLayerProps({
  31633. id: 'fill',
  31634. updateTriggers: {
  31635. getElevation: updateTriggers.getElevation,
  31636. getColor: updateTriggers.getFillColor
  31637. }
  31638. }), {
  31639. data: data,
  31640. extruded: extruded,
  31641. elevationScale: elevationScale,
  31642. fp64: fp64,
  31643. wireframe: false,
  31644. getPolygon: getPolygon,
  31645. getElevation: getElevation,
  31646. getColor: getFillColor,
  31647. lightSettings: lightSettings
  31648. });
  31649. var polygonWireframeLayer = extruded && wireframe && hasData && new _solidPolygonLayer2.default(this.getSubLayerProps({
  31650. id: 'wireframe',
  31651. updateTriggers: {
  31652. getElevation: updateTriggers.getElevation,
  31653. getColor: updateTriggers.getLineColor
  31654. }
  31655. }), {
  31656. data: data,
  31657. fp64: fp64,
  31658. extruded: true,
  31659. elevationScale: elevationScale,
  31660. wireframe: true,
  31661. getPolygon: getPolygon,
  31662. getElevation: getElevation,
  31663. getColor: getLineColor
  31664. });
  31665. // Polygon line layer
  31666. var polygonLineLayer = !extruded && stroked && hasData && new _pathLayer2.default(this.getSubLayerProps({
  31667. id: 'stroke',
  31668. updateTriggers: {
  31669. getWidth: updateTriggers.getLineWidth,
  31670. getColor: updateTriggers.getLineColor,
  31671. getDashArray: updateTriggers.getLineDashArray
  31672. }
  31673. }), {
  31674. data: paths,
  31675. fp64: fp64,
  31676. widthScale: lineWidthScale,
  31677. widthMinPixels: lineWidthMinPixels,
  31678. widthMaxPixels: lineWidthMaxPixels,
  31679. rounded: lineJointRounded,
  31680. miterLimit: lineMiterLimit,
  31681. dashJustified: lineDashJustified,
  31682. getPath: function getPath(x) {
  31683. return x.path;
  31684. },
  31685. getColor: function getColor(x) {
  31686. return getLineColor(x.object);
  31687. },
  31688. getWidth: function getWidth(x) {
  31689. return getLineWidth(x.object);
  31690. },
  31691. getDashArray: getLineDashArray && function (x) {
  31692. return getLineDashArray(x.object);
  31693. }
  31694. });
  31695. return [
  31696. // If not extruded: flat fill layer is drawn below outlines
  31697. !extruded && polygonLayer, polygonWireframeLayer, polygonLineLayer,
  31698. // If extruded: draw fill layer last for correct blending behavior
  31699. extruded && polygonLayer];
  31700. }
  31701. /* eslint-enable complexity */
  31702. }]);
  31703. return PolygonLayer;
  31704. }(_core.CompositeLayer);
  31705. exports.default = PolygonLayer;
  31706. PolygonLayer.layerName = 'PolygonLayer';
  31707. PolygonLayer.defaultProps = defaultProps;
  31708. /***/ }),
  31709. /* 322 */
  31710. /***/ (function(module, exports, __webpack_require__) {
  31711. "use strict";
  31712. Object.defineProperty(exports, "__esModule", {
  31713. value: true
  31714. });
  31715. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31716. //
  31717. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31718. // of this software and associated documentation files (the "Software"), to deal
  31719. // in the Software without restriction, including without limitation the rights
  31720. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31721. // copies of the Software, and to permit persons to whom the Software is
  31722. // furnished to do so, subject to the following conditions:
  31723. //
  31724. // The above copyright notice and this permission notice shall be included in
  31725. // all copies or substantial portions of the Software.
  31726. //
  31727. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31728. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31729. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31730. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31731. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31732. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31733. // THE SOFTWARE.
  31734. exports.default = "#define SHADER_NAME scatterplot-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\nvarying float innerUnitRadius;\n\nvoid main(void) {\n\n float distToCenter = length(unitPosition);\n\n if (distToCenter > 1.0 || distToCenter < innerUnitRadius) {\n discard;\n }\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  31735. /***/ }),
  31736. /* 323 */
  31737. /***/ (function(module, exports, __webpack_require__) {
  31738. "use strict";
  31739. Object.defineProperty(exports, "__esModule", {
  31740. value: true
  31741. });
  31742. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31743. //
  31744. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31745. // of this software and associated documentation files (the "Software"), to deal
  31746. // in the Software without restriction, including without limitation the rights
  31747. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31748. // copies of the Software, and to permit persons to whom the Software is
  31749. // furnished to do so, subject to the following conditions:
  31750. //
  31751. // The above copyright notice and this permission notice shall be included in
  31752. // all copies or substantial portions of the Software.
  31753. //
  31754. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31755. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31756. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31757. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31758. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31759. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31760. // THE SOFTWARE.
  31761. exports.default = "#define SHADER_NAME scatterplot-layer-vertex-shader-64\n\nattribute vec3 positions;\n\nattribute vec3 instancePositions;\nattribute vec2 instancePositions64xyLow;\nattribute float instanceRadius;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\n// Only one-dimensional arrays may be declared in GLSL ES 1.0. specs p.24\nuniform float opacity;\nuniform float radiusScale;\nuniform float radiusMinPixels;\nuniform float radiusMaxPixels;\nuniform float outline;\nuniform float strokeWidth;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\nvarying float innerUnitRadius;\n\nvoid main(void) {\n // Multiply out radius and clamp to limits\n float outerRadiusPixels = clamp(\n project_scale(radiusScale * instanceRadius),\n radiusMinPixels, radiusMaxPixels\n );\n\n // outline is centered at the radius\n // outer radius needs to offset by half stroke width\n outerRadiusPixels += outline * strokeWidth / 2.0;\n\n // position on the containing square in [-1, 1] space\n unitPosition = positions.xy;\n // 0 - solid circle, 1 - stroke with lineWidth=0\n innerUnitRadius = outline * (1.0 - strokeWidth / outerRadiusPixels);\n\n vec4 instancePositions64xy = vec4(\n instancePositions.x, instancePositions64xyLow.x,\n instancePositions.y, instancePositions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(instancePositions64xy, projected_coord_xy);\n\n vec2 vertex_pos_localspace[4];\n vec4_fp64(vec4(positions * outerRadiusPixels, 0.0), vertex_pos_localspace);\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = sum_fp64(vertex_pos_localspace[0], projected_coord_xy[0]);\n vertex_pos_modelspace[1] = sum_fp64(vertex_pos_localspace[1], projected_coord_xy[1]);\n vertex_pos_modelspace[2] = sum_fp64(vertex_pos_localspace[2],\n vec2(project_scale(instancePositions.z), 0.0));\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace);\n\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  31762. /***/ }),
  31763. /* 324 */
  31764. /***/ (function(module, exports, __webpack_require__) {
  31765. "use strict";
  31766. Object.defineProperty(exports, "__esModule", {
  31767. value: true
  31768. });
  31769. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31770. //
  31771. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31772. // of this software and associated documentation files (the "Software"), to deal
  31773. // in the Software without restriction, including without limitation the rights
  31774. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31775. // copies of the Software, and to permit persons to whom the Software is
  31776. // furnished to do so, subject to the following conditions:
  31777. //
  31778. // The above copyright notice and this permission notice shall be included in
  31779. // all copies or substantial portions of the Software.
  31780. //
  31781. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31782. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31783. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31784. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31785. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31786. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31787. // THE SOFTWARE.
  31788. exports.default = "#define SHADER_NAME scatterplot-layer-vertex-shader\n\nattribute vec3 positions;\n\nattribute vec3 instancePositions;\nattribute float instanceRadius;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\n\nuniform float opacity;\nuniform float radiusScale;\nuniform float radiusMinPixels;\nuniform float radiusMaxPixels;\nuniform float outline;\nuniform float strokeWidth;\n\nvarying vec4 vColor;\nvarying vec2 unitPosition;\nvarying float innerUnitRadius;\n\nvoid main(void) {\n // Multiply out radius and clamp to limits\n float outerRadiusPixels = clamp(\n project_scale(radiusScale * instanceRadius),\n radiusMinPixels, radiusMaxPixels\n );\n // outline is centered at the radius\n // outer radius needs to offset by half stroke width\n outerRadiusPixels += outline * strokeWidth / 2.0;\n\n // position on the containing square in [-1, 1] space\n unitPosition = positions.xy;\n // 0 - solid circle, 1 - stroke with lineWidth=0\n innerUnitRadius = outline * (1.0 - strokeWidth / outerRadiusPixels);\n\n // Find the center of the point and add the current vertex\n vec3 center = project_position(instancePositions);\n vec3 vertex = positions * outerRadiusPixels;\n gl_Position = project_to_clipspace(vec4(center + vertex, 1.0));\n\n // Apply opacity to instance color, or return instance picking color\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity) / 255.;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n}\n";
  31789. /***/ }),
  31790. /* 325 */
  31791. /***/ (function(module, exports, __webpack_require__) {
  31792. "use strict";
  31793. Object.defineProperty(exports, "__esModule", {
  31794. value: true
  31795. });
  31796. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31797. //
  31798. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31799. // of this software and associated documentation files (the "Software"), to deal
  31800. // in the Software without restriction, including without limitation the rights
  31801. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31802. // copies of the Software, and to permit persons to whom the Software is
  31803. // furnished to do so, subject to the following conditions:
  31804. //
  31805. // The above copyright notice and this permission notice shall be included in
  31806. // all copies or substantial portions of the Software.
  31807. //
  31808. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31809. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31810. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31811. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31812. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31813. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31814. // THE SOFTWARE.
  31815. /* fragment shader for the grid-layer */
  31816. exports.default = "#define SHADER_NAME screen-grid-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 vColor;\n\nvoid main(void) {\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  31817. /***/ }),
  31818. /* 326 */
  31819. /***/ (function(module, exports, __webpack_require__) {
  31820. "use strict";
  31821. Object.defineProperty(exports, "__esModule", {
  31822. value: true
  31823. });
  31824. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31825. //
  31826. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31827. // of this software and associated documentation files (the "Software"), to deal
  31828. // in the Software without restriction, including without limitation the rights
  31829. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31830. // copies of the Software, and to permit persons to whom the Software is
  31831. // furnished to do so, subject to the following conditions:
  31832. //
  31833. // The above copyright notice and this permission notice shall be included in
  31834. // all copies or substantial portions of the Software.
  31835. //
  31836. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31837. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31838. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31839. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31840. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31841. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31842. // THE SOFTWARE.
  31843. exports.default = "#define SHADER_NAME screen-grid-layer-vertex-shader\n\nattribute vec3 vertices;\nattribute vec3 instancePositions;\nattribute float instanceCount;\nattribute vec3 instancePickingColors;\n\nuniform float maxCount;\nuniform float opacity;\nuniform vec4 minColor;\nuniform vec4 maxColor;\nuniform vec3 cellScale;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 color = mix(minColor, maxColor, instanceCount / maxCount) / 255.;\n\n vColor = vec4(color.rgb, color.a * opacity);\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(instancePickingColors);\n\n gl_Position = vec4(instancePositions + vertices * cellScale, 1.);\n}\n";
  31844. /***/ }),
  31845. /* 327 */
  31846. /***/ (function(module, exports, __webpack_require__) {
  31847. "use strict";
  31848. Object.defineProperty(exports, "__esModule", {
  31849. value: true
  31850. });
  31851. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  31852. var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
  31853. var _core = __webpack_require__(13);
  31854. var _luma = __webpack_require__(12);
  31855. var _screenGridLayerVertex = __webpack_require__(326);
  31856. var _screenGridLayerVertex2 = _interopRequireDefault(_screenGridLayerVertex);
  31857. var _screenGridLayerFragment = __webpack_require__(325);
  31858. var _screenGridLayerFragment2 = _interopRequireDefault(_screenGridLayerFragment);
  31859. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  31860. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  31861. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  31862. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  31863. //
  31864. // Permission is hereby granted, free of charge, to any person obtaining a copy
  31865. // of this software and associated documentation files (the "Software"), to deal
  31866. // in the Software without restriction, including without limitation the rights
  31867. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  31868. // copies of the Software, and to permit persons to whom the Software is
  31869. // furnished to do so, subject to the following conditions:
  31870. //
  31871. // The above copyright notice and this permission notice shall be included in
  31872. // all copies or substantial portions of the Software.
  31873. //
  31874. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  31875. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  31876. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  31877. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  31878. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  31879. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  31880. // THE SOFTWARE.
  31881. var defaultProps = {
  31882. cellSizePixels: 100,
  31883. // Color range?
  31884. minColor: [0, 0, 0, 255],
  31885. maxColor: [0, 255, 0, 255],
  31886. getPosition: function getPosition(d) {
  31887. return d.position;
  31888. },
  31889. getWeight: function getWeight(d) {
  31890. return 1;
  31891. }
  31892. };
  31893. var ScreenGridLayer = function (_Layer) {
  31894. _inherits(ScreenGridLayer, _Layer);
  31895. function ScreenGridLayer() {
  31896. _classCallCheck(this, ScreenGridLayer);
  31897. return _possibleConstructorReturn(this, (ScreenGridLayer.__proto__ || Object.getPrototypeOf(ScreenGridLayer)).apply(this, arguments));
  31898. }
  31899. _createClass(ScreenGridLayer, [{
  31900. key: 'getShaders',
  31901. value: function getShaders() {
  31902. return { vs: _screenGridLayerVertex2.default, fs: _screenGridLayerFragment2.default, modules: ['picking'] }; // 'project' module added by default.
  31903. }
  31904. }, {
  31905. key: 'initializeState',
  31906. value: function initializeState() {
  31907. var attributeManager = this.getAttributeManager();
  31908. var gl = this.context.gl;
  31909. /* eslint-disable max-len */
  31910. attributeManager.addInstanced({
  31911. instancePositions: { size: 3, update: this.calculateInstancePositions },
  31912. instanceCount: {
  31913. size: 1,
  31914. accessor: ['getPosition', 'getWeight'],
  31915. update: this.calculateInstanceCount
  31916. }
  31917. });
  31918. /* eslint-disable max-len */
  31919. this.setState({ model: this._getModel(gl) });
  31920. }
  31921. }, {
  31922. key: 'shouldUpdateState',
  31923. value: function shouldUpdateState(_ref) {
  31924. var changeFlags = _ref.changeFlags;
  31925. return changeFlags.somethingChanged;
  31926. }
  31927. }, {
  31928. key: 'updateState',
  31929. value: function updateState(_ref2) {
  31930. var oldProps = _ref2.oldProps,
  31931. props = _ref2.props,
  31932. changeFlags = _ref2.changeFlags;
  31933. _get(ScreenGridLayer.prototype.__proto__ || Object.getPrototypeOf(ScreenGridLayer.prototype), 'updateState', this).call(this, { props: props, oldProps: oldProps, changeFlags: changeFlags });
  31934. var cellSizeChanged = props.cellSizePixels !== oldProps.cellSizePixels;
  31935. if (cellSizeChanged || changeFlags.viewportChanged) {
  31936. this.updateCell();
  31937. }
  31938. }
  31939. }, {
  31940. key: 'draw',
  31941. value: function draw(_ref3) {
  31942. var uniforms = _ref3.uniforms;
  31943. var _props = this.props,
  31944. minColor = _props.minColor,
  31945. maxColor = _props.maxColor,
  31946. _props$parameters = _props.parameters,
  31947. parameters = _props$parameters === undefined ? {} : _props$parameters;
  31948. var _state = this.state,
  31949. model = _state.model,
  31950. cellScale = _state.cellScale,
  31951. maxCount = _state.maxCount;
  31952. uniforms = Object.assign({}, uniforms, { minColor: minColor, maxColor: maxColor, cellScale: cellScale, maxCount: maxCount });
  31953. model.draw({
  31954. uniforms: uniforms,
  31955. parameters: Object.assign({
  31956. depthTest: false,
  31957. depthMask: false
  31958. }, parameters)
  31959. });
  31960. }
  31961. }, {
  31962. key: '_getModel',
  31963. value: function _getModel(gl) {
  31964. return new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  31965. id: this.props.id,
  31966. geometry: new _luma.Geometry({
  31967. drawMode: _luma.GL.TRIANGLE_FAN,
  31968. attributes: {
  31969. vertices: new Float32Array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0])
  31970. }
  31971. }),
  31972. isInstanced: true,
  31973. shaderCache: this.context.shaderCache
  31974. }));
  31975. }
  31976. }, {
  31977. key: 'updateCell',
  31978. value: function updateCell() {
  31979. var _context$viewport = this.context.viewport,
  31980. width = _context$viewport.width,
  31981. height = _context$viewport.height;
  31982. var cellSizePixels = this.props.cellSizePixels;
  31983. var MARGIN = 2;
  31984. var cellScale = new Float32Array([(cellSizePixels - MARGIN) / width * 2, -(cellSizePixels - MARGIN) / height * 2, 1]);
  31985. var numCol = Math.ceil(width / cellSizePixels);
  31986. var numRow = Math.ceil(height / cellSizePixels);
  31987. this.setState({
  31988. cellScale: cellScale,
  31989. numCol: numCol,
  31990. numRow: numRow,
  31991. numInstances: numCol * numRow
  31992. });
  31993. var attributeManager = this.getAttributeManager();
  31994. attributeManager.invalidateAll();
  31995. }
  31996. }, {
  31997. key: 'calculateInstancePositions',
  31998. value: function calculateInstancePositions(attribute, _ref4) {
  31999. var numInstances = _ref4.numInstances;
  32000. var _context$viewport2 = this.context.viewport,
  32001. width = _context$viewport2.width,
  32002. height = _context$viewport2.height;
  32003. var cellSizePixels = this.props.cellSizePixels;
  32004. var numCol = this.state.numCol;
  32005. var value = attribute.value,
  32006. size = attribute.size;
  32007. for (var i = 0; i < numInstances; i++) {
  32008. var x = i % numCol;
  32009. var y = Math.floor(i / numCol);
  32010. value[i * size + 0] = x * cellSizePixels / width * 2 - 1;
  32011. value[i * size + 1] = 1 - y * cellSizePixels / height * 2;
  32012. value[i * size + 2] = 0;
  32013. }
  32014. }
  32015. }, {
  32016. key: 'calculateInstanceCount',
  32017. value: function calculateInstanceCount(attribute) {
  32018. var _props2 = this.props,
  32019. data = _props2.data,
  32020. cellSizePixels = _props2.cellSizePixels,
  32021. getPosition = _props2.getPosition,
  32022. getWeight = _props2.getWeight;
  32023. var _state2 = this.state,
  32024. numCol = _state2.numCol,
  32025. numRow = _state2.numRow;
  32026. var value = attribute.value;
  32027. var maxCount = 0;
  32028. value.fill(0.0);
  32029. var _iteratorNormalCompletion = true;
  32030. var _didIteratorError = false;
  32031. var _iteratorError = undefined;
  32032. try {
  32033. for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  32034. var point = _step.value;
  32035. var pixel = this.project(getPosition(point));
  32036. var colId = Math.floor(pixel[0] / cellSizePixels);
  32037. var rowId = Math.floor(pixel[1] / cellSizePixels);
  32038. if (colId >= 0 && colId < numCol && rowId >= 0 && rowId < numRow) {
  32039. var i = colId + rowId * numCol;
  32040. value[i] += getWeight(point);
  32041. if (value[i] > maxCount) {
  32042. maxCount = value[i];
  32043. }
  32044. }
  32045. }
  32046. } catch (err) {
  32047. _didIteratorError = true;
  32048. _iteratorError = err;
  32049. } finally {
  32050. try {
  32051. if (!_iteratorNormalCompletion && _iterator.return) {
  32052. _iterator.return();
  32053. }
  32054. } finally {
  32055. if (_didIteratorError) {
  32056. throw _iteratorError;
  32057. }
  32058. }
  32059. }
  32060. this.setState({ maxCount: maxCount });
  32061. }
  32062. }]);
  32063. return ScreenGridLayer;
  32064. }(_core.Layer);
  32065. exports.default = ScreenGridLayer;
  32066. ScreenGridLayer.layerName = 'ScreenGridLayer';
  32067. ScreenGridLayer.defaultProps = defaultProps;
  32068. /***/ }),
  32069. /* 328 */
  32070. /***/ (function(module, exports, __webpack_require__) {
  32071. "use strict";
  32072. Object.defineProperty(exports, "__esModule", {
  32073. value: true
  32074. });
  32075. exports.PolygonTesselatorExtruded = undefined;
  32076. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  32077. //
  32078. // Permission is hereby granted, free of charge, to any person obtaining a copy
  32079. // of this software and associated documentation files (the "Software"), to deal
  32080. // in the Software without restriction, including without limitation the rights
  32081. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  32082. // copies of the Software, and to permit persons to whom the Software is
  32083. // furnished to do so, subject to the following conditions:
  32084. //
  32085. // The above copyright notice and this permission notice shall be included in
  32086. // all copies or substantial portions of the Software.
  32087. //
  32088. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  32089. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  32090. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  32091. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  32092. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  32093. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  32094. // THE SOFTWARE.
  32095. var _polygon = __webpack_require__(120);
  32096. var Polygon = _interopRequireWildcard(_polygon);
  32097. var _core = __webpack_require__(13);
  32098. var _earcut = __webpack_require__(232);
  32099. var _earcut2 = _interopRequireDefault(_earcut);
  32100. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  32101. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  32102. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  32103. var fp64LowPart = _core.experimental.fp64LowPart,
  32104. fillArray = _core.experimental.fillArray;
  32105. function getPickingColor(index) {
  32106. return [index + 1 & 255, index + 1 >> 8 & 255, index + 1 >> 8 >> 8 & 255];
  32107. }
  32108. function arrayPush(array, values) {
  32109. var length = values.length;
  32110. var offset = array.length;
  32111. for (var index = 0; index < length; index++) {
  32112. array[offset++] = values[index];
  32113. }
  32114. return array;
  32115. }
  32116. function flatten(values, level) {
  32117. var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
  32118. if (level > 1) {
  32119. values.forEach(function (v) {
  32120. return flatten(v, level - 1, result);
  32121. });
  32122. } else {
  32123. arrayPush(result, values);
  32124. }
  32125. return result;
  32126. }
  32127. var DEFAULT_COLOR = [0, 0, 0, 255]; // Black
  32128. var PolygonTesselatorExtruded = exports.PolygonTesselatorExtruded = function () {
  32129. function PolygonTesselatorExtruded(_ref) {
  32130. var polygons = _ref.polygons,
  32131. _ref$getHeight = _ref.getHeight,
  32132. getHeight = _ref$getHeight === undefined ? function (x) {
  32133. return 1000;
  32134. } : _ref$getHeight,
  32135. _ref$getColor = _ref.getColor,
  32136. getColor = _ref$getColor === undefined ? function (x) {
  32137. return DEFAULT_COLOR;
  32138. } : _ref$getColor,
  32139. _ref$wireframe = _ref.wireframe,
  32140. wireframe = _ref$wireframe === undefined ? false : _ref$wireframe,
  32141. _ref$fp = _ref.fp64,
  32142. fp64 = _ref$fp === undefined ? false : _ref$fp;
  32143. _classCallCheck(this, PolygonTesselatorExtruded);
  32144. this.fp64 = fp64;
  32145. // Expensive operation, convert all polygons to arrays
  32146. polygons = polygons.map(function (complexPolygon, polygonIndex) {
  32147. var height = getHeight(polygonIndex) || 0;
  32148. return Polygon.normalize(complexPolygon).map(function (polygon) {
  32149. return polygon.map(function (coord) {
  32150. return [coord[0], coord[1], height];
  32151. });
  32152. });
  32153. });
  32154. var groupedVertices = polygons;
  32155. this.groupedVertices = polygons;
  32156. var pointCount = getPointCount(polygons);
  32157. this.pointCount = pointCount;
  32158. this.wireframe = wireframe;
  32159. this.attributes = {};
  32160. var positionsJS = calculatePositionsJS({ groupedVertices: groupedVertices, pointCount: pointCount, wireframe: wireframe });
  32161. Object.assign(this.attributes, {
  32162. positions: calculatePositions(positionsJS, this.fp64),
  32163. indices: calculateIndices({ groupedVertices: groupedVertices, wireframe: wireframe }),
  32164. normals: calculateNormals({ groupedVertices: groupedVertices, pointCount: pointCount, wireframe: wireframe }),
  32165. // colors: calculateColors({groupedVertices, wireframe, getColor}),
  32166. pickingColors: calculatePickingColors({ groupedVertices: groupedVertices, pointCount: pointCount, wireframe: wireframe })
  32167. });
  32168. }
  32169. _createClass(PolygonTesselatorExtruded, [{
  32170. key: 'indices',
  32171. value: function indices() {
  32172. return this.attributes.indices;
  32173. }
  32174. }, {
  32175. key: 'positions',
  32176. value: function positions() {
  32177. return this.attributes.positions;
  32178. }
  32179. }, {
  32180. key: 'normals',
  32181. value: function normals() {
  32182. return this.attributes.normals;
  32183. }
  32184. }, {
  32185. key: 'colors',
  32186. value: function colors() {
  32187. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  32188. _ref2$getColor = _ref2.getColor,
  32189. getColor = _ref2$getColor === undefined ? function (x) {
  32190. return DEFAULT_COLOR;
  32191. } : _ref2$getColor;
  32192. var groupedVertices = this.groupedVertices,
  32193. pointCount = this.pointCount,
  32194. wireframe = this.wireframe;
  32195. return calculateColors({ groupedVertices: groupedVertices, pointCount: pointCount, wireframe: wireframe, getColor: getColor });
  32196. }
  32197. }, {
  32198. key: 'pickingColors',
  32199. value: function pickingColors() {
  32200. return this.attributes.pickingColors;
  32201. }
  32202. // updateTriggers: {
  32203. // positions: ['getHeight'],
  32204. // colors: ['getColors']
  32205. // pickingColors: 'none'
  32206. // }
  32207. }]);
  32208. return PolygonTesselatorExtruded;
  32209. }();
  32210. // Count number of points in a list of complex polygons
  32211. function getPointCount(polygons) {
  32212. return polygons.reduce(function (points, polygon) {
  32213. return points + Polygon.getVertexCount(polygon);
  32214. }, 0);
  32215. }
  32216. function calculateIndices(_ref3) {
  32217. var groupedVertices = _ref3.groupedVertices,
  32218. _ref3$wireframe = _ref3.wireframe,
  32219. wireframe = _ref3$wireframe === undefined ? false : _ref3$wireframe;
  32220. // adjust index offset for multiple polygons
  32221. var multiplier = wireframe ? 2 : 5;
  32222. var offsets = [];
  32223. groupedVertices.reduce(function (vertexIndex, vertices) {
  32224. offsets.push(vertexIndex);
  32225. return vertexIndex + Polygon.getVertexCount(vertices) * multiplier;
  32226. }, 0);
  32227. var indices = groupedVertices.map(function (vertices, polygonIndex) {
  32228. return wireframe ? // 1. get sequentially ordered indices of each polygons wireframe
  32229. // 2. offset them by the number of indices in previous polygons
  32230. calculateContourIndices(vertices, offsets[polygonIndex]) : // 1. get triangulated indices for the internal areas
  32231. // 2. offset them by the number of indices in previous polygons
  32232. calculateSurfaceIndices(vertices, offsets[polygonIndex]);
  32233. });
  32234. return new Uint32Array(flatten(indices, 2));
  32235. }
  32236. // Calculate a flat position array in JS - can be mapped to 32 or 64 bit typed arrays
  32237. // Remarks:
  32238. // * each top vertex is on 3 surfaces
  32239. // * each bottom vertex is on 2 surfaces
  32240. function calculatePositionsJS(_ref4) {
  32241. var groupedVertices = _ref4.groupedVertices,
  32242. pointCount = _ref4.pointCount,
  32243. _ref4$wireframe = _ref4.wireframe,
  32244. wireframe = _ref4$wireframe === undefined ? false : _ref4$wireframe;
  32245. var multiplier = wireframe ? 2 : 5;
  32246. var positions = new Float32Array(pointCount * 3 * multiplier);
  32247. var vertexIndex = 0;
  32248. groupedVertices.forEach(function (vertices) {
  32249. var topVertices = flatten(vertices, 3);
  32250. var baseVertices = topVertices.slice(0);
  32251. var i = topVertices.length - 1;
  32252. while (i > 0) {
  32253. baseVertices[i] = 0;
  32254. i -= 3;
  32255. }
  32256. var len = topVertices.length;
  32257. if (wireframe) {
  32258. fillArray({ target: positions, source: topVertices, start: vertexIndex });
  32259. fillArray({ target: positions, source: baseVertices, start: vertexIndex + len });
  32260. } else {
  32261. fillArray({ target: positions, source: topVertices, start: vertexIndex, count: 3 });
  32262. fillArray({
  32263. target: positions,
  32264. source: baseVertices,
  32265. start: vertexIndex + len * 3,
  32266. count: 2
  32267. });
  32268. }
  32269. vertexIndex += len * multiplier;
  32270. });
  32271. return positions;
  32272. }
  32273. function calculatePositions(positionsJS, fp64) {
  32274. var positionLow = void 0;
  32275. if (fp64) {
  32276. // We only need x, y component
  32277. var vertexCount = positionsJS.length / 3;
  32278. positionLow = new Float32Array(vertexCount * 2);
  32279. for (var i = 0; i < vertexCount; i++) {
  32280. positionLow[i * 2 + 0] = fp64LowPart(positionsJS[i * 3 + 0]);
  32281. positionLow[i * 2 + 1] = fp64LowPart(positionsJS[i * 3 + 1]);
  32282. }
  32283. }
  32284. return { positions: positionsJS, positions64xyLow: positionLow };
  32285. }
  32286. function calculateNormals(_ref5) {
  32287. var groupedVertices = _ref5.groupedVertices,
  32288. pointCount = _ref5.pointCount,
  32289. wireframe = _ref5.wireframe;
  32290. var up = [0, 0, 1];
  32291. var multiplier = wireframe ? 2 : 5;
  32292. var normals = new Float32Array(pointCount * 3 * multiplier);
  32293. var vertexIndex = 0;
  32294. if (wireframe) {
  32295. return fillArray({ target: normals, source: up, count: pointCount * multiplier });
  32296. }
  32297. groupedVertices.map(function (vertices, polygonIndex) {
  32298. var vertexCount = Polygon.getVertexCount(vertices);
  32299. fillArray({ target: normals, source: up, start: vertexIndex, count: vertexCount });
  32300. vertexIndex += vertexCount * 3;
  32301. var sideNormalsForward = [];
  32302. var sideNormalsBackward = [];
  32303. vertices.forEach(function (polygon) {
  32304. var sideNormals = calculateSideNormals(polygon);
  32305. var firstNormal = sideNormals.slice(0, 3);
  32306. arrayPush(sideNormalsForward, sideNormals);
  32307. arrayPush(sideNormalsForward, firstNormal);
  32308. arrayPush(sideNormalsBackward, firstNormal);
  32309. arrayPush(sideNormalsBackward, sideNormals);
  32310. });
  32311. fillArray({
  32312. target: normals,
  32313. start: vertexIndex,
  32314. count: 2,
  32315. source: sideNormalsForward.concat(sideNormalsBackward)
  32316. });
  32317. vertexIndex += vertexCount * 3 * 4;
  32318. });
  32319. return normals;
  32320. }
  32321. function calculateSideNormals(vertices) {
  32322. var normals = [];
  32323. var lastVertice = null;
  32324. var _iteratorNormalCompletion = true;
  32325. var _didIteratorError = false;
  32326. var _iteratorError = undefined;
  32327. try {
  32328. for (var _iterator = vertices[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  32329. var vertice = _step.value;
  32330. if (lastVertice) {
  32331. // vertex[i-1], vertex[i]
  32332. var n = getNormal(lastVertice, vertice);
  32333. arrayPush(normals, n);
  32334. }
  32335. lastVertice = vertice;
  32336. }
  32337. } catch (err) {
  32338. _didIteratorError = true;
  32339. _iteratorError = err;
  32340. } finally {
  32341. try {
  32342. if (!_iteratorNormalCompletion && _iterator.return) {
  32343. _iterator.return();
  32344. }
  32345. } finally {
  32346. if (_didIteratorError) {
  32347. throw _iteratorError;
  32348. }
  32349. }
  32350. }
  32351. return normals;
  32352. }
  32353. function calculateColors(_ref6) {
  32354. var groupedVertices = _ref6.groupedVertices,
  32355. pointCount = _ref6.pointCount,
  32356. getColor = _ref6.getColor,
  32357. _ref6$wireframe = _ref6.wireframe,
  32358. wireframe = _ref6$wireframe === undefined ? false : _ref6$wireframe;
  32359. var multiplier = wireframe ? 2 : 5;
  32360. var colors = new Uint8ClampedArray(pointCount * 4 * multiplier);
  32361. var vertexIndex = 0;
  32362. groupedVertices.forEach(function (complexPolygon, polygonIndex) {
  32363. var color = getColor(polygonIndex);
  32364. color[3] = Number.isFinite(color[3]) ? color[3] : 255;
  32365. var numVertices = Polygon.getVertexCount(complexPolygon);
  32366. fillArray({ target: colors, source: color, start: vertexIndex, count: numVertices * multiplier });
  32367. vertexIndex += color.length * numVertices * multiplier;
  32368. });
  32369. return colors;
  32370. }
  32371. function calculatePickingColors(_ref7) {
  32372. var groupedVertices = _ref7.groupedVertices,
  32373. pointCount = _ref7.pointCount,
  32374. _ref7$wireframe = _ref7.wireframe,
  32375. wireframe = _ref7$wireframe === undefined ? false : _ref7$wireframe;
  32376. var multiplier = wireframe ? 2 : 5;
  32377. var colors = new Uint8ClampedArray(pointCount * 3 * multiplier);
  32378. var vertexIndex = 0;
  32379. groupedVertices.forEach(function (vertices, polygonIndex) {
  32380. var numVertices = Polygon.getVertexCount(vertices);
  32381. var color = getPickingColor(polygonIndex);
  32382. fillArray({ target: colors, source: color, start: vertexIndex, count: numVertices * multiplier });
  32383. vertexIndex += color.length * numVertices * multiplier;
  32384. });
  32385. return colors;
  32386. }
  32387. function calculateContourIndices(vertices, offset) {
  32388. var stride = Polygon.getVertexCount(vertices);
  32389. var indices = [];
  32390. vertices.forEach(function (polygon) {
  32391. indices.push(offset);
  32392. var numVertices = polygon.length;
  32393. // polygon top
  32394. // use vertex pairs for GL.LINES => [0, 1, 1, 2, 2, ..., n-1, n-1, 0]
  32395. for (var i = 1; i < numVertices - 1; i++) {
  32396. indices.push(i + offset, i + offset);
  32397. }
  32398. indices.push(offset);
  32399. // polygon sides
  32400. for (var _i = 0; _i < numVertices - 1; _i++) {
  32401. indices.push(_i + offset, _i + stride + offset);
  32402. }
  32403. offset += numVertices;
  32404. });
  32405. return indices;
  32406. }
  32407. function drawSurfaceRectangle(targetArray, offset, stride) {
  32408. targetArray.push(offset + stride, offset + stride * 3, offset + stride * 2 + 1, offset + stride * 2 + 1, offset + stride * 3, offset + stride * 4 + 1);
  32409. }
  32410. function calculateSurfaceIndices(vertices, offset) {
  32411. var stride = Polygon.getVertexCount(vertices);
  32412. var holes = null;
  32413. var holeCount = vertices.length - 1;
  32414. if (holeCount) {
  32415. holes = [];
  32416. var vertexIndex = 0;
  32417. for (var i = 0; i < holeCount; i++) {
  32418. vertexIndex += vertices[i].length;
  32419. holes[i] = vertexIndex;
  32420. }
  32421. }
  32422. var indices = (0, _earcut2.default)(flatten(vertices, 3), holes, 3).map(function (index) {
  32423. return index + offset;
  32424. });
  32425. vertices.forEach(function (polygon) {
  32426. var numVertices = polygon.length;
  32427. // polygon sides
  32428. for (var _i2 = 0; _i2 < numVertices - 1; _i2++) {
  32429. drawSurfaceRectangle(indices, offset + _i2, stride);
  32430. }
  32431. offset += numVertices;
  32432. });
  32433. return indices;
  32434. }
  32435. // helpers
  32436. // get normal vector of line segment
  32437. function getNormal(p1, p2) {
  32438. return [p1[1] - p2[1], p2[0] - p1[0], 0];
  32439. }
  32440. /***/ }),
  32441. /* 329 */
  32442. /***/ (function(module, exports, __webpack_require__) {
  32443. "use strict";
  32444. Object.defineProperty(exports, "__esModule", {
  32445. value: true
  32446. });
  32447. exports.PolygonTesselator = undefined;
  32448. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  32449. //
  32450. // Permission is hereby granted, free of charge, to any person obtaining a copy
  32451. // of this software and associated documentation files (the "Software"), to deal
  32452. // in the Software without restriction, including without limitation the rights
  32453. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  32454. // copies of the Software, and to permit persons to whom the Software is
  32455. // furnished to do so, subject to the following conditions:
  32456. //
  32457. // The above copyright notice and this permission notice shall be included in
  32458. // all copies or substantial portions of the Software.
  32459. //
  32460. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  32461. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  32462. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  32463. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  32464. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  32465. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  32466. // THE SOFTWARE.
  32467. // Handles tesselation of polygons with holes
  32468. // - 2D surfaces
  32469. // - 2D outlines
  32470. // - 3D surfaces (top and sides only)
  32471. // - 3D wireframes (not yet)
  32472. var _polygon = __webpack_require__(120);
  32473. var Polygon = _interopRequireWildcard(_polygon);
  32474. var _earcut = __webpack_require__(232);
  32475. var _earcut2 = _interopRequireDefault(_earcut);
  32476. var _core = __webpack_require__(13);
  32477. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  32478. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  32479. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  32480. var fp64LowPart = _core.experimental.fp64LowPart,
  32481. flattenVertices = _core.experimental.flattenVertices,
  32482. fillArray = _core.experimental.fillArray;
  32483. // Maybe deck.gl or luma.gl needs to export this
  32484. function getPickingColor(index) {
  32485. return [(index + 1) % 256, Math.floor((index + 1) / 256) % 256, Math.floor((index + 1) / 256 / 256) % 256];
  32486. }
  32487. var DEFAULT_COLOR = [0, 0, 0, 255]; // Black
  32488. // This class is set up to allow querying one attribute at a time
  32489. // the way the AttributeManager expects it
  32490. var PolygonTesselator = exports.PolygonTesselator = function () {
  32491. function PolygonTesselator(_ref) {
  32492. var polygons = _ref.polygons,
  32493. _ref$fp = _ref.fp64,
  32494. fp64 = _ref$fp === undefined ? false : _ref$fp;
  32495. _classCallCheck(this, PolygonTesselator);
  32496. // Normalize all polygons
  32497. this.polygons = polygons.map(function (polygon) {
  32498. return Polygon.normalize(polygon);
  32499. });
  32500. // Count all polygon vertices
  32501. this.pointCount = getPointCount(this.polygons);
  32502. this.fp64 = fp64;
  32503. }
  32504. _createClass(PolygonTesselator, [{
  32505. key: 'indices',
  32506. value: function indices() {
  32507. var polygons = this.polygons,
  32508. indexCount = this.indexCount;
  32509. return calculateIndices({ polygons: polygons, indexCount: indexCount });
  32510. }
  32511. }, {
  32512. key: 'positions',
  32513. value: function positions() {
  32514. var polygons = this.polygons,
  32515. pointCount = this.pointCount;
  32516. return calculatePositions({ polygons: polygons, pointCount: pointCount, fp64: this.fp64 });
  32517. }
  32518. }, {
  32519. key: 'normals',
  32520. value: function normals() {
  32521. var polygons = this.polygons,
  32522. pointCount = this.pointCount;
  32523. return calculateNormals({ polygons: polygons, pointCount: pointCount });
  32524. }
  32525. }, {
  32526. key: 'colors',
  32527. value: function colors() {
  32528. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  32529. _ref2$getColor = _ref2.getColor,
  32530. getColor = _ref2$getColor === undefined ? function (x) {
  32531. return DEFAULT_COLOR;
  32532. } : _ref2$getColor;
  32533. var polygons = this.polygons,
  32534. pointCount = this.pointCount;
  32535. return calculateColors({ polygons: polygons, pointCount: pointCount, getColor: getColor });
  32536. }
  32537. }, {
  32538. key: 'pickingColors',
  32539. value: function pickingColors() {
  32540. var polygons = this.polygons,
  32541. pointCount = this.pointCount;
  32542. return calculatePickingColors({ polygons: polygons, pointCount: pointCount });
  32543. }
  32544. // getAttribute({size, accessor}) {
  32545. // const {polygons, pointCount} = this;
  32546. // return calculateAttribute({polygons, pointCount, size, accessor});
  32547. // }
  32548. }]);
  32549. return PolygonTesselator;
  32550. }();
  32551. // Count number of points in a list of complex polygons
  32552. function getPointCount(polygons) {
  32553. return polygons.reduce(function (points, polygon) {
  32554. return points + Polygon.getVertexCount(polygon);
  32555. }, 0);
  32556. }
  32557. // COunt number of triangles in a list of complex polygons
  32558. function getTriangleCount(polygons) {
  32559. return polygons.reduce(function (triangles, polygon) {
  32560. return triangles + Polygon.getTriangleCount(polygon);
  32561. }, 0);
  32562. }
  32563. // Returns the offsets of each complex polygon in the combined array of all polygons
  32564. function getPolygonOffsets(polygons) {
  32565. var offsets = new Array(polygons.length + 1);
  32566. offsets[0] = 0;
  32567. var offset = 0;
  32568. polygons.forEach(function (polygon, i) {
  32569. offset += Polygon.getVertexCount(polygon);
  32570. offsets[i + 1] = offset;
  32571. });
  32572. return offsets;
  32573. }
  32574. // Returns the offset of each hole polygon in the flattened array for that polygon
  32575. function getHoleIndices(complexPolygon) {
  32576. var holeIndices = null;
  32577. if (complexPolygon.length > 1) {
  32578. var polygonStartIndex = 0;
  32579. holeIndices = [];
  32580. complexPolygon.forEach(function (polygon) {
  32581. polygonStartIndex += polygon.length;
  32582. holeIndices.push(polygonStartIndex);
  32583. });
  32584. // Last element points to end of the flat array, remove it
  32585. holeIndices.pop();
  32586. }
  32587. return holeIndices;
  32588. }
  32589. function calculateIndices(_ref3) {
  32590. var polygons = _ref3.polygons,
  32591. _ref3$IndexType = _ref3.IndexType,
  32592. IndexType = _ref3$IndexType === undefined ? Uint32Array : _ref3$IndexType;
  32593. // Calculate length of index array (3 * number of triangles)
  32594. var indexCount = 3 * getTriangleCount(polygons);
  32595. var offsets = getPolygonOffsets(polygons);
  32596. // Allocate the attribute
  32597. // TODO it's not the index count but the vertex count that must be checked
  32598. if (IndexType === Uint16Array && indexCount > 65535) {
  32599. throw new Error("Vertex count exceeds browser's limit");
  32600. }
  32601. var attribute = new IndexType(indexCount);
  32602. // 1. get triangulated indices for the internal areas
  32603. // 2. offset them by the number of indices in previous polygons
  32604. var i = 0;
  32605. polygons.forEach(function (polygon, polygonIndex) {
  32606. var _iteratorNormalCompletion = true;
  32607. var _didIteratorError = false;
  32608. var _iteratorError = undefined;
  32609. try {
  32610. for (var _iterator = calculateSurfaceIndices(polygon)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  32611. var index = _step.value;
  32612. attribute[i++] = index + offsets[polygonIndex];
  32613. }
  32614. } catch (err) {
  32615. _didIteratorError = true;
  32616. _iteratorError = err;
  32617. } finally {
  32618. try {
  32619. if (!_iteratorNormalCompletion && _iterator.return) {
  32620. _iterator.return();
  32621. }
  32622. } finally {
  32623. if (_didIteratorError) {
  32624. throw _iteratorError;
  32625. }
  32626. }
  32627. }
  32628. });
  32629. return attribute;
  32630. }
  32631. /*
  32632. * Get vertex indices for drawing complexPolygon mesh
  32633. * @private
  32634. * @param {[Number,Number,Number][][]} complexPolygon
  32635. * @returns {[Number]} indices
  32636. */
  32637. function calculateSurfaceIndices(complexPolygon) {
  32638. // Prepare an array of hole indices as expected by earcut
  32639. var holeIndices = getHoleIndices(complexPolygon);
  32640. // Flatten the polygon as expected by earcut
  32641. var verts = flattenVertices(complexPolygon);
  32642. // Let earcut triangulate the polygon
  32643. return (0, _earcut2.default)(verts, holeIndices, 3);
  32644. }
  32645. function calculatePositions(_ref4) {
  32646. var polygons = _ref4.polygons,
  32647. pointCount = _ref4.pointCount,
  32648. fp64 = _ref4.fp64;
  32649. // Flatten out all the vertices of all the sub subPolygons
  32650. var attribute = new Float32Array(pointCount * 3);
  32651. var attributeLow = void 0;
  32652. if (fp64) {
  32653. // We only need x, y component
  32654. attributeLow = new Float32Array(pointCount * 2);
  32655. }
  32656. var i = 0;
  32657. var j = 0;
  32658. var _iteratorNormalCompletion2 = true;
  32659. var _didIteratorError2 = false;
  32660. var _iteratorError2 = undefined;
  32661. try {
  32662. for (var _iterator2 = polygons[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  32663. var polygon = _step2.value;
  32664. // eslint-disable-next-line
  32665. Polygon.forEachVertex(polygon, function (vertex) {
  32666. var x = vertex[0];
  32667. var y = vertex[1];
  32668. var z = vertex[2] || 0;
  32669. attribute[i++] = x;
  32670. attribute[i++] = y;
  32671. attribute[i++] = z;
  32672. if (fp64) {
  32673. attributeLow[j++] = fp64LowPart(x);
  32674. attributeLow[j++] = fp64LowPart(y);
  32675. }
  32676. });
  32677. }
  32678. } catch (err) {
  32679. _didIteratorError2 = true;
  32680. _iteratorError2 = err;
  32681. } finally {
  32682. try {
  32683. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  32684. _iterator2.return();
  32685. }
  32686. } finally {
  32687. if (_didIteratorError2) {
  32688. throw _iteratorError2;
  32689. }
  32690. }
  32691. }
  32692. return { positions: attribute, positions64xyLow: attributeLow };
  32693. }
  32694. function calculateNormals(_ref5) {
  32695. var polygons = _ref5.polygons,
  32696. pointCount = _ref5.pointCount;
  32697. // TODO - use generic vertex attribute?
  32698. var attribute = new Float32Array(pointCount * 3);
  32699. // normals is not used in flat polygon shader
  32700. // fillArray({target: attribute, source: [0, 0, 1], start: 0, count: pointCount});
  32701. return attribute;
  32702. }
  32703. function calculateColors(_ref6) {
  32704. var polygons = _ref6.polygons,
  32705. pointCount = _ref6.pointCount,
  32706. getColor = _ref6.getColor;
  32707. var attribute = new Uint8ClampedArray(pointCount * 4);
  32708. var i = 0;
  32709. polygons.forEach(function (complexPolygon, polygonIndex) {
  32710. // Calculate polygon color
  32711. var color = getColor(polygonIndex);
  32712. color[3] = Number.isFinite(color[3]) ? color[3] : 255;
  32713. var vertexCount = Polygon.getVertexCount(complexPolygon);
  32714. fillArray({ target: attribute, source: color, start: i, count: vertexCount });
  32715. i += color.length * vertexCount;
  32716. });
  32717. return attribute;
  32718. }
  32719. function calculatePickingColors(_ref7) {
  32720. var polygons = _ref7.polygons,
  32721. pointCount = _ref7.pointCount;
  32722. var attribute = new Uint8ClampedArray(pointCount * 3);
  32723. var i = 0;
  32724. polygons.forEach(function (complexPolygon, polygonIndex) {
  32725. var color = getPickingColor(polygonIndex);
  32726. var vertexCount = Polygon.getVertexCount(complexPolygon);
  32727. fillArray({ target: attribute, source: color, start: i, count: vertexCount });
  32728. i += color.length * vertexCount;
  32729. });
  32730. return attribute;
  32731. }
  32732. /***/ }),
  32733. /* 330 */
  32734. /***/ (function(module, exports, __webpack_require__) {
  32735. "use strict";
  32736. Object.defineProperty(exports, "__esModule", {
  32737. value: true
  32738. });
  32739. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  32740. //
  32741. // Permission is hereby granted, free of charge, to any person obtaining a copy
  32742. // of this software and associated documentation files (the "Software"), to deal
  32743. // in the Software without restriction, including without limitation the rights
  32744. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  32745. // copies of the Software, and to permit persons to whom the Software is
  32746. // furnished to do so, subject to the following conditions:
  32747. //
  32748. // The above copyright notice and this permission notice shall be included in
  32749. // all copies or substantial portions of the Software.
  32750. //
  32751. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  32752. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  32753. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  32754. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  32755. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  32756. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  32757. // THE SOFTWARE.
  32758. exports.default = "#define SHADER_NAME solid-polygon-layer-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 vColor;\n\nvoid main(void) {\n gl_FragColor = vColor;\n\n // use highlight color if this fragment belongs to the selected object.\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n\n // use picking color if rendering to picking FBO.\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n}\n";
  32759. /***/ }),
  32760. /* 331 */
  32761. /***/ (function(module, exports, __webpack_require__) {
  32762. "use strict";
  32763. Object.defineProperty(exports, "__esModule", {
  32764. value: true
  32765. });
  32766. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  32767. //
  32768. // Permission is hereby granted, free of charge, to any person obtaining a copy
  32769. // of this software and associated documentation files (the "Software"), to deal
  32770. // in the Software without restriction, including without limitation the rights
  32771. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  32772. // copies of the Software, and to permit persons to whom the Software is
  32773. // furnished to do so, subject to the following conditions:
  32774. //
  32775. // The above copyright notice and this permission notice shall be included in
  32776. // all copies or substantial portions of the Software.
  32777. //
  32778. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  32779. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  32780. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  32781. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  32782. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  32783. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  32784. // THE SOFTWARE.
  32785. exports.default = "#define SHADER_NAME solid-polygon-layer-vertex-shader-64\n\nattribute vec3 positions;\nattribute vec2 positions64xyLow;\nattribute vec3 normals;\nattribute vec4 colors;\nattribute vec3 pickingColors;\n\nuniform float extruded;\nuniform float elevationScale;\nuniform float opacity;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n vec4 positions64xy = vec4(positions.x, positions64xyLow.x, positions.y, positions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(positions64xy, projected_coord_xy);\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = projected_coord_xy[0];\n vertex_pos_modelspace[1] = projected_coord_xy[1];\n vertex_pos_modelspace[2] = vec2(project_scale(positions.z * elevationScale), 0.0);\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace);\n\n vec4 position_worldspace = vec4(\n vertex_pos_modelspace[0].x, vertex_pos_modelspace[1].x,\n vertex_pos_modelspace[2].x, vertex_pos_modelspace[3].x);\n\n float lightWeight = 1.0;\n\n if (extruded > 0.5) {\n lightWeight = getLightWeight(\n position_worldspace.xyz, // the w component is always 1.0\n project_normal(normals)\n );\n }\n\n vec3 lightWeightedColor = lightWeight * colors.rgb;\n vColor = vec4(lightWeightedColor, colors.a * opacity) / 255.0;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(pickingColors);\n}\n";
  32786. /***/ }),
  32787. /* 332 */
  32788. /***/ (function(module, exports, __webpack_require__) {
  32789. "use strict";
  32790. Object.defineProperty(exports, "__esModule", {
  32791. value: true
  32792. });
  32793. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  32794. //
  32795. // Permission is hereby granted, free of charge, to any person obtaining a copy
  32796. // of this software and associated documentation files (the "Software"), to deal
  32797. // in the Software without restriction, including without limitation the rights
  32798. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  32799. // copies of the Software, and to permit persons to whom the Software is
  32800. // furnished to do so, subject to the following conditions:
  32801. //
  32802. // The above copyright notice and this permission notice shall be included in
  32803. // all copies or substantial portions of the Software.
  32804. //
  32805. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  32806. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  32807. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  32808. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  32809. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  32810. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  32811. // THE SOFTWARE.
  32812. exports.default = "#define SHADER_NAME solid-polygon-layer-vertex-shader\n\nattribute vec3 positions;\nattribute vec3 normals;\nattribute vec4 colors;\nattribute vec3 pickingColors;\n\nuniform float extruded;\nuniform float elevationScale;\nuniform float opacity;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n \n vec4 position_worldspace = vec4(project_position(\n vec3(positions.x, positions.y, positions.z * elevationScale)),\n 1.0\n );\n gl_Position = project_to_clipspace(position_worldspace);\n\n float lightWeight = 1.0;\n \n if (extruded > 0.5) {\n // Here, the input parameters should be\n // position_worldspace.xyz / position_worldspace.w.\n // However, this calculation generates all zeros on\n // MacBook Pro with Intel Iris Pro GPUs for unclear reasons.\n // (see https://github.com/uber/deck.gl/issues/559)\n // Since the w component is always 1.0 in our shaders,\n // we decided to just provide xyz component of position_worldspace\n // to the getLightWeight() function\n lightWeight = getLightWeight(\n position_worldspace.xyz,\n project_normal(normals)\n );\n }\n\n vec3 lightWeightedColor = lightWeight * colors.rgb;\n vColor = vec4(lightWeightedColor, colors.a * opacity) / 255.0;\n\n // Set color to be rendered to picking fbo (also used to check for selection highlight).\n picking_setPickingColor(pickingColors);\n}\n";
  32813. /***/ }),
  32814. /* 333 */
  32815. /***/ (function(module, exports, __webpack_require__) {
  32816. "use strict";
  32817. Object.defineProperty(exports, "__esModule", {
  32818. value: true
  32819. });
  32820. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  32821. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  32822. var _viewState = __webpack_require__(180);
  32823. var _viewState2 = _interopRequireDefault(_viewState);
  32824. var _math = __webpack_require__(16);
  32825. var _assert = __webpack_require__(1);
  32826. var _assert2 = _interopRequireDefault(_assert);
  32827. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  32828. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  32829. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  32830. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  32831. var MOVEMENT_SPEED = 1; // 1 meter per keyboard click
  32832. var ROTATION_STEP_DEGREES = 2;
  32833. /* Helpers */
  32834. // Constrain number between bounds
  32835. function clamp(x, min, max) {
  32836. return x < min ? min : x > max ? max : x;
  32837. }
  32838. function ensureFinite(value, fallbackValue) {
  32839. return Number.isFinite(value) ? value : fallbackValue;
  32840. }
  32841. var FirstPersonState = function (_ViewState) {
  32842. _inherits(FirstPersonState, _ViewState);
  32843. function FirstPersonState(_ref) {
  32844. var width = _ref.width,
  32845. height = _ref.height,
  32846. position = _ref.position,
  32847. bearing = _ref.bearing,
  32848. pitch = _ref.pitch,
  32849. longitude = _ref.longitude,
  32850. latitude = _ref.latitude,
  32851. zoom = _ref.zoom,
  32852. _ref$syncBearing = _ref.syncBearing,
  32853. syncBearing = _ref$syncBearing === undefined ? true : _ref$syncBearing,
  32854. bounds = _ref.bounds,
  32855. startPanEventPosition = _ref.startPanEventPosition,
  32856. startPanPosition = _ref.startPanPosition,
  32857. startRotateCenter = _ref.startRotateCenter,
  32858. startRotateViewport = _ref.startRotateViewport,
  32859. startZoomPos = _ref.startZoomPos,
  32860. startZoom = _ref.startZoom;
  32861. _classCallCheck(this, FirstPersonState);
  32862. var _this = _possibleConstructorReturn(this, (FirstPersonState.__proto__ || Object.getPrototypeOf(FirstPersonState)).call(this, {
  32863. width: width,
  32864. height: height,
  32865. position: position,
  32866. bearing: bearing,
  32867. pitch: pitch,
  32868. longitude: longitude,
  32869. latitude: latitude,
  32870. zoom: zoom
  32871. }));
  32872. _this._interactiveState = {
  32873. startPanEventPosition: startPanEventPosition,
  32874. startPanPosition: startPanPosition,
  32875. startRotateCenter: startRotateCenter,
  32876. startRotateViewport: startRotateViewport,
  32877. startZoomPos: startZoomPos,
  32878. startZoom: startZoom
  32879. };
  32880. return _this;
  32881. }
  32882. /* Public API */
  32883. _createClass(FirstPersonState, [{
  32884. key: 'getInteractiveState',
  32885. value: function getInteractiveState() {
  32886. return this._interactiveState;
  32887. }
  32888. /**
  32889. * Start panning
  32890. * @param {[Number, Number]} pos - position on screen where the pointer grabs
  32891. */
  32892. }, {
  32893. key: 'panStart',
  32894. value: function panStart(_ref2) {
  32895. var pos = _ref2.pos;
  32896. var _viewportProps = this._viewportProps,
  32897. translationX = _viewportProps.translationX,
  32898. translationY = _viewportProps.translationY;
  32899. return this._getUpdatedState({
  32900. startPanPosition: [translationX, translationY],
  32901. startPanEventPosition: pos
  32902. });
  32903. }
  32904. /**
  32905. * Pan
  32906. * @param {[Number, Number]} pos - position on screen where the pointer is
  32907. */
  32908. }, {
  32909. key: 'pan',
  32910. value: function pan(_ref3) {
  32911. var pos = _ref3.pos,
  32912. startPos = _ref3.startPos;
  32913. var startPanEventPosition = this._interactiveState.startPanEventPosition || startPos;
  32914. (0, _assert2.default)(startPanEventPosition, '`startPanEventPosition` props is required');
  32915. var _ref4 = this._interactiveState.startPanPosition || [],
  32916. _ref5 = _slicedToArray(_ref4, 2),
  32917. translationX = _ref5[0],
  32918. translationY = _ref5[1];
  32919. translationX = ensureFinite(translationX, this._viewportProps.translationX);
  32920. translationY = ensureFinite(translationY, this._viewportProps.translationY);
  32921. var deltaX = pos[0] - startPanEventPosition[0];
  32922. var deltaY = pos[1] - startPanEventPosition[1];
  32923. return this._getUpdatedState({
  32924. translationX: translationX + deltaX,
  32925. translationY: translationY - deltaY
  32926. });
  32927. }
  32928. /**
  32929. * End panning
  32930. * Must call if `panStart()` was called
  32931. */
  32932. }, {
  32933. key: 'panEnd',
  32934. value: function panEnd() {
  32935. return this._getUpdatedState({
  32936. startPanPosition: null,
  32937. startPanPos: null
  32938. });
  32939. }
  32940. /**
  32941. * Start rotating
  32942. * @param {[Number, Number]} pos - position on screen where the pointer grabs
  32943. */
  32944. }, {
  32945. key: 'rotateStart',
  32946. value: function rotateStart(_ref6) {
  32947. var pos = _ref6.pos;
  32948. return this._getUpdatedState({
  32949. startRotateCenter: this._viewportProps.position,
  32950. startRotateViewport: this._viewportProps
  32951. });
  32952. }
  32953. /**
  32954. * Rotate
  32955. * @param {[Number, Number]} pos - position on screen where the pointer is
  32956. */
  32957. }, {
  32958. key: 'rotate',
  32959. value: function rotate(_ref7) {
  32960. var deltaScaleX = _ref7.deltaScaleX,
  32961. deltaScaleY = _ref7.deltaScaleY;
  32962. var _viewportProps2 = this._viewportProps,
  32963. bearing = _viewportProps2.bearing,
  32964. pitch = _viewportProps2.pitch;
  32965. return this._getUpdatedState({
  32966. bearing: bearing + deltaScaleX * 10,
  32967. pitch: pitch - deltaScaleY * 10
  32968. });
  32969. }
  32970. /**
  32971. * End rotating
  32972. * Must call if `rotateStart()` was called
  32973. */
  32974. }, {
  32975. key: 'rotateEnd',
  32976. value: function rotateEnd() {
  32977. return this._getUpdatedState({
  32978. startRotateCenter: null,
  32979. startRotateViewport: null
  32980. });
  32981. }
  32982. /**
  32983. * Start zooming
  32984. * @param {[Number, Number]} pos - position on screen where the pointer grabs
  32985. */
  32986. }, {
  32987. key: 'zoomStart',
  32988. value: function zoomStart(_ref8) {
  32989. var pos = _ref8.pos;
  32990. return this._getUpdatedState({
  32991. startZoomPos: pos,
  32992. startZoom: this._viewportProps.zoom
  32993. });
  32994. }
  32995. /**
  32996. * Zoom
  32997. * @param {[Number, Number]} pos - position on screen where the current center is
  32998. * @param {[Number, Number]} startPos - the center position at
  32999. * the start of the operation. Must be supplied of `zoomStart()` was not called
  33000. * @param {Number} scale - a number between [0, 1] specifying the accumulated
  33001. * relative scale.
  33002. */
  33003. }, {
  33004. key: 'zoom',
  33005. value: function zoom(_ref9) {
  33006. var pos = _ref9.pos,
  33007. startPos = _ref9.startPos,
  33008. scale = _ref9.scale;
  33009. var _viewportProps3 = this._viewportProps,
  33010. zoom = _viewportProps3.zoom,
  33011. minZoom = _viewportProps3.minZoom,
  33012. maxZoom = _viewportProps3.maxZoom,
  33013. width = _viewportProps3.width,
  33014. height = _viewportProps3.height,
  33015. translationX = _viewportProps3.translationX,
  33016. translationY = _viewportProps3.translationY;
  33017. var startZoomPos = this._interactiveState.startZoomPos || startPos || pos;
  33018. var newZoom = clamp(zoom * scale, minZoom, maxZoom);
  33019. var deltaX = pos[0] - startZoomPos[0];
  33020. var deltaY = pos[1] - startZoomPos[1];
  33021. // Zoom around the center position
  33022. var cx = startZoomPos[0] - width / 2;
  33023. var cy = height / 2 - startZoomPos[1];
  33024. /* eslint-disable no-unused-vars */
  33025. var newTranslationX = cx - (cx - translationX) * newZoom / zoom + deltaX;
  33026. var newTranslationY = cy - (cy - translationY) * newZoom / zoom - deltaY;
  33027. /* eslint-enable no-unused-vars */
  33028. // return this._getUpdatedState({
  33029. // position
  33030. // translationX: newTranslationX,
  33031. // translationY: newTranslationY
  33032. // });
  33033. // TODO HACK
  33034. return newZoom / zoom < 1 ? this.moveBackward() : this.moveForward();
  33035. }
  33036. /**
  33037. * End zooming
  33038. * Must call if `zoomStart()` was called
  33039. */
  33040. }, {
  33041. key: 'zoomEnd',
  33042. value: function zoomEnd() {
  33043. return this._getUpdatedState({
  33044. startZoomPos: null,
  33045. startZoom: null
  33046. });
  33047. }
  33048. }, {
  33049. key: 'moveLeft',
  33050. value: function moveLeft() {
  33051. var bearing = this._viewportProps.bearing;
  33052. var newBearing = bearing - ROTATION_STEP_DEGREES;
  33053. return this._getUpdatedState({
  33054. bearing: newBearing
  33055. });
  33056. }
  33057. }, {
  33058. key: 'moveRight',
  33059. value: function moveRight() {
  33060. var bearing = this._viewportProps.bearing;
  33061. var newBearing = bearing + ROTATION_STEP_DEGREES;
  33062. return this._getUpdatedState({
  33063. bearing: newBearing
  33064. });
  33065. }
  33066. }, {
  33067. key: 'moveForward',
  33068. value: function moveForward() {
  33069. var position = this._viewportProps.position;
  33070. var direction = this.getDirection();
  33071. var delta = new _math.Vector3(direction).normalize().scale(MOVEMENT_SPEED);
  33072. return this._getUpdatedState({
  33073. position: new _math.Vector3(position).add(delta)
  33074. });
  33075. }
  33076. }, {
  33077. key: 'moveBackward',
  33078. value: function moveBackward() {
  33079. var position = this._viewportProps.position;
  33080. var direction = this.getDirection();
  33081. var delta = new _math.Vector3(direction).normalize().scale(-MOVEMENT_SPEED);
  33082. return this._getUpdatedState({
  33083. position: new _math.Vector3(position).add(delta)
  33084. });
  33085. }
  33086. }, {
  33087. key: 'moveUp',
  33088. value: function moveUp() {
  33089. var position = this._viewportProps.position;
  33090. var delta = [0, 0, 1];
  33091. return this._getUpdatedState({
  33092. position: new _math.Vector3(position).add(delta)
  33093. });
  33094. }
  33095. }, {
  33096. key: 'moveDown',
  33097. value: function moveDown() {
  33098. var position = this._viewportProps.position;
  33099. var delta = position[2] >= 1 ? [0, 0, -1] : [0, 0, 0];
  33100. return this._getUpdatedState({
  33101. position: new _math.Vector3(position).add(delta)
  33102. });
  33103. }
  33104. }, {
  33105. key: 'zoomIn',
  33106. value: function zoomIn() {
  33107. return this._getUpdatedState({
  33108. zoom: this._viewportProps.zoom + 0.2
  33109. });
  33110. }
  33111. }, {
  33112. key: 'zoomOut',
  33113. value: function zoomOut() {
  33114. return this._getUpdatedState({
  33115. zoom: this._viewportProps.zoom - 0.2
  33116. });
  33117. }
  33118. /* Private methods */
  33119. }, {
  33120. key: '_getUpdatedState',
  33121. value: function _getUpdatedState(newProps) {
  33122. // Update _viewportProps
  33123. return new FirstPersonState(Object.assign({}, this._viewportProps, this._interactiveState, newProps));
  33124. }
  33125. }]);
  33126. return FirstPersonState;
  33127. }(_viewState2.default);
  33128. exports.default = FirstPersonState;
  33129. /***/ }),
  33130. /* 334 */
  33131. /***/ (function(module, exports, __webpack_require__) {
  33132. "use strict";
  33133. Object.defineProperty(exports, "__esModule", {
  33134. value: true
  33135. });
  33136. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  33137. //
  33138. // Permission is hereby granted, free of charge, to any person obtaining a copy
  33139. // of this software and associated documentation files (the "Software"), to deal
  33140. // in the Software without restriction, including without limitation the rights
  33141. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  33142. // copies of the Software, and to permit persons to whom the Software is
  33143. // furnished to do so, subject to the following conditions:
  33144. //
  33145. // The above copyright notice and this permission notice shall be included in
  33146. // all copies or substantial portions of the Software.
  33147. //
  33148. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  33149. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  33150. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  33151. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  33152. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  33153. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  33154. // THE SOFTWARE.
  33155. exports.default = "float scale(float position) {\n return project_scale(position);\n}\n\nvec2 scale(vec2 position) {\n return project_scale(position);\n}\n\nvec3 scale(vec3 position) {\n return project_scale(position);\n}\n\nvec4 scale(vec4 position) {\n return project_scale(position);\n}\n\nvec2 preproject(vec2 position) {\n return project_position(position);\n}\n\nvec3 preproject(vec3 position) {\n return project_position(position);\n}\n\nvec4 preproject(vec4 position) {\n return project_position(position);\n}\n\nvec4 project(vec4 position) {\n return project_to_clipspace(position);\n}\n";
  33156. /***/ }),
  33157. /* 335 */
  33158. /***/ (function(module, exports, __webpack_require__) {
  33159. "use strict";
  33160. Object.defineProperty(exports, "__esModule", {
  33161. value: true
  33162. });
  33163. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  33164. var _luma = __webpack_require__(12);
  33165. var _attributeTransitionModel = __webpack_require__(336);
  33166. var _attributeTransitionModel2 = _interopRequireDefault(_attributeTransitionModel);
  33167. var _log = __webpack_require__(17);
  33168. var _log2 = _interopRequireDefault(_log);
  33169. var _assert = __webpack_require__(1);
  33170. var _assert2 = _interopRequireDefault(_assert);
  33171. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  33172. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  33173. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  33174. var TRANSITION_STATE = {
  33175. NONE: 0,
  33176. PENDING: 1,
  33177. STARTED: 2,
  33178. ENDED: 3
  33179. };
  33180. var noop = function noop() {};
  33181. var AttributeTransitionManager = function () {
  33182. function AttributeTransitionManager(gl, _ref) {
  33183. var id = _ref.id;
  33184. _classCallCheck(this, AttributeTransitionManager);
  33185. this.id = id;
  33186. this.gl = gl;
  33187. this.isSupported = _luma.TransformFeedback.isSupported(gl);
  33188. this.attributeTransitions = {};
  33189. this.needsRedraw = false;
  33190. this.model = null;
  33191. if (this.isSupported) {
  33192. this.transformFeedback = new _luma.TransformFeedback(gl);
  33193. } else {
  33194. _log2.default.warn(0, 'WebGL2 not supported by this browser. Transition animation is disabled.');
  33195. }
  33196. }
  33197. /* Public methods */
  33198. // Called when attribute manager updates
  33199. // Check the latest attributes for updates.
  33200. _createClass(AttributeTransitionManager, [{
  33201. key: 'update',
  33202. value: function update(attributes) {
  33203. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  33204. this.opts = opts;
  33205. if (!this.isSupported) {
  33206. return;
  33207. }
  33208. var needsNewModel = false;
  33209. var attributeTransitions = this.attributeTransitions;
  33210. var changedTransitions = {};
  33211. for (var attributeName in attributes) {
  33212. var transition = this._updateAttribute(attributeName, attributes[attributeName]);
  33213. if (transition) {
  33214. if (!attributeTransitions[attributeName]) {
  33215. // New animated attribute is added
  33216. attributeTransitions[attributeName] = transition;
  33217. needsNewModel = true;
  33218. }
  33219. changedTransitions[attributeName] = transition;
  33220. }
  33221. }
  33222. for (var _attributeName in attributeTransitions) {
  33223. var attribute = attributes[_attributeName];
  33224. if (!attribute || !attribute.transition) {
  33225. // Animated attribute has been removed
  33226. delete attributeTransitions[_attributeName];
  33227. needsNewModel = true;
  33228. }
  33229. }
  33230. if (needsNewModel) {
  33231. this._createModel();
  33232. } else if (this.model) {
  33233. this.model.setTransitions(changedTransitions);
  33234. }
  33235. }
  33236. // Returns `true` if attribute is transition-enabled
  33237. }, {
  33238. key: 'hasAttribute',
  33239. value: function hasAttribute(attributeName) {
  33240. return attributeName in this.attributeTransitions;
  33241. }
  33242. // Get all the animated attributes
  33243. }, {
  33244. key: 'getAttributes',
  33245. value: function getAttributes() {
  33246. var animatedAttributes = {};
  33247. for (var attributeName in this.attributeTransitions) {
  33248. var transition = this.attributeTransitions[attributeName];
  33249. if (transition.buffer) {
  33250. animatedAttributes[attributeName] = transition.buffer;
  33251. }
  33252. }
  33253. return animatedAttributes;
  33254. }
  33255. /* eslint-disable max-statements */
  33256. // Called every render cycle, run transform feedback
  33257. // Returns `true` if anything changes
  33258. }, {
  33259. key: 'setCurrentTime',
  33260. value: function setCurrentTime(currentTime) {
  33261. if (!this.model) {
  33262. return false;
  33263. }
  33264. var uniforms = {};
  33265. var buffers = {};
  33266. var needsRedraw = this.needsRedraw;
  33267. this.needsRedraw = false;
  33268. for (var attributeName in this.attributeTransitions) {
  33269. var transition = this.attributeTransitions[attributeName];
  33270. buffers[transition.bufferIndex] = transition.buffer;
  33271. var time = 1;
  33272. if (transition.state === TRANSITION_STATE.PENDING) {
  33273. transition.startTime = currentTime;
  33274. transition.state = TRANSITION_STATE.STARTED;
  33275. transition.onStart(transition);
  33276. }
  33277. if (transition.state === TRANSITION_STATE.STARTED) {
  33278. time = (currentTime - transition.startTime) / transition.duration;
  33279. if (time >= 1) {
  33280. time = 1;
  33281. transition.state = TRANSITION_STATE.ENDED;
  33282. transition.onEnd(transition);
  33283. }
  33284. needsRedraw = true;
  33285. }
  33286. uniforms[transition.name + 'Time'] = transition.easing(time);
  33287. }
  33288. if (needsRedraw) {
  33289. this._runTransformFeedback({ uniforms: uniforms, buffers: buffers });
  33290. }
  33291. return needsRedraw;
  33292. }
  33293. /* eslint-enable max-statements */
  33294. /* Private methods */
  33295. // Check an attributes for updates
  33296. // Returns a transition object if a new transition is triggered.
  33297. }, {
  33298. key: '_updateAttribute',
  33299. value: function _updateAttribute(attributeName, attribute) {
  33300. var settings = this._getTransitionSettings(attribute);
  33301. if (settings) {
  33302. var hasChanged = void 0;
  33303. var transition = this.attributeTransitions[attributeName];
  33304. if (transition) {
  33305. hasChanged = attribute.changed;
  33306. } else {
  33307. // New animated attributes have been added
  33308. transition = { name: attributeName, attribute: attribute };
  33309. hasChanged = true;
  33310. }
  33311. if (hasChanged) {
  33312. this._triggerTransition(transition, settings);
  33313. return transition;
  33314. }
  33315. }
  33316. return null;
  33317. }
  33318. // Redraw the transform feedback
  33319. }, {
  33320. key: '_runTransformFeedback',
  33321. value: function _runTransformFeedback(_ref2) {
  33322. var uniforms = _ref2.uniforms,
  33323. buffers = _ref2.buffers;
  33324. var model = this.model,
  33325. transformFeedback = this.transformFeedback;
  33326. transformFeedback.bindBuffers(buffers, {});
  33327. model.draw({
  33328. uniforms: uniforms,
  33329. transformFeedback: transformFeedback,
  33330. parameters: _defineProperty({}, _luma.GL.RASTERIZER_DISCARD, true)
  33331. });
  33332. }
  33333. // Create a model for the transform feedback
  33334. }, {
  33335. key: '_createModel',
  33336. value: function _createModel() {
  33337. if (this.model) {
  33338. this.model.destroy();
  33339. }
  33340. this.model = new _attributeTransitionModel2.default(this.gl, {
  33341. id: this.id,
  33342. transitions: this.attributeTransitions
  33343. });
  33344. }
  33345. // get current values of an attribute, clipped/padded to the size of the new buffer
  33346. }, {
  33347. key: '_getCurrentAttributeState',
  33348. value: function _getCurrentAttributeState(transition) {
  33349. var attribute = transition.attribute,
  33350. buffer = transition.buffer;
  33351. var value = attribute.value,
  33352. type = attribute.type,
  33353. size = attribute.size;
  33354. if (buffer) {
  33355. // If new buffer is bigger than old buffer, back fill with destination values
  33356. var oldBufferData = new Float32Array(value);
  33357. buffer.getData({ dstData: oldBufferData });
  33358. // Hack/Xiaoji: WebGL2 throws error if TransformFeedback does not render to
  33359. // a buffer of type Float32Array.
  33360. // Therefore we need to read data as a Float32Array then re-cast to attribute type
  33361. if (!(value instanceof Float32Array)) {
  33362. oldBufferData = new value.constructor(oldBufferData);
  33363. }
  33364. return { size: size, type: type, value: oldBufferData };
  33365. }
  33366. return { size: size, type: type, value: value };
  33367. }
  33368. // Returns transition settings object if transition is enabled, otherwise `null`
  33369. }, {
  33370. key: '_getTransitionSettings',
  33371. value: function _getTransitionSettings(attribute) {
  33372. var opts = this.opts;
  33373. var transition = attribute.transition,
  33374. accessor = attribute.accessor;
  33375. if (!transition) {
  33376. return null;
  33377. }
  33378. return Array.isArray(accessor) ? accessor.map(function (a) {
  33379. return opts[a];
  33380. }).find(Boolean) : opts[accessor];
  33381. }
  33382. // Normalizes transition settings object, merge with default settings
  33383. }, {
  33384. key: '_normalizeTransitionSettings',
  33385. value: function _normalizeTransitionSettings(settings) {
  33386. // Shorthand: use duration instead of parameter object
  33387. if (Number.isFinite(settings)) {
  33388. settings = { duration: settings };
  33389. }
  33390. // Check if settings is valid
  33391. (0, _assert2.default)(settings && settings.duration > 0);
  33392. return {
  33393. duration: settings.duration,
  33394. easing: settings.easing || function (t) {
  33395. return t;
  33396. },
  33397. onStart: settings.onStart || noop,
  33398. onEnd: settings.onEnd || noop,
  33399. onInterrupt: settings.onInterrupt || noop
  33400. };
  33401. }
  33402. // Start a new transition using the current settings
  33403. // Updates transition state and from/to buffer
  33404. }, {
  33405. key: '_triggerTransition',
  33406. value: function _triggerTransition(transition, settings) {
  33407. this.needsRedraw = true;
  33408. var attribute = transition.attribute,
  33409. buffer = transition.buffer;
  33410. var value = attribute.value,
  33411. size = attribute.size;
  33412. var transitionSettings = this._normalizeTransitionSettings(settings);
  33413. var needsNewBuffer = !buffer || transition.bufferSize < value.length;
  33414. // Attribute descriptor to transition from
  33415. // _getCurrentAttributeState must be called before the current buffer is deleted
  33416. var fromState = this._getCurrentAttributeState(transition);
  33417. // Attribute descriptor to transition to
  33418. // Pre-converting to buffer to reuse in the case where no transition is needed
  33419. var toState = new _luma.Buffer(this.gl, { size: size, data: value });
  33420. if (needsNewBuffer) {
  33421. if (buffer) {
  33422. buffer.delete();
  33423. }
  33424. transition.buffer = new _luma.Buffer(this.gl, {
  33425. size: size,
  33426. instanced: attribute.instanced,
  33427. // WebGL2 throws error if `value` is not cast to Float32Array:
  33428. // `transformfeedback buffers : buffer or buffer range not large enough`
  33429. data: new Float32Array(value.length),
  33430. usage: _luma.GL.DYNAMIC_COPY
  33431. });
  33432. transition.bufferSize = value.length;
  33433. }
  33434. Object.assign(transition, transitionSettings);
  33435. transition.fromState = fromState;
  33436. transition.toState = toState;
  33437. // Reset transition state
  33438. if (transition.state === TRANSITION_STATE.STARTED) {
  33439. transition.onInterrupt(transition);
  33440. }
  33441. transition.state = TRANSITION_STATE.PENDING;
  33442. }
  33443. }]);
  33444. return AttributeTransitionManager;
  33445. }();
  33446. exports.default = AttributeTransitionManager;
  33447. /***/ }),
  33448. /* 336 */
  33449. /***/ (function(module, exports, __webpack_require__) {
  33450. "use strict";
  33451. Object.defineProperty(exports, "__esModule", {
  33452. value: true
  33453. });
  33454. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  33455. var _luma = __webpack_require__(12);
  33456. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  33457. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  33458. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  33459. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  33460. var ATTRIBUTE_MAPPING = {
  33461. 1: 'float',
  33462. 2: 'vec2',
  33463. 3: 'vec3',
  33464. 4: 'vec4'
  33465. };
  33466. function getShaders(transitions) {
  33467. // Build shaders
  33468. var varyings = [];
  33469. var attributeDeclarations = [];
  33470. var uniformsDeclarations = [];
  33471. var varyingDeclarations = [];
  33472. var calculations = [];
  33473. for (var attributeName in transitions) {
  33474. var transition = transitions[attributeName];
  33475. var attributeType = ATTRIBUTE_MAPPING[transition.attribute.size];
  33476. if (attributeType) {
  33477. transition.bufferIndex = varyings.length;
  33478. varyings.push(attributeName);
  33479. attributeDeclarations.push('attribute ' + attributeType + ' ' + attributeName + 'From;');
  33480. attributeDeclarations.push('attribute ' + attributeType + ' ' + attributeName + 'To;');
  33481. uniformsDeclarations.push('uniform float ' + attributeName + 'Time;');
  33482. varyingDeclarations.push('varying ' + attributeType + ' ' + attributeName + ';');
  33483. calculations.push(attributeName + ' = mix(' + attributeName + 'From, ' + attributeName + 'To,\n ' + attributeName + 'Time);');
  33484. }
  33485. }
  33486. var vs = '\n#define SHADER_NAME feedback-vertex-shader\n' + attributeDeclarations.join('\n') + '\n' + uniformsDeclarations.join('\n') + '\n' + varyingDeclarations.join('\n') + '\n\nvoid main(void) {\n ' + calculations.join('\n') + '\n gl_Position = vec4(0.0);\n}\n';
  33487. var fs = '#define SHADER_NAME feedback-fragment-shader\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n' + varyingDeclarations.join('\n') + '\n\nvoid main(void) {\n gl_FragColor = vec4(0.0);\n}\n';
  33488. return { vs: vs, fs: fs, varyings: varyings };
  33489. }
  33490. var AttributeTransitionModel = function (_Model) {
  33491. _inherits(AttributeTransitionModel, _Model);
  33492. function AttributeTransitionModel(gl, _ref) {
  33493. var id = _ref.id,
  33494. transitions = _ref.transitions;
  33495. _classCallCheck(this, AttributeTransitionModel);
  33496. var _this = _possibleConstructorReturn(this, (AttributeTransitionModel.__proto__ || Object.getPrototypeOf(AttributeTransitionModel)).call(this, gl, Object.assign({
  33497. id: id,
  33498. geometry: new _luma.Geometry({
  33499. id: id,
  33500. drawMode: _luma.GL.POINTS
  33501. }),
  33502. vertexCount: 0,
  33503. isIndexed: true
  33504. }, getShaders(transitions))));
  33505. _this.setTransitions(transitions);
  33506. return _this;
  33507. }
  33508. // Update attributes and vertex count
  33509. _createClass(AttributeTransitionModel, [{
  33510. key: 'setTransitions',
  33511. value: function setTransitions(transitions) {
  33512. for (var attributeName in transitions) {
  33513. var _setAttributes;
  33514. var _transitions$attribut = transitions[attributeName],
  33515. fromState = _transitions$attribut.fromState,
  33516. toState = _transitions$attribut.toState,
  33517. attribute = _transitions$attribut.attribute;
  33518. this.setAttributes((_setAttributes = {}, _defineProperty(_setAttributes, attributeName + 'From', fromState), _defineProperty(_setAttributes, attributeName + 'To', toState), _setAttributes));
  33519. this.setVertexCount(attribute.value.length / attribute.size);
  33520. }
  33521. }
  33522. }]);
  33523. return AttributeTransitionModel;
  33524. }(_luma.Model);
  33525. exports.default = AttributeTransitionModel;
  33526. /***/ }),
  33527. /* 337 */
  33528. /***/ (function(module, exports, __webpack_require__) {
  33529. "use strict";
  33530. Object.defineProperty(exports, "__esModule", {
  33531. value: true
  33532. });
  33533. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  33534. var _layer = __webpack_require__(123);
  33535. var _layer2 = _interopRequireDefault(_layer);
  33536. var _log = __webpack_require__(17);
  33537. var _log2 = _interopRequireDefault(_log);
  33538. var _flatten = __webpack_require__(126);
  33539. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  33540. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  33541. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  33542. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  33543. //
  33544. // Permission is hereby granted, free of charge, to any person obtaining a copy
  33545. // of this software and associated documentation files (the "Software"), to deal
  33546. // in the Software without restriction, including without limitation the rights
  33547. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  33548. // copies of the Software, and to permit persons to whom the Software is
  33549. // furnished to do so, subject to the following conditions:
  33550. //
  33551. // The above copyright notice and this permission notice shall be included in
  33552. // all copies or substantial portions of the Software.
  33553. //
  33554. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  33555. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  33556. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  33557. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  33558. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  33559. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  33560. // THE SOFTWARE.
  33561. var CompositeLayer = function (_Layer) {
  33562. _inherits(CompositeLayer, _Layer);
  33563. function CompositeLayer(props) {
  33564. _classCallCheck(this, CompositeLayer);
  33565. return _possibleConstructorReturn(this, (CompositeLayer.__proto__ || Object.getPrototypeOf(CompositeLayer)).call(this, props));
  33566. }
  33567. _createClass(CompositeLayer, [{
  33568. key: 'getSubLayers',
  33569. value: function getSubLayers() {
  33570. return this.internalState.subLayers || [];
  33571. }
  33572. // initializeState is usually not needed for composite layers
  33573. // Provide empty definition to disable check for missing definition
  33574. }, {
  33575. key: 'initializeState',
  33576. value: function initializeState() {}
  33577. // called to augment the info object that is bubbled up from a sublayer
  33578. // override Layer.getPickingInfo() because decoding / setting uniform do
  33579. // not apply to a composite layer.
  33580. // @return null to cancel event
  33581. }, {
  33582. key: 'getPickingInfo',
  33583. value: function getPickingInfo(_ref) {
  33584. var info = _ref.info;
  33585. return info;
  33586. }
  33587. // Implement to generate subLayers
  33588. }, {
  33589. key: 'renderLayers',
  33590. value: function renderLayers() {
  33591. return null;
  33592. }
  33593. // Returns sub layer props for a specific sublayer
  33594. }, {
  33595. key: 'getSubLayerProps',
  33596. value: function getSubLayerProps(sublayerProps) {
  33597. var _props = this.props,
  33598. opacity = _props.opacity,
  33599. pickable = _props.pickable,
  33600. visible = _props.visible,
  33601. parameters = _props.parameters,
  33602. getPolygonOffset = _props.getPolygonOffset,
  33603. highlightedObjectIndex = _props.highlightedObjectIndex,
  33604. autoHighlight = _props.autoHighlight,
  33605. highlightColor = _props.highlightColor,
  33606. coordinateSystem = _props.coordinateSystem,
  33607. coordinateOrigin = _props.coordinateOrigin,
  33608. modelMatrix = _props.modelMatrix;
  33609. var newProps = {
  33610. opacity: opacity,
  33611. pickable: pickable,
  33612. visible: visible,
  33613. parameters: parameters,
  33614. getPolygonOffset: getPolygonOffset,
  33615. highlightedObjectIndex: highlightedObjectIndex,
  33616. autoHighlight: autoHighlight,
  33617. highlightColor: highlightColor,
  33618. coordinateSystem: coordinateSystem,
  33619. coordinateOrigin: coordinateOrigin,
  33620. modelMatrix: modelMatrix
  33621. };
  33622. if (sublayerProps) {
  33623. Object.assign(newProps, sublayerProps, {
  33624. id: this.props.id + '-' + sublayerProps.id,
  33625. updateTriggers: Object.assign({
  33626. all: this.props.updateTriggers.all
  33627. }, sublayerProps.updateTriggers)
  33628. });
  33629. }
  33630. return newProps;
  33631. }
  33632. // Called by layer manager to render subLayers
  33633. }, {
  33634. key: '_renderLayers',
  33635. value: function _renderLayers() {
  33636. var subLayers = this.internalState.subLayers;
  33637. if (subLayers && !this.needsUpdate()) {
  33638. _log2.default.log(3, 'Composite layer reused subLayers ' + this, this.internalState.subLayers);
  33639. } else {
  33640. subLayers = this.renderLayers();
  33641. // Flatten the returned array, removing any null, undefined or false
  33642. // this allows layers to render sublayers conditionally
  33643. // (see CompositeLayer.renderLayers docs)
  33644. subLayers = (0, _flatten.flatten)(subLayers, { filter: Boolean });
  33645. this.internalState.subLayers = subLayers;
  33646. _log2.default.log(2, 'Composite layer rendered new subLayers ' + this, subLayers);
  33647. }
  33648. // populate reference to parent layer (this layer)
  33649. // NOTE: needs to be done even when reusing layers as the parent may have changed
  33650. var _iteratorNormalCompletion = true;
  33651. var _didIteratorError = false;
  33652. var _iteratorError = undefined;
  33653. try {
  33654. for (var _iterator = subLayers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  33655. var layer = _step.value;
  33656. layer.parentLayer = this;
  33657. }
  33658. } catch (err) {
  33659. _didIteratorError = true;
  33660. _iteratorError = err;
  33661. } finally {
  33662. try {
  33663. if (!_iteratorNormalCompletion && _iterator.return) {
  33664. _iterator.return();
  33665. }
  33666. } finally {
  33667. if (_didIteratorError) {
  33668. throw _iteratorError;
  33669. }
  33670. }
  33671. }
  33672. }
  33673. }, {
  33674. key: 'isComposite',
  33675. get: function get() {
  33676. return true;
  33677. }
  33678. }]);
  33679. return CompositeLayer;
  33680. }(_layer2.default);
  33681. exports.default = CompositeLayer;
  33682. CompositeLayer.layerName = 'CompositeLayer';
  33683. /***/ }),
  33684. /* 338 */
  33685. /***/ (function(module, exports, __webpack_require__) {
  33686. "use strict";
  33687. var _globals = __webpack_require__(350);
  33688. var _log = __webpack_require__(17);
  33689. var _log2 = _interopRequireDefault(_log);
  33690. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  33691. // Version detection using babel plugin
  33692. // Fallback for tests and SSR since global variable is defined by Webpack.
  33693. /* global __VERSION__ */
  33694. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  33695. //
  33696. // Permission is hereby granted, free of charge, to any person obtaining a copy
  33697. // of this software and associated documentation files (the "Software"), to deal
  33698. // in the Software without restriction, including without limitation the rights
  33699. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  33700. // copies of the Software, and to permit persons to whom the Software is
  33701. // furnished to do so, subject to the following conditions:
  33702. //
  33703. // The above copyright notice and this permission notice shall be included in
  33704. // all copies or substantial portions of the Software.
  33705. //
  33706. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  33707. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  33708. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  33709. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  33710. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  33711. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  33712. // THE SOFTWARE.
  33713. var version = true ? '5.1.3' : _globals.global.DECK_VERSION || 'untranspiled source';
  33714. var STARTUP_MESSAGE = 'set deck.log.priority=1 (or higher) to trace attribute updates';
  33715. if (_globals.global.deck && _globals.global.deck.VERSION !== version) {
  33716. throw new Error('deck.gl - multiple versions detected: ' + _globals.global.deck.VERSION + ' vs ' + version);
  33717. }
  33718. if (!_globals.global.deck) {
  33719. /* global console */
  33720. /* eslint-disable no-console */
  33721. console.log('deck.gl ' + version + ' - ' + STARTUP_MESSAGE);
  33722. _globals.global.deck = _globals.global.deck || {
  33723. VERSION: version,
  33724. version: version,
  33725. log: _log2.default
  33726. };
  33727. }
  33728. // TODO - Hack, remove when luma.gl 4.1.0-alpha.5 is published
  33729. if (!console.table) {
  33730. console.table = function () {};
  33731. }
  33732. // Make sure we register shader modules
  33733. __webpack_require__(190);
  33734. /***/ }),
  33735. /* 339 */
  33736. /***/ (function(module, exports, __webpack_require__) {
  33737. "use strict";
  33738. Object.defineProperty(exports, "__esModule", {
  33739. value: true
  33740. });
  33741. exports.pickObject = pickObject;
  33742. exports.pickVisibleObjects = pickVisibleObjects;
  33743. exports.getClosestFromPickingBuffer = getClosestFromPickingBuffer;
  33744. var _drawLayers = __webpack_require__(183);
  33745. var _log = __webpack_require__(17);
  33746. var _log2 = _interopRequireDefault(_log);
  33747. var _assert = __webpack_require__(1);
  33748. var _assert2 = _interopRequireDefault(_assert);
  33749. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  33750. var NO_PICKED_OBJECT = {
  33751. pickedColor: null,
  33752. pickedLayer: null,
  33753. pickedObjectIndex: -1
  33754. };
  33755. /* eslint-disable max-depth, max-statements */
  33756. // Pick the closest object at the given (x,y) coordinate
  33757. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  33758. //
  33759. // Permission is hereby granted, free of charge, to any person obtaining a copy
  33760. // of this software and associated documentation files (the "Software"), to deal
  33761. // in the Software without restriction, including without limitation the rights
  33762. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  33763. // copies of the Software, and to permit persons to whom the Software is
  33764. // furnished to do so, subject to the following conditions:
  33765. //
  33766. // The above copyright notice and this permission notice shall be included in
  33767. // all copies or substantial portions of the Software.
  33768. //
  33769. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  33770. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  33771. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  33772. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  33773. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  33774. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  33775. // THE SOFTWARE.
  33776. function pickObject(gl, _ref) {
  33777. var layers = _ref.layers,
  33778. viewports = _ref.viewports,
  33779. x = _ref.x,
  33780. y = _ref.y,
  33781. radius = _ref.radius,
  33782. layerFilter = _ref.layerFilter,
  33783. mode = _ref.mode,
  33784. onViewportActive = _ref.onViewportActive,
  33785. pickingFBO = _ref.pickingFBO,
  33786. lastPickedInfo = _ref.lastPickedInfo,
  33787. useDevicePixels = _ref.useDevicePixels;
  33788. // Convert from canvas top-left to WebGL bottom-left coordinates
  33789. // And compensate for pixelRatio
  33790. var pixelRatio = (0, _drawLayers.getPixelRatio)({ useDevicePixels: useDevicePixels });
  33791. var deviceX = Math.round(x * pixelRatio);
  33792. var deviceY = Math.round(gl.canvas.height - y * pixelRatio);
  33793. var deviceRadius = Math.round(radius * pixelRatio);
  33794. var deviceRect = getPickingRect({
  33795. deviceX: deviceX,
  33796. deviceY: deviceY,
  33797. deviceRadius: deviceRadius,
  33798. deviceWidth: pickingFBO.width,
  33799. deviceHeight: pickingFBO.height
  33800. });
  33801. var pickedColors = deviceRect && drawAndSamplePickingBuffer(gl, {
  33802. layers: layers,
  33803. viewports: viewports,
  33804. onViewportActive: onViewportActive,
  33805. useDevicePixels: useDevicePixels,
  33806. pickingFBO: pickingFBO,
  33807. deviceRect: deviceRect,
  33808. layerFilter: layerFilter,
  33809. redrawReason: mode
  33810. });
  33811. var pickInfo = pickedColors && getClosestFromPickingBuffer(gl, {
  33812. pickedColors: pickedColors,
  33813. layers: layers,
  33814. deviceX: deviceX,
  33815. deviceY: deviceY,
  33816. deviceRadius: deviceRadius,
  33817. deviceRect: deviceRect
  33818. }) || NO_PICKED_OBJECT;
  33819. return processPickInfo({
  33820. pickInfo: pickInfo,
  33821. lastPickedInfo: lastPickedInfo,
  33822. mode: mode,
  33823. layers: layers,
  33824. viewports: viewports,
  33825. x: x,
  33826. y: y,
  33827. deviceX: deviceX,
  33828. deviceY: deviceY,
  33829. pixelRatio: pixelRatio
  33830. });
  33831. }
  33832. // Pick all objects within the given bounding box
  33833. function pickVisibleObjects(gl, _ref2) {
  33834. var layers = _ref2.layers,
  33835. viewports = _ref2.viewports,
  33836. x = _ref2.x,
  33837. y = _ref2.y,
  33838. width = _ref2.width,
  33839. height = _ref2.height,
  33840. mode = _ref2.mode,
  33841. layerFilter = _ref2.layerFilter,
  33842. onViewportActive = _ref2.onViewportActive,
  33843. pickingFBO = _ref2.pickingFBO,
  33844. useDevicePixels = _ref2.useDevicePixels;
  33845. // Convert from canvas top-left to WebGL bottom-left coordinates
  33846. // And compensate for pixelRatio
  33847. var pixelRatio = (0, _drawLayers.getPixelRatio)({ useDevicePixels: useDevicePixels });
  33848. var deviceLeft = Math.round(x * pixelRatio);
  33849. var deviceBottom = Math.round(gl.canvas.height - y * pixelRatio);
  33850. var deviceRight = Math.round((x + width) * pixelRatio);
  33851. var deviceTop = Math.round(gl.canvas.height - (y + height) * pixelRatio);
  33852. var deviceRect = {
  33853. x: deviceLeft,
  33854. y: deviceTop,
  33855. width: deviceRight - deviceLeft,
  33856. height: deviceBottom - deviceTop
  33857. };
  33858. var pickedColors = drawAndSamplePickingBuffer(gl, {
  33859. layers: layers,
  33860. viewports: viewports,
  33861. onViewportActive: onViewportActive,
  33862. pickingFBO: pickingFBO,
  33863. useDevicePixels: useDevicePixels,
  33864. deviceRect: deviceRect,
  33865. layerFilter: layerFilter,
  33866. redrawReason: mode
  33867. });
  33868. var pickInfos = getUniquesFromPickingBuffer(gl, { pickedColors: pickedColors, layers: layers });
  33869. // Only return unique infos, identified by info.object
  33870. var uniqueInfos = new Map();
  33871. pickInfos.forEach(function (pickInfo) {
  33872. var info = {
  33873. color: pickInfo.pickedColor,
  33874. layer: null,
  33875. index: pickInfo.pickedObjectIndex,
  33876. picked: true,
  33877. x: x,
  33878. y: y,
  33879. width: width,
  33880. height: height,
  33881. pixelRatio: pixelRatio
  33882. };
  33883. info = getLayerPickingInfo({ layer: pickInfo.pickedLayer, info: info, mode: mode });
  33884. if (!uniqueInfos.has(info.object)) {
  33885. uniqueInfos.set(info.object, info);
  33886. }
  33887. });
  33888. return Array.from(uniqueInfos.values());
  33889. }
  33890. // HELPER METHODS
  33891. // returns pickedColor or null if no pickable layers found.
  33892. function drawAndSamplePickingBuffer(gl, _ref3) {
  33893. var layers = _ref3.layers,
  33894. viewports = _ref3.viewports,
  33895. onViewportActive = _ref3.onViewportActive,
  33896. useDevicePixels = _ref3.useDevicePixels,
  33897. pickingFBO = _ref3.pickingFBO,
  33898. deviceRect = _ref3.deviceRect,
  33899. layerFilter = _ref3.layerFilter,
  33900. redrawReason = _ref3.redrawReason;
  33901. (0, _assert2.default)(deviceRect);
  33902. (0, _assert2.default)(Number.isFinite(deviceRect.width) && deviceRect.width > 0, '`width` must be > 0');
  33903. (0, _assert2.default)(Number.isFinite(deviceRect.height) && deviceRect.height > 0, '`height` must be > 0');
  33904. var pickableLayers = layers.filter(function (layer) {
  33905. return layer.isPickable();
  33906. });
  33907. if (pickableLayers.length < 1) {
  33908. return null;
  33909. }
  33910. (0, _drawLayers.drawPickingBuffer)(gl, {
  33911. layers: layers,
  33912. viewports: viewports,
  33913. onViewportActive: onViewportActive,
  33914. useDevicePixels: useDevicePixels,
  33915. pickingFBO: pickingFBO,
  33916. deviceRect: deviceRect,
  33917. layerFilter: layerFilter,
  33918. redrawReason: redrawReason
  33919. });
  33920. // Read from an already rendered picking buffer
  33921. // Returns an Uint8ClampedArray of picked pixels
  33922. var x = deviceRect.x,
  33923. y = deviceRect.y,
  33924. width = deviceRect.width,
  33925. height = deviceRect.height;
  33926. var pickedColors = new Uint8Array(width * height * 4);
  33927. pickingFBO.readPixels({ x: x, y: y, width: width, height: height, pixelArray: pickedColors });
  33928. return pickedColors;
  33929. }
  33930. // Indentifies which viewport, if any corresponds to x and y
  33931. // Returns first viewport if no match
  33932. // TODO - need to determine which viewport we are in
  33933. // TODO - document concept of "primary viewport" that matches all coords?
  33934. // TODO - static method on Viewport class?
  33935. function getViewportFromCoordinates(_ref4) {
  33936. var viewports = _ref4.viewports;
  33937. var viewport = viewports[0];
  33938. return viewport;
  33939. }
  33940. // Calculate a picking rect centered on deviceX and deviceY and clipped to device
  33941. // Returns null if pixel is outside of device
  33942. function getPickingRect(_ref5) {
  33943. var deviceX = _ref5.deviceX,
  33944. deviceY = _ref5.deviceY,
  33945. deviceRadius = _ref5.deviceRadius,
  33946. deviceWidth = _ref5.deviceWidth,
  33947. deviceHeight = _ref5.deviceHeight;
  33948. var valid = deviceX >= 0 && deviceY >= 0 && deviceX < deviceWidth && deviceY < deviceHeight;
  33949. // x, y out of bounds.
  33950. if (!valid) {
  33951. return null;
  33952. }
  33953. // Create a box of size `radius * 2 + 1` centered at [deviceX, deviceY]
  33954. var x = Math.max(0, deviceX - deviceRadius);
  33955. var y = Math.max(0, deviceY - deviceRadius);
  33956. var width = Math.min(deviceWidth, deviceX + deviceRadius) - x + 1;
  33957. var height = Math.min(deviceHeight, deviceY + deviceRadius) - y + 1;
  33958. return { x: x, y: y, width: width, height: height };
  33959. }
  33960. // TODO - break this monster function into 3+ parts
  33961. function processPickInfo(_ref6) {
  33962. var pickInfo = _ref6.pickInfo,
  33963. lastPickedInfo = _ref6.lastPickedInfo,
  33964. mode = _ref6.mode,
  33965. layers = _ref6.layers,
  33966. viewports = _ref6.viewports,
  33967. x = _ref6.x,
  33968. y = _ref6.y,
  33969. deviceX = _ref6.deviceX,
  33970. deviceY = _ref6.deviceY,
  33971. pixelRatio = _ref6.pixelRatio;
  33972. var pickedColor = pickInfo.pickedColor,
  33973. pickedLayer = pickInfo.pickedLayer,
  33974. pickedObjectIndex = pickInfo.pickedObjectIndex;
  33975. var affectedLayers = pickedLayer ? [pickedLayer] : [];
  33976. if (mode === 'hover') {
  33977. // only invoke onHover events if picked object has changed
  33978. var lastPickedObjectIndex = lastPickedInfo.index;
  33979. var lastPickedLayerId = lastPickedInfo.layerId;
  33980. var pickedLayerId = pickedLayer && pickedLayer.props.id;
  33981. // proceed only if picked object changed
  33982. if (pickedLayerId !== lastPickedLayerId || pickedObjectIndex !== lastPickedObjectIndex) {
  33983. if (pickedLayerId !== lastPickedLayerId) {
  33984. // We cannot store a ref to lastPickedLayer in the context because
  33985. // the state of an outdated layer is no longer valid
  33986. // and the props may have changed
  33987. var lastPickedLayer = layers.find(function (layer) {
  33988. return layer.props.id === lastPickedLayerId;
  33989. });
  33990. if (lastPickedLayer) {
  33991. // Let leave event fire before enter event
  33992. affectedLayers.unshift(lastPickedLayer);
  33993. }
  33994. }
  33995. // Update layer manager context
  33996. lastPickedInfo.layerId = pickedLayerId;
  33997. lastPickedInfo.index = pickedObjectIndex;
  33998. }
  33999. }
  34000. var viewport = getViewportFromCoordinates({ viewports: viewports }); // TODO - add coords
  34001. var baseInfo = {
  34002. color: null,
  34003. layer: null,
  34004. index: -1,
  34005. picked: false,
  34006. x: x,
  34007. y: y,
  34008. pixel: [x, y],
  34009. lngLat: viewport.unproject([x, y]),
  34010. devicePixel: [deviceX, deviceY],
  34011. pixelRatio: pixelRatio
  34012. };
  34013. // Use a Map to store all picking infos.
  34014. // The following two forEach loops are the result of
  34015. // https://github.com/uber/deck.gl/issues/443
  34016. // Please be very careful when changing this pattern
  34017. var infos = new Map();
  34018. affectedLayers.forEach(function (layer) {
  34019. var info = Object.assign({}, baseInfo);
  34020. if (layer === pickedLayer) {
  34021. info.color = pickedColor;
  34022. info.index = pickedObjectIndex;
  34023. info.picked = true;
  34024. }
  34025. info = getLayerPickingInfo({ layer: layer, info: info, mode: mode });
  34026. // This guarantees that there will be only one copy of info for
  34027. // one composite layer
  34028. if (info) {
  34029. infos.set(info.layer.id, info);
  34030. }
  34031. var pickingSelectedColor = layer.props.autoHighlight && pickedLayer === layer ? pickedColor : null;
  34032. var pickingParameters = {
  34033. pickingSelectedColor: pickingSelectedColor
  34034. };
  34035. var _iteratorNormalCompletion = true;
  34036. var _didIteratorError = false;
  34037. var _iteratorError = undefined;
  34038. try {
  34039. for (var _iterator = layer.getModels()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  34040. var model = _step.value;
  34041. model.updateModuleSettings(pickingParameters);
  34042. }
  34043. } catch (err) {
  34044. _didIteratorError = true;
  34045. _iteratorError = err;
  34046. } finally {
  34047. try {
  34048. if (!_iteratorNormalCompletion && _iterator.return) {
  34049. _iterator.return();
  34050. }
  34051. } finally {
  34052. if (_didIteratorError) {
  34053. throw _iteratorError;
  34054. }
  34055. }
  34056. }
  34057. });
  34058. var unhandledPickInfos = callLayerPickingCallbacks(infos, mode);
  34059. return unhandledPickInfos;
  34060. }
  34061. // Per-layer event handlers (e.g. onClick, onHover) are provided by the
  34062. // user and out of deck.gl's control. It's very much possible that
  34063. // the user calls React lifecycle methods in these function, such as
  34064. // ReactComponent.setState(). React lifecycle methods sometimes induce
  34065. // a re-render and re-generation of props of deck.gl and its layers,
  34066. // which invalidates all layers currently passed to this very function.
  34067. // Therefore, per-layer event handlers must be invoked at the end
  34068. // of the picking operation. NO operation that relies on the states of current
  34069. // layers should be called after this code.
  34070. function callLayerPickingCallbacks(infos, mode) {
  34071. var unhandledPickInfos = [];
  34072. infos.forEach(function (info) {
  34073. var handled = false;
  34074. switch (mode) {
  34075. case 'click':
  34076. handled = info.layer.props.onClick(info);
  34077. break;
  34078. case 'hover':
  34079. handled = info.layer.props.onHover(info);
  34080. break;
  34081. case 'query':
  34082. break;
  34083. default:
  34084. throw new Error('unknown pick type');
  34085. }
  34086. if (!handled) {
  34087. unhandledPickInfos.push(info);
  34088. }
  34089. });
  34090. return unhandledPickInfos;
  34091. }
  34092. /**
  34093. * Pick at a specified pixel with a tolerance radius
  34094. * Returns the closest object to the pixel in shape `{pickedColor, pickedLayer, pickedObjectIndex}`
  34095. */
  34096. function getClosestFromPickingBuffer(gl, _ref7) {
  34097. var pickedColors = _ref7.pickedColors,
  34098. layers = _ref7.layers,
  34099. deviceX = _ref7.deviceX,
  34100. deviceY = _ref7.deviceY,
  34101. deviceRadius = _ref7.deviceRadius,
  34102. deviceRect = _ref7.deviceRect;
  34103. (0, _assert2.default)(pickedColors);
  34104. // Traverse all pixels in picking results and find the one closest to the supplied
  34105. // [deviceX, deviceY]
  34106. var x = deviceRect.x,
  34107. y = deviceRect.y,
  34108. width = deviceRect.width,
  34109. height = deviceRect.height;
  34110. var minSquareDistanceToCenter = deviceRadius * deviceRadius;
  34111. var closestPixelIndex = -1;
  34112. var i = 0;
  34113. for (var row = 0; row < height; row++) {
  34114. var dy = row + y - deviceY;
  34115. var dy2 = dy * dy;
  34116. if (dy2 > minSquareDistanceToCenter) {
  34117. // skip this row
  34118. i += 4 * width;
  34119. } else {
  34120. for (var col = 0; col < width; col++) {
  34121. // Decode picked layer from color
  34122. var pickedLayerIndex = pickedColors[i + 3] - 1;
  34123. if (pickedLayerIndex >= 0) {
  34124. var dx = col + x - deviceX;
  34125. var d2 = dx * dx + dy2;
  34126. if (d2 <= minSquareDistanceToCenter) {
  34127. minSquareDistanceToCenter = d2;
  34128. closestPixelIndex = i;
  34129. }
  34130. }
  34131. i += 4;
  34132. }
  34133. }
  34134. }
  34135. if (closestPixelIndex >= 0) {
  34136. // Decode picked object index from color
  34137. var _pickedLayerIndex = pickedColors[closestPixelIndex + 3] - 1;
  34138. var pickedColor = pickedColors.slice(closestPixelIndex, closestPixelIndex + 4);
  34139. var pickedLayer = layers[_pickedLayerIndex];
  34140. if (pickedLayer) {
  34141. var pickedObjectIndex = pickedLayer.decodePickingColor(pickedColor);
  34142. return { pickedColor: pickedColor, pickedLayer: pickedLayer, pickedObjectIndex: pickedObjectIndex };
  34143. }
  34144. _log2.default.error('Picked non-existent layer. Is picking buffer corrupt?');
  34145. }
  34146. return NO_PICKED_OBJECT;
  34147. }
  34148. /* eslint-enable max-depth, max-statements */
  34149. /**
  34150. * Examines a picking buffer for unique colors
  34151. * Returns array of unique objects in shape `{x, y, pickedColor, pickedLayer, pickedObjectIndex}`
  34152. */
  34153. function getUniquesFromPickingBuffer(gl, _ref8) {
  34154. var pickedColors = _ref8.pickedColors,
  34155. layers = _ref8.layers;
  34156. var uniqueColors = new Map();
  34157. // Traverse all pixels in picking results and get unique colors
  34158. if (pickedColors) {
  34159. for (var i = 0; i < pickedColors.length; i += 4) {
  34160. // Decode picked layer from color
  34161. var pickedLayerIndex = pickedColors[i + 3] - 1;
  34162. if (pickedLayerIndex >= 0) {
  34163. var pickedColor = pickedColors.slice(i, i + 4);
  34164. var colorKey = pickedColor.join(',');
  34165. // eslint-disable-next-line
  34166. if (!uniqueColors.has(colorKey)) {
  34167. var pickedLayer = layers[pickedLayerIndex];
  34168. // eslint-disable-next-line
  34169. if (pickedLayer) {
  34170. uniqueColors.set(colorKey, {
  34171. pickedColor: pickedColor,
  34172. pickedLayer: pickedLayer,
  34173. pickedObjectIndex: pickedLayer.decodePickingColor(pickedColor)
  34174. });
  34175. } else {
  34176. _log2.default.error('Picked non-existent layer. Is picking buffer corrupt?');
  34177. }
  34178. }
  34179. }
  34180. }
  34181. }
  34182. return Array.from(uniqueColors.values());
  34183. }
  34184. // Walk up the layer composite chain to populate the info object
  34185. function getLayerPickingInfo(_ref9) {
  34186. var layer = _ref9.layer,
  34187. info = _ref9.info,
  34188. mode = _ref9.mode;
  34189. while (layer && info) {
  34190. // For a composite layer, sourceLayer will point to the sublayer
  34191. // where the event originates from.
  34192. // It provides additional context for the composite layer's
  34193. // getPickingInfo() method to populate the info object
  34194. var sourceLayer = info.layer || layer;
  34195. info.layer = layer;
  34196. // layer.pickLayer() function requires a non-null ```layer.state```
  34197. // object to funtion properly. So the layer refereced here
  34198. // must be the "current" layer, not an "out-dated" / "invalidated" layer
  34199. info = layer.pickLayer({ info: info, mode: mode, sourceLayer: sourceLayer });
  34200. layer = layer.parentLayer;
  34201. }
  34202. return info;
  34203. }
  34204. /***/ }),
  34205. /* 340 */
  34206. /***/ (function(module, exports, __webpack_require__) {
  34207. "use strict";
  34208. Object.defineProperty(exports, "__esModule", {
  34209. value: true
  34210. });
  34211. exports.EMPTY_ARRAY = undefined;
  34212. exports.createProps = createProps;
  34213. var _seerIntegration = __webpack_require__(124);
  34214. var _log = __webpack_require__(17);
  34215. var _log2 = _interopRequireDefault(_log);
  34216. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  34217. var EMPTY_ARRAY = exports.EMPTY_ARRAY = Object.freeze([]);
  34218. // Create a property object
  34219. function createProps() {
  34220. var propObjects = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  34221. var layer = this; // eslint-disable-line
  34222. // Get default prop object (a prototype chain for now)
  34223. var _getDefaultProps = getDefaultProps(layer.constructor),
  34224. defaultProps = _getDefaultProps.defaultProps;
  34225. // Create a new prop object with the default props as prototype
  34226. var newProps = Object.create(defaultProps, {
  34227. _layer: {
  34228. enumerable: false,
  34229. value: layer
  34230. },
  34231. _asyncProps: {
  34232. enumerable: false,
  34233. value: {}
  34234. }
  34235. });
  34236. // "Copy" all sync props
  34237. for (var i = 0; i < arguments.length; ++i) {
  34238. Object.assign(newProps, arguments[i]);
  34239. }
  34240. newProps.data = newProps.data || EMPTY_ARRAY;
  34241. // SEER: Apply any overrides from the seer debug extension if it is active
  34242. (0, _seerIntegration.applyPropOverrides)(newProps);
  34243. // Props must be immutable
  34244. Object.freeze(newProps);
  34245. return newProps;
  34246. }
  34247. // Helper methods
  34248. // Constructors have their super class constructors as prototypes
  34249. function getOwnProperty(object, prop) {
  34250. return Object.prototype.hasOwnProperty.call(object, prop) && object[prop];
  34251. }
  34252. function getLayerName(layerClass) {
  34253. var layerName = getOwnProperty(layerClass, 'layerName');
  34254. if (!layerName) {
  34255. _log2.default.once(0, layerClass.name + '.layerName not specified');
  34256. }
  34257. return layerName || layerClass.name;
  34258. }
  34259. // ALT 1: Layer Prop Object Implementation
  34260. // Create a new Prop object if needed
  34261. function getDefaultProps(layerClass) {
  34262. var props = getOwnProperty(layerClass, '_props');
  34263. if (props) {
  34264. return props;
  34265. }
  34266. var parent = layerClass.prototype;
  34267. if (!parent) {
  34268. return {
  34269. defaultProps: {}
  34270. };
  34271. }
  34272. var parentClass = Object.getPrototypeOf(layerClass);
  34273. var parentProps = parent && getDefaultProps(parentClass) || null;
  34274. // Parse propTypes from Layer.defaultProps
  34275. var defaultProps = getOwnProperty(layerClass, 'defaultProps') || {};
  34276. // Create any necessary property descriptors and create the default prop object
  34277. // Assign merged default props
  34278. var myDefaultProps = Object.create(null);
  34279. Object.assign(myDefaultProps, parentProps && parentProps.defaultProps, defaultProps);
  34280. createPropDescriptors(myDefaultProps, layerClass);
  34281. // Store the props
  34282. layerClass._props = {
  34283. defaultProps: myDefaultProps
  34284. };
  34285. return layerClass._props;
  34286. }
  34287. function createPropDescriptors(props, layerClass) {
  34288. var descriptors = {};
  34289. delete props.id;
  34290. Object.assign(descriptors, {
  34291. id: {
  34292. configurable: false,
  34293. writable: true,
  34294. value: getLayerName(layerClass)
  34295. }
  34296. });
  34297. Object.defineProperties(props, descriptors);
  34298. }
  34299. /***/ }),
  34300. /* 341 */
  34301. /***/ (function(module, exports, __webpack_require__) {
  34302. "use strict";
  34303. Object.defineProperty(exports, "__esModule", {
  34304. value: true
  34305. });
  34306. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  34307. //
  34308. // Permission is hereby granted, free of charge, to any person obtaining a copy
  34309. // of this software and associated documentation files (the "Software"), to deal
  34310. // in the Software without restriction, including without limitation the rights
  34311. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  34312. // copies of the Software, and to permit persons to whom the Software is
  34313. // furnished to do so, subject to the following conditions:
  34314. //
  34315. // The above copyright notice and this permission notice shall be included in
  34316. // all copies or substantial portions of the Software.
  34317. //
  34318. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  34319. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  34320. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  34321. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  34322. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  34323. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  34324. // THE SOFTWARE.
  34325. var _layerManager = __webpack_require__(184);
  34326. var _layerManager2 = _interopRequireDefault(_layerManager);
  34327. var _effectManager = __webpack_require__(181);
  34328. var _effectManager2 = _interopRequireDefault(_effectManager);
  34329. var _effect = __webpack_require__(122);
  34330. var _effect2 = _interopRequireDefault(_effect);
  34331. var _webMercatorViewport = __webpack_require__(86);
  34332. var _webMercatorViewport2 = _interopRequireDefault(_webMercatorViewport);
  34333. var _mjolnir = __webpack_require__(115);
  34334. var _luma = __webpack_require__(12);
  34335. var _propTypes = __webpack_require__(116);
  34336. var _propTypes2 = _interopRequireDefault(_propTypes);
  34337. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  34338. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  34339. /* global document */
  34340. function noop() {}
  34341. var propTypes = {
  34342. id: _propTypes2.default.string,
  34343. width: _propTypes2.default.number.isRequired,
  34344. height: _propTypes2.default.number.isRequired,
  34345. layers: _propTypes2.default.array, // Array can contain falsy values
  34346. viewports: _propTypes2.default.array, // Array can contain falsy values
  34347. effects: _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(_effect2.default)),
  34348. layerFilter: _propTypes2.default.func,
  34349. glOptions: _propTypes2.default.object,
  34350. gl: _propTypes2.default.object,
  34351. pickingRadius: _propTypes2.default.number,
  34352. onWebGLInitialized: _propTypes2.default.func,
  34353. onBeforeRender: _propTypes2.default.func,
  34354. onAfterRender: _propTypes2.default.func,
  34355. onLayerClick: _propTypes2.default.func,
  34356. onLayerHover: _propTypes2.default.func,
  34357. useDevicePixels: _propTypes2.default.bool,
  34358. // Debug settings
  34359. debug: _propTypes2.default.bool,
  34360. drawPickingColors: _propTypes2.default.bool
  34361. };
  34362. var defaultProps = {
  34363. id: 'deckgl-overlay',
  34364. pickingRadius: 0,
  34365. layerFilter: null,
  34366. glOptions: {},
  34367. gl: null,
  34368. layers: [],
  34369. effects: [],
  34370. onWebGLInitialized: noop,
  34371. onBeforeRender: noop,
  34372. onAfterRender: noop,
  34373. onLayerClick: null,
  34374. onLayerHover: null,
  34375. useDevicePixels: true,
  34376. debug: false,
  34377. drawPickingColors: false
  34378. };
  34379. // TODO - should this class be joined with `LayerManager`?
  34380. var DeckGLJS = function () {
  34381. function DeckGLJS(props) {
  34382. var _this = this;
  34383. _classCallCheck(this, DeckGLJS);
  34384. props = Object.assign({}, defaultProps, props);
  34385. this.state = {};
  34386. this.needsRedraw = true;
  34387. this.layerManager = null;
  34388. this.effectManager = null;
  34389. this.viewports = [];
  34390. // Bind methods
  34391. this._onRendererInitialized = this._onRendererInitialized.bind(this);
  34392. this._onRenderFrame = this._onRenderFrame.bind(this);
  34393. this.canvas = this._createCanvas(props);
  34394. var _props = props,
  34395. width = _props.width,
  34396. height = _props.height,
  34397. gl = _props.gl,
  34398. glOptions = _props.glOptions,
  34399. debug = _props.debug,
  34400. //iclient
  34401. isGeographicCoordinateSystem =_props.isGeographicCoordinateSystem,
  34402. useDevicePixels = _props.useDevicePixels;
  34403. this.animationLoop = new _luma.AnimationLoop({
  34404. width: width,
  34405. height: height,
  34406. useDevicePixels: useDevicePixels,
  34407. //iclient
  34408. isGeographicCoordinateSystem : isGeographicCoordinateSystem,
  34409. onCreateContext: function onCreateContext(opts) {
  34410. return gl || (0, _luma.createGLContext)(Object.assign({}, glOptions, { canvas: _this.canvas, debug: debug }));
  34411. },
  34412. onInitialize: this._onRendererInitialized,
  34413. onRender: this._onRenderFrame,
  34414. onBeforeRender: props.onBeforeRender,
  34415. onAfterRender: props.onAfterRender
  34416. });
  34417. this.animationLoop.start();
  34418. this.setProps(props);
  34419. }
  34420. _createClass(DeckGLJS, [{
  34421. key: 'setProps',
  34422. value: function setProps(props) {
  34423. props = Object.assign({}, this.props, props);
  34424. this.props = props;
  34425. if (!this.layerManager) {
  34426. return;
  34427. }
  34428. var _props2 = props,
  34429. layers = _props2.layers,
  34430. pickingRadius = _props2.pickingRadius,
  34431. onLayerClick = _props2.onLayerClick,
  34432. onLayerHover = _props2.onLayerHover,
  34433. useDevicePixels = _props2.useDevicePixels,
  34434. drawPickingColors = _props2.drawPickingColors,
  34435. layerFilter = _props2.layerFilter;
  34436. // Update viewports (creating one if not supplied)
  34437. var viewports = props.viewports || props.viewport;
  34438. if (!viewports) {
  34439. var _props3 = props,
  34440. width = _props3.width,
  34441. height = _props3.height,
  34442. latitude = _props3.latitude,
  34443. longitude = _props3.longitude,
  34444. zoom = _props3.zoom,
  34445. pitch = _props3.pitch,
  34446. bearing = _props3.bearing;
  34447. viewports = [new _webMercatorViewport2.default({ width: width, height: height, latitude: latitude, longitude: longitude, zoom: zoom, pitch: pitch, bearing: bearing ,isGeographicCoordinateSystem:props.isGeographicCoordinateSystem})];
  34448. }
  34449. // If more parameters need to be updated on layerManager add them to this method.
  34450. this.layerManager.setParameters({
  34451. layers: layers,
  34452. viewports: viewports,
  34453. useDevicePixels: useDevicePixels,
  34454. drawPickingColors: drawPickingColors,
  34455. layerFilter: layerFilter,
  34456. pickingRadius: pickingRadius,
  34457. onLayerClick: onLayerClick,
  34458. onLayerHover: onLayerHover
  34459. });
  34460. // TODO - unify setParameters/setOptions/setProps etc naming.
  34461. this.animationLoop.setViewParameters({ useDevicePixels: useDevicePixels });
  34462. }
  34463. }, {
  34464. key: 'finalize',
  34465. value: function finalize() {
  34466. this.animationLoop.stop();
  34467. this.animationLoop = null;
  34468. if (this.layerManager) {
  34469. this.layerManager.finalize();
  34470. this.layerManager = null;
  34471. }
  34472. }
  34473. // Public API
  34474. }, {
  34475. key: 'pickObject',
  34476. value: function pickObject(_ref) {
  34477. var x = _ref.x,
  34478. y = _ref.y,
  34479. _ref$radius = _ref.radius,
  34480. radius = _ref$radius === undefined ? 0 : _ref$radius,
  34481. _ref$layerIds = _ref.layerIds,
  34482. layerIds = _ref$layerIds === undefined ? null : _ref$layerIds;
  34483. var selectedInfos = this.layerManager.pickObject({ x: x, y: y, radius: radius, layerIds: layerIds, mode: 'query' });
  34484. return selectedInfos.length ? selectedInfos[0] : null;
  34485. }
  34486. }, {
  34487. key: 'pickObjects',
  34488. value: function pickObjects(_ref2) {
  34489. var x = _ref2.x,
  34490. y = _ref2.y,
  34491. _ref2$width = _ref2.width,
  34492. width = _ref2$width === undefined ? 1 : _ref2$width,
  34493. _ref2$height = _ref2.height,
  34494. height = _ref2$height === undefined ? 1 : _ref2$height,
  34495. _ref2$layerIds = _ref2.layerIds,
  34496. layerIds = _ref2$layerIds === undefined ? null : _ref2$layerIds;
  34497. return this.layerManager.pickObjects({ x: x, y: y, width: width, height: height, layerIds: layerIds });
  34498. }
  34499. }, {
  34500. key: 'getViewports',
  34501. value: function getViewports() {
  34502. return this.layerManager ? this.layerManager.getViewports() : [];
  34503. }
  34504. // Private Methods
  34505. }, {
  34506. key: '_createCanvas',
  34507. value: function _createCanvas(props) {
  34508. if (props.canvas) {
  34509. return props.canvas;
  34510. }
  34511. var id = props.id,
  34512. width = props.width,
  34513. height = props.height,
  34514. style = props.style;
  34515. var canvas = document.createElement('canvas');
  34516. canvas.id = id;
  34517. canvas.width = width;
  34518. canvas.height = height;
  34519. canvas.style = style;
  34520. var parent = props.parent || document.body;
  34521. parent.appendChild(canvas);
  34522. return canvas;
  34523. }
  34524. // Callbacks
  34525. }, {
  34526. key: '_onRendererInitialized',
  34527. value: function _onRendererInitialized(_ref3) {
  34528. var gl = _ref3.gl,
  34529. canvas = _ref3.canvas;
  34530. (0, _luma.setParameters)(gl, {
  34531. blend: true,
  34532. blendFunc: [_luma.GL.SRC_ALPHA, _luma.GL.ONE_MINUS_SRC_ALPHA, _luma.GL.ONE, _luma.GL.ONE_MINUS_SRC_ALPHA],
  34533. polygonOffsetFill: true,
  34534. depthTest: true,
  34535. depthFunc: _luma.GL.LEQUAL
  34536. });
  34537. this.props.onWebGLInitialized(gl);
  34538. // Note: avoid React setState due GL animation loop / setState timing issue
  34539. this.layerManager = new _layerManager2.default(gl, {
  34540. eventManager: new _mjolnir.EventManager(canvas),
  34541. isGeographicCoordinateSystem:_ref3.isGeographicCoordinateSystem
  34542. });
  34543. this.effectManager = new _effectManager2.default({ gl: gl, layerManager: this.layerManager });
  34544. var _iteratorNormalCompletion = true;
  34545. var _didIteratorError = false;
  34546. var _iteratorError = undefined;
  34547. try {
  34548. for (var _iterator = this.props.effects[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  34549. var effect = _step.value;
  34550. this.effectManager.addEffect(effect);
  34551. }
  34552. } catch (err) {
  34553. _didIteratorError = true;
  34554. _iteratorError = err;
  34555. } finally {
  34556. try {
  34557. if (!_iteratorNormalCompletion && _iterator.return) {
  34558. _iterator.return();
  34559. }
  34560. } finally {
  34561. if (_didIteratorError) {
  34562. throw _iteratorError;
  34563. }
  34564. }
  34565. }
  34566. this.setProps(this.props);
  34567. }
  34568. }, {
  34569. key: '_onRenderFrame',
  34570. value: function _onRenderFrame(_ref4) {
  34571. var gl = _ref4.gl;
  34572. var redrawReason = this.layerManager.needsRedraw({ clearRedrawFlags: true });
  34573. if (!redrawReason) {
  34574. return;
  34575. }
  34576. this.props.onBeforeRender({ gl: gl }); // TODO - should be called by AnimationLoop
  34577. this.layerManager.drawLayers({
  34578. pass: 'screen',
  34579. redrawReason: redrawReason,
  34580. // Helps debug layer picking, especially in framebuffer powered layers
  34581. drawPickingColors: this.props.drawPickingColors
  34582. });
  34583. this.props.onAfterRender({ gl: gl }); // TODO - should be called by AnimationLoop
  34584. }
  34585. }]);
  34586. return DeckGLJS;
  34587. }();
  34588. exports.default = DeckGLJS;
  34589. DeckGLJS.propTypes = propTypes;
  34590. DeckGLJS.defaultProps = defaultProps;
  34591. /***/ }),
  34592. /* 342 */
  34593. /***/ (function(module, exports, __webpack_require__) {
  34594. "use strict";
  34595. Object.defineProperty(exports, "__esModule", {
  34596. value: true
  34597. });
  34598. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  34599. //
  34600. // Permission is hereby granted, free of charge, to any person obtaining a copy
  34601. // of this software and associated documentation files (the "Software"), to deal
  34602. // in the Software without restriction, including without limitation the rights
  34603. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  34604. // copies of the Software, and to permit persons to whom the Software is
  34605. // furnished to do so, subject to the following conditions:
  34606. //
  34607. // The above copyright notice and this permission notice shall be included in
  34608. // all copies or substantial portions of the Software.
  34609. //
  34610. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  34611. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  34612. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  34613. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  34614. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  34615. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  34616. // THE SOFTWARE.
  34617. // lighting
  34618. exports.default = "#define NUM_OF_LIGHTS 2\n\n// TODO these should be using lighting_ prefix\nuniform vec3 lightsPosition[16];\nuniform vec2 lightsStrength[16];\nuniform float ambientRatio;\nuniform float diffuseRatio;\nuniform float specularRatio;\n\nfloat lighting_getLightWeight(vec3 position_worldspace_vec3, vec3 normals_worldspace) {\n float lightWeight = 0.0;\n\n vec3 normals_worldspace_vec3 = normals_worldspace.xyz;\n\n vec3 camera_pos_worldspace = project_uCameraPosition;\n vec3 view_direction = normalize(camera_pos_worldspace - position_worldspace_vec3);\n\n for (int i = 0; i < NUM_OF_LIGHTS; i++) {\n vec3 light_position_worldspace = project_position(lightsPosition[i]);\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace_vec3);\n\n vec3 halfway_direction = normalize(light_direction + view_direction);\n float lambertian = dot(light_direction, normals_worldspace_vec3);\n float specular = 0.0;\n if (lambertian > 0.0) {\n float specular_angle = max(dot(normals_worldspace_vec3, halfway_direction), 0.0);\n specular = pow(specular_angle, 32.0);\n }\n lambertian = max(lambertian, 0.0);\n lightWeight += (ambientRatio + lambertian * diffuseRatio + specular * specularRatio) *\n lightsStrength[i].x;\n\n }\n\n return lightWeight;\n}\n\n// DEPRECATED - Backwards compatibility\n\nfloat getLightWeight(vec3 position_worldspace_vec3, vec3 normals_worldspace) {\n return lighting_getLightWeight(position_worldspace_vec3, normals_worldspace);\n}\n";
  34619. /***/ }),
  34620. /* 343 */
  34621. /***/ (function(module, exports, __webpack_require__) {
  34622. "use strict";
  34623. Object.defineProperty(exports, "__esModule", {
  34624. value: true
  34625. });
  34626. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  34627. //
  34628. // Permission is hereby granted, free of charge, to any person obtaining a copy
  34629. // of this software and associated documentation files (the "Software"), to deal
  34630. // in the Software without restriction, including without limitation the rights
  34631. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  34632. // copies of the Software, and to permit persons to whom the Software is
  34633. // furnished to do so, subject to the following conditions:
  34634. //
  34635. // The above copyright notice and this permission notice shall be included in
  34636. // all copies or substantial portions of the Software.
  34637. //
  34638. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  34639. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  34640. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  34641. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  34642. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  34643. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  34644. // THE SOFTWARE.
  34645. exports.default = "\nconst vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);\n\nuniform vec2 project64_uScale;\nuniform vec2 project_uViewProjectionMatrixFP64[16];\n\n// longitude: lnglat_fp64.xy; latitude: lnglat_fp64.zw\nvoid mercatorProject_fp64(vec4 lnglat_fp64, out vec2 out_val[2]) {\n\n#if defined(NVIDIA_FP64_WORKAROUND)\n out_val[0] = sum_fp64(radians_fp64(lnglat_fp64.xy), PI_FP64 * ONE);\n#else\n out_val[0] = sum_fp64(radians_fp64(lnglat_fp64.xy), PI_FP64);\n#endif\n out_val[1] = sub_fp64(PI_FP64,\n log_fp64(tan_fp64(sum_fp64(PI_4_FP64, radians_fp64(lnglat_fp64.zw) / 2.0))));\n return;\n}\n\nvoid project_position_fp64(vec4 position_fp64, out vec2 out_val[2]) {\n vec2 pos_fp64[2];\n mercatorProject_fp64(position_fp64, pos_fp64);\n vec2 x_fp64 = mul_fp64(pos_fp64[0], project64_uScale);\n vec2 y_fp64 = mul_fp64(pos_fp64[1], project64_uScale);\n out_val[0] = mul_fp64(x_fp64, WORLD_SCALE_FP64);\n out_val[1] = mul_fp64(y_fp64, WORLD_SCALE_FP64);\n\n return;\n}\n\nvec4 project_to_clipspace_fp64(vec2 vertex_pos_modelspace[4]) {\n vec2 vertex_pos_clipspace[4];\n mat4_vec4_mul_fp64(project_uViewProjectionMatrixFP64, vertex_pos_modelspace,\n vertex_pos_clipspace);\n return vec4(\n vertex_pos_clipspace[0].x,\n vertex_pos_clipspace[1].x,\n vertex_pos_clipspace[2].x,\n vertex_pos_clipspace[3].x\n );\n}\n";
  34646. /***/ }),
  34647. /* 344 */
  34648. /***/ (function(module, exports, __webpack_require__) {
  34649. "use strict";
  34650. Object.defineProperty(exports, "__esModule", {
  34651. value: true
  34652. });
  34653. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  34654. //
  34655. // Permission is hereby granted, free of charge, to any person obtaining a copy
  34656. // of this software and associated documentation files (the "Software"), to deal
  34657. // in the Software without restriction, including without limitation the rights
  34658. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  34659. // copies of the Software, and to permit persons to whom the Software is
  34660. // furnished to do so, subject to the following conditions:
  34661. //
  34662. // The above copyright notice and this permission notice shall be included in
  34663. // all copies or substantial portions of the Software.
  34664. //
  34665. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  34666. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  34667. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  34668. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  34669. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  34670. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  34671. // THE SOFTWARE.
  34672. exports.default = "// EXTERNAL CONSTANTS: these must match JavaScript constants in \"src/core/lib/constants.js\"\nconst float COORDINATE_SYSTEM_IDENTITY = 0.;\nconst float COORDINATE_SYSTEM_LNG_LAT = 1.;\nconst float COORDINATE_SYSTEM_METER_OFFSETS = 2.;\nconst float COORDINATE_SYSTEM_LNGLAT_OFFSETS = 3.;\n\nuniform float project_uCoordinateSystem;\nuniform float project_uScale;\nuniform vec3 project_uPixelsPerMeter;\nuniform vec3 project_uPixelsPerDegree;\nuniform vec3 project_uPixelsPerUnit;\nuniform vec3 project_uPixelsPerUnit2;\nuniform vec4 project_uCenter;\nuniform mat4 project_uModelMatrix;\nuniform mat4 project_uViewProjectionMatrix;\nuniform vec2 project_uViewportSize;\nuniform float project_uDevicePixelRatio;\nuniform float project_uFocalDistance;\nuniform vec3 project_uCameraPosition;\n\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / (PI * 2.0);\n\n//\n// Scaling offsets - scales meters to \"pixels\"\n// Note the scalar version of project_scale is for scaling the z component only\n//\nfloat project_scale(float meters) {\n return meters * project_uPixelsPerMeter.z;\n}\n\nvec2 project_scale(vec2 meters) {\n return meters * project_uPixelsPerMeter.xy;\n}\n\nvec3 project_scale(vec3 meters) {\n return meters * project_uPixelsPerMeter;\n}\n\nvec4 project_scale(vec4 meters) {\n return vec4(meters.xyz * project_uPixelsPerMeter, meters.w);\n}\n\n//\n// Projecting normal - transform deltas from current coordinate system to\n// normals in the worldspace\n//\nvec3 project_normal(vec3 vector) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNG_LAT ||\n project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) {\n return normalize(vector * project_uPixelsPerDegree);\n }\n return normalize(vector * project_uPixelsPerMeter);\n}\n\nvec4 project_offset_(vec4 offset) {\n vec3 pixelsPerUnit = project_uPixelsPerUnit + project_uPixelsPerUnit2 * offset.y;\n return vec4(offset.xyz * pixelsPerUnit, offset.w);\n}\n\n//\n// Projecting positions - non-linear projection: lnglats => unit tile [0-1, 0-1]\n//\nvec2 project_mercator_(vec2 lnglat) {\n return vec2(\n radians(lnglat.x) + PI,\n PI - log(tan_fp32(PI * 0.25 + radians(lnglat.y) * 0.5))\n );\n}\n\n//\n// Projects lnglats (or meter offsets, depending on mode) to pixels\n//\nvec4 project_position(vec4 position) {\n // TODO - why not simply subtract center and fall through?\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNG_LAT) {\n return project_uModelMatrix * vec4(\n project_mercator_(position.xy) * WORLD_SCALE * project_uScale,\n project_scale(position.z),\n position.w\n );\n }\n\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) {\n return project_offset_(position);\n }\n\n // METER_OFFSETS or IDENTITY\n // Apply model matrix\n vec4 position_modelspace = project_uModelMatrix * position;\n return project_offset_(position_modelspace);\n}\n\nvec3 project_position(vec3 position) {\n vec4 projected_position = project_position(vec4(position, 1.0));\n return projected_position.xyz;\n}\n\nvec2 project_position(vec2 position) {\n vec4 projected_position = project_position(vec4(position, 0.0, 1.0));\n return projected_position.xy;\n}\n\n//\n// Projects from \"world\" coordinates to clip space.\n// Uses project_uViewProjectionMatrix\n//\nvec4 project_to_clipspace(vec4 position) {\n if (project_uCoordinateSystem == COORDINATE_SYSTEM_METER_OFFSETS ||\n project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) {\n // Needs to be divided with project_uPixelsPerMeter\n position.w *= project_uPixelsPerMeter.z;\n }\n return project_uViewProjectionMatrix * position + project_uCenter;\n}\n\n// Returns a clip space offset that corresponds to a given number of **non-device** pixels\nvec4 project_pixel_to_clipspace(vec2 pixels) {\n vec2 offset = pixels / project_uViewportSize * project_uDevicePixelRatio;\n return vec4(offset * project_uFocalDistance, 0.0, 0.0);\n}\n";
  34673. /***/ }),
  34674. /* 345 */
  34675. /***/ (function(module, exports, __webpack_require__) {
  34676. "use strict";
  34677. Object.defineProperty(exports, "__esModule", {
  34678. value: true
  34679. });
  34680. exports.getUniformsFromViewport = getUniformsFromViewport;
  34681. var _multiply = __webpack_require__(75);
  34682. var _multiply2 = _interopRequireDefault(_multiply);
  34683. var _transformMat = __webpack_require__(103);
  34684. var _transformMat2 = _interopRequireDefault(_transformMat);
  34685. var _log = __webpack_require__(17);
  34686. var _log2 = _interopRequireDefault(_log);
  34687. var _assert = __webpack_require__(1);
  34688. var _assert2 = _interopRequireDefault(_assert);
  34689. var _constants = __webpack_require__(70);
  34690. var _memoize = __webpack_require__(196);
  34691. var _memoize2 = _interopRequireDefault(_memoize);
  34692. var _viewportMercatorProject = __webpack_require__(79);
  34693. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  34694. // To quickly set a vector to zero
  34695. var ZERO_VECTOR = [0, 0, 0, 0];
  34696. // 4x4 matrix that drops 4th component of vector
  34697. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  34698. //
  34699. // Permission is hereby granted, free of charge, to any person obtaining a copy
  34700. // of this software and associated documentation files (the "Software"), to deal
  34701. // in the Software without restriction, including without limitation the rights
  34702. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  34703. // copies of the Software, and to permit persons to whom the Software is
  34704. // furnished to do so, subject to the following conditions:
  34705. //
  34706. // The above copyright notice and this permission notice shall be included in
  34707. // all copies or substantial portions of the Software.
  34708. //
  34709. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  34710. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  34711. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  34712. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  34713. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  34714. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  34715. // THE SOFTWARE.
  34716. /* global window */
  34717. var VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];
  34718. var IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
  34719. var DEFAULT_PIXELS_PER_UNIT2 = [0, 0, 0];
  34720. var DEFAULT_COORDINATE_ORIGIN = [0, 0, 0];
  34721. var getMemoizedViewportUniforms = (0, _memoize2.default)(calculateViewportUniforms);
  34722. // The code that utilizes Matrix4 does the same calculation as their mat4 counterparts,
  34723. // has lower performance but provides error checking.
  34724. // Uncomment when debugging
  34725. function calculateMatrixAndOffset(_ref) {
  34726. var viewport = _ref.viewport,
  34727. coordinateSystem = _ref.coordinateSystem,
  34728. coordinateOrigin = _ref.coordinateOrigin,
  34729. coordinateZoom = _ref.coordinateZoom;
  34730. var viewMatrixUncentered = viewport.viewMatrixUncentered;
  34731. var viewMatrix = viewport.viewMatrix;
  34732. var projectionMatrix = viewport.projectionMatrix;
  34733. var viewProjectionMatrix = viewport.viewProjectionMatrix;
  34734. var projectionCenter = void 0;
  34735. switch (coordinateSystem) {
  34736. case _constants.COORDINATE_SYSTEM.IDENTITY:
  34737. case _constants.COORDINATE_SYSTEM.LNGLAT:
  34738. projectionCenter = ZERO_VECTOR;
  34739. break;
  34740. // TODO: make lighting work for meter offset mode
  34741. case _constants.COORDINATE_SYSTEM.LNGLAT_OFFSETS:
  34742. case _constants.COORDINATE_SYSTEM.METER_OFFSETS:
  34743. // Calculate transformed projectionCenter (using 64 bit precision JS)
  34744. // This is the key to offset mode precision
  34745. // (avoids doing this addition in 32 bit precision in GLSL)
  34746. var positionPixels = (0, _viewportMercatorProject.lngLatToWorld)(coordinateOrigin, Math.pow(2, coordinateZoom));
  34747. // projectionCenter = new Matrix4(viewProjectionMatrix)
  34748. // .transformVector([positionPixels[0], positionPixels[1], 0.0, 1.0]);
  34749. projectionCenter = (0, _transformMat2.default)([], [positionPixels[0], positionPixels[1], 0.0, 1.0], viewProjectionMatrix);
  34750. // Always apply uncentered projection matrix if available (shader adds center)
  34751. viewMatrix = viewMatrixUncentered || viewMatrix;
  34752. // Zero out 4th coordinate ("after" model matrix) - avoids further translations
  34753. // viewMatrix = new Matrix4(viewMatrixUncentered || viewMatrix)
  34754. // .multiplyRight(VECTOR_TO_POINT_MATRIX);
  34755. viewProjectionMatrix = (0, _multiply2.default)([], projectionMatrix, viewMatrix);
  34756. viewProjectionMatrix = (0, _multiply2.default)([], viewProjectionMatrix, VECTOR_TO_POINT_MATRIX);
  34757. break;
  34758. default:
  34759. throw new Error('Unknown projection mode');
  34760. }
  34761. return {
  34762. viewMatrix: viewMatrix,
  34763. viewProjectionMatrix: viewProjectionMatrix,
  34764. projectionCenter: projectionCenter,
  34765. cameraPos: viewport.cameraPosition
  34766. };
  34767. }
  34768. /**
  34769. * Returns uniforms for shaders based on current projection
  34770. * includes: projection matrix suitable for shaders
  34771. *
  34772. * TODO - Ensure this works with any viewport, not just WebMercatorViewports
  34773. *
  34774. * @param {WebMercatorViewport} viewport -
  34775. * @return {Float32Array} - 4x4 projection matrix that can be used in shaders
  34776. */
  34777. function getUniformsFromViewport() {
  34778. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  34779. viewport = _ref2.viewport,
  34780. _ref2$modelMatrix = _ref2.modelMatrix,
  34781. modelMatrix = _ref2$modelMatrix === undefined ? null : _ref2$modelMatrix,
  34782. _ref2$coordinateSyste = _ref2.coordinateSystem,
  34783. coordinateSystem = _ref2$coordinateSyste === undefined ? _constants.COORDINATE_SYSTEM.LNGLAT : _ref2$coordinateSyste,
  34784. _ref2$coordinateOrigi = _ref2.coordinateOrigin,
  34785. coordinateOrigin = _ref2$coordinateOrigi === undefined ? DEFAULT_COORDINATE_ORIGIN : _ref2$coordinateOrigi,
  34786. projectionMode = _ref2.projectionMode,
  34787. positionOrigin = _ref2.positionOrigin;
  34788. (0, _assert2.default)(viewport);
  34789. if (projectionMode !== undefined) {
  34790. _log2.default.removed('projectionMode', 'coordinateSystem');
  34791. }
  34792. if (positionOrigin !== undefined) {
  34793. _log2.default.removed('positionOrigin', 'coordinateOrigin');
  34794. }
  34795. return Object.assign({
  34796. project_uModelMatrix: modelMatrix || IDENTITY_MATRIX
  34797. }, getMemoizedViewportUniforms({ viewport: viewport, coordinateSystem: coordinateSystem, coordinateOrigin: coordinateOrigin }));
  34798. }
  34799. function calculateViewportUniforms(_ref3) {
  34800. var viewport = _ref3.viewport,
  34801. coordinateSystem = _ref3.coordinateSystem,
  34802. coordinateOrigin = _ref3.coordinateOrigin;
  34803. var coordinateZoom = viewport.zoom;
  34804. (0, _assert2.default)(coordinateZoom >= 0);
  34805. var _calculateMatrixAndOf = calculateMatrixAndOffset({
  34806. coordinateSystem: coordinateSystem,
  34807. coordinateOrigin: coordinateOrigin,
  34808. coordinateZoom: coordinateZoom,
  34809. viewport: viewport
  34810. }),
  34811. projectionCenter = _calculateMatrixAndOf.projectionCenter,
  34812. viewProjectionMatrix = _calculateMatrixAndOf.viewProjectionMatrix,
  34813. cameraPos = _calculateMatrixAndOf.cameraPos;
  34814. (0, _assert2.default)(viewProjectionMatrix, 'Viewport missing modelViewProjectionMatrix');
  34815. // Calculate projection pixels per unit
  34816. var distanceScales = viewport.getDistanceScales();
  34817. // TODO - does this depend on useDevicePixels?
  34818. var devicePixelRatio = typeof window !== 'undefined' && window.devicePixelRatio || 1;
  34819. var viewportSize = [viewport.width * devicePixelRatio, viewport.height * devicePixelRatio];
  34820. var uniforms = {
  34821. // Projection mode values
  34822. project_uCoordinateSystem: coordinateSystem,
  34823. project_uCenter: projectionCenter,
  34824. // Screen size
  34825. project_uViewportSize: viewportSize,
  34826. project_uDevicePixelRatio: devicePixelRatio,
  34827. // Distance at which screen pixels are projected
  34828. project_uFocalDistance: viewport.focalDistance || 1,
  34829. project_uPixelsPerMeter: distanceScales.pixelsPerMeter,
  34830. project_uPixelsPerDegree: distanceScales.pixelsPerDegree,
  34831. project_uPixelsPerUnit: distanceScales.pixelsPerMeter,
  34832. project_uPixelsPerUnit2: DEFAULT_PIXELS_PER_UNIT2,
  34833. project_uScale: viewport.scale, // This is the mercator scale (2 ** zoom)
  34834. project_uViewProjectionMatrix: viewProjectionMatrix,
  34835. // This is for lighting calculations
  34836. project_uCameraPosition: cameraPos
  34837. };
  34838. if (coordinateSystem === _constants.COORDINATE_SYSTEM.METER_OFFSETS) {
  34839. var distanceScalesAtOrigin = viewport.getDistanceScales(coordinateOrigin);
  34840. uniforms.project_uPixelsPerUnit = distanceScalesAtOrigin.pixelsPerMeter;
  34841. uniforms.project_uPixelsPerUnit2 = distanceScalesAtOrigin.pixelsPerMeter2;
  34842. }
  34843. if (coordinateSystem === _constants.COORDINATE_SYSTEM.LNGLAT_OFFSETS) {
  34844. var _distanceScalesAtOrigin = viewport.getDistanceScales(coordinateOrigin);
  34845. uniforms.project_uPixelsPerUnit = _distanceScalesAtOrigin.pixelsPerDegree;
  34846. uniforms.project_uPixelsPerUnit2 = _distanceScalesAtOrigin.pixelsPerDegree2;
  34847. }
  34848. return uniforms;
  34849. }
  34850. /***/ }),
  34851. /* 346 */
  34852. /***/ (function(module, exports, __webpack_require__) {
  34853. "use strict";
  34854. Object.defineProperty(exports, "__esModule", {
  34855. value: true
  34856. });
  34857. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  34858. var _transitionInterpolator = __webpack_require__(193);
  34859. var _transitionInterpolator2 = _interopRequireDefault(_transitionInterpolator);
  34860. var _transitionUtils = __webpack_require__(84);
  34861. var _viewportMercatorProject = __webpack_require__(79);
  34862. var _assert = __webpack_require__(1);
  34863. var _assert2 = _interopRequireDefault(_assert);
  34864. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  34865. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  34866. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  34867. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  34868. var VIEWPORT_TRANSITION_PROPS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];
  34869. var REQUIRED_PROPS = ['latitude', 'longitude', 'zoom', 'width', 'height'];
  34870. var LINEARLY_INTERPOLATED_PROPS = ['bearing', 'pitch'];
  34871. /**
  34872. * This class adapts mapbox-gl-js Map#flyTo animation so it can be used in
  34873. * react/redux architecture.
  34874. * mapbox-gl-js flyTo : https://www.mapbox.com/mapbox-gl-js/api/#map#flyto.
  34875. * It implements “Smooth and efficient zooming and panning.” algorithm by
  34876. * "Jarke J. van Wijk and Wim A.A. Nuij"
  34877. */
  34878. var ViewportFlyToInterpolator = function (_TransitionInterpolat) {
  34879. _inherits(ViewportFlyToInterpolator, _TransitionInterpolat);
  34880. function ViewportFlyToInterpolator() {
  34881. _classCallCheck(this, ViewportFlyToInterpolator);
  34882. var _this = _possibleConstructorReturn(this, (ViewportFlyToInterpolator.__proto__ || Object.getPrototypeOf(ViewportFlyToInterpolator)).call(this));
  34883. _this.propNames = VIEWPORT_TRANSITION_PROPS;
  34884. return _this;
  34885. }
  34886. _createClass(ViewportFlyToInterpolator, [{
  34887. key: 'initializeProps',
  34888. value: function initializeProps(startProps, endProps) {
  34889. var startViewportProps = {};
  34890. var endViewportProps = {};
  34891. // Check minimum required props
  34892. var _iteratorNormalCompletion = true;
  34893. var _didIteratorError = false;
  34894. var _iteratorError = undefined;
  34895. try {
  34896. for (var _iterator = REQUIRED_PROPS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  34897. var key = _step.value;
  34898. var startValue = startProps[key];
  34899. var endValue = endProps[key];
  34900. (0, _assert2.default)((0, _transitionUtils.isValid)(startValue) && (0, _transitionUtils.isValid)(endValue), key + ' must be supplied for transition');
  34901. startViewportProps[key] = startValue;
  34902. endViewportProps[key] = (0, _transitionUtils.getEndValueByShortestPath)(key, startValue, endValue);
  34903. }
  34904. } catch (err) {
  34905. _didIteratorError = true;
  34906. _iteratorError = err;
  34907. } finally {
  34908. try {
  34909. if (!_iteratorNormalCompletion && _iterator.return) {
  34910. _iterator.return();
  34911. }
  34912. } finally {
  34913. if (_didIteratorError) {
  34914. throw _iteratorError;
  34915. }
  34916. }
  34917. }
  34918. var _iteratorNormalCompletion2 = true;
  34919. var _didIteratorError2 = false;
  34920. var _iteratorError2 = undefined;
  34921. try {
  34922. for (var _iterator2 = LINEARLY_INTERPOLATED_PROPS[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  34923. var _key = _step2.value;
  34924. var _startValue = startProps[_key] || 0;
  34925. var _endValue = endProps[_key] || 0;
  34926. startViewportProps[_key] = _startValue;
  34927. endViewportProps[_key] = (0, _transitionUtils.getEndValueByShortestPath)(_key, _startValue, _endValue);
  34928. }
  34929. } catch (err) {
  34930. _didIteratorError2 = true;
  34931. _iteratorError2 = err;
  34932. } finally {
  34933. try {
  34934. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  34935. _iterator2.return();
  34936. }
  34937. } finally {
  34938. if (_didIteratorError2) {
  34939. throw _iteratorError2;
  34940. }
  34941. }
  34942. }
  34943. return {
  34944. start: startViewportProps,
  34945. end: endViewportProps
  34946. };
  34947. }
  34948. }, {
  34949. key: 'interpolateProps',
  34950. value: function interpolateProps(startProps, endProps, t) {
  34951. var viewport = (0, _viewportMercatorProject.flyToViewport)(startProps, endProps, t);
  34952. // Linearly interpolate 'bearing' and 'pitch' if exist.
  34953. var _iteratorNormalCompletion3 = true;
  34954. var _didIteratorError3 = false;
  34955. var _iteratorError3 = undefined;
  34956. try {
  34957. for (var _iterator3 = LINEARLY_INTERPOLATED_PROPS[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  34958. var key = _step3.value;
  34959. viewport[key] = (0, _transitionUtils.lerp)(startProps[key], endProps[key], t);
  34960. }
  34961. } catch (err) {
  34962. _didIteratorError3 = true;
  34963. _iteratorError3 = err;
  34964. } finally {
  34965. try {
  34966. if (!_iteratorNormalCompletion3 && _iterator3.return) {
  34967. _iterator3.return();
  34968. }
  34969. } finally {
  34970. if (_didIteratorError3) {
  34971. throw _iteratorError3;
  34972. }
  34973. }
  34974. }
  34975. return viewport;
  34976. }
  34977. }]);
  34978. return ViewportFlyToInterpolator;
  34979. }(_transitionInterpolator2.default);
  34980. exports.default = ViewportFlyToInterpolator;
  34981. /***/ }),
  34982. /* 347 */
  34983. /***/ (function(module, exports, __webpack_require__) {
  34984. "use strict";
  34985. Object.defineProperty(exports, "__esModule", {
  34986. value: true
  34987. });
  34988. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  34989. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  34990. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  34991. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  34992. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  34993. //
  34994. // Permission is hereby granted, free of charge, to any person obtaining a copy
  34995. // of this software and associated documentation files (the "Software"), to deal
  34996. // in the Software without restriction, including without limitation the rights
  34997. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  34998. // copies of the Software, and to permit persons to whom the Software is
  34999. // furnished to do so, subject to the following conditions:
  35000. //
  35001. // The above copyright notice and this permission notice shall be included in
  35002. // all copies or substantial portions of the Software.
  35003. //
  35004. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35005. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35006. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35007. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35008. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35009. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35010. // THE SOFTWARE.
  35011. // getValue takes an array of points returns a value to sort the bins on.
  35012. // by default it returns the number of points
  35013. // this is where to pass in a function to color the bins by
  35014. // avg/mean/max of specific value of the point
  35015. var defaultGetValue = function defaultGetValue(points) {
  35016. return points.length;
  35017. };
  35018. var BinSorter = function () {
  35019. function BinSorter() {
  35020. var bins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  35021. var getValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultGetValue;
  35022. _classCallCheck(this, BinSorter);
  35023. this.sortedBins = this.getSortedBins(bins, getValue);
  35024. this.maxCount = this.getMaxCount();
  35025. this.binMap = this.getBinMap();
  35026. }
  35027. /**
  35028. * Get an array of object with sorted values and index of bins
  35029. * @param {Array} bins
  35030. * @param {Function} getValue
  35031. * @return {Array} array of values and index lookup
  35032. */
  35033. _createClass(BinSorter, [{
  35034. key: "getSortedBins",
  35035. value: function getSortedBins(bins, getValue) {
  35036. return bins.reduce(function (accu, h, i) {
  35037. var value = getValue(h.points);
  35038. if (value !== null && value !== undefined) {
  35039. // filter bins if value is null or undefined
  35040. accu.push({
  35041. i: Number.isFinite(h.index) ? h.index : i,
  35042. value: value,
  35043. counts: h.points.length
  35044. });
  35045. }
  35046. return accu;
  35047. }, []).sort(function (a, b) {
  35048. return a.value - b.value;
  35049. });
  35050. }
  35051. /**
  35052. * Get range of values of all bins
  35053. * @param {Number[]} range
  35054. * @param {Number} range[0] - lower bound
  35055. * @param {Number} range[1] - upper bound
  35056. * @return {Array} array of new value range
  35057. */
  35058. }, {
  35059. key: "getValueRange",
  35060. value: function getValueRange(_ref) {
  35061. var _ref2 = _slicedToArray(_ref, 2),
  35062. lower = _ref2[0],
  35063. upper = _ref2[1];
  35064. var len = this.sortedBins.length;
  35065. if (!len) {
  35066. return [0, 0];
  35067. }
  35068. var lowerIdx = Math.ceil(lower / 100 * (len - 1));
  35069. var upperIdx = Math.floor(upper / 100 * (len - 1));
  35070. return [this.sortedBins[lowerIdx].value, this.sortedBins[upperIdx].value];
  35071. }
  35072. /**
  35073. * Get ths max count of all bins
  35074. * @return {Number | Boolean} max count
  35075. */
  35076. }, {
  35077. key: "getMaxCount",
  35078. value: function getMaxCount() {
  35079. var maxCount = 0;
  35080. this.sortedBins.forEach(function (x) {
  35081. return maxCount = maxCount > x.counts ? maxCount : x.counts;
  35082. });
  35083. return maxCount;
  35084. }
  35085. /**
  35086. * Get a mapping from cell/hexagon index to sorted bin
  35087. * This is used to retrieve bin value for color calculation
  35088. * @return {Object} bin index to sortedBins
  35089. */
  35090. }, {
  35091. key: "getBinMap",
  35092. value: function getBinMap() {
  35093. return this.sortedBins.reduce(function (mapper, curr) {
  35094. return Object.assign(mapper, _defineProperty({}, curr.i, curr));
  35095. }, {});
  35096. }
  35097. }]);
  35098. return BinSorter;
  35099. }();
  35100. exports.default = BinSorter;
  35101. /***/ }),
  35102. /* 348 */
  35103. /***/ (function(module, exports, __webpack_require__) {
  35104. "use strict";
  35105. Object.defineProperty(exports, "__esModule", {
  35106. value: true
  35107. });
  35108. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35109. //
  35110. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35111. // of this software and associated documentation files (the "Software"), to deal
  35112. // in the Software without restriction, including without limitation the rights
  35113. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35114. // copies of the Software, and to permit persons to whom the Software is
  35115. // furnished to do so, subject to the following conditions:
  35116. //
  35117. // The above copyright notice and this permission notice shall be included in
  35118. // all copies or substantial portions of the Software.
  35119. //
  35120. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35121. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35122. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35123. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35124. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35125. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35126. // THE SOFTWARE.
  35127. var defaultColorRange = exports.defaultColorRange = [[255, 255, 178], [254, 217, 118], [254, 178, 76], [253, 141, 60], [240, 59, 32], [189, 0, 38]];
  35128. /***/ }),
  35129. /* 349 */
  35130. /***/ (function(module, exports, __webpack_require__) {
  35131. "use strict";
  35132. Object.defineProperty(exports, "__esModule", {
  35133. value: true
  35134. });
  35135. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  35136. exports.get = get;
  35137. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35138. //
  35139. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35140. // of this software and associated documentation files (the "Software"), to deal
  35141. // in the Software without restriction, including without limitation the rights
  35142. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35143. // copies of the Software, and to permit persons to whom the Software is
  35144. // furnished to do so, subject to the following conditions:
  35145. //
  35146. // The above copyright notice and this permission notice shall be included in
  35147. // all copies or substantial portions of the Software.
  35148. //
  35149. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35150. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35151. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35152. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35153. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35154. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35155. // THE SOFTWARE.
  35156. /**
  35157. * Access properties of nested containers using dot-path notation
  35158. * - Supports plain objects and arrays, as well as classes with `get` methods
  35159. * such as ES6 Maps, Immutable.js objects etc
  35160. * - Returns undefined if any container is not valid, instead of throwing
  35161. *
  35162. * @param {Object} container - container that supports get
  35163. * @param {String|*} compositeKey - key to access, can be '.'-separated string
  35164. * @return {*} - value in the final key of the nested container
  35165. */
  35166. function get(container, compositeKey) {
  35167. // Split the key into subkeys
  35168. var keyList = getKeys(compositeKey);
  35169. // Recursively get the value of each key;
  35170. var value = container;
  35171. var _iteratorNormalCompletion = true;
  35172. var _didIteratorError = false;
  35173. var _iteratorError = undefined;
  35174. try {
  35175. for (var _iterator = keyList[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  35176. var key = _step.value;
  35177. // If any intermediate subfield is not a container, return undefined
  35178. if (!isObject(value)) {
  35179. return undefined;
  35180. }
  35181. // Get the `getter` for this container
  35182. var getter = getGetter(value);
  35183. // Use the getter to get the value for the key
  35184. value = getter(value, key);
  35185. }
  35186. } catch (err) {
  35187. _didIteratorError = true;
  35188. _iteratorError = err;
  35189. } finally {
  35190. try {
  35191. if (!_iteratorNormalCompletion && _iterator.return) {
  35192. _iterator.return();
  35193. }
  35194. } finally {
  35195. if (_didIteratorError) {
  35196. throw _iteratorError;
  35197. }
  35198. }
  35199. }
  35200. return value;
  35201. }
  35202. /**
  35203. * Checks if argument is an indexable object (not a primitive value, nor null)
  35204. * @param {*} value - JavaScript value to be tested
  35205. * @return {Boolean} - true if argument is a JavaScript object
  35206. */
  35207. function isObject(value) {
  35208. return value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object';
  35209. }
  35210. // Default getter is container indexing
  35211. var squareBracketGetter = function squareBracketGetter(container, key) {
  35212. return container[key];
  35213. };
  35214. var getMethodGetter = function getMethodGetter(obj, key) {
  35215. return obj.get(key);
  35216. };
  35217. // Cache key to key arrays for speed
  35218. var keyMap = {};
  35219. // Looks for a `get` function on the prototype
  35220. // TODO - follow prototype chain?
  35221. // @private
  35222. // @return {Function} - get function: (container, key) => value
  35223. function getGetter(container) {
  35224. // Check if container has a special get method
  35225. var prototype = Object.getPrototypeOf(container);
  35226. return prototype.get ? getMethodGetter : squareBracketGetter;
  35227. }
  35228. // Takes a string of '.' separated keys and returns an array of keys
  35229. // E.g. 'feature.geometry.type' => 'feature', 'geometry', 'type'
  35230. // @private
  35231. function getKeys(compositeKey) {
  35232. if (typeof compositeKey === 'string') {
  35233. // else assume string and split around dots
  35234. var keyList = keyMap[compositeKey];
  35235. if (!keyList) {
  35236. keyList = compositeKey.split('.');
  35237. keyMap[compositeKey] = keyList;
  35238. }
  35239. return keyList;
  35240. }
  35241. // Wrap in array if needed
  35242. return Array.isArray(compositeKey) ? compositeKey : [compositeKey];
  35243. }
  35244. /***/ }),
  35245. /* 350 */
  35246. /***/ (function(module, exports, __webpack_require__) {
  35247. "use strict";
  35248. /* WEBPACK VAR INJECTION */(function(process, global) {
  35249. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  35250. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35251. //
  35252. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35253. // of this software and associated documentation files (the "Software"), to deal
  35254. // in the Software without restriction, including without limitation the rights
  35255. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35256. // copies of the Software, and to permit persons to whom the Software is
  35257. // furnished to do so, subject to the following conditions:
  35258. //
  35259. // The above copyright notice and this permission notice shall be included in
  35260. // all copies or substantial portions of the Software.
  35261. //
  35262. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35263. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35264. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35265. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35266. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35267. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35268. // THE SOFTWARE.
  35269. // Purpose: include this in your module to avoids adding dependencies on
  35270. // micro modules like 'global' and 'is-browser';
  35271. /* global process, window, global, document */
  35272. var isBrowser = (typeof process === 'undefined' ? 'undefined' : _typeof(process)) !== 'object' || String(process) !== '[object process]' || process.browser;
  35273. module.exports = {
  35274. window: typeof window !== 'undefined' ? window : global,
  35275. global: typeof global !== 'undefined' ? global : window,
  35276. document: typeof document !== 'undefined' ? document : {},
  35277. isBrowser: isBrowser
  35278. };
  35279. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26), __webpack_require__(47)))
  35280. /***/ }),
  35281. /* 351 */
  35282. /***/ (function(module, exports, __webpack_require__) {
  35283. "use strict";
  35284. Object.defineProperty(exports, "__esModule", {
  35285. value: true
  35286. });
  35287. exports.inheritsFrom = inheritsFrom;
  35288. // Check if one JavaScript class inherits from another
  35289. function inheritsFrom(Type, ParentType) {
  35290. while (Type) {
  35291. if (Type === ParentType) {
  35292. return true;
  35293. }
  35294. Type = Object.getPrototypeOf(Type);
  35295. }
  35296. return false;
  35297. }
  35298. /***/ }),
  35299. /* 352 */
  35300. /***/ (function(module, exports, __webpack_require__) {
  35301. "use strict";
  35302. Object.defineProperty(exports, "__esModule", {
  35303. value: true
  35304. });
  35305. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  35306. exports.linearScale = linearScale;
  35307. exports.quantizeScale = quantizeScale;
  35308. exports.getQuantizeScale = getQuantizeScale;
  35309. exports.getLinearScale = getLinearScale;
  35310. exports.clamp = clamp;
  35311. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35312. //
  35313. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35314. // of this software and associated documentation files (the "Software"), to deal
  35315. // in the Software without restriction, including without limitation the rights
  35316. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35317. // copies of the Software, and to permit persons to whom the Software is
  35318. // furnished to do so, subject to the following conditions:
  35319. //
  35320. // The above copyright notice and this permission notice shall be included in
  35321. // all copies or substantial portions of the Software.
  35322. //
  35323. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35324. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35325. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35326. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35327. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35328. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35329. // THE SOFTWARE.
  35330. // Linear scale maps continuous domain to continuous range
  35331. function linearScale(domain, range, value) {
  35332. return (value - domain[0]) / (domain[1] - domain[0]) * (range[1] - range[0]) + range[0];
  35333. }
  35334. // Quantize scale is similar to linear scales,
  35335. // except it uses a discrete rather than continuous range
  35336. function quantizeScale(domain, range, value) {
  35337. var step = (domain[1] - domain[0]) / range.length;
  35338. var idx = Math.floor((value - domain[0]) / step);
  35339. var clampIdx = Math.max(Math.min(idx, range.length - 1), 0);
  35340. return range[clampIdx];
  35341. }
  35342. // return a quantize scale function
  35343. function getQuantizeScale(domain, range) {
  35344. return function (value) {
  35345. var step = (domain[1] - domain[0]) / range.length;
  35346. var idx = Math.floor((value - domain[0]) / step);
  35347. var clampIdx = Math.max(Math.min(idx, range.length - 1), 0);
  35348. return range[clampIdx];
  35349. };
  35350. }
  35351. // return a linear scale funciton
  35352. function getLinearScale(domain, range) {
  35353. return function (value) {
  35354. return (value - domain[0]) / (domain[1] - domain[0]) * (range[1] - range[0]) + range[0];
  35355. };
  35356. }
  35357. function clamp(_ref, value) {
  35358. var _ref2 = _slicedToArray(_ref, 2),
  35359. min = _ref2[0],
  35360. max = _ref2[1];
  35361. return Math.min(max, Math.max(min, value));
  35362. }
  35363. /***/ }),
  35364. /* 353 */
  35365. /***/ (function(module, exports, __webpack_require__) {
  35366. "use strict";
  35367. Object.defineProperty(exports, "__esModule", {
  35368. value: true
  35369. });
  35370. var _viewport = __webpack_require__(42);
  35371. var _viewport2 = _interopRequireDefault(_viewport);
  35372. var _math = __webpack_require__(16);
  35373. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  35374. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  35375. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  35376. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35377. //
  35378. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35379. // of this software and associated documentation files (the "Software"), to deal
  35380. // in the Software without restriction, including without limitation the rights
  35381. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35382. // copies of the Software, and to permit persons to whom the Software is
  35383. // furnished to do so, subject to the following conditions:
  35384. //
  35385. // The above copyright notice and this permission notice shall be included in
  35386. // all copies or substantial portions of the Software.
  35387. //
  35388. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35389. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35390. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35391. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35392. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35393. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35394. // THE SOFTWARE.
  35395. var SphericalCoordinates = _math.experimental.SphericalCoordinates;
  35396. function getDirectionFromBearingAndPitch(_ref) {
  35397. var bearing = _ref.bearing,
  35398. pitch = _ref.pitch;
  35399. var spherical = new SphericalCoordinates({ bearing: bearing, pitch: pitch });
  35400. var direction = spherical.toVector3().normalize();
  35401. return direction;
  35402. }
  35403. var FirstPersonViewport = function (_Viewport) {
  35404. _inherits(FirstPersonViewport, _Viewport);
  35405. function FirstPersonViewport() {
  35406. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  35407. _classCallCheck(this, FirstPersonViewport);
  35408. // TODO - push direction handling into Matrix4.lookAt
  35409. var _opts$modelMatrix = opts.modelMatrix,
  35410. modelMatrix = _opts$modelMatrix === undefined ? null : _opts$modelMatrix,
  35411. bearing = opts.bearing,
  35412. _opts$up = opts.up,
  35413. up = _opts$up === undefined ? [0, 0, 1] : _opts$up;
  35414. // Always calculate direction from bearing and pitch
  35415. var dir = getDirectionFromBearingAndPitch({
  35416. bearing: bearing,
  35417. pitch: 89
  35418. });
  35419. // Direction is relative to model coordinates, of course
  35420. var center = modelMatrix ? modelMatrix.transformDirection(dir) : dir;
  35421. // Just the direction. All the positioning is done in viewport.js
  35422. var viewMatrix = new _math.Matrix4().lookAt({ eye: [0, 0, 0], center: center, up: up });
  35423. return _possibleConstructorReturn(this, (FirstPersonViewport.__proto__ || Object.getPrototypeOf(FirstPersonViewport)).call(this, Object.assign({}, opts, {
  35424. zoom: null, // triggers meter level zoom
  35425. viewMatrix: viewMatrix
  35426. })));
  35427. }
  35428. return FirstPersonViewport;
  35429. }(_viewport2.default);
  35430. exports.default = FirstPersonViewport;
  35431. FirstPersonViewport.displayName = 'FirstPersonViewport';
  35432. /***/ }),
  35433. /* 354 */
  35434. /***/ (function(module, exports, __webpack_require__) {
  35435. "use strict";
  35436. Object.defineProperty(exports, "__esModule", {
  35437. value: true
  35438. });
  35439. var _viewport = __webpack_require__(42);
  35440. var _viewport2 = _interopRequireDefault(_viewport);
  35441. var _lookAt = __webpack_require__(102);
  35442. var _lookAt2 = _interopRequireDefault(_lookAt);
  35443. var _ortho = __webpack_require__(234);
  35444. var _ortho2 = _interopRequireDefault(_ortho);
  35445. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  35446. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  35447. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  35448. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35449. //
  35450. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35451. // of this software and associated documentation files (the "Software"), to deal
  35452. // in the Software without restriction, including without limitation the rights
  35453. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35454. // copies of the Software, and to permit persons to whom the Software is
  35455. // furnished to do so, subject to the following conditions:
  35456. //
  35457. // The above copyright notice and this permission notice shall be included in
  35458. // all copies or substantial portions of the Software.
  35459. //
  35460. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35461. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35462. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35463. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35464. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35465. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35466. // THE SOFTWARE.
  35467. var OrthographicViewport = function (_Viewport) {
  35468. _inherits(OrthographicViewport, _Viewport);
  35469. function OrthographicViewport(_ref) {
  35470. var width = _ref.width,
  35471. height = _ref.height,
  35472. _ref$eye = _ref.eye,
  35473. eye = _ref$eye === undefined ? [0, 0, 1] : _ref$eye,
  35474. _ref$lookAt = _ref.lookAt,
  35475. lookAt = _ref$lookAt === undefined ? [0, 0, 0] : _ref$lookAt,
  35476. _ref$up = _ref.up,
  35477. up = _ref$up === undefined ? [0, 1, 0] : _ref$up,
  35478. _ref$near = _ref.near,
  35479. near = _ref$near === undefined ? 1 : _ref$near,
  35480. _ref$far = _ref.far,
  35481. far = _ref$far === undefined ? 100 : _ref$far,
  35482. left = _ref.left,
  35483. top = _ref.top,
  35484. _ref$right = _ref.right,
  35485. right = _ref$right === undefined ? null : _ref$right,
  35486. _ref$bottom = _ref.bottom,
  35487. bottom = _ref$bottom === undefined ? null : _ref$bottom;
  35488. _classCallCheck(this, OrthographicViewport);
  35489. right = Number.isFinite(right) ? right : left + width;
  35490. bottom = Number.isFinite(bottom) ? bottom : top + height;
  35491. return _possibleConstructorReturn(this, (OrthographicViewport.__proto__ || Object.getPrototypeOf(OrthographicViewport)).call(this, {
  35492. viewMatrix: (0, _lookAt2.default)([], eye, lookAt, up),
  35493. projectionMatrix: (0, _ortho2.default)([], left, right, bottom, top, near, far),
  35494. width: width,
  35495. height: height
  35496. }));
  35497. }
  35498. return OrthographicViewport;
  35499. }(_viewport2.default);
  35500. exports.default = OrthographicViewport;
  35501. /***/ }),
  35502. /* 355 */
  35503. /***/ (function(module, exports, __webpack_require__) {
  35504. "use strict";
  35505. Object.defineProperty(exports, "__esModule", {
  35506. value: true
  35507. });
  35508. var _viewport = __webpack_require__(42);
  35509. var _viewport2 = _interopRequireDefault(_viewport);
  35510. var _lookAt = __webpack_require__(102);
  35511. var _lookAt2 = _interopRequireDefault(_lookAt);
  35512. var _perspective = __webpack_require__(76);
  35513. var _perspective2 = _interopRequireDefault(_perspective);
  35514. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  35515. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  35516. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  35517. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35518. //
  35519. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35520. // of this software and associated documentation files (the "Software"), to deal
  35521. // in the Software without restriction, including without limitation the rights
  35522. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35523. // copies of the Software, and to permit persons to whom the Software is
  35524. // furnished to do so, subject to the following conditions:
  35525. //
  35526. // The above copyright notice and this permission notice shall be included in
  35527. // all copies or substantial portions of the Software.
  35528. //
  35529. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35530. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35531. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35532. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35533. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35534. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35535. // THE SOFTWARE.
  35536. var DEGREES_TO_RADIANS = Math.PI / 180;
  35537. var PerspectiveViewport = function (_Viewport) {
  35538. _inherits(PerspectiveViewport, _Viewport);
  35539. function PerspectiveViewport(_ref) {
  35540. var width = _ref.width,
  35541. height = _ref.height,
  35542. eye = _ref.eye,
  35543. _ref$lookAt = _ref.lookAt,
  35544. lookAt = _ref$lookAt === undefined ? [0, 0, 0] : _ref$lookAt,
  35545. _ref$up = _ref.up,
  35546. up = _ref$up === undefined ? [0, 1, 0] : _ref$up,
  35547. _ref$fovy = _ref.fovy,
  35548. fovy = _ref$fovy === undefined ? 75 : _ref$fovy,
  35549. _ref$near = _ref.near,
  35550. near = _ref$near === undefined ? 1 : _ref$near,
  35551. _ref$far = _ref.far,
  35552. far = _ref$far === undefined ? 100 : _ref$far,
  35553. _ref$aspect = _ref.aspect,
  35554. aspect = _ref$aspect === undefined ? null : _ref$aspect;
  35555. _classCallCheck(this, PerspectiveViewport);
  35556. var fovyRadians = fovy * DEGREES_TO_RADIANS;
  35557. aspect = Number.isFinite(aspect) ? aspect : width / height;
  35558. return _possibleConstructorReturn(this, (PerspectiveViewport.__proto__ || Object.getPrototypeOf(PerspectiveViewport)).call(this, {
  35559. viewMatrix: (0, _lookAt2.default)([], eye, lookAt, up),
  35560. projectionMatrix: (0, _perspective2.default)([], fovyRadians, aspect, near, far),
  35561. width: width,
  35562. height: height
  35563. }));
  35564. }
  35565. return PerspectiveViewport;
  35566. }(_viewport2.default);
  35567. exports.default = PerspectiveViewport;
  35568. /***/ }),
  35569. /* 356 */
  35570. /***/ (function(module, exports, __webpack_require__) {
  35571. "use strict";
  35572. Object.defineProperty(exports, "__esModule", {
  35573. value: true
  35574. });
  35575. var _viewport = __webpack_require__(42);
  35576. var _viewport2 = _interopRequireDefault(_viewport);
  35577. var _math = __webpack_require__(16);
  35578. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  35579. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  35580. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  35581. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35582. //
  35583. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35584. // of this software and associated documentation files (the "Software"), to deal
  35585. // in the Software without restriction, including without limitation the rights
  35586. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35587. // copies of the Software, and to permit persons to whom the Software is
  35588. // furnished to do so, subject to the following conditions:
  35589. //
  35590. // The above copyright notice and this permission notice shall be included in
  35591. // all copies or substantial portions of the Software.
  35592. //
  35593. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35594. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35595. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35596. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35597. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35598. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35599. // THE SOFTWARE.
  35600. var SphericalCoordinates = _math.experimental.SphericalCoordinates;
  35601. function getDirectionFromBearingAndPitch(_ref) {
  35602. var bearing = _ref.bearing,
  35603. pitch = _ref.pitch;
  35604. var spherical = new SphericalCoordinates({ bearing: bearing, pitch: pitch });
  35605. return spherical.toVector3().normalize();
  35606. }
  35607. var ThirdPersonViewport = function (_Viewport) {
  35608. _inherits(ThirdPersonViewport, _Viewport);
  35609. function ThirdPersonViewport(opts) {
  35610. _classCallCheck(this, ThirdPersonViewport);
  35611. var bearing = opts.bearing,
  35612. pitch = opts.pitch,
  35613. position = opts.position,
  35614. up = opts.up,
  35615. zoom = opts.zoom;
  35616. var direction = getDirectionFromBearingAndPitch({
  35617. bearing: bearing,
  35618. pitch: pitch
  35619. });
  35620. var distance = zoom * 50;
  35621. // TODO somehow need to flip z to make it work
  35622. // check if the position offset is done in the base viewport
  35623. var eye = direction.scale(-distance).multiply(new _math.Vector3(1, 1, -1));
  35624. var viewMatrix = new _math.Matrix4().multiplyRight(new _math.Matrix4().lookAt({ eye: eye, center: position, up: up }));
  35625. return _possibleConstructorReturn(this, (ThirdPersonViewport.__proto__ || Object.getPrototypeOf(ThirdPersonViewport)).call(this, Object.assign({}, opts, {
  35626. // use meter level
  35627. zoom: null,
  35628. viewMatrix: viewMatrix
  35629. })));
  35630. }
  35631. return ThirdPersonViewport;
  35632. }(_viewport2.default);
  35633. exports.default = ThirdPersonViewport;
  35634. ThirdPersonViewport.displayName = 'ThirdPersonViewport';
  35635. /***/ }),
  35636. /* 357 */
  35637. /***/ (function(module, exports, __webpack_require__) {
  35638. "use strict";
  35639. Object.defineProperty(exports, "__esModule", {
  35640. value: true
  35641. });
  35642. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35643. //
  35644. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35645. // of this software and associated documentation files (the "Software"), to deal
  35646. // in the Software without restriction, including without limitation the rights
  35647. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35648. // copies of the Software, and to permit persons to whom the Software is
  35649. // furnished to do so, subject to the following conditions:
  35650. //
  35651. // The above copyright notice and this permission notice shall be included in
  35652. // all copies or substantial portions of the Software.
  35653. //
  35654. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35655. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35656. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35657. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35658. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35659. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35660. // THE SOFTWARE.
  35661. exports.default = "#define SHADER_NAME reflection-effect-fs\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D reflectionTexture;\nuniform int reflectionTextureWidth;\nuniform int reflectionTextureHeight;\n\nuniform float reflectivity;\nuniform float blur;\n\n\nvarying vec2 uv;\n\n#define KERNEL_SIZE 7\n\n/*\n * Samples from tex with a gaussian-shaped patch, centered at uv and\n * with standard deviation sigma. The size of the texture in\n * pixels must be specified by dim\n */\nvec4 sample_gaussian(sampler2D tex, vec2 dim, vec2 uv, float sigma) {\n if (sigma == 0.0) {\n return texture2D(tex, uv);\n }\n\n vec2 delta = 1.0 / dim;\n vec2 top_left = uv - delta * float(KERNEL_SIZE+1) / 2.0;\n\n vec4 color = vec4(0);\n float sum = 0.0;\n for (int i = 0; i < KERNEL_SIZE; ++i) {\n for (int j = 0; j < KERNEL_SIZE; ++j) {\n vec2 uv2 = top_left + vec2(i, j) * delta;\n float d = length((uv2 - uv) * dim);\n float f = exp(-(d*d) / (2.0*sigma * sigma));\n color += f * texture2D(tex, uv2);\n sum += f;\n }\n }\n return color / sum;\n}\n\nvoid main(void) {\n //map blur in [0, 1] to sigma in [0, inf]\n //alpha will determine the \"steepness\" of our curve.\n //this was picked just to make the scale feel \"natural\"\n //if our image is 1000 pixels wide, a blur of 0.5 should correspond\n //to a sigma of 1 pixels\n float alpha = 1000.0;\n float sigma = blur / (alpha * (1.0 - blur));\n //let this be our standard deviation in terms of screen-widths.\n //rewrite this in terms of pixels.\n sigma *= float(reflectionTextureWidth);\n\n\n gl_FragColor = sample_gaussian(reflectionTexture, vec2(reflectionTextureWidth,\n reflectionTextureHeight), vec2(uv.x, 1. - uv.y), sigma);\n //because our canvas expects alphas to be pre-multiplied, we multiply by whole\n //color vector by reflectivity, not just the alpha channel\n gl_FragColor *= reflectivity;\n}\n";
  35662. /***/ }),
  35663. /* 358 */
  35664. /***/ (function(module, exports, __webpack_require__) {
  35665. "use strict";
  35666. Object.defineProperty(exports, "__esModule", {
  35667. value: true
  35668. });
  35669. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35670. //
  35671. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35672. // of this software and associated documentation files (the "Software"), to deal
  35673. // in the Software without restriction, including without limitation the rights
  35674. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35675. // copies of the Software, and to permit persons to whom the Software is
  35676. // furnished to do so, subject to the following conditions:
  35677. //
  35678. // The above copyright notice and this permission notice shall be included in
  35679. // all copies or substantial portions of the Software.
  35680. //
  35681. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35682. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35683. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35684. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35685. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35686. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35687. // THE SOFTWARE.
  35688. exports.default = "#define SHADER_NAME reflection-effect-vs\n\nattribute vec3 vertices;\n\nvarying vec2 uv;\n\nvoid main(void) {\n uv = vertices.xy;\n gl_Position = vec4(2. * vertices.xy - vec2(1., 1.), 1., 1.);\n}\n";
  35689. /***/ }),
  35690. /* 359 */
  35691. /***/ (function(module, exports, __webpack_require__) {
  35692. "use strict";
  35693. Object.defineProperty(exports, "__esModule", {
  35694. value: true
  35695. });
  35696. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  35697. var _luma = __webpack_require__(12);
  35698. var _effect = __webpack_require__(122);
  35699. var _effect2 = _interopRequireDefault(_effect);
  35700. var _webMercatorViewport = __webpack_require__(86);
  35701. var _webMercatorViewport2 = _interopRequireDefault(_webMercatorViewport);
  35702. var _reflectionEffectVertex = __webpack_require__(358);
  35703. var _reflectionEffectVertex2 = _interopRequireDefault(_reflectionEffectVertex);
  35704. var _reflectionEffectFragment = __webpack_require__(357);
  35705. var _reflectionEffectFragment2 = _interopRequireDefault(_reflectionEffectFragment);
  35706. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  35707. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  35708. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  35709. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35710. //
  35711. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35712. // of this software and associated documentation files (the "Software"), to deal
  35713. // in the Software without restriction, including without limitation the rights
  35714. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35715. // copies of the Software, and to permit persons to whom the Software is
  35716. // furnished to do so, subject to the following conditions:
  35717. //
  35718. // The above copyright notice and this permission notice shall be included in
  35719. // all copies or substantial portions of the Software.
  35720. //
  35721. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35722. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35723. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35724. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35725. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35726. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35727. // THE SOFTWARE.
  35728. /* global window */
  35729. var ReflectionEffect = function (_Effect) {
  35730. _inherits(ReflectionEffect, _Effect);
  35731. /**
  35732. * @classdesc
  35733. * ReflectionEffect
  35734. *
  35735. * @class
  35736. * @param reflectivity How visible reflections should be over the map, between 0 and 1
  35737. * @param blur how blurry the reflection should be, between 0 and 1
  35738. */
  35739. function ReflectionEffect() {
  35740. var reflectivity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0.5;
  35741. var blur = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.5;
  35742. _classCallCheck(this, ReflectionEffect);
  35743. var _this = _possibleConstructorReturn(this, (ReflectionEffect.__proto__ || Object.getPrototypeOf(ReflectionEffect)).call(this));
  35744. _this.reflectivity = reflectivity;
  35745. _this.blur = blur;
  35746. _this.framebuffer = null;
  35747. _this.setNeedsRedraw();
  35748. return _this;
  35749. }
  35750. _createClass(ReflectionEffect, [{
  35751. key: 'getShaders',
  35752. value: function getShaders() {
  35753. return {
  35754. vs: _reflectionEffectVertex2.default,
  35755. fs: _reflectionEffectFragment2.default,
  35756. modules: [],
  35757. shaderCache: this.context.shaderCache
  35758. };
  35759. }
  35760. }, {
  35761. key: 'initialize',
  35762. value: function initialize(_ref) {
  35763. var gl = _ref.gl,
  35764. layerManager = _ref.layerManager;
  35765. this.unitQuad = new _luma.Model(gl, Object.assign({}, this.getShaders(), {
  35766. id: 'reflection-effect',
  35767. geometry: new _luma.Geometry({
  35768. drawMode: _luma.GL.TRIANGLE_FAN,
  35769. vertices: new Float32Array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0])
  35770. })
  35771. }));
  35772. this.framebuffer = new _luma.Framebuffer(gl, { depth: true });
  35773. }
  35774. }, {
  35775. key: 'preDraw',
  35776. value: function preDraw(_ref2) {
  35777. var gl = _ref2.gl,
  35778. layerManager = _ref2.layerManager;
  35779. var viewport = layerManager.context.viewport;
  35780. /*
  35781. * the renderer already has a reference to this, but we don't have a reference to the renderer.
  35782. * when we refactor the camera code, we should make sure we get a reference to the renderer so
  35783. * that we can keep this in one place.
  35784. */
  35785. var dpi = typeof window !== 'undefined' && window.devicePixelRatio || 1;
  35786. this.framebuffer.resize({ width: dpi * viewport.width, height: dpi * viewport.height });
  35787. var pitch = viewport.pitch;
  35788. this.framebuffer.bind();
  35789. /* this is a huge hack around the existing viewport class.
  35790. * TODO in the future, once we implement bona-fide cameras, we really need to fix this.
  35791. */
  35792. layerManager.setViewport(new _webMercatorViewport2.default(Object.assign({}, viewport, { pitch: -180 - pitch })));
  35793. gl.clear(_luma.GL.COLOR_BUFFER_BIT | _luma.GL.DEPTH_BUFFER_BIT);
  35794. layerManager.drawLayers({ pass: 'reflection' });
  35795. layerManager.setViewport(viewport);
  35796. this.framebuffer.unbind();
  35797. }
  35798. }, {
  35799. key: 'draw',
  35800. value: function draw(_ref3) {
  35801. var gl = _ref3.gl,
  35802. layerManager = _ref3.layerManager;
  35803. /*
  35804. * Render our unit quad.
  35805. * This will cover the entire screen, but will lie behind all other geometry.
  35806. * This quad will sample the previously generated reflection texture
  35807. * in order to create the reflection effect
  35808. */
  35809. this.unitQuad.render({
  35810. reflectionTexture: this.framebuffer.texture,
  35811. reflectionTextureWidth: this.framebuffer.width,
  35812. reflectionTextureHeight: this.framebuffer.height,
  35813. reflectivity: this.reflectivity,
  35814. blur: this.blur
  35815. });
  35816. }
  35817. }, {
  35818. key: 'finalize',
  35819. value: function finalize(_ref4) {
  35820. /* TODO: Free resources? */
  35821. var gl = _ref4.gl,
  35822. layerManager = _ref4.layerManager;
  35823. }
  35824. }]);
  35825. return ReflectionEffect;
  35826. }(_effect2.default);
  35827. exports.default = ReflectionEffect;
  35828. /***/ }),
  35829. /* 360 */
  35830. /***/ (function(module, exports, __webpack_require__) {
  35831. "use strict";
  35832. Object.defineProperty(exports, "__esModule", {
  35833. value: true
  35834. });
  35835. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  35836. var _react = __webpack_require__(117);
  35837. var _react2 = _interopRequireDefault(_react);
  35838. var _autobind = __webpack_require__(197);
  35839. var _autobind2 = _interopRequireDefault(_autobind);
  35840. var _inheritsFrom = __webpack_require__(351);
  35841. var _core = __webpack_require__(13);
  35842. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  35843. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  35844. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  35845. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  35846. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  35847. //
  35848. // Permission is hereby granted, free of charge, to any person obtaining a copy
  35849. // of this software and associated documentation files (the "Software"), to deal
  35850. // in the Software without restriction, including without limitation the rights
  35851. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  35852. // copies of the Software, and to permit persons to whom the Software is
  35853. // furnished to do so, subject to the following conditions:
  35854. //
  35855. // The above copyright notice and this permission notice shall be included in
  35856. // all copies or substantial portions of the Software.
  35857. //
  35858. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  35859. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  35860. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  35861. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  35862. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  35863. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  35864. // THE SOFTWARE.
  35865. var DeckGLJS = _core.experimental.DeckGLJS,
  35866. log = _core.experimental.log;
  35867. var DeckGL = function (_React$Component) {
  35868. _inherits(DeckGL, _React$Component);
  35869. function DeckGL(props) {
  35870. _classCallCheck(this, DeckGL);
  35871. var _this = _possibleConstructorReturn(this, (DeckGL.__proto__ || Object.getPrototypeOf(DeckGL)).call(this, props));
  35872. _this.state = {};
  35873. _this.children = [];
  35874. (0, _autobind2.default)(_this);
  35875. return _this;
  35876. }
  35877. _createClass(DeckGL, [{
  35878. key: 'componentDidMount',
  35879. value: function componentDidMount() {
  35880. this.deck = new DeckGLJS(Object.assign({}, this.props, { canvas: this.overlay }));
  35881. this._updateFromProps(this.props);
  35882. }
  35883. }, {
  35884. key: 'componentWillReceiveProps',
  35885. value: function componentWillReceiveProps(nextProps) {
  35886. this._updateFromProps(nextProps);
  35887. }
  35888. }, {
  35889. key: 'componentWillUnmount',
  35890. value: function componentWillUnmount() {
  35891. this.deck.finalize();
  35892. }
  35893. // Public API
  35894. }, {
  35895. key: 'queryObject',
  35896. value: function queryObject(opts) {
  35897. log.deprecated('queryObject', 'pickObject');
  35898. return this.deck.pickObject(opts);
  35899. }
  35900. }, {
  35901. key: 'pickObject',
  35902. value: function pickObject(_ref) {
  35903. var x = _ref.x,
  35904. y = _ref.y,
  35905. _ref$radius = _ref.radius,
  35906. radius = _ref$radius === undefined ? 0 : _ref$radius,
  35907. _ref$layerIds = _ref.layerIds,
  35908. layerIds = _ref$layerIds === undefined ? null : _ref$layerIds;
  35909. return this.deck.pickObject({ x: x, y: y, radius: radius, layerIds: layerIds });
  35910. }
  35911. }, {
  35912. key: 'queryVisibleObjects',
  35913. value: function queryVisibleObjects(opts) {
  35914. log.deprecated('queryVisibleObjects', 'pickObjects');
  35915. return this.pickObjects(opts);
  35916. }
  35917. }, {
  35918. key: 'pickObjects',
  35919. value: function pickObjects(_ref2) {
  35920. var x = _ref2.x,
  35921. y = _ref2.y,
  35922. _ref2$width = _ref2.width,
  35923. width = _ref2$width === undefined ? 1 : _ref2$width,
  35924. _ref2$height = _ref2.height,
  35925. height = _ref2$height === undefined ? 1 : _ref2$height,
  35926. _ref2$layerIds = _ref2.layerIds,
  35927. layerIds = _ref2$layerIds === undefined ? null : _ref2$layerIds;
  35928. return this.deck.pickObjects({ x: x, y: y, width: width, height: height, layerIds: layerIds });
  35929. }
  35930. // Private Helpers
  35931. // Extract any JSX layers from the react children
  35932. // Needs to be called both from initial mount, and when new props arrive
  35933. }, {
  35934. key: '_updateFromProps',
  35935. value: function _updateFromProps(nextProps) {
  35936. // extract any deck.gl layers masquerading as react elements from props.children
  35937. var _extractJSXLayers2 = this._extractJSXLayers(nextProps.children),
  35938. layers = _extractJSXLayers2.layers,
  35939. children = _extractJSXLayers2.children;
  35940. if (this.deck) {
  35941. this.deck.setProps(Object.assign({}, nextProps, {
  35942. // Avoid modifying layers array if no JSX layers were found
  35943. layers: layers ? [].concat(_toConsumableArray(layers), _toConsumableArray(nextProps.layers)) : nextProps.layers
  35944. }));
  35945. }
  35946. this.children = children;
  35947. }
  35948. // extracts any deck.gl layers masquerading as react elements from props.children
  35949. }, {
  35950. key: '_extractJSXLayers',
  35951. value: function _extractJSXLayers(children) {
  35952. var reactChildren = []; // extract real react elements (i.e. not deck.gl layers)
  35953. var layers = null; // extracted layer from react children, will add to deck.gl layer array
  35954. _react2.default.Children.forEach(children, function (reactElement) {
  35955. if (reactElement) {
  35956. // For some reason Children.forEach doesn't filter out `null`s
  35957. var LayerType = reactElement.type;
  35958. if ((0, _inheritsFrom.inheritsFrom)(LayerType, _core.Layer)) {
  35959. var layer = new LayerType(reactElement.props);
  35960. layers = layers || [];
  35961. layers.push(layer);
  35962. } else {
  35963. reactChildren.push(reactElement);
  35964. }
  35965. }
  35966. });
  35967. return { layers: layers, children: reactChildren };
  35968. }
  35969. // Iterate over viewport descriptors and render children associate with viewports
  35970. // at the specified positions
  35971. // TODO - Can we supply a similar function for the non-React case?
  35972. }, {
  35973. key: '_renderChildrenUnderViewports',
  35974. value: function _renderChildrenUnderViewports(children) {
  35975. var _this2 = this;
  35976. // Flatten out nested viewports array
  35977. var viewports = this.deck ? this.deck.getViewports() : [];
  35978. // Build a viewport id to viewport index
  35979. var viewportMap = {};
  35980. viewports.forEach(function (viewport) {
  35981. if (viewport.id) {
  35982. viewportMap[viewport.id] = viewport;
  35983. }
  35984. });
  35985. return children.map(
  35986. // If child specifies props.viewportId, position under viewport, otherwise render as normal
  35987. function (child, i) {
  35988. return child.props.viewportId ? _this2._positionChild({ child: child, viewportMap: viewportMap, i: i }) : child;
  35989. });
  35990. }
  35991. }, {
  35992. key: '_positionChild',
  35993. value: function _positionChild(_ref3) {
  35994. var child = _ref3.child,
  35995. viewportMap = _ref3.viewportMap,
  35996. i = _ref3.i;
  35997. var viewportId = child.props.viewportId;
  35998. var viewport = viewportId && viewportMap[viewportId];
  35999. // Drop (aut-hide) elements with viewportId that are not matched by any current viewport
  36000. if (!viewport) {
  36001. return null;
  36002. }
  36003. // Resolve potentially relative dimensions using the deck.gl container size
  36004. var x = viewport.x,
  36005. y = viewport.y,
  36006. width = viewport.width,
  36007. height = viewport.height;
  36008. // Clone the element with width and height set per viewport
  36009. var newProps = Object.assign({}, child.props, { width: width, height: height });
  36010. // Inject map properties
  36011. // TODO - this is too react-map-gl specific
  36012. Object.assign(newProps, viewport.getMercatorParams(), {
  36013. visible: viewport.isMapSynched()
  36014. });
  36015. var clone = (0, _react.cloneElement)(child, newProps);
  36016. // Wrap it in an absolutely positioning div
  36017. var style = { position: 'absolute', left: x, top: y, width: width, height: height };
  36018. var key = 'viewport-child-' + viewportId + '-' + i;
  36019. return (0, _react.createElement)('div', { key: key, id: key, style: style }, clone);
  36020. }
  36021. }, {
  36022. key: 'render',
  36023. value: function render() {
  36024. var _this3 = this;
  36025. // Render the background elements (typically react-map-gl instances)
  36026. // using the viewport descriptors
  36027. var children = this._renderChildrenUnderViewports(this.children);
  36028. // Render deck.gl as last child
  36029. var _props = this.props,
  36030. id = _props.id,
  36031. width = _props.width,
  36032. height = _props.height,
  36033. style = _props.style;
  36034. var deck = (0, _react.createElement)('canvas', {
  36035. ref: function ref(c) {
  36036. return _this3.overlay = c;
  36037. },
  36038. key: 'overlay',
  36039. id: id,
  36040. style: Object.assign({}, { position: 'absolute', left: 0, top: 0, width: width, height: height }, style)
  36041. });
  36042. children.push(deck);
  36043. return (0, _react.createElement)('div', { id: 'deckgl-wrapper' }, children);
  36044. }
  36045. }]);
  36046. return DeckGL;
  36047. }(_react2.default.Component);
  36048. exports.default = DeckGL;
  36049. DeckGL.propTypes = DeckGLJS.propTypes;
  36050. DeckGL.defaultProps = DeckGLJS.defaultProps;
  36051. /***/ }),
  36052. /* 361 */
  36053. /***/ (function(module, exports, __webpack_require__) {
  36054. "use strict";
  36055. Object.defineProperty(exports, "__esModule", {
  36056. value: true
  36057. });
  36058. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  36059. var _react = __webpack_require__(117);
  36060. var _orbitControllerJs = __webpack_require__(189);
  36061. var _orbitControllerJs2 = _interopRequireDefault(_orbitControllerJs);
  36062. var _orbitViewport = __webpack_require__(85);
  36063. var _orbitViewport2 = _interopRequireDefault(_orbitViewport);
  36064. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  36065. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  36066. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  36067. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  36068. var OrbitController = function (_PureComponent) {
  36069. _inherits(OrbitController, _PureComponent);
  36070. _createClass(OrbitController, null, [{
  36071. key: 'getViewport',
  36072. // Returns a deck.gl Viewport instance, to be used with the DeckGL component
  36073. value: function getViewport(viewport) {
  36074. return new _orbitViewport2.default(viewport);
  36075. }
  36076. }]);
  36077. function OrbitController(props) {
  36078. _classCallCheck(this, OrbitController);
  36079. var _this = _possibleConstructorReturn(this, (OrbitController.__proto__ || Object.getPrototypeOf(OrbitController)).call(this, props));
  36080. _this.controller = null;
  36081. return _this;
  36082. }
  36083. _createClass(OrbitController, [{
  36084. key: 'componentDidMount',
  36085. value: function componentDidMount() {
  36086. this.controller = new _orbitControllerJs2.default(Object.assign({}, this.props, { canvas: this.eventCanvas }));
  36087. }
  36088. }, {
  36089. key: 'componentWillUpdate',
  36090. value: function componentWillUpdate(nextProps) {
  36091. this.controller.setProps(nextProps);
  36092. }
  36093. }, {
  36094. key: 'componentWillUnmount',
  36095. value: function componentWillUnmount() {
  36096. this.controller.finalize();
  36097. }
  36098. }, {
  36099. key: 'render',
  36100. value: function render() {
  36101. var _this2 = this;
  36102. var _props = this.props,
  36103. width = _props.width,
  36104. height = _props.height;
  36105. var eventCanvasStyle = {
  36106. width: width,
  36107. height: height,
  36108. position: 'relative'
  36109. };
  36110. return (0, _react.createElement)('div', {
  36111. key: 'map-controls',
  36112. ref: function ref(c) {
  36113. return _this2.eventCanvas = c;
  36114. },
  36115. style: eventCanvasStyle
  36116. }, this.props.children);
  36117. }
  36118. }]);
  36119. return OrbitController;
  36120. }(_react.PureComponent);
  36121. exports.default = OrbitController;
  36122. OrbitController.displayName = 'OrbitController';
  36123. OrbitController.propTypes = _orbitControllerJs2.default.propTypes;
  36124. OrbitController.defaultProps = _orbitControllerJs2.default.defaultProps;
  36125. /***/ }),
  36126. /* 362 */
  36127. /***/ (function(module, exports, __webpack_require__) {
  36128. "use strict";
  36129. Object.defineProperty(exports, "__esModule", {
  36130. value: true
  36131. });
  36132. var _deckgl = __webpack_require__(360);
  36133. Object.defineProperty(exports, 'DeckGL', {
  36134. enumerable: true,
  36135. get: function get() {
  36136. return _interopRequireDefault(_deckgl).default;
  36137. }
  36138. });
  36139. Object.defineProperty(exports, 'default', {
  36140. enumerable: true,
  36141. get: function get() {
  36142. return _interopRequireDefault(_deckgl).default;
  36143. }
  36144. });
  36145. var _viewportController = __webpack_require__(365);
  36146. Object.defineProperty(exports, 'ViewportController', {
  36147. enumerable: true,
  36148. get: function get() {
  36149. return _interopRequireDefault(_viewportController).default;
  36150. }
  36151. });
  36152. var _mapController = __webpack_require__(363);
  36153. Object.defineProperty(exports, 'MapController', {
  36154. enumerable: true,
  36155. get: function get() {
  36156. return _interopRequireDefault(_mapController).default;
  36157. }
  36158. });
  36159. var _orbitController = __webpack_require__(361);
  36160. Object.defineProperty(exports, 'OrbitController', {
  36161. enumerable: true,
  36162. get: function get() {
  36163. return _interopRequireDefault(_orbitController).default;
  36164. }
  36165. });
  36166. var _autobind = __webpack_require__(197);
  36167. Object.defineProperty(exports, 'autobind', {
  36168. enumerable: true,
  36169. get: function get() {
  36170. return _interopRequireDefault(_autobind).default;
  36171. }
  36172. });
  36173. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  36174. /***/ }),
  36175. /* 363 */
  36176. /***/ (function(module, exports, __webpack_require__) {
  36177. "use strict";
  36178. Object.defineProperty(exports, "__esModule", {
  36179. value: true
  36180. });
  36181. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  36182. var _react = __webpack_require__(117);
  36183. var _mapControllerJs = __webpack_require__(188);
  36184. var _mapControllerJs2 = _interopRequireDefault(_mapControllerJs);
  36185. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  36186. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  36187. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  36188. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  36189. var MapController = function (_PureComponent) {
  36190. _inherits(MapController, _PureComponent);
  36191. function MapController(props) {
  36192. _classCallCheck(this, MapController);
  36193. var _this = _possibleConstructorReturn(this, (MapController.__proto__ || Object.getPrototypeOf(MapController)).call(this, props));
  36194. _this.controller = null;
  36195. return _this;
  36196. }
  36197. _createClass(MapController, [{
  36198. key: 'componentDidMount',
  36199. value: function componentDidMount() {
  36200. this.controller = new _mapControllerJs2.default(Object.assign({}, this.props, { canvas: this.eventCanvas }));
  36201. }
  36202. }, {
  36203. key: 'componentWillUpdate',
  36204. value: function componentWillUpdate(nextProps) {
  36205. this.controller.setProps(nextProps);
  36206. }
  36207. }, {
  36208. key: 'componentWillUnmount',
  36209. value: function componentWillUnmount() {
  36210. this.controller.finalize();
  36211. }
  36212. }, {
  36213. key: 'render',
  36214. value: function render() {
  36215. var _this2 = this;
  36216. var _props = this.props,
  36217. width = _props.width,
  36218. height = _props.height;
  36219. var eventCanvasStyle = {
  36220. width: width,
  36221. height: height,
  36222. position: 'relative'
  36223. };
  36224. return (0, _react.createElement)('div', {
  36225. key: 'map-controls',
  36226. ref: function ref(c) {
  36227. return _this2.eventCanvas = c;
  36228. },
  36229. style: eventCanvasStyle
  36230. }, this.props.children);
  36231. }
  36232. }]);
  36233. return MapController;
  36234. }(_react.PureComponent);
  36235. exports.default = MapController;
  36236. MapController.displayName = 'MapController';
  36237. MapController.propTypes = _mapControllerJs2.default.propTypes;
  36238. MapController.defaultProps = _mapControllerJs2.default.defaultProps;
  36239. /***/ }),
  36240. /* 364 */
  36241. /***/ (function(module, exports, __webpack_require__) {
  36242. "use strict";
  36243. Object.defineProperty(exports, "__esModule", {
  36244. value: true
  36245. });
  36246. // Copyright (c) 2015 Uber Technologies, Inc.
  36247. // Permission is hereby granted, free of charge, to any person obtaining a copy
  36248. // of this software and associated documentation files (the "Software"), to deal
  36249. // in the Software without restriction, including without limitation the rights
  36250. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  36251. // copies of the Software, and to permit persons to whom the Software is
  36252. // furnished to do so, subject to the following conditions:
  36253. // The above copyright notice and this permission notice shall be included in
  36254. // all copies or substantial portions of the Software.
  36255. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  36256. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  36257. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  36258. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  36259. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  36260. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  36261. // THE SOFTWARE.
  36262. // import browser from 'bowser';
  36263. var PREFIX = '-webkit-';
  36264. // browser.webkit || browser.blink ? '-webkit-' :
  36265. // browser.gecko ? '-moz-' :
  36266. // '';
  36267. exports.default = {
  36268. GRABBING: PREFIX + 'grabbing',
  36269. GRAB: PREFIX + 'grab',
  36270. POINTER: 'pointer'
  36271. };
  36272. /***/ }),
  36273. /* 365 */
  36274. /***/ (function(module, exports, __webpack_require__) {
  36275. "use strict";
  36276. Object.defineProperty(exports, "__esModule", {
  36277. value: true
  36278. });
  36279. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  36280. var _react = __webpack_require__(117);
  36281. var _propTypes = __webpack_require__(116);
  36282. var _propTypes2 = _interopRequireDefault(_propTypes);
  36283. var _mjolnir = __webpack_require__(115);
  36284. var _core = __webpack_require__(13);
  36285. var _cursors = __webpack_require__(364);
  36286. var _cursors2 = _interopRequireDefault(_cursors);
  36287. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  36288. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  36289. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  36290. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  36291. var ViewportControls = _core.experimental.ViewportControls,
  36292. TransitionManager = _core.experimental.TransitionManager;
  36293. var propTypes = {
  36294. viewportState: _propTypes2.default.func,
  36295. state: _propTypes2.default.object,
  36296. /** Viewport props */
  36297. /** The width of the map. */
  36298. width: _propTypes2.default.number.isRequired,
  36299. /** The height of the map. */
  36300. height: _propTypes2.default.number.isRequired,
  36301. /** The longitude of the center of the map. */
  36302. longitude: _propTypes2.default.number.isRequired,
  36303. /** The latitude of the center of the map. */
  36304. latitude: _propTypes2.default.number.isRequired,
  36305. /** The tile zoom level of the map. */
  36306. zoom: _propTypes2.default.number.isRequired,
  36307. /** Specify the bearing of the viewport */
  36308. bearing: _propTypes2.default.number,
  36309. /** Specify the pitch of the viewport */
  36310. pitch: _propTypes2.default.number,
  36311. /** Altitude of the viewport camera. Default 1.5 "screen heights" */
  36312. // Note: Non-public API, see https://github.com/mapbox/mapbox-gl-js/issues/1137
  36313. altitude: _propTypes2.default.number,
  36314. // Camera position for FirstPersonViewport
  36315. position: _propTypes2.default.array,
  36316. /** Viewport constraints */
  36317. // Max zoom level
  36318. maxZoom: _propTypes2.default.number,
  36319. // Min zoom level
  36320. minZoom: _propTypes2.default.number,
  36321. // Max pitch in degrees
  36322. maxPitch: _propTypes2.default.number,
  36323. // Min pitch in degrees
  36324. minPitch: _propTypes2.default.number,
  36325. /**
  36326. * `onViewportChange` callback is fired when the user interacted with the
  36327. * map. The object passed to the callback contains viewport properties
  36328. * such as `longitude`, `latitude`, `zoom` etc.
  36329. */
  36330. onViewportChange: _propTypes2.default.func,
  36331. /** Viewport transition **/
  36332. // transition duration for viewport change
  36333. transitionDuration: _propTypes2.default.number,
  36334. // an instance of ViewportTransitionInterpolator, can be used to perform custom transitions.
  36335. transitionInterpolator: _propTypes2.default.object,
  36336. // type of interruption of current transition on update.
  36337. transitionInterruption: _propTypes2.default.number,
  36338. // easing function
  36339. transitionEasing: _propTypes2.default.func,
  36340. // transition status update functions
  36341. onTransitionStart: _propTypes2.default.func,
  36342. onTransitionInterrupt: _propTypes2.default.func,
  36343. onTransitionEnd: _propTypes2.default.func,
  36344. /** Enables control event handling */
  36345. // Scroll to zoom
  36346. scrollZoom: _propTypes2.default.bool,
  36347. // Drag to pan
  36348. dragPan: _propTypes2.default.bool,
  36349. // Drag to rotate
  36350. dragRotate: _propTypes2.default.bool,
  36351. // Double click to zoom
  36352. doubleClickZoom: _propTypes2.default.bool,
  36353. // Pinch to zoom / rotate
  36354. touchZoomRotate: _propTypes2.default.bool,
  36355. /** Accessor that returns a cursor style to show interactive state */
  36356. getCursor: _propTypes2.default.func,
  36357. // A map control instance to replace the default map controls
  36358. // The object must expose one property: `events` as an array of subscribed
  36359. // event names; and two methods: `setState(state)` and `handle(event)`
  36360. controls: _propTypes2.default.shape({
  36361. events: _propTypes2.default.arrayOf(_propTypes2.default.string),
  36362. handleEvent: _propTypes2.default.func
  36363. })
  36364. };
  36365. var getDefaultCursor = function getDefaultCursor(_ref) {
  36366. var isDragging = _ref.isDragging;
  36367. return isDragging ? _cursors2.default.GRABBING : _cursors2.default.GRAB;
  36368. };
  36369. var defaultProps = Object.assign({}, TransitionManager.defaultProps, {
  36370. onViewportChange: null,
  36371. scrollZoom: true,
  36372. dragPan: true,
  36373. dragRotate: true,
  36374. doubleClickZoom: true,
  36375. touchZoomRotate: true,
  36376. getCursor: getDefaultCursor
  36377. });
  36378. var ViewportController = function (_Component) {
  36379. _inherits(ViewportController, _Component);
  36380. function ViewportController(props) {
  36381. _classCallCheck(this, ViewportController);
  36382. var _this = _possibleConstructorReturn(this, (ViewportController.__proto__ || Object.getPrototypeOf(ViewportController)).call(this, props));
  36383. _this.state = {
  36384. isDragging: false // Whether the cursor is down
  36385. };
  36386. return _this;
  36387. }
  36388. _createClass(ViewportController, [{
  36389. key: 'componentDidMount',
  36390. value: function componentDidMount() {
  36391. this._eventManager = new _mjolnir.EventManager(this.eventCanvas);
  36392. // If props.controls is not provided, fallback to default MapControls instance
  36393. // Cannot use defaultProps here because it needs to be per map instance
  36394. this._controls = this.props.controls || new ViewportControls(this.props.viewportState);
  36395. this._controls.setOptions(Object.assign({}, this.props, {
  36396. onStateChange: this._onInteractiveStateChange.bind(this),
  36397. eventManager: this._eventManager
  36398. }));
  36399. this._transitionManger = new TransitionManager(this.props);
  36400. }
  36401. }, {
  36402. key: 'shouldComponentUpdate',
  36403. value: function shouldComponentUpdate(nextProps, nextState) {
  36404. if (this._transitionManger) {
  36405. var transitionTriggered = this._transitionManger.processViewportChange(nextProps);
  36406. // Skip this render to avoid jump during viewport transitions.
  36407. return !transitionTriggered;
  36408. }
  36409. return true;
  36410. }
  36411. }, {
  36412. key: 'componentWillUpdate',
  36413. value: function componentWillUpdate(nextProps) {
  36414. if (this._controls) {
  36415. this._controls.setOptions(nextProps);
  36416. }
  36417. }
  36418. }, {
  36419. key: 'componentWillUnmount',
  36420. value: function componentWillUnmount() {
  36421. this._eventManager.destroy();
  36422. }
  36423. }, {
  36424. key: '_onInteractiveStateChange',
  36425. value: function _onInteractiveStateChange(_ref2) {
  36426. var _ref2$isDragging = _ref2.isDragging,
  36427. isDragging = _ref2$isDragging === undefined ? false : _ref2$isDragging;
  36428. if (isDragging !== this.state.isDragging) {
  36429. this.setState({ isDragging: isDragging });
  36430. }
  36431. }
  36432. }, {
  36433. key: 'render',
  36434. value: function render() {
  36435. var _this2 = this;
  36436. var _props = this.props,
  36437. width = _props.width,
  36438. height = _props.height,
  36439. getCursor = _props.getCursor;
  36440. var eventCanvasStyle = {
  36441. width: width,
  36442. height: height,
  36443. position: 'relative',
  36444. cursor: getCursor(this.state)
  36445. };
  36446. return (0, _react.createElement)('div', {
  36447. key: 'map-controls',
  36448. ref: function ref(c) {
  36449. return _this2.eventCanvas = c;
  36450. },
  36451. style: eventCanvasStyle
  36452. }, this.props.children);
  36453. }
  36454. }]);
  36455. return ViewportController;
  36456. }(_react.Component);
  36457. exports.default = ViewportController;
  36458. ViewportController.displayName = 'ViewportController';
  36459. ViewportController.propTypes = propTypes;
  36460. ViewportController.defaultProps = defaultProps;
  36461. /***/ }),
  36462. /* 366 */
  36463. /***/ (function(module, exports, __webpack_require__) {
  36464. /* WEBPACK VAR INJECTION */(function(global) {/**
  36465. * Copyright (c) 2014, Facebook, Inc.
  36466. * All rights reserved.
  36467. *
  36468. * This source code is licensed under the BSD-style license found in the
  36469. * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
  36470. * additional grant of patent rights can be found in the PATENTS file in
  36471. * the same directory.
  36472. */
  36473. !(function(global) {
  36474. "use strict";
  36475. var Op = Object.prototype;
  36476. var hasOwn = Op.hasOwnProperty;
  36477. var undefined; // More compressible than void 0.
  36478. var $Symbol = typeof Symbol === "function" ? Symbol : {};
  36479. var iteratorSymbol = $Symbol.iterator || "@@iterator";
  36480. var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
  36481. var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
  36482. var inModule = typeof module === "object";
  36483. var runtime = global.regeneratorRuntime;
  36484. if (runtime) {
  36485. if (inModule) {
  36486. // If regeneratorRuntime is defined globally and we're in a module,
  36487. // make the exports object identical to regeneratorRuntime.
  36488. module.exports = runtime;
  36489. }
  36490. // Don't bother evaluating the rest of this file if the runtime was
  36491. // already defined globally.
  36492. return;
  36493. }
  36494. // Define the runtime globally (as expected by generated code) as either
  36495. // module.exports (if we're in a module) or a new, empty object.
  36496. runtime = global.regeneratorRuntime = inModule ? module.exports : {};
  36497. function wrap(innerFn, outerFn, self, tryLocsList) {
  36498. // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
  36499. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
  36500. var generator = Object.create(protoGenerator.prototype);
  36501. var context = new Context(tryLocsList || []);
  36502. // The ._invoke method unifies the implementations of the .next,
  36503. // .throw, and .return methods.
  36504. generator._invoke = makeInvokeMethod(innerFn, self, context);
  36505. return generator;
  36506. }
  36507. runtime.wrap = wrap;
  36508. // Try/catch helper to minimize deoptimizations. Returns a completion
  36509. // record like context.tryEntries[i].completion. This interface could
  36510. // have been (and was previously) designed to take a closure to be
  36511. // invoked without arguments, but in all the cases we care about we
  36512. // already have an existing method we want to call, so there's no need
  36513. // to create a new function object. We can even get away with assuming
  36514. // the method takes exactly one argument, since that happens to be true
  36515. // in every case, so we don't have to touch the arguments object. The
  36516. // only additional allocation required is the completion record, which
  36517. // has a stable shape and so hopefully should be cheap to allocate.
  36518. function tryCatch(fn, obj, arg) {
  36519. try {
  36520. return { type: "normal", arg: fn.call(obj, arg) };
  36521. } catch (err) {
  36522. return { type: "throw", arg: err };
  36523. }
  36524. }
  36525. var GenStateSuspendedStart = "suspendedStart";
  36526. var GenStateSuspendedYield = "suspendedYield";
  36527. var GenStateExecuting = "executing";
  36528. var GenStateCompleted = "completed";
  36529. // Returning this object from the innerFn has the same effect as
  36530. // breaking out of the dispatch switch statement.
  36531. var ContinueSentinel = {};
  36532. // Dummy constructor functions that we use as the .constructor and
  36533. // .constructor.prototype properties for functions that return Generator
  36534. // objects. For full spec compliance, you may wish to configure your
  36535. // minifier not to mangle the names of these two functions.
  36536. function Generator() {}
  36537. function GeneratorFunction() {}
  36538. function GeneratorFunctionPrototype() {}
  36539. // This is a polyfill for %IteratorPrototype% for environments that
  36540. // don't natively support it.
  36541. var IteratorPrototype = {};
  36542. IteratorPrototype[iteratorSymbol] = function () {
  36543. return this;
  36544. };
  36545. var getProto = Object.getPrototypeOf;
  36546. var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  36547. if (NativeIteratorPrototype &&
  36548. NativeIteratorPrototype !== Op &&
  36549. hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
  36550. // This environment has a native %IteratorPrototype%; use it instead
  36551. // of the polyfill.
  36552. IteratorPrototype = NativeIteratorPrototype;
  36553. }
  36554. var Gp = GeneratorFunctionPrototype.prototype =
  36555. Generator.prototype = Object.create(IteratorPrototype);
  36556. GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
  36557. GeneratorFunctionPrototype.constructor = GeneratorFunction;
  36558. GeneratorFunctionPrototype[toStringTagSymbol] =
  36559. GeneratorFunction.displayName = "GeneratorFunction";
  36560. // Helper for defining the .next, .throw, and .return methods of the
  36561. // Iterator interface in terms of a single ._invoke method.
  36562. function defineIteratorMethods(prototype) {
  36563. ["next", "throw", "return"].forEach(function(method) {
  36564. prototype[method] = function(arg) {
  36565. return this._invoke(method, arg);
  36566. };
  36567. });
  36568. }
  36569. runtime.isGeneratorFunction = function(genFun) {
  36570. var ctor = typeof genFun === "function" && genFun.constructor;
  36571. return ctor
  36572. ? ctor === GeneratorFunction ||
  36573. // For the native GeneratorFunction constructor, the best we can
  36574. // do is to check its .name property.
  36575. (ctor.displayName || ctor.name) === "GeneratorFunction"
  36576. : false;
  36577. };
  36578. runtime.mark = function(genFun) {
  36579. if (Object.setPrototypeOf) {
  36580. Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
  36581. } else {
  36582. genFun.__proto__ = GeneratorFunctionPrototype;
  36583. if (!(toStringTagSymbol in genFun)) {
  36584. genFun[toStringTagSymbol] = "GeneratorFunction";
  36585. }
  36586. }
  36587. genFun.prototype = Object.create(Gp);
  36588. return genFun;
  36589. };
  36590. // Within the body of any async function, `await x` is transformed to
  36591. // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
  36592. // `hasOwn.call(value, "__await")` to determine if the yielded value is
  36593. // meant to be awaited.
  36594. runtime.awrap = function(arg) {
  36595. return { __await: arg };
  36596. };
  36597. function AsyncIterator(generator) {
  36598. function invoke(method, arg, resolve, reject) {
  36599. var record = tryCatch(generator[method], generator, arg);
  36600. if (record.type === "throw") {
  36601. reject(record.arg);
  36602. } else {
  36603. var result = record.arg;
  36604. var value = result.value;
  36605. if (value &&
  36606. typeof value === "object" &&
  36607. hasOwn.call(value, "__await")) {
  36608. return Promise.resolve(value.__await).then(function(value) {
  36609. invoke("next", value, resolve, reject);
  36610. }, function(err) {
  36611. invoke("throw", err, resolve, reject);
  36612. });
  36613. }
  36614. return Promise.resolve(value).then(function(unwrapped) {
  36615. // When a yielded Promise is resolved, its final value becomes
  36616. // the .value of the Promise<{value,done}> result for the
  36617. // current iteration. If the Promise is rejected, however, the
  36618. // result for this iteration will be rejected with the same
  36619. // reason. Note that rejections of yielded Promises are not
  36620. // thrown back into the generator function, as is the case
  36621. // when an awaited Promise is rejected. This difference in
  36622. // behavior between yield and await is important, because it
  36623. // allows the consumer to decide what to do with the yielded
  36624. // rejection (swallow it and continue, manually .throw it back
  36625. // into the generator, abandon iteration, whatever). With
  36626. // await, by contrast, there is no opportunity to examine the
  36627. // rejection reason outside the generator function, so the
  36628. // only option is to throw it from the await expression, and
  36629. // let the generator function handle the exception.
  36630. result.value = unwrapped;
  36631. resolve(result);
  36632. }, reject);
  36633. }
  36634. }
  36635. if (typeof global.process === "object" && global.process.domain) {
  36636. invoke = global.process.domain.bind(invoke);
  36637. }
  36638. var previousPromise;
  36639. function enqueue(method, arg) {
  36640. function callInvokeWithMethodAndArg() {
  36641. return new Promise(function(resolve, reject) {
  36642. invoke(method, arg, resolve, reject);
  36643. });
  36644. }
  36645. return previousPromise =
  36646. // If enqueue has been called before, then we want to wait until
  36647. // all previous Promises have been resolved before calling invoke,
  36648. // so that results are always delivered in the correct order. If
  36649. // enqueue has not been called before, then it is important to
  36650. // call invoke immediately, without waiting on a callback to fire,
  36651. // so that the async generator function has the opportunity to do
  36652. // any necessary setup in a predictable way. This predictability
  36653. // is why the Promise constructor synchronously invokes its
  36654. // executor callback, and why async functions synchronously
  36655. // execute code before the first await. Since we implement simple
  36656. // async functions in terms of async generators, it is especially
  36657. // important to get this right, even though it requires care.
  36658. previousPromise ? previousPromise.then(
  36659. callInvokeWithMethodAndArg,
  36660. // Avoid propagating failures to Promises returned by later
  36661. // invocations of the iterator.
  36662. callInvokeWithMethodAndArg
  36663. ) : callInvokeWithMethodAndArg();
  36664. }
  36665. // Define the unified helper method that is used to implement .next,
  36666. // .throw, and .return (see defineIteratorMethods).
  36667. this._invoke = enqueue;
  36668. }
  36669. defineIteratorMethods(AsyncIterator.prototype);
  36670. AsyncIterator.prototype[asyncIteratorSymbol] = function () {
  36671. return this;
  36672. };
  36673. runtime.AsyncIterator = AsyncIterator;
  36674. // Note that simple async functions are implemented on top of
  36675. // AsyncIterator objects; they just return a Promise for the value of
  36676. // the final result produced by the iterator.
  36677. runtime.async = function(innerFn, outerFn, self, tryLocsList) {
  36678. var iter = new AsyncIterator(
  36679. wrap(innerFn, outerFn, self, tryLocsList)
  36680. );
  36681. return runtime.isGeneratorFunction(outerFn)
  36682. ? iter // If outerFn is a generator, return the full iterator.
  36683. : iter.next().then(function(result) {
  36684. return result.done ? result.value : iter.next();
  36685. });
  36686. };
  36687. function makeInvokeMethod(innerFn, self, context) {
  36688. var state = GenStateSuspendedStart;
  36689. return function invoke(method, arg) {
  36690. if (state === GenStateExecuting) {
  36691. throw new Error("Generator is already running");
  36692. }
  36693. if (state === GenStateCompleted) {
  36694. if (method === "throw") {
  36695. throw arg;
  36696. }
  36697. // Be forgiving, per 25.3.3.3.3 of the spec:
  36698. // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
  36699. return doneResult();
  36700. }
  36701. context.method = method;
  36702. context.arg = arg;
  36703. while (true) {
  36704. var delegate = context.delegate;
  36705. if (delegate) {
  36706. var delegateResult = maybeInvokeDelegate(delegate, context);
  36707. if (delegateResult) {
  36708. if (delegateResult === ContinueSentinel) continue;
  36709. return delegateResult;
  36710. }
  36711. }
  36712. if (context.method === "next") {
  36713. // Setting context._sent for legacy support of Babel's
  36714. // function.sent implementation.
  36715. context.sent = context._sent = context.arg;
  36716. } else if (context.method === "throw") {
  36717. if (state === GenStateSuspendedStart) {
  36718. state = GenStateCompleted;
  36719. throw context.arg;
  36720. }
  36721. context.dispatchException(context.arg);
  36722. } else if (context.method === "return") {
  36723. context.abrupt("return", context.arg);
  36724. }
  36725. state = GenStateExecuting;
  36726. var record = tryCatch(innerFn, self, context);
  36727. if (record.type === "normal") {
  36728. // If an exception is thrown from innerFn, we leave state ===
  36729. // GenStateExecuting and loop back for another invocation.
  36730. state = context.done
  36731. ? GenStateCompleted
  36732. : GenStateSuspendedYield;
  36733. if (record.arg === ContinueSentinel) {
  36734. continue;
  36735. }
  36736. return {
  36737. value: record.arg,
  36738. done: context.done
  36739. };
  36740. } else if (record.type === "throw") {
  36741. state = GenStateCompleted;
  36742. // Dispatch the exception by looping back around to the
  36743. // context.dispatchException(context.arg) call above.
  36744. context.method = "throw";
  36745. context.arg = record.arg;
  36746. }
  36747. }
  36748. };
  36749. }
  36750. // Call delegate.iterator[context.method](context.arg) and handle the
  36751. // result, either by returning a { value, done } result from the
  36752. // delegate iterator, or by modifying context.method and context.arg,
  36753. // setting context.delegate to null, and returning the ContinueSentinel.
  36754. function maybeInvokeDelegate(delegate, context) {
  36755. var method = delegate.iterator[context.method];
  36756. if (method === undefined) {
  36757. // A .throw or .return when the delegate iterator has no .throw
  36758. // method always terminates the yield* loop.
  36759. context.delegate = null;
  36760. if (context.method === "throw") {
  36761. if (delegate.iterator.return) {
  36762. // If the delegate iterator has a return method, give it a
  36763. // chance to clean up.
  36764. context.method = "return";
  36765. context.arg = undefined;
  36766. maybeInvokeDelegate(delegate, context);
  36767. if (context.method === "throw") {
  36768. // If maybeInvokeDelegate(context) changed context.method from
  36769. // "return" to "throw", let that override the TypeError below.
  36770. return ContinueSentinel;
  36771. }
  36772. }
  36773. context.method = "throw";
  36774. context.arg = new TypeError(
  36775. "The iterator does not provide a 'throw' method");
  36776. }
  36777. return ContinueSentinel;
  36778. }
  36779. var record = tryCatch(method, delegate.iterator, context.arg);
  36780. if (record.type === "throw") {
  36781. context.method = "throw";
  36782. context.arg = record.arg;
  36783. context.delegate = null;
  36784. return ContinueSentinel;
  36785. }
  36786. var info = record.arg;
  36787. if (! info) {
  36788. context.method = "throw";
  36789. context.arg = new TypeError("iterator result is not an object");
  36790. context.delegate = null;
  36791. return ContinueSentinel;
  36792. }
  36793. if (info.done) {
  36794. // Assign the result of the finished delegate to the temporary
  36795. // variable specified by delegate.resultName (see delegateYield).
  36796. context[delegate.resultName] = info.value;
  36797. // Resume execution at the desired location (see delegateYield).
  36798. context.next = delegate.nextLoc;
  36799. // If context.method was "throw" but the delegate handled the
  36800. // exception, let the outer generator proceed normally. If
  36801. // context.method was "next", forget context.arg since it has been
  36802. // "consumed" by the delegate iterator. If context.method was
  36803. // "return", allow the original .return call to continue in the
  36804. // outer generator.
  36805. if (context.method !== "return") {
  36806. context.method = "next";
  36807. context.arg = undefined;
  36808. }
  36809. } else {
  36810. // Re-yield the result returned by the delegate method.
  36811. return info;
  36812. }
  36813. // The delegate iterator is finished, so forget it and continue with
  36814. // the outer generator.
  36815. context.delegate = null;
  36816. return ContinueSentinel;
  36817. }
  36818. // Define Generator.prototype.{next,throw,return} in terms of the
  36819. // unified ._invoke helper method.
  36820. defineIteratorMethods(Gp);
  36821. Gp[toStringTagSymbol] = "Generator";
  36822. // A Generator should always return itself as the iterator object when the
  36823. // @@iterator function is called on it. Some browsers' implementations of the
  36824. // iterator prototype chain incorrectly implement this, causing the Generator
  36825. // object to not be returned from this call. This ensures that doesn't happen.
  36826. // See https://github.com/facebook/regenerator/issues/274 for more details.
  36827. Gp[iteratorSymbol] = function() {
  36828. return this;
  36829. };
  36830. Gp.toString = function() {
  36831. return "[object Generator]";
  36832. };
  36833. function pushTryEntry(locs) {
  36834. var entry = { tryLoc: locs[0] };
  36835. if (1 in locs) {
  36836. entry.catchLoc = locs[1];
  36837. }
  36838. if (2 in locs) {
  36839. entry.finallyLoc = locs[2];
  36840. entry.afterLoc = locs[3];
  36841. }
  36842. this.tryEntries.push(entry);
  36843. }
  36844. function resetTryEntry(entry) {
  36845. var record = entry.completion || {};
  36846. record.type = "normal";
  36847. delete record.arg;
  36848. entry.completion = record;
  36849. }
  36850. function Context(tryLocsList) {
  36851. // The root entry object (effectively a try statement without a catch
  36852. // or a finally block) gives us a place to store values thrown from
  36853. // locations where there is no enclosing try statement.
  36854. this.tryEntries = [{ tryLoc: "root" }];
  36855. tryLocsList.forEach(pushTryEntry, this);
  36856. this.reset(true);
  36857. }
  36858. runtime.keys = function(object) {
  36859. var keys = [];
  36860. for (var key in object) {
  36861. keys.push(key);
  36862. }
  36863. keys.reverse();
  36864. // Rather than returning an object with a next method, we keep
  36865. // things simple and return the next function itself.
  36866. return function next() {
  36867. while (keys.length) {
  36868. var key = keys.pop();
  36869. if (key in object) {
  36870. next.value = key;
  36871. next.done = false;
  36872. return next;
  36873. }
  36874. }
  36875. // To avoid creating an additional object, we just hang the .value
  36876. // and .done properties off the next function object itself. This
  36877. // also ensures that the minifier will not anonymize the function.
  36878. next.done = true;
  36879. return next;
  36880. };
  36881. };
  36882. function values(iterable) {
  36883. if (iterable) {
  36884. var iteratorMethod = iterable[iteratorSymbol];
  36885. if (iteratorMethod) {
  36886. return iteratorMethod.call(iterable);
  36887. }
  36888. if (typeof iterable.next === "function") {
  36889. return iterable;
  36890. }
  36891. if (!isNaN(iterable.length)) {
  36892. var i = -1, next = function next() {
  36893. while (++i < iterable.length) {
  36894. if (hasOwn.call(iterable, i)) {
  36895. next.value = iterable[i];
  36896. next.done = false;
  36897. return next;
  36898. }
  36899. }
  36900. next.value = undefined;
  36901. next.done = true;
  36902. return next;
  36903. };
  36904. return next.next = next;
  36905. }
  36906. }
  36907. // Return an iterator with no values.
  36908. return { next: doneResult };
  36909. }
  36910. runtime.values = values;
  36911. function doneResult() {
  36912. return { value: undefined, done: true };
  36913. }
  36914. Context.prototype = {
  36915. constructor: Context,
  36916. reset: function(skipTempReset) {
  36917. this.prev = 0;
  36918. this.next = 0;
  36919. // Resetting context._sent for legacy support of Babel's
  36920. // function.sent implementation.
  36921. this.sent = this._sent = undefined;
  36922. this.done = false;
  36923. this.delegate = null;
  36924. this.method = "next";
  36925. this.arg = undefined;
  36926. this.tryEntries.forEach(resetTryEntry);
  36927. if (!skipTempReset) {
  36928. for (var name in this) {
  36929. // Not sure about the optimal order of these conditions:
  36930. if (name.charAt(0) === "t" &&
  36931. hasOwn.call(this, name) &&
  36932. !isNaN(+name.slice(1))) {
  36933. this[name] = undefined;
  36934. }
  36935. }
  36936. }
  36937. },
  36938. stop: function() {
  36939. this.done = true;
  36940. var rootEntry = this.tryEntries[0];
  36941. var rootRecord = rootEntry.completion;
  36942. if (rootRecord.type === "throw") {
  36943. throw rootRecord.arg;
  36944. }
  36945. return this.rval;
  36946. },
  36947. dispatchException: function(exception) {
  36948. if (this.done) {
  36949. throw exception;
  36950. }
  36951. var context = this;
  36952. function handle(loc, caught) {
  36953. record.type = "throw";
  36954. record.arg = exception;
  36955. context.next = loc;
  36956. if (caught) {
  36957. // If the dispatched exception was caught by a catch block,
  36958. // then let that catch block handle the exception normally.
  36959. context.method = "next";
  36960. context.arg = undefined;
  36961. }
  36962. return !! caught;
  36963. }
  36964. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  36965. var entry = this.tryEntries[i];
  36966. var record = entry.completion;
  36967. if (entry.tryLoc === "root") {
  36968. // Exception thrown outside of any try block that could handle
  36969. // it, so set the completion value of the entire function to
  36970. // throw the exception.
  36971. return handle("end");
  36972. }
  36973. if (entry.tryLoc <= this.prev) {
  36974. var hasCatch = hasOwn.call(entry, "catchLoc");
  36975. var hasFinally = hasOwn.call(entry, "finallyLoc");
  36976. if (hasCatch && hasFinally) {
  36977. if (this.prev < entry.catchLoc) {
  36978. return handle(entry.catchLoc, true);
  36979. } else if (this.prev < entry.finallyLoc) {
  36980. return handle(entry.finallyLoc);
  36981. }
  36982. } else if (hasCatch) {
  36983. if (this.prev < entry.catchLoc) {
  36984. return handle(entry.catchLoc, true);
  36985. }
  36986. } else if (hasFinally) {
  36987. if (this.prev < entry.finallyLoc) {
  36988. return handle(entry.finallyLoc);
  36989. }
  36990. } else {
  36991. throw new Error("try statement without catch or finally");
  36992. }
  36993. }
  36994. }
  36995. },
  36996. abrupt: function(type, arg) {
  36997. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  36998. var entry = this.tryEntries[i];
  36999. if (entry.tryLoc <= this.prev &&
  37000. hasOwn.call(entry, "finallyLoc") &&
  37001. this.prev < entry.finallyLoc) {
  37002. var finallyEntry = entry;
  37003. break;
  37004. }
  37005. }
  37006. if (finallyEntry &&
  37007. (type === "break" ||
  37008. type === "continue") &&
  37009. finallyEntry.tryLoc <= arg &&
  37010. arg <= finallyEntry.finallyLoc) {
  37011. // Ignore the finally entry if control is not jumping to a
  37012. // location outside the try/catch block.
  37013. finallyEntry = null;
  37014. }
  37015. var record = finallyEntry ? finallyEntry.completion : {};
  37016. record.type = type;
  37017. record.arg = arg;
  37018. if (finallyEntry) {
  37019. this.method = "next";
  37020. this.next = finallyEntry.finallyLoc;
  37021. return ContinueSentinel;
  37022. }
  37023. return this.complete(record);
  37024. },
  37025. complete: function(record, afterLoc) {
  37026. if (record.type === "throw") {
  37027. throw record.arg;
  37028. }
  37029. if (record.type === "break" ||
  37030. record.type === "continue") {
  37031. this.next = record.arg;
  37032. } else if (record.type === "return") {
  37033. this.rval = this.arg = record.arg;
  37034. this.method = "return";
  37035. this.next = "end";
  37036. } else if (record.type === "normal" && afterLoc) {
  37037. this.next = afterLoc;
  37038. }
  37039. return ContinueSentinel;
  37040. },
  37041. finish: function(finallyLoc) {
  37042. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  37043. var entry = this.tryEntries[i];
  37044. if (entry.finallyLoc === finallyLoc) {
  37045. this.complete(entry.completion, entry.afterLoc);
  37046. resetTryEntry(entry);
  37047. return ContinueSentinel;
  37048. }
  37049. }
  37050. },
  37051. "catch": function(tryLoc) {
  37052. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  37053. var entry = this.tryEntries[i];
  37054. if (entry.tryLoc === tryLoc) {
  37055. var record = entry.completion;
  37056. if (record.type === "throw") {
  37057. var thrown = record.arg;
  37058. resetTryEntry(entry);
  37059. }
  37060. return thrown;
  37061. }
  37062. }
  37063. // The context.catch method must only be called with a location
  37064. // argument that corresponds to a known catch block.
  37065. throw new Error("illegal catch attempt");
  37066. },
  37067. delegateYield: function(iterable, resultName, nextLoc) {
  37068. this.delegate = {
  37069. iterator: values(iterable),
  37070. resultName: resultName,
  37071. nextLoc: nextLoc
  37072. };
  37073. if (this.method === "next") {
  37074. // Deliberately forget the last sent value so that we don't
  37075. // accidentally pass it on to the delegate.
  37076. this.arg = undefined;
  37077. }
  37078. return ContinueSentinel;
  37079. }
  37080. };
  37081. })(
  37082. // Among the various tricks for obtaining a reference to the global
  37083. // object, this seems to be the most reliable technique that does not
  37084. // use indirect eval (which violates Content Security Policy).
  37085. typeof global === "object" ? global :
  37086. typeof window === "object" ? window :
  37087. typeof self === "object" ? self : this
  37088. );
  37089. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(47)))
  37090. /***/ }),
  37091. /* 367 */
  37092. /***/ (function(module, exports, __webpack_require__) {
  37093. __webpack_require__(374);
  37094. module.exports = __webpack_require__(33).RegExp.escape;
  37095. /***/ }),
  37096. /* 368 */
  37097. /***/ (function(module, exports, __webpack_require__) {
  37098. var isObject = __webpack_require__(5);
  37099. var isArray = __webpack_require__(91);
  37100. var SPECIES = __webpack_require__(6)('species');
  37101. module.exports = function (original) {
  37102. var C;
  37103. if (isArray(original)) {
  37104. C = original.constructor;
  37105. // cross-realm fallback
  37106. if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
  37107. if (isObject(C)) {
  37108. C = C[SPECIES];
  37109. if (C === null) C = undefined;
  37110. }
  37111. } return C === undefined ? Array : C;
  37112. };
  37113. /***/ }),
  37114. /* 369 */
  37115. /***/ (function(module, exports, __webpack_require__) {
  37116. "use strict";
  37117. // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
  37118. var fails = __webpack_require__(4);
  37119. var getTime = Date.prototype.getTime;
  37120. var $toISOString = Date.prototype.toISOString;
  37121. var lz = function (num) {
  37122. return num > 9 ? num : '0' + num;
  37123. };
  37124. // PhantomJS / old WebKit has a broken implementations
  37125. module.exports = (fails(function () {
  37126. return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';
  37127. }) || !fails(function () {
  37128. $toISOString.call(new Date(NaN));
  37129. })) ? function toISOString() {
  37130. if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');
  37131. var d = this;
  37132. var y = d.getUTCFullYear();
  37133. var m = d.getUTCMilliseconds();
  37134. var s = y < 0 ? '-' : y > 9999 ? '+' : '';
  37135. return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +
  37136. '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +
  37137. 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +
  37138. ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';
  37139. } : $toISOString;
  37140. /***/ }),
  37141. /* 370 */
  37142. /***/ (function(module, exports, __webpack_require__) {
  37143. "use strict";
  37144. var anObject = __webpack_require__(2);
  37145. var toPrimitive = __webpack_require__(37);
  37146. var NUMBER = 'number';
  37147. module.exports = function (hint) {
  37148. if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');
  37149. return toPrimitive(anObject(this), hint != NUMBER);
  37150. };
  37151. /***/ }),
  37152. /* 371 */
  37153. /***/ (function(module, exports, __webpack_require__) {
  37154. // all enumerable object keys, includes symbols
  37155. var getKeys = __webpack_require__(53);
  37156. var gOPS = __webpack_require__(95);
  37157. var pIE = __webpack_require__(73);
  37158. module.exports = function (it) {
  37159. var result = getKeys(it);
  37160. var getSymbols = gOPS.f;
  37161. if (getSymbols) {
  37162. var symbols = getSymbols(it);
  37163. var isEnum = pIE.f;
  37164. var i = 0;
  37165. var key;
  37166. while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
  37167. } return result;
  37168. };
  37169. /***/ }),
  37170. /* 372 */
  37171. /***/ (function(module, exports) {
  37172. module.exports = function (regExp, replace) {
  37173. var replacer = replace === Object(replace) ? function (part) {
  37174. return replace[part];
  37175. } : replace;
  37176. return function (it) {
  37177. return String(it).replace(regExp, replacer);
  37178. };
  37179. };
  37180. /***/ }),
  37181. /* 373 */
  37182. /***/ (function(module, exports) {
  37183. // 7.2.9 SameValue(x, y)
  37184. module.exports = Object.is || function is(x, y) {
  37185. // eslint-disable-next-line no-self-compare
  37186. return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
  37187. };
  37188. /***/ }),
  37189. /* 374 */
  37190. /***/ (function(module, exports, __webpack_require__) {
  37191. // https://github.com/benjamingr/RexExp.escape
  37192. var $export = __webpack_require__(0);
  37193. var $re = __webpack_require__(372)(/[\\^$*+?.()|[\]{}]/g, '\\$&');
  37194. $export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });
  37195. /***/ }),
  37196. /* 375 */
  37197. /***/ (function(module, exports, __webpack_require__) {
  37198. // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
  37199. var $export = __webpack_require__(0);
  37200. $export($export.P, 'Array', { copyWithin: __webpack_require__(199) });
  37201. __webpack_require__(43)('copyWithin');
  37202. /***/ }),
  37203. /* 376 */
  37204. /***/ (function(module, exports, __webpack_require__) {
  37205. "use strict";
  37206. var $export = __webpack_require__(0);
  37207. var $every = __webpack_require__(32)(4);
  37208. $export($export.P + $export.F * !__webpack_require__(29)([].every, true), 'Array', {
  37209. // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])
  37210. every: function every(callbackfn /* , thisArg */) {
  37211. return $every(this, callbackfn, arguments[1]);
  37212. }
  37213. });
  37214. /***/ }),
  37215. /* 377 */
  37216. /***/ (function(module, exports, __webpack_require__) {
  37217. // 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
  37218. var $export = __webpack_require__(0);
  37219. $export($export.P, 'Array', { fill: __webpack_require__(128) });
  37220. __webpack_require__(43)('fill');
  37221. /***/ }),
  37222. /* 378 */
  37223. /***/ (function(module, exports, __webpack_require__) {
  37224. "use strict";
  37225. var $export = __webpack_require__(0);
  37226. var $filter = __webpack_require__(32)(2);
  37227. $export($export.P + $export.F * !__webpack_require__(29)([].filter, true), 'Array', {
  37228. // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])
  37229. filter: function filter(callbackfn /* , thisArg */) {
  37230. return $filter(this, callbackfn, arguments[1]);
  37231. }
  37232. });
  37233. /***/ }),
  37234. /* 379 */
  37235. /***/ (function(module, exports, __webpack_require__) {
  37236. "use strict";
  37237. // 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
  37238. var $export = __webpack_require__(0);
  37239. var $find = __webpack_require__(32)(6);
  37240. var KEY = 'findIndex';
  37241. var forced = true;
  37242. // Shouldn't skip holes
  37243. if (KEY in []) Array(1)[KEY](function () { forced = false; });
  37244. $export($export.P + $export.F * forced, 'Array', {
  37245. findIndex: function findIndex(callbackfn /* , that = undefined */) {
  37246. return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  37247. }
  37248. });
  37249. __webpack_require__(43)(KEY);
  37250. /***/ }),
  37251. /* 380 */
  37252. /***/ (function(module, exports, __webpack_require__) {
  37253. "use strict";
  37254. // 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
  37255. var $export = __webpack_require__(0);
  37256. var $find = __webpack_require__(32)(5);
  37257. var KEY = 'find';
  37258. var forced = true;
  37259. // Shouldn't skip holes
  37260. if (KEY in []) Array(1)[KEY](function () { forced = false; });
  37261. $export($export.P + $export.F * forced, 'Array', {
  37262. find: function find(callbackfn /* , that = undefined */) {
  37263. return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  37264. }
  37265. });
  37266. __webpack_require__(43)(KEY);
  37267. /***/ }),
  37268. /* 381 */
  37269. /***/ (function(module, exports, __webpack_require__) {
  37270. "use strict";
  37271. var $export = __webpack_require__(0);
  37272. var $forEach = __webpack_require__(32)(0);
  37273. var STRICT = __webpack_require__(29)([].forEach, true);
  37274. $export($export.P + $export.F * !STRICT, 'Array', {
  37275. // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])
  37276. forEach: function forEach(callbackfn /* , thisArg */) {
  37277. return $forEach(this, callbackfn, arguments[1]);
  37278. }
  37279. });
  37280. /***/ }),
  37281. /* 382 */
  37282. /***/ (function(module, exports, __webpack_require__) {
  37283. "use strict";
  37284. var ctx = __webpack_require__(28);
  37285. var $export = __webpack_require__(0);
  37286. var toObject = __webpack_require__(14);
  37287. var call = __webpack_require__(210);
  37288. var isArrayIter = __webpack_require__(136);
  37289. var toLength = __webpack_require__(11);
  37290. var createProperty = __webpack_require__(130);
  37291. var getIterFn = __webpack_require__(153);
  37292. $export($export.S + $export.F * !__webpack_require__(93)(function (iter) { Array.from(iter); }), 'Array', {
  37293. // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
  37294. from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
  37295. var O = toObject(arrayLike);
  37296. var C = typeof this == 'function' ? this : Array;
  37297. var aLen = arguments.length;
  37298. var mapfn = aLen > 1 ? arguments[1] : undefined;
  37299. var mapping = mapfn !== undefined;
  37300. var index = 0;
  37301. var iterFn = getIterFn(O);
  37302. var length, result, step, iterator;
  37303. if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
  37304. // if object isn't iterable or it's array with default iterator - use simple case
  37305. if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {
  37306. for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
  37307. createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
  37308. }
  37309. } else {
  37310. length = toLength(O.length);
  37311. for (result = new C(length); length > index; index++) {
  37312. createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
  37313. }
  37314. }
  37315. result.length = index;
  37316. return result;
  37317. }
  37318. });
  37319. /***/ }),
  37320. /* 383 */
  37321. /***/ (function(module, exports, __webpack_require__) {
  37322. "use strict";
  37323. var $export = __webpack_require__(0);
  37324. var $indexOf = __webpack_require__(87)(false);
  37325. var $native = [].indexOf;
  37326. var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;
  37327. $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(29)($native)), 'Array', {
  37328. // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])
  37329. indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
  37330. return NEGATIVE_ZERO
  37331. // convert -0 to +0
  37332. ? $native.apply(this, arguments) || 0
  37333. : $indexOf(this, searchElement, arguments[1]);
  37334. }
  37335. });
  37336. /***/ }),
  37337. /* 384 */
  37338. /***/ (function(module, exports, __webpack_require__) {
  37339. // 22.1.2.2 / 15.4.3.2 Array.isArray(arg)
  37340. var $export = __webpack_require__(0);
  37341. $export($export.S, 'Array', { isArray: __webpack_require__(91) });
  37342. /***/ }),
  37343. /* 385 */
  37344. /***/ (function(module, exports, __webpack_require__) {
  37345. "use strict";
  37346. // 22.1.3.13 Array.prototype.join(separator)
  37347. var $export = __webpack_require__(0);
  37348. var toIObject = __webpack_require__(24);
  37349. var arrayJoin = [].join;
  37350. // fallback for not array-like strings
  37351. $export($export.P + $export.F * (__webpack_require__(72) != Object || !__webpack_require__(29)(arrayJoin)), 'Array', {
  37352. join: function join(separator) {
  37353. return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);
  37354. }
  37355. });
  37356. /***/ }),
  37357. /* 386 */
  37358. /***/ (function(module, exports, __webpack_require__) {
  37359. "use strict";
  37360. var $export = __webpack_require__(0);
  37361. var toIObject = __webpack_require__(24);
  37362. var toInteger = __webpack_require__(36);
  37363. var toLength = __webpack_require__(11);
  37364. var $native = [].lastIndexOf;
  37365. var NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;
  37366. $export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(29)($native)), 'Array', {
  37367. // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])
  37368. lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
  37369. // convert -0 to +0
  37370. if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;
  37371. var O = toIObject(this);
  37372. var length = toLength(O.length);
  37373. var index = length - 1;
  37374. if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));
  37375. if (index < 0) index = length + index;
  37376. for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;
  37377. return -1;
  37378. }
  37379. });
  37380. /***/ }),
  37381. /* 387 */
  37382. /***/ (function(module, exports, __webpack_require__) {
  37383. "use strict";
  37384. var $export = __webpack_require__(0);
  37385. var $map = __webpack_require__(32)(1);
  37386. $export($export.P + $export.F * !__webpack_require__(29)([].map, true), 'Array', {
  37387. // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])
  37388. map: function map(callbackfn /* , thisArg */) {
  37389. return $map(this, callbackfn, arguments[1]);
  37390. }
  37391. });
  37392. /***/ }),
  37393. /* 388 */
  37394. /***/ (function(module, exports, __webpack_require__) {
  37395. "use strict";
  37396. var $export = __webpack_require__(0);
  37397. var createProperty = __webpack_require__(130);
  37398. // WebKit Array.of isn't generic
  37399. $export($export.S + $export.F * __webpack_require__(4)(function () {
  37400. function F() { /* empty */ }
  37401. return !(Array.of.call(F) instanceof F);
  37402. }), 'Array', {
  37403. // 22.1.2.3 Array.of( ...items)
  37404. of: function of(/* ...args */) {
  37405. var index = 0;
  37406. var aLen = arguments.length;
  37407. var result = new (typeof this == 'function' ? this : Array)(aLen);
  37408. while (aLen > index) createProperty(result, index, arguments[index++]);
  37409. result.length = aLen;
  37410. return result;
  37411. }
  37412. });
  37413. /***/ }),
  37414. /* 389 */
  37415. /***/ (function(module, exports, __webpack_require__) {
  37416. "use strict";
  37417. var $export = __webpack_require__(0);
  37418. var $reduce = __webpack_require__(201);
  37419. $export($export.P + $export.F * !__webpack_require__(29)([].reduceRight, true), 'Array', {
  37420. // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])
  37421. reduceRight: function reduceRight(callbackfn /* , initialValue */) {
  37422. return $reduce(this, callbackfn, arguments.length, arguments[1], true);
  37423. }
  37424. });
  37425. /***/ }),
  37426. /* 390 */
  37427. /***/ (function(module, exports, __webpack_require__) {
  37428. "use strict";
  37429. var $export = __webpack_require__(0);
  37430. var $reduce = __webpack_require__(201);
  37431. $export($export.P + $export.F * !__webpack_require__(29)([].reduce, true), 'Array', {
  37432. // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])
  37433. reduce: function reduce(callbackfn /* , initialValue */) {
  37434. return $reduce(this, callbackfn, arguments.length, arguments[1], false);
  37435. }
  37436. });
  37437. /***/ }),
  37438. /* 391 */
  37439. /***/ (function(module, exports, __webpack_require__) {
  37440. "use strict";
  37441. var $export = __webpack_require__(0);
  37442. var html = __webpack_require__(134);
  37443. var cof = __webpack_require__(27);
  37444. var toAbsoluteIndex = __webpack_require__(57);
  37445. var toLength = __webpack_require__(11);
  37446. var arraySlice = [].slice;
  37447. // fallback for not array-like ES3 strings and DOM objects
  37448. $export($export.P + $export.F * __webpack_require__(4)(function () {
  37449. if (html) arraySlice.call(html);
  37450. }), 'Array', {
  37451. slice: function slice(begin, end) {
  37452. var len = toLength(this.length);
  37453. var klass = cof(this);
  37454. end = end === undefined ? len : end;
  37455. if (klass == 'Array') return arraySlice.call(this, begin, end);
  37456. var start = toAbsoluteIndex(begin, len);
  37457. var upTo = toAbsoluteIndex(end, len);
  37458. var size = toLength(upTo - start);
  37459. var cloned = new Array(size);
  37460. var i = 0;
  37461. for (; i < size; i++) cloned[i] = klass == 'String'
  37462. ? this.charAt(start + i)
  37463. : this[start + i];
  37464. return cloned;
  37465. }
  37466. });
  37467. /***/ }),
  37468. /* 392 */
  37469. /***/ (function(module, exports, __webpack_require__) {
  37470. "use strict";
  37471. var $export = __webpack_require__(0);
  37472. var $some = __webpack_require__(32)(3);
  37473. $export($export.P + $export.F * !__webpack_require__(29)([].some, true), 'Array', {
  37474. // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])
  37475. some: function some(callbackfn /* , thisArg */) {
  37476. return $some(this, callbackfn, arguments[1]);
  37477. }
  37478. });
  37479. /***/ }),
  37480. /* 393 */
  37481. /***/ (function(module, exports, __webpack_require__) {
  37482. "use strict";
  37483. var $export = __webpack_require__(0);
  37484. var aFunction = __webpack_require__(15);
  37485. var toObject = __webpack_require__(14);
  37486. var fails = __webpack_require__(4);
  37487. var $sort = [].sort;
  37488. var test = [1, 2, 3];
  37489. $export($export.P + $export.F * (fails(function () {
  37490. // IE8-
  37491. test.sort(undefined);
  37492. }) || !fails(function () {
  37493. // V8 bug
  37494. test.sort(null);
  37495. // Old WebKit
  37496. }) || !__webpack_require__(29)($sort)), 'Array', {
  37497. // 22.1.3.25 Array.prototype.sort(comparefn)
  37498. sort: function sort(comparefn) {
  37499. return comparefn === undefined
  37500. ? $sort.call(toObject(this))
  37501. : $sort.call(toObject(this), aFunction(comparefn));
  37502. }
  37503. });
  37504. /***/ }),
  37505. /* 394 */
  37506. /***/ (function(module, exports, __webpack_require__) {
  37507. __webpack_require__(56)('Array');
  37508. /***/ }),
  37509. /* 395 */
  37510. /***/ (function(module, exports, __webpack_require__) {
  37511. // 20.3.3.1 / 15.9.4.4 Date.now()
  37512. var $export = __webpack_require__(0);
  37513. $export($export.S, 'Date', { now: function () { return new Date().getTime(); } });
  37514. /***/ }),
  37515. /* 396 */
  37516. /***/ (function(module, exports, __webpack_require__) {
  37517. // 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
  37518. var $export = __webpack_require__(0);
  37519. var toISOString = __webpack_require__(369);
  37520. // PhantomJS / old WebKit has a broken implementations
  37521. $export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {
  37522. toISOString: toISOString
  37523. });
  37524. /***/ }),
  37525. /* 397 */
  37526. /***/ (function(module, exports, __webpack_require__) {
  37527. "use strict";
  37528. var $export = __webpack_require__(0);
  37529. var toObject = __webpack_require__(14);
  37530. var toPrimitive = __webpack_require__(37);
  37531. $export($export.P + $export.F * __webpack_require__(4)(function () {
  37532. return new Date(NaN).toJSON() !== null
  37533. || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;
  37534. }), 'Date', {
  37535. // eslint-disable-next-line no-unused-vars
  37536. toJSON: function toJSON(key) {
  37537. var O = toObject(this);
  37538. var pv = toPrimitive(O);
  37539. return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();
  37540. }
  37541. });
  37542. /***/ }),
  37543. /* 398 */
  37544. /***/ (function(module, exports, __webpack_require__) {
  37545. var TO_PRIMITIVE = __webpack_require__(6)('toPrimitive');
  37546. var proto = Date.prototype;
  37547. if (!(TO_PRIMITIVE in proto)) __webpack_require__(19)(proto, TO_PRIMITIVE, __webpack_require__(370));
  37548. /***/ }),
  37549. /* 399 */
  37550. /***/ (function(module, exports, __webpack_require__) {
  37551. var DateProto = Date.prototype;
  37552. var INVALID_DATE = 'Invalid Date';
  37553. var TO_STRING = 'toString';
  37554. var $toString = DateProto[TO_STRING];
  37555. var getTime = DateProto.getTime;
  37556. if (new Date(NaN) + '' != INVALID_DATE) {
  37557. __webpack_require__(20)(DateProto, TO_STRING, function toString() {
  37558. var value = getTime.call(this);
  37559. // eslint-disable-next-line no-self-compare
  37560. return value === value ? $toString.call(this) : INVALID_DATE;
  37561. });
  37562. }
  37563. /***/ }),
  37564. /* 400 */
  37565. /***/ (function(module, exports, __webpack_require__) {
  37566. // 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)
  37567. var $export = __webpack_require__(0);
  37568. $export($export.P, 'Function', { bind: __webpack_require__(202) });
  37569. /***/ }),
  37570. /* 401 */
  37571. /***/ (function(module, exports, __webpack_require__) {
  37572. "use strict";
  37573. var isObject = __webpack_require__(5);
  37574. var getPrototypeOf = __webpack_require__(23);
  37575. var HAS_INSTANCE = __webpack_require__(6)('hasInstance');
  37576. var FunctionProto = Function.prototype;
  37577. // 19.2.3.6 Function.prototype[@@hasInstance](V)
  37578. if (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(10).f(FunctionProto, HAS_INSTANCE, { value: function (O) {
  37579. if (typeof this != 'function' || !isObject(O)) return false;
  37580. if (!isObject(this.prototype)) return O instanceof this;
  37581. // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:
  37582. while (O = getPrototypeOf(O)) if (this.prototype === O) return true;
  37583. return false;
  37584. } });
  37585. /***/ }),
  37586. /* 402 */
  37587. /***/ (function(module, exports, __webpack_require__) {
  37588. var dP = __webpack_require__(10).f;
  37589. var FProto = Function.prototype;
  37590. var nameRE = /^\s*function ([^ (]*)/;
  37591. var NAME = 'name';
  37592. // 19.2.4.2 name
  37593. NAME in FProto || __webpack_require__(9) && dP(FProto, NAME, {
  37594. configurable: true,
  37595. get: function () {
  37596. try {
  37597. return ('' + this).match(nameRE)[1];
  37598. } catch (e) {
  37599. return '';
  37600. }
  37601. }
  37602. });
  37603. /***/ }),
  37604. /* 403 */
  37605. /***/ (function(module, exports, __webpack_require__) {
  37606. // 20.2.2.3 Math.acosh(x)
  37607. var $export = __webpack_require__(0);
  37608. var log1p = __webpack_require__(213);
  37609. var sqrt = Math.sqrt;
  37610. var $acosh = Math.acosh;
  37611. $export($export.S + $export.F * !($acosh
  37612. // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
  37613. && Math.floor($acosh(Number.MAX_VALUE)) == 710
  37614. // Tor Browser bug: Math.acosh(Infinity) -> NaN
  37615. && $acosh(Infinity) == Infinity
  37616. ), 'Math', {
  37617. acosh: function acosh(x) {
  37618. return (x = +x) < 1 ? NaN : x > 94906265.62425156
  37619. ? Math.log(x) + Math.LN2
  37620. : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
  37621. }
  37622. });
  37623. /***/ }),
  37624. /* 404 */
  37625. /***/ (function(module, exports, __webpack_require__) {
  37626. // 20.2.2.5 Math.asinh(x)
  37627. var $export = __webpack_require__(0);
  37628. var $asinh = Math.asinh;
  37629. function asinh(x) {
  37630. return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
  37631. }
  37632. // Tor Browser bug: Math.asinh(0) -> -0
  37633. $export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });
  37634. /***/ }),
  37635. /* 405 */
  37636. /***/ (function(module, exports, __webpack_require__) {
  37637. // 20.2.2.7 Math.atanh(x)
  37638. var $export = __webpack_require__(0);
  37639. var $atanh = Math.atanh;
  37640. // Tor Browser bug: Math.atanh(-0) -> 0
  37641. $export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
  37642. atanh: function atanh(x) {
  37643. return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
  37644. }
  37645. });
  37646. /***/ }),
  37647. /* 406 */
  37648. /***/ (function(module, exports, __webpack_require__) {
  37649. // 20.2.2.9 Math.cbrt(x)
  37650. var $export = __webpack_require__(0);
  37651. var sign = __webpack_require__(140);
  37652. $export($export.S, 'Math', {
  37653. cbrt: function cbrt(x) {
  37654. return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
  37655. }
  37656. });
  37657. /***/ }),
  37658. /* 407 */
  37659. /***/ (function(module, exports, __webpack_require__) {
  37660. // 20.2.2.11 Math.clz32(x)
  37661. var $export = __webpack_require__(0);
  37662. $export($export.S, 'Math', {
  37663. clz32: function clz32(x) {
  37664. return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
  37665. }
  37666. });
  37667. /***/ }),
  37668. /* 408 */
  37669. /***/ (function(module, exports, __webpack_require__) {
  37670. // 20.2.2.12 Math.cosh(x)
  37671. var $export = __webpack_require__(0);
  37672. var exp = Math.exp;
  37673. $export($export.S, 'Math', {
  37674. cosh: function cosh(x) {
  37675. return (exp(x = +x) + exp(-x)) / 2;
  37676. }
  37677. });
  37678. /***/ }),
  37679. /* 409 */
  37680. /***/ (function(module, exports, __webpack_require__) {
  37681. // 20.2.2.14 Math.expm1(x)
  37682. var $export = __webpack_require__(0);
  37683. var $expm1 = __webpack_require__(139);
  37684. $export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });
  37685. /***/ }),
  37686. /* 410 */
  37687. /***/ (function(module, exports, __webpack_require__) {
  37688. // 20.2.2.16 Math.fround(x)
  37689. var $export = __webpack_require__(0);
  37690. $export($export.S, 'Math', { fround: __webpack_require__(212) });
  37691. /***/ }),
  37692. /* 411 */
  37693. /***/ (function(module, exports, __webpack_require__) {
  37694. // 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
  37695. var $export = __webpack_require__(0);
  37696. var abs = Math.abs;
  37697. $export($export.S, 'Math', {
  37698. hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars
  37699. var sum = 0;
  37700. var i = 0;
  37701. var aLen = arguments.length;
  37702. var larg = 0;
  37703. var arg, div;
  37704. while (i < aLen) {
  37705. arg = abs(arguments[i++]);
  37706. if (larg < arg) {
  37707. div = larg / arg;
  37708. sum = sum * div * div + 1;
  37709. larg = arg;
  37710. } else if (arg > 0) {
  37711. div = arg / larg;
  37712. sum += div * div;
  37713. } else sum += arg;
  37714. }
  37715. return larg === Infinity ? Infinity : larg * Math.sqrt(sum);
  37716. }
  37717. });
  37718. /***/ }),
  37719. /* 412 */
  37720. /***/ (function(module, exports, __webpack_require__) {
  37721. // 20.2.2.18 Math.imul(x, y)
  37722. var $export = __webpack_require__(0);
  37723. var $imul = Math.imul;
  37724. // some WebKit versions fails with big numbers, some has wrong arity
  37725. $export($export.S + $export.F * __webpack_require__(4)(function () {
  37726. return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
  37727. }), 'Math', {
  37728. imul: function imul(x, y) {
  37729. var UINT16 = 0xffff;
  37730. var xn = +x;
  37731. var yn = +y;
  37732. var xl = UINT16 & xn;
  37733. var yl = UINT16 & yn;
  37734. return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
  37735. }
  37736. });
  37737. /***/ }),
  37738. /* 413 */
  37739. /***/ (function(module, exports, __webpack_require__) {
  37740. // 20.2.2.21 Math.log10(x)
  37741. var $export = __webpack_require__(0);
  37742. $export($export.S, 'Math', {
  37743. log10: function log10(x) {
  37744. return Math.log(x) * Math.LOG10E;
  37745. }
  37746. });
  37747. /***/ }),
  37748. /* 414 */
  37749. /***/ (function(module, exports, __webpack_require__) {
  37750. // 20.2.2.20 Math.log1p(x)
  37751. var $export = __webpack_require__(0);
  37752. $export($export.S, 'Math', { log1p: __webpack_require__(213) });
  37753. /***/ }),
  37754. /* 415 */
  37755. /***/ (function(module, exports, __webpack_require__) {
  37756. // 20.2.2.22 Math.log2(x)
  37757. var $export = __webpack_require__(0);
  37758. $export($export.S, 'Math', {
  37759. log2: function log2(x) {
  37760. return Math.log(x) / Math.LN2;
  37761. }
  37762. });
  37763. /***/ }),
  37764. /* 416 */
  37765. /***/ (function(module, exports, __webpack_require__) {
  37766. // 20.2.2.28 Math.sign(x)
  37767. var $export = __webpack_require__(0);
  37768. $export($export.S, 'Math', { sign: __webpack_require__(140) });
  37769. /***/ }),
  37770. /* 417 */
  37771. /***/ (function(module, exports, __webpack_require__) {
  37772. // 20.2.2.30 Math.sinh(x)
  37773. var $export = __webpack_require__(0);
  37774. var expm1 = __webpack_require__(139);
  37775. var exp = Math.exp;
  37776. // V8 near Chromium 38 has a problem with very small numbers
  37777. $export($export.S + $export.F * __webpack_require__(4)(function () {
  37778. return !Math.sinh(-2e-17) != -2e-17;
  37779. }), 'Math', {
  37780. sinh: function sinh(x) {
  37781. return Math.abs(x = +x) < 1
  37782. ? (expm1(x) - expm1(-x)) / 2
  37783. : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);
  37784. }
  37785. });
  37786. /***/ }),
  37787. /* 418 */
  37788. /***/ (function(module, exports, __webpack_require__) {
  37789. // 20.2.2.33 Math.tanh(x)
  37790. var $export = __webpack_require__(0);
  37791. var expm1 = __webpack_require__(139);
  37792. var exp = Math.exp;
  37793. $export($export.S, 'Math', {
  37794. tanh: function tanh(x) {
  37795. var a = expm1(x = +x);
  37796. var b = expm1(-x);
  37797. return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));
  37798. }
  37799. });
  37800. /***/ }),
  37801. /* 419 */
  37802. /***/ (function(module, exports, __webpack_require__) {
  37803. // 20.2.2.34 Math.trunc(x)
  37804. var $export = __webpack_require__(0);
  37805. $export($export.S, 'Math', {
  37806. trunc: function trunc(it) {
  37807. return (it > 0 ? Math.floor : Math.ceil)(it);
  37808. }
  37809. });
  37810. /***/ }),
  37811. /* 420 */
  37812. /***/ (function(module, exports, __webpack_require__) {
  37813. "use strict";
  37814. var global = __webpack_require__(3);
  37815. var has = __webpack_require__(18);
  37816. var cof = __webpack_require__(27);
  37817. var inheritIfRequired = __webpack_require__(135);
  37818. var toPrimitive = __webpack_require__(37);
  37819. var fails = __webpack_require__(4);
  37820. var gOPN = __webpack_require__(52).f;
  37821. var gOPD = __webpack_require__(22).f;
  37822. var dP = __webpack_require__(10).f;
  37823. var $trim = __webpack_require__(65).trim;
  37824. var NUMBER = 'Number';
  37825. var $Number = global[NUMBER];
  37826. var Base = $Number;
  37827. var proto = $Number.prototype;
  37828. // Opera ~12 has broken Object#toString
  37829. var BROKEN_COF = cof(__webpack_require__(51)(proto)) == NUMBER;
  37830. var TRIM = 'trim' in String.prototype;
  37831. // 7.1.3 ToNumber(argument)
  37832. var toNumber = function (argument) {
  37833. var it = toPrimitive(argument, false);
  37834. if (typeof it == 'string' && it.length > 2) {
  37835. it = TRIM ? it.trim() : $trim(it, 3);
  37836. var first = it.charCodeAt(0);
  37837. var third, radix, maxCode;
  37838. if (first === 43 || first === 45) {
  37839. third = it.charCodeAt(2);
  37840. if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
  37841. } else if (first === 48) {
  37842. switch (it.charCodeAt(1)) {
  37843. case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i
  37844. case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i
  37845. default: return +it;
  37846. }
  37847. for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {
  37848. code = digits.charCodeAt(i);
  37849. // parseInt parses a string to a first unavailable symbol
  37850. // but ToNumber should return NaN if a string contains unavailable symbols
  37851. if (code < 48 || code > maxCode) return NaN;
  37852. } return parseInt(digits, radix);
  37853. }
  37854. } return +it;
  37855. };
  37856. if (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {
  37857. $Number = function Number(value) {
  37858. var it = arguments.length < 1 ? 0 : value;
  37859. var that = this;
  37860. return that instanceof $Number
  37861. // check on 1..constructor(foo) case
  37862. && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)
  37863. ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);
  37864. };
  37865. for (var keys = __webpack_require__(9) ? gOPN(Base) : (
  37866. // ES3:
  37867. 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
  37868. // ES6 (in case, if modules with ES6 Number statics required before):
  37869. 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
  37870. 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'
  37871. ).split(','), j = 0, key; keys.length > j; j++) {
  37872. if (has(Base, key = keys[j]) && !has($Number, key)) {
  37873. dP($Number, key, gOPD(Base, key));
  37874. }
  37875. }
  37876. $Number.prototype = proto;
  37877. proto.constructor = $Number;
  37878. __webpack_require__(20)(global, NUMBER, $Number);
  37879. }
  37880. /***/ }),
  37881. /* 421 */
  37882. /***/ (function(module, exports, __webpack_require__) {
  37883. // 20.1.2.1 Number.EPSILON
  37884. var $export = __webpack_require__(0);
  37885. $export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });
  37886. /***/ }),
  37887. /* 422 */
  37888. /***/ (function(module, exports, __webpack_require__) {
  37889. // 20.1.2.2 Number.isFinite(number)
  37890. var $export = __webpack_require__(0);
  37891. var _isFinite = __webpack_require__(3).isFinite;
  37892. $export($export.S, 'Number', {
  37893. isFinite: function isFinite(it) {
  37894. return typeof it == 'number' && _isFinite(it);
  37895. }
  37896. });
  37897. /***/ }),
  37898. /* 423 */
  37899. /***/ (function(module, exports, __webpack_require__) {
  37900. // 20.1.2.3 Number.isInteger(number)
  37901. var $export = __webpack_require__(0);
  37902. $export($export.S, 'Number', { isInteger: __webpack_require__(209) });
  37903. /***/ }),
  37904. /* 424 */
  37905. /***/ (function(module, exports, __webpack_require__) {
  37906. // 20.1.2.4 Number.isNaN(number)
  37907. var $export = __webpack_require__(0);
  37908. $export($export.S, 'Number', {
  37909. isNaN: function isNaN(number) {
  37910. // eslint-disable-next-line no-self-compare
  37911. return number != number;
  37912. }
  37913. });
  37914. /***/ }),
  37915. /* 425 */
  37916. /***/ (function(module, exports, __webpack_require__) {
  37917. // 20.1.2.5 Number.isSafeInteger(number)
  37918. var $export = __webpack_require__(0);
  37919. var isInteger = __webpack_require__(209);
  37920. var abs = Math.abs;
  37921. $export($export.S, 'Number', {
  37922. isSafeInteger: function isSafeInteger(number) {
  37923. return isInteger(number) && abs(number) <= 0x1fffffffffffff;
  37924. }
  37925. });
  37926. /***/ }),
  37927. /* 426 */
  37928. /***/ (function(module, exports, __webpack_require__) {
  37929. // 20.1.2.6 Number.MAX_SAFE_INTEGER
  37930. var $export = __webpack_require__(0);
  37931. $export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });
  37932. /***/ }),
  37933. /* 427 */
  37934. /***/ (function(module, exports, __webpack_require__) {
  37935. // 20.1.2.10 Number.MIN_SAFE_INTEGER
  37936. var $export = __webpack_require__(0);
  37937. $export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });
  37938. /***/ }),
  37939. /* 428 */
  37940. /***/ (function(module, exports, __webpack_require__) {
  37941. var $export = __webpack_require__(0);
  37942. var $parseFloat = __webpack_require__(221);
  37943. // 20.1.2.12 Number.parseFloat(string)
  37944. $export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });
  37945. /***/ }),
  37946. /* 429 */
  37947. /***/ (function(module, exports, __webpack_require__) {
  37948. var $export = __webpack_require__(0);
  37949. var $parseInt = __webpack_require__(222);
  37950. // 20.1.2.13 Number.parseInt(string, radix)
  37951. $export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });
  37952. /***/ }),
  37953. /* 430 */
  37954. /***/ (function(module, exports, __webpack_require__) {
  37955. "use strict";
  37956. var $export = __webpack_require__(0);
  37957. var toInteger = __webpack_require__(36);
  37958. var aNumberValue = __webpack_require__(198);
  37959. var repeat = __webpack_require__(147);
  37960. var $toFixed = 1.0.toFixed;
  37961. var floor = Math.floor;
  37962. var data = [0, 0, 0, 0, 0, 0];
  37963. var ERROR = 'Number.toFixed: incorrect invocation!';
  37964. var ZERO = '0';
  37965. var multiply = function (n, c) {
  37966. var i = -1;
  37967. var c2 = c;
  37968. while (++i < 6) {
  37969. c2 += n * data[i];
  37970. data[i] = c2 % 1e7;
  37971. c2 = floor(c2 / 1e7);
  37972. }
  37973. };
  37974. var divide = function (n) {
  37975. var i = 6;
  37976. var c = 0;
  37977. while (--i >= 0) {
  37978. c += data[i];
  37979. data[i] = floor(c / n);
  37980. c = (c % n) * 1e7;
  37981. }
  37982. };
  37983. var numToString = function () {
  37984. var i = 6;
  37985. var s = '';
  37986. while (--i >= 0) {
  37987. if (s !== '' || i === 0 || data[i] !== 0) {
  37988. var t = String(data[i]);
  37989. s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;
  37990. }
  37991. } return s;
  37992. };
  37993. var pow = function (x, n, acc) {
  37994. return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
  37995. };
  37996. var log = function (x) {
  37997. var n = 0;
  37998. var x2 = x;
  37999. while (x2 >= 4096) {
  38000. n += 12;
  38001. x2 /= 4096;
  38002. }
  38003. while (x2 >= 2) {
  38004. n += 1;
  38005. x2 /= 2;
  38006. } return n;
  38007. };
  38008. $export($export.P + $export.F * (!!$toFixed && (
  38009. 0.00008.toFixed(3) !== '0.000' ||
  38010. 0.9.toFixed(0) !== '1' ||
  38011. 1.255.toFixed(2) !== '1.25' ||
  38012. 1000000000000000128.0.toFixed(0) !== '1000000000000000128'
  38013. ) || !__webpack_require__(4)(function () {
  38014. // V8 ~ Android 4.3-
  38015. $toFixed.call({});
  38016. })), 'Number', {
  38017. toFixed: function toFixed(fractionDigits) {
  38018. var x = aNumberValue(this, ERROR);
  38019. var f = toInteger(fractionDigits);
  38020. var s = '';
  38021. var m = ZERO;
  38022. var e, z, j, k;
  38023. if (f < 0 || f > 20) throw RangeError(ERROR);
  38024. // eslint-disable-next-line no-self-compare
  38025. if (x != x) return 'NaN';
  38026. if (x <= -1e21 || x >= 1e21) return String(x);
  38027. if (x < 0) {
  38028. s = '-';
  38029. x = -x;
  38030. }
  38031. if (x > 1e-21) {
  38032. e = log(x * pow(2, 69, 1)) - 69;
  38033. z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);
  38034. z *= 0x10000000000000;
  38035. e = 52 - e;
  38036. if (e > 0) {
  38037. multiply(0, z);
  38038. j = f;
  38039. while (j >= 7) {
  38040. multiply(1e7, 0);
  38041. j -= 7;
  38042. }
  38043. multiply(pow(10, j, 1), 0);
  38044. j = e - 1;
  38045. while (j >= 23) {
  38046. divide(1 << 23);
  38047. j -= 23;
  38048. }
  38049. divide(1 << j);
  38050. multiply(1, 1);
  38051. divide(2);
  38052. m = numToString();
  38053. } else {
  38054. multiply(0, z);
  38055. multiply(1 << -e, 0);
  38056. m = numToString() + repeat.call(ZERO, f);
  38057. }
  38058. }
  38059. if (f > 0) {
  38060. k = m.length;
  38061. m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));
  38062. } else {
  38063. m = s + m;
  38064. } return m;
  38065. }
  38066. });
  38067. /***/ }),
  38068. /* 431 */
  38069. /***/ (function(module, exports, __webpack_require__) {
  38070. "use strict";
  38071. var $export = __webpack_require__(0);
  38072. var $fails = __webpack_require__(4);
  38073. var aNumberValue = __webpack_require__(198);
  38074. var $toPrecision = 1.0.toPrecision;
  38075. $export($export.P + $export.F * ($fails(function () {
  38076. // IE7-
  38077. return $toPrecision.call(1, undefined) !== '1';
  38078. }) || !$fails(function () {
  38079. // V8 ~ Android 4.3-
  38080. $toPrecision.call({});
  38081. })), 'Number', {
  38082. toPrecision: function toPrecision(precision) {
  38083. var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');
  38084. return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);
  38085. }
  38086. });
  38087. /***/ }),
  38088. /* 432 */
  38089. /***/ (function(module, exports, __webpack_require__) {
  38090. // 19.1.3.1 Object.assign(target, source)
  38091. var $export = __webpack_require__(0);
  38092. $export($export.S + $export.F, 'Object', { assign: __webpack_require__(215) });
  38093. /***/ }),
  38094. /* 433 */
  38095. /***/ (function(module, exports, __webpack_require__) {
  38096. var $export = __webpack_require__(0);
  38097. // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
  38098. $export($export.S, 'Object', { create: __webpack_require__(51) });
  38099. /***/ }),
  38100. /* 434 */
  38101. /***/ (function(module, exports, __webpack_require__) {
  38102. var $export = __webpack_require__(0);
  38103. // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)
  38104. $export($export.S + $export.F * !__webpack_require__(9), 'Object', { defineProperties: __webpack_require__(216) });
  38105. /***/ }),
  38106. /* 435 */
  38107. /***/ (function(module, exports, __webpack_require__) {
  38108. var $export = __webpack_require__(0);
  38109. // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
  38110. $export($export.S + $export.F * !__webpack_require__(9), 'Object', { defineProperty: __webpack_require__(10).f });
  38111. /***/ }),
  38112. /* 436 */
  38113. /***/ (function(module, exports, __webpack_require__) {
  38114. // 19.1.2.5 Object.freeze(O)
  38115. var isObject = __webpack_require__(5);
  38116. var meta = __webpack_require__(44).onFreeze;
  38117. __webpack_require__(35)('freeze', function ($freeze) {
  38118. return function freeze(it) {
  38119. return $freeze && isObject(it) ? $freeze(meta(it)) : it;
  38120. };
  38121. });
  38122. /***/ }),
  38123. /* 437 */
  38124. /***/ (function(module, exports, __webpack_require__) {
  38125. // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
  38126. var toIObject = __webpack_require__(24);
  38127. var $getOwnPropertyDescriptor = __webpack_require__(22).f;
  38128. __webpack_require__(35)('getOwnPropertyDescriptor', function () {
  38129. return function getOwnPropertyDescriptor(it, key) {
  38130. return $getOwnPropertyDescriptor(toIObject(it), key);
  38131. };
  38132. });
  38133. /***/ }),
  38134. /* 438 */
  38135. /***/ (function(module, exports, __webpack_require__) {
  38136. // 19.1.2.7 Object.getOwnPropertyNames(O)
  38137. __webpack_require__(35)('getOwnPropertyNames', function () {
  38138. return __webpack_require__(217).f;
  38139. });
  38140. /***/ }),
  38141. /* 439 */
  38142. /***/ (function(module, exports, __webpack_require__) {
  38143. // 19.1.2.9 Object.getPrototypeOf(O)
  38144. var toObject = __webpack_require__(14);
  38145. var $getPrototypeOf = __webpack_require__(23);
  38146. __webpack_require__(35)('getPrototypeOf', function () {
  38147. return function getPrototypeOf(it) {
  38148. return $getPrototypeOf(toObject(it));
  38149. };
  38150. });
  38151. /***/ }),
  38152. /* 440 */
  38153. /***/ (function(module, exports, __webpack_require__) {
  38154. // 19.1.2.11 Object.isExtensible(O)
  38155. var isObject = __webpack_require__(5);
  38156. __webpack_require__(35)('isExtensible', function ($isExtensible) {
  38157. return function isExtensible(it) {
  38158. return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
  38159. };
  38160. });
  38161. /***/ }),
  38162. /* 441 */
  38163. /***/ (function(module, exports, __webpack_require__) {
  38164. // 19.1.2.12 Object.isFrozen(O)
  38165. var isObject = __webpack_require__(5);
  38166. __webpack_require__(35)('isFrozen', function ($isFrozen) {
  38167. return function isFrozen(it) {
  38168. return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
  38169. };
  38170. });
  38171. /***/ }),
  38172. /* 442 */
  38173. /***/ (function(module, exports, __webpack_require__) {
  38174. // 19.1.2.13 Object.isSealed(O)
  38175. var isObject = __webpack_require__(5);
  38176. __webpack_require__(35)('isSealed', function ($isSealed) {
  38177. return function isSealed(it) {
  38178. return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
  38179. };
  38180. });
  38181. /***/ }),
  38182. /* 443 */
  38183. /***/ (function(module, exports, __webpack_require__) {
  38184. // 19.1.3.10 Object.is(value1, value2)
  38185. var $export = __webpack_require__(0);
  38186. $export($export.S, 'Object', { is: __webpack_require__(373) });
  38187. /***/ }),
  38188. /* 444 */
  38189. /***/ (function(module, exports, __webpack_require__) {
  38190. // 19.1.2.14 Object.keys(O)
  38191. var toObject = __webpack_require__(14);
  38192. var $keys = __webpack_require__(53);
  38193. __webpack_require__(35)('keys', function () {
  38194. return function keys(it) {
  38195. return $keys(toObject(it));
  38196. };
  38197. });
  38198. /***/ }),
  38199. /* 445 */
  38200. /***/ (function(module, exports, __webpack_require__) {
  38201. // 19.1.2.15 Object.preventExtensions(O)
  38202. var isObject = __webpack_require__(5);
  38203. var meta = __webpack_require__(44).onFreeze;
  38204. __webpack_require__(35)('preventExtensions', function ($preventExtensions) {
  38205. return function preventExtensions(it) {
  38206. return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;
  38207. };
  38208. });
  38209. /***/ }),
  38210. /* 446 */
  38211. /***/ (function(module, exports, __webpack_require__) {
  38212. // 19.1.2.17 Object.seal(O)
  38213. var isObject = __webpack_require__(5);
  38214. var meta = __webpack_require__(44).onFreeze;
  38215. __webpack_require__(35)('seal', function ($seal) {
  38216. return function seal(it) {
  38217. return $seal && isObject(it) ? $seal(meta(it)) : it;
  38218. };
  38219. });
  38220. /***/ }),
  38221. /* 447 */
  38222. /***/ (function(module, exports, __webpack_require__) {
  38223. // 19.1.3.19 Object.setPrototypeOf(O, proto)
  38224. var $export = __webpack_require__(0);
  38225. $export($export.S, 'Object', { setPrototypeOf: __webpack_require__(143).set });
  38226. /***/ }),
  38227. /* 448 */
  38228. /***/ (function(module, exports, __webpack_require__) {
  38229. "use strict";
  38230. // 19.1.3.6 Object.prototype.toString()
  38231. var classof = __webpack_require__(71);
  38232. var test = {};
  38233. test[__webpack_require__(6)('toStringTag')] = 'z';
  38234. if (test + '' != '[object z]') {
  38235. __webpack_require__(20)(Object.prototype, 'toString', function toString() {
  38236. return '[object ' + classof(this) + ']';
  38237. }, true);
  38238. }
  38239. /***/ }),
  38240. /* 449 */
  38241. /***/ (function(module, exports, __webpack_require__) {
  38242. var $export = __webpack_require__(0);
  38243. var $parseFloat = __webpack_require__(221);
  38244. // 18.2.4 parseFloat(string)
  38245. $export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });
  38246. /***/ }),
  38247. /* 450 */
  38248. /***/ (function(module, exports, __webpack_require__) {
  38249. var $export = __webpack_require__(0);
  38250. var $parseInt = __webpack_require__(222);
  38251. // 18.2.5 parseInt(string, radix)
  38252. $export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });
  38253. /***/ }),
  38254. /* 451 */
  38255. /***/ (function(module, exports, __webpack_require__) {
  38256. "use strict";
  38257. var LIBRARY = __webpack_require__(50);
  38258. var global = __webpack_require__(3);
  38259. var ctx = __webpack_require__(28);
  38260. var classof = __webpack_require__(71);
  38261. var $export = __webpack_require__(0);
  38262. var isObject = __webpack_require__(5);
  38263. var aFunction = __webpack_require__(15);
  38264. var anInstance = __webpack_require__(48);
  38265. var forOf = __webpack_require__(49);
  38266. var speciesConstructor = __webpack_require__(99);
  38267. var task = __webpack_require__(149).set;
  38268. var microtask = __webpack_require__(141)();
  38269. var newPromiseCapabilityModule = __webpack_require__(142);
  38270. var perform = __webpack_require__(223);
  38271. var promiseResolve = __webpack_require__(224);
  38272. var PROMISE = 'Promise';
  38273. var TypeError = global.TypeError;
  38274. var process = global.process;
  38275. var $Promise = global[PROMISE];
  38276. var isNode = classof(process) == 'process';
  38277. var empty = function () { /* empty */ };
  38278. var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
  38279. var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;
  38280. var USE_NATIVE = !!function () {
  38281. try {
  38282. // correct subclassing with @@species support
  38283. var promise = $Promise.resolve(1);
  38284. var FakePromise = (promise.constructor = {})[__webpack_require__(6)('species')] = function (exec) {
  38285. exec(empty, empty);
  38286. };
  38287. // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
  38288. return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;
  38289. } catch (e) { /* empty */ }
  38290. }();
  38291. // helpers
  38292. var isThenable = function (it) {
  38293. var then;
  38294. return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
  38295. };
  38296. var notify = function (promise, isReject) {
  38297. if (promise._n) return;
  38298. promise._n = true;
  38299. var chain = promise._c;
  38300. microtask(function () {
  38301. var value = promise._v;
  38302. var ok = promise._s == 1;
  38303. var i = 0;
  38304. var run = function (reaction) {
  38305. var handler = ok ? reaction.ok : reaction.fail;
  38306. var resolve = reaction.resolve;
  38307. var reject = reaction.reject;
  38308. var domain = reaction.domain;
  38309. var result, then;
  38310. try {
  38311. if (handler) {
  38312. if (!ok) {
  38313. if (promise._h == 2) onHandleUnhandled(promise);
  38314. promise._h = 1;
  38315. }
  38316. if (handler === true) result = value;
  38317. else {
  38318. if (domain) domain.enter();
  38319. result = handler(value);
  38320. if (domain) domain.exit();
  38321. }
  38322. if (result === reaction.promise) {
  38323. reject(TypeError('Promise-chain cycle'));
  38324. } else if (then = isThenable(result)) {
  38325. then.call(result, resolve, reject);
  38326. } else resolve(result);
  38327. } else reject(value);
  38328. } catch (e) {
  38329. reject(e);
  38330. }
  38331. };
  38332. while (chain.length > i) run(chain[i++]); // variable length - can't use forEach
  38333. promise._c = [];
  38334. promise._n = false;
  38335. if (isReject && !promise._h) onUnhandled(promise);
  38336. });
  38337. };
  38338. var onUnhandled = function (promise) {
  38339. task.call(global, function () {
  38340. var value = promise._v;
  38341. var unhandled = isUnhandled(promise);
  38342. var result, handler, console;
  38343. if (unhandled) {
  38344. result = perform(function () {
  38345. if (isNode) {
  38346. process.emit('unhandledRejection', value, promise);
  38347. } else if (handler = global.onunhandledrejection) {
  38348. handler({ promise: promise, reason: value });
  38349. } else if ((console = global.console) && console.error) {
  38350. console.error('Unhandled promise rejection', value);
  38351. }
  38352. });
  38353. // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
  38354. promise._h = isNode || isUnhandled(promise) ? 2 : 1;
  38355. } promise._a = undefined;
  38356. if (unhandled && result.e) throw result.v;
  38357. });
  38358. };
  38359. var isUnhandled = function (promise) {
  38360. return promise._h !== 1 && (promise._a || promise._c).length === 0;
  38361. };
  38362. var onHandleUnhandled = function (promise) {
  38363. task.call(global, function () {
  38364. var handler;
  38365. if (isNode) {
  38366. process.emit('rejectionHandled', promise);
  38367. } else if (handler = global.onrejectionhandled) {
  38368. handler({ promise: promise, reason: promise._v });
  38369. }
  38370. });
  38371. };
  38372. var $reject = function (value) {
  38373. var promise = this;
  38374. if (promise._d) return;
  38375. promise._d = true;
  38376. promise = promise._w || promise; // unwrap
  38377. promise._v = value;
  38378. promise._s = 2;
  38379. if (!promise._a) promise._a = promise._c.slice();
  38380. notify(promise, true);
  38381. };
  38382. var $resolve = function (value) {
  38383. var promise = this;
  38384. var then;
  38385. if (promise._d) return;
  38386. promise._d = true;
  38387. promise = promise._w || promise; // unwrap
  38388. try {
  38389. if (promise === value) throw TypeError("Promise can't be resolved itself");
  38390. if (then = isThenable(value)) {
  38391. microtask(function () {
  38392. var wrapper = { _w: promise, _d: false }; // wrap
  38393. try {
  38394. then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
  38395. } catch (e) {
  38396. $reject.call(wrapper, e);
  38397. }
  38398. });
  38399. } else {
  38400. promise._v = value;
  38401. promise._s = 1;
  38402. notify(promise, false);
  38403. }
  38404. } catch (e) {
  38405. $reject.call({ _w: promise, _d: false }, e); // wrap
  38406. }
  38407. };
  38408. // constructor polyfill
  38409. if (!USE_NATIVE) {
  38410. // 25.4.3.1 Promise(executor)
  38411. $Promise = function Promise(executor) {
  38412. anInstance(this, $Promise, PROMISE, '_h');
  38413. aFunction(executor);
  38414. Internal.call(this);
  38415. try {
  38416. executor(ctx($resolve, this, 1), ctx($reject, this, 1));
  38417. } catch (err) {
  38418. $reject.call(this, err);
  38419. }
  38420. };
  38421. // eslint-disable-next-line no-unused-vars
  38422. Internal = function Promise(executor) {
  38423. this._c = []; // <- awaiting reactions
  38424. this._a = undefined; // <- checked in isUnhandled reactions
  38425. this._s = 0; // <- state
  38426. this._d = false; // <- done
  38427. this._v = undefined; // <- value
  38428. this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
  38429. this._n = false; // <- notify
  38430. };
  38431. Internal.prototype = __webpack_require__(55)($Promise.prototype, {
  38432. // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
  38433. then: function then(onFulfilled, onRejected) {
  38434. var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
  38435. reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
  38436. reaction.fail = typeof onRejected == 'function' && onRejected;
  38437. reaction.domain = isNode ? process.domain : undefined;
  38438. this._c.push(reaction);
  38439. if (this._a) this._a.push(reaction);
  38440. if (this._s) notify(this, false);
  38441. return reaction.promise;
  38442. },
  38443. // 25.4.5.1 Promise.prototype.catch(onRejected)
  38444. 'catch': function (onRejected) {
  38445. return this.then(undefined, onRejected);
  38446. }
  38447. });
  38448. OwnPromiseCapability = function () {
  38449. var promise = new Internal();
  38450. this.promise = promise;
  38451. this.resolve = ctx($resolve, promise, 1);
  38452. this.reject = ctx($reject, promise, 1);
  38453. };
  38454. newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
  38455. return C === $Promise || C === Wrapper
  38456. ? new OwnPromiseCapability(C)
  38457. : newGenericPromiseCapability(C);
  38458. };
  38459. }
  38460. $export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });
  38461. __webpack_require__(64)($Promise, PROMISE);
  38462. __webpack_require__(56)(PROMISE);
  38463. Wrapper = __webpack_require__(33)[PROMISE];
  38464. // statics
  38465. $export($export.S + $export.F * !USE_NATIVE, PROMISE, {
  38466. // 25.4.4.5 Promise.reject(r)
  38467. reject: function reject(r) {
  38468. var capability = newPromiseCapability(this);
  38469. var $$reject = capability.reject;
  38470. $$reject(r);
  38471. return capability.promise;
  38472. }
  38473. });
  38474. $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
  38475. // 25.4.4.6 Promise.resolve(x)
  38476. resolve: function resolve(x) {
  38477. return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
  38478. }
  38479. });
  38480. $export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(93)(function (iter) {
  38481. $Promise.all(iter)['catch'](empty);
  38482. })), PROMISE, {
  38483. // 25.4.4.1 Promise.all(iterable)
  38484. all: function all(iterable) {
  38485. var C = this;
  38486. var capability = newPromiseCapability(C);
  38487. var resolve = capability.resolve;
  38488. var reject = capability.reject;
  38489. var result = perform(function () {
  38490. var values = [];
  38491. var index = 0;
  38492. var remaining = 1;
  38493. forOf(iterable, false, function (promise) {
  38494. var $index = index++;
  38495. var alreadyCalled = false;
  38496. values.push(undefined);
  38497. remaining++;
  38498. C.resolve(promise).then(function (value) {
  38499. if (alreadyCalled) return;
  38500. alreadyCalled = true;
  38501. values[$index] = value;
  38502. --remaining || resolve(values);
  38503. }, reject);
  38504. });
  38505. --remaining || resolve(values);
  38506. });
  38507. if (result.e) reject(result.v);
  38508. return capability.promise;
  38509. },
  38510. // 25.4.4.4 Promise.race(iterable)
  38511. race: function race(iterable) {
  38512. var C = this;
  38513. var capability = newPromiseCapability(C);
  38514. var reject = capability.reject;
  38515. var result = perform(function () {
  38516. forOf(iterable, false, function (promise) {
  38517. C.resolve(promise).then(capability.resolve, reject);
  38518. });
  38519. });
  38520. if (result.e) reject(result.v);
  38521. return capability.promise;
  38522. }
  38523. });
  38524. /***/ }),
  38525. /* 452 */
  38526. /***/ (function(module, exports, __webpack_require__) {
  38527. // 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
  38528. var $export = __webpack_require__(0);
  38529. var aFunction = __webpack_require__(15);
  38530. var anObject = __webpack_require__(2);
  38531. var rApply = (__webpack_require__(3).Reflect || {}).apply;
  38532. var fApply = Function.apply;
  38533. // MS Edge argumentsList argument is optional
  38534. $export($export.S + $export.F * !__webpack_require__(4)(function () {
  38535. rApply(function () { /* empty */ });
  38536. }), 'Reflect', {
  38537. apply: function apply(target, thisArgument, argumentsList) {
  38538. var T = aFunction(target);
  38539. var L = anObject(argumentsList);
  38540. return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
  38541. }
  38542. });
  38543. /***/ }),
  38544. /* 453 */
  38545. /***/ (function(module, exports, __webpack_require__) {
  38546. // 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
  38547. var $export = __webpack_require__(0);
  38548. var create = __webpack_require__(51);
  38549. var aFunction = __webpack_require__(15);
  38550. var anObject = __webpack_require__(2);
  38551. var isObject = __webpack_require__(5);
  38552. var fails = __webpack_require__(4);
  38553. var bind = __webpack_require__(202);
  38554. var rConstruct = (__webpack_require__(3).Reflect || {}).construct;
  38555. // MS Edge supports only 2 arguments and argumentsList argument is optional
  38556. // FF Nightly sets third argument as `new.target`, but does not create `this` from it
  38557. var NEW_TARGET_BUG = fails(function () {
  38558. function F() { /* empty */ }
  38559. return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);
  38560. });
  38561. var ARGS_BUG = !fails(function () {
  38562. rConstruct(function () { /* empty */ });
  38563. });
  38564. $export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
  38565. construct: function construct(Target, args /* , newTarget */) {
  38566. aFunction(Target);
  38567. anObject(args);
  38568. var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
  38569. if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);
  38570. if (Target == newTarget) {
  38571. // w/o altered newTarget, optimization for 0-4 arguments
  38572. switch (args.length) {
  38573. case 0: return new Target();
  38574. case 1: return new Target(args[0]);
  38575. case 2: return new Target(args[0], args[1]);
  38576. case 3: return new Target(args[0], args[1], args[2]);
  38577. case 4: return new Target(args[0], args[1], args[2], args[3]);
  38578. }
  38579. // w/o altered newTarget, lot of arguments case
  38580. var $args = [null];
  38581. $args.push.apply($args, args);
  38582. return new (bind.apply(Target, $args))();
  38583. }
  38584. // with altered newTarget, not support built-in constructors
  38585. var proto = newTarget.prototype;
  38586. var instance = create(isObject(proto) ? proto : Object.prototype);
  38587. var result = Function.apply.call(Target, instance, args);
  38588. return isObject(result) ? result : instance;
  38589. }
  38590. });
  38591. /***/ }),
  38592. /* 454 */
  38593. /***/ (function(module, exports, __webpack_require__) {
  38594. // 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
  38595. var dP = __webpack_require__(10);
  38596. var $export = __webpack_require__(0);
  38597. var anObject = __webpack_require__(2);
  38598. var toPrimitive = __webpack_require__(37);
  38599. // MS Edge has broken Reflect.defineProperty - throwing instead of returning false
  38600. $export($export.S + $export.F * __webpack_require__(4)(function () {
  38601. // eslint-disable-next-line no-undef
  38602. Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });
  38603. }), 'Reflect', {
  38604. defineProperty: function defineProperty(target, propertyKey, attributes) {
  38605. anObject(target);
  38606. propertyKey = toPrimitive(propertyKey, true);
  38607. anObject(attributes);
  38608. try {
  38609. dP.f(target, propertyKey, attributes);
  38610. return true;
  38611. } catch (e) {
  38612. return false;
  38613. }
  38614. }
  38615. });
  38616. /***/ }),
  38617. /* 455 */
  38618. /***/ (function(module, exports, __webpack_require__) {
  38619. // 26.1.4 Reflect.deleteProperty(target, propertyKey)
  38620. var $export = __webpack_require__(0);
  38621. var gOPD = __webpack_require__(22).f;
  38622. var anObject = __webpack_require__(2);
  38623. $export($export.S, 'Reflect', {
  38624. deleteProperty: function deleteProperty(target, propertyKey) {
  38625. var desc = gOPD(anObject(target), propertyKey);
  38626. return desc && !desc.configurable ? false : delete target[propertyKey];
  38627. }
  38628. });
  38629. /***/ }),
  38630. /* 456 */
  38631. /***/ (function(module, exports, __webpack_require__) {
  38632. "use strict";
  38633. // 26.1.5 Reflect.enumerate(target)
  38634. var $export = __webpack_require__(0);
  38635. var anObject = __webpack_require__(2);
  38636. var Enumerate = function (iterated) {
  38637. this._t = anObject(iterated); // target
  38638. this._i = 0; // next index
  38639. var keys = this._k = []; // keys
  38640. var key;
  38641. for (key in iterated) keys.push(key);
  38642. };
  38643. __webpack_require__(137)(Enumerate, 'Object', function () {
  38644. var that = this;
  38645. var keys = that._k;
  38646. var key;
  38647. do {
  38648. if (that._i >= keys.length) return { value: undefined, done: true };
  38649. } while (!((key = keys[that._i++]) in that._t));
  38650. return { value: key, done: false };
  38651. });
  38652. $export($export.S, 'Reflect', {
  38653. enumerate: function enumerate(target) {
  38654. return new Enumerate(target);
  38655. }
  38656. });
  38657. /***/ }),
  38658. /* 457 */
  38659. /***/ (function(module, exports, __webpack_require__) {
  38660. // 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
  38661. var gOPD = __webpack_require__(22);
  38662. var $export = __webpack_require__(0);
  38663. var anObject = __webpack_require__(2);
  38664. $export($export.S, 'Reflect', {
  38665. getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {
  38666. return gOPD.f(anObject(target), propertyKey);
  38667. }
  38668. });
  38669. /***/ }),
  38670. /* 458 */
  38671. /***/ (function(module, exports, __webpack_require__) {
  38672. // 26.1.8 Reflect.getPrototypeOf(target)
  38673. var $export = __webpack_require__(0);
  38674. var getProto = __webpack_require__(23);
  38675. var anObject = __webpack_require__(2);
  38676. $export($export.S, 'Reflect', {
  38677. getPrototypeOf: function getPrototypeOf(target) {
  38678. return getProto(anObject(target));
  38679. }
  38680. });
  38681. /***/ }),
  38682. /* 459 */
  38683. /***/ (function(module, exports, __webpack_require__) {
  38684. // 26.1.6 Reflect.get(target, propertyKey [, receiver])
  38685. var gOPD = __webpack_require__(22);
  38686. var getPrototypeOf = __webpack_require__(23);
  38687. var has = __webpack_require__(18);
  38688. var $export = __webpack_require__(0);
  38689. var isObject = __webpack_require__(5);
  38690. var anObject = __webpack_require__(2);
  38691. function get(target, propertyKey /* , receiver */) {
  38692. var receiver = arguments.length < 3 ? target : arguments[2];
  38693. var desc, proto;
  38694. if (anObject(target) === receiver) return target[propertyKey];
  38695. if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')
  38696. ? desc.value
  38697. : desc.get !== undefined
  38698. ? desc.get.call(receiver)
  38699. : undefined;
  38700. if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);
  38701. }
  38702. $export($export.S, 'Reflect', { get: get });
  38703. /***/ }),
  38704. /* 460 */
  38705. /***/ (function(module, exports, __webpack_require__) {
  38706. // 26.1.9 Reflect.has(target, propertyKey)
  38707. var $export = __webpack_require__(0);
  38708. $export($export.S, 'Reflect', {
  38709. has: function has(target, propertyKey) {
  38710. return propertyKey in target;
  38711. }
  38712. });
  38713. /***/ }),
  38714. /* 461 */
  38715. /***/ (function(module, exports, __webpack_require__) {
  38716. // 26.1.10 Reflect.isExtensible(target)
  38717. var $export = __webpack_require__(0);
  38718. var anObject = __webpack_require__(2);
  38719. var $isExtensible = Object.isExtensible;
  38720. $export($export.S, 'Reflect', {
  38721. isExtensible: function isExtensible(target) {
  38722. anObject(target);
  38723. return $isExtensible ? $isExtensible(target) : true;
  38724. }
  38725. });
  38726. /***/ }),
  38727. /* 462 */
  38728. /***/ (function(module, exports, __webpack_require__) {
  38729. // 26.1.11 Reflect.ownKeys(target)
  38730. var $export = __webpack_require__(0);
  38731. $export($export.S, 'Reflect', { ownKeys: __webpack_require__(220) });
  38732. /***/ }),
  38733. /* 463 */
  38734. /***/ (function(module, exports, __webpack_require__) {
  38735. // 26.1.12 Reflect.preventExtensions(target)
  38736. var $export = __webpack_require__(0);
  38737. var anObject = __webpack_require__(2);
  38738. var $preventExtensions = Object.preventExtensions;
  38739. $export($export.S, 'Reflect', {
  38740. preventExtensions: function preventExtensions(target) {
  38741. anObject(target);
  38742. try {
  38743. if ($preventExtensions) $preventExtensions(target);
  38744. return true;
  38745. } catch (e) {
  38746. return false;
  38747. }
  38748. }
  38749. });
  38750. /***/ }),
  38751. /* 464 */
  38752. /***/ (function(module, exports, __webpack_require__) {
  38753. // 26.1.14 Reflect.setPrototypeOf(target, proto)
  38754. var $export = __webpack_require__(0);
  38755. var setProto = __webpack_require__(143);
  38756. if (setProto) $export($export.S, 'Reflect', {
  38757. setPrototypeOf: function setPrototypeOf(target, proto) {
  38758. setProto.check(target, proto);
  38759. try {
  38760. setProto.set(target, proto);
  38761. return true;
  38762. } catch (e) {
  38763. return false;
  38764. }
  38765. }
  38766. });
  38767. /***/ }),
  38768. /* 465 */
  38769. /***/ (function(module, exports, __webpack_require__) {
  38770. // 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
  38771. var dP = __webpack_require__(10);
  38772. var gOPD = __webpack_require__(22);
  38773. var getPrototypeOf = __webpack_require__(23);
  38774. var has = __webpack_require__(18);
  38775. var $export = __webpack_require__(0);
  38776. var createDesc = __webpack_require__(54);
  38777. var anObject = __webpack_require__(2);
  38778. var isObject = __webpack_require__(5);
  38779. function set(target, propertyKey, V /* , receiver */) {
  38780. var receiver = arguments.length < 4 ? target : arguments[3];
  38781. var ownDesc = gOPD.f(anObject(target), propertyKey);
  38782. var existingDescriptor, proto;
  38783. if (!ownDesc) {
  38784. if (isObject(proto = getPrototypeOf(target))) {
  38785. return set(proto, propertyKey, V, receiver);
  38786. }
  38787. ownDesc = createDesc(0);
  38788. }
  38789. if (has(ownDesc, 'value')) {
  38790. if (ownDesc.writable === false || !isObject(receiver)) return false;
  38791. existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);
  38792. existingDescriptor.value = V;
  38793. dP.f(receiver, propertyKey, existingDescriptor);
  38794. return true;
  38795. }
  38796. return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
  38797. }
  38798. $export($export.S, 'Reflect', { set: set });
  38799. /***/ }),
  38800. /* 466 */
  38801. /***/ (function(module, exports, __webpack_require__) {
  38802. var global = __webpack_require__(3);
  38803. var inheritIfRequired = __webpack_require__(135);
  38804. var dP = __webpack_require__(10).f;
  38805. var gOPN = __webpack_require__(52).f;
  38806. var isRegExp = __webpack_require__(92);
  38807. var $flags = __webpack_require__(90);
  38808. var $RegExp = global.RegExp;
  38809. var Base = $RegExp;
  38810. var proto = $RegExp.prototype;
  38811. var re1 = /a/g;
  38812. var re2 = /a/g;
  38813. // "new" creates a new object, old webkit buggy here
  38814. var CORRECT_NEW = new $RegExp(re1) !== re1;
  38815. if (__webpack_require__(9) && (!CORRECT_NEW || __webpack_require__(4)(function () {
  38816. re2[__webpack_require__(6)('match')] = false;
  38817. // RegExp constructor can alter flags and IsRegExp works correct with @@match
  38818. return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';
  38819. }))) {
  38820. $RegExp = function RegExp(p, f) {
  38821. var tiRE = this instanceof $RegExp;
  38822. var piRE = isRegExp(p);
  38823. var fiU = f === undefined;
  38824. return !tiRE && piRE && p.constructor === $RegExp && fiU ? p
  38825. : inheritIfRequired(CORRECT_NEW
  38826. ? new Base(piRE && !fiU ? p.source : p, f)
  38827. : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)
  38828. , tiRE ? this : proto, $RegExp);
  38829. };
  38830. var proxy = function (key) {
  38831. key in $RegExp || dP($RegExp, key, {
  38832. configurable: true,
  38833. get: function () { return Base[key]; },
  38834. set: function (it) { Base[key] = it; }
  38835. });
  38836. };
  38837. for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);
  38838. proto.constructor = $RegExp;
  38839. $RegExp.prototype = proto;
  38840. __webpack_require__(20)(global, 'RegExp', $RegExp);
  38841. }
  38842. __webpack_require__(56)('RegExp');
  38843. /***/ }),
  38844. /* 467 */
  38845. /***/ (function(module, exports, __webpack_require__) {
  38846. // @@match logic
  38847. __webpack_require__(89)('match', 1, function (defined, MATCH, $match) {
  38848. // 21.1.3.11 String.prototype.match(regexp)
  38849. return [function match(regexp) {
  38850. 'use strict';
  38851. var O = defined(this);
  38852. var fn = regexp == undefined ? undefined : regexp[MATCH];
  38853. return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
  38854. }, $match];
  38855. });
  38856. /***/ }),
  38857. /* 468 */
  38858. /***/ (function(module, exports, __webpack_require__) {
  38859. // @@replace logic
  38860. __webpack_require__(89)('replace', 2, function (defined, REPLACE, $replace) {
  38861. // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)
  38862. return [function replace(searchValue, replaceValue) {
  38863. 'use strict';
  38864. var O = defined(this);
  38865. var fn = searchValue == undefined ? undefined : searchValue[REPLACE];
  38866. return fn !== undefined
  38867. ? fn.call(searchValue, O, replaceValue)
  38868. : $replace.call(String(O), searchValue, replaceValue);
  38869. }, $replace];
  38870. });
  38871. /***/ }),
  38872. /* 469 */
  38873. /***/ (function(module, exports, __webpack_require__) {
  38874. // @@search logic
  38875. __webpack_require__(89)('search', 1, function (defined, SEARCH, $search) {
  38876. // 21.1.3.15 String.prototype.search(regexp)
  38877. return [function search(regexp) {
  38878. 'use strict';
  38879. var O = defined(this);
  38880. var fn = regexp == undefined ? undefined : regexp[SEARCH];
  38881. return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
  38882. }, $search];
  38883. });
  38884. /***/ }),
  38885. /* 470 */
  38886. /***/ (function(module, exports, __webpack_require__) {
  38887. // @@split logic
  38888. __webpack_require__(89)('split', 2, function (defined, SPLIT, $split) {
  38889. 'use strict';
  38890. var isRegExp = __webpack_require__(92);
  38891. var _split = $split;
  38892. var $push = [].push;
  38893. var $SPLIT = 'split';
  38894. var LENGTH = 'length';
  38895. var LAST_INDEX = 'lastIndex';
  38896. if (
  38897. 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||
  38898. 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||
  38899. 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||
  38900. '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||
  38901. '.'[$SPLIT](/()()/)[LENGTH] > 1 ||
  38902. ''[$SPLIT](/.?/)[LENGTH]
  38903. ) {
  38904. var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group
  38905. // based on es5-shim implementation, need to rework it
  38906. $split = function (separator, limit) {
  38907. var string = String(this);
  38908. if (separator === undefined && limit === 0) return [];
  38909. // If `separator` is not a regex, use native split
  38910. if (!isRegExp(separator)) return _split.call(string, separator, limit);
  38911. var output = [];
  38912. var flags = (separator.ignoreCase ? 'i' : '') +
  38913. (separator.multiline ? 'm' : '') +
  38914. (separator.unicode ? 'u' : '') +
  38915. (separator.sticky ? 'y' : '');
  38916. var lastLastIndex = 0;
  38917. var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;
  38918. // Make `global` and avoid `lastIndex` issues by working with a copy
  38919. var separatorCopy = new RegExp(separator.source, flags + 'g');
  38920. var separator2, match, lastIndex, lastLength, i;
  38921. // Doesn't need flags gy, but they don't hurt
  38922. if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
  38923. while (match = separatorCopy.exec(string)) {
  38924. // `separatorCopy.lastIndex` is not reliable cross-browser
  38925. lastIndex = match.index + match[0][LENGTH];
  38926. if (lastIndex > lastLastIndex) {
  38927. output.push(string.slice(lastLastIndex, match.index));
  38928. // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG
  38929. // eslint-disable-next-line no-loop-func
  38930. if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {
  38931. for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;
  38932. });
  38933. if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));
  38934. lastLength = match[0][LENGTH];
  38935. lastLastIndex = lastIndex;
  38936. if (output[LENGTH] >= splitLimit) break;
  38937. }
  38938. if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop
  38939. }
  38940. if (lastLastIndex === string[LENGTH]) {
  38941. if (lastLength || !separatorCopy.test('')) output.push('');
  38942. } else output.push(string.slice(lastLastIndex));
  38943. return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;
  38944. };
  38945. // Chakra, V8
  38946. } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {
  38947. $split = function (separator, limit) {
  38948. return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);
  38949. };
  38950. }
  38951. // 21.1.3.17 String.prototype.split(separator, limit)
  38952. return [function split(separator, limit) {
  38953. var O = defined(this);
  38954. var fn = separator == undefined ? undefined : separator[SPLIT];
  38955. return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);
  38956. }, $split];
  38957. });
  38958. /***/ }),
  38959. /* 471 */
  38960. /***/ (function(module, exports, __webpack_require__) {
  38961. "use strict";
  38962. __webpack_require__(229);
  38963. var anObject = __webpack_require__(2);
  38964. var $flags = __webpack_require__(90);
  38965. var DESCRIPTORS = __webpack_require__(9);
  38966. var TO_STRING = 'toString';
  38967. var $toString = /./[TO_STRING];
  38968. var define = function (fn) {
  38969. __webpack_require__(20)(RegExp.prototype, TO_STRING, fn, true);
  38970. };
  38971. // 21.2.5.14 RegExp.prototype.toString()
  38972. if (__webpack_require__(4)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {
  38973. define(function toString() {
  38974. var R = anObject(this);
  38975. return '/'.concat(R.source, '/',
  38976. 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);
  38977. });
  38978. // FF44- RegExp#toString has a wrong name
  38979. } else if ($toString.name != TO_STRING) {
  38980. define(function toString() {
  38981. return $toString.call(this);
  38982. });
  38983. }
  38984. /***/ }),
  38985. /* 472 */
  38986. /***/ (function(module, exports, __webpack_require__) {
  38987. "use strict";
  38988. // B.2.3.2 String.prototype.anchor(name)
  38989. __webpack_require__(21)('anchor', function (createHTML) {
  38990. return function anchor(name) {
  38991. return createHTML(this, 'a', 'name', name);
  38992. };
  38993. });
  38994. /***/ }),
  38995. /* 473 */
  38996. /***/ (function(module, exports, __webpack_require__) {
  38997. "use strict";
  38998. // B.2.3.3 String.prototype.big()
  38999. __webpack_require__(21)('big', function (createHTML) {
  39000. return function big() {
  39001. return createHTML(this, 'big', '', '');
  39002. };
  39003. });
  39004. /***/ }),
  39005. /* 474 */
  39006. /***/ (function(module, exports, __webpack_require__) {
  39007. "use strict";
  39008. // B.2.3.4 String.prototype.blink()
  39009. __webpack_require__(21)('blink', function (createHTML) {
  39010. return function blink() {
  39011. return createHTML(this, 'blink', '', '');
  39012. };
  39013. });
  39014. /***/ }),
  39015. /* 475 */
  39016. /***/ (function(module, exports, __webpack_require__) {
  39017. "use strict";
  39018. // B.2.3.5 String.prototype.bold()
  39019. __webpack_require__(21)('bold', function (createHTML) {
  39020. return function bold() {
  39021. return createHTML(this, 'b', '', '');
  39022. };
  39023. });
  39024. /***/ }),
  39025. /* 476 */
  39026. /***/ (function(module, exports, __webpack_require__) {
  39027. "use strict";
  39028. var $export = __webpack_require__(0);
  39029. var $at = __webpack_require__(145)(false);
  39030. $export($export.P, 'String', {
  39031. // 21.1.3.3 String.prototype.codePointAt(pos)
  39032. codePointAt: function codePointAt(pos) {
  39033. return $at(this, pos);
  39034. }
  39035. });
  39036. /***/ }),
  39037. /* 477 */
  39038. /***/ (function(module, exports, __webpack_require__) {
  39039. "use strict";
  39040. // 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])
  39041. var $export = __webpack_require__(0);
  39042. var toLength = __webpack_require__(11);
  39043. var context = __webpack_require__(146);
  39044. var ENDS_WITH = 'endsWith';
  39045. var $endsWith = ''[ENDS_WITH];
  39046. $export($export.P + $export.F * __webpack_require__(133)(ENDS_WITH), 'String', {
  39047. endsWith: function endsWith(searchString /* , endPosition = @length */) {
  39048. var that = context(this, searchString, ENDS_WITH);
  39049. var endPosition = arguments.length > 1 ? arguments[1] : undefined;
  39050. var len = toLength(that.length);
  39051. var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);
  39052. var search = String(searchString);
  39053. return $endsWith
  39054. ? $endsWith.call(that, search, end)
  39055. : that.slice(end - search.length, end) === search;
  39056. }
  39057. });
  39058. /***/ }),
  39059. /* 478 */
  39060. /***/ (function(module, exports, __webpack_require__) {
  39061. "use strict";
  39062. // B.2.3.6 String.prototype.fixed()
  39063. __webpack_require__(21)('fixed', function (createHTML) {
  39064. return function fixed() {
  39065. return createHTML(this, 'tt', '', '');
  39066. };
  39067. });
  39068. /***/ }),
  39069. /* 479 */
  39070. /***/ (function(module, exports, __webpack_require__) {
  39071. "use strict";
  39072. // B.2.3.7 String.prototype.fontcolor(color)
  39073. __webpack_require__(21)('fontcolor', function (createHTML) {
  39074. return function fontcolor(color) {
  39075. return createHTML(this, 'font', 'color', color);
  39076. };
  39077. });
  39078. /***/ }),
  39079. /* 480 */
  39080. /***/ (function(module, exports, __webpack_require__) {
  39081. "use strict";
  39082. // B.2.3.8 String.prototype.fontsize(size)
  39083. __webpack_require__(21)('fontsize', function (createHTML) {
  39084. return function fontsize(size) {
  39085. return createHTML(this, 'font', 'size', size);
  39086. };
  39087. });
  39088. /***/ }),
  39089. /* 481 */
  39090. /***/ (function(module, exports, __webpack_require__) {
  39091. var $export = __webpack_require__(0);
  39092. var toAbsoluteIndex = __webpack_require__(57);
  39093. var fromCharCode = String.fromCharCode;
  39094. var $fromCodePoint = String.fromCodePoint;
  39095. // length should be 1, old FF problem
  39096. $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
  39097. // 21.1.2.2 String.fromCodePoint(...codePoints)
  39098. fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars
  39099. var res = [];
  39100. var aLen = arguments.length;
  39101. var i = 0;
  39102. var code;
  39103. while (aLen > i) {
  39104. code = +arguments[i++];
  39105. if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
  39106. res.push(code < 0x10000
  39107. ? fromCharCode(code)
  39108. : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
  39109. );
  39110. } return res.join('');
  39111. }
  39112. });
  39113. /***/ }),
  39114. /* 482 */
  39115. /***/ (function(module, exports, __webpack_require__) {
  39116. "use strict";
  39117. // 21.1.3.7 String.prototype.includes(searchString, position = 0)
  39118. var $export = __webpack_require__(0);
  39119. var context = __webpack_require__(146);
  39120. var INCLUDES = 'includes';
  39121. $export($export.P + $export.F * __webpack_require__(133)(INCLUDES), 'String', {
  39122. includes: function includes(searchString /* , position = 0 */) {
  39123. return !!~context(this, searchString, INCLUDES)
  39124. .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
  39125. }
  39126. });
  39127. /***/ }),
  39128. /* 483 */
  39129. /***/ (function(module, exports, __webpack_require__) {
  39130. "use strict";
  39131. // B.2.3.9 String.prototype.italics()
  39132. __webpack_require__(21)('italics', function (createHTML) {
  39133. return function italics() {
  39134. return createHTML(this, 'i', '', '');
  39135. };
  39136. });
  39137. /***/ }),
  39138. /* 484 */
  39139. /***/ (function(module, exports, __webpack_require__) {
  39140. "use strict";
  39141. var $at = __webpack_require__(145)(true);
  39142. // 21.1.3.27 String.prototype[@@iterator]()
  39143. __webpack_require__(138)(String, 'String', function (iterated) {
  39144. this._t = String(iterated); // target
  39145. this._i = 0; // next index
  39146. // 21.1.5.2.1 %StringIteratorPrototype%.next()
  39147. }, function () {
  39148. var O = this._t;
  39149. var index = this._i;
  39150. var point;
  39151. if (index >= O.length) return { value: undefined, done: true };
  39152. point = $at(O, index);
  39153. this._i += point.length;
  39154. return { value: point, done: false };
  39155. });
  39156. /***/ }),
  39157. /* 485 */
  39158. /***/ (function(module, exports, __webpack_require__) {
  39159. "use strict";
  39160. // B.2.3.10 String.prototype.link(url)
  39161. __webpack_require__(21)('link', function (createHTML) {
  39162. return function link(url) {
  39163. return createHTML(this, 'a', 'href', url);
  39164. };
  39165. });
  39166. /***/ }),
  39167. /* 486 */
  39168. /***/ (function(module, exports, __webpack_require__) {
  39169. var $export = __webpack_require__(0);
  39170. var toIObject = __webpack_require__(24);
  39171. var toLength = __webpack_require__(11);
  39172. $export($export.S, 'String', {
  39173. // 21.1.2.4 String.raw(callSite, ...substitutions)
  39174. raw: function raw(callSite) {
  39175. var tpl = toIObject(callSite.raw);
  39176. var len = toLength(tpl.length);
  39177. var aLen = arguments.length;
  39178. var res = [];
  39179. var i = 0;
  39180. while (len > i) {
  39181. res.push(String(tpl[i++]));
  39182. if (i < aLen) res.push(String(arguments[i]));
  39183. } return res.join('');
  39184. }
  39185. });
  39186. /***/ }),
  39187. /* 487 */
  39188. /***/ (function(module, exports, __webpack_require__) {
  39189. var $export = __webpack_require__(0);
  39190. $export($export.P, 'String', {
  39191. // 21.1.3.13 String.prototype.repeat(count)
  39192. repeat: __webpack_require__(147)
  39193. });
  39194. /***/ }),
  39195. /* 488 */
  39196. /***/ (function(module, exports, __webpack_require__) {
  39197. "use strict";
  39198. // B.2.3.11 String.prototype.small()
  39199. __webpack_require__(21)('small', function (createHTML) {
  39200. return function small() {
  39201. return createHTML(this, 'small', '', '');
  39202. };
  39203. });
  39204. /***/ }),
  39205. /* 489 */
  39206. /***/ (function(module, exports, __webpack_require__) {
  39207. "use strict";
  39208. // 21.1.3.18 String.prototype.startsWith(searchString [, position ])
  39209. var $export = __webpack_require__(0);
  39210. var toLength = __webpack_require__(11);
  39211. var context = __webpack_require__(146);
  39212. var STARTS_WITH = 'startsWith';
  39213. var $startsWith = ''[STARTS_WITH];
  39214. $export($export.P + $export.F * __webpack_require__(133)(STARTS_WITH), 'String', {
  39215. startsWith: function startsWith(searchString /* , position = 0 */) {
  39216. var that = context(this, searchString, STARTS_WITH);
  39217. var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
  39218. var search = String(searchString);
  39219. return $startsWith
  39220. ? $startsWith.call(that, search, index)
  39221. : that.slice(index, index + search.length) === search;
  39222. }
  39223. });
  39224. /***/ }),
  39225. /* 490 */
  39226. /***/ (function(module, exports, __webpack_require__) {
  39227. "use strict";
  39228. // B.2.3.12 String.prototype.strike()
  39229. __webpack_require__(21)('strike', function (createHTML) {
  39230. return function strike() {
  39231. return createHTML(this, 'strike', '', '');
  39232. };
  39233. });
  39234. /***/ }),
  39235. /* 491 */
  39236. /***/ (function(module, exports, __webpack_require__) {
  39237. "use strict";
  39238. // B.2.3.13 String.prototype.sub()
  39239. __webpack_require__(21)('sub', function (createHTML) {
  39240. return function sub() {
  39241. return createHTML(this, 'sub', '', '');
  39242. };
  39243. });
  39244. /***/ }),
  39245. /* 492 */
  39246. /***/ (function(module, exports, __webpack_require__) {
  39247. "use strict";
  39248. // B.2.3.14 String.prototype.sup()
  39249. __webpack_require__(21)('sup', function (createHTML) {
  39250. return function sup() {
  39251. return createHTML(this, 'sup', '', '');
  39252. };
  39253. });
  39254. /***/ }),
  39255. /* 493 */
  39256. /***/ (function(module, exports, __webpack_require__) {
  39257. "use strict";
  39258. // 21.1.3.25 String.prototype.trim()
  39259. __webpack_require__(65)('trim', function ($trim) {
  39260. return function trim() {
  39261. return $trim(this, 3);
  39262. };
  39263. });
  39264. /***/ }),
  39265. /* 494 */
  39266. /***/ (function(module, exports, __webpack_require__) {
  39267. "use strict";
  39268. // ECMAScript 6 symbols shim
  39269. var global = __webpack_require__(3);
  39270. var has = __webpack_require__(18);
  39271. var DESCRIPTORS = __webpack_require__(9);
  39272. var $export = __webpack_require__(0);
  39273. var redefine = __webpack_require__(20);
  39274. var META = __webpack_require__(44).KEY;
  39275. var $fails = __webpack_require__(4);
  39276. var shared = __webpack_require__(98);
  39277. var setToStringTag = __webpack_require__(64);
  39278. var uid = __webpack_require__(58);
  39279. var wks = __webpack_require__(6);
  39280. var wksExt = __webpack_require__(227);
  39281. var wksDefine = __webpack_require__(152);
  39282. var enumKeys = __webpack_require__(371);
  39283. var isArray = __webpack_require__(91);
  39284. var anObject = __webpack_require__(2);
  39285. var isObject = __webpack_require__(5);
  39286. var toIObject = __webpack_require__(24);
  39287. var toPrimitive = __webpack_require__(37);
  39288. var createDesc = __webpack_require__(54);
  39289. var _create = __webpack_require__(51);
  39290. var gOPNExt = __webpack_require__(217);
  39291. var $GOPD = __webpack_require__(22);
  39292. var $DP = __webpack_require__(10);
  39293. var $keys = __webpack_require__(53);
  39294. var gOPD = $GOPD.f;
  39295. var dP = $DP.f;
  39296. var gOPN = gOPNExt.f;
  39297. var $Symbol = global.Symbol;
  39298. var $JSON = global.JSON;
  39299. var _stringify = $JSON && $JSON.stringify;
  39300. var PROTOTYPE = 'prototype';
  39301. var HIDDEN = wks('_hidden');
  39302. var TO_PRIMITIVE = wks('toPrimitive');
  39303. var isEnum = {}.propertyIsEnumerable;
  39304. var SymbolRegistry = shared('symbol-registry');
  39305. var AllSymbols = shared('symbols');
  39306. var OPSymbols = shared('op-symbols');
  39307. var ObjectProto = Object[PROTOTYPE];
  39308. var USE_NATIVE = typeof $Symbol == 'function';
  39309. var QObject = global.QObject;
  39310. // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
  39311. var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
  39312. // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
  39313. var setSymbolDesc = DESCRIPTORS && $fails(function () {
  39314. return _create(dP({}, 'a', {
  39315. get: function () { return dP(this, 'a', { value: 7 }).a; }
  39316. })).a != 7;
  39317. }) ? function (it, key, D) {
  39318. var protoDesc = gOPD(ObjectProto, key);
  39319. if (protoDesc) delete ObjectProto[key];
  39320. dP(it, key, D);
  39321. if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
  39322. } : dP;
  39323. var wrap = function (tag) {
  39324. var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
  39325. sym._k = tag;
  39326. return sym;
  39327. };
  39328. var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
  39329. return typeof it == 'symbol';
  39330. } : function (it) {
  39331. return it instanceof $Symbol;
  39332. };
  39333. var $defineProperty = function defineProperty(it, key, D) {
  39334. if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
  39335. anObject(it);
  39336. key = toPrimitive(key, true);
  39337. anObject(D);
  39338. if (has(AllSymbols, key)) {
  39339. if (!D.enumerable) {
  39340. if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
  39341. it[HIDDEN][key] = true;
  39342. } else {
  39343. if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
  39344. D = _create(D, { enumerable: createDesc(0, false) });
  39345. } return setSymbolDesc(it, key, D);
  39346. } return dP(it, key, D);
  39347. };
  39348. var $defineProperties = function defineProperties(it, P) {
  39349. anObject(it);
  39350. var keys = enumKeys(P = toIObject(P));
  39351. var i = 0;
  39352. var l = keys.length;
  39353. var key;
  39354. while (l > i) $defineProperty(it, key = keys[i++], P[key]);
  39355. return it;
  39356. };
  39357. var $create = function create(it, P) {
  39358. return P === undefined ? _create(it) : $defineProperties(_create(it), P);
  39359. };
  39360. var $propertyIsEnumerable = function propertyIsEnumerable(key) {
  39361. var E = isEnum.call(this, key = toPrimitive(key, true));
  39362. if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
  39363. return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
  39364. };
  39365. var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
  39366. it = toIObject(it);
  39367. key = toPrimitive(key, true);
  39368. if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
  39369. var D = gOPD(it, key);
  39370. if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
  39371. return D;
  39372. };
  39373. var $getOwnPropertyNames = function getOwnPropertyNames(it) {
  39374. var names = gOPN(toIObject(it));
  39375. var result = [];
  39376. var i = 0;
  39377. var key;
  39378. while (names.length > i) {
  39379. if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
  39380. } return result;
  39381. };
  39382. var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
  39383. var IS_OP = it === ObjectProto;
  39384. var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
  39385. var result = [];
  39386. var i = 0;
  39387. var key;
  39388. while (names.length > i) {
  39389. if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
  39390. } return result;
  39391. };
  39392. // 19.4.1.1 Symbol([description])
  39393. if (!USE_NATIVE) {
  39394. $Symbol = function Symbol() {
  39395. if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
  39396. var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
  39397. var $set = function (value) {
  39398. if (this === ObjectProto) $set.call(OPSymbols, value);
  39399. if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
  39400. setSymbolDesc(this, tag, createDesc(1, value));
  39401. };
  39402. if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
  39403. return wrap(tag);
  39404. };
  39405. redefine($Symbol[PROTOTYPE], 'toString', function toString() {
  39406. return this._k;
  39407. });
  39408. $GOPD.f = $getOwnPropertyDescriptor;
  39409. $DP.f = $defineProperty;
  39410. __webpack_require__(52).f = gOPNExt.f = $getOwnPropertyNames;
  39411. __webpack_require__(73).f = $propertyIsEnumerable;
  39412. __webpack_require__(95).f = $getOwnPropertySymbols;
  39413. if (DESCRIPTORS && !__webpack_require__(50)) {
  39414. redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
  39415. }
  39416. wksExt.f = function (name) {
  39417. return wrap(wks(name));
  39418. };
  39419. }
  39420. $export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
  39421. for (var es6Symbols = (
  39422. // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
  39423. 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
  39424. ).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
  39425. for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
  39426. $export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
  39427. // 19.4.2.1 Symbol.for(key)
  39428. 'for': function (key) {
  39429. return has(SymbolRegistry, key += '')
  39430. ? SymbolRegistry[key]
  39431. : SymbolRegistry[key] = $Symbol(key);
  39432. },
  39433. // 19.4.2.5 Symbol.keyFor(sym)
  39434. keyFor: function keyFor(sym) {
  39435. if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
  39436. for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
  39437. },
  39438. useSetter: function () { setter = true; },
  39439. useSimple: function () { setter = false; }
  39440. });
  39441. $export($export.S + $export.F * !USE_NATIVE, 'Object', {
  39442. // 19.1.2.2 Object.create(O [, Properties])
  39443. create: $create,
  39444. // 19.1.2.4 Object.defineProperty(O, P, Attributes)
  39445. defineProperty: $defineProperty,
  39446. // 19.1.2.3 Object.defineProperties(O, Properties)
  39447. defineProperties: $defineProperties,
  39448. // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
  39449. getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
  39450. // 19.1.2.7 Object.getOwnPropertyNames(O)
  39451. getOwnPropertyNames: $getOwnPropertyNames,
  39452. // 19.1.2.8 Object.getOwnPropertySymbols(O)
  39453. getOwnPropertySymbols: $getOwnPropertySymbols
  39454. });
  39455. // 24.3.2 JSON.stringify(value [, replacer [, space]])
  39456. $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
  39457. var S = $Symbol();
  39458. // MS Edge converts symbol values to JSON as {}
  39459. // WebKit converts symbol values to JSON as null
  39460. // V8 throws on boxed symbols
  39461. return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
  39462. })), 'JSON', {
  39463. stringify: function stringify(it) {
  39464. var args = [it];
  39465. var i = 1;
  39466. var replacer, $replacer;
  39467. while (arguments.length > i) args.push(arguments[i++]);
  39468. $replacer = replacer = args[1];
  39469. if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
  39470. if (!isArray(replacer)) replacer = function (key, value) {
  39471. if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
  39472. if (!isSymbol(value)) return value;
  39473. };
  39474. args[1] = replacer;
  39475. return _stringify.apply($JSON, args);
  39476. }
  39477. });
  39478. // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
  39479. $Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(19)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
  39480. // 19.4.3.5 Symbol.prototype[@@toStringTag]
  39481. setToStringTag($Symbol, 'Symbol');
  39482. // 20.2.1.9 Math[@@toStringTag]
  39483. setToStringTag(Math, 'Math', true);
  39484. // 24.3.3 JSON[@@toStringTag]
  39485. setToStringTag(global.JSON, 'JSON', true);
  39486. /***/ }),
  39487. /* 495 */
  39488. /***/ (function(module, exports, __webpack_require__) {
  39489. "use strict";
  39490. var $export = __webpack_require__(0);
  39491. var $typed = __webpack_require__(100);
  39492. var buffer = __webpack_require__(150);
  39493. var anObject = __webpack_require__(2);
  39494. var toAbsoluteIndex = __webpack_require__(57);
  39495. var toLength = __webpack_require__(11);
  39496. var isObject = __webpack_require__(5);
  39497. var ArrayBuffer = __webpack_require__(3).ArrayBuffer;
  39498. var speciesConstructor = __webpack_require__(99);
  39499. var $ArrayBuffer = buffer.ArrayBuffer;
  39500. var $DataView = buffer.DataView;
  39501. var $isView = $typed.ABV && ArrayBuffer.isView;
  39502. var $slice = $ArrayBuffer.prototype.slice;
  39503. var VIEW = $typed.VIEW;
  39504. var ARRAY_BUFFER = 'ArrayBuffer';
  39505. $export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });
  39506. $export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {
  39507. // 24.1.3.1 ArrayBuffer.isView(arg)
  39508. isView: function isView(it) {
  39509. return $isView && $isView(it) || isObject(it) && VIEW in it;
  39510. }
  39511. });
  39512. $export($export.P + $export.U + $export.F * __webpack_require__(4)(function () {
  39513. return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
  39514. }), ARRAY_BUFFER, {
  39515. // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
  39516. slice: function slice(start, end) {
  39517. if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix
  39518. var len = anObject(this).byteLength;
  39519. var first = toAbsoluteIndex(start, len);
  39520. var final = toAbsoluteIndex(end === undefined ? len : end, len);
  39521. var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));
  39522. var viewS = new $DataView(this);
  39523. var viewT = new $DataView(result);
  39524. var index = 0;
  39525. while (first < final) {
  39526. viewT.setUint8(index++, viewS.getUint8(first++));
  39527. } return result;
  39528. }
  39529. });
  39530. __webpack_require__(56)(ARRAY_BUFFER);
  39531. /***/ }),
  39532. /* 496 */
  39533. /***/ (function(module, exports, __webpack_require__) {
  39534. var $export = __webpack_require__(0);
  39535. $export($export.G + $export.W + $export.F * !__webpack_require__(100).ABV, {
  39536. DataView: __webpack_require__(150).DataView
  39537. });
  39538. /***/ }),
  39539. /* 497 */
  39540. /***/ (function(module, exports, __webpack_require__) {
  39541. __webpack_require__(40)('Float32', 4, function (init) {
  39542. return function Float32Array(data, byteOffset, length) {
  39543. return init(this, data, byteOffset, length);
  39544. };
  39545. });
  39546. /***/ }),
  39547. /* 498 */
  39548. /***/ (function(module, exports, __webpack_require__) {
  39549. __webpack_require__(40)('Float64', 8, function (init) {
  39550. return function Float64Array(data, byteOffset, length) {
  39551. return init(this, data, byteOffset, length);
  39552. };
  39553. });
  39554. /***/ }),
  39555. /* 499 */
  39556. /***/ (function(module, exports, __webpack_require__) {
  39557. __webpack_require__(40)('Int16', 2, function (init) {
  39558. return function Int16Array(data, byteOffset, length) {
  39559. return init(this, data, byteOffset, length);
  39560. };
  39561. });
  39562. /***/ }),
  39563. /* 500 */
  39564. /***/ (function(module, exports, __webpack_require__) {
  39565. __webpack_require__(40)('Int32', 4, function (init) {
  39566. return function Int32Array(data, byteOffset, length) {
  39567. return init(this, data, byteOffset, length);
  39568. };
  39569. });
  39570. /***/ }),
  39571. /* 501 */
  39572. /***/ (function(module, exports, __webpack_require__) {
  39573. __webpack_require__(40)('Int8', 1, function (init) {
  39574. return function Int8Array(data, byteOffset, length) {
  39575. return init(this, data, byteOffset, length);
  39576. };
  39577. });
  39578. /***/ }),
  39579. /* 502 */
  39580. /***/ (function(module, exports, __webpack_require__) {
  39581. __webpack_require__(40)('Uint16', 2, function (init) {
  39582. return function Uint16Array(data, byteOffset, length) {
  39583. return init(this, data, byteOffset, length);
  39584. };
  39585. });
  39586. /***/ }),
  39587. /* 503 */
  39588. /***/ (function(module, exports, __webpack_require__) {
  39589. __webpack_require__(40)('Uint32', 4, function (init) {
  39590. return function Uint32Array(data, byteOffset, length) {
  39591. return init(this, data, byteOffset, length);
  39592. };
  39593. });
  39594. /***/ }),
  39595. /* 504 */
  39596. /***/ (function(module, exports, __webpack_require__) {
  39597. __webpack_require__(40)('Uint8', 1, function (init) {
  39598. return function Uint8Array(data, byteOffset, length) {
  39599. return init(this, data, byteOffset, length);
  39600. };
  39601. });
  39602. /***/ }),
  39603. /* 505 */
  39604. /***/ (function(module, exports, __webpack_require__) {
  39605. __webpack_require__(40)('Uint8', 1, function (init) {
  39606. return function Uint8ClampedArray(data, byteOffset, length) {
  39607. return init(this, data, byteOffset, length);
  39608. };
  39609. }, true);
  39610. /***/ }),
  39611. /* 506 */
  39612. /***/ (function(module, exports, __webpack_require__) {
  39613. "use strict";
  39614. var weak = __webpack_require__(205);
  39615. var validate = __webpack_require__(66);
  39616. var WEAK_SET = 'WeakSet';
  39617. // 23.4 WeakSet Objects
  39618. __webpack_require__(88)(WEAK_SET, function (get) {
  39619. return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
  39620. }, {
  39621. // 23.4.3.1 WeakSet.prototype.add(value)
  39622. add: function add(value) {
  39623. return weak.def(validate(this, WEAK_SET), value, true);
  39624. }
  39625. }, weak, false, true);
  39626. /***/ }),
  39627. /* 507 */
  39628. /***/ (function(module, exports, __webpack_require__) {
  39629. "use strict";
  39630. // https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap
  39631. var $export = __webpack_require__(0);
  39632. var flattenIntoArray = __webpack_require__(206);
  39633. var toObject = __webpack_require__(14);
  39634. var toLength = __webpack_require__(11);
  39635. var aFunction = __webpack_require__(15);
  39636. var arraySpeciesCreate = __webpack_require__(129);
  39637. $export($export.P, 'Array', {
  39638. flatMap: function flatMap(callbackfn /* , thisArg */) {
  39639. var O = toObject(this);
  39640. var sourceLen, A;
  39641. aFunction(callbackfn);
  39642. sourceLen = toLength(O.length);
  39643. A = arraySpeciesCreate(O, 0);
  39644. flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);
  39645. return A;
  39646. }
  39647. });
  39648. __webpack_require__(43)('flatMap');
  39649. /***/ }),
  39650. /* 508 */
  39651. /***/ (function(module, exports, __webpack_require__) {
  39652. "use strict";
  39653. // https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten
  39654. var $export = __webpack_require__(0);
  39655. var flattenIntoArray = __webpack_require__(206);
  39656. var toObject = __webpack_require__(14);
  39657. var toLength = __webpack_require__(11);
  39658. var toInteger = __webpack_require__(36);
  39659. var arraySpeciesCreate = __webpack_require__(129);
  39660. $export($export.P, 'Array', {
  39661. flatten: function flatten(/* depthArg = 1 */) {
  39662. var depthArg = arguments[0];
  39663. var O = toObject(this);
  39664. var sourceLen = toLength(O.length);
  39665. var A = arraySpeciesCreate(O, 0);
  39666. flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));
  39667. return A;
  39668. }
  39669. });
  39670. __webpack_require__(43)('flatten');
  39671. /***/ }),
  39672. /* 509 */
  39673. /***/ (function(module, exports, __webpack_require__) {
  39674. "use strict";
  39675. // https://github.com/tc39/Array.prototype.includes
  39676. var $export = __webpack_require__(0);
  39677. var $includes = __webpack_require__(87)(true);
  39678. $export($export.P, 'Array', {
  39679. includes: function includes(el /* , fromIndex = 0 */) {
  39680. return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
  39681. }
  39682. });
  39683. __webpack_require__(43)('includes');
  39684. /***/ }),
  39685. /* 510 */
  39686. /***/ (function(module, exports, __webpack_require__) {
  39687. // https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask
  39688. var $export = __webpack_require__(0);
  39689. var microtask = __webpack_require__(141)();
  39690. var process = __webpack_require__(3).process;
  39691. var isNode = __webpack_require__(27)(process) == 'process';
  39692. $export($export.G, {
  39693. asap: function asap(fn) {
  39694. var domain = isNode && process.domain;
  39695. microtask(domain ? domain.bind(fn) : fn);
  39696. }
  39697. });
  39698. /***/ }),
  39699. /* 511 */
  39700. /***/ (function(module, exports, __webpack_require__) {
  39701. // https://github.com/ljharb/proposal-is-error
  39702. var $export = __webpack_require__(0);
  39703. var cof = __webpack_require__(27);
  39704. $export($export.S, 'Error', {
  39705. isError: function isError(it) {
  39706. return cof(it) === 'Error';
  39707. }
  39708. });
  39709. /***/ }),
  39710. /* 512 */
  39711. /***/ (function(module, exports, __webpack_require__) {
  39712. // https://github.com/tc39/proposal-global
  39713. var $export = __webpack_require__(0);
  39714. $export($export.G, { global: __webpack_require__(3) });
  39715. /***/ }),
  39716. /* 513 */
  39717. /***/ (function(module, exports, __webpack_require__) {
  39718. // https://tc39.github.io/proposal-setmap-offrom/#sec-map.from
  39719. __webpack_require__(96)('Map');
  39720. /***/ }),
  39721. /* 514 */
  39722. /***/ (function(module, exports, __webpack_require__) {
  39723. // https://tc39.github.io/proposal-setmap-offrom/#sec-map.of
  39724. __webpack_require__(97)('Map');
  39725. /***/ }),
  39726. /* 515 */
  39727. /***/ (function(module, exports, __webpack_require__) {
  39728. // https://github.com/DavidBruant/Map-Set.prototype.toJSON
  39729. var $export = __webpack_require__(0);
  39730. $export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(204)('Map') });
  39731. /***/ }),
  39732. /* 516 */
  39733. /***/ (function(module, exports, __webpack_require__) {
  39734. // https://rwaldron.github.io/proposal-math-extensions/
  39735. var $export = __webpack_require__(0);
  39736. $export($export.S, 'Math', {
  39737. clamp: function clamp(x, lower, upper) {
  39738. return Math.min(upper, Math.max(lower, x));
  39739. }
  39740. });
  39741. /***/ }),
  39742. /* 517 */
  39743. /***/ (function(module, exports, __webpack_require__) {
  39744. // https://rwaldron.github.io/proposal-math-extensions/
  39745. var $export = __webpack_require__(0);
  39746. $export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });
  39747. /***/ }),
  39748. /* 518 */
  39749. /***/ (function(module, exports, __webpack_require__) {
  39750. // https://rwaldron.github.io/proposal-math-extensions/
  39751. var $export = __webpack_require__(0);
  39752. var RAD_PER_DEG = 180 / Math.PI;
  39753. $export($export.S, 'Math', {
  39754. degrees: function degrees(radians) {
  39755. return radians * RAD_PER_DEG;
  39756. }
  39757. });
  39758. /***/ }),
  39759. /* 519 */
  39760. /***/ (function(module, exports, __webpack_require__) {
  39761. // https://rwaldron.github.io/proposal-math-extensions/
  39762. var $export = __webpack_require__(0);
  39763. var scale = __webpack_require__(214);
  39764. var fround = __webpack_require__(212);
  39765. $export($export.S, 'Math', {
  39766. fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {
  39767. return fround(scale(x, inLow, inHigh, outLow, outHigh));
  39768. }
  39769. });
  39770. /***/ }),
  39771. /* 520 */
  39772. /***/ (function(module, exports, __webpack_require__) {
  39773. // https://gist.github.com/BrendanEich/4294d5c212a6d2254703
  39774. var $export = __webpack_require__(0);
  39775. $export($export.S, 'Math', {
  39776. iaddh: function iaddh(x0, x1, y0, y1) {
  39777. var $x0 = x0 >>> 0;
  39778. var $x1 = x1 >>> 0;
  39779. var $y0 = y0 >>> 0;
  39780. return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;
  39781. }
  39782. });
  39783. /***/ }),
  39784. /* 521 */
  39785. /***/ (function(module, exports, __webpack_require__) {
  39786. // https://gist.github.com/BrendanEich/4294d5c212a6d2254703
  39787. var $export = __webpack_require__(0);
  39788. $export($export.S, 'Math', {
  39789. imulh: function imulh(u, v) {
  39790. var UINT16 = 0xffff;
  39791. var $u = +u;
  39792. var $v = +v;
  39793. var u0 = $u & UINT16;
  39794. var v0 = $v & UINT16;
  39795. var u1 = $u >> 16;
  39796. var v1 = $v >> 16;
  39797. var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
  39798. return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);
  39799. }
  39800. });
  39801. /***/ }),
  39802. /* 522 */
  39803. /***/ (function(module, exports, __webpack_require__) {
  39804. // https://gist.github.com/BrendanEich/4294d5c212a6d2254703
  39805. var $export = __webpack_require__(0);
  39806. $export($export.S, 'Math', {
  39807. isubh: function isubh(x0, x1, y0, y1) {
  39808. var $x0 = x0 >>> 0;
  39809. var $x1 = x1 >>> 0;
  39810. var $y0 = y0 >>> 0;
  39811. return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;
  39812. }
  39813. });
  39814. /***/ }),
  39815. /* 523 */
  39816. /***/ (function(module, exports, __webpack_require__) {
  39817. // https://rwaldron.github.io/proposal-math-extensions/
  39818. var $export = __webpack_require__(0);
  39819. $export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });
  39820. /***/ }),
  39821. /* 524 */
  39822. /***/ (function(module, exports, __webpack_require__) {
  39823. // https://rwaldron.github.io/proposal-math-extensions/
  39824. var $export = __webpack_require__(0);
  39825. var DEG_PER_RAD = Math.PI / 180;
  39826. $export($export.S, 'Math', {
  39827. radians: function radians(degrees) {
  39828. return degrees * DEG_PER_RAD;
  39829. }
  39830. });
  39831. /***/ }),
  39832. /* 525 */
  39833. /***/ (function(module, exports, __webpack_require__) {
  39834. // https://rwaldron.github.io/proposal-math-extensions/
  39835. var $export = __webpack_require__(0);
  39836. $export($export.S, 'Math', { scale: __webpack_require__(214) });
  39837. /***/ }),
  39838. /* 526 */
  39839. /***/ (function(module, exports, __webpack_require__) {
  39840. // http://jfbastien.github.io/papers/Math.signbit.html
  39841. var $export = __webpack_require__(0);
  39842. $export($export.S, 'Math', { signbit: function signbit(x) {
  39843. // eslint-disable-next-line no-self-compare
  39844. return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;
  39845. } });
  39846. /***/ }),
  39847. /* 527 */
  39848. /***/ (function(module, exports, __webpack_require__) {
  39849. // https://gist.github.com/BrendanEich/4294d5c212a6d2254703
  39850. var $export = __webpack_require__(0);
  39851. $export($export.S, 'Math', {
  39852. umulh: function umulh(u, v) {
  39853. var UINT16 = 0xffff;
  39854. var $u = +u;
  39855. var $v = +v;
  39856. var u0 = $u & UINT16;
  39857. var v0 = $v & UINT16;
  39858. var u1 = $u >>> 16;
  39859. var v1 = $v >>> 16;
  39860. var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
  39861. return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);
  39862. }
  39863. });
  39864. /***/ }),
  39865. /* 528 */
  39866. /***/ (function(module, exports, __webpack_require__) {
  39867. "use strict";
  39868. var $export = __webpack_require__(0);
  39869. var toObject = __webpack_require__(14);
  39870. var aFunction = __webpack_require__(15);
  39871. var $defineProperty = __webpack_require__(10);
  39872. // B.2.2.2 Object.prototype.__defineGetter__(P, getter)
  39873. __webpack_require__(9) && $export($export.P + __webpack_require__(94), 'Object', {
  39874. __defineGetter__: function __defineGetter__(P, getter) {
  39875. $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });
  39876. }
  39877. });
  39878. /***/ }),
  39879. /* 529 */
  39880. /***/ (function(module, exports, __webpack_require__) {
  39881. "use strict";
  39882. var $export = __webpack_require__(0);
  39883. var toObject = __webpack_require__(14);
  39884. var aFunction = __webpack_require__(15);
  39885. var $defineProperty = __webpack_require__(10);
  39886. // B.2.2.3 Object.prototype.__defineSetter__(P, setter)
  39887. __webpack_require__(9) && $export($export.P + __webpack_require__(94), 'Object', {
  39888. __defineSetter__: function __defineSetter__(P, setter) {
  39889. $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });
  39890. }
  39891. });
  39892. /***/ }),
  39893. /* 530 */
  39894. /***/ (function(module, exports, __webpack_require__) {
  39895. // https://github.com/tc39/proposal-object-values-entries
  39896. var $export = __webpack_require__(0);
  39897. var $entries = __webpack_require__(219)(true);
  39898. $export($export.S, 'Object', {
  39899. entries: function entries(it) {
  39900. return $entries(it);
  39901. }
  39902. });
  39903. /***/ }),
  39904. /* 531 */
  39905. /***/ (function(module, exports, __webpack_require__) {
  39906. // https://github.com/tc39/proposal-object-getownpropertydescriptors
  39907. var $export = __webpack_require__(0);
  39908. var ownKeys = __webpack_require__(220);
  39909. var toIObject = __webpack_require__(24);
  39910. var gOPD = __webpack_require__(22);
  39911. var createProperty = __webpack_require__(130);
  39912. $export($export.S, 'Object', {
  39913. getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
  39914. var O = toIObject(object);
  39915. var getDesc = gOPD.f;
  39916. var keys = ownKeys(O);
  39917. var result = {};
  39918. var i = 0;
  39919. var key, desc;
  39920. while (keys.length > i) {
  39921. desc = getDesc(O, key = keys[i++]);
  39922. if (desc !== undefined) createProperty(result, key, desc);
  39923. }
  39924. return result;
  39925. }
  39926. });
  39927. /***/ }),
  39928. /* 532 */
  39929. /***/ (function(module, exports, __webpack_require__) {
  39930. "use strict";
  39931. var $export = __webpack_require__(0);
  39932. var toObject = __webpack_require__(14);
  39933. var toPrimitive = __webpack_require__(37);
  39934. var getPrototypeOf = __webpack_require__(23);
  39935. var getOwnPropertyDescriptor = __webpack_require__(22).f;
  39936. // B.2.2.4 Object.prototype.__lookupGetter__(P)
  39937. __webpack_require__(9) && $export($export.P + __webpack_require__(94), 'Object', {
  39938. __lookupGetter__: function __lookupGetter__(P) {
  39939. var O = toObject(this);
  39940. var K = toPrimitive(P, true);
  39941. var D;
  39942. do {
  39943. if (D = getOwnPropertyDescriptor(O, K)) return D.get;
  39944. } while (O = getPrototypeOf(O));
  39945. }
  39946. });
  39947. /***/ }),
  39948. /* 533 */
  39949. /***/ (function(module, exports, __webpack_require__) {
  39950. "use strict";
  39951. var $export = __webpack_require__(0);
  39952. var toObject = __webpack_require__(14);
  39953. var toPrimitive = __webpack_require__(37);
  39954. var getPrototypeOf = __webpack_require__(23);
  39955. var getOwnPropertyDescriptor = __webpack_require__(22).f;
  39956. // B.2.2.5 Object.prototype.__lookupSetter__(P)
  39957. __webpack_require__(9) && $export($export.P + __webpack_require__(94), 'Object', {
  39958. __lookupSetter__: function __lookupSetter__(P) {
  39959. var O = toObject(this);
  39960. var K = toPrimitive(P, true);
  39961. var D;
  39962. do {
  39963. if (D = getOwnPropertyDescriptor(O, K)) return D.set;
  39964. } while (O = getPrototypeOf(O));
  39965. }
  39966. });
  39967. /***/ }),
  39968. /* 534 */
  39969. /***/ (function(module, exports, __webpack_require__) {
  39970. // https://github.com/tc39/proposal-object-values-entries
  39971. var $export = __webpack_require__(0);
  39972. var $values = __webpack_require__(219)(false);
  39973. $export($export.S, 'Object', {
  39974. values: function values(it) {
  39975. return $values(it);
  39976. }
  39977. });
  39978. /***/ }),
  39979. /* 535 */
  39980. /***/ (function(module, exports, __webpack_require__) {
  39981. "use strict";
  39982. // https://github.com/zenparsing/es-observable
  39983. var $export = __webpack_require__(0);
  39984. var global = __webpack_require__(3);
  39985. var core = __webpack_require__(33);
  39986. var microtask = __webpack_require__(141)();
  39987. var OBSERVABLE = __webpack_require__(6)('observable');
  39988. var aFunction = __webpack_require__(15);
  39989. var anObject = __webpack_require__(2);
  39990. var anInstance = __webpack_require__(48);
  39991. var redefineAll = __webpack_require__(55);
  39992. var hide = __webpack_require__(19);
  39993. var forOf = __webpack_require__(49);
  39994. var RETURN = forOf.RETURN;
  39995. var getMethod = function (fn) {
  39996. return fn == null ? undefined : aFunction(fn);
  39997. };
  39998. var cleanupSubscription = function (subscription) {
  39999. var cleanup = subscription._c;
  40000. if (cleanup) {
  40001. subscription._c = undefined;
  40002. cleanup();
  40003. }
  40004. };
  40005. var subscriptionClosed = function (subscription) {
  40006. return subscription._o === undefined;
  40007. };
  40008. var closeSubscription = function (subscription) {
  40009. if (!subscriptionClosed(subscription)) {
  40010. subscription._o = undefined;
  40011. cleanupSubscription(subscription);
  40012. }
  40013. };
  40014. var Subscription = function (observer, subscriber) {
  40015. anObject(observer);
  40016. this._c = undefined;
  40017. this._o = observer;
  40018. observer = new SubscriptionObserver(this);
  40019. try {
  40020. var cleanup = subscriber(observer);
  40021. var subscription = cleanup;
  40022. if (cleanup != null) {
  40023. if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };
  40024. else aFunction(cleanup);
  40025. this._c = cleanup;
  40026. }
  40027. } catch (e) {
  40028. observer.error(e);
  40029. return;
  40030. } if (subscriptionClosed(this)) cleanupSubscription(this);
  40031. };
  40032. Subscription.prototype = redefineAll({}, {
  40033. unsubscribe: function unsubscribe() { closeSubscription(this); }
  40034. });
  40035. var SubscriptionObserver = function (subscription) {
  40036. this._s = subscription;
  40037. };
  40038. SubscriptionObserver.prototype = redefineAll({}, {
  40039. next: function next(value) {
  40040. var subscription = this._s;
  40041. if (!subscriptionClosed(subscription)) {
  40042. var observer = subscription._o;
  40043. try {
  40044. var m = getMethod(observer.next);
  40045. if (m) return m.call(observer, value);
  40046. } catch (e) {
  40047. try {
  40048. closeSubscription(subscription);
  40049. } finally {
  40050. throw e;
  40051. }
  40052. }
  40053. }
  40054. },
  40055. error: function error(value) {
  40056. var subscription = this._s;
  40057. if (subscriptionClosed(subscription)) throw value;
  40058. var observer = subscription._o;
  40059. subscription._o = undefined;
  40060. try {
  40061. var m = getMethod(observer.error);
  40062. if (!m) throw value;
  40063. value = m.call(observer, value);
  40064. } catch (e) {
  40065. try {
  40066. cleanupSubscription(subscription);
  40067. } finally {
  40068. throw e;
  40069. }
  40070. } cleanupSubscription(subscription);
  40071. return value;
  40072. },
  40073. complete: function complete(value) {
  40074. var subscription = this._s;
  40075. if (!subscriptionClosed(subscription)) {
  40076. var observer = subscription._o;
  40077. subscription._o = undefined;
  40078. try {
  40079. var m = getMethod(observer.complete);
  40080. value = m ? m.call(observer, value) : undefined;
  40081. } catch (e) {
  40082. try {
  40083. cleanupSubscription(subscription);
  40084. } finally {
  40085. throw e;
  40086. }
  40087. } cleanupSubscription(subscription);
  40088. return value;
  40089. }
  40090. }
  40091. });
  40092. var $Observable = function Observable(subscriber) {
  40093. anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);
  40094. };
  40095. redefineAll($Observable.prototype, {
  40096. subscribe: function subscribe(observer) {
  40097. return new Subscription(observer, this._f);
  40098. },
  40099. forEach: function forEach(fn) {
  40100. var that = this;
  40101. return new (core.Promise || global.Promise)(function (resolve, reject) {
  40102. aFunction(fn);
  40103. var subscription = that.subscribe({
  40104. next: function (value) {
  40105. try {
  40106. return fn(value);
  40107. } catch (e) {
  40108. reject(e);
  40109. subscription.unsubscribe();
  40110. }
  40111. },
  40112. error: reject,
  40113. complete: resolve
  40114. });
  40115. });
  40116. }
  40117. });
  40118. redefineAll($Observable, {
  40119. from: function from(x) {
  40120. var C = typeof this === 'function' ? this : $Observable;
  40121. var method = getMethod(anObject(x)[OBSERVABLE]);
  40122. if (method) {
  40123. var observable = anObject(method.call(x));
  40124. return observable.constructor === C ? observable : new C(function (observer) {
  40125. return observable.subscribe(observer);
  40126. });
  40127. }
  40128. return new C(function (observer) {
  40129. var done = false;
  40130. microtask(function () {
  40131. if (!done) {
  40132. try {
  40133. if (forOf(x, false, function (it) {
  40134. observer.next(it);
  40135. if (done) return RETURN;
  40136. }) === RETURN) return;
  40137. } catch (e) {
  40138. if (done) throw e;
  40139. observer.error(e);
  40140. return;
  40141. } observer.complete();
  40142. }
  40143. });
  40144. return function () { done = true; };
  40145. });
  40146. },
  40147. of: function of() {
  40148. for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];
  40149. return new (typeof this === 'function' ? this : $Observable)(function (observer) {
  40150. var done = false;
  40151. microtask(function () {
  40152. if (!done) {
  40153. for (var j = 0; j < items.length; ++j) {
  40154. observer.next(items[j]);
  40155. if (done) return;
  40156. } observer.complete();
  40157. }
  40158. });
  40159. return function () { done = true; };
  40160. });
  40161. }
  40162. });
  40163. hide($Observable.prototype, OBSERVABLE, function () { return this; });
  40164. $export($export.G, { Observable: $Observable });
  40165. __webpack_require__(56)('Observable');
  40166. /***/ }),
  40167. /* 536 */
  40168. /***/ (function(module, exports, __webpack_require__) {
  40169. "use strict";
  40170. // https://github.com/tc39/proposal-promise-finally
  40171. var $export = __webpack_require__(0);
  40172. var core = __webpack_require__(33);
  40173. var global = __webpack_require__(3);
  40174. var speciesConstructor = __webpack_require__(99);
  40175. var promiseResolve = __webpack_require__(224);
  40176. $export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {
  40177. var C = speciesConstructor(this, core.Promise || global.Promise);
  40178. var isFunction = typeof onFinally == 'function';
  40179. return this.then(
  40180. isFunction ? function (x) {
  40181. return promiseResolve(C, onFinally()).then(function () { return x; });
  40182. } : onFinally,
  40183. isFunction ? function (e) {
  40184. return promiseResolve(C, onFinally()).then(function () { throw e; });
  40185. } : onFinally
  40186. );
  40187. } });
  40188. /***/ }),
  40189. /* 537 */
  40190. /***/ (function(module, exports, __webpack_require__) {
  40191. "use strict";
  40192. // https://github.com/tc39/proposal-promise-try
  40193. var $export = __webpack_require__(0);
  40194. var newPromiseCapability = __webpack_require__(142);
  40195. var perform = __webpack_require__(223);
  40196. $export($export.S, 'Promise', { 'try': function (callbackfn) {
  40197. var promiseCapability = newPromiseCapability.f(this);
  40198. var result = perform(callbackfn);
  40199. (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);
  40200. return promiseCapability.promise;
  40201. } });
  40202. /***/ }),
  40203. /* 538 */
  40204. /***/ (function(module, exports, __webpack_require__) {
  40205. var metadata = __webpack_require__(39);
  40206. var anObject = __webpack_require__(2);
  40207. var toMetaKey = metadata.key;
  40208. var ordinaryDefineOwnMetadata = metadata.set;
  40209. metadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {
  40210. ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));
  40211. } });
  40212. /***/ }),
  40213. /* 539 */
  40214. /***/ (function(module, exports, __webpack_require__) {
  40215. var metadata = __webpack_require__(39);
  40216. var anObject = __webpack_require__(2);
  40217. var toMetaKey = metadata.key;
  40218. var getOrCreateMetadataMap = metadata.map;
  40219. var store = metadata.store;
  40220. metadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {
  40221. var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);
  40222. var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);
  40223. if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;
  40224. if (metadataMap.size) return true;
  40225. var targetMetadata = store.get(target);
  40226. targetMetadata['delete'](targetKey);
  40227. return !!targetMetadata.size || store['delete'](target);
  40228. } });
  40229. /***/ }),
  40230. /* 540 */
  40231. /***/ (function(module, exports, __webpack_require__) {
  40232. var Set = __webpack_require__(230);
  40233. var from = __webpack_require__(200);
  40234. var metadata = __webpack_require__(39);
  40235. var anObject = __webpack_require__(2);
  40236. var getPrototypeOf = __webpack_require__(23);
  40237. var ordinaryOwnMetadataKeys = metadata.keys;
  40238. var toMetaKey = metadata.key;
  40239. var ordinaryMetadataKeys = function (O, P) {
  40240. var oKeys = ordinaryOwnMetadataKeys(O, P);
  40241. var parent = getPrototypeOf(O);
  40242. if (parent === null) return oKeys;
  40243. var pKeys = ordinaryMetadataKeys(parent, P);
  40244. return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;
  40245. };
  40246. metadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {
  40247. return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
  40248. } });
  40249. /***/ }),
  40250. /* 541 */
  40251. /***/ (function(module, exports, __webpack_require__) {
  40252. var metadata = __webpack_require__(39);
  40253. var anObject = __webpack_require__(2);
  40254. var getPrototypeOf = __webpack_require__(23);
  40255. var ordinaryHasOwnMetadata = metadata.has;
  40256. var ordinaryGetOwnMetadata = metadata.get;
  40257. var toMetaKey = metadata.key;
  40258. var ordinaryGetMetadata = function (MetadataKey, O, P) {
  40259. var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
  40260. if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);
  40261. var parent = getPrototypeOf(O);
  40262. return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;
  40263. };
  40264. metadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {
  40265. return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
  40266. } });
  40267. /***/ }),
  40268. /* 542 */
  40269. /***/ (function(module, exports, __webpack_require__) {
  40270. var metadata = __webpack_require__(39);
  40271. var anObject = __webpack_require__(2);
  40272. var ordinaryOwnMetadataKeys = metadata.keys;
  40273. var toMetaKey = metadata.key;
  40274. metadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {
  40275. return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
  40276. } });
  40277. /***/ }),
  40278. /* 543 */
  40279. /***/ (function(module, exports, __webpack_require__) {
  40280. var metadata = __webpack_require__(39);
  40281. var anObject = __webpack_require__(2);
  40282. var ordinaryGetOwnMetadata = metadata.get;
  40283. var toMetaKey = metadata.key;
  40284. metadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {
  40285. return ordinaryGetOwnMetadata(metadataKey, anObject(target)
  40286. , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
  40287. } });
  40288. /***/ }),
  40289. /* 544 */
  40290. /***/ (function(module, exports, __webpack_require__) {
  40291. var metadata = __webpack_require__(39);
  40292. var anObject = __webpack_require__(2);
  40293. var getPrototypeOf = __webpack_require__(23);
  40294. var ordinaryHasOwnMetadata = metadata.has;
  40295. var toMetaKey = metadata.key;
  40296. var ordinaryHasMetadata = function (MetadataKey, O, P) {
  40297. var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
  40298. if (hasOwn) return true;
  40299. var parent = getPrototypeOf(O);
  40300. return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;
  40301. };
  40302. metadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {
  40303. return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
  40304. } });
  40305. /***/ }),
  40306. /* 545 */
  40307. /***/ (function(module, exports, __webpack_require__) {
  40308. var metadata = __webpack_require__(39);
  40309. var anObject = __webpack_require__(2);
  40310. var ordinaryHasOwnMetadata = metadata.has;
  40311. var toMetaKey = metadata.key;
  40312. metadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {
  40313. return ordinaryHasOwnMetadata(metadataKey, anObject(target)
  40314. , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
  40315. } });
  40316. /***/ }),
  40317. /* 546 */
  40318. /***/ (function(module, exports, __webpack_require__) {
  40319. var $metadata = __webpack_require__(39);
  40320. var anObject = __webpack_require__(2);
  40321. var aFunction = __webpack_require__(15);
  40322. var toMetaKey = $metadata.key;
  40323. var ordinaryDefineOwnMetadata = $metadata.set;
  40324. $metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {
  40325. return function decorator(target, targetKey) {
  40326. ordinaryDefineOwnMetadata(
  40327. metadataKey, metadataValue,
  40328. (targetKey !== undefined ? anObject : aFunction)(target),
  40329. toMetaKey(targetKey)
  40330. );
  40331. };
  40332. } });
  40333. /***/ }),
  40334. /* 547 */
  40335. /***/ (function(module, exports, __webpack_require__) {
  40336. // https://tc39.github.io/proposal-setmap-offrom/#sec-set.from
  40337. __webpack_require__(96)('Set');
  40338. /***/ }),
  40339. /* 548 */
  40340. /***/ (function(module, exports, __webpack_require__) {
  40341. // https://tc39.github.io/proposal-setmap-offrom/#sec-set.of
  40342. __webpack_require__(97)('Set');
  40343. /***/ }),
  40344. /* 549 */
  40345. /***/ (function(module, exports, __webpack_require__) {
  40346. // https://github.com/DavidBruant/Map-Set.prototype.toJSON
  40347. var $export = __webpack_require__(0);
  40348. $export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(204)('Set') });
  40349. /***/ }),
  40350. /* 550 */
  40351. /***/ (function(module, exports, __webpack_require__) {
  40352. "use strict";
  40353. // https://github.com/mathiasbynens/String.prototype.at
  40354. var $export = __webpack_require__(0);
  40355. var $at = __webpack_require__(145)(true);
  40356. $export($export.P, 'String', {
  40357. at: function at(pos) {
  40358. return $at(this, pos);
  40359. }
  40360. });
  40361. /***/ }),
  40362. /* 551 */
  40363. /***/ (function(module, exports, __webpack_require__) {
  40364. "use strict";
  40365. // https://tc39.github.io/String.prototype.matchAll/
  40366. var $export = __webpack_require__(0);
  40367. var defined = __webpack_require__(34);
  40368. var toLength = __webpack_require__(11);
  40369. var isRegExp = __webpack_require__(92);
  40370. var getFlags = __webpack_require__(90);
  40371. var RegExpProto = RegExp.prototype;
  40372. var $RegExpStringIterator = function (regexp, string) {
  40373. this._r = regexp;
  40374. this._s = string;
  40375. };
  40376. __webpack_require__(137)($RegExpStringIterator, 'RegExp String', function next() {
  40377. var match = this._r.exec(this._s);
  40378. return { value: match, done: match === null };
  40379. });
  40380. $export($export.P, 'String', {
  40381. matchAll: function matchAll(regexp) {
  40382. defined(this);
  40383. if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');
  40384. var S = String(this);
  40385. var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);
  40386. var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);
  40387. rx.lastIndex = toLength(regexp.lastIndex);
  40388. return new $RegExpStringIterator(rx, S);
  40389. }
  40390. });
  40391. /***/ }),
  40392. /* 552 */
  40393. /***/ (function(module, exports, __webpack_require__) {
  40394. "use strict";
  40395. // https://github.com/tc39/proposal-string-pad-start-end
  40396. var $export = __webpack_require__(0);
  40397. var $pad = __webpack_require__(225);
  40398. var userAgent = __webpack_require__(151);
  40399. // https://github.com/zloirock/core-js/issues/280
  40400. $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
  40401. padEnd: function padEnd(maxLength /* , fillString = ' ' */) {
  40402. return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
  40403. }
  40404. });
  40405. /***/ }),
  40406. /* 553 */
  40407. /***/ (function(module, exports, __webpack_require__) {
  40408. "use strict";
  40409. // https://github.com/tc39/proposal-string-pad-start-end
  40410. var $export = __webpack_require__(0);
  40411. var $pad = __webpack_require__(225);
  40412. var userAgent = __webpack_require__(151);
  40413. // https://github.com/zloirock/core-js/issues/280
  40414. $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
  40415. padStart: function padStart(maxLength /* , fillString = ' ' */) {
  40416. return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
  40417. }
  40418. });
  40419. /***/ }),
  40420. /* 554 */
  40421. /***/ (function(module, exports, __webpack_require__) {
  40422. "use strict";
  40423. // https://github.com/sebmarkbage/ecmascript-string-left-right-trim
  40424. __webpack_require__(65)('trimLeft', function ($trim) {
  40425. return function trimLeft() {
  40426. return $trim(this, 1);
  40427. };
  40428. }, 'trimStart');
  40429. /***/ }),
  40430. /* 555 */
  40431. /***/ (function(module, exports, __webpack_require__) {
  40432. "use strict";
  40433. // https://github.com/sebmarkbage/ecmascript-string-left-right-trim
  40434. __webpack_require__(65)('trimRight', function ($trim) {
  40435. return function trimRight() {
  40436. return $trim(this, 2);
  40437. };
  40438. }, 'trimEnd');
  40439. /***/ }),
  40440. /* 556 */
  40441. /***/ (function(module, exports, __webpack_require__) {
  40442. __webpack_require__(152)('asyncIterator');
  40443. /***/ }),
  40444. /* 557 */
  40445. /***/ (function(module, exports, __webpack_require__) {
  40446. __webpack_require__(152)('observable');
  40447. /***/ }),
  40448. /* 558 */
  40449. /***/ (function(module, exports, __webpack_require__) {
  40450. // https://github.com/tc39/proposal-global
  40451. var $export = __webpack_require__(0);
  40452. $export($export.S, 'System', { global: __webpack_require__(3) });
  40453. /***/ }),
  40454. /* 559 */
  40455. /***/ (function(module, exports, __webpack_require__) {
  40456. // https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from
  40457. __webpack_require__(96)('WeakMap');
  40458. /***/ }),
  40459. /* 560 */
  40460. /***/ (function(module, exports, __webpack_require__) {
  40461. // https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of
  40462. __webpack_require__(97)('WeakMap');
  40463. /***/ }),
  40464. /* 561 */
  40465. /***/ (function(module, exports, __webpack_require__) {
  40466. // https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from
  40467. __webpack_require__(96)('WeakSet');
  40468. /***/ }),
  40469. /* 562 */
  40470. /***/ (function(module, exports, __webpack_require__) {
  40471. // https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of
  40472. __webpack_require__(97)('WeakSet');
  40473. /***/ }),
  40474. /* 563 */
  40475. /***/ (function(module, exports, __webpack_require__) {
  40476. var $iterators = __webpack_require__(154);
  40477. var getKeys = __webpack_require__(53);
  40478. var redefine = __webpack_require__(20);
  40479. var global = __webpack_require__(3);
  40480. var hide = __webpack_require__(19);
  40481. var Iterators = __webpack_require__(63);
  40482. var wks = __webpack_require__(6);
  40483. var ITERATOR = wks('iterator');
  40484. var TO_STRING_TAG = wks('toStringTag');
  40485. var ArrayValues = Iterators.Array;
  40486. var DOMIterables = {
  40487. CSSRuleList: true, // TODO: Not spec compliant, should be false.
  40488. CSSStyleDeclaration: false,
  40489. CSSValueList: false,
  40490. ClientRectList: false,
  40491. DOMRectList: false,
  40492. DOMStringList: false,
  40493. DOMTokenList: true,
  40494. DataTransferItemList: false,
  40495. FileList: false,
  40496. HTMLAllCollection: false,
  40497. HTMLCollection: false,
  40498. HTMLFormElement: false,
  40499. HTMLSelectElement: false,
  40500. MediaList: true, // TODO: Not spec compliant, should be false.
  40501. MimeTypeArray: false,
  40502. NamedNodeMap: false,
  40503. NodeList: true,
  40504. PaintRequestList: false,
  40505. Plugin: false,
  40506. PluginArray: false,
  40507. SVGLengthList: false,
  40508. SVGNumberList: false,
  40509. SVGPathSegList: false,
  40510. SVGPointList: false,
  40511. SVGStringList: false,
  40512. SVGTransformList: false,
  40513. SourceBufferList: false,
  40514. StyleSheetList: true, // TODO: Not spec compliant, should be false.
  40515. TextTrackCueList: false,
  40516. TextTrackList: false,
  40517. TouchList: false
  40518. };
  40519. for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {
  40520. var NAME = collections[i];
  40521. var explicit = DOMIterables[NAME];
  40522. var Collection = global[NAME];
  40523. var proto = Collection && Collection.prototype;
  40524. var key;
  40525. if (proto) {
  40526. if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
  40527. if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
  40528. Iterators[NAME] = ArrayValues;
  40529. if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
  40530. }
  40531. }
  40532. /***/ }),
  40533. /* 564 */
  40534. /***/ (function(module, exports, __webpack_require__) {
  40535. var $export = __webpack_require__(0);
  40536. var $task = __webpack_require__(149);
  40537. $export($export.G + $export.B, {
  40538. setImmediate: $task.set,
  40539. clearImmediate: $task.clear
  40540. });
  40541. /***/ }),
  40542. /* 565 */
  40543. /***/ (function(module, exports, __webpack_require__) {
  40544. // ie9- setTimeout & setInterval additional parameters fix
  40545. var global = __webpack_require__(3);
  40546. var $export = __webpack_require__(0);
  40547. var userAgent = __webpack_require__(151);
  40548. var slice = [].slice;
  40549. var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
  40550. var wrap = function (set) {
  40551. return function (fn, time /* , ...args */) {
  40552. var boundArgs = arguments.length > 2;
  40553. var args = boundArgs ? slice.call(arguments, 2) : false;
  40554. return set(boundArgs ? function () {
  40555. // eslint-disable-next-line no-new-func
  40556. (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);
  40557. } : fn, time);
  40558. };
  40559. };
  40560. $export($export.G + $export.B + $export.F * MSIE, {
  40561. setTimeout: wrap(global.setTimeout),
  40562. setInterval: wrap(global.setInterval)
  40563. });
  40564. /***/ }),
  40565. /* 566 */
  40566. /***/ (function(module, exports, __webpack_require__) {
  40567. __webpack_require__(494);
  40568. __webpack_require__(433);
  40569. __webpack_require__(435);
  40570. __webpack_require__(434);
  40571. __webpack_require__(437);
  40572. __webpack_require__(439);
  40573. __webpack_require__(444);
  40574. __webpack_require__(438);
  40575. __webpack_require__(436);
  40576. __webpack_require__(446);
  40577. __webpack_require__(445);
  40578. __webpack_require__(441);
  40579. __webpack_require__(442);
  40580. __webpack_require__(440);
  40581. __webpack_require__(432);
  40582. __webpack_require__(443);
  40583. __webpack_require__(447);
  40584. __webpack_require__(448);
  40585. __webpack_require__(400);
  40586. __webpack_require__(402);
  40587. __webpack_require__(401);
  40588. __webpack_require__(450);
  40589. __webpack_require__(449);
  40590. __webpack_require__(420);
  40591. __webpack_require__(430);
  40592. __webpack_require__(431);
  40593. __webpack_require__(421);
  40594. __webpack_require__(422);
  40595. __webpack_require__(423);
  40596. __webpack_require__(424);
  40597. __webpack_require__(425);
  40598. __webpack_require__(426);
  40599. __webpack_require__(427);
  40600. __webpack_require__(428);
  40601. __webpack_require__(429);
  40602. __webpack_require__(403);
  40603. __webpack_require__(404);
  40604. __webpack_require__(405);
  40605. __webpack_require__(406);
  40606. __webpack_require__(407);
  40607. __webpack_require__(408);
  40608. __webpack_require__(409);
  40609. __webpack_require__(410);
  40610. __webpack_require__(411);
  40611. __webpack_require__(412);
  40612. __webpack_require__(413);
  40613. __webpack_require__(414);
  40614. __webpack_require__(415);
  40615. __webpack_require__(416);
  40616. __webpack_require__(417);
  40617. __webpack_require__(418);
  40618. __webpack_require__(419);
  40619. __webpack_require__(481);
  40620. __webpack_require__(486);
  40621. __webpack_require__(493);
  40622. __webpack_require__(484);
  40623. __webpack_require__(476);
  40624. __webpack_require__(477);
  40625. __webpack_require__(482);
  40626. __webpack_require__(487);
  40627. __webpack_require__(489);
  40628. __webpack_require__(472);
  40629. __webpack_require__(473);
  40630. __webpack_require__(474);
  40631. __webpack_require__(475);
  40632. __webpack_require__(478);
  40633. __webpack_require__(479);
  40634. __webpack_require__(480);
  40635. __webpack_require__(483);
  40636. __webpack_require__(485);
  40637. __webpack_require__(488);
  40638. __webpack_require__(490);
  40639. __webpack_require__(491);
  40640. __webpack_require__(492);
  40641. __webpack_require__(395);
  40642. __webpack_require__(397);
  40643. __webpack_require__(396);
  40644. __webpack_require__(399);
  40645. __webpack_require__(398);
  40646. __webpack_require__(384);
  40647. __webpack_require__(382);
  40648. __webpack_require__(388);
  40649. __webpack_require__(385);
  40650. __webpack_require__(391);
  40651. __webpack_require__(393);
  40652. __webpack_require__(381);
  40653. __webpack_require__(387);
  40654. __webpack_require__(378);
  40655. __webpack_require__(392);
  40656. __webpack_require__(376);
  40657. __webpack_require__(390);
  40658. __webpack_require__(389);
  40659. __webpack_require__(383);
  40660. __webpack_require__(386);
  40661. __webpack_require__(375);
  40662. __webpack_require__(377);
  40663. __webpack_require__(380);
  40664. __webpack_require__(379);
  40665. __webpack_require__(394);
  40666. __webpack_require__(154);
  40667. __webpack_require__(466);
  40668. __webpack_require__(471);
  40669. __webpack_require__(229);
  40670. __webpack_require__(467);
  40671. __webpack_require__(468);
  40672. __webpack_require__(469);
  40673. __webpack_require__(470);
  40674. __webpack_require__(451);
  40675. __webpack_require__(228);
  40676. __webpack_require__(230);
  40677. __webpack_require__(231);
  40678. __webpack_require__(506);
  40679. __webpack_require__(495);
  40680. __webpack_require__(496);
  40681. __webpack_require__(501);
  40682. __webpack_require__(504);
  40683. __webpack_require__(505);
  40684. __webpack_require__(499);
  40685. __webpack_require__(502);
  40686. __webpack_require__(500);
  40687. __webpack_require__(503);
  40688. __webpack_require__(497);
  40689. __webpack_require__(498);
  40690. __webpack_require__(452);
  40691. __webpack_require__(453);
  40692. __webpack_require__(454);
  40693. __webpack_require__(455);
  40694. __webpack_require__(456);
  40695. __webpack_require__(459);
  40696. __webpack_require__(457);
  40697. __webpack_require__(458);
  40698. __webpack_require__(460);
  40699. __webpack_require__(461);
  40700. __webpack_require__(462);
  40701. __webpack_require__(463);
  40702. __webpack_require__(465);
  40703. __webpack_require__(464);
  40704. __webpack_require__(509);
  40705. __webpack_require__(507);
  40706. __webpack_require__(508);
  40707. __webpack_require__(550);
  40708. __webpack_require__(553);
  40709. __webpack_require__(552);
  40710. __webpack_require__(554);
  40711. __webpack_require__(555);
  40712. __webpack_require__(551);
  40713. __webpack_require__(556);
  40714. __webpack_require__(557);
  40715. __webpack_require__(531);
  40716. __webpack_require__(534);
  40717. __webpack_require__(530);
  40718. __webpack_require__(528);
  40719. __webpack_require__(529);
  40720. __webpack_require__(532);
  40721. __webpack_require__(533);
  40722. __webpack_require__(515);
  40723. __webpack_require__(549);
  40724. __webpack_require__(514);
  40725. __webpack_require__(548);
  40726. __webpack_require__(560);
  40727. __webpack_require__(562);
  40728. __webpack_require__(513);
  40729. __webpack_require__(547);
  40730. __webpack_require__(559);
  40731. __webpack_require__(561);
  40732. __webpack_require__(512);
  40733. __webpack_require__(558);
  40734. __webpack_require__(511);
  40735. __webpack_require__(516);
  40736. __webpack_require__(517);
  40737. __webpack_require__(518);
  40738. __webpack_require__(519);
  40739. __webpack_require__(520);
  40740. __webpack_require__(522);
  40741. __webpack_require__(521);
  40742. __webpack_require__(523);
  40743. __webpack_require__(524);
  40744. __webpack_require__(525);
  40745. __webpack_require__(527);
  40746. __webpack_require__(526);
  40747. __webpack_require__(536);
  40748. __webpack_require__(537);
  40749. __webpack_require__(538);
  40750. __webpack_require__(539);
  40751. __webpack_require__(541);
  40752. __webpack_require__(540);
  40753. __webpack_require__(543);
  40754. __webpack_require__(542);
  40755. __webpack_require__(544);
  40756. __webpack_require__(545);
  40757. __webpack_require__(546);
  40758. __webpack_require__(510);
  40759. __webpack_require__(535);
  40760. __webpack_require__(565);
  40761. __webpack_require__(564);
  40762. __webpack_require__(563);
  40763. module.exports = __webpack_require__(33);
  40764. /***/ }),
  40765. /* 567 */
  40766. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  40767. "use strict";
  40768. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  40769. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_hexbin__ = __webpack_require__(568);
  40770. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "hexbin", function() { return __WEBPACK_IMPORTED_MODULE_0__src_hexbin__["a"]; });
  40771. /***/ }),
  40772. /* 568 */
  40773. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  40774. "use strict";
  40775. var thirdPi = Math.PI / 3,
  40776. angles = [0, thirdPi, 2 * thirdPi, 3 * thirdPi, 4 * thirdPi, 5 * thirdPi];
  40777. function pointX(d) {
  40778. return d[0];
  40779. }
  40780. function pointY(d) {
  40781. return d[1];
  40782. }
  40783. /* harmony default export */ __webpack_exports__["a"] = (function() {
  40784. var x0 = 0,
  40785. y0 = 0,
  40786. x1 = 1,
  40787. y1 = 1,
  40788. x = pointX,
  40789. y = pointY,
  40790. r,
  40791. dx,
  40792. dy;
  40793. function hexbin(points) {
  40794. var binsById = {}, bins = [], i, n = points.length;
  40795. for (i = 0; i < n; ++i) {
  40796. if (isNaN(px = +x.call(null, point = points[i], i, points))
  40797. || isNaN(py = +y.call(null, point, i, points))) continue;
  40798. var point,
  40799. px,
  40800. py,
  40801. pj = Math.round(py = py / dy),
  40802. pi = Math.round(px = px / dx - (pj & 1) / 2),
  40803. py1 = py - pj;
  40804. if (Math.abs(py1) * 3 > 1) {
  40805. var px1 = px - pi,
  40806. pi2 = pi + (px < pi ? -1 : 1) / 2,
  40807. pj2 = pj + (py < pj ? -1 : 1),
  40808. px2 = px - pi2,
  40809. py2 = py - pj2;
  40810. if (px1 * px1 + py1 * py1 > px2 * px2 + py2 * py2) pi = pi2 + (pj & 1 ? 1 : -1) / 2, pj = pj2;
  40811. }
  40812. var id = pi + "-" + pj, bin = binsById[id];
  40813. if (bin) bin.push(point);
  40814. else {
  40815. bins.push(bin = binsById[id] = [point]);
  40816. bin.x = (pi + (pj & 1) / 2) * dx;
  40817. bin.y = pj * dy;
  40818. }
  40819. }
  40820. return bins;
  40821. }
  40822. function hexagon(radius) {
  40823. var x0 = 0, y0 = 0;
  40824. return angles.map(function(angle) {
  40825. var x1 = Math.sin(angle) * radius,
  40826. y1 = -Math.cos(angle) * radius,
  40827. dx = x1 - x0,
  40828. dy = y1 - y0;
  40829. x0 = x1, y0 = y1;
  40830. return [dx, dy];
  40831. });
  40832. }
  40833. hexbin.hexagon = function(radius) {
  40834. return "m" + hexagon(radius == null ? r : +radius).join("l") + "z";
  40835. };
  40836. hexbin.centers = function() {
  40837. var centers = [],
  40838. j = Math.round(y0 / dy),
  40839. i = Math.round(x0 / dx);
  40840. for (var y = j * dy; y < y1 + r; y += dy, ++j) {
  40841. for (var x = i * dx + (j & 1) * dx / 2; x < x1 + dx / 2; x += dx) {
  40842. centers.push([x, y]);
  40843. }
  40844. }
  40845. return centers;
  40846. };
  40847. hexbin.mesh = function() {
  40848. var fragment = hexagon(r).slice(0, 4).join("l");
  40849. return hexbin.centers().map(function(p) { return "M" + p + "m" + fragment; }).join("");
  40850. };
  40851. hexbin.x = function(_) {
  40852. return arguments.length ? (x = _, hexbin) : x;
  40853. };
  40854. hexbin.y = function(_) {
  40855. return arguments.length ? (y = _, hexbin) : y;
  40856. };
  40857. hexbin.radius = function(_) {
  40858. return arguments.length ? (r = +_, dx = r * 2 * Math.sin(thirdPi), dy = r * 1.5, hexbin) : r;
  40859. };
  40860. hexbin.size = function(_) {
  40861. return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], hexbin) : [x1 - x0, y1 - y0];
  40862. };
  40863. hexbin.extent = function(_) {
  40864. return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], hexbin) : [[x0, y0], [x1, y1]];
  40865. };
  40866. return hexbin.radius(1);
  40867. });
  40868. /***/ }),
  40869. /* 569 */
  40870. /***/ (function(module, exports) {
  40871. module.exports = determinant;
  40872. /**
  40873. * Calculates the determinant of a mat4
  40874. *
  40875. * @param {mat4} a the source matrix
  40876. * @returns {Number} determinant of a
  40877. */
  40878. function determinant(a) {
  40879. var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],
  40880. a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],
  40881. a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],
  40882. a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],
  40883. b00 = a00 * a11 - a01 * a10,
  40884. b01 = a00 * a12 - a02 * a10,
  40885. b02 = a00 * a13 - a03 * a10,
  40886. b03 = a01 * a12 - a02 * a11,
  40887. b04 = a01 * a13 - a03 * a11,
  40888. b05 = a02 * a13 - a03 * a12,
  40889. b06 = a20 * a31 - a21 * a30,
  40890. b07 = a20 * a32 - a22 * a30,
  40891. b08 = a20 * a33 - a23 * a30,
  40892. b09 = a21 * a32 - a22 * a31,
  40893. b10 = a21 * a33 - a23 * a31,
  40894. b11 = a22 * a33 - a23 * a32;
  40895. // Calculate the determinant
  40896. return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
  40897. };
  40898. /***/ }),
  40899. /* 570 */
  40900. /***/ (function(module, exports) {
  40901. module.exports = fromQuat;
  40902. /**
  40903. * Creates a matrix from a quaternion rotation.
  40904. *
  40905. * @param {mat4} out mat4 receiving operation result
  40906. * @param {quat4} q Rotation quaternion
  40907. * @returns {mat4} out
  40908. */
  40909. function fromQuat(out, q) {
  40910. var x = q[0], y = q[1], z = q[2], w = q[3],
  40911. x2 = x + x,
  40912. y2 = y + y,
  40913. z2 = z + z,
  40914. xx = x * x2,
  40915. yx = y * x2,
  40916. yy = y * y2,
  40917. zx = z * x2,
  40918. zy = z * y2,
  40919. zz = z * z2,
  40920. wx = w * x2,
  40921. wy = w * y2,
  40922. wz = w * z2;
  40923. out[0] = 1 - yy - zz;
  40924. out[1] = yx + wz;
  40925. out[2] = zx - wy;
  40926. out[3] = 0;
  40927. out[4] = yx - wz;
  40928. out[5] = 1 - xx - zz;
  40929. out[6] = zy + wx;
  40930. out[7] = 0;
  40931. out[8] = zx + wy;
  40932. out[9] = zy - wx;
  40933. out[10] = 1 - xx - yy;
  40934. out[11] = 0;
  40935. out[12] = 0;
  40936. out[13] = 0;
  40937. out[14] = 0;
  40938. out[15] = 1;
  40939. return out;
  40940. };
  40941. /***/ }),
  40942. /* 571 */
  40943. /***/ (function(module, exports) {
  40944. module.exports = frustum;
  40945. /**
  40946. * Generates a frustum matrix with the given bounds
  40947. *
  40948. * @param {mat4} out mat4 frustum matrix will be written into
  40949. * @param {Number} left Left bound of the frustum
  40950. * @param {Number} right Right bound of the frustum
  40951. * @param {Number} bottom Bottom bound of the frustum
  40952. * @param {Number} top Top bound of the frustum
  40953. * @param {Number} near Near bound of the frustum
  40954. * @param {Number} far Far bound of the frustum
  40955. * @returns {mat4} out
  40956. */
  40957. function frustum(out, left, right, bottom, top, near, far) {
  40958. var rl = 1 / (right - left),
  40959. tb = 1 / (top - bottom),
  40960. nf = 1 / (near - far);
  40961. out[0] = (near * 2) * rl;
  40962. out[1] = 0;
  40963. out[2] = 0;
  40964. out[3] = 0;
  40965. out[4] = 0;
  40966. out[5] = (near * 2) * tb;
  40967. out[6] = 0;
  40968. out[7] = 0;
  40969. out[8] = (right + left) * rl;
  40970. out[9] = (top + bottom) * tb;
  40971. out[10] = (far + near) * nf;
  40972. out[11] = -1;
  40973. out[12] = 0;
  40974. out[13] = 0;
  40975. out[14] = (far * near * 2) * nf;
  40976. out[15] = 0;
  40977. return out;
  40978. };
  40979. /***/ }),
  40980. /* 572 */
  40981. /***/ (function(module, exports) {
  40982. module.exports = identity;
  40983. /**
  40984. * Set a mat4 to the identity matrix
  40985. *
  40986. * @param {mat4} out the receiving matrix
  40987. * @returns {mat4} out
  40988. */
  40989. function identity(out) {
  40990. out[0] = 1;
  40991. out[1] = 0;
  40992. out[2] = 0;
  40993. out[3] = 0;
  40994. out[4] = 0;
  40995. out[5] = 1;
  40996. out[6] = 0;
  40997. out[7] = 0;
  40998. out[8] = 0;
  40999. out[9] = 0;
  41000. out[10] = 1;
  41001. out[11] = 0;
  41002. out[12] = 0;
  41003. out[13] = 0;
  41004. out[14] = 0;
  41005. out[15] = 1;
  41006. return out;
  41007. };
  41008. /***/ }),
  41009. /* 573 */
  41010. /***/ (function(module, exports) {
  41011. module.exports = rotate;
  41012. /**
  41013. * Rotates a mat4 by the given angle
  41014. *
  41015. * @param {mat4} out the receiving matrix
  41016. * @param {mat4} a the matrix to rotate
  41017. * @param {Number} rad the angle to rotate the matrix by
  41018. * @param {vec3} axis the axis to rotate around
  41019. * @returns {mat4} out
  41020. */
  41021. function rotate(out, a, rad, axis) {
  41022. var x = axis[0], y = axis[1], z = axis[2],
  41023. len = Math.sqrt(x * x + y * y + z * z),
  41024. s, c, t,
  41025. a00, a01, a02, a03,
  41026. a10, a11, a12, a13,
  41027. a20, a21, a22, a23,
  41028. b00, b01, b02,
  41029. b10, b11, b12,
  41030. b20, b21, b22;
  41031. if (Math.abs(len) < 0.000001) { return null; }
  41032. len = 1 / len;
  41033. x *= len;
  41034. y *= len;
  41035. z *= len;
  41036. s = Math.sin(rad);
  41037. c = Math.cos(rad);
  41038. t = 1 - c;
  41039. a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];
  41040. a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];
  41041. a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];
  41042. // Construct the elements of the rotation matrix
  41043. b00 = x * x * t + c; b01 = y * x * t + z * s; b02 = z * x * t - y * s;
  41044. b10 = x * y * t - z * s; b11 = y * y * t + c; b12 = z * y * t + x * s;
  41045. b20 = x * z * t + y * s; b21 = y * z * t - x * s; b22 = z * z * t + c;
  41046. // Perform rotation-specific matrix multiplication
  41047. out[0] = a00 * b00 + a10 * b01 + a20 * b02;
  41048. out[1] = a01 * b00 + a11 * b01 + a21 * b02;
  41049. out[2] = a02 * b00 + a12 * b01 + a22 * b02;
  41050. out[3] = a03 * b00 + a13 * b01 + a23 * b02;
  41051. out[4] = a00 * b10 + a10 * b11 + a20 * b12;
  41052. out[5] = a01 * b10 + a11 * b11 + a21 * b12;
  41053. out[6] = a02 * b10 + a12 * b11 + a22 * b12;
  41054. out[7] = a03 * b10 + a13 * b11 + a23 * b12;
  41055. out[8] = a00 * b20 + a10 * b21 + a20 * b22;
  41056. out[9] = a01 * b20 + a11 * b21 + a21 * b22;
  41057. out[10] = a02 * b20 + a12 * b21 + a22 * b22;
  41058. out[11] = a03 * b20 + a13 * b21 + a23 * b22;
  41059. if (a !== out) { // If the source and destination differ, copy the unchanged last row
  41060. out[12] = a[12];
  41061. out[13] = a[13];
  41062. out[14] = a[14];
  41063. out[15] = a[15];
  41064. }
  41065. return out;
  41066. };
  41067. /***/ }),
  41068. /* 574 */
  41069. /***/ (function(module, exports) {
  41070. module.exports = transpose;
  41071. /**
  41072. * Transpose the values of a mat4
  41073. *
  41074. * @param {mat4} out the receiving matrix
  41075. * @param {mat4} a the source matrix
  41076. * @returns {mat4} out
  41077. */
  41078. function transpose(out, a) {
  41079. // If we are transposing ourselves we can skip a few steps but have to cache some values
  41080. if (out === a) {
  41081. var a01 = a[1], a02 = a[2], a03 = a[3],
  41082. a12 = a[6], a13 = a[7],
  41083. a23 = a[11];
  41084. out[1] = a[4];
  41085. out[2] = a[8];
  41086. out[3] = a[12];
  41087. out[4] = a01;
  41088. out[6] = a[9];
  41089. out[7] = a[13];
  41090. out[8] = a02;
  41091. out[9] = a12;
  41092. out[11] = a[14];
  41093. out[12] = a03;
  41094. out[13] = a13;
  41095. out[14] = a23;
  41096. } else {
  41097. out[0] = a[0];
  41098. out[1] = a[4];
  41099. out[2] = a[8];
  41100. out[3] = a[12];
  41101. out[4] = a[1];
  41102. out[5] = a[5];
  41103. out[6] = a[9];
  41104. out[7] = a[13];
  41105. out[8] = a[2];
  41106. out[9] = a[6];
  41107. out[10] = a[10];
  41108. out[11] = a[14];
  41109. out[12] = a[3];
  41110. out[13] = a[7];
  41111. out[14] = a[11];
  41112. out[15] = a[15];
  41113. }
  41114. return out;
  41115. };
  41116. /***/ }),
  41117. /* 575 */
  41118. /***/ (function(module, exports, __webpack_require__) {
  41119. /**
  41120. * Adds two quat's
  41121. *
  41122. * @param {quat} out the receiving quaternion
  41123. * @param {quat} a the first operand
  41124. * @param {quat} b the second operand
  41125. * @returns {quat} out
  41126. * @function
  41127. */
  41128. module.exports = __webpack_require__(243)
  41129. /***/ }),
  41130. /* 576 */
  41131. /***/ (function(module, exports) {
  41132. module.exports = calculateW
  41133. /**
  41134. * Calculates the W component of a quat from the X, Y, and Z components.
  41135. * Assumes that quaternion is 1 unit in length.
  41136. * Any existing W component will be ignored.
  41137. *
  41138. * @param {quat} out the receiving quaternion
  41139. * @param {quat} a quat to calculate W component of
  41140. * @returns {quat} out
  41141. */
  41142. function calculateW (out, a) {
  41143. var x = a[0], y = a[1], z = a[2]
  41144. out[0] = x
  41145. out[1] = y
  41146. out[2] = z
  41147. out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z))
  41148. return out
  41149. }
  41150. /***/ }),
  41151. /* 577 */
  41152. /***/ (function(module, exports) {
  41153. module.exports = conjugate
  41154. /**
  41155. * Calculates the conjugate of a quat
  41156. * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.
  41157. *
  41158. * @param {quat} out the receiving quaternion
  41159. * @param {quat} a quat to calculate conjugate of
  41160. * @returns {quat} out
  41161. */
  41162. function conjugate (out, a) {
  41163. out[0] = -a[0]
  41164. out[1] = -a[1]
  41165. out[2] = -a[2]
  41166. out[3] = a[3]
  41167. return out
  41168. }
  41169. /***/ }),
  41170. /* 578 */
  41171. /***/ (function(module, exports, __webpack_require__) {
  41172. /**
  41173. * Calculates the dot product of two quat's
  41174. *
  41175. * @param {quat} a the first operand
  41176. * @param {quat} b the second operand
  41177. * @returns {Number} dot product of a and b
  41178. * @function
  41179. */
  41180. module.exports = __webpack_require__(244)
  41181. /***/ }),
  41182. /* 579 */
  41183. /***/ (function(module, exports) {
  41184. module.exports = fromMat3
  41185. /**
  41186. * Creates a quaternion from the given 3x3 rotation matrix.
  41187. *
  41188. * NOTE: The resultant quaternion is not normalized, so you should be sure
  41189. * to renormalize the quaternion yourself where necessary.
  41190. *
  41191. * @param {quat} out the receiving quaternion
  41192. * @param {mat3} m rotation matrix
  41193. * @returns {quat} out
  41194. * @function
  41195. */
  41196. function fromMat3 (out, m) {
  41197. // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes
  41198. // article "Quaternion Calculus and Fast Animation".
  41199. var fTrace = m[0] + m[4] + m[8]
  41200. var fRoot
  41201. if (fTrace > 0.0) {
  41202. // |w| > 1/2, may as well choose w > 1/2
  41203. fRoot = Math.sqrt(fTrace + 1.0) // 2w
  41204. out[3] = 0.5 * fRoot
  41205. fRoot = 0.5 / fRoot // 1/(4w)
  41206. out[0] = (m[5] - m[7]) * fRoot
  41207. out[1] = (m[6] - m[2]) * fRoot
  41208. out[2] = (m[1] - m[3]) * fRoot
  41209. } else {
  41210. // |w| <= 1/2
  41211. var i = 0
  41212. if (m[4] > m[0]) {
  41213. i = 1
  41214. }
  41215. if (m[8] > m[i * 3 + i]) {
  41216. i = 2
  41217. }
  41218. var j = (i + 1) % 3
  41219. var k = (i + 2) % 3
  41220. fRoot = Math.sqrt(m[i * 3 + i] - m[j * 3 + j] - m[k * 3 + k] + 1.0)
  41221. out[i] = 0.5 * fRoot
  41222. fRoot = 0.5 / fRoot
  41223. out[3] = (m[j * 3 + k] - m[k * 3 + j]) * fRoot
  41224. out[j] = (m[j * 3 + i] + m[i * 3 + j]) * fRoot
  41225. out[k] = (m[k * 3 + i] + m[i * 3 + k]) * fRoot
  41226. }
  41227. return out
  41228. }
  41229. /***/ }),
  41230. /* 580 */
  41231. /***/ (function(module, exports) {
  41232. module.exports = identity
  41233. /**
  41234. * Set a quat to the identity quaternion
  41235. *
  41236. * @param {quat} out the receiving quaternion
  41237. * @returns {quat} out
  41238. */
  41239. function identity (out) {
  41240. out[0] = 0
  41241. out[1] = 0
  41242. out[2] = 0
  41243. out[3] = 1
  41244. return out
  41245. }
  41246. /***/ }),
  41247. /* 581 */
  41248. /***/ (function(module, exports) {
  41249. module.exports = invert
  41250. /**
  41251. * Calculates the inverse of a quat
  41252. *
  41253. * @param {quat} out the receiving quaternion
  41254. * @param {quat} a quat to calculate inverse of
  41255. * @returns {quat} out
  41256. */
  41257. function invert (out, a) {
  41258. var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],
  41259. dot = a0 * a0 + a1 * a1 + a2 * a2 + a3 * a3,
  41260. invDot = dot ? 1.0 / dot : 0
  41261. // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0
  41262. out[0] = -a0 * invDot
  41263. out[1] = -a1 * invDot
  41264. out[2] = -a2 * invDot
  41265. out[3] = a3 * invDot
  41266. return out
  41267. }
  41268. /***/ }),
  41269. /* 582 */
  41270. /***/ (function(module, exports, __webpack_require__) {
  41271. /**
  41272. * Calculates the length of a quat
  41273. *
  41274. * @param {quat} a vector to calculate length of
  41275. * @returns {Number} length of a
  41276. * @function
  41277. */
  41278. module.exports = __webpack_require__(619)
  41279. /***/ }),
  41280. /* 583 */
  41281. /***/ (function(module, exports, __webpack_require__) {
  41282. /**
  41283. * Performs a linear interpolation between two quat's
  41284. *
  41285. * @param {quat} out the receiving quaternion
  41286. * @param {quat} a the first operand
  41287. * @param {quat} b the second operand
  41288. * @param {Number} t interpolation amount between the two inputs
  41289. * @returns {quat} out
  41290. * @function
  41291. */
  41292. module.exports = __webpack_require__(245)
  41293. /***/ }),
  41294. /* 584 */
  41295. /***/ (function(module, exports) {
  41296. module.exports = multiply
  41297. /**
  41298. * Multiplies two quat's
  41299. *
  41300. * @param {quat} out the receiving quaternion
  41301. * @param {quat} a the first operand
  41302. * @param {quat} b the second operand
  41303. * @returns {quat} out
  41304. */
  41305. function multiply (out, a, b) {
  41306. var ax = a[0], ay = a[1], az = a[2], aw = a[3],
  41307. bx = b[0], by = b[1], bz = b[2], bw = b[3]
  41308. out[0] = ax * bw + aw * bx + ay * bz - az * by
  41309. out[1] = ay * bw + aw * by + az * bx - ax * bz
  41310. out[2] = az * bw + aw * bz + ax * by - ay * bx
  41311. out[3] = aw * bw - ax * bx - ay * by - az * bz
  41312. return out
  41313. }
  41314. /***/ }),
  41315. /* 585 */
  41316. /***/ (function(module, exports) {
  41317. module.exports = rotateX
  41318. /**
  41319. * Rotates a quaternion by the given angle about the X axis
  41320. *
  41321. * @param {quat} out quat receiving operation result
  41322. * @param {quat} a quat to rotate
  41323. * @param {number} rad angle (in radians) to rotate
  41324. * @returns {quat} out
  41325. */
  41326. function rotateX (out, a, rad) {
  41327. rad *= 0.5
  41328. var ax = a[0], ay = a[1], az = a[2], aw = a[3],
  41329. bx = Math.sin(rad), bw = Math.cos(rad)
  41330. out[0] = ax * bw + aw * bx
  41331. out[1] = ay * bw + az * bx
  41332. out[2] = az * bw - ay * bx
  41333. out[3] = aw * bw - ax * bx
  41334. return out
  41335. }
  41336. /***/ }),
  41337. /* 586 */
  41338. /***/ (function(module, exports) {
  41339. module.exports = rotateY
  41340. /**
  41341. * Rotates a quaternion by the given angle about the Y axis
  41342. *
  41343. * @param {quat} out quat receiving operation result
  41344. * @param {quat} a quat to rotate
  41345. * @param {number} rad angle (in radians) to rotate
  41346. * @returns {quat} out
  41347. */
  41348. function rotateY (out, a, rad) {
  41349. rad *= 0.5
  41350. var ax = a[0], ay = a[1], az = a[2], aw = a[3],
  41351. by = Math.sin(rad), bw = Math.cos(rad)
  41352. out[0] = ax * bw - az * by
  41353. out[1] = ay * bw + aw * by
  41354. out[2] = az * bw + ax * by
  41355. out[3] = aw * bw - ay * by
  41356. return out
  41357. }
  41358. /***/ }),
  41359. /* 587 */
  41360. /***/ (function(module, exports) {
  41361. module.exports = rotateZ
  41362. /**
  41363. * Rotates a quaternion by the given angle about the Z axis
  41364. *
  41365. * @param {quat} out quat receiving operation result
  41366. * @param {quat} a quat to rotate
  41367. * @param {number} rad angle (in radians) to rotate
  41368. * @returns {quat} out
  41369. */
  41370. function rotateZ (out, a, rad) {
  41371. rad *= 0.5
  41372. var ax = a[0], ay = a[1], az = a[2], aw = a[3],
  41373. bz = Math.sin(rad), bw = Math.cos(rad)
  41374. out[0] = ax * bw + ay * bz
  41375. out[1] = ay * bw - ax * bz
  41376. out[2] = az * bw + aw * bz
  41377. out[3] = aw * bw - az * bz
  41378. return out
  41379. }
  41380. /***/ }),
  41381. /* 588 */
  41382. /***/ (function(module, exports, __webpack_require__) {
  41383. var vecDot = __webpack_require__(240)
  41384. var vecCross = __webpack_require__(239)
  41385. var vecLength = __webpack_require__(241)
  41386. var vecNormalize = __webpack_require__(242)
  41387. var quatNormalize = __webpack_require__(236)
  41388. var quatAxisAngle = __webpack_require__(237)
  41389. module.exports = rotationTo
  41390. var tmpvec3 = [0, 0, 0]
  41391. var xUnitVec3 = [1, 0, 0]
  41392. var yUnitVec3 = [0, 1, 0]
  41393. /**
  41394. * Sets a quaternion to represent the shortest rotation from one
  41395. * vector to another.
  41396. *
  41397. * Both vectors are assumed to be unit length.
  41398. *
  41399. * @param {quat} out the receiving quaternion.
  41400. * @param {vec3} a the initial vector
  41401. * @param {vec3} b the destination vector
  41402. * @returns {quat} out
  41403. */
  41404. function rotationTo (out, a, b) {
  41405. var dot = vecDot(a, b)
  41406. if (dot < -0.999999) {
  41407. vecCross(tmpvec3, xUnitVec3, a)
  41408. if (vecLength(tmpvec3) < 0.000001) {
  41409. vecCross(tmpvec3, yUnitVec3, a)
  41410. }
  41411. vecNormalize(tmpvec3, tmpvec3)
  41412. quatAxisAngle(out, tmpvec3, Math.PI)
  41413. return out
  41414. } else if (dot > 0.999999) {
  41415. out[0] = 0
  41416. out[1] = 0
  41417. out[2] = 0
  41418. out[3] = 1
  41419. return out
  41420. } else {
  41421. vecCross(tmpvec3, a, b)
  41422. out[0] = tmpvec3[0]
  41423. out[1] = tmpvec3[1]
  41424. out[2] = tmpvec3[2]
  41425. out[3] = 1 + dot
  41426. return quatNormalize(out, out)
  41427. }
  41428. }
  41429. /***/ }),
  41430. /* 589 */
  41431. /***/ (function(module, exports, __webpack_require__) {
  41432. /**
  41433. * Scales a quat by a scalar number
  41434. *
  41435. * @param {quat} out the receiving vector
  41436. * @param {quat} a the vector to scale
  41437. * @param {Number} b amount to scale the vector by
  41438. * @returns {quat} out
  41439. * @function
  41440. */
  41441. module.exports = __webpack_require__(161)
  41442. /***/ }),
  41443. /* 590 */
  41444. /***/ (function(module, exports, __webpack_require__) {
  41445. /**
  41446. * Set the components of a quat to the given values
  41447. *
  41448. * @param {quat} out the receiving quaternion
  41449. * @param {Number} x X component
  41450. * @param {Number} y Y component
  41451. * @param {Number} z Z component
  41452. * @param {Number} w W component
  41453. * @returns {quat} out
  41454. * @function
  41455. */
  41456. module.exports = __webpack_require__(248)
  41457. /***/ }),
  41458. /* 591 */
  41459. /***/ (function(module, exports) {
  41460. module.exports = slerp
  41461. /**
  41462. * Performs a spherical linear interpolation between two quat
  41463. *
  41464. * @param {quat} out the receiving quaternion
  41465. * @param {quat} a the first operand
  41466. * @param {quat} b the second operand
  41467. * @param {Number} t interpolation amount between the two inputs
  41468. * @returns {quat} out
  41469. */
  41470. function slerp (out, a, b, t) {
  41471. // benchmarks:
  41472. // http://jsperf.com/quaternion-slerp-implementations
  41473. var ax = a[0], ay = a[1], az = a[2], aw = a[3],
  41474. bx = b[0], by = b[1], bz = b[2], bw = b[3]
  41475. var omega, cosom, sinom, scale0, scale1
  41476. // calc cosine
  41477. cosom = ax * bx + ay * by + az * bz + aw * bw
  41478. // adjust signs (if necessary)
  41479. if (cosom < 0.0) {
  41480. cosom = -cosom
  41481. bx = -bx
  41482. by = -by
  41483. bz = -bz
  41484. bw = -bw
  41485. }
  41486. // calculate coefficients
  41487. if ((1.0 - cosom) > 0.000001) {
  41488. // standard case (slerp)
  41489. omega = Math.acos(cosom)
  41490. sinom = Math.sin(omega)
  41491. scale0 = Math.sin((1.0 - t) * omega) / sinom
  41492. scale1 = Math.sin(t * omega) / sinom
  41493. } else {
  41494. // "from" and "to" quaternions are very close
  41495. // ... so we can do a linear interpolation
  41496. scale0 = 1.0 - t
  41497. scale1 = t
  41498. }
  41499. // calculate final values
  41500. out[0] = scale0 * ax + scale1 * bx
  41501. out[1] = scale0 * ay + scale1 * by
  41502. out[2] = scale0 * az + scale1 * bz
  41503. out[3] = scale0 * aw + scale1 * bw
  41504. return out
  41505. }
  41506. /***/ }),
  41507. /* 592 */
  41508. /***/ (function(module, exports, __webpack_require__) {
  41509. /**
  41510. * Calculates the squared length of a quat
  41511. *
  41512. * @param {quat} a vector to calculate squared length of
  41513. * @returns {Number} squared length of a
  41514. * @function
  41515. */
  41516. module.exports = __webpack_require__(622)
  41517. /***/ }),
  41518. /* 593 */
  41519. /***/ (function(module, exports) {
  41520. module.exports = cross
  41521. /**
  41522. * Computes the cross product of two vec2's
  41523. * Note that the cross product must by definition produce a 3D vector
  41524. *
  41525. * @param {vec3} out the receiving vector
  41526. * @param {vec2} a the first operand
  41527. * @param {vec2} b the second operand
  41528. * @returns {vec3} out
  41529. */
  41530. function cross(out, a, b) {
  41531. var z = a[0] * b[1] - a[1] * b[0]
  41532. out[0] = out[1] = 0
  41533. out[2] = z
  41534. return out
  41535. }
  41536. /***/ }),
  41537. /* 594 */
  41538. /***/ (function(module, exports) {
  41539. module.exports = divide
  41540. /**
  41541. * Divides two vec2's
  41542. *
  41543. * @param {vec2} out the receiving vector
  41544. * @param {vec2} a the first operand
  41545. * @param {vec2} b the second operand
  41546. * @returns {vec2} out
  41547. */
  41548. function divide(out, a, b) {
  41549. out[0] = a[0] / b[0]
  41550. out[1] = a[1] / b[1]
  41551. return out
  41552. }
  41553. /***/ }),
  41554. /* 595 */
  41555. /***/ (function(module, exports) {
  41556. module.exports = dot
  41557. /**
  41558. * Calculates the dot product of two vec2's
  41559. *
  41560. * @param {vec2} a the first operand
  41561. * @param {vec2} b the second operand
  41562. * @returns {Number} dot product of a and b
  41563. */
  41564. function dot(a, b) {
  41565. return a[0] * b[0] + a[1] * b[1]
  41566. }
  41567. /***/ }),
  41568. /* 596 */
  41569. /***/ (function(module, exports) {
  41570. module.exports = multiply
  41571. /**
  41572. * Multiplies two vec2's
  41573. *
  41574. * @param {vec2} out the receiving vector
  41575. * @param {vec2} a the first operand
  41576. * @param {vec2} b the second operand
  41577. * @returns {vec2} out
  41578. */
  41579. function multiply(out, a, b) {
  41580. out[0] = a[0] * b[0]
  41581. out[1] = a[1] * b[1]
  41582. return out
  41583. }
  41584. /***/ }),
  41585. /* 597 */
  41586. /***/ (function(module, exports) {
  41587. module.exports = normalize
  41588. /**
  41589. * Normalize a vec2
  41590. *
  41591. * @param {vec2} out the receiving vector
  41592. * @param {vec2} a vector to normalize
  41593. * @returns {vec2} out
  41594. */
  41595. function normalize(out, a) {
  41596. var x = a[0],
  41597. y = a[1]
  41598. var len = x*x + y*y
  41599. if (len > 0) {
  41600. //TODO: evaluate use of glm_invsqrt here?
  41601. len = 1 / Math.sqrt(len)
  41602. out[0] = a[0] * len
  41603. out[1] = a[1] * len
  41604. }
  41605. return out
  41606. }
  41607. /***/ }),
  41608. /* 598 */
  41609. /***/ (function(module, exports) {
  41610. module.exports = scale
  41611. /**
  41612. * Scales a vec2 by a scalar number
  41613. *
  41614. * @param {vec2} out the receiving vector
  41615. * @param {vec2} a the vector to scale
  41616. * @param {Number} b amount to scale the vector by
  41617. * @returns {vec2} out
  41618. */
  41619. function scale(out, a, b) {
  41620. out[0] = a[0] * b
  41621. out[1] = a[1] * b
  41622. return out
  41623. }
  41624. /***/ }),
  41625. /* 599 */
  41626. /***/ (function(module, exports) {
  41627. module.exports = scaleAndAdd
  41628. /**
  41629. * Adds two vec2's after scaling the second operand by a scalar value
  41630. *
  41631. * @param {vec2} out the receiving vector
  41632. * @param {vec2} a the first operand
  41633. * @param {vec2} b the second operand
  41634. * @param {Number} scale the amount to scale b by before adding
  41635. * @returns {vec2} out
  41636. */
  41637. function scaleAndAdd(out, a, b, scale) {
  41638. out[0] = a[0] + (b[0] * scale)
  41639. out[1] = a[1] + (b[1] * scale)
  41640. return out
  41641. }
  41642. /***/ }),
  41643. /* 600 */
  41644. /***/ (function(module, exports) {
  41645. module.exports = set
  41646. /**
  41647. * Set the components of a vec2 to the given values
  41648. *
  41649. * @param {vec2} out the receiving vector
  41650. * @param {Number} x X component
  41651. * @param {Number} y Y component
  41652. * @returns {vec2} out
  41653. */
  41654. function set(out, x, y) {
  41655. out[0] = x
  41656. out[1] = y
  41657. return out
  41658. }
  41659. /***/ }),
  41660. /* 601 */
  41661. /***/ (function(module, exports) {
  41662. module.exports = subtract
  41663. /**
  41664. * Subtracts vector b from vector a
  41665. *
  41666. * @param {vec2} out the receiving vector
  41667. * @param {vec2} a the first operand
  41668. * @param {vec2} b the second operand
  41669. * @returns {vec2} out
  41670. */
  41671. function subtract(out, a, b) {
  41672. out[0] = a[0] - b[0]
  41673. out[1] = a[1] - b[1]
  41674. return out
  41675. }
  41676. /***/ }),
  41677. /* 602 */
  41678. /***/ (function(module, exports) {
  41679. module.exports = transformMat4
  41680. /**
  41681. * Transforms the vec2 with a mat4
  41682. * 3rd vector component is implicitly '0'
  41683. * 4th vector component is implicitly '1'
  41684. *
  41685. * @param {vec2} out the receiving vector
  41686. * @param {vec2} a the vector to transform
  41687. * @param {mat4} m matrix to transform with
  41688. * @returns {vec2} out
  41689. */
  41690. function transformMat4(out, a, m) {
  41691. var x = a[0],
  41692. y = a[1]
  41693. out[0] = m[0] * x + m[4] * y + m[12]
  41694. out[1] = m[1] * x + m[5] * y + m[13]
  41695. return out
  41696. }
  41697. /***/ }),
  41698. /* 603 */
  41699. /***/ (function(module, exports) {
  41700. module.exports = add;
  41701. /**
  41702. * Adds two vec3's
  41703. *
  41704. * @param {vec3} out the receiving vector
  41705. * @param {vec3} a the first operand
  41706. * @param {vec3} b the second operand
  41707. * @returns {vec3} out
  41708. */
  41709. function add(out, a, b) {
  41710. out[0] = a[0] + b[0]
  41711. out[1] = a[1] + b[1]
  41712. out[2] = a[2] + b[2]
  41713. return out
  41714. }
  41715. /***/ }),
  41716. /* 604 */
  41717. /***/ (function(module, exports, __webpack_require__) {
  41718. module.exports = angle
  41719. var fromValues = __webpack_require__(606)
  41720. var normalize = __webpack_require__(242)
  41721. var dot = __webpack_require__(240)
  41722. /**
  41723. * Get the angle between two 3D vectors
  41724. * @param {vec3} a The first operand
  41725. * @param {vec3} b The second operand
  41726. * @returns {Number} The angle in radians
  41727. */
  41728. function angle(a, b) {
  41729. var tempA = fromValues(a[0], a[1], a[2])
  41730. var tempB = fromValues(b[0], b[1], b[2])
  41731. normalize(tempA, tempA)
  41732. normalize(tempB, tempB)
  41733. var cosine = dot(tempA, tempB)
  41734. if(cosine > 1.0){
  41735. return 0
  41736. } else {
  41737. return Math.acos(cosine)
  41738. }
  41739. }
  41740. /***/ }),
  41741. /* 605 */
  41742. /***/ (function(module, exports) {
  41743. module.exports = divide;
  41744. /**
  41745. * Divides two vec3's
  41746. *
  41747. * @param {vec3} out the receiving vector
  41748. * @param {vec3} a the first operand
  41749. * @param {vec3} b the second operand
  41750. * @returns {vec3} out
  41751. */
  41752. function divide(out, a, b) {
  41753. out[0] = a[0] / b[0]
  41754. out[1] = a[1] / b[1]
  41755. out[2] = a[2] / b[2]
  41756. return out
  41757. }
  41758. /***/ }),
  41759. /* 606 */
  41760. /***/ (function(module, exports) {
  41761. module.exports = fromValues;
  41762. /**
  41763. * Creates a new vec3 initialized with the given values
  41764. *
  41765. * @param {Number} x X component
  41766. * @param {Number} y Y component
  41767. * @param {Number} z Z component
  41768. * @returns {vec3} a new 3D vector
  41769. */
  41770. function fromValues(x, y, z) {
  41771. var out = new Float32Array(3)
  41772. out[0] = x
  41773. out[1] = y
  41774. out[2] = z
  41775. return out
  41776. }
  41777. /***/ }),
  41778. /* 607 */
  41779. /***/ (function(module, exports) {
  41780. module.exports = multiply;
  41781. /**
  41782. * Multiplies two vec3's
  41783. *
  41784. * @param {vec3} out the receiving vector
  41785. * @param {vec3} a the first operand
  41786. * @param {vec3} b the second operand
  41787. * @returns {vec3} out
  41788. */
  41789. function multiply(out, a, b) {
  41790. out[0] = a[0] * b[0]
  41791. out[1] = a[1] * b[1]
  41792. out[2] = a[2] * b[2]
  41793. return out
  41794. }
  41795. /***/ }),
  41796. /* 608 */
  41797. /***/ (function(module, exports) {
  41798. module.exports = rotateX;
  41799. /**
  41800. * Rotate a 3D vector around the x-axis
  41801. * @param {vec3} out The receiving vec3
  41802. * @param {vec3} a The vec3 point to rotate
  41803. * @param {vec3} b The origin of the rotation
  41804. * @param {Number} c The angle of rotation
  41805. * @returns {vec3} out
  41806. */
  41807. function rotateX(out, a, b, c){
  41808. var p = [], r=[]
  41809. //Translate point to the origin
  41810. p[0] = a[0] - b[0]
  41811. p[1] = a[1] - b[1]
  41812. p[2] = a[2] - b[2]
  41813. //perform rotation
  41814. r[0] = p[0]
  41815. r[1] = p[1]*Math.cos(c) - p[2]*Math.sin(c)
  41816. r[2] = p[1]*Math.sin(c) + p[2]*Math.cos(c)
  41817. //translate to correct position
  41818. out[0] = r[0] + b[0]
  41819. out[1] = r[1] + b[1]
  41820. out[2] = r[2] + b[2]
  41821. return out
  41822. }
  41823. /***/ }),
  41824. /* 609 */
  41825. /***/ (function(module, exports) {
  41826. module.exports = rotateY;
  41827. /**
  41828. * Rotate a 3D vector around the y-axis
  41829. * @param {vec3} out The receiving vec3
  41830. * @param {vec3} a The vec3 point to rotate
  41831. * @param {vec3} b The origin of the rotation
  41832. * @param {Number} c The angle of rotation
  41833. * @returns {vec3} out
  41834. */
  41835. function rotateY(out, a, b, c){
  41836. var p = [], r=[]
  41837. //Translate point to the origin
  41838. p[0] = a[0] - b[0]
  41839. p[1] = a[1] - b[1]
  41840. p[2] = a[2] - b[2]
  41841. //perform rotation
  41842. r[0] = p[2]*Math.sin(c) + p[0]*Math.cos(c)
  41843. r[1] = p[1]
  41844. r[2] = p[2]*Math.cos(c) - p[0]*Math.sin(c)
  41845. //translate to correct position
  41846. out[0] = r[0] + b[0]
  41847. out[1] = r[1] + b[1]
  41848. out[2] = r[2] + b[2]
  41849. return out
  41850. }
  41851. /***/ }),
  41852. /* 610 */
  41853. /***/ (function(module, exports) {
  41854. module.exports = rotateZ;
  41855. /**
  41856. * Rotate a 3D vector around the z-axis
  41857. * @param {vec3} out The receiving vec3
  41858. * @param {vec3} a The vec3 point to rotate
  41859. * @param {vec3} b The origin of the rotation
  41860. * @param {Number} c The angle of rotation
  41861. * @returns {vec3} out
  41862. */
  41863. function rotateZ(out, a, b, c){
  41864. var p = [], r=[]
  41865. //Translate point to the origin
  41866. p[0] = a[0] - b[0]
  41867. p[1] = a[1] - b[1]
  41868. p[2] = a[2] - b[2]
  41869. //perform rotation
  41870. r[0] = p[0]*Math.cos(c) - p[1]*Math.sin(c)
  41871. r[1] = p[0]*Math.sin(c) + p[1]*Math.cos(c)
  41872. r[2] = p[2]
  41873. //translate to correct position
  41874. out[0] = r[0] + b[0]
  41875. out[1] = r[1] + b[1]
  41876. out[2] = r[2] + b[2]
  41877. return out
  41878. }
  41879. /***/ }),
  41880. /* 611 */
  41881. /***/ (function(module, exports) {
  41882. module.exports = scale;
  41883. /**
  41884. * Scales a vec3 by a scalar number
  41885. *
  41886. * @param {vec3} out the receiving vector
  41887. * @param {vec3} a the vector to scale
  41888. * @param {Number} b amount to scale the vector by
  41889. * @returns {vec3} out
  41890. */
  41891. function scale(out, a, b) {
  41892. out[0] = a[0] * b
  41893. out[1] = a[1] * b
  41894. out[2] = a[2] * b
  41895. return out
  41896. }
  41897. /***/ }),
  41898. /* 612 */
  41899. /***/ (function(module, exports) {
  41900. module.exports = scaleAndAdd;
  41901. /**
  41902. * Adds two vec3's after scaling the second operand by a scalar value
  41903. *
  41904. * @param {vec3} out the receiving vector
  41905. * @param {vec3} a the first operand
  41906. * @param {vec3} b the second operand
  41907. * @param {Number} scale the amount to scale b by before adding
  41908. * @returns {vec3} out
  41909. */
  41910. function scaleAndAdd(out, a, b, scale) {
  41911. out[0] = a[0] + (b[0] * scale)
  41912. out[1] = a[1] + (b[1] * scale)
  41913. out[2] = a[2] + (b[2] * scale)
  41914. return out
  41915. }
  41916. /***/ }),
  41917. /* 613 */
  41918. /***/ (function(module, exports) {
  41919. module.exports = set;
  41920. /**
  41921. * Set the components of a vec3 to the given values
  41922. *
  41923. * @param {vec3} out the receiving vector
  41924. * @param {Number} x X component
  41925. * @param {Number} y Y component
  41926. * @param {Number} z Z component
  41927. * @returns {vec3} out
  41928. */
  41929. function set(out, x, y, z) {
  41930. out[0] = x
  41931. out[1] = y
  41932. out[2] = z
  41933. return out
  41934. }
  41935. /***/ }),
  41936. /* 614 */
  41937. /***/ (function(module, exports) {
  41938. module.exports = subtract;
  41939. /**
  41940. * Subtracts vector b from vector a
  41941. *
  41942. * @param {vec3} out the receiving vector
  41943. * @param {vec3} a the first operand
  41944. * @param {vec3} b the second operand
  41945. * @returns {vec3} out
  41946. */
  41947. function subtract(out, a, b) {
  41948. out[0] = a[0] - b[0]
  41949. out[1] = a[1] - b[1]
  41950. out[2] = a[2] - b[2]
  41951. return out
  41952. }
  41953. /***/ }),
  41954. /* 615 */
  41955. /***/ (function(module, exports) {
  41956. module.exports = transformMat4;
  41957. /**
  41958. * Transforms the vec3 with a mat4.
  41959. * 4th vector component is implicitly '1'
  41960. *
  41961. * @param {vec3} out the receiving vector
  41962. * @param {vec3} a the vector to transform
  41963. * @param {mat4} m matrix to transform with
  41964. * @returns {vec3} out
  41965. */
  41966. function transformMat4(out, a, m) {
  41967. var x = a[0], y = a[1], z = a[2],
  41968. w = m[3] * x + m[7] * y + m[11] * z + m[15]
  41969. w = w || 1.0
  41970. out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w
  41971. out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w
  41972. out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w
  41973. return out
  41974. }
  41975. /***/ }),
  41976. /* 616 */
  41977. /***/ (function(module, exports) {
  41978. module.exports = distance
  41979. /**
  41980. * Calculates the euclidian distance between two vec4's
  41981. *
  41982. * @param {vec4} a the first operand
  41983. * @param {vec4} b the second operand
  41984. * @returns {Number} distance between a and b
  41985. */
  41986. function distance (a, b) {
  41987. var x = b[0] - a[0],
  41988. y = b[1] - a[1],
  41989. z = b[2] - a[2],
  41990. w = b[3] - a[3]
  41991. return Math.sqrt(x * x + y * y + z * z + w * w)
  41992. }
  41993. /***/ }),
  41994. /* 617 */
  41995. /***/ (function(module, exports) {
  41996. module.exports = divide
  41997. /**
  41998. * Divides two vec4's
  41999. *
  42000. * @param {vec4} out the receiving vector
  42001. * @param {vec4} a the first operand
  42002. * @param {vec4} b the second operand
  42003. * @returns {vec4} out
  42004. */
  42005. function divide (out, a, b) {
  42006. out[0] = a[0] / b[0]
  42007. out[1] = a[1] / b[1]
  42008. out[2] = a[2] / b[2]
  42009. out[3] = a[3] / b[3]
  42010. return out
  42011. }
  42012. /***/ }),
  42013. /* 618 */
  42014. /***/ (function(module, exports) {
  42015. module.exports = inverse
  42016. /**
  42017. * Returns the inverse of the components of a vec4
  42018. *
  42019. * @param {vec4} out the receiving vector
  42020. * @param {vec4} a vector to invert
  42021. * @returns {vec4} out
  42022. */
  42023. function inverse (out, a) {
  42024. out[0] = 1.0 / a[0]
  42025. out[1] = 1.0 / a[1]
  42026. out[2] = 1.0 / a[2]
  42027. out[3] = 1.0 / a[3]
  42028. return out
  42029. }
  42030. /***/ }),
  42031. /* 619 */
  42032. /***/ (function(module, exports) {
  42033. module.exports = length
  42034. /**
  42035. * Calculates the length of a vec4
  42036. *
  42037. * @param {vec4} a vector to calculate length of
  42038. * @returns {Number} length of a
  42039. */
  42040. function length (a) {
  42041. var x = a[0],
  42042. y = a[1],
  42043. z = a[2],
  42044. w = a[3]
  42045. return Math.sqrt(x * x + y * y + z * z + w * w)
  42046. }
  42047. /***/ }),
  42048. /* 620 */
  42049. /***/ (function(module, exports) {
  42050. module.exports = negate
  42051. /**
  42052. * Negates the components of a vec4
  42053. *
  42054. * @param {vec4} out the receiving vector
  42055. * @param {vec4} a vector to negate
  42056. * @returns {vec4} out
  42057. */
  42058. function negate (out, a) {
  42059. out[0] = -a[0]
  42060. out[1] = -a[1]
  42061. out[2] = -a[2]
  42062. out[3] = -a[3]
  42063. return out
  42064. }
  42065. /***/ }),
  42066. /* 621 */
  42067. /***/ (function(module, exports) {
  42068. module.exports = scaleAndAdd
  42069. /**
  42070. * Adds two vec4's after scaling the second operand by a scalar value
  42071. *
  42072. * @param {vec4} out the receiving vector
  42073. * @param {vec4} a the first operand
  42074. * @param {vec4} b the second operand
  42075. * @param {Number} scale the amount to scale b by before adding
  42076. * @returns {vec4} out
  42077. */
  42078. function scaleAndAdd (out, a, b, scale) {
  42079. out[0] = a[0] + (b[0] * scale)
  42080. out[1] = a[1] + (b[1] * scale)
  42081. out[2] = a[2] + (b[2] * scale)
  42082. out[3] = a[3] + (b[3] * scale)
  42083. return out
  42084. }
  42085. /***/ }),
  42086. /* 622 */
  42087. /***/ (function(module, exports) {
  42088. module.exports = squaredLength
  42089. /**
  42090. * Calculates the squared length of a vec4
  42091. *
  42092. * @param {vec4} a vector to calculate squared length of
  42093. * @returns {Number} squared length of a
  42094. */
  42095. function squaredLength (a) {
  42096. var x = a[0],
  42097. y = a[1],
  42098. z = a[2],
  42099. w = a[3]
  42100. return x * x + y * y + z * z + w * w
  42101. }
  42102. /***/ }),
  42103. /* 623 */
  42104. /***/ (function(module, exports) {
  42105. module.exports = subtract
  42106. /**
  42107. * Subtracts vector b from vector a
  42108. *
  42109. * @param {vec4} out the receiving vector
  42110. * @param {vec4} a the first operand
  42111. * @param {vec4} b the second operand
  42112. * @returns {vec4} out
  42113. */
  42114. function subtract (out, a, b) {
  42115. out[0] = a[0] - b[0]
  42116. out[1] = a[1] - b[1]
  42117. out[2] = a[2] - b[2]
  42118. out[3] = a[3] - b[3]
  42119. return out
  42120. }
  42121. /***/ }),
  42122. /* 624 */
  42123. /***/ (function(module, exports, __webpack_require__) {
  42124. var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.7 - 2016-04-22
  42125. * http://hammerjs.github.io/
  42126. *
  42127. * Copyright (c) 2016 Jorik Tangelder;
  42128. * Licensed under the MIT license */
  42129. (function(window, document, exportName, undefined) {
  42130. 'use strict';
  42131. var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];
  42132. var TEST_ELEMENT = document.createElement('div');
  42133. var TYPE_FUNCTION = 'function';
  42134. var round = Math.round;
  42135. var abs = Math.abs;
  42136. var now = Date.now;
  42137. /**
  42138. * set a timeout with a given scope
  42139. * @param {Function} fn
  42140. * @param {Number} timeout
  42141. * @param {Object} context
  42142. * @returns {number}
  42143. */
  42144. function setTimeoutContext(fn, timeout, context) {
  42145. return setTimeout(bindFn(fn, context), timeout);
  42146. }
  42147. /**
  42148. * if the argument is an array, we want to execute the fn on each entry
  42149. * if it aint an array we don't want to do a thing.
  42150. * this is used by all the methods that accept a single and array argument.
  42151. * @param {*|Array} arg
  42152. * @param {String} fn
  42153. * @param {Object} [context]
  42154. * @returns {Boolean}
  42155. */
  42156. function invokeArrayArg(arg, fn, context) {
  42157. if (Array.isArray(arg)) {
  42158. each(arg, context[fn], context);
  42159. return true;
  42160. }
  42161. return false;
  42162. }
  42163. /**
  42164. * walk objects and arrays
  42165. * @param {Object} obj
  42166. * @param {Function} iterator
  42167. * @param {Object} context
  42168. */
  42169. function each(obj, iterator, context) {
  42170. var i;
  42171. if (!obj) {
  42172. return;
  42173. }
  42174. if (obj.forEach) {
  42175. obj.forEach(iterator, context);
  42176. } else if (obj.length !== undefined) {
  42177. i = 0;
  42178. while (i < obj.length) {
  42179. iterator.call(context, obj[i], i, obj);
  42180. i++;
  42181. }
  42182. } else {
  42183. for (i in obj) {
  42184. obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);
  42185. }
  42186. }
  42187. }
  42188. /**
  42189. * wrap a method with a deprecation warning and stack trace
  42190. * @param {Function} method
  42191. * @param {String} name
  42192. * @param {String} message
  42193. * @returns {Function} A new function wrapping the supplied method.
  42194. */
  42195. function deprecate(method, name, message) {
  42196. var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\n' + message + ' AT \n';
  42197. return function() {
  42198. var e = new Error('get-stack-trace');
  42199. var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '')
  42200. .replace(/^\s+at\s+/gm, '')
  42201. .replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';
  42202. var log = window.console && (window.console.warn || window.console.log);
  42203. if (log) {
  42204. log.call(window.console, deprecationMessage, stack);
  42205. }
  42206. return method.apply(this, arguments);
  42207. };
  42208. }
  42209. /**
  42210. * extend object.
  42211. * means that properties in dest will be overwritten by the ones in src.
  42212. * @param {Object} target
  42213. * @param {...Object} objects_to_assign
  42214. * @returns {Object} target
  42215. */
  42216. var assign;
  42217. if (typeof Object.assign !== 'function') {
  42218. assign = function assign(target) {
  42219. if (target === undefined || target === null) {
  42220. throw new TypeError('Cannot convert undefined or null to object');
  42221. }
  42222. var output = Object(target);
  42223. for (var index = 1; index < arguments.length; index++) {
  42224. var source = arguments[index];
  42225. if (source !== undefined && source !== null) {
  42226. for (var nextKey in source) {
  42227. if (source.hasOwnProperty(nextKey)) {
  42228. output[nextKey] = source[nextKey];
  42229. }
  42230. }
  42231. }
  42232. }
  42233. return output;
  42234. };
  42235. } else {
  42236. assign = Object.assign;
  42237. }
  42238. /**
  42239. * extend object.
  42240. * means that properties in dest will be overwritten by the ones in src.
  42241. * @param {Object} dest
  42242. * @param {Object} src
  42243. * @param {Boolean} [merge=false]
  42244. * @returns {Object} dest
  42245. */
  42246. var extend = deprecate(function extend(dest, src, merge) {
  42247. var keys = Object.keys(src);
  42248. var i = 0;
  42249. while (i < keys.length) {
  42250. if (!merge || (merge && dest[keys[i]] === undefined)) {
  42251. dest[keys[i]] = src[keys[i]];
  42252. }
  42253. i++;
  42254. }
  42255. return dest;
  42256. }, 'extend', 'Use `assign`.');
  42257. /**
  42258. * merge the values from src in the dest.
  42259. * means that properties that exist in dest will not be overwritten by src
  42260. * @param {Object} dest
  42261. * @param {Object} src
  42262. * @returns {Object} dest
  42263. */
  42264. var merge = deprecate(function merge(dest, src) {
  42265. return extend(dest, src, true);
  42266. }, 'merge', 'Use `assign`.');
  42267. /**
  42268. * simple class inheritance
  42269. * @param {Function} child
  42270. * @param {Function} base
  42271. * @param {Object} [properties]
  42272. */
  42273. function inherit(child, base, properties) {
  42274. var baseP = base.prototype,
  42275. childP;
  42276. childP = child.prototype = Object.create(baseP);
  42277. childP.constructor = child;
  42278. childP._super = baseP;
  42279. if (properties) {
  42280. assign(childP, properties);
  42281. }
  42282. }
  42283. /**
  42284. * simple function bind
  42285. * @param {Function} fn
  42286. * @param {Object} context
  42287. * @returns {Function}
  42288. */
  42289. function bindFn(fn, context) {
  42290. return function boundFn() {
  42291. return fn.apply(context, arguments);
  42292. };
  42293. }
  42294. /**
  42295. * let a boolean value also be a function that must return a boolean
  42296. * this first item in args will be used as the context
  42297. * @param {Boolean|Function} val
  42298. * @param {Array} [args]
  42299. * @returns {Boolean}
  42300. */
  42301. function boolOrFn(val, args) {
  42302. if (typeof val == TYPE_FUNCTION) {
  42303. return val.apply(args ? args[0] || undefined : undefined, args);
  42304. }
  42305. return val;
  42306. }
  42307. /**
  42308. * use the val2 when val1 is undefined
  42309. * @param {*} val1
  42310. * @param {*} val2
  42311. * @returns {*}
  42312. */
  42313. function ifUndefined(val1, val2) {
  42314. return (val1 === undefined) ? val2 : val1;
  42315. }
  42316. /**
  42317. * addEventListener with multiple events at once
  42318. * @param {EventTarget} target
  42319. * @param {String} types
  42320. * @param {Function} handler
  42321. */
  42322. function addEventListeners(target, types, handler) {
  42323. each(splitStr(types), function(type) {
  42324. target.addEventListener(type, handler, false);
  42325. });
  42326. }
  42327. /**
  42328. * removeEventListener with multiple events at once
  42329. * @param {EventTarget} target
  42330. * @param {String} types
  42331. * @param {Function} handler
  42332. */
  42333. function removeEventListeners(target, types, handler) {
  42334. each(splitStr(types), function(type) {
  42335. target.removeEventListener(type, handler, false);
  42336. });
  42337. }
  42338. /**
  42339. * find if a node is in the given parent
  42340. * @method hasParent
  42341. * @param {HTMLElement} node
  42342. * @param {HTMLElement} parent
  42343. * @return {Boolean} found
  42344. */
  42345. function hasParent(node, parent) {
  42346. while (node) {
  42347. if (node == parent) {
  42348. return true;
  42349. }
  42350. node = node.parentNode;
  42351. }
  42352. return false;
  42353. }
  42354. /**
  42355. * small indexOf wrapper
  42356. * @param {String} str
  42357. * @param {String} find
  42358. * @returns {Boolean} found
  42359. */
  42360. function inStr(str, find) {
  42361. return str.indexOf(find) > -1;
  42362. }
  42363. /**
  42364. * split string on whitespace
  42365. * @param {String} str
  42366. * @returns {Array} words
  42367. */
  42368. function splitStr(str) {
  42369. return str.trim().split(/\s+/g);
  42370. }
  42371. /**
  42372. * find if a array contains the object using indexOf or a simple polyFill
  42373. * @param {Array} src
  42374. * @param {String} find
  42375. * @param {String} [findByKey]
  42376. * @return {Boolean|Number} false when not found, or the index
  42377. */
  42378. function inArray(src, find, findByKey) {
  42379. if (src.indexOf && !findByKey) {
  42380. return src.indexOf(find);
  42381. } else {
  42382. var i = 0;
  42383. while (i < src.length) {
  42384. if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {
  42385. return i;
  42386. }
  42387. i++;
  42388. }
  42389. return -1;
  42390. }
  42391. }
  42392. /**
  42393. * convert array-like objects to real arrays
  42394. * @param {Object} obj
  42395. * @returns {Array}
  42396. */
  42397. function toArray(obj) {
  42398. return Array.prototype.slice.call(obj, 0);
  42399. }
  42400. /**
  42401. * unique array with objects based on a key (like 'id') or just by the array's value
  42402. * @param {Array} src [{id:1},{id:2},{id:1}]
  42403. * @param {String} [key]
  42404. * @param {Boolean} [sort=False]
  42405. * @returns {Array} [{id:1},{id:2}]
  42406. */
  42407. function uniqueArray(src, key, sort) {
  42408. var results = [];
  42409. var values = [];
  42410. var i = 0;
  42411. while (i < src.length) {
  42412. var val = key ? src[i][key] : src[i];
  42413. if (inArray(values, val) < 0) {
  42414. results.push(src[i]);
  42415. }
  42416. values[i] = val;
  42417. i++;
  42418. }
  42419. if (sort) {
  42420. if (!key) {
  42421. results = results.sort();
  42422. } else {
  42423. results = results.sort(function sortUniqueArray(a, b) {
  42424. return a[key] > b[key];
  42425. });
  42426. }
  42427. }
  42428. return results;
  42429. }
  42430. /**
  42431. * get the prefixed property
  42432. * @param {Object} obj
  42433. * @param {String} property
  42434. * @returns {String|Undefined} prefixed
  42435. */
  42436. function prefixed(obj, property) {
  42437. var prefix, prop;
  42438. var camelProp = property[0].toUpperCase() + property.slice(1);
  42439. var i = 0;
  42440. while (i < VENDOR_PREFIXES.length) {
  42441. prefix = VENDOR_PREFIXES[i];
  42442. prop = (prefix) ? prefix + camelProp : property;
  42443. if (prop in obj) {
  42444. return prop;
  42445. }
  42446. i++;
  42447. }
  42448. return undefined;
  42449. }
  42450. /**
  42451. * get a unique id
  42452. * @returns {number} uniqueId
  42453. */
  42454. var _uniqueId = 1;
  42455. function uniqueId() {
  42456. return _uniqueId++;
  42457. }
  42458. /**
  42459. * get the window object of an element
  42460. * @param {HTMLElement} element
  42461. * @returns {DocumentView|Window}
  42462. */
  42463. function getWindowForElement(element) {
  42464. var doc = element.ownerDocument || element;
  42465. return (doc.defaultView || doc.parentWindow || window);
  42466. }
  42467. var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;
  42468. var SUPPORT_TOUCH = ('ontouchstart' in window);
  42469. var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;
  42470. var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);
  42471. var INPUT_TYPE_TOUCH = 'touch';
  42472. var INPUT_TYPE_PEN = 'pen';
  42473. var INPUT_TYPE_MOUSE = 'mouse';
  42474. var INPUT_TYPE_KINECT = 'kinect';
  42475. var COMPUTE_INTERVAL = 25;
  42476. var INPUT_START = 1;
  42477. var INPUT_MOVE = 2;
  42478. var INPUT_END = 4;
  42479. var INPUT_CANCEL = 8;
  42480. var DIRECTION_NONE = 1;
  42481. var DIRECTION_LEFT = 2;
  42482. var DIRECTION_RIGHT = 4;
  42483. var DIRECTION_UP = 8;
  42484. var DIRECTION_DOWN = 16;
  42485. var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;
  42486. var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;
  42487. var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;
  42488. var PROPS_XY = ['x', 'y'];
  42489. var PROPS_CLIENT_XY = ['clientX', 'clientY'];
  42490. /**
  42491. * create new input type manager
  42492. * @param {Manager} manager
  42493. * @param {Function} callback
  42494. * @returns {Input}
  42495. * @constructor
  42496. */
  42497. function Input(manager, callback) {
  42498. var self = this;
  42499. this.manager = manager;
  42500. this.callback = callback;
  42501. this.element = manager.element;
  42502. this.target = manager.options.inputTarget;
  42503. // smaller wrapper around the handler, for the scope and the enabled state of the manager,
  42504. // so when disabled the input events are completely bypassed.
  42505. this.domHandler = function(ev) {
  42506. if (boolOrFn(manager.options.enable, [manager])) {
  42507. self.handler(ev);
  42508. }
  42509. };
  42510. this.init();
  42511. }
  42512. Input.prototype = {
  42513. /**
  42514. * should handle the inputEvent data and trigger the callback
  42515. * @virtual
  42516. */
  42517. handler: function() { },
  42518. /**
  42519. * bind the events
  42520. */
  42521. init: function() {
  42522. this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);
  42523. this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);
  42524. this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
  42525. },
  42526. /**
  42527. * unbind the events
  42528. */
  42529. destroy: function() {
  42530. this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);
  42531. this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);
  42532. this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
  42533. }
  42534. };
  42535. /**
  42536. * create new input type manager
  42537. * called by the Manager constructor
  42538. * @param {Hammer} manager
  42539. * @returns {Input}
  42540. */
  42541. function createInputInstance(manager) {
  42542. var Type;
  42543. var inputClass = manager.options.inputClass;
  42544. if (inputClass) {
  42545. Type = inputClass;
  42546. } else if (SUPPORT_POINTER_EVENTS) {
  42547. Type = PointerEventInput;
  42548. } else if (SUPPORT_ONLY_TOUCH) {
  42549. Type = TouchInput;
  42550. } else if (!SUPPORT_TOUCH) {
  42551. Type = MouseInput;
  42552. } else {
  42553. Type = TouchMouseInput;
  42554. }
  42555. return new (Type)(manager, inputHandler);
  42556. }
  42557. /**
  42558. * handle input events
  42559. * @param {Manager} manager
  42560. * @param {String} eventType
  42561. * @param {Object} input
  42562. */
  42563. function inputHandler(manager, eventType, input) {
  42564. var pointersLen = input.pointers.length;
  42565. var changedPointersLen = input.changedPointers.length;
  42566. var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));
  42567. var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));
  42568. input.isFirst = !!isFirst;
  42569. input.isFinal = !!isFinal;
  42570. if (isFirst) {
  42571. manager.session = {};
  42572. }
  42573. // source event is the normalized value of the domEvents
  42574. // like 'touchstart, mouseup, pointerdown'
  42575. input.eventType = eventType;
  42576. // compute scale, rotation etc
  42577. computeInputData(manager, input);
  42578. // emit secret event
  42579. manager.emit('hammer.input', input);
  42580. manager.recognize(input);
  42581. manager.session.prevInput = input;
  42582. }
  42583. /**
  42584. * extend the data with some usable properties like scale, rotate, velocity etc
  42585. * @param {Object} manager
  42586. * @param {Object} input
  42587. */
  42588. function computeInputData(manager, input) {
  42589. var session = manager.session;
  42590. var pointers = input.pointers;
  42591. var pointersLength = pointers.length;
  42592. // store the first input to calculate the distance and direction
  42593. if (!session.firstInput) {
  42594. session.firstInput = simpleCloneInputData(input);
  42595. }
  42596. // to compute scale and rotation we need to store the multiple touches
  42597. if (pointersLength > 1 && !session.firstMultiple) {
  42598. session.firstMultiple = simpleCloneInputData(input);
  42599. } else if (pointersLength === 1) {
  42600. session.firstMultiple = false;
  42601. }
  42602. var firstInput = session.firstInput;
  42603. var firstMultiple = session.firstMultiple;
  42604. var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;
  42605. var center = input.center = getCenter(pointers);
  42606. input.timeStamp = now();
  42607. input.deltaTime = input.timeStamp - firstInput.timeStamp;
  42608. input.angle = getAngle(offsetCenter, center);
  42609. input.distance = getDistance(offsetCenter, center);
  42610. computeDeltaXY(session, input);
  42611. input.offsetDirection = getDirection(input.deltaX, input.deltaY);
  42612. var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);
  42613. input.overallVelocityX = overallVelocity.x;
  42614. input.overallVelocityY = overallVelocity.y;
  42615. input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;
  42616. input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;
  42617. input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;
  42618. input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >
  42619. session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);
  42620. computeIntervalInputData(session, input);
  42621. // find the correct target
  42622. var target = manager.element;
  42623. if (hasParent(input.srcEvent.target, target)) {
  42624. target = input.srcEvent.target;
  42625. }
  42626. input.target = target;
  42627. }
  42628. function computeDeltaXY(session, input) {
  42629. var center = input.center;
  42630. var offset = session.offsetDelta || {};
  42631. var prevDelta = session.prevDelta || {};
  42632. var prevInput = session.prevInput || {};
  42633. if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {
  42634. prevDelta = session.prevDelta = {
  42635. x: prevInput.deltaX || 0,
  42636. y: prevInput.deltaY || 0
  42637. };
  42638. offset = session.offsetDelta = {
  42639. x: center.x,
  42640. y: center.y
  42641. };
  42642. }
  42643. input.deltaX = prevDelta.x + (center.x - offset.x);
  42644. input.deltaY = prevDelta.y + (center.y - offset.y);
  42645. }
  42646. /**
  42647. * velocity is calculated every x ms
  42648. * @param {Object} session
  42649. * @param {Object} input
  42650. */
  42651. function computeIntervalInputData(session, input) {
  42652. var last = session.lastInterval || input,
  42653. deltaTime = input.timeStamp - last.timeStamp,
  42654. velocity, velocityX, velocityY, direction;
  42655. if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {
  42656. var deltaX = input.deltaX - last.deltaX;
  42657. var deltaY = input.deltaY - last.deltaY;
  42658. var v = getVelocity(deltaTime, deltaX, deltaY);
  42659. velocityX = v.x;
  42660. velocityY = v.y;
  42661. velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;
  42662. direction = getDirection(deltaX, deltaY);
  42663. session.lastInterval = input;
  42664. } else {
  42665. // use latest velocity info if it doesn't overtake a minimum period
  42666. velocity = last.velocity;
  42667. velocityX = last.velocityX;
  42668. velocityY = last.velocityY;
  42669. direction = last.direction;
  42670. }
  42671. input.velocity = velocity;
  42672. input.velocityX = velocityX;
  42673. input.velocityY = velocityY;
  42674. input.direction = direction;
  42675. }
  42676. /**
  42677. * create a simple clone from the input used for storage of firstInput and firstMultiple
  42678. * @param {Object} input
  42679. * @returns {Object} clonedInputData
  42680. */
  42681. function simpleCloneInputData(input) {
  42682. // make a simple copy of the pointers because we will get a reference if we don't
  42683. // we only need clientXY for the calculations
  42684. var pointers = [];
  42685. var i = 0;
  42686. while (i < input.pointers.length) {
  42687. pointers[i] = {
  42688. clientX: round(input.pointers[i].clientX),
  42689. clientY: round(input.pointers[i].clientY)
  42690. };
  42691. i++;
  42692. }
  42693. return {
  42694. timeStamp: now(),
  42695. pointers: pointers,
  42696. center: getCenter(pointers),
  42697. deltaX: input.deltaX,
  42698. deltaY: input.deltaY
  42699. };
  42700. }
  42701. /**
  42702. * get the center of all the pointers
  42703. * @param {Array} pointers
  42704. * @return {Object} center contains `x` and `y` properties
  42705. */
  42706. function getCenter(pointers) {
  42707. var pointersLength = pointers.length;
  42708. // no need to loop when only one touch
  42709. if (pointersLength === 1) {
  42710. return {
  42711. x: round(pointers[0].clientX),
  42712. y: round(pointers[0].clientY)
  42713. };
  42714. }
  42715. var x = 0, y = 0, i = 0;
  42716. while (i < pointersLength) {
  42717. x += pointers[i].clientX;
  42718. y += pointers[i].clientY;
  42719. i++;
  42720. }
  42721. return {
  42722. x: round(x / pointersLength),
  42723. y: round(y / pointersLength)
  42724. };
  42725. }
  42726. /**
  42727. * calculate the velocity between two points. unit is in px per ms.
  42728. * @param {Number} deltaTime
  42729. * @param {Number} x
  42730. * @param {Number} y
  42731. * @return {Object} velocity `x` and `y`
  42732. */
  42733. function getVelocity(deltaTime, x, y) {
  42734. return {
  42735. x: x / deltaTime || 0,
  42736. y: y / deltaTime || 0
  42737. };
  42738. }
  42739. /**
  42740. * get the direction between two points
  42741. * @param {Number} x
  42742. * @param {Number} y
  42743. * @return {Number} direction
  42744. */
  42745. function getDirection(x, y) {
  42746. if (x === y) {
  42747. return DIRECTION_NONE;
  42748. }
  42749. if (abs(x) >= abs(y)) {
  42750. return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;
  42751. }
  42752. return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;
  42753. }
  42754. /**
  42755. * calculate the absolute distance between two points
  42756. * @param {Object} p1 {x, y}
  42757. * @param {Object} p2 {x, y}
  42758. * @param {Array} [props] containing x and y keys
  42759. * @return {Number} distance
  42760. */
  42761. function getDistance(p1, p2, props) {
  42762. if (!props) {
  42763. props = PROPS_XY;
  42764. }
  42765. var x = p2[props[0]] - p1[props[0]],
  42766. y = p2[props[1]] - p1[props[1]];
  42767. return Math.sqrt((x * x) + (y * y));
  42768. }
  42769. /**
  42770. * calculate the angle between two coordinates
  42771. * @param {Object} p1
  42772. * @param {Object} p2
  42773. * @param {Array} [props] containing x and y keys
  42774. * @return {Number} angle
  42775. */
  42776. function getAngle(p1, p2, props) {
  42777. if (!props) {
  42778. props = PROPS_XY;
  42779. }
  42780. var x = p2[props[0]] - p1[props[0]],
  42781. y = p2[props[1]] - p1[props[1]];
  42782. return Math.atan2(y, x) * 180 / Math.PI;
  42783. }
  42784. /**
  42785. * calculate the rotation degrees between two pointersets
  42786. * @param {Array} start array of pointers
  42787. * @param {Array} end array of pointers
  42788. * @return {Number} rotation
  42789. */
  42790. function getRotation(start, end) {
  42791. return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);
  42792. }
  42793. /**
  42794. * calculate the scale factor between two pointersets
  42795. * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out
  42796. * @param {Array} start array of pointers
  42797. * @param {Array} end array of pointers
  42798. * @return {Number} scale
  42799. */
  42800. function getScale(start, end) {
  42801. return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);
  42802. }
  42803. var MOUSE_INPUT_MAP = {
  42804. mousedown: INPUT_START,
  42805. mousemove: INPUT_MOVE,
  42806. mouseup: INPUT_END
  42807. };
  42808. var MOUSE_ELEMENT_EVENTS = 'mousedown';
  42809. var MOUSE_WINDOW_EVENTS = 'mousemove mouseup';
  42810. /**
  42811. * Mouse events input
  42812. * @constructor
  42813. * @extends Input
  42814. */
  42815. function MouseInput() {
  42816. this.evEl = MOUSE_ELEMENT_EVENTS;
  42817. this.evWin = MOUSE_WINDOW_EVENTS;
  42818. this.pressed = false; // mousedown state
  42819. Input.apply(this, arguments);
  42820. }
  42821. inherit(MouseInput, Input, {
  42822. /**
  42823. * handle mouse events
  42824. * @param {Object} ev
  42825. */
  42826. handler: function MEhandler(ev) {
  42827. var eventType = MOUSE_INPUT_MAP[ev.type];
  42828. // on start we want to have the left mouse button down
  42829. if (eventType & INPUT_START && ev.button === 0) {
  42830. this.pressed = true;
  42831. }
  42832. if (eventType & INPUT_MOVE && ev.which !== 1) {
  42833. eventType = INPUT_END;
  42834. }
  42835. // mouse must be down
  42836. if (!this.pressed) {
  42837. return;
  42838. }
  42839. if (eventType & INPUT_END) {
  42840. this.pressed = false;
  42841. }
  42842. this.callback(this.manager, eventType, {
  42843. pointers: [ev],
  42844. changedPointers: [ev],
  42845. pointerType: INPUT_TYPE_MOUSE,
  42846. srcEvent: ev
  42847. });
  42848. }
  42849. });
  42850. var POINTER_INPUT_MAP = {
  42851. pointerdown: INPUT_START,
  42852. pointermove: INPUT_MOVE,
  42853. pointerup: INPUT_END,
  42854. pointercancel: INPUT_CANCEL,
  42855. pointerout: INPUT_CANCEL
  42856. };
  42857. // in IE10 the pointer types is defined as an enum
  42858. var IE10_POINTER_TYPE_ENUM = {
  42859. 2: INPUT_TYPE_TOUCH,
  42860. 3: INPUT_TYPE_PEN,
  42861. 4: INPUT_TYPE_MOUSE,
  42862. 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816
  42863. };
  42864. var POINTER_ELEMENT_EVENTS = 'pointerdown';
  42865. var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';
  42866. // IE10 has prefixed support, and case-sensitive
  42867. if (window.MSPointerEvent && !window.PointerEvent) {
  42868. POINTER_ELEMENT_EVENTS = 'MSPointerDown';
  42869. POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';
  42870. }
  42871. /**
  42872. * Pointer events input
  42873. * @constructor
  42874. * @extends Input
  42875. */
  42876. function PointerEventInput() {
  42877. this.evEl = POINTER_ELEMENT_EVENTS;
  42878. this.evWin = POINTER_WINDOW_EVENTS;
  42879. Input.apply(this, arguments);
  42880. this.store = (this.manager.session.pointerEvents = []);
  42881. }
  42882. inherit(PointerEventInput, Input, {
  42883. /**
  42884. * handle mouse events
  42885. * @param {Object} ev
  42886. */
  42887. handler: function PEhandler(ev) {
  42888. var store = this.store;
  42889. var removePointer = false;
  42890. var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');
  42891. var eventType = POINTER_INPUT_MAP[eventTypeNormalized];
  42892. var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;
  42893. var isTouch = (pointerType == INPUT_TYPE_TOUCH);
  42894. // get index of the event in the store
  42895. var storeIndex = inArray(store, ev.pointerId, 'pointerId');
  42896. // start and mouse must be down
  42897. if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {
  42898. if (storeIndex < 0) {
  42899. store.push(ev);
  42900. storeIndex = store.length - 1;
  42901. }
  42902. } else if (eventType & (INPUT_END | INPUT_CANCEL)) {
  42903. removePointer = true;
  42904. }
  42905. // it not found, so the pointer hasn't been down (so it's probably a hover)
  42906. if (storeIndex < 0) {
  42907. return;
  42908. }
  42909. // update the event in the store
  42910. store[storeIndex] = ev;
  42911. this.callback(this.manager, eventType, {
  42912. pointers: store,
  42913. changedPointers: [ev],
  42914. pointerType: pointerType,
  42915. srcEvent: ev
  42916. });
  42917. if (removePointer) {
  42918. // remove from the store
  42919. store.splice(storeIndex, 1);
  42920. }
  42921. }
  42922. });
  42923. var SINGLE_TOUCH_INPUT_MAP = {
  42924. touchstart: INPUT_START,
  42925. touchmove: INPUT_MOVE,
  42926. touchend: INPUT_END,
  42927. touchcancel: INPUT_CANCEL
  42928. };
  42929. var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';
  42930. var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';
  42931. /**
  42932. * Touch events input
  42933. * @constructor
  42934. * @extends Input
  42935. */
  42936. function SingleTouchInput() {
  42937. this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;
  42938. this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;
  42939. this.started = false;
  42940. Input.apply(this, arguments);
  42941. }
  42942. inherit(SingleTouchInput, Input, {
  42943. handler: function TEhandler(ev) {
  42944. var type = SINGLE_TOUCH_INPUT_MAP[ev.type];
  42945. // should we handle the touch events?
  42946. if (type === INPUT_START) {
  42947. this.started = true;
  42948. }
  42949. if (!this.started) {
  42950. return;
  42951. }
  42952. var touches = normalizeSingleTouches.call(this, ev, type);
  42953. // when done, reset the started state
  42954. if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {
  42955. this.started = false;
  42956. }
  42957. this.callback(this.manager, type, {
  42958. pointers: touches[0],
  42959. changedPointers: touches[1],
  42960. pointerType: INPUT_TYPE_TOUCH,
  42961. srcEvent: ev
  42962. });
  42963. }
  42964. });
  42965. /**
  42966. * @this {TouchInput}
  42967. * @param {Object} ev
  42968. * @param {Number} type flag
  42969. * @returns {undefined|Array} [all, changed]
  42970. */
  42971. function normalizeSingleTouches(ev, type) {
  42972. var all = toArray(ev.touches);
  42973. var changed = toArray(ev.changedTouches);
  42974. if (type & (INPUT_END | INPUT_CANCEL)) {
  42975. all = uniqueArray(all.concat(changed), 'identifier', true);
  42976. }
  42977. return [all, changed];
  42978. }
  42979. var TOUCH_INPUT_MAP = {
  42980. touchstart: INPUT_START,
  42981. touchmove: INPUT_MOVE,
  42982. touchend: INPUT_END,
  42983. touchcancel: INPUT_CANCEL
  42984. };
  42985. var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';
  42986. /**
  42987. * Multi-user touch events input
  42988. * @constructor
  42989. * @extends Input
  42990. */
  42991. function TouchInput() {
  42992. this.evTarget = TOUCH_TARGET_EVENTS;
  42993. this.targetIds = {};
  42994. Input.apply(this, arguments);
  42995. }
  42996. inherit(TouchInput, Input, {
  42997. handler: function MTEhandler(ev) {
  42998. var type = TOUCH_INPUT_MAP[ev.type];
  42999. var touches = getTouches.call(this, ev, type);
  43000. if (!touches) {
  43001. return;
  43002. }
  43003. this.callback(this.manager, type, {
  43004. pointers: touches[0],
  43005. changedPointers: touches[1],
  43006. pointerType: INPUT_TYPE_TOUCH,
  43007. srcEvent: ev
  43008. });
  43009. }
  43010. });
  43011. /**
  43012. * @this {TouchInput}
  43013. * @param {Object} ev
  43014. * @param {Number} type flag
  43015. * @returns {undefined|Array} [all, changed]
  43016. */
  43017. function getTouches(ev, type) {
  43018. var allTouches = toArray(ev.touches);
  43019. var targetIds = this.targetIds;
  43020. // when there is only one touch, the process can be simplified
  43021. if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {
  43022. targetIds[allTouches[0].identifier] = true;
  43023. return [allTouches, allTouches];
  43024. }
  43025. var i,
  43026. targetTouches,
  43027. changedTouches = toArray(ev.changedTouches),
  43028. changedTargetTouches = [],
  43029. target = this.target;
  43030. // get target touches from touches
  43031. targetTouches = allTouches.filter(function(touch) {
  43032. return hasParent(touch.target, target);
  43033. });
  43034. // collect touches
  43035. if (type === INPUT_START) {
  43036. i = 0;
  43037. while (i < targetTouches.length) {
  43038. targetIds[targetTouches[i].identifier] = true;
  43039. i++;
  43040. }
  43041. }
  43042. // filter changed touches to only contain touches that exist in the collected target ids
  43043. i = 0;
  43044. while (i < changedTouches.length) {
  43045. if (targetIds[changedTouches[i].identifier]) {
  43046. changedTargetTouches.push(changedTouches[i]);
  43047. }
  43048. // cleanup removed touches
  43049. if (type & (INPUT_END | INPUT_CANCEL)) {
  43050. delete targetIds[changedTouches[i].identifier];
  43051. }
  43052. i++;
  43053. }
  43054. if (!changedTargetTouches.length) {
  43055. return;
  43056. }
  43057. return [
  43058. // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'
  43059. uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),
  43060. changedTargetTouches
  43061. ];
  43062. }
  43063. /**
  43064. * Combined touch and mouse input
  43065. *
  43066. * Touch has a higher priority then mouse, and while touching no mouse events are allowed.
  43067. * This because touch devices also emit mouse events while doing a touch.
  43068. *
  43069. * @constructor
  43070. * @extends Input
  43071. */
  43072. var DEDUP_TIMEOUT = 2500;
  43073. var DEDUP_DISTANCE = 25;
  43074. function TouchMouseInput() {
  43075. Input.apply(this, arguments);
  43076. var handler = bindFn(this.handler, this);
  43077. this.touch = new TouchInput(this.manager, handler);
  43078. this.mouse = new MouseInput(this.manager, handler);
  43079. this.primaryTouch = null;
  43080. this.lastTouches = [];
  43081. }
  43082. inherit(TouchMouseInput, Input, {
  43083. /**
  43084. * handle mouse and touch events
  43085. * @param {Hammer} manager
  43086. * @param {String} inputEvent
  43087. * @param {Object} inputData
  43088. */
  43089. handler: function TMEhandler(manager, inputEvent, inputData) {
  43090. var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),
  43091. isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);
  43092. if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {
  43093. return;
  43094. }
  43095. // when we're in a touch event, record touches to de-dupe synthetic mouse event
  43096. if (isTouch) {
  43097. recordTouches.call(this, inputEvent, inputData);
  43098. } else if (isMouse && isSyntheticEvent.call(this, inputData)) {
  43099. return;
  43100. }
  43101. this.callback(manager, inputEvent, inputData);
  43102. },
  43103. /**
  43104. * remove the event listeners
  43105. */
  43106. destroy: function destroy() {
  43107. this.touch.destroy();
  43108. this.mouse.destroy();
  43109. }
  43110. });
  43111. function recordTouches(eventType, eventData) {
  43112. if (eventType & INPUT_START) {
  43113. this.primaryTouch = eventData.changedPointers[0].identifier;
  43114. setLastTouch.call(this, eventData);
  43115. } else if (eventType & (INPUT_END | INPUT_CANCEL)) {
  43116. setLastTouch.call(this, eventData);
  43117. }
  43118. }
  43119. function setLastTouch(eventData) {
  43120. var touch = eventData.changedPointers[0];
  43121. if (touch.identifier === this.primaryTouch) {
  43122. var lastTouch = {x: touch.clientX, y: touch.clientY};
  43123. this.lastTouches.push(lastTouch);
  43124. var lts = this.lastTouches;
  43125. var removeLastTouch = function() {
  43126. var i = lts.indexOf(lastTouch);
  43127. if (i > -1) {
  43128. lts.splice(i, 1);
  43129. }
  43130. };
  43131. setTimeout(removeLastTouch, DEDUP_TIMEOUT);
  43132. }
  43133. }
  43134. function isSyntheticEvent(eventData) {
  43135. var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;
  43136. for (var i = 0; i < this.lastTouches.length; i++) {
  43137. var t = this.lastTouches[i];
  43138. var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);
  43139. if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {
  43140. return true;
  43141. }
  43142. }
  43143. return false;
  43144. }
  43145. var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');
  43146. var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;
  43147. // magical touchAction value
  43148. var TOUCH_ACTION_COMPUTE = 'compute';
  43149. var TOUCH_ACTION_AUTO = 'auto';
  43150. var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented
  43151. var TOUCH_ACTION_NONE = 'none';
  43152. var TOUCH_ACTION_PAN_X = 'pan-x';
  43153. var TOUCH_ACTION_PAN_Y = 'pan-y';
  43154. var TOUCH_ACTION_MAP = getTouchActionProps();
  43155. /**
  43156. * Touch Action
  43157. * sets the touchAction property or uses the js alternative
  43158. * @param {Manager} manager
  43159. * @param {String} value
  43160. * @constructor
  43161. */
  43162. function TouchAction(manager, value) {
  43163. this.manager = manager;
  43164. this.set(value);
  43165. }
  43166. TouchAction.prototype = {
  43167. /**
  43168. * set the touchAction value on the element or enable the polyfill
  43169. * @param {String} value
  43170. */
  43171. set: function(value) {
  43172. // find out the touch-action by the event handlers
  43173. if (value == TOUCH_ACTION_COMPUTE) {
  43174. value = this.compute();
  43175. }
  43176. if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {
  43177. this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;
  43178. }
  43179. this.actions = value.toLowerCase().trim();
  43180. },
  43181. /**
  43182. * just re-set the touchAction value
  43183. */
  43184. update: function() {
  43185. this.set(this.manager.options.touchAction);
  43186. },
  43187. /**
  43188. * compute the value for the touchAction property based on the recognizer's settings
  43189. * @returns {String} value
  43190. */
  43191. compute: function() {
  43192. var actions = [];
  43193. each(this.manager.recognizers, function(recognizer) {
  43194. if (boolOrFn(recognizer.options.enable, [recognizer])) {
  43195. actions = actions.concat(recognizer.getTouchAction());
  43196. }
  43197. });
  43198. return cleanTouchActions(actions.join(' '));
  43199. },
  43200. /**
  43201. * this method is called on each input cycle and provides the preventing of the browser behavior
  43202. * @param {Object} input
  43203. */
  43204. preventDefaults: function(input) {
  43205. var srcEvent = input.srcEvent;
  43206. var direction = input.offsetDirection;
  43207. // if the touch action did prevented once this session
  43208. if (this.manager.session.prevented) {
  43209. srcEvent.preventDefault();
  43210. return;
  43211. }
  43212. var actions = this.actions;
  43213. var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];
  43214. var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];
  43215. var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];
  43216. if (hasNone) {
  43217. //do not prevent defaults if this is a tap gesture
  43218. var isTapPointer = input.pointers.length === 1;
  43219. var isTapMovement = input.distance < 2;
  43220. var isTapTouchTime = input.deltaTime < 250;
  43221. if (isTapPointer && isTapMovement && isTapTouchTime) {
  43222. return;
  43223. }
  43224. }
  43225. if (hasPanX && hasPanY) {
  43226. // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent
  43227. return;
  43228. }
  43229. if (hasNone ||
  43230. (hasPanY && direction & DIRECTION_HORIZONTAL) ||
  43231. (hasPanX && direction & DIRECTION_VERTICAL)) {
  43232. return this.preventSrc(srcEvent);
  43233. }
  43234. },
  43235. /**
  43236. * call preventDefault to prevent the browser's default behavior (scrolling in most cases)
  43237. * @param {Object} srcEvent
  43238. */
  43239. preventSrc: function(srcEvent) {
  43240. this.manager.session.prevented = true;
  43241. srcEvent.preventDefault();
  43242. }
  43243. };
  43244. /**
  43245. * when the touchActions are collected they are not a valid value, so we need to clean things up. *
  43246. * @param {String} actions
  43247. * @returns {*}
  43248. */
  43249. function cleanTouchActions(actions) {
  43250. // none
  43251. if (inStr(actions, TOUCH_ACTION_NONE)) {
  43252. return TOUCH_ACTION_NONE;
  43253. }
  43254. var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);
  43255. var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);
  43256. // if both pan-x and pan-y are set (different recognizers
  43257. // for different directions, e.g. horizontal pan but vertical swipe?)
  43258. // we need none (as otherwise with pan-x pan-y combined none of these
  43259. // recognizers will work, since the browser would handle all panning
  43260. if (hasPanX && hasPanY) {
  43261. return TOUCH_ACTION_NONE;
  43262. }
  43263. // pan-x OR pan-y
  43264. if (hasPanX || hasPanY) {
  43265. return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;
  43266. }
  43267. // manipulation
  43268. if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {
  43269. return TOUCH_ACTION_MANIPULATION;
  43270. }
  43271. return TOUCH_ACTION_AUTO;
  43272. }
  43273. function getTouchActionProps() {
  43274. if (!NATIVE_TOUCH_ACTION) {
  43275. return false;
  43276. }
  43277. var touchMap = {};
  43278. var cssSupports = window.CSS && window.CSS.supports;
  43279. ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {
  43280. // If css.supports is not supported but there is native touch-action assume it supports
  43281. // all values. This is the case for IE 10 and 11.
  43282. touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;
  43283. });
  43284. return touchMap;
  43285. }
  43286. /**
  43287. * Recognizer flow explained; *
  43288. * All recognizers have the initial state of POSSIBLE when a input session starts.
  43289. * The definition of a input session is from the first input until the last input, with all it's movement in it. *
  43290. * Example session for mouse-input: mousedown -> mousemove -> mouseup
  43291. *
  43292. * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed
  43293. * which determines with state it should be.
  43294. *
  43295. * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to
  43296. * POSSIBLE to give it another change on the next cycle.
  43297. *
  43298. * Possible
  43299. * |
  43300. * +-----+---------------+
  43301. * | |
  43302. * +-----+-----+ |
  43303. * | | |
  43304. * Failed Cancelled |
  43305. * +-------+------+
  43306. * | |
  43307. * Recognized Began
  43308. * |
  43309. * Changed
  43310. * |
  43311. * Ended/Recognized
  43312. */
  43313. var STATE_POSSIBLE = 1;
  43314. var STATE_BEGAN = 2;
  43315. var STATE_CHANGED = 4;
  43316. var STATE_ENDED = 8;
  43317. var STATE_RECOGNIZED = STATE_ENDED;
  43318. var STATE_CANCELLED = 16;
  43319. var STATE_FAILED = 32;
  43320. /**
  43321. * Recognizer
  43322. * Every recognizer needs to extend from this class.
  43323. * @constructor
  43324. * @param {Object} options
  43325. */
  43326. function Recognizer(options) {
  43327. this.options = assign({}, this.defaults, options || {});
  43328. this.id = uniqueId();
  43329. this.manager = null;
  43330. // default is enable true
  43331. this.options.enable = ifUndefined(this.options.enable, true);
  43332. this.state = STATE_POSSIBLE;
  43333. this.simultaneous = {};
  43334. this.requireFail = [];
  43335. }
  43336. Recognizer.prototype = {
  43337. /**
  43338. * @virtual
  43339. * @type {Object}
  43340. */
  43341. defaults: {},
  43342. /**
  43343. * set options
  43344. * @param {Object} options
  43345. * @return {Recognizer}
  43346. */
  43347. set: function(options) {
  43348. assign(this.options, options);
  43349. // also update the touchAction, in case something changed about the directions/enabled state
  43350. this.manager && this.manager.touchAction.update();
  43351. return this;
  43352. },
  43353. /**
  43354. * recognize simultaneous with an other recognizer.
  43355. * @param {Recognizer} otherRecognizer
  43356. * @returns {Recognizer} this
  43357. */
  43358. recognizeWith: function(otherRecognizer) {
  43359. if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {
  43360. return this;
  43361. }
  43362. var simultaneous = this.simultaneous;
  43363. otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
  43364. if (!simultaneous[otherRecognizer.id]) {
  43365. simultaneous[otherRecognizer.id] = otherRecognizer;
  43366. otherRecognizer.recognizeWith(this);
  43367. }
  43368. return this;
  43369. },
  43370. /**
  43371. * drop the simultaneous link. it doesnt remove the link on the other recognizer.
  43372. * @param {Recognizer} otherRecognizer
  43373. * @returns {Recognizer} this
  43374. */
  43375. dropRecognizeWith: function(otherRecognizer) {
  43376. if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {
  43377. return this;
  43378. }
  43379. otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
  43380. delete this.simultaneous[otherRecognizer.id];
  43381. return this;
  43382. },
  43383. /**
  43384. * recognizer can only run when an other is failing
  43385. * @param {Recognizer} otherRecognizer
  43386. * @returns {Recognizer} this
  43387. */
  43388. requireFailure: function(otherRecognizer) {
  43389. if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {
  43390. return this;
  43391. }
  43392. var requireFail = this.requireFail;
  43393. otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
  43394. if (inArray(requireFail, otherRecognizer) === -1) {
  43395. requireFail.push(otherRecognizer);
  43396. otherRecognizer.requireFailure(this);
  43397. }
  43398. return this;
  43399. },
  43400. /**
  43401. * drop the requireFailure link. it does not remove the link on the other recognizer.
  43402. * @param {Recognizer} otherRecognizer
  43403. * @returns {Recognizer} this
  43404. */
  43405. dropRequireFailure: function(otherRecognizer) {
  43406. if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {
  43407. return this;
  43408. }
  43409. otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
  43410. var index = inArray(this.requireFail, otherRecognizer);
  43411. if (index > -1) {
  43412. this.requireFail.splice(index, 1);
  43413. }
  43414. return this;
  43415. },
  43416. /**
  43417. * has require failures boolean
  43418. * @returns {boolean}
  43419. */
  43420. hasRequireFailures: function() {
  43421. return this.requireFail.length > 0;
  43422. },
  43423. /**
  43424. * if the recognizer can recognize simultaneous with an other recognizer
  43425. * @param {Recognizer} otherRecognizer
  43426. * @returns {Boolean}
  43427. */
  43428. canRecognizeWith: function(otherRecognizer) {
  43429. return !!this.simultaneous[otherRecognizer.id];
  43430. },
  43431. /**
  43432. * You should use `tryEmit` instead of `emit` directly to check
  43433. * that all the needed recognizers has failed before emitting.
  43434. * @param {Object} input
  43435. */
  43436. emit: function(input) {
  43437. var self = this;
  43438. var state = this.state;
  43439. function emit(event) {
  43440. self.manager.emit(event, input);
  43441. }
  43442. // 'panstart' and 'panmove'
  43443. if (state < STATE_ENDED) {
  43444. emit(self.options.event + stateStr(state));
  43445. }
  43446. emit(self.options.event); // simple 'eventName' events
  43447. if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)
  43448. emit(input.additionalEvent);
  43449. }
  43450. // panend and pancancel
  43451. if (state >= STATE_ENDED) {
  43452. emit(self.options.event + stateStr(state));
  43453. }
  43454. },
  43455. /**
  43456. * Check that all the require failure recognizers has failed,
  43457. * if true, it emits a gesture event,
  43458. * otherwise, setup the state to FAILED.
  43459. * @param {Object} input
  43460. */
  43461. tryEmit: function(input) {
  43462. if (this.canEmit()) {
  43463. return this.emit(input);
  43464. }
  43465. // it's failing anyway
  43466. this.state = STATE_FAILED;
  43467. },
  43468. /**
  43469. * can we emit?
  43470. * @returns {boolean}
  43471. */
  43472. canEmit: function() {
  43473. var i = 0;
  43474. while (i < this.requireFail.length) {
  43475. if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {
  43476. return false;
  43477. }
  43478. i++;
  43479. }
  43480. return true;
  43481. },
  43482. /**
  43483. * update the recognizer
  43484. * @param {Object} inputData
  43485. */
  43486. recognize: function(inputData) {
  43487. // make a new copy of the inputData
  43488. // so we can change the inputData without messing up the other recognizers
  43489. var inputDataClone = assign({}, inputData);
  43490. // is is enabled and allow recognizing?
  43491. if (!boolOrFn(this.options.enable, [this, inputDataClone])) {
  43492. this.reset();
  43493. this.state = STATE_FAILED;
  43494. return;
  43495. }
  43496. // reset when we've reached the end
  43497. if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {
  43498. this.state = STATE_POSSIBLE;
  43499. }
  43500. this.state = this.process(inputDataClone);
  43501. // the recognizer has recognized a gesture
  43502. // so trigger an event
  43503. if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {
  43504. this.tryEmit(inputDataClone);
  43505. }
  43506. },
  43507. /**
  43508. * return the state of the recognizer
  43509. * the actual recognizing happens in this method
  43510. * @virtual
  43511. * @param {Object} inputData
  43512. * @returns {Const} STATE
  43513. */
  43514. process: function(inputData) { }, // jshint ignore:line
  43515. /**
  43516. * return the preferred touch-action
  43517. * @virtual
  43518. * @returns {Array}
  43519. */
  43520. getTouchAction: function() { },
  43521. /**
  43522. * called when the gesture isn't allowed to recognize
  43523. * like when another is being recognized or it is disabled
  43524. * @virtual
  43525. */
  43526. reset: function() { }
  43527. };
  43528. /**
  43529. * get a usable string, used as event postfix
  43530. * @param {Const} state
  43531. * @returns {String} state
  43532. */
  43533. function stateStr(state) {
  43534. if (state & STATE_CANCELLED) {
  43535. return 'cancel';
  43536. } else if (state & STATE_ENDED) {
  43537. return 'end';
  43538. } else if (state & STATE_CHANGED) {
  43539. return 'move';
  43540. } else if (state & STATE_BEGAN) {
  43541. return 'start';
  43542. }
  43543. return '';
  43544. }
  43545. /**
  43546. * direction cons to string
  43547. * @param {Const} direction
  43548. * @returns {String}
  43549. */
  43550. function directionStr(direction) {
  43551. if (direction == DIRECTION_DOWN) {
  43552. return 'down';
  43553. } else if (direction == DIRECTION_UP) {
  43554. return 'up';
  43555. } else if (direction == DIRECTION_LEFT) {
  43556. return 'left';
  43557. } else if (direction == DIRECTION_RIGHT) {
  43558. return 'right';
  43559. }
  43560. return '';
  43561. }
  43562. /**
  43563. * get a recognizer by name if it is bound to a manager
  43564. * @param {Recognizer|String} otherRecognizer
  43565. * @param {Recognizer} recognizer
  43566. * @returns {Recognizer}
  43567. */
  43568. function getRecognizerByNameIfManager(otherRecognizer, recognizer) {
  43569. var manager = recognizer.manager;
  43570. if (manager) {
  43571. return manager.get(otherRecognizer);
  43572. }
  43573. return otherRecognizer;
  43574. }
  43575. /**
  43576. * This recognizer is just used as a base for the simple attribute recognizers.
  43577. * @constructor
  43578. * @extends Recognizer
  43579. */
  43580. function AttrRecognizer() {
  43581. Recognizer.apply(this, arguments);
  43582. }
  43583. inherit(AttrRecognizer, Recognizer, {
  43584. /**
  43585. * @namespace
  43586. * @memberof AttrRecognizer
  43587. */
  43588. defaults: {
  43589. /**
  43590. * @type {Number}
  43591. * @default 1
  43592. */
  43593. pointers: 1
  43594. },
  43595. /**
  43596. * Used to check if it the recognizer receives valid input, like input.distance > 10.
  43597. * @memberof AttrRecognizer
  43598. * @param {Object} input
  43599. * @returns {Boolean} recognized
  43600. */
  43601. attrTest: function(input) {
  43602. var optionPointers = this.options.pointers;
  43603. return optionPointers === 0 || input.pointers.length === optionPointers;
  43604. },
  43605. /**
  43606. * Process the input and return the state for the recognizer
  43607. * @memberof AttrRecognizer
  43608. * @param {Object} input
  43609. * @returns {*} State
  43610. */
  43611. process: function(input) {
  43612. var state = this.state;
  43613. var eventType = input.eventType;
  43614. var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);
  43615. var isValid = this.attrTest(input);
  43616. // on cancel input and we've recognized before, return STATE_CANCELLED
  43617. if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {
  43618. return state | STATE_CANCELLED;
  43619. } else if (isRecognized || isValid) {
  43620. if (eventType & INPUT_END) {
  43621. return state | STATE_ENDED;
  43622. } else if (!(state & STATE_BEGAN)) {
  43623. return STATE_BEGAN;
  43624. }
  43625. return state | STATE_CHANGED;
  43626. }
  43627. return STATE_FAILED;
  43628. }
  43629. });
  43630. /**
  43631. * Pan
  43632. * Recognized when the pointer is down and moved in the allowed direction.
  43633. * @constructor
  43634. * @extends AttrRecognizer
  43635. */
  43636. function PanRecognizer() {
  43637. AttrRecognizer.apply(this, arguments);
  43638. this.pX = null;
  43639. this.pY = null;
  43640. }
  43641. inherit(PanRecognizer, AttrRecognizer, {
  43642. /**
  43643. * @namespace
  43644. * @memberof PanRecognizer
  43645. */
  43646. defaults: {
  43647. event: 'pan',
  43648. threshold: 10,
  43649. pointers: 1,
  43650. direction: DIRECTION_ALL
  43651. },
  43652. getTouchAction: function() {
  43653. var direction = this.options.direction;
  43654. var actions = [];
  43655. if (direction & DIRECTION_HORIZONTAL) {
  43656. actions.push(TOUCH_ACTION_PAN_Y);
  43657. }
  43658. if (direction & DIRECTION_VERTICAL) {
  43659. actions.push(TOUCH_ACTION_PAN_X);
  43660. }
  43661. return actions;
  43662. },
  43663. directionTest: function(input) {
  43664. var options = this.options;
  43665. var hasMoved = true;
  43666. var distance = input.distance;
  43667. var direction = input.direction;
  43668. var x = input.deltaX;
  43669. var y = input.deltaY;
  43670. // lock to axis?
  43671. if (!(direction & options.direction)) {
  43672. if (options.direction & DIRECTION_HORIZONTAL) {
  43673. direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;
  43674. hasMoved = x != this.pX;
  43675. distance = Math.abs(input.deltaX);
  43676. } else {
  43677. direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;
  43678. hasMoved = y != this.pY;
  43679. distance = Math.abs(input.deltaY);
  43680. }
  43681. }
  43682. input.direction = direction;
  43683. return hasMoved && distance > options.threshold && direction & options.direction;
  43684. },
  43685. attrTest: function(input) {
  43686. return AttrRecognizer.prototype.attrTest.call(this, input) &&
  43687. (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));
  43688. },
  43689. emit: function(input) {
  43690. this.pX = input.deltaX;
  43691. this.pY = input.deltaY;
  43692. var direction = directionStr(input.direction);
  43693. if (direction) {
  43694. input.additionalEvent = this.options.event + direction;
  43695. }
  43696. this._super.emit.call(this, input);
  43697. }
  43698. });
  43699. /**
  43700. * Pinch
  43701. * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).
  43702. * @constructor
  43703. * @extends AttrRecognizer
  43704. */
  43705. function PinchRecognizer() {
  43706. AttrRecognizer.apply(this, arguments);
  43707. }
  43708. inherit(PinchRecognizer, AttrRecognizer, {
  43709. /**
  43710. * @namespace
  43711. * @memberof PinchRecognizer
  43712. */
  43713. defaults: {
  43714. event: 'pinch',
  43715. threshold: 0,
  43716. pointers: 2
  43717. },
  43718. getTouchAction: function() {
  43719. return [TOUCH_ACTION_NONE];
  43720. },
  43721. attrTest: function(input) {
  43722. return this._super.attrTest.call(this, input) &&
  43723. (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);
  43724. },
  43725. emit: function(input) {
  43726. if (input.scale !== 1) {
  43727. var inOut = input.scale < 1 ? 'in' : 'out';
  43728. input.additionalEvent = this.options.event + inOut;
  43729. }
  43730. this._super.emit.call(this, input);
  43731. }
  43732. });
  43733. /**
  43734. * Press
  43735. * Recognized when the pointer is down for x ms without any movement.
  43736. * @constructor
  43737. * @extends Recognizer
  43738. */
  43739. function PressRecognizer() {
  43740. Recognizer.apply(this, arguments);
  43741. this._timer = null;
  43742. this._input = null;
  43743. }
  43744. inherit(PressRecognizer, Recognizer, {
  43745. /**
  43746. * @namespace
  43747. * @memberof PressRecognizer
  43748. */
  43749. defaults: {
  43750. event: 'press',
  43751. pointers: 1,
  43752. time: 251, // minimal time of the pointer to be pressed
  43753. threshold: 9 // a minimal movement is ok, but keep it low
  43754. },
  43755. getTouchAction: function() {
  43756. return [TOUCH_ACTION_AUTO];
  43757. },
  43758. process: function(input) {
  43759. var options = this.options;
  43760. var validPointers = input.pointers.length === options.pointers;
  43761. var validMovement = input.distance < options.threshold;
  43762. var validTime = input.deltaTime > options.time;
  43763. this._input = input;
  43764. // we only allow little movement
  43765. // and we've reached an end event, so a tap is possible
  43766. if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {
  43767. this.reset();
  43768. } else if (input.eventType & INPUT_START) {
  43769. this.reset();
  43770. this._timer = setTimeoutContext(function() {
  43771. this.state = STATE_RECOGNIZED;
  43772. this.tryEmit();
  43773. }, options.time, this);
  43774. } else if (input.eventType & INPUT_END) {
  43775. return STATE_RECOGNIZED;
  43776. }
  43777. return STATE_FAILED;
  43778. },
  43779. reset: function() {
  43780. clearTimeout(this._timer);
  43781. },
  43782. emit: function(input) {
  43783. if (this.state !== STATE_RECOGNIZED) {
  43784. return;
  43785. }
  43786. if (input && (input.eventType & INPUT_END)) {
  43787. this.manager.emit(this.options.event + 'up', input);
  43788. } else {
  43789. this._input.timeStamp = now();
  43790. this.manager.emit(this.options.event, this._input);
  43791. }
  43792. }
  43793. });
  43794. /**
  43795. * Rotate
  43796. * Recognized when two or more pointer are moving in a circular motion.
  43797. * @constructor
  43798. * @extends AttrRecognizer
  43799. */
  43800. function RotateRecognizer() {
  43801. AttrRecognizer.apply(this, arguments);
  43802. }
  43803. inherit(RotateRecognizer, AttrRecognizer, {
  43804. /**
  43805. * @namespace
  43806. * @memberof RotateRecognizer
  43807. */
  43808. defaults: {
  43809. event: 'rotate',
  43810. threshold: 0,
  43811. pointers: 2
  43812. },
  43813. getTouchAction: function() {
  43814. return [TOUCH_ACTION_NONE];
  43815. },
  43816. attrTest: function(input) {
  43817. return this._super.attrTest.call(this, input) &&
  43818. (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);
  43819. }
  43820. });
  43821. /**
  43822. * Swipe
  43823. * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.
  43824. * @constructor
  43825. * @extends AttrRecognizer
  43826. */
  43827. function SwipeRecognizer() {
  43828. AttrRecognizer.apply(this, arguments);
  43829. }
  43830. inherit(SwipeRecognizer, AttrRecognizer, {
  43831. /**
  43832. * @namespace
  43833. * @memberof SwipeRecognizer
  43834. */
  43835. defaults: {
  43836. event: 'swipe',
  43837. threshold: 10,
  43838. velocity: 0.3,
  43839. direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,
  43840. pointers: 1
  43841. },
  43842. getTouchAction: function() {
  43843. return PanRecognizer.prototype.getTouchAction.call(this);
  43844. },
  43845. attrTest: function(input) {
  43846. var direction = this.options.direction;
  43847. var velocity;
  43848. if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {
  43849. velocity = input.overallVelocity;
  43850. } else if (direction & DIRECTION_HORIZONTAL) {
  43851. velocity = input.overallVelocityX;
  43852. } else if (direction & DIRECTION_VERTICAL) {
  43853. velocity = input.overallVelocityY;
  43854. }
  43855. return this._super.attrTest.call(this, input) &&
  43856. direction & input.offsetDirection &&
  43857. input.distance > this.options.threshold &&
  43858. input.maxPointers == this.options.pointers &&
  43859. abs(velocity) > this.options.velocity && input.eventType & INPUT_END;
  43860. },
  43861. emit: function(input) {
  43862. var direction = directionStr(input.offsetDirection);
  43863. if (direction) {
  43864. this.manager.emit(this.options.event + direction, input);
  43865. }
  43866. this.manager.emit(this.options.event, input);
  43867. }
  43868. });
  43869. /**
  43870. * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur
  43871. * between the given interval and position. The delay option can be used to recognize multi-taps without firing
  43872. * a single tap.
  43873. *
  43874. * The eventData from the emitted event contains the property `tapCount`, which contains the amount of
  43875. * multi-taps being recognized.
  43876. * @constructor
  43877. * @extends Recognizer
  43878. */
  43879. function TapRecognizer() {
  43880. Recognizer.apply(this, arguments);
  43881. // previous time and center,
  43882. // used for tap counting
  43883. this.pTime = false;
  43884. this.pCenter = false;
  43885. this._timer = null;
  43886. this._input = null;
  43887. this.count = 0;
  43888. }
  43889. inherit(TapRecognizer, Recognizer, {
  43890. /**
  43891. * @namespace
  43892. * @memberof PinchRecognizer
  43893. */
  43894. defaults: {
  43895. event: 'tap',
  43896. pointers: 1,
  43897. taps: 1,
  43898. interval: 300, // max time between the multi-tap taps
  43899. time: 250, // max time of the pointer to be down (like finger on the screen)
  43900. threshold: 9, // a minimal movement is ok, but keep it low
  43901. posThreshold: 10 // a multi-tap can be a bit off the initial position
  43902. },
  43903. getTouchAction: function() {
  43904. return [TOUCH_ACTION_MANIPULATION];
  43905. },
  43906. process: function(input) {
  43907. var options = this.options;
  43908. var validPointers = input.pointers.length === options.pointers;
  43909. var validMovement = input.distance < options.threshold;
  43910. var validTouchTime = input.deltaTime < options.time;
  43911. this.reset();
  43912. if ((input.eventType & INPUT_START) && (this.count === 0)) {
  43913. return this.failTimeout();
  43914. }
  43915. // we only allow little movement
  43916. // and we've reached an end event, so a tap is possible
  43917. if (validMovement && validTouchTime && validPointers) {
  43918. if (input.eventType != INPUT_END) {
  43919. return this.failTimeout();
  43920. }
  43921. var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;
  43922. var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;
  43923. this.pTime = input.timeStamp;
  43924. this.pCenter = input.center;
  43925. if (!validMultiTap || !validInterval) {
  43926. this.count = 1;
  43927. } else {
  43928. this.count += 1;
  43929. }
  43930. this._input = input;
  43931. // if tap count matches we have recognized it,
  43932. // else it has began recognizing...
  43933. var tapCount = this.count % options.taps;
  43934. if (tapCount === 0) {
  43935. // no failing requirements, immediately trigger the tap event
  43936. // or wait as long as the multitap interval to trigger
  43937. if (!this.hasRequireFailures()) {
  43938. return STATE_RECOGNIZED;
  43939. } else {
  43940. this._timer = setTimeoutContext(function() {
  43941. this.state = STATE_RECOGNIZED;
  43942. this.tryEmit();
  43943. }, options.interval, this);
  43944. return STATE_BEGAN;
  43945. }
  43946. }
  43947. }
  43948. return STATE_FAILED;
  43949. },
  43950. failTimeout: function() {
  43951. this._timer = setTimeoutContext(function() {
  43952. this.state = STATE_FAILED;
  43953. }, this.options.interval, this);
  43954. return STATE_FAILED;
  43955. },
  43956. reset: function() {
  43957. clearTimeout(this._timer);
  43958. },
  43959. emit: function() {
  43960. if (this.state == STATE_RECOGNIZED) {
  43961. this._input.tapCount = this.count;
  43962. this.manager.emit(this.options.event, this._input);
  43963. }
  43964. }
  43965. });
  43966. /**
  43967. * Simple way to create a manager with a default set of recognizers.
  43968. * @param {HTMLElement} element
  43969. * @param {Object} [options]
  43970. * @constructor
  43971. */
  43972. function Hammer(element, options) {
  43973. options = options || {};
  43974. options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);
  43975. return new Manager(element, options);
  43976. }
  43977. /**
  43978. * @const {string}
  43979. */
  43980. Hammer.VERSION = '2.0.7';
  43981. /**
  43982. * default settings
  43983. * @namespace
  43984. */
  43985. Hammer.defaults = {
  43986. /**
  43987. * set if DOM events are being triggered.
  43988. * But this is slower and unused by simple implementations, so disabled by default.
  43989. * @type {Boolean}
  43990. * @default false
  43991. */
  43992. domEvents: false,
  43993. /**
  43994. * The value for the touchAction property/fallback.
  43995. * When set to `compute` it will magically set the correct value based on the added recognizers.
  43996. * @type {String}
  43997. * @default compute
  43998. */
  43999. touchAction: TOUCH_ACTION_COMPUTE,
  44000. /**
  44001. * @type {Boolean}
  44002. * @default true
  44003. */
  44004. enable: true,
  44005. /**
  44006. * EXPERIMENTAL FEATURE -- can be removed/changed
  44007. * Change the parent input target element.
  44008. * If Null, then it is being set the to main element.
  44009. * @type {Null|EventTarget}
  44010. * @default null
  44011. */
  44012. inputTarget: null,
  44013. /**
  44014. * force an input class
  44015. * @type {Null|Function}
  44016. * @default null
  44017. */
  44018. inputClass: null,
  44019. /**
  44020. * Default recognizer setup when calling `Hammer()`
  44021. * When creating a new Manager these will be skipped.
  44022. * @type {Array}
  44023. */
  44024. preset: [
  44025. // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]
  44026. [RotateRecognizer, {enable: false}],
  44027. [PinchRecognizer, {enable: false}, ['rotate']],
  44028. [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],
  44029. [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],
  44030. [TapRecognizer],
  44031. [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],
  44032. [PressRecognizer]
  44033. ],
  44034. /**
  44035. * Some CSS properties can be used to improve the working of Hammer.
  44036. * Add them to this method and they will be set when creating a new Manager.
  44037. * @namespace
  44038. */
  44039. cssProps: {
  44040. /**
  44041. * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.
  44042. * @type {String}
  44043. * @default 'none'
  44044. */
  44045. userSelect: 'none',
  44046. /**
  44047. * Disable the Windows Phone grippers when pressing an element.
  44048. * @type {String}
  44049. * @default 'none'
  44050. */
  44051. touchSelect: 'none',
  44052. /**
  44053. * Disables the default callout shown when you touch and hold a touch target.
  44054. * On iOS, when you touch and hold a touch target such as a link, Safari displays
  44055. * a callout containing information about the link. This property allows you to disable that callout.
  44056. * @type {String}
  44057. * @default 'none'
  44058. */
  44059. touchCallout: 'none',
  44060. /**
  44061. * Specifies whether zooming is enabled. Used by IE10>
  44062. * @type {String}
  44063. * @default 'none'
  44064. */
  44065. contentZooming: 'none',
  44066. /**
  44067. * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.
  44068. * @type {String}
  44069. * @default 'none'
  44070. */
  44071. userDrag: 'none',
  44072. /**
  44073. * Overrides the highlight color shown when the user taps a link or a JavaScript
  44074. * clickable element in iOS. This property obeys the alpha value, if specified.
  44075. * @type {String}
  44076. * @default 'rgba(0,0,0,0)'
  44077. */
  44078. tapHighlightColor: 'rgba(0,0,0,0)'
  44079. }
  44080. };
  44081. var STOP = 1;
  44082. var FORCED_STOP = 2;
  44083. /**
  44084. * Manager
  44085. * @param {HTMLElement} element
  44086. * @param {Object} [options]
  44087. * @constructor
  44088. */
  44089. function Manager(element, options) {
  44090. this.options = assign({}, Hammer.defaults, options || {});
  44091. this.options.inputTarget = this.options.inputTarget || element;
  44092. this.handlers = {};
  44093. this.session = {};
  44094. this.recognizers = [];
  44095. this.oldCssProps = {};
  44096. this.element = element;
  44097. this.input = createInputInstance(this);
  44098. this.touchAction = new TouchAction(this, this.options.touchAction);
  44099. toggleCssProps(this, true);
  44100. each(this.options.recognizers, function(item) {
  44101. var recognizer = this.add(new (item[0])(item[1]));
  44102. item[2] && recognizer.recognizeWith(item[2]);
  44103. item[3] && recognizer.requireFailure(item[3]);
  44104. }, this);
  44105. }
  44106. Manager.prototype = {
  44107. /**
  44108. * set options
  44109. * @param {Object} options
  44110. * @returns {Manager}
  44111. */
  44112. set: function(options) {
  44113. assign(this.options, options);
  44114. // Options that need a little more setup
  44115. if (options.touchAction) {
  44116. this.touchAction.update();
  44117. }
  44118. if (options.inputTarget) {
  44119. // Clean up existing event listeners and reinitialize
  44120. this.input.destroy();
  44121. this.input.target = options.inputTarget;
  44122. this.input.init();
  44123. }
  44124. return this;
  44125. },
  44126. /**
  44127. * stop recognizing for this session.
  44128. * This session will be discarded, when a new [input]start event is fired.
  44129. * When forced, the recognizer cycle is stopped immediately.
  44130. * @param {Boolean} [force]
  44131. */
  44132. stop: function(force) {
  44133. this.session.stopped = force ? FORCED_STOP : STOP;
  44134. },
  44135. /**
  44136. * run the recognizers!
  44137. * called by the inputHandler function on every movement of the pointers (touches)
  44138. * it walks through all the recognizers and tries to detect the gesture that is being made
  44139. * @param {Object} inputData
  44140. */
  44141. recognize: function(inputData) {
  44142. var session = this.session;
  44143. if (session.stopped) {
  44144. return;
  44145. }
  44146. // run the touch-action polyfill
  44147. this.touchAction.preventDefaults(inputData);
  44148. var recognizer;
  44149. var recognizers = this.recognizers;
  44150. // this holds the recognizer that is being recognized.
  44151. // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED
  44152. // if no recognizer is detecting a thing, it is set to `null`
  44153. var curRecognizer = session.curRecognizer;
  44154. // reset when the last recognizer is recognized
  44155. // or when we're in a new session
  44156. if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {
  44157. curRecognizer = session.curRecognizer = null;
  44158. }
  44159. var i = 0;
  44160. while (i < recognizers.length) {
  44161. recognizer = recognizers[i];
  44162. // find out if we are allowed try to recognize the input for this one.
  44163. // 1. allow if the session is NOT forced stopped (see the .stop() method)
  44164. // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one
  44165. // that is being recognized.
  44166. // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.
  44167. // this can be setup with the `recognizeWith()` method on the recognizer.
  44168. if (session.stopped !== FORCED_STOP && ( // 1
  44169. !curRecognizer || recognizer == curRecognizer || // 2
  44170. recognizer.canRecognizeWith(curRecognizer))) { // 3
  44171. recognizer.recognize(inputData);
  44172. } else {
  44173. recognizer.reset();
  44174. }
  44175. // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the
  44176. // current active recognizer. but only if we don't already have an active recognizer
  44177. if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {
  44178. curRecognizer = session.curRecognizer = recognizer;
  44179. }
  44180. i++;
  44181. }
  44182. },
  44183. /**
  44184. * get a recognizer by its event name.
  44185. * @param {Recognizer|String} recognizer
  44186. * @returns {Recognizer|Null}
  44187. */
  44188. get: function(recognizer) {
  44189. if (recognizer instanceof Recognizer) {
  44190. return recognizer;
  44191. }
  44192. var recognizers = this.recognizers;
  44193. for (var i = 0; i < recognizers.length; i++) {
  44194. if (recognizers[i].options.event == recognizer) {
  44195. return recognizers[i];
  44196. }
  44197. }
  44198. return null;
  44199. },
  44200. /**
  44201. * add a recognizer to the manager
  44202. * existing recognizers with the same event name will be removed
  44203. * @param {Recognizer} recognizer
  44204. * @returns {Recognizer|Manager}
  44205. */
  44206. add: function(recognizer) {
  44207. if (invokeArrayArg(recognizer, 'add', this)) {
  44208. return this;
  44209. }
  44210. // remove existing
  44211. var existing = this.get(recognizer.options.event);
  44212. if (existing) {
  44213. this.remove(existing);
  44214. }
  44215. this.recognizers.push(recognizer);
  44216. recognizer.manager = this;
  44217. this.touchAction.update();
  44218. return recognizer;
  44219. },
  44220. /**
  44221. * remove a recognizer by name or instance
  44222. * @param {Recognizer|String} recognizer
  44223. * @returns {Manager}
  44224. */
  44225. remove: function(recognizer) {
  44226. if (invokeArrayArg(recognizer, 'remove', this)) {
  44227. return this;
  44228. }
  44229. recognizer = this.get(recognizer);
  44230. // let's make sure this recognizer exists
  44231. if (recognizer) {
  44232. var recognizers = this.recognizers;
  44233. var index = inArray(recognizers, recognizer);
  44234. if (index !== -1) {
  44235. recognizers.splice(index, 1);
  44236. this.touchAction.update();
  44237. }
  44238. }
  44239. return this;
  44240. },
  44241. /**
  44242. * bind event
  44243. * @param {String} events
  44244. * @param {Function} handler
  44245. * @returns {EventEmitter} this
  44246. */
  44247. on: function(events, handler) {
  44248. if (events === undefined) {
  44249. return;
  44250. }
  44251. if (handler === undefined) {
  44252. return;
  44253. }
  44254. var handlers = this.handlers;
  44255. each(splitStr(events), function(event) {
  44256. handlers[event] = handlers[event] || [];
  44257. handlers[event].push(handler);
  44258. });
  44259. return this;
  44260. },
  44261. /**
  44262. * unbind event, leave emit blank to remove all handlers
  44263. * @param {String} events
  44264. * @param {Function} [handler]
  44265. * @returns {EventEmitter} this
  44266. */
  44267. off: function(events, handler) {
  44268. if (events === undefined) {
  44269. return;
  44270. }
  44271. var handlers = this.handlers;
  44272. each(splitStr(events), function(event) {
  44273. if (!handler) {
  44274. delete handlers[event];
  44275. } else {
  44276. handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);
  44277. }
  44278. });
  44279. return this;
  44280. },
  44281. /**
  44282. * emit event to the listeners
  44283. * @param {String} event
  44284. * @param {Object} data
  44285. */
  44286. emit: function(event, data) {
  44287. // we also want to trigger dom events
  44288. if (this.options.domEvents) {
  44289. triggerDomEvent(event, data);
  44290. }
  44291. // no handlers, so skip it all
  44292. var handlers = this.handlers[event] && this.handlers[event].slice();
  44293. if (!handlers || !handlers.length) {
  44294. return;
  44295. }
  44296. data.type = event;
  44297. data.preventDefault = function() {
  44298. data.srcEvent.preventDefault();
  44299. };
  44300. var i = 0;
  44301. while (i < handlers.length) {
  44302. handlers[i](data);
  44303. i++;
  44304. }
  44305. },
  44306. /**
  44307. * destroy the manager and unbinds all events
  44308. * it doesn't unbind dom events, that is the user own responsibility
  44309. */
  44310. destroy: function() {
  44311. this.element && toggleCssProps(this, false);
  44312. this.handlers = {};
  44313. this.session = {};
  44314. this.input.destroy();
  44315. this.element = null;
  44316. }
  44317. };
  44318. /**
  44319. * add/remove the css properties as defined in manager.options.cssProps
  44320. * @param {Manager} manager
  44321. * @param {Boolean} add
  44322. */
  44323. function toggleCssProps(manager, add) {
  44324. var element = manager.element;
  44325. if (!element.style) {
  44326. return;
  44327. }
  44328. var prop;
  44329. each(manager.options.cssProps, function(value, name) {
  44330. prop = prefixed(element.style, name);
  44331. if (add) {
  44332. manager.oldCssProps[prop] = element.style[prop];
  44333. element.style[prop] = value;
  44334. } else {
  44335. element.style[prop] = manager.oldCssProps[prop] || '';
  44336. }
  44337. });
  44338. if (!add) {
  44339. manager.oldCssProps = {};
  44340. }
  44341. }
  44342. /**
  44343. * trigger dom event
  44344. * @param {String} event
  44345. * @param {Object} data
  44346. */
  44347. function triggerDomEvent(event, data) {
  44348. var gestureEvent = document.createEvent('Event');
  44349. gestureEvent.initEvent(event, true, true);
  44350. gestureEvent.gesture = data;
  44351. data.target.dispatchEvent(gestureEvent);
  44352. }
  44353. assign(Hammer, {
  44354. INPUT_START: INPUT_START,
  44355. INPUT_MOVE: INPUT_MOVE,
  44356. INPUT_END: INPUT_END,
  44357. INPUT_CANCEL: INPUT_CANCEL,
  44358. STATE_POSSIBLE: STATE_POSSIBLE,
  44359. STATE_BEGAN: STATE_BEGAN,
  44360. STATE_CHANGED: STATE_CHANGED,
  44361. STATE_ENDED: STATE_ENDED,
  44362. STATE_RECOGNIZED: STATE_RECOGNIZED,
  44363. STATE_CANCELLED: STATE_CANCELLED,
  44364. STATE_FAILED: STATE_FAILED,
  44365. DIRECTION_NONE: DIRECTION_NONE,
  44366. DIRECTION_LEFT: DIRECTION_LEFT,
  44367. DIRECTION_RIGHT: DIRECTION_RIGHT,
  44368. DIRECTION_UP: DIRECTION_UP,
  44369. DIRECTION_DOWN: DIRECTION_DOWN,
  44370. DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,
  44371. DIRECTION_VERTICAL: DIRECTION_VERTICAL,
  44372. DIRECTION_ALL: DIRECTION_ALL,
  44373. Manager: Manager,
  44374. Input: Input,
  44375. TouchAction: TouchAction,
  44376. TouchInput: TouchInput,
  44377. MouseInput: MouseInput,
  44378. PointerEventInput: PointerEventInput,
  44379. TouchMouseInput: TouchMouseInput,
  44380. SingleTouchInput: SingleTouchInput,
  44381. Recognizer: Recognizer,
  44382. AttrRecognizer: AttrRecognizer,
  44383. Tap: TapRecognizer,
  44384. Pan: PanRecognizer,
  44385. Swipe: SwipeRecognizer,
  44386. Pinch: PinchRecognizer,
  44387. Rotate: RotateRecognizer,
  44388. Press: PressRecognizer,
  44389. on: addEventListeners,
  44390. off: removeEventListeners,
  44391. each: each,
  44392. merge: merge,
  44393. extend: extend,
  44394. assign: assign,
  44395. inherit: inherit,
  44396. bindFn: bindFn,
  44397. prefixed: prefixed
  44398. });
  44399. // this prevents errors when Hammer is loaded in the presence of an AMD
  44400. // style loader but by script tag, not by the loader.
  44401. var freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line
  44402. freeGlobal.Hammer = Hammer;
  44403. if (true) {
  44404. !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
  44405. return Hammer;
  44406. }.call(exports, __webpack_require__, exports, module),
  44407. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  44408. } else if (typeof module != 'undefined' && module.exports) {
  44409. module.exports = Hammer;
  44410. } else {
  44411. window[exportName] = Hammer;
  44412. }
  44413. })(window, document, 'Hammer');
  44414. /***/ }),
  44415. /* 625 */
  44416. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  44417. "use strict";
  44418. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__object_3d__ = __webpack_require__(250);
  44419. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_math_gl__ = __webpack_require__(16);
  44420. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert__ = __webpack_require__(1);
  44421. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_assert__);
  44422. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  44423. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  44424. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  44425. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  44426. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  44427. var Group = /*#__PURE__*/function (_Object3D) {
  44428. _inherits(Group, _Object3D);
  44429. function Group() {
  44430. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  44431. _classCallCheck(this, Group);
  44432. var _opts$children = opts.children,
  44433. children = _opts$children === undefined ? [] : _opts$children;
  44434. children.every(function (child) {
  44435. return __WEBPACK_IMPORTED_MODULE_2_assert___default()(child instanceof __WEBPACK_IMPORTED_MODULE_0__object_3d__["a" /* default */]);
  44436. });
  44437. var _this = _possibleConstructorReturn(this, (Group.__proto__ || Object.getPrototypeOf(Group)).call(this, opts));
  44438. _this.children = children;
  44439. return _this;
  44440. }
  44441. // Unpacks arrays and nested arrays of children
  44442. _createClass(Group, [{
  44443. key: 'add',
  44444. value: function add() {
  44445. for (var _len = arguments.length, children = Array(_len), _key = 0; _key < _len; _key++) {
  44446. children[_key] = arguments[_key];
  44447. }
  44448. var _iteratorNormalCompletion = true;
  44449. var _didIteratorError = false;
  44450. var _iteratorError = undefined;
  44451. try {
  44452. for (var _iterator = children[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  44453. var child = _step.value;
  44454. if (Array.isArray(child)) {
  44455. this.add.apply(this, _toConsumableArray(child));
  44456. } else {
  44457. this.children.push(child);
  44458. }
  44459. }
  44460. } catch (err) {
  44461. _didIteratorError = true;
  44462. _iteratorError = err;
  44463. } finally {
  44464. try {
  44465. if (!_iteratorNormalCompletion && _iterator.return) {
  44466. _iterator.return();
  44467. }
  44468. } finally {
  44469. if (_didIteratorError) {
  44470. throw _iteratorError;
  44471. }
  44472. }
  44473. }
  44474. return this;
  44475. }
  44476. }, {
  44477. key: 'remove',
  44478. value: function remove(child) {
  44479. var children = this.children;
  44480. var indexOf = children.indexOf(child);
  44481. if (indexOf > -1) {
  44482. children.splice(indexOf, 1);
  44483. }
  44484. return this;
  44485. }
  44486. }, {
  44487. key: 'removeAll',
  44488. value: function removeAll() {
  44489. this.children = [];
  44490. return this;
  44491. }
  44492. // If visitor returns a truthy value, traversal will be aborted and that value
  44493. // will be returned from `traverse`. Otherwise `traverse` will return null.
  44494. }, {
  44495. key: 'traverse',
  44496. value: function traverse(visitor) {
  44497. var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  44498. _ref$modelMatrix = _ref.modelMatrix,
  44499. modelMatrix = _ref$modelMatrix === undefined ? new __WEBPACK_IMPORTED_MODULE_1_math_gl__["Matrix4"]() : _ref$modelMatrix;
  44500. var _iteratorNormalCompletion2 = true;
  44501. var _didIteratorError2 = false;
  44502. var _iteratorError2 = undefined;
  44503. try {
  44504. for (var _iterator2 = this.children[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  44505. var child = _step2.value;
  44506. var matrix = child.matrix;
  44507. modelMatrix = modelMatrix.multiplyRight(matrix);
  44508. var result = void 0;
  44509. if (child instanceof Group) {
  44510. result = child.traverse(visitor, { modelMatrix: modelMatrix });
  44511. } else {
  44512. // child.setUniforms({modelMatrix});
  44513. result = visitor(child, {});
  44514. }
  44515. // Abort if a result was returned
  44516. if (result) {
  44517. return result;
  44518. }
  44519. }
  44520. } catch (err) {
  44521. _didIteratorError2 = true;
  44522. _iteratorError2 = err;
  44523. } finally {
  44524. try {
  44525. if (!_iteratorNormalCompletion2 && _iterator2.return) {
  44526. _iterator2.return();
  44527. }
  44528. } finally {
  44529. if (_didIteratorError2) {
  44530. throw _iteratorError2;
  44531. }
  44532. }
  44533. }
  44534. return null;
  44535. }
  44536. // If visitor returns a truthy value, traversal will be aborted and that value
  44537. // will be returned from `traverseReverse`. Otherwise `traverseReverse` will return null.
  44538. }, {
  44539. key: 'traverseReverse',
  44540. value: function traverseReverse(visitor) {
  44541. var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  44542. _ref2$modelMatrix = _ref2.modelMatrix,
  44543. modelMatrix = _ref2$modelMatrix === undefined ? new __WEBPACK_IMPORTED_MODULE_1_math_gl__["Matrix4"]() : _ref2$modelMatrix;
  44544. for (var i = this.children.length - 1; i >= 0; --i) {
  44545. var child = this.children[i];
  44546. var matrix = child.matrix;
  44547. modelMatrix = modelMatrix.multiplyRight(matrix);
  44548. var result = void 0;
  44549. if (child instanceof Group) {
  44550. result = child.traverseReverse(visitor, { modelMatrix: modelMatrix });
  44551. } else {
  44552. // child.setUniforms({modelMatrix});
  44553. result = visitor(child, {});
  44554. }
  44555. // Abort if a result was returned
  44556. if (result) {
  44557. return result;
  44558. }
  44559. }
  44560. return null;
  44561. }
  44562. }]);
  44563. return Group;
  44564. }(__WEBPACK_IMPORTED_MODULE_0__object_3d__["a" /* default */]);
  44565. /* harmony default export */ __webpack_exports__["a"] = (Group);
  44566. //# sourceMappingURL=group.js.map
  44567. /***/ }),
  44568. /* 626 */
  44569. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  44570. "use strict";
  44571. /* harmony export (immutable) */ __webpack_exports__["a"] = pickModels;
  44572. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__webgl__ = __webpack_require__(61);
  44573. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(8);
  44574. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__group__ = __webpack_require__(625);
  44575. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert__ = __webpack_require__(1);
  44576. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_assert__);
  44577. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  44578. /* global window */
  44579. var ILLEGAL_ARG = 'Illegal argument to pick';
  44580. function getDevicePixelRatio() {
  44581. return typeof window !== 'undefined' ? window.devicePixelRatio : 1;
  44582. }
  44583. function pickModels(gl, _ref) {
  44584. var models = _ref.models,
  44585. position = _ref.position,
  44586. _ref$uniforms = _ref.uniforms,
  44587. uniforms = _ref$uniforms === undefined ? {} : _ref$uniforms,
  44588. _ref$parameters = _ref.parameters,
  44589. parameters = _ref$parameters === undefined ? {} : _ref$parameters,
  44590. settings = _ref.settings,
  44591. _ref$useDevicePixelRa = _ref.useDevicePixelRatio,
  44592. useDevicePixelRatio = _ref$useDevicePixelRa === undefined ? null : _ref$useDevicePixelRa,
  44593. _ref$useDevicePixels = _ref.useDevicePixels,
  44594. useDevicePixels = _ref$useDevicePixels === undefined ? true : _ref$useDevicePixels,
  44595. framebuffer = _ref.framebuffer;
  44596. __WEBPACK_IMPORTED_MODULE_3_assert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__webgl__["isWebGL"])(gl), ILLEGAL_ARG);
  44597. __WEBPACK_IMPORTED_MODULE_3_assert___default()(framebuffer, ILLEGAL_ARG);
  44598. __WEBPACK_IMPORTED_MODULE_3_assert___default()(position, ILLEGAL_ARG);
  44599. if (useDevicePixelRatio !== null) {
  44600. __WEBPACK_IMPORTED_MODULE_1__utils__["b" /* log */].deprecated('useDevicePixelRatio', 'useDevicePixels');
  44601. useDevicePixels = useDevicePixelRatio;
  44602. }
  44603. var _position = _slicedToArray(position, 2),
  44604. x = _position[0],
  44605. y = _position[1];
  44606. // Match our picking framebuffer with the size of the canvas drawing buffer
  44607. framebuffer.resize({ width: gl.canvas.width, height: gl.canvas.height });
  44608. // Compensate for devicePixelRatio
  44609. // Note: this assumes the canvas framebuffer has been matched
  44610. var dpr = useDevicePixels ? getDevicePixelRatio() : 1;
  44611. // Reverse the y coordinate
  44612. var deviceX = x * dpr;
  44613. var deviceY = gl.canvas.height - y * dpr;
  44614. // return withParameters(gl, {
  44615. // // framebuffer,
  44616. // // // We are only interested in one pixel, no need to render anything else
  44617. // // scissorTest: {x: deviceX, y: deviceY, w: 1, h: 1}
  44618. // }, () => {
  44619. var group = new __WEBPACK_IMPORTED_MODULE_2__group__["a" /* default */]({ children: models });
  44620. return group.traverseReverse(function (model) {
  44621. if (model.isPickable()) {
  44622. // Clear the frame buffer
  44623. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__webgl__["clear"])(gl, { framebuffer: framebuffer, color: true, depth: true });
  44624. // Render picking colors
  44625. /* eslint-disable camelcase */
  44626. model.setUniforms({ picking_uActive: 1 });
  44627. model.draw({ uniforms: uniforms, parameters: parameters, settings: settings, framebuffer: framebuffer });
  44628. model.setUniforms({ picking_uActive: 0 });
  44629. // Sample Read color in the central pixel, to be mapped as a picking color
  44630. var color = framebuffer.readPixels({
  44631. x: deviceX,
  44632. y: deviceY,
  44633. width: 1,
  44634. height: 1,
  44635. format: gl.RGBA,
  44636. type: gl.UNSIGNED_BYTE });
  44637. var isPicked = color[0] !== 0 || color[1] !== 0 || color[2] !== 0;
  44638. // Add the information to the stack
  44639. if (isPicked) {
  44640. return {
  44641. model: model,
  44642. color: color,
  44643. x: x,
  44644. y: y,
  44645. deviceX: deviceX,
  44646. deviceY: deviceY
  44647. };
  44648. }
  44649. }
  44650. return null;
  44651. });
  44652. // });
  44653. }
  44654. //# sourceMappingURL=pick-models.js.map
  44655. /***/ }),
  44656. /* 627 */
  44657. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  44658. "use strict";
  44659. /* harmony export (immutable) */ __webpack_exports__["a"] = encodePickingColor;
  44660. /* harmony export (immutable) */ __webpack_exports__["b"] = decodePickingColor;
  44661. /* harmony export (immutable) */ __webpack_exports__["c"] = getNullPickingColor;
  44662. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  44663. var NULL_PICKING_COLOR = new Uint8Array([0, 0, 0]);
  44664. // Encodes an index as a Uint8Array([r, g, b]) format picking color
  44665. function encodePickingColor(i) {
  44666. return [i + 1 & 255, i + 1 >> 8 & 255, i + 1 >> 16 & 255];
  44667. }
  44668. // Decodes a picking color in [r, g, b] format to an index
  44669. function decodePickingColor(color) {
  44670. // assert(color instanceof Uint8Array);
  44671. var _color = _slicedToArray(color, 3),
  44672. i1 = _color[0],
  44673. i2 = _color[1],
  44674. i3 = _color[2];
  44675. // 1 was added to seperate from no selection
  44676. var index = i1 + i2 * 256 + i3 * 65536 - 1;
  44677. return index;
  44678. }
  44679. // Return picking color representing no item at that pixel
  44680. function getNullPickingColor() {
  44681. return NULL_PICKING_COLOR;
  44682. }
  44683. //# sourceMappingURL=picking-colors.js.map
  44684. /***/ }),
  44685. /* 628 */
  44686. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  44687. "use strict";
  44688. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return addModel; });
  44689. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return logModel; });
  44690. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return removeModel; });
  44691. /* unused harmony export setOverride */
  44692. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getOverrides; });
  44693. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_seer__ = __webpack_require__(173);
  44694. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_seer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_seer__);
  44695. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_globals__ = __webpack_require__(261);
  44696. var models = {};
  44697. /**
  44698. * Add a model to our cache indexed by id
  44699. */
  44700. var addModel = function addModel(model) {
  44701. if (models[model.id]) {
  44702. return;
  44703. }
  44704. models[model.id] = model;
  44705. __WEBPACK_IMPORTED_MODULE_0_seer___default.a.listItem('luma.gl', model.id);
  44706. };
  44707. /**
  44708. * Log a model uniforms and attributes.
  44709. */
  44710. var logModel = function logModel(model, uniforms) {
  44711. if (!__WEBPACK_IMPORTED_MODULE_0_seer___default.a.isReady() || __WEBPACK_IMPORTED_MODULE_0_seer___default.a.throttle('luma.gl:' + model.id, 1E3)) {
  44712. return;
  44713. }
  44714. var attributesObject = Object.assign({}, model.geometry.attributes, model.attributes);
  44715. var uniformsObject = Object.assign({}, model.uniforms, uniforms);
  44716. __WEBPACK_IMPORTED_MODULE_0_seer___default.a.multiUpdate('luma.gl', model.id, [{ path: 'objects.uniforms', data: uniformsObject }, { path: 'objects.attributes', data: attributesObject }]);
  44717. };
  44718. /**
  44719. * Remove a previously set model from the cache
  44720. */
  44721. var removeModel = function removeModel(id) {
  44722. delete models[id];
  44723. __WEBPACK_IMPORTED_MODULE_0_seer___default.a.deleteItem('luma.gl', id);
  44724. };
  44725. /**
  44726. * Recursively traverse an object given a path of properties and set the given value
  44727. */
  44728. var recursiveSet = function recursiveSet(obj, path, value) {
  44729. if (!obj) {
  44730. return;
  44731. }
  44732. if (path.length > 1) {
  44733. recursiveSet(obj[path[0]], path.slice(1), value);
  44734. } else {
  44735. obj[path[0]] = value;
  44736. }
  44737. };
  44738. var overrides = new Map();
  44739. /**
  44740. * Create an override on the specify layer, indexed by a valuePath array.
  44741. * Do nothing in case Seer as not been initialized to prevent any preformance drawback.
  44742. */
  44743. var setOverride = function setOverride(id, valuePath, value) {
  44744. if (!__WEBPACK_IMPORTED_MODULE_1__utils_globals__["a" /* window */].__SEER_INITIALIZED__) {
  44745. return;
  44746. }
  44747. if (!overrides.has(id)) {
  44748. overrides.set(id, new Map());
  44749. }
  44750. var uniforms = overrides.get(id);
  44751. uniforms.set(valuePath, value);
  44752. };
  44753. /**
  44754. * Apply overrides to a specific model's uniforms
  44755. */
  44756. var getOverrides = function getOverrides(id, uniforms) {
  44757. if (!__WEBPACK_IMPORTED_MODULE_1__utils_globals__["a" /* window */].__SEER_INITIALIZED__ || !id) {
  44758. return;
  44759. }
  44760. var overs = overrides.get(id);
  44761. if (!overs) {
  44762. return;
  44763. }
  44764. overs.forEach(function (value, valuePath) {
  44765. recursiveSet(uniforms, valuePath, value);
  44766. });
  44767. };
  44768. /**
  44769. * Listen for luma.gl edit events
  44770. */
  44771. __WEBPACK_IMPORTED_MODULE_0_seer___default.a.listenFor('luma.gl', function (payload) {
  44772. var model = models[payload.itemKey];
  44773. if (!model || payload.type !== 'edit' || payload.valuePath[0] !== 'uniforms') {
  44774. return;
  44775. }
  44776. var valuePath = payload.valuePath.slice(1);
  44777. setOverride(payload.itemKey, valuePath, payload.value);
  44778. var uniforms = model.getUniforms();
  44779. recursiveSet(uniforms, valuePath, payload.value);
  44780. model.setUniforms(uniforms);
  44781. });
  44782. //# sourceMappingURL=seer-integration.js.map
  44783. /***/ }),
  44784. /* 629 */
  44785. /***/ (function(module, exports, __webpack_require__) {
  44786. "use strict";
  44787. Object.defineProperty(exports, "__esModule", {
  44788. value: true
  44789. });
  44790. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  44791. exports.requestFile = requestFile;
  44792. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  44793. // Supports loading (requesting) assets with XHR (XmlHttpRequest)
  44794. /* eslint-disable guard-for-in, complexity, no-try-catch */
  44795. /* global XMLHttpRequest */
  44796. function noop() {}
  44797. var XHR_STATES = {
  44798. UNINITIALIZED: 0,
  44799. LOADING: 1,
  44800. LOADED: 2,
  44801. INTERACTIVE: 3,
  44802. COMPLETED: 4
  44803. };
  44804. var XHR = function () {
  44805. function XHR(_ref) {
  44806. var url = _ref.url,
  44807. _ref$path = _ref.path,
  44808. path = _ref$path === undefined ? null : _ref$path,
  44809. _ref$method = _ref.method,
  44810. method = _ref$method === undefined ? 'GET' : _ref$method,
  44811. _ref$asynchronous = _ref.asynchronous,
  44812. asynchronous = _ref$asynchronous === undefined ? true : _ref$asynchronous,
  44813. _ref$noCache = _ref.noCache,
  44814. noCache = _ref$noCache === undefined ? false : _ref$noCache,
  44815. _ref$sendAsBinary = _ref.sendAsBinary,
  44816. sendAsBinary = _ref$sendAsBinary === undefined ? false : _ref$sendAsBinary,
  44817. _ref$responseType = _ref.responseType,
  44818. responseType = _ref$responseType === undefined ? false : _ref$responseType,
  44819. _ref$onProgress = _ref.onProgress,
  44820. onProgress = _ref$onProgress === undefined ? noop : _ref$onProgress,
  44821. _ref$onError = _ref.onError,
  44822. onError = _ref$onError === undefined ? noop : _ref$onError,
  44823. _ref$onAbort = _ref.onAbort,
  44824. onAbort = _ref$onAbort === undefined ? noop : _ref$onAbort,
  44825. _ref$onComplete = _ref.onComplete,
  44826. onComplete = _ref$onComplete === undefined ? noop : _ref$onComplete;
  44827. _classCallCheck(this, XHR);
  44828. this.url = path ? path.join(path, url) : url;
  44829. this.method = method;
  44830. this.async = asynchronous;
  44831. this.noCache = noCache;
  44832. this.sendAsBinary = sendAsBinary;
  44833. this.responseType = responseType;
  44834. this.req = new XMLHttpRequest();
  44835. this.req.onload = function (e) {
  44836. return onComplete(e);
  44837. };
  44838. this.req.onerror = function (e) {
  44839. return onError(e);
  44840. };
  44841. this.req.onabort = function (e) {
  44842. return onAbort(e);
  44843. };
  44844. this.req.onprogress = function (e) {
  44845. if (e.lengthComputable) {
  44846. onProgress(e, Math.round(e.loaded / e.total * 100));
  44847. } else {
  44848. onProgress(e, -1);
  44849. }
  44850. };
  44851. }
  44852. _createClass(XHR, [{
  44853. key: 'setRequestHeader',
  44854. value: function setRequestHeader(header, value) {
  44855. this.req.setRequestHeader(header, value);
  44856. return this;
  44857. }
  44858. // /* eslint-disable max-statements */
  44859. }, {
  44860. key: 'sendAsync',
  44861. value: function sendAsync() {
  44862. var _this = this;
  44863. var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.body || null;
  44864. return new Promise(function (resolve, reject) {
  44865. try {
  44866. var req = _this.req,
  44867. method = _this.method,
  44868. noCache = _this.noCache,
  44869. sendAsBinary = _this.sendAsBinary,
  44870. responseType = _this.responseType;
  44871. var url = noCache ? _this.url + (_this.url.indexOf('?') >= 0 ? '&' : '?') + Date.now() : _this.url;
  44872. req.open(method, url, _this.async);
  44873. if (responseType) {
  44874. req.responseType = responseType;
  44875. }
  44876. if (_this.async) {
  44877. req.onreadystatechange = function (e) {
  44878. if (req.readyState === XHR_STATES.COMPLETED) {
  44879. if (req.status === 200) {
  44880. resolve(req.responseType ? req.response : req.responseText);
  44881. } else {
  44882. reject(new Error(req.status + ': ' + url));
  44883. }
  44884. }
  44885. };
  44886. }
  44887. if (sendAsBinary) {
  44888. req.sendAsBinary(body);
  44889. } else {
  44890. req.send(body);
  44891. }
  44892. if (!_this.async) {
  44893. if (req.status === 200) {
  44894. resolve(req.responseType ? req.response : req.responseText);
  44895. } else {
  44896. reject(new Error(req.status + ': ' + url));
  44897. }
  44898. }
  44899. } catch (error) {
  44900. reject(error);
  44901. }
  44902. });
  44903. }
  44904. /* eslint-enable max-statements */
  44905. }]);
  44906. return XHR;
  44907. }();
  44908. function requestFile(opts) {
  44909. var xhr = new XHR(opts);
  44910. return xhr.sendAsync();
  44911. }
  44912. //# sourceMappingURL=browser-request-file.js.map
  44913. /***/ }),
  44914. /* 630 */
  44915. /***/ (function(module, exports, __webpack_require__) {
  44916. "use strict";
  44917. Object.defineProperty(exports, "__esModule", {
  44918. value: true
  44919. });
  44920. var _browserLoad = __webpack_require__(257);
  44921. Object.defineProperty(exports, 'setPathPrefix', {
  44922. enumerable: true,
  44923. get: function get() {
  44924. return _browserLoad.setPathPrefix;
  44925. }
  44926. });
  44927. Object.defineProperty(exports, 'loadFile', {
  44928. enumerable: true,
  44929. get: function get() {
  44930. return _browserLoad.loadFile;
  44931. }
  44932. });
  44933. Object.defineProperty(exports, 'loadImage', {
  44934. enumerable: true,
  44935. get: function get() {
  44936. return _browserLoad.loadImage;
  44937. }
  44938. });
  44939. var _loadFiles = __webpack_require__(631);
  44940. Object.defineProperty(exports, 'loadFiles', {
  44941. enumerable: true,
  44942. get: function get() {
  44943. return _loadFiles.loadFiles;
  44944. }
  44945. });
  44946. Object.defineProperty(exports, 'loadImages', {
  44947. enumerable: true,
  44948. get: function get() {
  44949. return _loadFiles.loadImages;
  44950. }
  44951. });
  44952. Object.defineProperty(exports, 'loadTextures', {
  44953. enumerable: true,
  44954. get: function get() {
  44955. return _loadFiles.loadTextures;
  44956. }
  44957. });
  44958. Object.defineProperty(exports, 'loadProgram', {
  44959. enumerable: true,
  44960. get: function get() {
  44961. return _loadFiles.loadProgram;
  44962. }
  44963. });
  44964. Object.defineProperty(exports, 'loadModel', {
  44965. enumerable: true,
  44966. get: function get() {
  44967. return _loadFiles.loadModel;
  44968. }
  44969. });
  44970. Object.defineProperty(exports, 'parseModel', {
  44971. enumerable: true,
  44972. get: function get() {
  44973. return _loadFiles.parseModel;
  44974. }
  44975. });
  44976. //# sourceMappingURL=index.js.map
  44977. /***/ }),
  44978. /* 631 */
  44979. /***/ (function(module, exports, __webpack_require__) {
  44980. "use strict";
  44981. Object.defineProperty(exports, "__esModule", {
  44982. value: true
  44983. });
  44984. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); /* eslint-disable guard-for-in, complexity, no-try-catch */
  44985. exports.loadTexture = loadTexture;
  44986. exports.loadFiles = loadFiles;
  44987. exports.loadImages = loadImages;
  44988. exports.loadTextures = loadTextures;
  44989. exports.loadProgram = loadProgram;
  44990. exports.loadModel = loadModel;
  44991. exports.parseModel = parseModel;
  44992. var _assert = __webpack_require__(1);
  44993. var _assert2 = _interopRequireDefault(_assert);
  44994. var _browserLoad = __webpack_require__(257);
  44995. var _webgl = __webpack_require__(61);
  44996. var _core = __webpack_require__(59);
  44997. var _geometry = __webpack_require__(41);
  44998. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  44999. function noop() {}
  45000. function loadTexture(gl, url) {
  45001. var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  45002. var urls = opts.urls,
  45003. _opts$onProgress = opts.onProgress,
  45004. onProgress = _opts$onProgress === undefined ? noop : _opts$onProgress;
  45005. (0, _assert2.default)(typeof url === 'string', 'loadTexture: url must be string');
  45006. return loadImages(Object.assign({ urls: urls, onProgress: onProgress }, opts)).then(function (images) {
  45007. return images.map(function (img, i) {
  45008. return new _webgl.Texture2D(gl, Object.assign({ id: urls[i] }, opts, { data: img }));
  45009. });
  45010. });
  45011. }
  45012. /*
  45013. * Loads (Requests) multiple files asynchronously
  45014. */
  45015. function loadFiles() {
  45016. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  45017. var urls = opts.urls,
  45018. _opts$onProgress2 = opts.onProgress,
  45019. onProgress = _opts$onProgress2 === undefined ? noop : _opts$onProgress2;
  45020. (0, _assert2.default)(urls.every(function (url) {
  45021. return typeof url === 'string';
  45022. }), 'loadImages: {urls} must be array of strings');
  45023. var count = 0;
  45024. return Promise.all(urls.map(function (url) {
  45025. var promise = (0, _browserLoad.loadFile)(Object.assign({ url: url }, opts));
  45026. promise.then(function (file) {
  45027. return onProgress({
  45028. progress: ++count / urls.length,
  45029. count: count,
  45030. total: urls.length,
  45031. url: url
  45032. });
  45033. });
  45034. return promise;
  45035. }));
  45036. }
  45037. /*
  45038. * Loads (requests) multiple images asynchronously
  45039. */
  45040. function loadImages() {
  45041. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  45042. var urls = opts.urls,
  45043. _opts$onProgress3 = opts.onProgress,
  45044. onProgress = _opts$onProgress3 === undefined ? noop : _opts$onProgress3;
  45045. (0, _assert2.default)(urls.every(function (url) {
  45046. return typeof url === 'string';
  45047. }), 'loadImages: {urls} must be array of strings');
  45048. var count = 0;
  45049. return Promise.all(urls.map(function (url) {
  45050. var promise = (0, _browserLoad.loadImage)(url, opts);
  45051. promise.then(function (file) {
  45052. return onProgress({
  45053. progress: ++count / urls.length,
  45054. count: count,
  45055. total: urls.length,
  45056. url: url
  45057. });
  45058. });
  45059. return promise;
  45060. }));
  45061. }
  45062. function loadTextures(gl) {
  45063. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45064. var urls = opts.urls,
  45065. _opts$onProgress4 = opts.onProgress,
  45066. onProgress = _opts$onProgress4 === undefined ? noop : _opts$onProgress4;
  45067. (0, _assert2.default)(urls.every(function (url) {
  45068. return typeof url === 'string';
  45069. }), 'loadTextures: {urls} must be array of strings');
  45070. return loadImages(Object.assign({ urls: urls, onProgress: onProgress }, opts)).then(function (images) {
  45071. return images.map(function (img, i) {
  45072. var params = Array.isArray(opts.parameters) ? opts.parameters[i] : opts.parameters;
  45073. params = params === undefined ? {} : params;
  45074. return new _webgl.Texture2D(gl, Object.assign({ id: urls[i] }, params, { data: img }));
  45075. });
  45076. });
  45077. }
  45078. function loadProgram(gl) {
  45079. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45080. var vs = opts.vs,
  45081. fs = opts.fs,
  45082. _opts$onProgress5 = opts.onProgress,
  45083. onProgress = _opts$onProgress5 === undefined ? noop : _opts$onProgress5;
  45084. return loadFiles(Object.assign({ urls: [vs, fs], onProgress: onProgress }, opts)).then(function (_ref) {
  45085. var _ref2 = _slicedToArray(_ref, 2),
  45086. vsText = _ref2[0],
  45087. fsText = _ref2[1];
  45088. return new _webgl.Program(gl, Object.assign({ vs: vsText, fs: fsText }, opts));
  45089. });
  45090. }
  45091. // Loads a simple JSON format
  45092. function loadModel(gl) {
  45093. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45094. var url = opts.url,
  45095. _opts$onProgress6 = opts.onProgress,
  45096. onProgress = _opts$onProgress6 === undefined ? noop : _opts$onProgress6;
  45097. return loadFiles(Object.assign({ urls: [url], onProgress: onProgress }, opts)).then(function (_ref3) {
  45098. var _ref4 = _slicedToArray(_ref3, 1),
  45099. file = _ref4[0];
  45100. return parseModel(gl, Object.assign({ file: file }, opts));
  45101. });
  45102. }
  45103. function parseModel(gl) {
  45104. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45105. var file = opts.file,
  45106. _opts$program = opts.program,
  45107. program = _opts$program === undefined ? new _webgl.Program(gl) : _opts$program;
  45108. var json = typeof file === 'string' ? parseJSON(file) : file;
  45109. // Remove any attributes so that we can create a geometry
  45110. // TODO - change format to put these in geometry sub object?
  45111. var attributes = {};
  45112. var modelOptions = {};
  45113. for (var key in json) {
  45114. var value = json[key];
  45115. if (Array.isArray(value)) {
  45116. attributes[key] = key === 'indices' ? new Uint16Array(value) : new Float32Array(value);
  45117. } else {
  45118. modelOptions[key] = value;
  45119. }
  45120. }
  45121. return new _core.Model(gl, Object.assign({ program: program, geometry: new _geometry.Geometry({ attributes: attributes }) }, modelOptions, opts));
  45122. }
  45123. function parseJSON(file) {
  45124. try {
  45125. return JSON.parse(file);
  45126. } catch (error) {
  45127. throw new Error('Failed to parse JSON: ' + error);
  45128. }
  45129. }
  45130. //# sourceMappingURL=load-files.js.map
  45131. /***/ }),
  45132. /* 632 */
  45133. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45134. "use strict";
  45135. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core__ = __webpack_require__(59);
  45136. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__geometry__ = __webpack_require__(41);
  45137. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__webgl__ = __webpack_require__(61);
  45138. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  45139. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  45140. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  45141. // ClipSpaceQuad
  45142. var CLIPSPACE_QUAD_VERTEX_SHADER = 'attribute vec2 aClipSpacePosition;\nattribute vec2 aTexCoord;\nattribute vec2 aCoordinate;\n\nvarying vec2 position;\nvarying vec2 coordinate;\nvarying vec2 uv;\n\nvoid main(void) {\n gl_Position = vec4(aClipSpacePosition, 0., 1.);\n position = aClipSpacePosition;\n coordinate = aCoordinate;\n uv = aTexCoord;\n}\n';
  45143. /* eslint-disable indent, no-multi-spaces */
  45144. var POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];
  45145. var ClipSpaceQuad = /*#__PURE__*/function (_Model) {
  45146. _inherits(ClipSpaceQuad, _Model);
  45147. function ClipSpaceQuad(gl, opts) {
  45148. _classCallCheck(this, ClipSpaceQuad);
  45149. var TEX_COORDS = POSITIONS.map(function (coord) {
  45150. return coord === -1 ? 0 : coord;
  45151. });
  45152. var _this = _possibleConstructorReturn(this, (ClipSpaceQuad.__proto__ || Object.getPrototypeOf(ClipSpaceQuad)).call(this, gl, Object.assign({}, opts, {
  45153. vs: CLIPSPACE_QUAD_VERTEX_SHADER,
  45154. geometry: new __WEBPACK_IMPORTED_MODULE_1__geometry__["Geometry"]({
  45155. drawMode: __WEBPACK_IMPORTED_MODULE_2__webgl__["GL"].TRIANGLE_STRIP,
  45156. vertexCount: 4,
  45157. attributes: {
  45158. aClipSpacePosition: { size: 2, value: new Float32Array(POSITIONS) },
  45159. aTexCoord: { size: 2, value: new Float32Array(TEX_COORDS) },
  45160. aCoordinate: { size: 2, value: new Float32Array(TEX_COORDS) }
  45161. }
  45162. })
  45163. })));
  45164. _this.setVertexCount(4);
  45165. return _this;
  45166. }
  45167. return ClipSpaceQuad;
  45168. }(__WEBPACK_IMPORTED_MODULE_0__core__["Model"]);
  45169. /* harmony default export */ __webpack_exports__["a"] = (ClipSpaceQuad);
  45170. //# sourceMappingURL=clip-space-quad.js.map
  45171. /***/ }),
  45172. /* 633 */
  45173. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45174. "use strict";
  45175. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(41);
  45176. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core__ = __webpack_require__(59);
  45177. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  45178. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  45179. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  45180. var Cone = /*#__PURE__*/function (_Model) {
  45181. _inherits(Cone, _Model);
  45182. function Cone(gl) {
  45183. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45184. _classCallCheck(this, Cone);
  45185. return _possibleConstructorReturn(this, (Cone.__proto__ || Object.getPrototypeOf(Cone)).call(this, gl, Object.assign({}, opts, { geometry: new __WEBPACK_IMPORTED_MODULE_0__geometry__["ConeGeometry"](opts) })));
  45186. }
  45187. return Cone;
  45188. }(__WEBPACK_IMPORTED_MODULE_1__core__["Model"]);
  45189. /* harmony default export */ __webpack_exports__["a"] = (Cone);
  45190. //# sourceMappingURL=cone.js.map
  45191. /***/ }),
  45192. /* 634 */
  45193. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45194. "use strict";
  45195. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(41);
  45196. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core__ = __webpack_require__(59);
  45197. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils__ = __webpack_require__(8);
  45198. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  45199. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  45200. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  45201. var Cube = /*#__PURE__*/function (_Model) {
  45202. _inherits(Cube, _Model);
  45203. function Cube(gl) {
  45204. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45205. _classCallCheck(this, Cube);
  45206. var _opts$id = opts.id,
  45207. id = _opts$id === undefined ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils__["d" /* uid */])('cube') : _opts$id;
  45208. return _possibleConstructorReturn(this, (Cube.__proto__ || Object.getPrototypeOf(Cube)).call(this, gl, Object.assign({}, opts, { id: id, geometry: new __WEBPACK_IMPORTED_MODULE_0__geometry__["CubeGeometry"](opts) })));
  45209. }
  45210. return Cube;
  45211. }(__WEBPACK_IMPORTED_MODULE_1__core__["Model"]);
  45212. /* harmony default export */ __webpack_exports__["a"] = (Cube);
  45213. //# sourceMappingURL=cube.js.map
  45214. /***/ }),
  45215. /* 635 */
  45216. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45217. "use strict";
  45218. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(41);
  45219. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_model__ = __webpack_require__(104);
  45220. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  45221. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  45222. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  45223. var Cylinder = /*#__PURE__*/function (_Model) {
  45224. _inherits(Cylinder, _Model);
  45225. function Cylinder(gl) {
  45226. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45227. _classCallCheck(this, Cylinder);
  45228. return _possibleConstructorReturn(this, (Cylinder.__proto__ || Object.getPrototypeOf(Cylinder)).call(this, gl, Object.assign({}, opts, { geometry: new __WEBPACK_IMPORTED_MODULE_0__geometry__["CylinderGeometry"](opts) })));
  45229. }
  45230. return Cylinder;
  45231. }(__WEBPACK_IMPORTED_MODULE_1__core_model__["a" /* default */]);
  45232. /* harmony default export */ __webpack_exports__["a"] = (Cylinder);
  45233. //# sourceMappingURL=cylinder.js.map
  45234. /***/ }),
  45235. /* 636 */
  45236. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45237. "use strict";
  45238. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core__ = __webpack_require__(59);
  45239. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__geometry__ = __webpack_require__(41);
  45240. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  45241. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  45242. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  45243. var IcoSphere = /*#__PURE__*/function (_Model) {
  45244. _inherits(IcoSphere, _Model);
  45245. function IcoSphere(gl) {
  45246. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45247. _classCallCheck(this, IcoSphere);
  45248. return _possibleConstructorReturn(this, (IcoSphere.__proto__ || Object.getPrototypeOf(IcoSphere)).call(this, gl, Object.assign({}, opts, { geometry: new __WEBPACK_IMPORTED_MODULE_1__geometry__["IcoSphereGeometry"](opts) })));
  45249. }
  45250. return IcoSphere;
  45251. }(__WEBPACK_IMPORTED_MODULE_0__core__["Model"]);
  45252. /* harmony default export */ __webpack_exports__["a"] = (IcoSphere);
  45253. //# sourceMappingURL=ico-sphere.js.map
  45254. /***/ }),
  45255. /* 637 */
  45256. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45257. "use strict";
  45258. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(41);
  45259. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_model__ = __webpack_require__(104);
  45260. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils__ = __webpack_require__(8);
  45261. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  45262. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  45263. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  45264. var Plane = /*#__PURE__*/function (_Model) {
  45265. _inherits(Plane, _Model);
  45266. function Plane(gl) {
  45267. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45268. _classCallCheck(this, Plane);
  45269. var _opts$id = opts.id,
  45270. id = _opts$id === undefined ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils__["d" /* uid */])('plane') : _opts$id;
  45271. return _possibleConstructorReturn(this, (Plane.__proto__ || Object.getPrototypeOf(Plane)).call(this, gl, Object.assign({}, opts, { id: id, geometry: new __WEBPACK_IMPORTED_MODULE_0__geometry__["PlaneGeometry"](opts) })));
  45272. }
  45273. return Plane;
  45274. }(__WEBPACK_IMPORTED_MODULE_1__core_model__["a" /* default */]);
  45275. /* harmony default export */ __webpack_exports__["a"] = (Plane);
  45276. //# sourceMappingURL=plane.js.map
  45277. /***/ }),
  45278. /* 638 */
  45279. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45280. "use strict";
  45281. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core__ = __webpack_require__(59);
  45282. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__geometry__ = __webpack_require__(41);
  45283. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils__ = __webpack_require__(8);
  45284. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  45285. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  45286. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  45287. var Sphere = /*#__PURE__*/function (_Model) {
  45288. _inherits(Sphere, _Model);
  45289. function Sphere(gl) {
  45290. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45291. _classCallCheck(this, Sphere);
  45292. var _opts$id = opts.id,
  45293. id = _opts$id === undefined ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__utils__["d" /* uid */])('sphere') : _opts$id;
  45294. return _possibleConstructorReturn(this, (Sphere.__proto__ || Object.getPrototypeOf(Sphere)).call(this, gl, Object.assign({}, opts, { id: id, geometry: new __WEBPACK_IMPORTED_MODULE_1__geometry__["SphereGeometry"](opts) })));
  45295. }
  45296. return Sphere;
  45297. }(__WEBPACK_IMPORTED_MODULE_0__core__["Model"]);
  45298. /* harmony default export */ __webpack_exports__["a"] = (Sphere);
  45299. //# sourceMappingURL=sphere.js.map
  45300. /***/ }),
  45301. /* 639 */
  45302. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45303. "use strict";
  45304. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__geometry__ = __webpack_require__(41);
  45305. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core__ = __webpack_require__(59);
  45306. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  45307. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  45308. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  45309. var TruncatedCone = /*#__PURE__*/function (_Model) {
  45310. _inherits(TruncatedCone, _Model);
  45311. function TruncatedCone(gl) {
  45312. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45313. _classCallCheck(this, TruncatedCone);
  45314. return _possibleConstructorReturn(this, (TruncatedCone.__proto__ || Object.getPrototypeOf(TruncatedCone)).call(this, gl, Object.assign({}, opts, { geometry: new __WEBPACK_IMPORTED_MODULE_0__geometry__["TruncatedConeGeometry"](opts) })));
  45315. }
  45316. return TruncatedCone;
  45317. }(__WEBPACK_IMPORTED_MODULE_1__core__["Model"]);
  45318. /* harmony default export */ __webpack_exports__["a"] = (TruncatedCone);
  45319. //# sourceMappingURL=truncated-cone.js.map
  45320. /***/ }),
  45321. /* 640 */
  45322. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45323. "use strict";
  45324. /* unused harmony export stop */
  45325. /* unused harmony export get */
  45326. /* unused harmony export getWheel */
  45327. /* unused harmony export getKey */
  45328. /* unused harmony export isRightClick */
  45329. /* unused harmony export getPos */
  45330. /* unused harmony export EventsProxy */
  45331. /* unused harmony export Keys */
  45332. /* harmony export (immutable) */ __webpack_exports__["a"] = addEvents;
  45333. /* unused harmony export removeEvents */
  45334. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  45335. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  45336. // event.js
  45337. // Handle keyboard/mouse/touch events in the Canvas
  45338. // TODO - this will not work under node
  45339. /* eslint-disable dot-notation, max-statements, no-loop-func */
  45340. /* global window, document */
  45341. function noop() {}
  45342. var KEYS = {
  45343. enter: 13,
  45344. up: 38,
  45345. down: 40,
  45346. left: 37,
  45347. right: 39,
  45348. esc: 27,
  45349. space: 32,
  45350. backspace: 8,
  45351. tab: 9,
  45352. delete: 46
  45353. };
  45354. // returns an O3D object or false otherwise.
  45355. function toO3D(n) {
  45356. return n !== true ? n : false;
  45357. }
  45358. // Returns an element position
  45359. function _getPos(elem) {
  45360. var bbox = elem.getBoundingClientRect();
  45361. return {
  45362. x: bbox.left,
  45363. y: bbox.top,
  45364. bbox: bbox
  45365. };
  45366. }
  45367. // event object wrapper
  45368. function get(e, win) {
  45369. win = win || window;
  45370. return e || win.event;
  45371. }
  45372. function getWheel(e) {
  45373. return e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3;
  45374. }
  45375. function getKey(e) {
  45376. var code = e.which || e.keyCode;
  45377. var key = keyOf(code);
  45378. // onkeydown
  45379. var fKey = code - 111;
  45380. if (fKey > 0 && fKey < 13) {
  45381. key = 'f' + fKey;
  45382. }
  45383. key = key || String.fromCharCode(code).toLowerCase();
  45384. return {
  45385. code: code,
  45386. key: key,
  45387. shift: e.shiftKey,
  45388. control: e.ctrlKey,
  45389. alt: e.altKey,
  45390. meta: e.metaKey
  45391. };
  45392. }
  45393. function isRightClick(e) {
  45394. return e.which === 3 || e.button === 2;
  45395. }
  45396. function getPos(e, win) {
  45397. // get mouse position
  45398. win = win || window;
  45399. e = e || win.event;
  45400. var doc = win.document;
  45401. doc = doc.documentElement || doc.body;
  45402. // TODO(nico): make touch event handling better
  45403. if (e.touches && e.touches.length) {
  45404. var touchesPos = [];
  45405. var l = e.touches.length;
  45406. var evt = void 0;
  45407. for (var i = 0; i < l; ++i) {
  45408. evt = e.touches[i];
  45409. touchesPos.push({
  45410. x: evt.pageX || evt.clientX + doc.scrollLeft,
  45411. y: evt.pageY || evt.clientY + doc.scrollTop
  45412. });
  45413. }
  45414. return touchesPos;
  45415. }
  45416. var page = {
  45417. x: e.pageX || e.clientX + doc.scrollLeft,
  45418. y: e.pageY || e.clientY + doc.scrollTop
  45419. };
  45420. return [page];
  45421. }
  45422. function _stop(e) {
  45423. if (e.stopPropagation) {
  45424. e.stopPropagation();
  45425. }
  45426. e.cancelBubble = true;
  45427. if (e.preventDefault) {
  45428. e.preventDefault();
  45429. } else {
  45430. e.returnValue = false;
  45431. }
  45432. }
  45433. var EventsProxy = /*#__PURE__*/function () {
  45434. function EventsProxy(domElem, opt) {
  45435. _classCallCheck(this, EventsProxy);
  45436. this.scene = opt.scene;
  45437. this.domElem = domElem;
  45438. this.pos = _getPos(domElem);
  45439. this.opt = this.callbacks = opt;
  45440. this.size = {
  45441. width: domElem.width || domElem.offsetWidth,
  45442. height: domElem.height || domElem.offsetHeight
  45443. };
  45444. this.attachEvents();
  45445. }
  45446. _createClass(EventsProxy, [{
  45447. key: 'attachEvents',
  45448. value: function attachEvents() {
  45449. var _this = this;
  45450. var domElem = this.domElem;
  45451. var opt = this.opt;
  45452. if (opt.disableContextMenu) {
  45453. domElem.oncontextmenu = function () {
  45454. return false;
  45455. };
  45456. }
  45457. if (opt.enableMouse) {
  45458. ['mouseup', 'mousedown', 'mousemove', 'mouseover', 'mouseout'].forEach(function (action) {
  45459. domElem.addEventListener(action, function (e, win) {
  45460. _this[action](_this.eventInfo(action, e, win));
  45461. }, false);
  45462. });
  45463. // "well, this is embarrassing..."
  45464. var type = '';
  45465. if (!document.getBoxObjectFor && window.mozInnerScreenX === null) {
  45466. type = 'mousewheel';
  45467. } else {
  45468. type = 'DOMMouseScroll';
  45469. }
  45470. domElem.addEventListener(type, function (e, win) {
  45471. _this['mousewheel'](_this.eventInfo('mousewheel', e, win));
  45472. }, false);
  45473. }
  45474. if (opt.enableTouch) {
  45475. ['touchstart', 'touchmove', 'touchend'].forEach(function (action) {
  45476. domElem.addEventListener(action, function (e, win) {
  45477. _this[action](_this.eventInfo(action, e, win));
  45478. }, false);
  45479. });
  45480. }
  45481. if (opt.enableKeyboard) {
  45482. ['keydown', 'keyup'].forEach(function (action) {
  45483. document.addEventListener(action, function (e, win) {
  45484. _this[action](_this.eventInfo(action, e, win));
  45485. }, false);
  45486. });
  45487. }
  45488. }
  45489. }, {
  45490. key: 'eventInfo',
  45491. value: function eventInfo(type, e, win) {
  45492. var domElem = this.domElem;
  45493. var scene = this.scene;
  45494. var opt = this.opt;
  45495. var size = this.getSize();
  45496. var relative = opt.relative;
  45497. var centerOrigin = opt.centerOrigin;
  45498. var pos = opt.cachePosition && this.pos || _getPos(domElem);
  45499. var ge = get(e, win);
  45500. var epos = getPos(e, win);
  45501. var origPos = { x: epos[0].x, y: epos[0].y };
  45502. var evt = {};
  45503. var x = void 0;
  45504. var y = void 0;
  45505. // get Position
  45506. for (var i = 0, l = epos.length; i < l; ++i) {
  45507. x = epos[i].x;
  45508. y = epos[i].y;
  45509. if (relative) {
  45510. x -= pos.x;y -= pos.y;
  45511. if (centerOrigin) {
  45512. x -= size.width / 2;
  45513. y -= size.height / 2;
  45514. // y axis now points to the top of the screen
  45515. y *= -1;
  45516. }
  45517. }
  45518. epos[i].x = x;
  45519. epos[i].y = y;
  45520. }
  45521. switch (type) {
  45522. case 'mousewheel':
  45523. evt.wheel = getWheel(ge);
  45524. break;
  45525. case 'keydown':
  45526. case 'keyup':
  45527. Object.assign(evt, getKey(ge));
  45528. break;
  45529. case 'mouseup':
  45530. evt.isRightClick = isRightClick(ge);
  45531. break;
  45532. default:
  45533. break;
  45534. }
  45535. var cacheTarget = void 0;
  45536. Object.assign(evt, {
  45537. x: epos[0].x,
  45538. y: epos[0].y,
  45539. posArray: epos,
  45540. cache: false,
  45541. // stop event propagation
  45542. stop: function stop() {
  45543. _stop(ge);
  45544. },
  45545. // get the target element of the event
  45546. getTarget: function getTarget() {
  45547. if (cacheTarget) {
  45548. return cacheTarget;
  45549. }
  45550. return cacheTarget = opt.picking && scene.pick(origPos.x - pos.x, origPos.y - pos.y) || true;
  45551. }
  45552. });
  45553. // wrap native event
  45554. evt.event = ge;
  45555. return evt;
  45556. }
  45557. }, {
  45558. key: 'getSize',
  45559. value: function getSize() {
  45560. if (this.cacheSize) {
  45561. return this.size;
  45562. }
  45563. var domElem = this.domElem;
  45564. return {
  45565. width: domElem.width || domElem.offsetWidth,
  45566. height: domElem.height || domElem.offsetHeight
  45567. };
  45568. }
  45569. }, {
  45570. key: 'mouseup',
  45571. value: function mouseup(e) {
  45572. if (!this.moved) {
  45573. if (e.isRightClick) {
  45574. this.callbacks.onRightClick(e, this.hovered);
  45575. } else {
  45576. this.callbacks.onClick(e, toO3D(this.pressed));
  45577. }
  45578. }
  45579. if (this.pressed) {
  45580. if (this.moved) {
  45581. this.callbacks.onDragEnd(e, toO3D(this.pressed));
  45582. } else {
  45583. this.callbacks.onDragCancel(e, toO3D(this.pressed));
  45584. }
  45585. this.pressed = this.moved = false;
  45586. }
  45587. }
  45588. }, {
  45589. key: 'mouseout',
  45590. value: function mouseout(e) {
  45591. // mouseout canvas
  45592. var rt = e.relatedTarget;
  45593. var domElem = this.domElem;
  45594. while (rt && rt.parentNode) {
  45595. if (domElem === rt.parentNode) {
  45596. return;
  45597. }
  45598. rt = rt.parentNode;
  45599. }
  45600. if (this.hovered) {
  45601. this.callbacks.onMouseLeave(e, this.hovered);
  45602. this.hovered = false;
  45603. }
  45604. if (this.pressed && this.moved) {
  45605. this.callbacks.onDragEnd(e);
  45606. this.pressed = this.moved = false;
  45607. }
  45608. }
  45609. }, {
  45610. key: 'mouseover',
  45611. value: function mouseover(e) {}
  45612. }, {
  45613. key: 'mousemove',
  45614. value: function mousemove(e) {
  45615. if (this.pressed) {
  45616. this.moved = true;
  45617. this.callbacks.onDragMove(e, toO3D(this.pressed));
  45618. return;
  45619. }
  45620. if (this.hovered) {
  45621. var target = toO3D(e.getTarget());
  45622. if (!target || target.hash !== this.hash) {
  45623. this.callbacks.onMouseLeave(e, this.hovered);
  45624. this.hovered = target;
  45625. this.hash = target;
  45626. if (target) {
  45627. this.hash = target.hash;
  45628. this.callbacks.onMouseEnter(e, this.hovered);
  45629. }
  45630. } else {
  45631. this.callbacks.onMouseMove(e, this.hovered);
  45632. }
  45633. } else {
  45634. this.hovered = toO3D(e.getTarget());
  45635. this.hash = this.hovered;
  45636. if (this.hovered) {
  45637. this.hash = this.hovered.hash;
  45638. this.callbacks.onMouseEnter(e, this.hovered);
  45639. }
  45640. }
  45641. if (!this.opt.picking) {
  45642. this.callbacks.onMouseMove(e);
  45643. }
  45644. }
  45645. }, {
  45646. key: 'mousewheel',
  45647. value: function mousewheel(e) {
  45648. this.callbacks.onMouseWheel(e);
  45649. }
  45650. }, {
  45651. key: 'mousedown',
  45652. value: function mousedown(e) {
  45653. this.pressed = e.getTarget();
  45654. this.callbacks.onDragStart(e, toO3D(this.pressed));
  45655. }
  45656. }, {
  45657. key: 'touchstart',
  45658. value: function touchstart(e) {
  45659. this.touched = e.getTarget();
  45660. this.touchedLastPosition = { x: e.x, y: e.y };
  45661. this.callbacks.onTouchStart(e, toO3D(this.touched));
  45662. }
  45663. }, {
  45664. key: 'touchmove',
  45665. value: function touchmove(e) {
  45666. if (this.touched) {
  45667. this.touchMoved = true;
  45668. this.callbacks.onTouchMove(e, toO3D(this.touched));
  45669. }
  45670. }
  45671. }, {
  45672. key: 'touchend',
  45673. value: function touchend(e) {
  45674. if (this.touched) {
  45675. if (this.touchMoved) {
  45676. this.callbacks.onTouchEnd(e, toO3D(this.touched));
  45677. } else {
  45678. e.x = isNaN(e.x) ? this.touchedLastPosition.x : e.x;
  45679. e.y = isNaN(e.y) ? this.touchedLastPosition.y : e.y;
  45680. this.callbacks.onTap(e, toO3D(this.touched));
  45681. this.callbacks.onTouchCancel(e, toO3D(this.touched));
  45682. }
  45683. this.touched = this.touchMoved = false;
  45684. }
  45685. }
  45686. }, {
  45687. key: 'keydown',
  45688. value: function keydown(e) {
  45689. this.callbacks.onKeyDown(e);
  45690. }
  45691. }, {
  45692. key: 'keyup',
  45693. value: function keyup(e) {
  45694. this.callbacks.onKeyUp(e);
  45695. }
  45696. }]);
  45697. return EventsProxy;
  45698. }();
  45699. Object.assign(EventsProxy.prototype, {
  45700. hovered: false,
  45701. pressed: false,
  45702. touched: false,
  45703. touchedLastPosition: { x: 0, y: 0 },
  45704. touchMoved: false,
  45705. moved: false
  45706. });
  45707. var DEFAULT_OPTS = {
  45708. cachePosition: true,
  45709. cacheSize: true,
  45710. relative: true,
  45711. centerOrigin: true,
  45712. disableContextMenu: true,
  45713. bind: false,
  45714. picking: false,
  45715. enableTouch: true,
  45716. enableMouse: true,
  45717. enableKeyboard: true,
  45718. onClick: noop,
  45719. onRightClick: noop,
  45720. onDragStart: noop,
  45721. onDragMove: noop,
  45722. onDragEnd: noop,
  45723. onDragCancel: noop,
  45724. onTouchStart: noop,
  45725. onTouchMove: noop,
  45726. onTouchEnd: noop,
  45727. onTouchCancel: noop,
  45728. onTap: noop,
  45729. onMouseMove: noop,
  45730. onMouseEnter: noop,
  45731. onMouseLeave: noop,
  45732. onMouseWheel: noop,
  45733. onKeyDown: noop,
  45734. onKeyUp: noop
  45735. };
  45736. var Keys = KEYS;
  45737. function keyOf(code) {
  45738. var keyMap = Keys;
  45739. for (var name in keyMap) {
  45740. if (keyMap[name] === code) {
  45741. return name;
  45742. }
  45743. }
  45744. return null;
  45745. }
  45746. function addEvents(domElement) {
  45747. var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45748. opt = Object.assign({}, DEFAULT_OPTS, opt);
  45749. var bind = opt.bind;
  45750. if (bind) {
  45751. for (var name in opt) {
  45752. if (name.match(/^on[a-zA-Z0-9]+$/)) {
  45753. (function (fname, fn) {
  45754. opt[fname] = function f() {
  45755. fn.apply(bind, Array.prototype.slice.call(arguments));
  45756. };
  45757. })(name, opt[name]);
  45758. }
  45759. }
  45760. }
  45761. return new EventsProxy(domElement, opt);
  45762. }
  45763. function removeEvents(domElement) {
  45764. var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  45765. opt = Object.assign({}, DEFAULT_OPTS, opt);
  45766. var bind = opt.bind;
  45767. if (bind) {
  45768. for (var name in opt) {
  45769. if (name.match(/^on[a-zA-Z0-9]+$/)) {
  45770. (function (fname, fn) {
  45771. opt[fname] = function f() {
  45772. fn.apply(bind, Array.prototype.slice.call(arguments));
  45773. };
  45774. })(name, opt[name]);
  45775. }
  45776. }
  45777. }
  45778. return new EventsProxy(domElement, opt);
  45779. }
  45780. //# sourceMappingURL=add-events.js.map
  45781. /***/ }),
  45782. /* 641 */
  45783. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45784. "use strict";
  45785. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__add_events__ = __webpack_require__(640);
  45786. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__add_events__["a"]; });
  45787. //# sourceMappingURL=index.js.map
  45788. /***/ }),
  45789. /* 642 */
  45790. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45791. "use strict";
  45792. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lib_shader_modules__ = __webpack_require__(162);
  45793. /* unused harmony reexport registerShaderModules */
  45794. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__lib_assemble_shaders__ = __webpack_require__(258);
  45795. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_1__lib_assemble_shaders__["a"]; });
  45796. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_shader_cache__ = __webpack_require__(259);
  45797. /* unused harmony reexport ShaderCache */
  45798. //# sourceMappingURL=index.js.map
  45799. /***/ }),
  45800. /* 643 */
  45801. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45802. "use strict";
  45803. /* unused harmony export checkRendererVendor */
  45804. /* harmony export (immutable) */ __webpack_exports__["a"] = getPlatformShaderDefines;
  45805. /* harmony export (immutable) */ __webpack_exports__["b"] = getVersionDefines;
  45806. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__webgl__ = __webpack_require__(61);
  45807. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_context_features__ = __webpack_require__(108);
  45808. function checkRendererVendor(debugInfo, gpuVendor) {
  45809. var vendor = debugInfo.vendor,
  45810. renderer = debugInfo.renderer;
  45811. var result = void 0;
  45812. switch (gpuVendor) {
  45813. case 'nvidia':
  45814. result = vendor.match(/NVIDIA/i) || renderer.match(/NVIDIA/i);
  45815. break;
  45816. case 'intel':
  45817. result = vendor.match(/INTEL/i) || renderer.match(/INTEL/i);
  45818. break;
  45819. case 'amd':
  45820. result = vendor.match(/AMD/i) || renderer.match(/AMD/i) || vendor.match(/ATI/i) || renderer.match(/ATI/i);
  45821. break;
  45822. default:
  45823. result = false;
  45824. }
  45825. return result;
  45826. }
  45827. function getPlatformShaderDefines(gl) {
  45828. /* eslint-disable */
  45829. var platformDefines = '';
  45830. var debugInfo = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__webgl__["getContextInfo"])(gl);
  45831. if (checkRendererVendor(debugInfo, 'nvidia')) {
  45832. platformDefines += '#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n';
  45833. } else if (checkRendererVendor(debugInfo, 'intel')) {
  45834. platformDefines += '#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel\'s built-in \'tan\' function doesn\'t have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn\'t have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n';
  45835. } else if (checkRendererVendor(debugInfo, 'amd')) {
  45836. // AMD Does not eliminate fp64 code
  45837. platformDefines += '#define AMD_GPU\n';
  45838. } else {
  45839. // We don't know what GPU it is, could be that the GPU driver or
  45840. // browser is not implementing UNMASKED_RENDERER constant and not
  45841. // reporting a correct name
  45842. platformDefines += '#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel\'s built-in \'tan\' function doesn\'t have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn\'t have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n';
  45843. }
  45844. return platformDefines;
  45845. }
  45846. function getVersionDefines(gl) {
  45847. var versionDefines = '// Defines for shader portability\n#if (__VERSION__ > 120)\n# define attribute in\n# define varying out\n# define FRAG_DEPTH\n# define DERIVATIVES\n# define DRAW_BUFFERS\n# define TEXTURE_LOD\n#else\n// # define in attribute\n// # define out varying\n#endif // __VERSION\n';
  45848. if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_context_features__["b" /* hasFeature */])(gl, __WEBPACK_IMPORTED_MODULE_1__webgl_context_features__["a" /* FEATURES */].GLSL_FRAG_DEPTH)) {
  45849. versionDefines += '// FRAG_DEPTH => gl_FragDepth is available\n#ifdef GL_EXT_frag_depth\n#extension GL_EXT_frag_depth : enable\n# define FRAG_DEPTH\n# define gl_FragDepth gl_FragDepthEXT\n#endif\n';
  45850. }
  45851. if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_context_features__["b" /* hasFeature */])(gl, __WEBPACK_IMPORTED_MODULE_1__webgl_context_features__["a" /* FEATURES */].GLSL_DERIVATIVES)) {
  45852. versionDefines += '// DERIVATIVES => dxdF, dxdY and fwidth are available\n#ifdef GL_OES_standard_derivatives\n#extension GL_OES_standard_derivatives : enable\n# define DERIVATIVES\n#endif\n';
  45853. }
  45854. if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_context_features__["b" /* hasFeature */])(gl, __WEBPACK_IMPORTED_MODULE_1__webgl_context_features__["a" /* FEATURES */].GLSL_FRAG_DATA)) {
  45855. versionDefines += '// DRAW_BUFFERS => gl_FragData[] is available\n#ifdef GL_EXT_draw_buffers\n#extension GL_EXT_draw_buffers : require\n#define DRAW_BUFFERS\n#endif\n';
  45856. }
  45857. if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__webgl_context_features__["b" /* hasFeature */])(gl, __WEBPACK_IMPORTED_MODULE_1__webgl_context_features__["a" /* FEATURES */].GLSL_TEXTURE_LOD)) {
  45858. versionDefines += '// TEXTURE_LOD => texture2DLod etc are available\n#ifdef GL_EXT_shader_texture_lod\n#extension GL_EXT_shader_texture_lod : enable\n# define TEXTURE_LOD\n#define texture2DLod texture2DLodEXT\n#define texture2DProjLod texture2DProjLodEXT\n#define texture2DProjLod texture2DProjLodEXT\n#define textureCubeLod textureCubeLodEXT\n#define texture2DGrad texture2DGradEXT\n#define texture2DProjGrad texture2DProjGradEXT\n#define texture2DProjGrad texture2DProjGradEXT\n#define textureCubeGrad textureCubeGradEXT\n#endif\n';
  45859. }
  45860. return versionDefines;
  45861. }
  45862. //# sourceMappingURL=platform-defines.js.map
  45863. /***/ }),
  45864. /* 644 */
  45865. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45866. "use strict";
  45867. // Minimal texture (diffuse map) support
  45868. /* eslint-disable camelcase */
  45869. var DEFAULT_MODULE_OPTIONS = {
  45870. diffuseTexture: null,
  45871. diffuseColor: [0.5, 0.5, 0.5, 1]
  45872. };
  45873. function getUniforms() {
  45874. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MODULE_OPTIONS;
  45875. var uniforms = {};
  45876. if (opts.diffuseTexture !== undefined) {
  45877. uniforms.diffuse_uHasTexture = Boolean(opts.diffuseTexture);
  45878. uniforms.diffuse_uTexture = opts.diffuseTexture;
  45879. }
  45880. if (opts.diffuseColor !== undefined) {
  45881. uniforms.diffuse_uColor = opts.diffuseColor;
  45882. }
  45883. return uniforms;
  45884. }
  45885. var vs = 'varying vec2 diffuse_vTexCoord;\n\n/* Set the UV coordinate from attributes */\nvoid diffuse_setTextureCoordinate(vec2 uv) {\n diffuse_vTexCoord = uv;\n}\n';
  45886. var fs = 'uniform vec4 diffuse_uColor;\nuniform bool diffuse_uHasTexture;\nuniform sampler2D diffuse_uTexture;\n\nvarying vec2 diffuse_vTexCoord;\n\n// Gets diffuse color of material from uniform\n// If we have a standard (diffuse) texture, set color to texture\n// return (vec4) - rgba\n//\nvec4 diffuse_getColor() {\n vec2 texCoord = diffuse_vTexCoord;\n return diffuse_uHasTexture ?\n texture2D(diffuse_uTexture, vec2(texCoord.s, texCoord.t)) :\n diffuse_uColor;\n}\n\nvec4 diffuse_filterColor(vec4 color) {\n return diffuse_getColor();\n}\n';
  45887. /* harmony default export */ __webpack_exports__["a"] = ({
  45888. name: 'diffuse',
  45889. getUniforms: getUniforms,
  45890. vs: vs,
  45891. fs: fs
  45892. });
  45893. //# sourceMappingURL=diffuse.js.map
  45894. /***/ }),
  45895. /* 645 */
  45896. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45897. "use strict";
  45898. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__project_project__ = __webpack_require__(260);
  45899. // Cheap lighting - single directional light, single dot product, one uniform
  45900. /* eslint-disable camelcase */
  45901. var DEFAULT_LIGHT_DIRECTION = new Float32Array([1, 1, 2]);
  45902. var DEFAULT_MODULE_OPTIONS = {
  45903. lightDirection: DEFAULT_LIGHT_DIRECTION
  45904. };
  45905. function getUniforms() {
  45906. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MODULE_OPTIONS;
  45907. var uniforms = {};
  45908. if (opts.lightDirection) {
  45909. uniforms.dirlight_uLightDirection = opts.lightDirection;
  45910. }
  45911. return uniforms;
  45912. }
  45913. // TODO - reuse normal from geometry module
  45914. var vs = null;
  45915. var fs = 'uniform vec3 dirlight_uLightDirection;\n\n/*\n * Returns color attenuated by angle from light source\n */\nvec4 dirlight_filterColor(vec4 color) {\n vec3 normal = project_getNormal_World();\n float d = abs(dot(normalize(normal), normalize(dirlight_uLightDirection)));\n return vec4(color.rgb * d, color.a);\n}\n';
  45916. /* harmony default export */ __webpack_exports__["a"] = ({
  45917. name: 'dirlight',
  45918. vs: vs,
  45919. fs: fs,
  45920. getUniforms: getUniforms,
  45921. dependencies: [__WEBPACK_IMPORTED_MODULE_0__project_project__["a" /* default */]]
  45922. });
  45923. //# sourceMappingURL=dirlight.js.map
  45924. /***/ }),
  45925. /* 646 */
  45926. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45927. "use strict";
  45928. var fp32shader = '#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n\n// All these functions are for substituting tan() function from Intel GPU only\nconst float TWO_PI = 6.2831854820251465;\nconst float PI_2 = 1.5707963705062866;\nconst float PI_16 = 0.1963495463132858;\n\nconst float SIN_TABLE_0 = 0.19509032368659973;\nconst float SIN_TABLE_1 = 0.3826834261417389;\nconst float SIN_TABLE_2 = 0.5555702447891235;\nconst float SIN_TABLE_3 = 0.7071067690849304;\n\nconst float COS_TABLE_0 = 0.9807852506637573;\nconst float COS_TABLE_1 = 0.9238795042037964;\nconst float COS_TABLE_2 = 0.8314695954322815;\nconst float COS_TABLE_3 = 0.7071067690849304;\n\nconst float INVERSE_FACTORIAL_3 = 1.666666716337204e-01; // 1/3!\nconst float INVERSE_FACTORIAL_5 = 8.333333767950535e-03; // 1/5!\nconst float INVERSE_FACTORIAL_7 = 1.9841270113829523e-04; // 1/7!\nconst float INVERSE_FACTORIAL_9 = 2.75573188446287533e-06; // 1/9!\n\nfloat sin_taylor_fp32(float a) {\n float r, s, t, x;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n x = -a * a;\n s = a;\n r = a;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_3;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_5;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_7;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_9;\n s = s + t;\n\n return s;\n}\n\nvoid sincos_taylor_fp32(float a, out float sin_t, out float cos_t) {\n if (a == 0.0) {\n sin_t = 0.0;\n cos_t = 1.0;\n }\n sin_t = sin_taylor_fp32(a);\n cos_t = sqrt(1.0 - sin_t * sin_t);\n}\n\nfloat tan_taylor_fp32(float a) {\n float sin_a;\n float cos_a;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n // 2pi range reduction\n float z = floor(a / TWO_PI);\n float r = a - TWO_PI * z;\n\n float t;\n float q = floor(r / PI_2 + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return 0.0 / 0.0;\n }\n\n t = r - PI_2 * q;\n\n q = floor(t / PI_16 + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return 0.0 / 0.0;\n } else {\n t = t - PI_16 * q;\n }\n\n float u = 0.0;\n float v = 0.0;\n\n float sin_t, cos_t;\n float s, c;\n sincos_taylor_fp32(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0;\n v = SIN_TABLE_0;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1;\n v = SIN_TABLE_1;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2;\n v = SIN_TABLE_2;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3;\n v = SIN_TABLE_3;\n }\n if (k > 0) {\n s = u * sin_t + v * cos_t;\n c = u * cos_t - v * sin_t;\n } else {\n s = u * sin_t - v * cos_t;\n c = u * cos_t + v * sin_t;\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return sin_a / cos_a;\n}\n#endif\n\nfloat tan_fp32(float a) {\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n return tan_taylor_fp32(a);\n#else\n return tan(a);\n#endif\n}\n';
  45929. /* harmony default export */ __webpack_exports__["a"] = ({
  45930. name: 'fp32',
  45931. vs: fp32shader,
  45932. fs: null
  45933. });
  45934. //# sourceMappingURL=fp32.js.map
  45935. /***/ }),
  45936. /* 647 */
  45937. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45938. "use strict";
  45939. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  45940. //
  45941. // Permission is hereby granted, free of charge, to any person obtaining a copy
  45942. // of this software and associated documentation files (the "Software"), to deal
  45943. // in the Software without restriction, including without limitation the rights
  45944. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  45945. // copies of the Software, and to permit persons to whom the Software is
  45946. // furnished to do so, subject to the following conditions:
  45947. //
  45948. // The above copyright notice and this permission notice shall be included in
  45949. // all copies or substantial portions of the Software.
  45950. //
  45951. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  45952. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  45953. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  45954. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  45955. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  45956. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  45957. // THE SOFTWARE.
  45958. /* harmony default export */ __webpack_exports__["a"] = ("uniform float ONE;\n\n/*\nAbout LUMA_FP64_CODE_ELIMINATION_WORKAROUND\n\nThe purpose of this workaround is to prevent shader compilers from\noptimizing away necessary arithmetic operations by swapping their sequences\nor transform the equation to some 'equivalent' from.\n\nThe method is to multiply an artifical variable, ONE, which will be known to\nthe compiler to be 1 only at runtime. The whole expression is then represented\nas a polynomial with respective to ONE. In the coefficients of all terms, only one a\nand one b should appear\n\nerr = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE\n*/\n\n// Divide float number to high and low floats to extend fraction bits\nvec2 split(float a) {\n const float SPLIT = 4097.0;\n float t = a * SPLIT;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float a_hi = t * ONE - (t - a);\n float a_lo = a * ONE - a_hi;\n#else\n float a_hi = t - (t - a);\n float a_lo = a - a_hi;\n#endif\n return vec2(a_hi, a_lo);\n}\n\n// Divide float number again when high float uses too many fraction bits\nvec2 split2(vec2 a) {\n vec2 b = split(a.x);\n b.y += a.y;\n return b;\n}\n\n// Special sum operation when a > b\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float sum = (a + b) * ONE;\n float err = b - (sum - a) * ONE;\n#else\n float sum = a + b;\n float err = b - (sum - a);\n#endif\n return vec2(sum, err);\n}\n\n// General sum operation\nvec2 twoSum(float a, float b) {\n float s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);\n#else\n float v = s - a;\n float err = (a - (s - v)) + (b - v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSub(float a, float b) {\n float s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * ONE - a) * ONE;\n float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);\n#else\n float v = s - a;\n float err = (a - (s - v)) - (b + v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSqr(float a) {\n float prod = a * a;\n vec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *\n a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;\n#else\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\n return vec2(prod, err);\n}\n\nvec2 twoProd(float a, float b) {\n float prod = a * b;\n vec2 a_fp64 = split(a);\n vec2 b_fp64 = split(b);\n float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +\n a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;\n return vec2(prod, err);\n}\n\nvec2 sum_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSum(a.x, b.x);\n t = twoSum(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 sub_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSub(a.x, b.x);\n t = twoSub(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 mul_fp64(vec2 a, vec2 b) {\n vec2 prod = twoProd(a.x, b.x);\n // y component is for the error\n prod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n prod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n return prod;\n}\n\nvec2 div_fp64(vec2 a, vec2 b) {\n float xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n vec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\n vec2 yn = a * xn;\n#endif\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\n vec2 prod = twoProd(xn, diff);\n return sum_fp64(yn, prod);\n}\n\nvec2 sqrt_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n\n float x = 1.0 / sqrt(a.x);\n float yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n vec2 yn_sqr = twoSqr(yn) * ONE;\n#else\n vec2 yn_sqr = twoSqr(yn);\n#endif\n float diff = sub_fp64(a, yn_sqr).x;\n vec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n return sum_fp64(split(yn), prod);\n#else\n return sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n");
  45959. //# sourceMappingURL=fp64-arithmetic.glsl.js.map
  45960. /***/ }),
  45961. /* 648 */
  45962. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45963. "use strict";
  45964. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  45965. //
  45966. // Permission is hereby granted, free of charge, to any person obtaining a copy
  45967. // of this software and associated documentation files (the "Software"), to deal
  45968. // in the Software without restriction, including without limitation the rights
  45969. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  45970. // copies of the Software, and to permit persons to whom the Software is
  45971. // furnished to do so, subject to the following conditions:
  45972. //
  45973. // The above copyright notice and this permission notice shall be included in
  45974. // all copies or substantial portions of the Software.
  45975. //
  45976. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  45977. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  45978. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  45979. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  45980. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  45981. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  45982. // THE SOFTWARE.
  45983. /* harmony default export */ __webpack_exports__["a"] = ("const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);\nconst vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);\nconst vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);\nconst vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);\nconst vec2 PI_2_FP64 = vec2(1.5707963705062866, -4.371139006309477e-8);\nconst vec2 PI_4_FP64 = vec2(0.7853981852531433, -2.1855695031547384e-8);\nconst vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);\nconst vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);\nconst vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);\nconst vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);\n\nconst vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);\nconst vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);\nconst vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);\nconst vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);\n\nconst vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);\nconst vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);\nconst vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);\nconst vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);\n\nconst vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09); // 1/3!\nconst vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09); // 1/4!\nconst vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10); // 1/5!\nconst vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11); // 1/6!\nconst vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12); // 1/7!\nconst vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13); // 1/8!\nconst vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14); // 1/9!\nconst vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15); // 1/10!\n\nfloat nint(float d) {\n if (d == floor(d)) return d;\n return floor(d + 0.5);\n}\n\nvec2 nint_fp64(vec2 a) {\n float hi = nint(a.x);\n float lo;\n vec2 tmp;\n if (hi == a.x) {\n lo = nint(a.y);\n tmp = quickTwoSum(hi, lo);\n } else {\n lo = 0.0;\n if (abs(hi - a.x) == 0.5 && a.y < 0.0) {\n hi -= 1.0;\n }\n tmp = vec2(hi, lo);\n }\n return tmp;\n}\n\n/* k_power controls how much range reduction we would like to have\nRange reduction uses the following method:\nassume a = k_power * r + m * log(2), k and m being integers.\nSet k_power = 4 (we can choose other k to trade accuracy with performance.\nwe only need to calculate exp(r) and using exp(a) = 2^m * exp(r)^k_power;\n*/\n\nvec2 exp_fp64(vec2 a) {\n // We need to make sure these two numbers match\n // as bit-wise shift is not available in GLSL 1.0\n const int k_power = 4;\n const float k = 16.0;\n\n const float inv_k = 1.0 / k;\n\n if (a.x <= -88.0) return vec2(0.0, 0.0);\n if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);\n if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);\n if (a.x == 1.0 && a.y == 0.0) return E_FP64;\n\n float m = floor(a.x / LOG2_FP64.x + 0.5);\n vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;\n vec2 s, t, p;\n\n p = mul_fp64(r, r);\n s = sum_fp64(r, p * 0.5);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);\n\n s = sum_fp64(s, t);\n p = mul_fp64(p, r);\n t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);\n\n // s = sum_fp64(s, t);\n // p = mul_fp64(p, r);\n // t = mul_fp64(p, INVERSE_FACTORIAL_6_FP64);\n\n // s = sum_fp64(s, t);\n // p = mul_fp64(p, r);\n // t = mul_fp64(p, INVERSE_FACTORIAL_7_FP64);\n\n s = sum_fp64(s, t);\n\n\n // At this point, s = exp(r) - 1; but after following 4 recursions, we will get exp(r) ^ 512 - 1.\n for (int i = 0; i < k_power; i++) {\n s = sum_fp64(s * 2.0, mul_fp64(s, s));\n }\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = sum_fp64(s, vec2(ONE, 0.0));\n#else\n s = sum_fp64(s, vec2(1.0, 0.0));\n#endif\n\n return s * pow(2.0, m);\n// return r;\n}\n\nvec2 log_fp64(vec2 a)\n{\n if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n vec2 x = vec2(log(a.x), 0.0);\n vec2 s;\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n s = vec2(ONE, 0.0);\n#else\n s = vec2(1.0, 0.0);\n#endif\n\n x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);\n return x;\n}\n\nvec2 sin_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n s = a;\n r = a;\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);\n s = sum_fp64(s, t);\n\n /* keep the following commented code in case we need them\n for extra accuracy from the Taylor expansion*/\n\n // r = mul_fp64(r, x);\n // t = mul_fp64(r, INVERSE_FACTORIAL_7_FP64);\n // s = sum_fp64(s, t);\n\n // r = mul_fp64(r, x);\n // t = mul_fp64(r, INVERSE_FACTORIAL_9_FP64);\n // s = sum_fp64(s, t);\n\n return s;\n}\n\nvec2 cos_taylor_fp64(vec2 a) {\n vec2 r, s, t, x;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n\n x = -mul_fp64(a, a);\n r = x;\n s = sum_fp64(vec2(1.0, 0.0), r * 0.5);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);\n s = sum_fp64(s, t);\n\n r = mul_fp64(r, x);\n t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);\n s = sum_fp64(s, t);\n\n /* keep the following commented code in case we need them\n for extra accuracy from the Taylor expansion*/\n\n // r = mul_fp64(r, x);\n // t = mul_fp64(r, INVERSE_FACTORIAL_8_FP64);\n // s = sum_fp64(s, t);\n\n // r = mul_fp64(r, x);\n // t = mul_fp64(r, INVERSE_FACTORIAL_10_FP64);\n // s = sum_fp64(s, t);\n\n return s;\n}\n\nvoid sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {\n if (a.x == 0.0 && a.y == 0.0) {\n sin_t = vec2(0.0, 0.0);\n cos_t = vec2(1.0, 0.0);\n }\n\n sin_t = sin_taylor_fp64(a);\n cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));\n}\n\nvec2 sin_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n\n // 2pi range reduction\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return sin_taylor_fp64(t);\n } else if (j == 1) {\n return cos_taylor_fp64(t);\n } else if (j == -1) {\n return -cos_taylor_fp64(t);\n } else {\n return -sin_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n }\n } else {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 cos_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(1.0, 0.0);\n }\n\n // 2pi range reduction\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n\n if (k == 0) {\n if (j == 0) {\n return cos_taylor_fp64(t);\n } else if (j == 1) {\n return -sin_taylor_fp64(t);\n } else if (j == -1) {\n return sin_taylor_fp64(t);\n } else {\n return -cos_taylor_fp64(t);\n }\n }\n\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n\n vec2 sin_t, cos_t;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n vec2 result = vec2(0.0, 0.0);\n if (j == 0) {\n if (k > 0) {\n result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n } else if (j == 1) {\n if (k > 0) {\n result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));\n }\n } else if (j == -1) {\n if (k > 0) {\n result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n } else {\n result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n }\n } else {\n if (k > 0) {\n result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));\n } else {\n result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n return result;\n}\n\nvec2 tan_fp64(vec2 a) {\n vec2 sin_a;\n vec2 cos_a;\n\n if (a.x == 0.0 && a.y == 0.0) {\n return vec2(0.0, 0.0);\n }\n\n // 2pi range reduction\n vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));\n vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));\n\n vec2 t;\n float q = floor(r.x / PI_2_FP64.x + 0.5);\n int j = int(q);\n\n\n if (j < -2 || j > 2) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n }\n\n t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));\n\n q = floor(t.x / PI_16_FP64.x + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n // We just can't get PI/16 * 3.0 very accurately.\n // so let's just store it\n if (abs_k > 4) {\n return vec2(0.0 / 0.0, 0.0 / 0.0);\n } else {\n t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));\n }\n\n\n vec2 u = vec2(0.0, 0.0);\n vec2 v = vec2(0.0, 0.0);\n\n vec2 sin_t, cos_t;\n vec2 s, c;\n sincos_taylor_fp64(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n#if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#else\n if (abs_k == 1) {\n u = COS_TABLE_0_FP64;\n v = SIN_TABLE_0_FP64;\n } else if (abs_k == 2) {\n u = COS_TABLE_1_FP64;\n v = SIN_TABLE_1_FP64;\n } else if (abs_k == 3) {\n u = COS_TABLE_2_FP64;\n v = SIN_TABLE_2_FP64;\n } else if (abs_k == 4) {\n u = COS_TABLE_3_FP64;\n v = SIN_TABLE_3_FP64;\n }\n#endif\n if (k > 0) {\n s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n } else {\n s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));\n c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return div_fp64(sin_a, cos_a);\n}\n\nvec2 radians_fp64(vec2 degree) {\n return mul_fp64(degree, PI_180_FP64);\n}\n\nvec2 mix_fp64(vec2 a, vec2 b, float x) {\n vec2 range = sub_fp64(b, a);\n return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));\n}\n\n// Vector functions\n// vec2 functions\nvoid vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sum_fp64(a[0], b[0]);\n out_val[1] = sum_fp64(a[1], b[1]);\n}\n\nvoid vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = sub_fp64(a[0], b[0]);\n out_val[1] = sub_fp64(a[1], b[1]);\n}\n\nvoid vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = mul_fp64(a[0], b[0]);\n out_val[1] = mul_fp64(a[1], b[1]);\n}\n\nvoid vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {\n out_val[0] = div_fp64(a[0], b[0]);\n out_val[1] = div_fp64(a[1], b[1]);\n}\n\nvoid vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {\n vec2 range[2];\n vec2_sub_fp64(y, x, range);\n vec2 portion[2];\n portion[0] = range[0] * a;\n portion[1] = range[1] * a;\n vec2_sum_fp64(x, portion, out_val);\n}\n\nvec2 vec2_length_fp64(vec2 x[2]) {\n return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));\n}\n\nvoid vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {\n vec2 length = vec2_length_fp64(x);\n vec2 length_vec2[2];\n length_vec2[0] = length;\n length_vec2[1] = length;\n\n vec2_div_fp64(x, length_vec2, out_val);\n}\n\nvec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {\n vec2 diff[2];\n vec2_sub_fp64(x, y, diff);\n return vec2_length_fp64(diff);\n}\n\nvec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {\n vec2 v[2];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n\n return sum_fp64(v[0], v[1]);\n}\n\n// vec3 functions\nvoid vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {\n for (int i = 0; i < 3; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvec2 vec3_length_fp64(vec2 x[3]) {\n return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),\n mul_fp64(x[2], x[2])));\n}\n\nvec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {\n vec2 diff[3];\n vec3_sub_fp64(x, y, diff);\n return vec3_length_fp64(diff);\n}\n\n// vec4 functions\nvoid vec4_fp64(vec4 a, out vec2 out_val[4]) {\n out_val[0].x = a[0];\n out_val[0].y = 0.0;\n\n out_val[1].x = a[1];\n out_val[1].y = 0.0;\n\n out_val[2].x = a[2];\n out_val[2].y = 0.0;\n\n out_val[3].x = a[3];\n out_val[3].y = 0.0;\n}\n\nvoid vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {\n out_val[0] = mul_fp64(a[0], b);\n out_val[1] = mul_fp64(a[1], b);\n out_val[2] = mul_fp64(a[2], b);\n out_val[3] = mul_fp64(a[3], b);\n}\n\nvoid vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {\n for (int i = 0; i < 4; i++) {\n out_val[i] = sum_fp64(a[i], b[i]);\n }\n}\n\nvoid vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {\n vec2 v[4];\n\n v[0] = mul_fp64(a[0], b[0]);\n v[1] = mul_fp64(a[1], b[1]);\n v[2] = mul_fp64(a[2], b[2]);\n v[3] = mul_fp64(a[3], b[3]);\n\n out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));\n}\n\nvoid mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {\n vec2 tmp[4];\n\n for (int i = 0; i < 4; i++)\n {\n for (int j = 0; j < 4; j++)\n {\n tmp[j] = b[j + i * 4];\n }\n vec4_dot_fp64(a, tmp, out_val[i]);\n }\n}\n");
  45984. //# sourceMappingURL=fp64-functions.glsl.js.map
  45985. /***/ }),
  45986. /* 649 */
  45987. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45988. "use strict";
  45989. /* unused harmony export fp64ify */
  45990. function fp64ify(a) {
  45991. var hiPart = Math.fround(a);
  45992. var loPart = a - hiPart;
  45993. return [hiPart, loPart];
  45994. }
  45995. //# sourceMappingURL=fp64-utils.js.map
  45996. /***/ }),
  45997. /* 650 */
  45998. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  45999. "use strict";
  46000. /* unused harmony export fp64arithmetic */
  46001. /* unused harmony export fp64fs */
  46002. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fp64_utils__ = __webpack_require__(649);
  46003. /* unused harmony reexport fp64ify */
  46004. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__fp64_arithmetic_glsl__ = __webpack_require__(647);
  46005. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__fp64_functions_glsl__ = __webpack_require__(648);
  46006. // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
  46007. //
  46008. // Permission is hereby granted, free of charge, to any person obtaining a copy
  46009. // of this software and associated documentation files (the "Software"), to deal
  46010. // in the Software without restriction, including without limitation the rights
  46011. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  46012. // copies of the Software, and to permit persons to whom the Software is
  46013. // furnished to do so, subject to the following conditions:
  46014. //
  46015. // The above copyright notice and this permission notice shall be included in
  46016. // all copies or substantial portions of the Software.
  46017. //
  46018. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  46019. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  46020. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  46021. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  46022. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  46023. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  46024. // THE SOFTWARE.
  46025. var fp64shader = __WEBPACK_IMPORTED_MODULE_1__fp64_arithmetic_glsl__["a" /* default */] + '\n' + __WEBPACK_IMPORTED_MODULE_2__fp64_functions_glsl__["a" /* default */];
  46026. /* harmony default export */ __webpack_exports__["a"] = ({
  46027. name: 'fp64',
  46028. vs: fp64shader,
  46029. fs: null
  46030. });
  46031. // Arithmetic only
  46032. var fp64arithmetic = {
  46033. name: 'fp64-arithmetic',
  46034. vs: '' + __WEBPACK_IMPORTED_MODULE_1__fp64_arithmetic_glsl__["a" /* default */],
  46035. fs: null
  46036. };
  46037. // Fragment shader fp64
  46038. var fp64fs = {
  46039. name: 'fp64-fs',
  46040. vs: null,
  46041. fs: fp64shader
  46042. };
  46043. //# sourceMappingURL=fp64.js.map
  46044. /***/ }),
  46045. /* 651 */
  46046. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46047. "use strict";
  46048. /* harmony default export */ __webpack_exports__["a"] = (" // empty\n");
  46049. //# sourceMappingURL=lighting-common.glsl.js.map
  46050. /***/ }),
  46051. /* 652 */
  46052. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46053. "use strict";
  46054. /* harmony default export */ __webpack_exports__["a"] = ("#ifdef GL_ES\nprecision highp float;\n#endif\n\n#define LIGHT_MAX 4\n\nvarying vec3 lighting_vLightWeighting;\n\nvec4 lighting_apply(vec4 color) {\n // set color from texture\n return vec4(color.rgb * lighting_vLightWeighting, color.a);\n}\n\n// spec-map.fs\n\nuniform mat4 viewMatrix;\n\n\nvarying vec4 lighting_vColor;\nvarying vec4 lighting_vTransformedNormal;\nvarying vec4 lighting_vPosition;\n\nuniform float shininess;\nuniform bool enableSpecularMap;\nuniform bool enableLights;\n\nuniform vec3 ambientColor;\nuniform vec3 directionalColor;\nuniform vec3 lightingDirection;\n\nuniform vec3 lighting_uPointLocation[LIGHT_MAX];\nuniform vec3 lighting_uPointColor[LIGHT_MAX];\nuniform float lighting_uPointSpecularEnable[LIGHT_MAX];\nuniform vec3 lighting_uPointSpecularColor[LIGHT_MAX];\nuniform int numberPoints;\n\n\nvec3 lighting__calculate_light_weighting() {\n\treturn lighting__calculate_light_weighting(shininess);\n}\n\nvec3 lighting__calculate_light_weighting(shininess) {\n vec3 normal = vTransformedNormal.xyz;\n vec3 eyeDirection = normalize(-vPosition.xyz);\n\n vec3 specularLight = vec3(0., 0., 0.);\n vec3 diffuseLight = vec3(0., 0., 0.);\n\n for (int i = 0; i < LIGHT_MAX; i++) {\n if (i < numberPoints) {\n vec3 transformedPointLocation = (viewMatrix * vec4(lighting_uPointLocation[i], 1.0)).xyz;\n vec3 lightDirection = normalize(transformedPointLocation - vPosition.xyz);\n\n if (lighting_uPointSpecularEnable > 0.) {\n vec3 reflectionDirection = reflect(-lightDirection, normal);\n float specularLightWeighting =\n pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininessVal);\n specularLight += specularLightWeighting * lighting_uPointSpecularColor[i];\n }\n\n float diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);\n diffuseLight += diffuseLightWeighting * lighting_uPointColor[i];\n } else {\n break;\n }\n }\n\n return ambientColor + diffuseLight + specularLight;\n}\n\nvoid lighting_filterColor(fragmentColor) {\n if (!lighting_enable) {\n \treturn fragmentColor;\n } else {\n \tvec3 lightWeighting = lighting__calculate_light_weighting();\n \treturn vec4(fragmentColor.rgb * lightWeighting, fragmentColor.a);\n }\n}\n\n// render-tex.fs\n\nuniform vec3 material_uAmbientColor;\nuniform vec3 material_uDiffuseColor;\nuniform vec3 material_uSpecularColor;\nuniform vec3 material_uEmissiveColor;\n\nuniform bool hasTexture1;\nuniform sampler2D sampler1;\n\nuniform mat4 viewMatrix;\n\nvoid apply_lighting(color) {\n vec3 ambientLightWeighting = ambientColor;\n\n vec3 normal = vTransformedNormal.xyz;\n vec3 eyeDirection = normalize(-vPosition.xyz);\n\n vec3 specularLight = vec3(0.0, 0.0, 0.0);\n vec3 diffuseLight = vec3(0.0, 0.0, 0.0);\n\n for (int i = 0; i < LIGHT_MAX; i++) {\n if (i < numberPoints) {\n vec3 transformedPointLocation = (viewMatrix * vec4(pointLocation[i], 1.0)).xyz;\n vec3 lightDirection = normalize(transformedPointLocation - vPosition.xyz);\n\n if (enableSpecularHighlights) {\n vec3 reflectionDirection = reflect(-lightDirection, normal);\n float specularLightWeighting =\n pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n specularLight += specularLightWeighting * pointSpecularColor[i];\n }\n\n float diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);\n diffuseLight += diffuseLightWeighting * pointColor[i];\n } else {\n break;\n }\n }\n\n vec3 matAmbientColor = material_uAmbientColor * color.rgb;\n vec3 matDiffuseColor = material_uDiffuseColor * color.rgb;\n vec3 matSpecularColor = material_uSpecularColor * color.rgb;\n vec3 matEmissiveColor = material_uEmissiveColor * color.rgb;\n gl_FragColor = vec4(\n matAmbientColor * ambientLightWeighting\n + matDiffuseColor * diffuseLightWeighting\n + matSpecularColor * specularLightWeighting\n + matEmissiveColor,\n color.a\n );\n}\n\n/// frag-lighting\n\n vec3 lightWeighting;\n if (!enableLights) {\n lightWeighting = vec3(1.0, 1.0, 1.0);\n } else {\n vec3 lightDirection;\n float specularLightWeighting = 0.0;\n float diffuseLightWeighting = 0.0;\n vec3 specularLight = vec3(0.0, 0.0, 0.0);\n vec3 diffuseLight = vec3(0.0, 0.0, 0.0);\n\n vec3 transformedPointLocation;\n vec3 normal = vTransformedNormal.xyz;\n\n vec3 eyeDirection = normalize(-vPosition.xyz);\n vec3 reflectionDirection;\n\n vec3 pointWeight = vec3(0.0, 0.0, 0.0);\n\n for (int i = 0; i < LIGHT_MAX; i++) {\n if (i < numberPoints) {\n transformedPointLocation = (viewMatrix * vec4(pointLocation[i], 1.0)).xyz;\n lightDirection = normalize(transformedPointLocation - vPosition.xyz);\n\n if (enableSpecular[i] > 0.0) {\n reflectionDirection = reflect(-lightDirection, normal);\n specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess);\n specularLight += specularLightWeighting * pointSpecularColor[i];\n }\n\n diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);\n diffuseLight += diffuseLightWeighting * pointColor[i];\n } else {\n break;\n }\n }\n\n lightWeighting = ambientColor + diffuseLight + specularLight;\n }\n\n// reflection / refraction configs\nuniform float reflection;\nuniform float refraction;\n\n///\n // has cube texture then apply reflection\n // if (hasTextureCube1) {\n // vec3 nReflection = normalize(vReflection);\n // vec3 reflectionValue;\n // if (refraction > 0.0) {\n // reflectionValue = refract(nReflection, vNormal.xyz, refraction);\n // } else {\n // reflectionValue = -reflect(nReflection, vNormal.xyz);\n // }\n\n // // TODO(nico): check whether this is right.\n // vec4 cubeColor = textureCube(samplerCube1,\n // vec3(-reflectionValue.x, -reflectionValue.y, reflectionValue.z));\n // gl_FragColor = vec4(mix(gl_FragColor.xyz, cubeColor.xyz, reflection), 1.0);\n // }\n");
  46055. //# sourceMappingURL=lighting-fragment.glsl.js.map
  46056. /***/ }),
  46057. /* 653 */
  46058. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46059. "use strict";
  46060. /* harmony default export */ __webpack_exports__["a"] = ("#define LIGHT_MAX 4\n\n/*\n// lighting configuration\nuniform bool enableLights;\nuniform vec3 ambientColor;\nuniform vec3 directionalColor;\nuniform vec3 lightingDirection;\n\n// point lights configuration\nuniform vec3 pointLocation[LIGHT_MAX];\nuniform vec3 pointColor[LIGHT_MAX];\nuniform int numberPoints;\n\n// reflection / refraction configuration\nuniform bool useReflection;\n*/\n\nuniform bool lighting_uEnableLights;\nuniform vec3 lighting_uAmbientColor;\nuniform vec3 lighting_uDirection;\nuniform vec3 lighting_uDirectionalColor;\n\n// point lights configuration\nuniform int lighting_uPointCount;\nuniform vec3 lighting_uPointLocation[LIGHT_MAX];\nuniform vec3 lighting_uPointColor[LIGHT_MAX];\n\n// reflection / refraction configuration\nuniform bool lighting_uEnableReflections;\n\n// varyings\nvarying vec4 lighting_vPosition;\nvarying vec4 lighting_vNormal;\nvarying vec3 lighting_vColor;\nvarying vec3 lighting_vLightWeighting;\nvarying vec3 lighting_vReflection;\n\nvoid lighting_setPositionAndNormal(vec3 position, vec3 normal) {\n lighting_vPosition = worldMatrix * vec4(position, 1.);\n lighting_vNormal = worldInverseTransposeMatrix * vec4(normal, 1.);;\n}\n\nvoid lighting__getLightWeigting() {\n float directionalLightWeighting = max(dot(lighting_vNormal.xyz, lighting_uDirection), 0.);\n vec3 pointWeight = vec3(0., 0., 0.);\n for (int i = 0; i < LIGHT_MAX; i++) {\n if (i < numberPoints) {\n vec4 mvLightPosition = viewMatrix * vec4(lighting_uPointLocation[i], 1.);\n vec3 pointLightDirection = normalize(mvLightPosition.xyz - lighting_vPosition.xyz);\n pointWeight += max(dot(lighting_vNormal.xyz, pointLightDirection), 0.) * pointColor[i];\n } else {\n break;\n }\n }\n return ambientColor + (directionalColor * directionalLightWeighting) + pointWeight;\n}\n\nvoid lighting_apply(vec3 position, vec3 normal) {\n lighting_setPositionAndNormal(position, normal);\n\n // lighting code\n if(!lighting_uEnableLights) {\n lighting_vLightWeighting = vec3(1., 1., 1.);\n } else {\n lighting_vLightWeighting = lighting__getLightWeighting();\n }\n}\n\nvoid lighting_set_reflection(vec3 position) {\n // refraction / reflection code\n if (lighting_uEnableReflections) {\n lighting_vReflection = (viewInverseMatrix[3] - (worldMatrix * vec4(position, 1.))).xyz;\n } else {\n lighting_vReflection = vec3(1., 1., 1.);\n }\n}\n");
  46061. //# sourceMappingURL=lighting-vertex.glsl.js.map
  46062. /***/ }),
  46063. /* 654 */
  46064. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46065. "use strict";
  46066. /* unused harmony export vertexShader */
  46067. /* unused harmony export fragmentShader */
  46068. /* unused harmony export name */
  46069. /* unused harmony export config */
  46070. /* unused harmony export getUniforms */
  46071. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_math_gl__ = __webpack_require__(16);
  46072. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__lighting_common_glsl__ = __webpack_require__(651);
  46073. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lighting_vertex_glsl__ = __webpack_require__(653);
  46074. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lighting_fragment_glsl__ = __webpack_require__(652);
  46075. var vertexShader = __WEBPACK_IMPORTED_MODULE_1__lighting_common_glsl__["a" /* default */] + '\n' + __WEBPACK_IMPORTED_MODULE_2__lighting_vertex_glsl__["a" /* default */] + '\n';
  46076. var fragmentShader = __WEBPACK_IMPORTED_MODULE_1__lighting_common_glsl__["a" /* default */] + '\n' + __WEBPACK_IMPORTED_MODULE_3__lighting_fragment_glsl__["a" /* default */] + '\n';
  46077. var name = 'lighting';
  46078. var config = {
  46079. MAX_POINT_LIGHTS: 4
  46080. };
  46081. // Setup the lighting system: ambient, directional, point lights.
  46082. function getUniforms(_ref) {
  46083. var _ref$lightingEnable = _ref.lightingEnable,
  46084. lightingEnable = _ref$lightingEnable === undefined ? false : _ref$lightingEnable,
  46085. _ref$lightingAmbientC = _ref.lightingAmbientColor,
  46086. lightingAmbientColor = _ref$lightingAmbientC === undefined ? [0.2, 0.2, 0.2] : _ref$lightingAmbientC,
  46087. _ref$lightingDirectio = _ref.lightingDirection,
  46088. lightingDirection = _ref$lightingDirectio === undefined ? [1, 1, 1] : _ref$lightingDirectio,
  46089. _ref$lightingDirectio2 = _ref.lightingDirectionalColor,
  46090. lightingDirectionalColor = _ref$lightingDirectio2 === undefined ? [0, 0, 0] : _ref$lightingDirectio2,
  46091. _ref$lightingPointLig = _ref.lightingPointLights,
  46092. lightingPointLights = _ref$lightingPointLig === undefined ? [] : _ref$lightingPointLig;
  46093. // Set light uniforms. Ambient, directional and point lights.
  46094. return Object.assign({
  46095. lightingEnable: lightingEnable,
  46096. // Ambient
  46097. lightingAmbientColor: lightingAmbientColor
  46098. }, getDirectionalUniforms(lightingDirection), getPointUniforms(lightingPointLights));
  46099. }
  46100. function getDirectionalUniforms(_ref2) {
  46101. var color = _ref2.color,
  46102. direction = _ref2.direction;
  46103. // Normalize lighting direction vector
  46104. var dir = new __WEBPACK_IMPORTED_MODULE_0_math_gl__["Vector3"](direction.x, direction.y, direction.z).normalize().scale(-1, -1, -1);
  46105. return {
  46106. directionalColor: [color.r, color.g, color.b],
  46107. lightingDirection: [dir.x, dir.y, dir.z]
  46108. };
  46109. }
  46110. function getPointUniforms(points) {
  46111. points = points instanceof Array ? points : [points];
  46112. var numberPoints = points.length;
  46113. var pointLocations = [];
  46114. var pointColors = [];
  46115. var enableSpecular = [];
  46116. var pointSpecularColors = [];
  46117. var _iteratorNormalCompletion = true;
  46118. var _didIteratorError = false;
  46119. var _iteratorError = undefined;
  46120. try {
  46121. for (var _iterator = points[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  46122. var point = _step.value;
  46123. var position = point.position,
  46124. color = point.color,
  46125. diffuse = point.diffuse,
  46126. specular = point.specular;
  46127. var pointColor = color || diffuse;
  46128. pointLocations.push(position.x, position.y, position.z);
  46129. pointColors.push(pointColor.r, pointColor.g, pointColor.b);
  46130. // Add specular color
  46131. enableSpecular.push(Number(Boolean(specular)));
  46132. if (specular) {
  46133. pointSpecularColors.push(specular.r, specular.g, specular.b);
  46134. } else {
  46135. pointSpecularColors.push(0, 0, 0);
  46136. }
  46137. }
  46138. } catch (err) {
  46139. _didIteratorError = true;
  46140. _iteratorError = err;
  46141. } finally {
  46142. try {
  46143. if (!_iteratorNormalCompletion && _iterator.return) {
  46144. _iterator.return();
  46145. }
  46146. } finally {
  46147. if (_didIteratorError) {
  46148. throw _iteratorError;
  46149. }
  46150. }
  46151. }
  46152. return {
  46153. numberPoints: numberPoints,
  46154. pointLocation: pointLocations,
  46155. pointColor: pointColors,
  46156. enableSpecular: enableSpecular,
  46157. pointSpecularColor: pointSpecularColors
  46158. };
  46159. }
  46160. /* harmony default export */ __webpack_exports__["a"] = ({
  46161. name: name,
  46162. vs: vertexShader,
  46163. fs: fragmentShader,
  46164. getUniforms: getUniforms
  46165. });
  46166. //# sourceMappingURL=lighting.js.map
  46167. /***/ }),
  46168. /* 655 */
  46169. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46170. "use strict";
  46171. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MODULE_INJECTORS_VS; });
  46172. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return MODULE_INJECTORS_FS; });
  46173. var MODULE_INJECTORS_VS = "#ifdef MODULE_LOGDEPTH\n logdepth_adjustPosition(gl_Position);\n#endif\n";
  46174. var MODULE_INJECTORS_FS = "#ifdef MODULE_MATERIAL\n gl_FragColor = material_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LIGHTING\n gl_FragColor = lighting_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_FOG\n gl_FragColor = fog_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_PICKING\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LOGDEPTH\n logdepth_setFragDepth();\n#endif\n";
  46175. //# sourceMappingURL=module-injectors.js.map
  46176. /***/ }),
  46177. /* 656 */
  46178. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46179. "use strict";
  46180. var DEFAULT_HIGHLIGHT_COLOR = new Uint8Array([0, 255, 255, 255]);
  46181. var DEFAULT_MODULE_OPTIONS = {
  46182. pickingSelectedColor: null, // Set to a picking color to visually highlight that item
  46183. pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR, // Color of visual highlight of "selected" item
  46184. pickingThreshold: 1.0,
  46185. pickingActive: false // Set to true when rendering to off-screen "picking" buffer
  46186. };
  46187. /* eslint-disable camelcase */
  46188. function getUniforms() {
  46189. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MODULE_OPTIONS;
  46190. var uniforms = {};
  46191. if (opts.pickingSelectedColor !== undefined) {
  46192. if (opts.pickingSelectedColor === null) {
  46193. uniforms.picking_uSelectedColorValid = 0;
  46194. } else {
  46195. var selectedColor = [opts.pickingSelectedColor[0], opts.pickingSelectedColor[1], opts.pickingSelectedColor[2]];
  46196. uniforms.picking_uSelectedColorValid = 1;
  46197. uniforms.picking_uSelectedColor = selectedColor;
  46198. }
  46199. }
  46200. if (opts.pickingHighlightColor !== undefined) {
  46201. uniforms.picking_uHighlightColor = opts.pickingHighlightColor;
  46202. }
  46203. // TODO - major hack - decide on normalization and remove
  46204. if (opts.pickingThreshold !== undefined) {
  46205. uniforms.picking_uThreshold = opts.pickingThreshold;
  46206. }
  46207. if (opts.pickingActive !== undefined) {
  46208. uniforms.picking_uActive = opts.pickingActive ? 1 : 0;
  46209. }
  46210. return uniforms;
  46211. }
  46212. var vs = 'uniform vec3 picking_uSelectedColor;\nuniform float picking_uThreshold;\nuniform bool picking_uSelectedColorValid;\n\nvarying vec4 picking_vRGBcolor_Aselected;\n\nconst float COLOR_SCALE = 1. / 255.;\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n picking_uSelectedColorValid &&\n abs(vertexColor.r - picking_uSelectedColor.r) < picking_uThreshold &&\n abs(vertexColor.g - picking_uSelectedColor.g) < picking_uThreshold &&\n abs(vertexColor.b - picking_uSelectedColor.b) < picking_uThreshold;\n}\n\nvoid picking_setPickingColor(vec3 pickingColor) {\n // Do the comparison with selected item color in vertex shader as it should mean fewer compares\n picking_vRGBcolor_Aselected.a =\n float(isVertexPicked(pickingColor));\n\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Aselected.rgb = pickingColor * COLOR_SCALE;\n}\n';
  46213. var fs = 'uniform bool picking_uActive; // true during rendering to offscreen picking buffer\nuniform vec3 picking_uSelectedColor;\nuniform vec4 picking_uHighlightColor;\n\nvarying vec4 picking_vRGBcolor_Aselected;\n\nconst float COLOR_SCALE = 1. / 255.;\n\n/*\n * Returns highlight color if this item is selected.\n */\nvec4 picking_filterHighlightColor(vec4 color) {\n bool selected = bool(picking_vRGBcolor_Aselected.a);\n return selected ? (picking_uHighlightColor * COLOR_SCALE) : color;\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nvec4 picking_filterPickingColor(vec4 color) {\n vec3 pickingColor = picking_vRGBcolor_Aselected.rgb;\n return picking_uActive ? vec4(pickingColor, 1.0) : color;\n}\n';
  46214. /* harmony default export */ __webpack_exports__["a"] = ({
  46215. name: 'picking',
  46216. vs: vs,
  46217. fs: fs,
  46218. getUniforms: getUniforms
  46219. });
  46220. //# sourceMappingURL=picking.js.map
  46221. /***/ }),
  46222. /* 657 */
  46223. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46224. "use strict";
  46225. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MODULAR_SHADERS; });
  46226. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__modular_vertex_glsl__ = __webpack_require__(659);
  46227. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__modular_fragment_glsl__ = __webpack_require__(658);
  46228. // Default Shaders
  46229. // A set of base shaders that leverage the shader module system,
  46230. // dynamically enabling features depending on which modules are included
  46231. var MODULAR_SHADERS = {
  46232. vs: __WEBPACK_IMPORTED_MODULE_0__modular_vertex_glsl__["a" /* default */],
  46233. fs: __WEBPACK_IMPORTED_MODULE_1__modular_fragment_glsl__["a" /* default */],
  46234. defaultUniforms: {}
  46235. };
  46236. //# sourceMappingURL=index.js.map
  46237. /***/ }),
  46238. /* 658 */
  46239. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46240. "use strict";
  46241. /* harmony default export */ __webpack_exports__["a"] = ("#define SHADER_NAME luma-modular-fragment\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n// varyings\nvarying vec4 vColor;\n\nvoid main(){\n gl_FragColor = vec4(1., 0., 1., 1.);\n\n#ifdef MODULE_DIFFUSE\n gl_FragColor = diffuse_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_MATERIAL\n gl_FragColor = material_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LIGHTING\n gl_FragColor = lighting_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_FOG\n gl_FragColor = fog_filterColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_PICKING\n gl_FragColor = picking_filterHighlightColor(gl_FragColor);\n gl_FragColor = picking_filterPickingColor(gl_FragColor);\n#endif\n\n#ifdef MODULE_LOGDEPTH\n logdepth_setFragDepth(gl_Position);\n#endif\n}\n");
  46242. //# sourceMappingURL=modular-fragment.glsl.js.map
  46243. /***/ }),
  46244. /* 659 */
  46245. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46246. "use strict";
  46247. /* harmony default export */ __webpack_exports__["a"] = ("#define SHADER_NAME luma_modular_vertex\n\n// object attributes\nattribute vec3 positions;\nattribute vec3 normals;\nattribute vec4 colors;\nattribute vec2 texCoords;\nattribute vec3 pickingColors;\n\nvoid main(void) {\n\n // Set up position\n#ifdef MODULE_GEOMETRY\n geometry_setPosition(positions);\n geometry_setNormal(normals);\n#endif\n\n#ifdef MODULE_PROJECT\n project_setPositionAndNormal_Model(positions, normals);\n gl_Position = project_model_to_clipspace(positions);\n#endif\n\n // Set up depth\n#ifdef MODULE_LOGDEPTH\n logdepth_adjustPosition(gl_Position);\n#endif\n\n#ifdef MODULE_DIFFUSE\n diffuse_setTextureCoordinate(texCoords);\n#endif\n\n // Set up color calculations\n#ifdef MODULE_MATERIAL\n material_setDiffuseColor(colors);\n material_setDiffuseTextureCoordinates(texCoords);\n#endif\n\n#ifdef MODULE_LIGHTING\n lighting_setPositionAndNormal(positions, normals);\n lighting_apply_light(positions);\n lighting_apply_reflection(positions);\n#endif\n\n#ifdef MODULE_PICKING\n picking_setPickingColor(pickingColors);\n#endif\n\n}\n");
  46248. //# sourceMappingURL=modular-vertex.glsl.js.map
  46249. /***/ }),
  46250. /* 660 */
  46251. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46252. "use strict";
  46253. /* unused harmony export promisify */
  46254. /**
  46255. * Converts a function that accepts a node style (err, result) callback
  46256. * as the last argument into a function that takes the same arguments
  46257. * and returns a promise that resolves or rejects with the values provided
  46258. * by the original callback
  46259. * @param {Function} func - function to wrap
  46260. * @return {Function} promisified function
  46261. */
  46262. /* eslint-disable no-try-catch */
  46263. function promisify(func) {
  46264. return function promisifiedFunction() {
  46265. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  46266. args[_key] = arguments[_key];
  46267. }
  46268. return new Promise(function (resolve, reject) {
  46269. function callback(error, data) {
  46270. try {
  46271. if (error) {
  46272. reject(error);
  46273. } else {
  46274. resolve(data);
  46275. }
  46276. } catch (e) {
  46277. reject(e);
  46278. }
  46279. }
  46280. func.apply(undefined, args.concat([callback]));
  46281. });
  46282. };
  46283. }
  46284. /* eslint-enable no-try-catch */
  46285. //# sourceMappingURL=promise-utils.js.map
  46286. /***/ }),
  46287. /* 661 */
  46288. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46289. "use strict";
  46290. /* harmony export (immutable) */ __webpack_exports__["a"] = uid;
  46291. /* harmony export (immutable) */ __webpack_exports__["b"] = isPowerOfTwo;
  46292. /* harmony export (immutable) */ __webpack_exports__["c"] = isObjectEmpty;
  46293. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert__ = __webpack_require__(1);
  46294. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_assert__);
  46295. var uidCounters = {};
  46296. /**
  46297. * Returns a UID.
  46298. * @param {String} id= - Identifier base name
  46299. * @return {number} uid
  46300. **/
  46301. function uid() {
  46302. var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'id';
  46303. uidCounters[id] = uidCounters[id] || 1;
  46304. var count = uidCounters[id]++;
  46305. return id + '-' + count;
  46306. }
  46307. /**
  46308. * Verifies if a given number is power of two or not.
  46309. * @param {object} n - The number to check.
  46310. * @return {Array} Returns true if the given number is power of 2, false otherwise.
  46311. **/
  46312. function isPowerOfTwo(n) {
  46313. __WEBPACK_IMPORTED_MODULE_0_assert___default()(typeof n === 'number', 'Input must be a number');
  46314. return n && (n & n - 1) === 0;
  46315. }
  46316. // Returns true if given object is empty, false otherwise.
  46317. function isObjectEmpty(obj) {
  46318. var isEmpty = true;
  46319. /* eslint-disable no-unused-vars */
  46320. for (var key in obj) {
  46321. isEmpty = false;
  46322. break;
  46323. }
  46324. /* eslint-enable no-unused-vars */
  46325. return isEmpty;
  46326. }
  46327. //# sourceMappingURL=utils.js.map
  46328. /***/ }),
  46329. /* 662 */
  46330. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46331. "use strict";
  46332. /* harmony export (immutable) */ __webpack_exports__["a"] = getKeyValue;
  46333. /* harmony export (immutable) */ __webpack_exports__["b"] = getKey;
  46334. /* harmony export (immutable) */ __webpack_exports__["c"] = getKeyType;
  46335. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert__ = __webpack_require__(1);
  46336. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_assert__);
  46337. // Resolve a WebGL enumeration name (returns itself if already a number)
  46338. function getKeyValue(gl, name) {
  46339. // If not a string, return (assume number)
  46340. if (typeof name !== 'string') {
  46341. return name;
  46342. }
  46343. // If string converts to number, return number
  46344. var number = Number(name);
  46345. if (!isNaN(number)) {
  46346. return number;
  46347. }
  46348. // Look up string, after removing any 'GL.' or 'gl.' prefix
  46349. name = name.replace(/^.*\./, '');
  46350. var value = gl[name];
  46351. __WEBPACK_IMPORTED_MODULE_0_assert___default()(value !== undefined, 'Accessing undefined constant GL.' + name);
  46352. return value;
  46353. }
  46354. function getKey(gl, value) {
  46355. value = Number(value);
  46356. for (var key in gl) {
  46357. if (gl[key] === value) {
  46358. return 'gl.' + key;
  46359. }
  46360. }
  46361. return String(value);
  46362. }
  46363. function getKeyType(gl, value) {
  46364. __WEBPACK_IMPORTED_MODULE_0_assert___default()(value !== undefined, 'undefined key');
  46365. value = Number(value);
  46366. for (var key in gl) {
  46367. if (gl[key] === value) {
  46368. return 'gl.' + key;
  46369. }
  46370. }
  46371. return String(value);
  46372. }
  46373. //# sourceMappingURL=constants-to-keys.js.map
  46374. /***/ }),
  46375. /* 663 */
  46376. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46377. "use strict";
  46378. /* harmony export (immutable) */ __webpack_exports__["c"] = getPageLoadPromise;
  46379. /* harmony export (immutable) */ __webpack_exports__["a"] = createCanvas;
  46380. /* harmony export (immutable) */ __webpack_exports__["b"] = getCanvas;
  46381. /* unused harmony export getCSSSize */
  46382. /* unused harmony export getDrawingBufferSize */
  46383. /* unused harmony export calculateDrawingBufferSize */
  46384. /* unused harmony export resizeCanvas */
  46385. /* harmony export (immutable) */ __webpack_exports__["d"] = resizeDrawingBuffer;
  46386. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(8);
  46387. // Resizing a webgl canvas
  46388. /* global window, document */
  46389. var isPageLoaded = __WEBPACK_IMPORTED_MODULE_0__utils__["a" /* isBrowser */] && document.readyState === 'complete';
  46390. var pageLoadPromise = __WEBPACK_IMPORTED_MODULE_0__utils__["a" /* isBrowser */] ? new Promise(function (resolve, reject) {
  46391. if (isPageLoaded) {
  46392. resolve(document);
  46393. return;
  46394. }
  46395. window.onload = function () {
  46396. isPageLoaded = true;
  46397. resolve(document);
  46398. };
  46399. }) : Promise.resolve({});
  46400. /**
  46401. * Returns a promise that resolves when the page is loaded
  46402. * at this point the DOM can be manipulated, and e.g. a new canvas can be inserted
  46403. * @return {Promise} - resolves when the page is loaded
  46404. */
  46405. function getPageLoadPromise() {
  46406. return pageLoadPromise;
  46407. }
  46408. /**
  46409. * Create a canvas
  46410. * @param {Number} width - set to 100%
  46411. * @param {Number} height - set to 100%
  46412. */
  46413. function createCanvas(_ref) {
  46414. var _ref$width = _ref.width,
  46415. width = _ref$width === undefined ? 800 : _ref$width,
  46416. _ref$height = _ref.height,
  46417. height = _ref$height === undefined ? 600 : _ref$height,
  46418. _ref$id = _ref.id,
  46419. id = _ref$id === undefined ? 'gl-canvas' : _ref$id,
  46420. _ref$insert = _ref.insert,
  46421. insert = _ref$insert === undefined ? true : _ref$insert;
  46422. var canvas = document.createElement('canvas');
  46423. canvas.id = id;
  46424. canvas.style.width = Number.isFinite(width) ? width + 'px' : '100%';
  46425. canvas.style.height = Number.isFinite(height) ? height + 'px' : '100%';
  46426. // add the canvas to the body element once the page has loaded
  46427. if (insert) {
  46428. getPageLoadPromise().then(function (document) {
  46429. var body = document.body;
  46430. body.insertBefore(canvas, body.firstChild);
  46431. });
  46432. }
  46433. return canvas;
  46434. }
  46435. /**
  46436. * Gets an already created canvas from the DOM
  46437. * @param {Number} id - DOM element id
  46438. */
  46439. function getCanvas(_ref2) {
  46440. var id = _ref2.id;
  46441. if (!isPageLoaded) {
  46442. throw new Error('createGLContext called on canvas \'' + id + '\' before page was loaded');
  46443. }
  46444. return document.getElementById(id);
  46445. }
  46446. // Gets current size of canvas in css (logical/window) coordinates
  46447. function getCSSSize(canvas) {
  46448. return {
  46449. width: canvas.clientWidth,
  46450. height: canvas.clientHeight
  46451. };
  46452. }
  46453. // Gets current size of canvas drawing buffer in actual pixels
  46454. // This is needed for the gl.viewport call
  46455. function getDrawingBufferSize(canvas) {
  46456. return {
  46457. width: canvas.width,
  46458. height: canvas.height
  46459. };
  46460. }
  46461. // Calculate the drawing buffer size that would cover current canvas size and device pixel ratio
  46462. // Intention is that every pixel in the drawing buffer will have a 1-to-1 mapping with
  46463. // actual device pixels in the hardware framebuffer, allowing us to render at the full
  46464. // resolution of the device.
  46465. function calculateDrawingBufferSize(canvas, options) {
  46466. var _options$useDevicePix = options.useDevicePixels,
  46467. useDevicePixels = _options$useDevicePix === undefined ? true : _options$useDevicePix;
  46468. if ('useDevicePixelRatio' in options) {
  46469. __WEBPACK_IMPORTED_MODULE_0__utils__["b" /* log */].deprecated('useDevicePixelRatio', 'useDevicePixels');
  46470. useDevicePixels = options.useDevicePixels || options.useDevicePixelRatio;
  46471. }
  46472. var cssToDevicePixels = useDevicePixels ? window.devicePixelRatio || 1 : 1;
  46473. // Lookup the size the browser is displaying the canvas in CSS pixels
  46474. // and compute a size needed to make our drawingbuffer match it in
  46475. // device pixels.
  46476. var cssSize = getCSSSize(canvas);
  46477. return {
  46478. width: Math.floor(cssSize.width * cssToDevicePixels),
  46479. height: Math.floor(cssSize.height * cssToDevicePixels),
  46480. devicePixelRatio: cssToDevicePixels
  46481. };
  46482. }
  46483. /**
  46484. * Resizes canvas in "CSS coordinates" (note these can be very different from device coords,
  46485. * depending on devicePixelRatio/retina screens and size of drawing buffer)
  46486. * and can be changed separately from drawing buffer size.
  46487. * Therefore, normally `resizeDrawingBuffer` should be called after calling `resizeCanvas`.
  46488. *
  46489. * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
  46490. *
  46491. * @param {Number} width, height - new width and height of canvas in CSS coordinates
  46492. */
  46493. function resizeCanvas(canvas, _ref3) {
  46494. var width = _ref3.width,
  46495. height = _ref3.height;
  46496. canvas.style.width = width + 'px';
  46497. canvas.style.height = height + 'px';
  46498. }
  46499. /**
  46500. * Resize the canvas' drawing buffer to match the canvas CSS size,
  46501. * and by default to also consider devicePixelRatio
  46502. * detects if anything has changed, can be called every frame
  46503. * for best visual results, usually set to either:
  46504. * canvas CSS width x canvas CSS height
  46505. * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio
  46506. *
  46507. * NOTE: Regardless of size, the drawing buffer will always be scaled to the viewport
  46508. * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
  46509. *
  46510. * @param {Number} width - new width of canvas in CSS coordinates
  46511. * @param {Number} height - new height of canvas in CSS coordinates
  46512. */
  46513. function resizeDrawingBuffer(canvas, _ref4) {
  46514. var _ref4$useDevicePixelR = _ref4.useDevicePixelRatio,
  46515. useDevicePixelRatio = _ref4$useDevicePixelR === undefined ? null : _ref4$useDevicePixelR,
  46516. _ref4$useDevicePixels = _ref4.useDevicePixels,
  46517. useDevicePixels = _ref4$useDevicePixels === undefined ? true : _ref4$useDevicePixels;
  46518. // Resize the render buffer of the canvas to match canvas client size
  46519. if (useDevicePixelRatio !== null) {
  46520. __WEBPACK_IMPORTED_MODULE_0__utils__["b" /* log */].deprecated('useDevicePixelRatio', 'useDevicePixels');
  46521. useDevicePixels = useDevicePixelRatio;
  46522. }
  46523. // multiplying with dpr (Optionally can be turned off)
  46524. var newBufferSize = calculateDrawingBufferSize(canvas, { useDevicePixels: useDevicePixels });
  46525. // Only update if the canvas size has not changed
  46526. if (newBufferSize.width !== canvas.width || newBufferSize.height !== canvas.height) {
  46527. // Make the canvas render buffer the same size as
  46528. canvas.width = newBufferSize.width;
  46529. canvas.height = newBufferSize.height;
  46530. // Always reset CSS size after setting drawing buffer size
  46531. // canvas.style.width = `${cssSize.width}px`;
  46532. // canvas.style.height = `${cssSize.height}px`;
  46533. }
  46534. }
  46535. //# sourceMappingURL=create-canvas.js.map
  46536. /***/ }),
  46537. /* 664 */
  46538. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46539. "use strict";
  46540. /* harmony export (immutable) */ __webpack_exports__["b"] = createContext;
  46541. /* harmony export (immutable) */ __webpack_exports__["a"] = trackContextCreation;
  46542. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert__ = __webpack_require__(1);
  46543. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_assert__);
  46544. // Create a WebGL context
  46545. /* global HTMLCanvasElement, WebGLRenderingContext */
  46546. /**
  46547. * Create a WebGL context for a canvas
  46548. * Note calling this multiple time on the same canvas does return the same context
  46549. */
  46550. function createContext(_ref) {
  46551. var canvas = _ref.canvas,
  46552. _ref$opts = _ref.opts,
  46553. opts = _ref$opts === undefined ? {} : _ref$opts,
  46554. _ref$onError = _ref.onError,
  46555. onError = _ref$onError === undefined ? function (message) {
  46556. return null;
  46557. } : _ref$onError;
  46558. // See if we can extract any extra information about why context creation failed
  46559. function onContextCreationError(error) {
  46560. onError('WebGL context: ' + (error.statusMessage || 'Unknown error'));
  46561. }
  46562. canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false);
  46563. var _opts$webgl = opts.webgl1,
  46564. webgl1 = _opts$webgl === undefined ? true : _opts$webgl,
  46565. _opts$webgl2 = opts.webgl2,
  46566. webgl2 = _opts$webgl2 === undefined ? true : _opts$webgl2;
  46567. var gl = null;
  46568. // Prefer webgl2 over webgl1, prefer conformant over experimental
  46569. if (webgl2) {
  46570. gl = gl || canvas.getContext('webgl2', opts);
  46571. gl = gl || canvas.getContext('experimental-webgl2', opts);
  46572. }
  46573. if (webgl1) {
  46574. gl = gl || canvas.getContext('webgl', opts);
  46575. gl = gl || canvas.getContext('experimental-webgl', opts);
  46576. }
  46577. canvas.removeEventListener('webglcontextcreationerror', onContextCreationError, false);
  46578. if (!gl) {
  46579. return onError('Failed to create ' + (webgl2 && !webgl1 ? 'WebGL2' : 'WebGL') + ' context');
  46580. }
  46581. return gl;
  46582. }
  46583. /**
  46584. * Installs a spy on Canvas.getContext
  46585. * calls the provided callback with the {context}
  46586. */
  46587. function trackContextCreation(_ref2) {
  46588. var _ref2$onContextCreate = _ref2.onContextCreate,
  46589. onContextCreate = _ref2$onContextCreate === undefined ? function () {
  46590. return null;
  46591. } : _ref2$onContextCreate,
  46592. _ref2$onContextCreate2 = _ref2.onContextCreated,
  46593. onContextCreated = _ref2$onContextCreate2 === undefined ? function () {} : _ref2$onContextCreate2;
  46594. __WEBPACK_IMPORTED_MODULE_0_assert___default()(onContextCreate || onContextCreated);
  46595. if (typeof HTMLCanvasElement !== 'undefined') {
  46596. var getContext = HTMLCanvasElement.prototype.getContext;
  46597. HTMLCanvasElement.prototype.getContext = function getContextSpy(type, opts) {
  46598. // Let intercepter create context
  46599. var context = void 0;
  46600. if (type === 'webgl') {
  46601. context = onContextCreate({ canvas: this, type: type, opts: opts, getContext: getContext.bind(this) });
  46602. }
  46603. // If not, create context
  46604. context = context || getContext.call(this, type, opts);
  46605. // Report it created
  46606. if (context instanceof WebGLRenderingContext) {
  46607. onContextCreated({ canvas: this, context: context, type: type, opts: opts });
  46608. }
  46609. return context;
  46610. };
  46611. }
  46612. }
  46613. //# sourceMappingURL=create-context.js.map
  46614. /***/ }),
  46615. /* 665 */
  46616. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46617. "use strict";
  46618. /* harmony export (immutable) */ __webpack_exports__["a"] = parseGLSLCompilerError;
  46619. /* unused harmony export default */
  46620. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__get_shader_name__ = __webpack_require__(264);
  46621. // TODO - formatGLSLCompilerError should not depend on this
  46622. /**
  46623. * Parse a GLSL compiler error log into a string showing the source code around each error.
  46624. * Based on https://github.com/wwwtyro/gl-format-compiler-error (public domain)
  46625. */
  46626. /* eslint-disable no-continue, max-statements */
  46627. function parseGLSLCompilerError(errLog, src, shaderType) {
  46628. var errorStrings = errLog.split(/\r?\n/);
  46629. var errors = {};
  46630. var warnings = {};
  46631. var name = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__get_shader_name__["a" /* default */])(src) || '(unnamed)';
  46632. var shaderName = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__get_shader_name__["b" /* getShaderTypeName */])(shaderType) + ' shader ' + name;
  46633. // Parse the error - note: browser and driver dependent
  46634. for (var i = 0; i < errorStrings.length; i++) {
  46635. var errorString = errorStrings[i];
  46636. if (errorString.length <= 1) {
  46637. continue;
  46638. }
  46639. var segments = errorString.split(':');
  46640. var type = segments[0];
  46641. var line = parseInt(segments[2], 10);
  46642. if (isNaN(line)) {
  46643. throw new Error('GLSL compilation error in ' + shaderName + ': ' + errLog);
  46644. }
  46645. if (type !== 'WARNING') {
  46646. errors[line] = errorString;
  46647. } else {
  46648. warnings[line] = errorString;
  46649. }
  46650. }
  46651. // Format the error inline with the code
  46652. var lines = addLineNumbers(src);
  46653. return {
  46654. shaderName: shaderName,
  46655. errors: formatErrors(errors, lines),
  46656. warnings: formatErrors(warnings, lines)
  46657. };
  46658. }
  46659. // Formats GLSL compiler error log into single string
  46660. function formatGLSLCompilerError(errLog, src, shaderType) {
  46661. var _parseGLSLCompilerErr = parseGLSLCompilerError(errLog, src, shaderType),
  46662. shaderName = _parseGLSLCompilerErr.shaderName,
  46663. errors = _parseGLSLCompilerErr.errors,
  46664. warnings = _parseGLSLCompilerErr.warnings;
  46665. return 'GLSL compilation error in ' + shaderName + '\n\n' + errors + '\n' + warnings;
  46666. }
  46667. // helper function, outputs annotated errors or warnings
  46668. function formatErrors(errors, lines) {
  46669. var message = '';
  46670. for (var i = 0; i < lines.length; i++) {
  46671. var line = lines[i];
  46672. if (!errors[i + 3] && !errors[i + 2] && !errors[i + 1]) {
  46673. continue;
  46674. }
  46675. message += line + '\n';
  46676. if (errors[i + 1]) {
  46677. var error = errors[i + 1];
  46678. var segments = error.split(':', 3);
  46679. var type = segments[0];
  46680. var column = parseInt(segments[1], 10) || 0;
  46681. var err = error.substring(segments.join(':').length + 1).trim();
  46682. message += padLeft('^^^ ' + type + ': ' + err + '\n\n', column);
  46683. }
  46684. }
  46685. return message;
  46686. }
  46687. /**
  46688. * Prepends line numbers to each line of a string.
  46689. * The line numbers will be left-padded with spaces to ensure an
  46690. * aligned layout when rendered using monospace fonts.
  46691. * @param {String} string - multi-line string to add line numbers to
  46692. * @param {Number} start=1 - number of spaces to add
  46693. * @param {String} delim =': ' - injected between line number and original line
  46694. * @return {String[]} strings - array of string, one per line, with line numbers added
  46695. */
  46696. function addLineNumbers(string) {
  46697. var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
  46698. var delim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ': ';
  46699. var lines = string.split(/\r?\n/);
  46700. var maxDigits = String(lines.length + start - 1).length;
  46701. return lines.map(function (line, i) {
  46702. var lineNumber = i + start;
  46703. var digits = String(lineNumber).length;
  46704. var prefix = padLeft(lineNumber, maxDigits - digits);
  46705. return prefix + delim + line;
  46706. });
  46707. }
  46708. /**
  46709. * Pads a string with a number of spaces (space characters) to the left
  46710. * @param {String} string - string to pad
  46711. * @param {Number} digits - number of spaces to add
  46712. * @return {String} string - The padded string
  46713. */
  46714. function padLeft(string, digits) {
  46715. var result = '';
  46716. for (var i = 0; i < digits; ++i) {
  46717. result += ' ';
  46718. }
  46719. return '' + result + string;
  46720. }
  46721. //# sourceMappingURL=format-glsl-error.js.map
  46722. /***/ }),
  46723. /* 666 */
  46724. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46725. "use strict";
  46726. /* harmony export (immutable) */ __webpack_exports__["a"] = getParameterPolyfill;
  46727. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants__ = __webpack_require__(46);
  46728. var _WEBGL_PARAMETERS;
  46729. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  46730. /* eslint-disable no-inline-comments, max-len, camelcase */
  46731. var OES_element_index = 'OES_element_index';
  46732. var WEBGL_draw_buffers = 'WEBGL_draw_buffers';
  46733. var EXT_disjoint_timer_query = 'EXT_disjoint_timer_query';
  46734. var EXT_disjoint_timer_query_webgl2 = 'EXT_disjoint_timer_query_webgl2';
  46735. var EXT_texture_filter_anisotropic = 'EXT_texture_filter_anisotropic';
  46736. var WEBGL_debug_renderer_info = 'WEBGL_debug_renderer_info';
  46737. var GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B;
  46738. var GL_DONT_CARE = 0x1100;
  46739. var GL_GPU_DISJOINT_EXT = 0x8FBB;
  46740. var GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
  46741. var GL_UNMASKED_VENDOR_WEBGL = 0x9245; // vendor string of the graphics driver.
  46742. var GL_UNMASKED_RENDERER_WEBGL = 0x9246; // renderer string of the graphics driver.
  46743. var getWebGL2ValueOrZero = function getWebGL2ValueOrZero(gl) {
  46744. return !isWebGL2(gl) ? 0 : undefined;
  46745. };
  46746. // if a function returns undefined in this table,
  46747. // the original getParameter will be called, defeating the override
  46748. var WEBGL_PARAMETERS = (_WEBGL_PARAMETERS = {}, _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].READ_BUFFER, function (gl) {
  46749. return !isWebGL2(gl) ? __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].COLOR_ATTACHMENT0 : undefined;
  46750. }), _defineProperty(_WEBGL_PARAMETERS, GL_FRAGMENT_SHADER_DERIVATIVE_HINT, function (gl) {
  46751. return !isWebGL2(gl) ? GL_DONT_CARE : undefined;
  46752. }), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].RASTERIZER_DISCARD, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].SAMPLES, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, GL_GPU_DISJOINT_EXT, function (gl, getParameter) {
  46753. var ext = isWebGL2(gl) ? gl.getExtension(EXT_disjoint_timer_query_webgl2) : gl.getExtension(EXT_disjoint_timer_query);
  46754. return ext && ext.GPU_DISJOINT_EXT ? getParameter(ext.GPU_DISJOINT_EXT) : 0;
  46755. }), _defineProperty(_WEBGL_PARAMETERS, GL_UNMASKED_VENDOR_WEBGL, function (gl, getParameter) {
  46756. var ext = gl.getExtension(WEBGL_debug_renderer_info);
  46757. return getParameter(ext && ext.UNMASKED_VENDOR_WEBGL || __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].VENDOR);
  46758. }), _defineProperty(_WEBGL_PARAMETERS, GL_UNMASKED_RENDERER_WEBGL, function (gl, getParameter) {
  46759. var ext = gl.getExtension(WEBGL_debug_renderer_info);
  46760. return getParameter(ext && ext.UNMASKED_RENDERER_WEBGL || __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].RENDERER);
  46761. }), _defineProperty(_WEBGL_PARAMETERS, GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, function (gl, getParameter) {
  46762. var ext = gl.luma.extensions[EXT_texture_filter_anisotropic];
  46763. return ext ? getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1.0;
  46764. }), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_3D_TEXTURE_SIZE, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_ARRAY_TEXTURE_LAYERS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_CLIENT_WAIT_TIMEOUT_WEBGL, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_COLOR_ATTACHMENTS, function (gl, getParameter) {
  46765. if (!isWebGL2(gl)) {
  46766. var ext = gl.getExtension(WEBGL_draw_buffers);
  46767. return ext ? getParameter(ext.MAX_COLOR_ATTACHMENTS_WEBGL) : 0;
  46768. }
  46769. return undefined;
  46770. }), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_COMBINED_UNIFORM_BLOCKS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_DRAW_BUFFERS, function (gl) {
  46771. if (!isWebGL2(gl)) {
  46772. var ext = gl.getExtension(WEBGL_draw_buffers);
  46773. return ext ? ext.MAX_DRAW_BUFFERS_WEBGL : 0;
  46774. }
  46775. return undefined;
  46776. }), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_ELEMENT_INDEX,
  46777. // Guess: per webglstats.com 99.6% of webgl2 supports 2147483647
  46778. function (gl) {
  46779. return gl.getExtension(OES_element_index) ? 2147483647 : 65535;
  46780. }), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_ELEMENTS_INDICES,
  46781. // Guess: "Reasonably safe" per webglstats.com - could be higher/lower (on some mobile devices)
  46782. function (gl) {
  46783. return gl.getExtension(OES_element_index) ? 16777216 : 65535;
  46784. }), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_ELEMENTS_VERTICES,
  46785. // Guess: "Reasonably safe" per webglstats.com - could be higher/lower (on some mobile devices)
  46786. function (gl) {
  46787. return 16777216;
  46788. }), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_FRAGMENT_INPUT_COMPONENTS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_FRAGMENT_UNIFORM_BLOCKS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_FRAGMENT_UNIFORM_COMPONENTS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_SAMPLES, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_SERVER_WAIT_TIMEOUT, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_TEXTURE_LOD_BIAS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_UNIFORM_BLOCK_SIZE, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_UNIFORM_BUFFER_BINDINGS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_VARYING_COMPONENTS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_VERTEX_OUTPUT_COMPONENTS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_VERTEX_UNIFORM_BLOCKS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_VERTEX_UNIFORM_COMPONENTS, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MIN_PROGRAM_TEXEL_OFFSET, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].MAX_PROGRAM_TEXEL_OFFSET, getWebGL2ValueOrZero), _defineProperty(_WEBGL_PARAMETERS, __WEBPACK_IMPORTED_MODULE_0__constants__["a" /* default */].UNIFORM_BUFFER_OFFSET_ALIGNMENT, getWebGL2ValueOrZero), _WEBGL_PARAMETERS);
  46789. // Return true if WebGL2 context
  46790. function isWebGL2(gl) {
  46791. var GL_TEXTURE_BINDING_3D = 0x806A;
  46792. return gl && gl.TEXTURE_BINDING_3D === GL_TEXTURE_BINDING_3D;
  46793. }
  46794. // A "replacement" gl.getParameter that accepts "enums" from extensions and WebGL2
  46795. // and returns reasonably safe defaults
  46796. function getParameterPolyfill(gl, originalGetParameter, pname) {
  46797. // Return mock limits (usually 0) for WebGL2 constants to ensure these
  46798. // can be queries without error
  46799. var limit = WEBGL_PARAMETERS[pname];
  46800. var value = typeof limit === 'function' ? limit(gl, originalGetParameter, pname) : limit;
  46801. var result = value !== undefined ? value : originalGetParameter(pname);
  46802. return result;
  46803. }
  46804. //# sourceMappingURL=polyfill-get-parameter.js.map
  46805. /***/ }),
  46806. /* 667 */
  46807. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46808. "use strict";
  46809. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__context__ = __webpack_require__(7);
  46810. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__webgl_texture__ = __webpack_require__(62);
  46811. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  46812. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  46813. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  46814. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  46815. // import GL from './api';
  46816. // import {isWebGl2Context, assertWebGL2Context, withParameters} from './context';
  46817. // import Buffer from './buffer';
  46818. var Texture2DArray = /*#__PURE__*/function (_Texture) {
  46819. _inherits(Texture2DArray, _Texture);
  46820. _createClass(Texture2DArray, null, [{
  46821. key: 'isSupported',
  46822. value: function isSupported(gl) {
  46823. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__context__["b" /* isWebGL2 */])(gl);
  46824. }
  46825. }]);
  46826. function Texture2DArray(gl) {
  46827. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  46828. _classCallCheck(this, Texture2DArray);
  46829. var _this = _possibleConstructorReturn(this, (Texture2DArray.__proto__ || Object.getPrototypeOf(Texture2DArray)).call(this, gl, opts));
  46830. throw new Error('Texture2DArray not yet implemented');
  46831. return _this;
  46832. }
  46833. return Texture2DArray;
  46834. }(__WEBPACK_IMPORTED_MODULE_1__webgl_texture__["a" /* default */]);
  46835. /* harmony default export */ __webpack_exports__["a"] = (Texture2DArray);
  46836. //# sourceMappingURL=texture-2d-array.js.map
  46837. /***/ }),
  46838. /* 668 */
  46839. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46840. "use strict";
  46841. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__api__ = __webpack_require__(38);
  46842. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__context__ = __webpack_require__(7);
  46843. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__context_state__ = __webpack_require__(68);
  46844. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__webgl_texture__ = __webpack_require__(62);
  46845. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__buffer__ = __webpack_require__(67);
  46846. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  46847. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  46848. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  46849. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  46850. var Texture3D = /*#__PURE__*/function (_Texture) {
  46851. _inherits(Texture3D, _Texture);
  46852. _createClass(Texture3D, null, [{
  46853. key: 'isSupported',
  46854. value: function isSupported(gl) {
  46855. return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["b" /* isWebGL2 */])(gl);
  46856. }
  46857. /**
  46858. * @classdesc
  46859. * 3D WebGL Texture
  46860. * Note: Constructor will initialize your texture.
  46861. *
  46862. * @class
  46863. * @param {WebGLRenderingContext} gl - gl context
  46864. * @param {Image|ArrayBuffer|null} opts= - named options
  46865. * @param {Image|ArrayBuffer|null} opts.data= - buffer
  46866. * @param {GLint} width - width of texture
  46867. * @param {GLint} height - height of texture
  46868. */
  46869. }]);
  46870. function Texture3D(gl) {
  46871. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  46872. _classCallCheck(this, Texture3D);
  46873. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__context__["g" /* assertWebGL2Context */])(gl);
  46874. var _this = _possibleConstructorReturn(this, (Texture3D.__proto__ || Object.getPrototypeOf(Texture3D)).call(this, gl, Object.assign({}, opts, { target: opts.target || __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].TEXTURE_3D })));
  46875. _this.width = null;
  46876. _this.height = null;
  46877. _this.depth = null;
  46878. Object.seal(_this);
  46879. _this.setImageData(opts);
  46880. if (opts.generateMipmap) {
  46881. _this.generateMipmap();
  46882. }
  46883. return _this;
  46884. }
  46885. _createClass(Texture3D, [{
  46886. key: 'initialize',
  46887. value: function initialize() {
  46888. var _this2 = this;
  46889. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  46890. this.opts = Object.assign({}, this.opts, opts);
  46891. var _opts = this.opts,
  46892. pixels = _opts.pixels,
  46893. settings = _opts.settings;
  46894. if (settings) {
  46895. __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__context_state__["f" /* withParameters */])(settings, function () {
  46896. if (pixels) {
  46897. _this2.setImage3D(_this2.opts);
  46898. }
  46899. });
  46900. this.setParameters(opts);
  46901. }
  46902. }
  46903. // WebGL2
  46904. // Image 3D copies from Typed Array or WebGLBuffer
  46905. }, {
  46906. key: 'setImage3D',
  46907. value: function setImage3D(_ref) {
  46908. var _ref$level = _ref.level,
  46909. level = _ref$level === undefined ? 0 : _ref$level,
  46910. _ref$internalformat = _ref.internalformat,
  46911. internalformat = _ref$internalformat === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].RGBA : _ref$internalformat,
  46912. width = _ref.width,
  46913. height = _ref.height,
  46914. _ref$depth = _ref.depth,
  46915. depth = _ref$depth === undefined ? 1 : _ref$depth,
  46916. _ref$border = _ref.border,
  46917. border = _ref$border === undefined ? 0 : _ref$border,
  46918. format = _ref.format,
  46919. _ref$type = _ref.type,
  46920. type = _ref$type === undefined ? __WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].UNSIGNED_BYTE : _ref$type,
  46921. _ref$offset = _ref.offset,
  46922. offset = _ref$offset === undefined ? 0 : _ref$offset,
  46923. pixels = _ref.pixels;
  46924. if (ArrayBuffer.isView(pixels)) {
  46925. this.gl.texImage3D(this.target, level, internalformat, width, height, depth, border, format, type, pixels);
  46926. return;
  46927. }
  46928. if (pixels instanceof __WEBPACK_IMPORTED_MODULE_4__buffer__["a" /* default */]) {
  46929. this.gl.bindBuffer(__WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].PIXEL_UNPACK_BUFFER, pixels.handle);
  46930. this.gl.texImage3D(this.target, level, internalformat, width, height, depth, border, format, type, offset);
  46931. this.gl.bindBuffer(__WEBPACK_IMPORTED_MODULE_0__api__["a" /* default */].PIXEL_UNPACK_BUFFER, pixels.handle);
  46932. }
  46933. }
  46934. }]);
  46935. return Texture3D;
  46936. }(__WEBPACK_IMPORTED_MODULE_3__webgl_texture__["a" /* default */]);
  46937. /* harmony default export */ __webpack_exports__["a"] = (Texture3D);
  46938. //# sourceMappingURL=texture-3d.js.map
  46939. /***/ }),
  46940. /* 669 */
  46941. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  46942. "use strict";
  46943. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert__ = __webpack_require__(1);
  46944. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_assert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_assert__);
  46945. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  46946. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  46947. var _UNIFORM_TYPES;
  46948. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  46949. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  46950. /* eslint-disable camelcase */
  46951. var ERR_ARGUMENT = 'UniformBufferLayout illegal argument';
  46952. // Local constants - these will "collapse" during minification
  46953. var GL_INT = 0x1404;
  46954. var GL_INT_VEC2 = 0x8B53;
  46955. var GL_INT_VEC3 = 0x8B54;
  46956. var GL_INT_VEC4 = 0x8B55;
  46957. var GL_FLOAT = 0x1406;
  46958. var GL_FLOAT_VEC2 = 0x8B50;
  46959. var GL_FLOAT_VEC3 = 0x8B51;
  46960. var GL_FLOAT_VEC4 = 0x8B52;
  46961. var GL_BOOL = 0x8B56;
  46962. var GL_BOOL_VEC2 = 0x8B57;
  46963. var GL_BOOL_VEC3 = 0x8B58;
  46964. var GL_BOOL_VEC4 = 0x8B59;
  46965. var GL_UNSIGNED_INT = 0x1405;
  46966. var GL_UNSIGNED_INT_VEC2 = 0x8DC6;
  46967. var GL_UNSIGNED_INT_VEC3 = 0x8DC7;
  46968. var GL_UNSIGNED_INT_VEC4 = 0x8DC8;
  46969. var GL_FLOAT_MAT2 = 0x8B5A;
  46970. var GL_FLOAT_MAT3 = 0x8B5B;
  46971. var GL_FLOAT_MAT4 = 0x8B5C;
  46972. var GL_FLOAT_MAT2x3 = 0x8B65;
  46973. var GL_FLOAT_MAT2x4 = 0x8B66;
  46974. var GL_FLOAT_MAT3x2 = 0x8B67;
  46975. var GL_FLOAT_MAT3x4 = 0x8B68;
  46976. var GL_FLOAT_MAT4x2 = 0x8B69;
  46977. var GL_FLOAT_MAT4x3 = 0x8B6A;
  46978. // Uniform table for std140
  46979. var UNIFORM_TYPES = (_UNIFORM_TYPES = {}, _defineProperty(_UNIFORM_TYPES, GL_FLOAT, [GL_FLOAT, 1]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_VEC2, [GL_FLOAT, 2]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_VEC3, [GL_FLOAT, 3]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_VEC4, [GL_FLOAT, 4]), _defineProperty(_UNIFORM_TYPES, GL_INT, [GL_INT, 1]), _defineProperty(_UNIFORM_TYPES, GL_INT_VEC2, [GL_INT, 2]), _defineProperty(_UNIFORM_TYPES, GL_INT_VEC3, [GL_INT, 3]), _defineProperty(_UNIFORM_TYPES, GL_INT_VEC4, [GL_INT, 4]), _defineProperty(_UNIFORM_TYPES, GL_UNSIGNED_INT, [GL_UNSIGNED_INT, 1]), _defineProperty(_UNIFORM_TYPES, GL_UNSIGNED_INT_VEC2, [GL_UNSIGNED_INT, 2]), _defineProperty(_UNIFORM_TYPES, GL_UNSIGNED_INT_VEC3, [GL_UNSIGNED_INT, 3]), _defineProperty(_UNIFORM_TYPES, GL_UNSIGNED_INT_VEC4, [GL_UNSIGNED_INT, 4]), _defineProperty(_UNIFORM_TYPES, GL_BOOL, [GL_FLOAT, 1]), _defineProperty(_UNIFORM_TYPES, GL_BOOL_VEC2, [GL_FLOAT, 2]), _defineProperty(_UNIFORM_TYPES, GL_BOOL_VEC3, [GL_FLOAT, 3]), _defineProperty(_UNIFORM_TYPES, GL_BOOL_VEC4, [GL_FLOAT, 4]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_MAT2, [GL_FLOAT, 8]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_MAT2x3, [GL_FLOAT, 8]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_MAT2x4, [GL_FLOAT, 8]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_MAT3, [GL_FLOAT, 12]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_MAT3x2, [GL_FLOAT, 12]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_MAT3x4, [GL_FLOAT, 12]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_MAT4, [GL_FLOAT, 16]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_MAT4x2, [GL_FLOAT, 16]), _defineProperty(_UNIFORM_TYPES, GL_FLOAT_MAT4x3, [GL_FLOAT, 16]), _UNIFORM_TYPES);
  46980. // Std140 layout for uniforms
  46981. var UniformBufferLayout = /*#__PURE__*/function () {
  46982. function UniformBufferLayout(layout) {
  46983. var _typedArray;
  46984. _classCallCheck(this, UniformBufferLayout);
  46985. this.layout = {};
  46986. this.size = 0;
  46987. // Add layout (type, size and offset) definitions for each uniform in the layout
  46988. for (var key in layout) {
  46989. this._addUniform(key, layout[key]);
  46990. }
  46991. // Allocate three typed arrays pointing at same memory
  46992. var data = new Float32Array(this.size);
  46993. this.typedArray = (_typedArray = {}, _defineProperty(_typedArray, GL_FLOAT, data), _defineProperty(_typedArray, GL_INT, new Int32Array(data.buffer)), _defineProperty(_typedArray, GL_UNSIGNED_INT, new Uint32Array(data.buffer)), _typedArray);
  46994. }
  46995. // Get number of bytes needed for buffer allocation
  46996. _createClass(UniformBufferLayout, [{
  46997. key: 'getBytes',
  46998. value: function getBytes() {
  46999. return this.size * 4;
  47000. }
  47001. // Get the current data as Float32Array, for bufferSubData
  47002. }, {
  47003. key: 'getData',
  47004. value: function getData() {
  47005. return this.typedArray[GL_FLOAT];
  47006. }
  47007. // Get offset and data for one object (for bufferSubData)
  47008. }, {
  47009. key: 'getSubData',
  47010. value: function getSubData(index) {
  47011. var data = void 0;
  47012. var offset = void 0;
  47013. if (index === undefined) {
  47014. data = this.data;
  47015. offset = 0;
  47016. } else {
  47017. var begin = this.offsets[index];
  47018. var end = begin + this.sizes[index];
  47019. data = this.data.subarray(begin, end);
  47020. offset = begin * 4;
  47021. }
  47022. return { data: data, offset: offset };
  47023. }
  47024. // Set a map of values
  47025. }, {
  47026. key: 'setUniforms',
  47027. value: function setUniforms(values) {
  47028. for (var key in values) {
  47029. this._setValue(key, values[key]);
  47030. }
  47031. return this;
  47032. }
  47033. }, {
  47034. key: '_setValue',
  47035. value: function _setValue(key, value) {
  47036. var layout = this.layout[key];
  47037. __WEBPACK_IMPORTED_MODULE_0_assert___default()(layout, 'UniformLayoutStd140 illegal argument');
  47038. var typedArray = this.typedArray[layout.type];
  47039. if (layout.size === 1) {
  47040. // single value -> just set it
  47041. typedArray[layout.offset] = value;
  47042. } else {
  47043. // vector/matrix -> copy the supplied (typed) array, starting from offset
  47044. typedArray.set(value, layout.offset);
  47045. }
  47046. }
  47047. }, {
  47048. key: '_addUniform',
  47049. value: function _addUniform(key, uniformType) {
  47050. var definition = UNIFORM_TYPES[uniformType];
  47051. __WEBPACK_IMPORTED_MODULE_0_assert___default()(definition, ERR_ARGUMENT);
  47052. var _definition = _slicedToArray(definition, 2),
  47053. type = _definition[0],
  47054. count = _definition[1];
  47055. // Get the current offset and calculate the next offset based on aligned size of this element
  47056. var offset = this.size;
  47057. // First, align (bump) current offset to an even multiple of current object (1, 2, 4)
  47058. this.size = this._alignTo(this.size, count);
  47059. // Then, add our object's padded size ((1, 2, multiple of 4) to the current offset
  47060. this.size += count;
  47061. this.layout[key] = { type: type, size: count, offset: offset };
  47062. }
  47063. // Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes)
  47064. }, {
  47065. key: '_alignTo',
  47066. value: function _alignTo(size, count) {
  47067. switch (count) {
  47068. case 1:
  47069. return size; // Pad upwards to even multiple of 2
  47070. case 2:
  47071. return size + size % 2; // Pad upwards to even multiple of 2
  47072. default:
  47073. return size + (4 - size % 4) % 4; // Pad upwards to even multiple of 4
  47074. }
  47075. }
  47076. }]);
  47077. return UniformBufferLayout;
  47078. }();
  47079. /* harmony default export */ __webpack_exports__["a"] = (UniformBufferLayout);
  47080. //# sourceMappingURL=uniform-buffer-layout.js.map
  47081. /***/ }),
  47082. /* 670 */
  47083. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  47084. "use strict";
  47085. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math_array__ = __webpack_require__(112);
  47086. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common__ = __webpack_require__(31);
  47087. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__matrix4__ = __webpack_require__(278);
  47088. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__quaternion__ = __webpack_require__(279);
  47089. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__vector3__ = __webpack_require__(113);
  47090. var _createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');return call&&('object'==typeof call||'function'==typeof call)?call:self}function _inherits(subClass,superClass){if('function'!=typeof superClass&&null!==superClass)throw new TypeError('Super expression must either be null or a function, not '+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}var ERR_UNKNOWN_ORDER='Unknown Euler angle order',ALMOST_ONE=.99999;function validateOrder(value){return 0<=value&&6>value}function checkOrder(value){if(0>value&&6<=value)throw new Error(ERR_UNKNOWN_ORDER);return value}var Euler=function(_MathArray){function Euler(){var x=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,y=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,z=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,order=3<arguments.length&&void 0!==arguments[3]?arguments[3]:Euler.DefaultOrder;_classCallCheck(this,Euler);var _this=_possibleConstructorReturn(this,(Euler.__proto__||Object.getPrototypeOf(Euler)).call(this));return 0<arguments.length&&Array.isArray(arguments[0])?_this.fromVector3.apply(_this,arguments):_this.set(x,y,z,order),_this}var _NumberisFinite=Number.isFinite;return _inherits(Euler,_MathArray),_createClass(Euler,[{key:'ELEMENTS',get:function get(){return 4}}],[{key:'rotationOrder',value:function rotationOrder(order){return Euler.RotationOrders[order]}},{key:'ZYX',get:function get(){return 0}},{key:'YXZ',get:function get(){return 1}},{key:'XZY',get:function get(){return 2}},{key:'ZXY',get:function get(){return 3}},{key:'YZX',get:function get(){return 4}},{key:'XYZ',get:function get(){return 5}},{key:'RollPitchYaw',get:function get(){return 0}},{key:'DefaultOrder',get:function get(){return Euler.ZYX}},{key:'RotationOrders',get:function get(){return['ZYX','YXZ','XZY','ZXY','YZX','XYZ']}}]),_createClass(Euler,[{key:'copy',value:function copy(array){for(var i=0;3>i;++i)this[i]=array[i];return this[3]=_NumberisFinite(array[3])||this.order,this.check(),this}},{key:'set',value:function set(){var x=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,y=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,z=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,order=arguments[3];return this[0]=x,this[1]=y,this[2]=z,this[3]=_NumberisFinite(order)?order:this[3],this.check(),this}},{key:'validate',value:function validate(){return validateOrder(this[3])&&_NumberisFinite(this[0])&&_NumberisFinite(this[1])&&_NumberisFinite(this[2])}},{key:'toArray',value:function toArray(){var array=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],offset=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;return array[offset]=this[0],array[offset+1]=this[1],array[offset+2]=this[2],array}},{key:'toArray4',value:function toArray4(){var array=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[],offset=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;return array[offset]=this[0],array[offset+1]=this[1],array[offset+2]=this[2],array[offset+3]=this[3],array}},{key:'toVector3',value:function toVector3(optionalResult){return optionalResult?optionalResult.set(this[0],this[1],this[2]):new __WEBPACK_IMPORTED_MODULE_4__vector3__["a" /* default */](this[0],this[1],this[2])}},{key:'fromVector3',value:function fromVector3(v,order){return this.set(v[0],v[1],v[2],_NumberisFinite(order)?order:this[3])}},{key:'fromArray',value:function fromArray(array){var offset=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;return this[0]=array[0+offset],this[1]=array[1+offset],this[2]=array[2+offset],void 0!==array[3]&&(this[3]=array[3]),this.check(),this}},{key:'fromRollPitchYaw',value:function fromRollPitchYaw(roll,pitch,yaw){return this.set(roll,pitch,yaw,Euler.ZYX)}},{key:'fromQuaternion',value:function fromQuaternion(q,order){return this._fromRotationMatrix(__WEBPACK_IMPORTED_MODULE_2__matrix4__["a" /* default */].fromQuaternion(q),order),this.check(),this}},{key:'fromRotationMatrix',value:function fromRotationMatrix(m){var order=1<arguments.length&&void 0!==arguments[1]?arguments[1]:Euler.DefaultOrder;return this._fromRotationMatrix(m,order),this.check(),this}},{key:'getRotationMatrix',value:function getRotationMatrix(){var m=0<arguments.length&&void 0!==arguments[0]?arguments[0]:new __WEBPACK_IMPORTED_MODULE_2__matrix4__["a" /* default */];return this._getRotationMatrix(m),m}},{key:'getQuaternion',value:function getQuaternion(){var q=new __WEBPACK_IMPORTED_MODULE_3__quaternion__["a" /* default */];switch(this[4]){case Euler.XYZ:return q.rotateX(this[0]).rotateY(this[1]).rotateZ(this[2]);case Euler.YXZ:return q.rotateY(this[0]).rotateX(this[1]).rotateZ(this[2]);case Euler.ZXY:return q.rotateZ(this[0]).rotateX(this[1]).rotateY(this[2]);case Euler.ZYX:return q.rotateZ(this[0]).rotateY(this[1]).rotateX(this[2]);case Euler.YZX:return q.rotateY(this[0]).rotateZ(this[1]).rotateX(this[2]);case Euler.XZY:return q.rotateX(this[0]).rotateZ(this[1]).rotateY(this[2]);default:throw new Error(ERR_UNKNOWN_ORDER);}}},{key:'_fromRotationMatrix',value:function _fromRotationMatrix(m){var _Mathatan=Math.atan2,_Mathabs=Math.abs,_Mathasin=Math.asin,order=1<arguments.length&&void 0!==arguments[1]?arguments[1]:Euler.DefaultOrder,te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10];switch(order=order||this[3],order){case Euler.XYZ:this[1]=_Mathasin(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["e" /* clamp */])(m13,-1,1)),_Mathabs(m13)<ALMOST_ONE?(this[0]=_Mathatan(-m23,m33),this[2]=_Mathatan(-m12,m11)):(this[0]=_Mathatan(m32,m22),this[2]=0);break;case Euler.YXZ:this[0]=_Mathasin(-__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["e" /* clamp */])(m23,-1,1)),_Mathabs(m23)<ALMOST_ONE?(this[1]=_Mathatan(m13,m33),this[2]=_Mathatan(m21,m22)):(this[1]=_Mathatan(-m31,m11),this[2]=0);break;case Euler.ZXY:this[0]=_Mathasin(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["e" /* clamp */])(m32,-1,1)),_Mathabs(m32)<ALMOST_ONE?(this[1]=_Mathatan(-m31,m33),this[2]=_Mathatan(-m12,m22)):(this[1]=0,this[2]=_Mathatan(m21,m11));break;case Euler.ZYX:this[1]=_Mathasin(-__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["e" /* clamp */])(m31,-1,1)),_Mathabs(m31)<ALMOST_ONE?(this[0]=_Mathatan(m32,m33),this[2]=_Mathatan(m21,m11)):(this[0]=0,this[2]=_Mathatan(-m12,m22));break;case Euler.YZX:this[2]=_Mathasin(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["e" /* clamp */])(m21,-1,1)),_Mathabs(m21)<ALMOST_ONE?(this[0]=_Mathatan(-m23,m22),this[1]=_Mathatan(-m31,m11)):(this[0]=0,this[1]=_Mathatan(m13,m33));break;case Euler.XZY:this[2]=_Mathasin(-__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["e" /* clamp */])(m12,-1,1)),_Mathabs(m12)<ALMOST_ONE?(this[0]=_Mathatan(m32,m22),this[1]=_Mathatan(m13,m11)):(this[0]=_Mathatan(-m23,m33),this[1]=0);break;default:throw new Error(ERR_UNKNOWN_ORDER);}return this[3]=order,this}},{key:'_getRotationMatrix',value:function _getRotationMatrix(){var _Mathsin=Math.sin,_Mathcos=Math.cos,te=new __WEBPACK_IMPORTED_MODULE_2__matrix4__["a" /* default */],x=this.x,y=this.y,z=this.z,a=_Mathcos(x),c=_Mathcos(y),e=_Mathcos(z),b=_Mathsin(x),d=_Mathsin(y),f=_Mathsin(z);switch(this[3]){case Euler.XYZ:{var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e,te[4]=-c*f,te[8]=d,te[1]=af+be*d,te[5]=ae-bf*d,te[9]=-b*c,te[2]=bf-ae*d,te[6]=be+af*d,te[10]=a*c;break}case Euler.YXZ:{var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce+df*b,te[4]=de*b-cf,te[8]=a*d,te[1]=a*f,te[5]=a*e,te[9]=-b,te[2]=cf*b-de,te[6]=df+ce*b,te[10]=a*c;break}case Euler.ZXY:{var _ce=c*e,_cf=c*f,_de=d*e,_df=d*f;te[0]=_ce-_df*b,te[4]=-a*f,te[8]=_de+_cf*b,te[1]=_cf+_de*b,te[5]=a*e,te[9]=_df-_ce*b,te[2]=-a*d,te[6]=b,te[10]=a*c;break}case Euler.ZYX:{var _ae=a*e,_af=a*f,_be=b*e,_bf=b*f;te[0]=c*e,te[4]=_be*d-_af,te[8]=_ae*d+_bf,te[1]=c*f,te[5]=_bf*d+_ae,te[9]=_af*d-_be,te[2]=-d,te[6]=b*c,te[10]=a*c;break}case Euler.YZX:{var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e,te[4]=bd-ac*f,te[8]=bc*f+ad,te[1]=f,te[5]=a*e,te[9]=-b*e,te[2]=-d*e,te[6]=ad*f+bc,te[10]=ac-bd*f;break}case Euler.XZY:{var _ac=a*c,_ad=a*d,_bc=b*c,_bd=b*d;te[0]=c*e,te[4]=-f,te[8]=d*e,te[1]=_ac*f+_bd,te[5]=a*e,te[9]=_ad*f-_bc,te[2]=_bc*f-_ad,te[6]=b*e,te[10]=_bd*f+_ac;break}default:throw new Error(ERR_UNKNOWN_ORDER);}return te[3]=0,te[7]=0,te[11]=0,te[12]=0,te[13]=0,te[14]=0,te[15]=1,this}},{key:'x',get:function get(){return this[0]},set:function set(value){return this[0]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'y',get:function get(){return this[1]},set:function set(value){return this[1]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'z',get:function get(){return this[2]},set:function set(value){return this[2]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'alpha',get:function get(){return this[0]},set:function set(value){return this[0]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'beta',get:function get(){return this[1]},set:function set(value){return this[1]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'gamma',get:function get(){return this[2]},set:function set(value){return this[2]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'phi',get:function get(){return this[0]},set:function set(value){return this[0]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'theta',get:function get(){return this[1]},set:function set(value){return this[1]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'psi',get:function get(){return this[2]},set:function set(value){return this[2]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'roll',get:function get(){return this[0]},set:function set(value){return this[0]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'pitch',get:function get(){return this[1]},set:function set(value){return this[1]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'yaw',get:function get(){return this[2]},set:function set(value){return this[2]=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common__["g" /* checkNumber */])(value)}},{key:'order',get:function get(){return this[3]},set:function set(value){return this[3]=checkOrder(value)}}]),Euler}(__WEBPACK_IMPORTED_MODULE_0__math_array__["a" /* default */]);/* harmony default export */ __webpack_exports__["a"] = (Euler);
  47091. //# sourceMappingURL=euler.js.map
  47092. /***/ }),
  47093. /* 671 */
  47094. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  47095. "use strict";
  47096. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common__ = __webpack_require__(31);
  47097. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__vector3__ = __webpack_require__(113);
  47098. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_vec3_length__ = __webpack_require__(241);
  47099. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_gl_vec3_length___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_gl_vec3_length__);
  47100. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_assert__ = __webpack_require__(277);
  47101. var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!(i&&_arr.length===i));_n=!0);}catch(err){_d=!0,_e=err}finally{try{!_n&&_i['return']&&_i['return']()}finally{if(_d)throw _e}}return _arr}return function(arr,i){if(Array.isArray(arr))return arr;if(Symbol.iterator in Object(arr))return sliceIterator(arr,i);throw new TypeError('Invalid attempt to destructure non-iterable instance')}}(),_createClass=function(){function defineProperties(target,props){for(var descriptor,i=0;i<props.length;i++)descriptor=props[i],descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,'value'in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError('Cannot call a class as a function')}var EPSILON=1e-6,EARTH_RADIUS_METERS=6371e3,SphericalCoordinates=function(){function SphericalCoordinates(){var _ref=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},phi=_ref.phi,theta=_ref.theta,radius=_ref.radius,bearing=_ref.bearing,pitch=_ref.pitch,altitude=_ref.altitude,_ref$radiusScale=_ref.radiusScale,radiusScale=void 0===_ref$radiusScale?EARTH_RADIUS_METERS:_ref$radiusScale;_classCallCheck(this,SphericalCoordinates),0===arguments.length?(this.phi=0,this.theta=0,this.radius=1):_NumberisFinite(phi)||_NumberisFinite(theta)?(this.phi=phi||0,this.theta=theta||0):(_NumberisFinite(bearing)||_NumberisFinite(pitch))&&(this.bearing=bearing||0,this.pitch=pitch||0),this.radius=radius||1,this.radiusScale=radiusScale||1,this.check()}var _MathPI=Math.PI,_NumberisFinite=Number.isFinite;return _createClass(SphericalCoordinates,[{key:'toString',value:function toString(){return this.formatString(__WEBPACK_IMPORTED_MODULE_0__common__["a" /* config */])}},{key:'formatString',value:function formatString(_ref2){var printTypes=_ref2.printTypes,printDegrees=_ref2.printDegrees,f=__WEBPACK_IMPORTED_MODULE_0__common__["b" /* formatValue */];return(printTypes?'Spherical':'')+'[rho:'+f(this.radius)+',theta:'+f(this.theta)+',phi:'+f(this.phi)+']'}},{key:'equals',value:function equals(other){return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["c" /* equals */])(this.radius,other.radius)&&__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["c" /* equals */])(this.theta,other.theta)&&__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["c" /* equals */])(this.phi,other.phi)}},{key:'exactEquals',value:function exactEquals(other){return this.radius===other.radius&&this.theta===other.theta&&this.phi===other.phi}},{key:'set',value:function set(radius,phi,theta){return this.radius=radius,this.phi=phi,this.theta=theta,this.check()}},{key:'clone',value:function clone(){return new this.constructor().copy(this)}},{key:'copy',value:function copy(other){return this.radius=other.radius,this.phi=other.phi,this.theta=other.theta,this.check()}},{key:'fromLngLatZ',value:function fromLngLatZ(_ref3){var _ref4=_slicedToArray(_ref3,3),lng=_ref4[0],lat=_ref4[1],z=_ref4[2];this.radius=1+z/this.radiusScale,this.phi=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["d" /* radians */])(lat),this.theta=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["d" /* radians */])(lng)}},{key:'fromVector3',value:function fromVector3(v){return this.radius=__WEBPACK_IMPORTED_MODULE_2_gl_vec3_length___default()(v),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(v[0],v[1]),this.phi=Math.acos(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["e" /* clamp */])(v[2]/this.radius,-1,1))),this.check()}},{key:'toVector3',value:function toVector3(){return new __WEBPACK_IMPORTED_MODULE_1__vector3__["a" /* default */](0,0,this.radius).rotateX({radians:this.theta}).rotateZ({radians:this.phi})}},{key:'makeSafe',value:function makeSafe(){this.phi=Math.max(EPSILON,Math.min(_MathPI-EPSILON,this.phi))}},{key:'check',value:function check(){return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__lib_assert__["a" /* default */])(_NumberisFinite(this.phi)&&_NumberisFinite(this.theta)&&0<this.radius),this}},{key:'bearing',get:function get(){return 180-__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["f" /* degrees */])(this.phi)},set:function set(v){this.phi=_MathPI-__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["d" /* radians */])(v)}},{key:'pitch',get:function get(){return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["f" /* degrees */])(this.theta)},set:function set(v){this.theta=__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["d" /* radians */])(v)}},{key:'longitude',get:function get(){return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["f" /* degrees */])(this.phi)}},{key:'latitude',get:function get(){return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["f" /* degrees */])(this.theta)}},{key:'lng',get:function get(){return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["f" /* degrees */])(this.phi)}},{key:'lat',get:function get(){return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common__["f" /* degrees */])(this.theta)}},{key:'z',get:function get(){return(this.radius-1)*this.radiusScale}}]),SphericalCoordinates}();/* harmony default export */ __webpack_exports__["a"] = (SphericalCoordinates);
  47102. //# sourceMappingURL=spherical-coordinates.js.map
  47103. /***/ }),
  47104. /* 672 */
  47105. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  47106. "use strict";
  47107. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_hammer__ = __webpack_require__(283);
  47108. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__inputs_wheel_input__ = __webpack_require__(675);
  47109. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__inputs_move_input__ = __webpack_require__(674);
  47110. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__inputs_key_input__ = __webpack_require__(673);
  47111. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__constants__ = __webpack_require__(114);
  47112. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_event_utils__ = __webpack_require__(676);
  47113. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  47114. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  47115. // Copyright (c) 2017 Uber Technologies, Inc.
  47116. //
  47117. // Permission is hereby granted, free of charge, to any person obtaining a copy
  47118. // of this software and associated documentation files (the "Software"), to deal
  47119. // in the Software without restriction, including without limitation the rights
  47120. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  47121. // copies of the Software, and to permit persons to whom the Software is
  47122. // furnished to do so, subject to the following conditions:
  47123. //
  47124. // The above copyright notice and this permission notice shall be included in
  47125. // all copies or substantial portions of the Software.
  47126. //
  47127. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  47128. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  47129. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  47130. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  47131. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  47132. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  47133. // THE SOFTWARE.
  47134. function preventDefault(evt) {
  47135. evt.preventDefault();
  47136. }
  47137. // Unified API for subscribing to events about both
  47138. // basic input events (e.g. 'mousemove', 'touchstart', 'wheel')
  47139. // and gestural input (e.g. 'click', 'tap', 'panstart').
  47140. // Delegates gesture related event registration and handling to Hammer.js.
  47141. var EventManager = function () {
  47142. function EventManager() {
  47143. var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
  47144. var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  47145. _classCallCheck(this, EventManager);
  47146. this.options = options;
  47147. this.eventHandlers = [];
  47148. this._onBasicInput = this._onBasicInput.bind(this);
  47149. this._onOtherEvent = this._onOtherEvent.bind(this);
  47150. this.setElement(element);
  47151. // Register all passed events.
  47152. var events = options.events;
  47153. if (events) {
  47154. this.on(events);
  47155. }
  47156. }
  47157. _createClass(EventManager, [{
  47158. key: 'setElement',
  47159. value: function setElement(element) {
  47160. var _this = this;
  47161. if (this.element) {
  47162. // unregister all events
  47163. this.destroy();
  47164. }
  47165. this.element = element;
  47166. if (!element) {
  47167. return;
  47168. }
  47169. var options = this.options;
  47170. var ManagerClass = options.Manager || __WEBPACK_IMPORTED_MODULE_0__utils_hammer__["a" /* Manager */];
  47171. this.manager = new ManagerClass(element, { recognizers: options.recognizers || __WEBPACK_IMPORTED_MODULE_4__constants__["a" /* RECOGNIZERS */] }).on('hammer.input', this._onBasicInput);
  47172. if (!options.recognizers) {
  47173. // Set default recognize withs
  47174. // http://hammerjs.github.io/recognize-with/
  47175. Object.keys(__WEBPACK_IMPORTED_MODULE_4__constants__["b" /* RECOGNIZER_COMPATIBLE_MAP */]).forEach(function (name) {
  47176. var recognizer = _this.manager.get(name);
  47177. if (recognizer) {
  47178. __WEBPACK_IMPORTED_MODULE_4__constants__["b" /* RECOGNIZER_COMPATIBLE_MAP */][name].forEach(function (otherName) {
  47179. recognizer.recognizeWith(otherName);
  47180. });
  47181. }
  47182. });
  47183. }
  47184. // Handle events not handled by Hammer.js:
  47185. // - mouse wheel
  47186. // - pointer/touch/mouse move
  47187. this.wheelInput = new __WEBPACK_IMPORTED_MODULE_1__inputs_wheel_input__["a" /* default */](element, this._onOtherEvent, { enable: false });
  47188. this.moveInput = new __WEBPACK_IMPORTED_MODULE_2__inputs_move_input__["a" /* default */](element, this._onOtherEvent, { enable: false });
  47189. this.keyInput = new __WEBPACK_IMPORTED_MODULE_3__inputs_key_input__["a" /* default */](element, this._onOtherEvent, { enable: false });
  47190. if (options.rightButton) {
  47191. // Block right click
  47192. element.addEventListener('contextmenu', preventDefault);
  47193. }
  47194. // Register all existing events
  47195. this.eventHandlers.forEach(function (_ref) {
  47196. var recognizerName = _ref.recognizerName,
  47197. eventAlias = _ref.eventAlias,
  47198. wrappedHandler = _ref.wrappedHandler;
  47199. // Enable recognizer for this event.
  47200. _this._toggleRecognizer(recognizerName, true);
  47201. _this.manager.on(eventAlias, wrappedHandler);
  47202. });
  47203. }
  47204. // Tear down internal event management implementations.
  47205. }, {
  47206. key: 'destroy',
  47207. value: function destroy() {
  47208. if (this.element) {
  47209. this.element.removeEventListener('contextmenu', preventDefault);
  47210. // wheelInput etc. are created in setElement() and therefore
  47211. // cannot exist if there is no element
  47212. this.wheelInput.destroy();
  47213. this.moveInput.destroy();
  47214. this.keyInput.destroy();
  47215. this.manager.destroy();
  47216. this.wheelInput = null;
  47217. this.moveInput = null;
  47218. this.keyInput = null;
  47219. this.manager = null;
  47220. this.element = null;
  47221. }
  47222. }
  47223. // Register an event handler function to be called on `event`.
  47224. }, {
  47225. key: 'on',
  47226. value: function on(event, handler, srcElement) {
  47227. if (typeof event === 'string') {
  47228. this._addEventHandler(event, handler, srcElement);
  47229. } else {
  47230. srcElement = handler;
  47231. // If `event` is a map, call `on()` for each entry.
  47232. for (var eventName in event) {
  47233. this._addEventHandler(eventName, event[eventName], srcElement);
  47234. }
  47235. }
  47236. }
  47237. /**
  47238. * Deregister a previously-registered event handler.
  47239. * @param {string|Object} event An event name (String) or map of event names to handlers
  47240. * @param {Function} [handler] The function to be called on `event`.
  47241. */
  47242. }, {
  47243. key: 'off',
  47244. value: function off(event, handler) {
  47245. if (typeof event === 'string') {
  47246. this._removeEventHandler(event, handler);
  47247. } else {
  47248. // If `event` is a map, call `off()` for each entry.
  47249. for (var eventName in event) {
  47250. this._removeEventHandler(eventName, event[eventName]);
  47251. }
  47252. }
  47253. }
  47254. /*
  47255. * Enable/disable recognizer for the given event
  47256. */
  47257. }, {
  47258. key: '_toggleRecognizer',
  47259. value: function _toggleRecognizer(name, enabled) {
  47260. var manager = this.manager;
  47261. if (!manager) {
  47262. return;
  47263. }
  47264. var recognizer = manager.get(name);
  47265. if (recognizer) {
  47266. recognizer.set({ enable: enabled });
  47267. var fallbackRecognizers = __WEBPACK_IMPORTED_MODULE_4__constants__["c" /* RECOGNIZER_FALLBACK_MAP */][name];
  47268. if (fallbackRecognizers && !this.options.recognizers) {
  47269. // Set default require failures
  47270. // http://hammerjs.github.io/require-failure/
  47271. fallbackRecognizers.forEach(function (otherName) {
  47272. var otherRecognizer = manager.get(otherName);
  47273. if (enabled) {
  47274. // Wait for this recognizer to fail
  47275. otherRecognizer.requireFailure(name);
  47276. } else {
  47277. // Do not wait for this recognizer to fail
  47278. otherRecognizer.dropRequireFailure(name);
  47279. }
  47280. });
  47281. }
  47282. }
  47283. this.wheelInput.enableEventType(name, enabled);
  47284. this.moveInput.enableEventType(name, enabled);
  47285. this.keyInput.enableEventType(name, enabled);
  47286. }
  47287. /**
  47288. * Process the event registration for a single event + handler.
  47289. */
  47290. }, {
  47291. key: '_addEventHandler',
  47292. value: function _addEventHandler(event, handler) {
  47293. var srcElement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  47294. var manager = this.manager,
  47295. eventHandlers = this.eventHandlers;
  47296. var wrappedHandler = this._wrapEventHandler(event, handler, srcElement);
  47297. // Alias to a recognized gesture as necessary.
  47298. var eventAlias = __WEBPACK_IMPORTED_MODULE_4__constants__["d" /* GESTURE_EVENT_ALIASES */][event] || event;
  47299. // Get recognizer for this event
  47300. var recognizerName = __WEBPACK_IMPORTED_MODULE_4__constants__["e" /* EVENT_RECOGNIZER_MAP */][eventAlias] || eventAlias;
  47301. // Enable recognizer for this event.
  47302. this._toggleRecognizer(recognizerName, true);
  47303. // Find ancestors
  47304. var ancestorEventHandlers = eventHandlers.filter(function (entry) {
  47305. return entry.eventAlias === eventAlias && entry.srcElement !== srcElement && (!entry.srcElement || entry.srcElement.contains(srcElement));
  47306. });
  47307. // Save wrapped handler
  47308. eventHandlers.push({ event: event, eventAlias: eventAlias, recognizerName: recognizerName, srcElement: srcElement,
  47309. handler: handler, wrappedHandler: wrappedHandler });
  47310. // Sort handlers by DOM hierarchy
  47311. // So the event will always fire first on child nodes
  47312. ancestorEventHandlers.forEach(function (entry) {
  47313. return manager.off(eventAlias, entry.wrappedHandler);
  47314. });
  47315. if (manager) {
  47316. manager.on(eventAlias, wrappedHandler);
  47317. }
  47318. ancestorEventHandlers.forEach(function (entry) {
  47319. return manager.on(eventAlias, entry.wrappedHandler);
  47320. });
  47321. }
  47322. /**
  47323. * Process the event deregistration for a single event + handler.
  47324. */
  47325. }, {
  47326. key: '_removeEventHandler',
  47327. value: function _removeEventHandler(event, handler) {
  47328. var manager = this.manager,
  47329. eventHandlers = this.eventHandlers;
  47330. var eventHandlerRemoved = false;
  47331. // Find saved handler if any.
  47332. for (var i = eventHandlers.length; i--;) {
  47333. var entry = eventHandlers[i];
  47334. if (entry.event === event && entry.handler === handler) {
  47335. // Deregister event handler.
  47336. if (manager) {
  47337. manager.off(entry.eventAlias, entry.wrappedHandler);
  47338. }
  47339. // Delete saved handler
  47340. eventHandlers.splice(i, 1);
  47341. eventHandlerRemoved = true;
  47342. }
  47343. }
  47344. if (eventHandlerRemoved) {
  47345. // Alias to a recognized gesture as necessary.
  47346. var eventAlias = __WEBPACK_IMPORTED_MODULE_4__constants__["d" /* GESTURE_EVENT_ALIASES */][event] || event;
  47347. // Get recognizer for this event
  47348. var recognizerName = __WEBPACK_IMPORTED_MODULE_4__constants__["e" /* EVENT_RECOGNIZER_MAP */][eventAlias] || eventAlias;
  47349. // Disable recognizer if no more handlers are attached to its events
  47350. var isRecognizerUsed = eventHandlers.find(function (entry) {
  47351. return entry.recognizerName === recognizerName;
  47352. });
  47353. if (!isRecognizerUsed) {
  47354. this._toggleRecognizer(recognizerName, false);
  47355. }
  47356. }
  47357. }
  47358. /**
  47359. * Returns an event handler that aliases events and add props before passing
  47360. * to the real handler.
  47361. */
  47362. }, {
  47363. key: '_wrapEventHandler',
  47364. value: function _wrapEventHandler(type, handler, srcElement) {
  47365. var _this2 = this;
  47366. return function (event) {
  47367. var mjolnirEvent = event.mjolnirEvent;
  47368. if (!mjolnirEvent) {
  47369. mjolnirEvent = _this2._normalizeEvent(event);
  47370. event.mjolnirEvent = mjolnirEvent;
  47371. }
  47372. var isStopped = mjolnirEvent.handled && mjolnirEvent.handled !== srcElement;
  47373. if (!isStopped) {
  47374. var isFromDecendant = !srcElement || srcElement.contains(event.srcEvent.target);
  47375. if (isFromDecendant) {
  47376. handler(Object.assign({}, mjolnirEvent, {
  47377. type: type,
  47378. stopPropagation: function stopPropagation() {
  47379. if (!mjolnirEvent.handled) {
  47380. mjolnirEvent.handled = srcElement;
  47381. }
  47382. }
  47383. }));
  47384. }
  47385. }
  47386. };
  47387. }
  47388. /**
  47389. * Normalizes hammerjs and custom events to have predictable fields.
  47390. */
  47391. }, {
  47392. key: '_normalizeEvent',
  47393. value: function _normalizeEvent(event) {
  47394. var element = this.element;
  47395. return Object.assign({}, event, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_event_utils__["a" /* whichButtons */])(event), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_event_utils__["b" /* getOffsetPosition */])(event, element), {
  47396. handled: false,
  47397. rootElement: element
  47398. });
  47399. }
  47400. /**
  47401. * Handle basic events using the 'hammer.input' Hammer.js API:
  47402. * Before running Recognizers, Hammer emits a 'hammer.input' event
  47403. * with the basic event info. This function emits all basic events
  47404. * aliased to the "class" of event received.
  47405. * See constants.BASIC_EVENT_CLASSES basic event class definitions.
  47406. */
  47407. }, {
  47408. key: '_onBasicInput',
  47409. value: function _onBasicInput(event) {
  47410. var srcEvent = event.srcEvent;
  47411. var alias = __WEBPACK_IMPORTED_MODULE_4__constants__["f" /* BASIC_EVENT_ALIASES */][srcEvent.type];
  47412. if (alias) {
  47413. // fire all events aliased to srcEvent.type
  47414. this.manager.emit(alias, event);
  47415. }
  47416. }
  47417. /**
  47418. * Handle events not supported by Hammer.js,
  47419. * and pipe back out through same (Hammer) channel used by other events.
  47420. */
  47421. }, {
  47422. key: '_onOtherEvent',
  47423. value: function _onOtherEvent(event) {
  47424. this.manager.emit(event.type, event);
  47425. }
  47426. }]);
  47427. return EventManager;
  47428. }();
  47429. /* harmony default export */ __webpack_exports__["a"] = (EventManager);
  47430. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ldmVudC1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbIk1hbmFnZXIiLCJXaGVlbElucHV0IiwiTW92ZUlucHV0IiwiS2V5SW5wdXQiLCJCQVNJQ19FVkVOVF9BTElBU0VTIiwiRVZFTlRfUkVDT0dOSVpFUl9NQVAiLCJHRVNUVVJFX0VWRU5UX0FMSUFTRVMiLCJSRUNPR05JWkVSUyIsIlJFQ09HTklaRVJfQ09NUEFUSUJMRV9NQVAiLCJSRUNPR05JWkVSX0ZBTExCQUNLX01BUCIsIndoaWNoQnV0dG9ucyIsImdldE9mZnNldFBvc2l0aW9uIiwicHJldmVudERlZmF1bHQiLCJldnQiLCJFdmVudE1hbmFnZXIiLCJlbGVtZW50Iiwib3B0aW9ucyIsImV2ZW50SGFuZGxlcnMiLCJfb25CYXNpY0lucHV0IiwiYmluZCIsIl9vbk90aGVyRXZlbnQiLCJzZXRFbGVtZW50IiwiZXZlbnRzIiwib24iLCJkZXN0cm95IiwiTWFuYWdlckNsYXNzIiwibWFuYWdlciIsInJlY29nbml6ZXJzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJyZWNvZ25pemVyIiwiZ2V0IiwibmFtZSIsInJlY29nbml6ZVdpdGgiLCJvdGhlck5hbWUiLCJ3aGVlbElucHV0IiwiZW5hYmxlIiwibW92ZUlucHV0Iiwia2V5SW5wdXQiLCJyaWdodEJ1dHRvbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZWNvZ25pemVyTmFtZSIsImV2ZW50QWxpYXMiLCJ3cmFwcGVkSGFuZGxlciIsIl90b2dnbGVSZWNvZ25pemVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiaGFuZGxlciIsInNyY0VsZW1lbnQiLCJfYWRkRXZlbnRIYW5kbGVyIiwiZXZlbnROYW1lIiwiX3JlbW92ZUV2ZW50SGFuZGxlciIsImVuYWJsZWQiLCJzZXQiLCJmYWxsYmFja1JlY29nbml6ZXJzIiwib3RoZXJSZWNvZ25pemVyIiwicmVxdWlyZUZhaWx1cmUiLCJkcm9wUmVxdWlyZUZhaWx1cmUiLCJlbmFibGVFdmVudFR5cGUiLCJfd3JhcEV2ZW50SGFuZGxlciIsImFuY2VzdG9yRXZlbnRIYW5kbGVycyIsImZpbHRlciIsImVudHJ5IiwiY29udGFpbnMiLCJwdXNoIiwib2ZmIiwiZXZlbnRIYW5kbGVyUmVtb3ZlZCIsImkiLCJsZW5ndGgiLCJzcGxpY2UiLCJpc1JlY29nbml6ZXJVc2VkIiwiZmluZCIsInR5cGUiLCJtam9sbmlyRXZlbnQiLCJfbm9ybWFsaXplRXZlbnQiLCJpc1N0b3BwZWQiLCJoYW5kbGVkIiwiaXNGcm9tRGVjZW5kYW50Iiwic3JjRXZlbnQiLCJ0YXJnZXQiLCJhc3NpZ24iLCJzdG9wUHJvcGFnYXRpb24iLCJyb290RWxlbWVudCIsImFsaWFzIiwiZW1pdCJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVFBLE9BQVIsUUFBc0IsZ0JBQXRCOztBQUVBLE9BQU9DLFVBQVAsTUFBdUIsc0JBQXZCO0FBQ0EsT0FBT0MsU0FBUCxNQUFzQixxQkFBdEI7QUFDQSxPQUFPQyxRQUFQLE1BQXFCLG9CQUFyQjs7QUFFQSxTQUNFQyxtQkFERixFQUVFQyxvQkFGRixFQUdFQyxxQkFIRixFQUlFQyxXQUpGLEVBS0VDLHlCQUxGLEVBTUVDLHVCQU5GLFFBT08sYUFQUDs7QUFTQSxTQUFRQyxZQUFSLEVBQXNCQyxpQkFBdEIsUUFBOEMscUJBQTlDOztBQUVBLFNBQVNDLGNBQVQsQ0FBd0JDLEdBQXhCLEVBQTZCO0FBQzNCQSxNQUFJRCxjQUFKO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0lBQ3FCRSxZO0FBQ25CLDBCQUEwQztBQUFBLFFBQTlCQyxPQUE4Qix1RUFBcEIsSUFBb0I7QUFBQSxRQUFkQyxPQUFjLHVFQUFKLEVBQUk7O0FBQUE7O0FBQ3hDLFNBQUtBLE9BQUwsR0FBZUEsT0FBZjtBQUNBLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7O0FBRUEsU0FBS0MsYUFBTCxHQUFxQixLQUFLQSxhQUFMLENBQW1CQyxJQUFuQixDQUF3QixJQUF4QixDQUFyQjtBQUNBLFNBQUtDLGFBQUwsR0FBcUIsS0FBS0EsYUFBTCxDQUFtQkQsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBckI7O0FBRUEsU0FBS0UsVUFBTCxDQUFnQk4sT0FBaEI7O0FBRUE7QUFUd0MsUUFVakNPLE1BVmlDLEdBVXZCTixPQVZ1QixDQVVqQ00sTUFWaUM7O0FBV3hDLFFBQUlBLE1BQUosRUFBWTtBQUNWLFdBQUtDLEVBQUwsQ0FBUUQsTUFBUjtBQUNEO0FBQ0Y7Ozs7K0JBRVVQLE8sRUFBUztBQUFBOztBQUNsQixVQUFJLEtBQUtBLE9BQVQsRUFBa0I7QUFDaEI7QUFDQSxhQUFLUyxPQUFMO0FBQ0Q7QUFDRCxXQUFLVCxPQUFMLEdBQWVBLE9BQWY7QUFDQSxVQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaO0FBQ0Q7O0FBUmlCLFVBVVhDLE9BVlcsR0FVQSxJQVZBLENBVVhBLE9BVlc7O0FBV2xCLFVBQU1TLGVBQWVULFFBQVFoQixPQUFSLElBQW1CQSxPQUF4Qzs7QUFFQSxXQUFLMEIsT0FBTCxHQUFlLElBQUlELFlBQUosQ0FBaUJWLE9BQWpCLEVBQTBCLEVBQUNZLGFBQWFYLFFBQVFXLFdBQVIsSUFBdUJwQixXQUFyQyxFQUExQixFQUNaZ0IsRUFEWSxDQUNULGNBRFMsRUFDTyxLQUFLTCxhQURaLENBQWY7O0FBR0EsVUFBSSxDQUFDRixRQUFRVyxXQUFiLEVBQTBCO0FBQ3hCO0FBQ0E7QUFDQUMsZUFBT0MsSUFBUCxDQUFZckIseUJBQVosRUFBdUNzQixPQUF2QyxDQUErQyxnQkFBUTtBQUNyRCxjQUFNQyxhQUFhLE1BQUtMLE9BQUwsQ0FBYU0sR0FBYixDQUFpQkMsSUFBakIsQ0FBbkI7QUFDQSxjQUFJRixVQUFKLEVBQWdCO0FBQ2R2QixzQ0FBMEJ5QixJQUExQixFQUFnQ0gsT0FBaEMsQ0FBd0MscUJBQWE7QUFDbkRDLHlCQUFXRyxhQUFYLENBQXlCQyxTQUF6QjtBQUNELGFBRkQ7QUFHRDtBQUNGLFNBUEQ7QUFRRDs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxXQUFLQyxVQUFMLEdBQWtCLElBQUluQyxVQUFKLENBQWVjLE9BQWYsRUFBd0IsS0FBS0ssYUFBN0IsRUFBNEMsRUFBQ2lCLFFBQVEsS0FBVCxFQUE1QyxDQUFsQjtBQUNBLFdBQUtDLFNBQUwsR0FBaUIsSUFBSXBDLFNBQUosQ0FBY2EsT0FBZCxFQUF1QixLQUFLSyxhQUE1QixFQUEyQyxFQUFDaUIsUUFBUSxLQUFULEVBQTNDLENBQWpCO0FBQ0EsV0FBS0UsUUFBTCxHQUFnQixJQUFJcEMsUUFBSixDQUFhWSxPQUFiLEVBQXNCLEtBQUtLLGFBQTNCLEVBQTBDLEVBQUNpQixRQUFRLEtBQVQsRUFBMUMsQ0FBaEI7O0FBRUEsVUFBSXJCLFFBQVF3QixXQUFaLEVBQXlCO0FBQ3ZCO0FBQ0F6QixnQkFBUTBCLGdCQUFSLENBQXlCLGFBQXpCLEVBQXdDN0IsY0FBeEM7QUFDRDs7QUFFRDtBQUNBLFdBQUtLLGFBQUwsQ0FBbUJhLE9BQW5CLENBQTJCLGdCQUFrRDtBQUFBLFlBQWhEWSxjQUFnRCxRQUFoREEsY0FBZ0Q7QUFBQSxZQUFoQ0MsVUFBZ0MsUUFBaENBLFVBQWdDO0FBQUEsWUFBcEJDLGNBQW9CLFFBQXBCQSxjQUFvQjs7QUFDM0U7QUFDQSxjQUFLQyxpQkFBTCxDQUF1QkgsY0FBdkIsRUFBdUMsSUFBdkM7QUFDQSxjQUFLaEIsT0FBTCxDQUFhSCxFQUFiLENBQWdCb0IsVUFBaEIsRUFBNEJDLGNBQTVCO0FBQ0QsT0FKRDtBQUtEOztBQUVEOzs7OzhCQUNVO0FBQ1IsVUFBSSxLQUFLN0IsT0FBVCxFQUFrQjtBQUNoQixhQUFLQSxPQUFMLENBQWErQixtQkFBYixDQUFpQyxhQUFqQyxFQUFnRGxDLGNBQWhEOztBQUVBO0FBQ0E7QUFDQSxhQUFLd0IsVUFBTCxDQUFnQlosT0FBaEI7QUFDQSxhQUFLYyxTQUFMLENBQWVkLE9BQWY7QUFDQSxhQUFLZSxRQUFMLENBQWNmLE9BQWQ7QUFDQSxhQUFLRSxPQUFMLENBQWFGLE9BQWI7O0FBRUEsYUFBS1ksVUFBTCxHQUFrQixJQUFsQjtBQUNBLGFBQUtFLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxhQUFLQyxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsYUFBS2IsT0FBTCxHQUFlLElBQWY7QUFDQSxhQUFLWCxPQUFMLEdBQWUsSUFBZjtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7dUJBQ0dnQyxLLEVBQU9DLE8sRUFBU0MsVSxFQUFZO0FBQzdCLFVBQUksT0FBT0YsS0FBUCxLQUFpQixRQUFyQixFQUErQjtBQUM3QixhQUFLRyxnQkFBTCxDQUFzQkgsS0FBdEIsRUFBNkJDLE9BQTdCLEVBQXNDQyxVQUF0QztBQUNELE9BRkQsTUFFTztBQUNMQSxxQkFBYUQsT0FBYjtBQUNBO0FBQ0EsYUFBSyxJQUFNRyxTQUFYLElBQXdCSixLQUF4QixFQUErQjtBQUM3QixlQUFLRyxnQkFBTCxDQUFzQkMsU0FBdEIsRUFBaUNKLE1BQU1JLFNBQU4sQ0FBakMsRUFBbURGLFVBQW5EO0FBQ0Q7QUFDRjtBQUNGOztBQUVEOzs7Ozs7Ozt3QkFLSUYsSyxFQUFPQyxPLEVBQVM7QUFDbEIsVUFBSSxPQUFPRCxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzdCLGFBQUtLLG1CQUFMLENBQXlCTCxLQUF6QixFQUFnQ0MsT0FBaEM7QUFDRCxPQUZELE1BRU87QUFDTDtBQUNBLGFBQUssSUFBTUcsU0FBWCxJQUF3QkosS0FBeEIsRUFBK0I7QUFDN0IsZUFBS0ssbUJBQUwsQ0FBeUJELFNBQXpCLEVBQW9DSixNQUFNSSxTQUFOLENBQXBDO0FBQ0Q7QUFDRjtBQUNGOztBQUVEOzs7Ozs7c0NBR2tCbEIsSSxFQUFNb0IsTyxFQUFTO0FBQUEsVUFDeEIzQixPQUR3QixHQUNiLElBRGEsQ0FDeEJBLE9BRHdCOztBQUUvQixVQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaO0FBQ0Q7QUFDRCxVQUFNSyxhQUFhTCxRQUFRTSxHQUFSLENBQVlDLElBQVosQ0FBbkI7QUFDQSxVQUFJRixVQUFKLEVBQWdCO0FBQ2RBLG1CQUFXdUIsR0FBWCxDQUFlLEVBQUNqQixRQUFRZ0IsT0FBVCxFQUFmOztBQUVBLFlBQU1FLHNCQUFzQjlDLHdCQUF3QndCLElBQXhCLENBQTVCO0FBQ0EsWUFBSXNCLHVCQUF1QixDQUFDLEtBQUt2QyxPQUFMLENBQWFXLFdBQXpDLEVBQXNEO0FBQ3BEO0FBQ0E7QUFDQTRCLDhCQUFvQnpCLE9BQXBCLENBQTRCLHFCQUFhO0FBQ3ZDLGdCQUFNMEIsa0JBQWtCOUIsUUFBUU0sR0FBUixDQUFZRyxTQUFaLENBQXhCO0FBQ0EsZ0JBQUlrQixPQUFKLEVBQWE7QUFDWDtBQUNBRyw4QkFBZ0JDLGNBQWhCLENBQStCeEIsSUFBL0I7QUFDRCxhQUhELE1BR087QUFDTDtBQUNBdUIsOEJBQWdCRSxrQkFBaEIsQ0FBbUN6QixJQUFuQztBQUNEO0FBQ0YsV0FURDtBQVVEO0FBQ0Y7QUFDRCxXQUFLRyxVQUFMLENBQWdCdUIsZUFBaEIsQ0FBZ0MxQixJQUFoQyxFQUFzQ29CLE9BQXRDO0FBQ0EsV0FBS2YsU0FBTCxDQUFlcUIsZUFBZixDQUErQjFCLElBQS9CLEVBQXFDb0IsT0FBckM7QUFDQSxXQUFLZCxRQUFMLENBQWNvQixlQUFkLENBQThCMUIsSUFBOUIsRUFBb0NvQixPQUFwQztBQUNEOztBQUVEOzs7Ozs7cUNBR2lCTixLLEVBQU9DLE8sRUFBNEI7QUFBQSxVQUFuQkMsVUFBbUIsdUVBQU4sSUFBTTtBQUFBLFVBQzNDdkIsT0FEMkMsR0FDakIsSUFEaUIsQ0FDM0NBLE9BRDJDO0FBQUEsVUFDbENULGFBRGtDLEdBQ2pCLElBRGlCLENBQ2xDQSxhQURrQzs7QUFFbEQsVUFBTTJCLGlCQUFpQixLQUFLZ0IsaUJBQUwsQ0FBdUJiLEtBQXZCLEVBQThCQyxPQUE5QixFQUF1Q0MsVUFBdkMsQ0FBdkI7QUFDQTtBQUNBLFVBQU1OLGFBQWFyQyxzQkFBc0J5QyxLQUF0QixLQUFnQ0EsS0FBbkQ7QUFDQTtBQUNBLFVBQU1MLGlCQUFpQnJDLHFCQUFxQnNDLFVBQXJCLEtBQW9DQSxVQUEzRDtBQUNBO0FBQ0EsV0FBS0UsaUJBQUwsQ0FBdUJILGNBQXZCLEVBQXVDLElBQXZDOztBQUVBO0FBQ0EsVUFBTW1CLHdCQUF3QjVDLGNBQWM2QyxNQUFkLENBQXFCLGlCQUFTO0FBQzFELGVBQU9DLE1BQU1wQixVQUFOLEtBQXFCQSxVQUFyQixJQUNMb0IsTUFBTWQsVUFBTixLQUFxQkEsVUFEaEIsS0FFSixDQUFDYyxNQUFNZCxVQUFQLElBQXFCYyxNQUFNZCxVQUFOLENBQWlCZSxRQUFqQixDQUEwQmYsVUFBMUIsQ0FGakIsQ0FBUDtBQUdELE9BSjZCLENBQTlCOztBQU1BO0FBQ0FoQyxvQkFBY2dELElBQWQsQ0FBbUIsRUFBQ2xCLFlBQUQsRUFBUUosc0JBQVIsRUFBb0JELDhCQUFwQixFQUFvQ08sc0JBQXBDO0FBQ2pCRCx3QkFEaUIsRUFDUkosOEJBRFEsRUFBbkI7O0FBR0E7QUFDQTtBQUNBaUIsNEJBQXNCL0IsT0FBdEIsQ0FBOEI7QUFBQSxlQUFTSixRQUFRd0MsR0FBUixDQUFZdkIsVUFBWixFQUF3Qm9CLE1BQU1uQixjQUE5QixDQUFUO0FBQUEsT0FBOUI7QUFDQSxVQUFJbEIsT0FBSixFQUFhO0FBQ1hBLGdCQUFRSCxFQUFSLENBQVdvQixVQUFYLEVBQXVCQyxjQUF2QjtBQUNEO0FBQ0RpQiw0QkFBc0IvQixPQUF0QixDQUE4QjtBQUFBLGVBQVNKLFFBQVFILEVBQVIsQ0FBV29CLFVBQVgsRUFBdUJvQixNQUFNbkIsY0FBN0IsQ0FBVDtBQUFBLE9BQTlCO0FBQ0Q7O0FBRUQ7Ozs7Ozt3Q0FHb0JHLEssRUFBT0MsTyxFQUFTO0FBQUEsVUFDM0J0QixPQUQyQixHQUNELElBREMsQ0FDM0JBLE9BRDJCO0FBQUEsVUFDbEJULGFBRGtCLEdBQ0QsSUFEQyxDQUNsQkEsYUFEa0I7O0FBRWxDLFVBQUlrRCxzQkFBc0IsS0FBMUI7O0FBRUE7QUFDQSxXQUFLLElBQUlDLElBQUluRCxjQUFjb0QsTUFBM0IsRUFBbUNELEdBQW5DLEdBQXlDO0FBQ3ZDLFlBQU1MLFFBQVE5QyxjQUFjbUQsQ0FBZCxDQUFkO0FBQ0EsWUFBSUwsTUFBTWhCLEtBQU4sS0FBZ0JBLEtBQWhCLElBQXlCZ0IsTUFBTWYsT0FBTixLQUFrQkEsT0FBL0MsRUFBd0Q7QUFDdEQ7QUFDQSxjQUFJdEIsT0FBSixFQUFhO0FBQ1hBLG9CQUFRd0MsR0FBUixDQUFZSCxNQUFNcEIsVUFBbEIsRUFBOEJvQixNQUFNbkIsY0FBcEM7QUFDRDtBQUNEO0FBQ0EzQix3QkFBY3FELE1BQWQsQ0FBcUJGLENBQXJCLEVBQXdCLENBQXhCO0FBQ0FELGdDQUFzQixJQUF0QjtBQUNEO0FBQ0Y7O0FBRUQsVUFBSUEsbUJBQUosRUFBeUI7QUFDdkI7QUFDQSxZQUFNeEIsYUFBYXJDLHNCQUFzQnlDLEtBQXRCLEtBQWdDQSxLQUFuRDtBQUNBO0FBQ0EsWUFBTUwsaUJBQWlCckMscUJBQXFCc0MsVUFBckIsS0FBb0NBLFVBQTNEO0FBQ0E7QUFDQSxZQUFNNEIsbUJBQW1CdEQsY0FBY3VELElBQWQsQ0FDdkI7QUFBQSxpQkFBU1QsTUFBTXJCLGNBQU4sS0FBeUJBLGNBQWxDO0FBQUEsU0FEdUIsQ0FBekI7QUFHQSxZQUFJLENBQUM2QixnQkFBTCxFQUF1QjtBQUNyQixlQUFLMUIsaUJBQUwsQ0FBdUJILGNBQXZCLEVBQXVDLEtBQXZDO0FBQ0Q7QUFDRjtBQUNGOztBQUVEOzs7Ozs7O3NDQUlrQitCLEksRUFBTXpCLE8sRUFBU0MsVSxFQUFZO0FBQUE7O0FBQzNDLGFBQU8saUJBQVM7QUFBQSxZQUNUeUIsWUFEUyxHQUNPM0IsS0FEUCxDQUNUMkIsWUFEUzs7O0FBR2QsWUFBSSxDQUFDQSxZQUFMLEVBQW1CO0FBQ2pCQSx5QkFBZSxPQUFLQyxlQUFMLENBQXFCNUIsS0FBckIsQ0FBZjtBQUNBQSxnQkFBTTJCLFlBQU4sR0FBcUJBLFlBQXJCO0FBQ0Q7O0FBRUQsWUFBTUUsWUFBWUYsYUFBYUcsT0FBYixJQUF3QkgsYUFBYUcsT0FBYixLQUF5QjVCLFVBQW5FOztBQUVBLFlBQUksQ0FBQzJCLFNBQUwsRUFBZ0I7QUFDZCxjQUFNRSxrQkFBa0IsQ0FBQzdCLFVBQUQsSUFBZUEsV0FBV2UsUUFBWCxDQUFvQmpCLE1BQU1nQyxRQUFOLENBQWVDLE1BQW5DLENBQXZDO0FBQ0EsY0FBSUYsZUFBSixFQUFxQjtBQUNuQjlCLG9CQUFRcEIsT0FBT3FELE1BQVAsQ0FBYyxFQUFkLEVBQWtCUCxZQUFsQixFQUFnQztBQUN0Q0Qsd0JBRHNDO0FBRXRDUywrQkFBaUIsMkJBQU07QUFDckIsb0JBQUksQ0FBQ1IsYUFBYUcsT0FBbEIsRUFBMkI7QUFDekJILCtCQUFhRyxPQUFiLEdBQXVCNUIsVUFBdkI7QUFDRDtBQUNGO0FBTnFDLGFBQWhDLENBQVI7QUFRRDtBQUNGO0FBQ0YsT0F2QkQ7QUF3QkQ7O0FBRUQ7Ozs7OztvQ0FHZ0JGLEssRUFBTztBQUFBLFVBQ2RoQyxPQURjLEdBQ0gsSUFERyxDQUNkQSxPQURjOzs7QUFHckIsYUFBT2EsT0FBT3FELE1BQVAsQ0FBYyxFQUFkLEVBQWtCbEMsS0FBbEIsRUFDTHJDLGFBQWFxQyxLQUFiLENBREssRUFFTHBDLGtCQUFrQm9DLEtBQWxCLEVBQXlCaEMsT0FBekIsQ0FGSyxFQUdMO0FBQ0U4RCxpQkFBUyxLQURYO0FBRUVNLHFCQUFhcEU7QUFGZixPQUhLLENBQVA7QUFPRDs7QUFFRDs7Ozs7Ozs7OztrQ0FPY2dDLEssRUFBTztBQUFBLFVBQ1pnQyxRQURZLEdBQ0FoQyxLQURBLENBQ1pnQyxRQURZOztBQUVuQixVQUFNSyxRQUFRaEYsb0JBQW9CMkUsU0FBU04sSUFBN0IsQ0FBZDtBQUNBLFVBQUlXLEtBQUosRUFBVztBQUNUO0FBQ0EsYUFBSzFELE9BQUwsQ0FBYTJELElBQWIsQ0FBa0JELEtBQWxCLEVBQXlCckMsS0FBekI7QUFDRDtBQUNGOztBQUVEOzs7Ozs7O2tDQUljQSxLLEVBQU87QUFDbkIsV0FBS3JCLE9BQUwsQ0FBYTJELElBQWIsQ0FBa0J0QyxNQUFNMEIsSUFBeEIsRUFBOEIxQixLQUE5QjtBQUNEOzs7Ozs7ZUE3UmtCakMsWSIsImZpbGUiOiJldmVudC1tYW5hZ2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE3IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtNYW5hZ2VyfSBmcm9tICcuL3V0aWxzL2hhbW1lcic7XG5cbmltcG9ydCBXaGVlbElucHV0IGZyb20gJy4vaW5wdXRzL3doZWVsLWlucHV0JztcbmltcG9ydCBNb3ZlSW5wdXQgZnJvbSAnLi9pbnB1dHMvbW92ZS1pbnB1dCc7XG5pbXBvcnQgS2V5SW5wdXQgZnJvbSAnLi9pbnB1dHMva2V5LWlucHV0JztcblxuaW1wb3J0IHtcbiAgQkFTSUNfRVZFTlRfQUxJQVNFUyxcbiAgRVZFTlRfUkVDT0dOSVpFUl9NQVAsXG4gIEdFU1RVUkVfRVZFTlRfQUxJQVNFUyxcbiAgUkVDT0dOSVpFUlMsXG4gIFJFQ09HTklaRVJfQ09NUEFUSUJMRV9NQVAsXG4gIFJFQ09HTklaRVJfRkFMTEJBQ0tfTUFQXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuaW1wb3J0IHt3aGljaEJ1dHRvbnMsIGdldE9mZnNldFBvc2l0aW9ufSBmcm9tICcuL3V0aWxzL2V2ZW50LXV0aWxzJztcblxuZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZXZ0KSB7XG4gIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG4vLyBVbmlmaWVkIEFQSSBmb3Igc3Vic2NyaWJpbmcgdG8gZXZlbnRzIGFib3V0IGJvdGhcbi8vIGJhc2ljIGlucHV0IGV2ZW50cyAoZS5nLiAnbW91c2Vtb3ZlJywgJ3RvdWNoc3RhcnQnLCAnd2hlZWwnKVxuLy8gYW5kIGdlc3R1cmFsIGlucHV0IChlLmcuICdjbGljaycsICd0YXAnLCAncGFuc3RhcnQnKS5cbi8vIERlbGVnYXRlcyBnZXN0dXJlIHJlbGF0ZWQgZXZlbnQgcmVnaXN0cmF0aW9uIGFuZCBoYW5kbGluZyB0byBIYW1tZXIuanMuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50ID0gbnVsbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmV2ZW50SGFuZGxlcnMgPSBbXTtcblxuICAgIHRoaXMuX29uQmFzaWNJbnB1dCA9IHRoaXMuX29uQmFzaWNJbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uT3RoZXJFdmVudCA9IHRoaXMuX29uT3RoZXJFdmVudC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5zZXRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgLy8gUmVnaXN0ZXIgYWxsIHBhc3NlZCBldmVudHMuXG4gICAgY29uc3Qge2V2ZW50c30gPSBvcHRpb25zO1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIHRoaXMub24oZXZlbnRzKTtcbiAgICB9XG4gIH1cblxuICBzZXRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAvLyB1bnJlZ2lzdGVyIGFsbCBldmVudHNcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXM7XG4gICAgY29uc3QgTWFuYWdlckNsYXNzID0gb3B0aW9ucy5NYW5hZ2VyIHx8IE1hbmFnZXI7XG5cbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgTWFuYWdlckNsYXNzKGVsZW1lbnQsIHtyZWNvZ25pemVyczogb3B0aW9ucy5yZWNvZ25pemVycyB8fCBSRUNPR05JWkVSU30pXG4gICAgICAub24oJ2hhbW1lci5pbnB1dCcsIHRoaXMuX29uQmFzaWNJbnB1dCk7XG5cbiAgICBpZiAoIW9wdGlvbnMucmVjb2duaXplcnMpIHtcbiAgICAgIC8vIFNldCBkZWZhdWx0IHJlY29nbml6ZSB3aXRoc1xuICAgICAgLy8gaHR0cDovL2hhbW1lcmpzLmdpdGh1Yi5pby9yZWNvZ25pemUtd2l0aC9cbiAgICAgIE9iamVjdC5rZXlzKFJFQ09HTklaRVJfQ09NUEFUSUJMRV9NQVApLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29nbml6ZXIgPSB0aGlzLm1hbmFnZXIuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgICAgIFJFQ09HTklaRVJfQ09NUEFUSUJMRV9NQVBbbmFtZV0uZm9yRWFjaChvdGhlck5hbWUgPT4ge1xuICAgICAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKG90aGVyTmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBldmVudHMgbm90IGhhbmRsZWQgYnkgSGFtbWVyLmpzOlxuICAgIC8vIC0gbW91c2Ugd2hlZWxcbiAgICAvLyAtIHBvaW50ZXIvdG91Y2gvbW91c2UgbW92ZVxuICAgIHRoaXMud2hlZWxJbnB1dCA9IG5ldyBXaGVlbElucHV0KGVsZW1lbnQsIHRoaXMuX29uT3RoZXJFdmVudCwge2VuYWJsZTogZmFsc2V9KTtcbiAgICB0aGlzLm1vdmVJbnB1dCA9IG5ldyBNb3ZlSW5wdXQoZWxlbWVudCwgdGhpcy5fb25PdGhlckV2ZW50LCB7ZW5hYmxlOiBmYWxzZX0pO1xuICAgIHRoaXMua2V5SW5wdXQgPSBuZXcgS2V5SW5wdXQoZWxlbWVudCwgdGhpcy5fb25PdGhlckV2ZW50LCB7ZW5hYmxlOiBmYWxzZX0pO1xuXG4gICAgaWYgKG9wdGlvbnMucmlnaHRCdXR0b24pIHtcbiAgICAgIC8vIEJsb2NrIHJpZ2h0IGNsaWNrXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgcHJldmVudERlZmF1bHQpO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIGFsbCBleGlzdGluZyBldmVudHNcbiAgICB0aGlzLmV2ZW50SGFuZGxlcnMuZm9yRWFjaCgoe3JlY29nbml6ZXJOYW1lLCBldmVudEFsaWFzLCB3cmFwcGVkSGFuZGxlcn0pID0+IHtcbiAgICAgIC8vIEVuYWJsZSByZWNvZ25pemVyIGZvciB0aGlzIGV2ZW50LlxuICAgICAgdGhpcy5fdG9nZ2xlUmVjb2duaXplcihyZWNvZ25pemVyTmFtZSwgdHJ1ZSk7XG4gICAgICB0aGlzLm1hbmFnZXIub24oZXZlbnRBbGlhcywgd3JhcHBlZEhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVGVhciBkb3duIGludGVybmFsIGV2ZW50IG1hbmFnZW1lbnQgaW1wbGVtZW50YXRpb25zLlxuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIHByZXZlbnREZWZhdWx0KTtcblxuICAgICAgLy8gd2hlZWxJbnB1dCBldGMuIGFyZSBjcmVhdGVkIGluIHNldEVsZW1lbnQoKSBhbmQgdGhlcmVmb3JlXG4gICAgICAvLyBjYW5ub3QgZXhpc3QgaWYgdGhlcmUgaXMgbm8gZWxlbWVudFxuICAgICAgdGhpcy53aGVlbElucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMubW92ZUlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMua2V5SW5wdXQuZGVzdHJveSgpO1xuICAgICAgdGhpcy5tYW5hZ2VyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy53aGVlbElucHV0ID0gbnVsbDtcbiAgICAgIHRoaXMubW92ZUlucHV0ID0gbnVsbDtcbiAgICAgIHRoaXMua2V5SW5wdXQgPSBudWxsO1xuICAgICAgdGhpcy5tYW5hZ2VyID0gbnVsbDtcbiAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVnaXN0ZXIgYW4gZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gYGV2ZW50YC5cbiAgb24oZXZlbnQsIGhhbmRsZXIsIHNyY0VsZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYWRkRXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBzcmNFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3JjRWxlbWVudCA9IGhhbmRsZXI7XG4gICAgICAvLyBJZiBgZXZlbnRgIGlzIGEgbWFwLCBjYWxsIGBvbigpYCBmb3IgZWFjaCBlbnRyeS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIGluIGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2FkZEV2ZW50SGFuZGxlcihldmVudE5hbWUsIGV2ZW50W2V2ZW50TmFtZV0sIHNyY0VsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJlZ2lzdGVyIGEgcHJldmlvdXNseS1yZWdpc3RlcmVkIGV2ZW50IGhhbmRsZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gZXZlbnQgICBBbiBldmVudCBuYW1lIChTdHJpbmcpIG9yIG1hcCBvZiBldmVudCBuYW1lcyB0byBoYW5kbGVyc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaGFuZGxlcl0gICAgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBgZXZlbnRgLlxuICAgKi9cbiAgb2ZmKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX3JlbW92ZUV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGBldmVudGAgaXMgYSBtYXAsIGNhbGwgYG9mZigpYCBmb3IgZWFjaCBlbnRyeS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIGluIGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUV2ZW50SGFuZGxlcihldmVudE5hbWUsIGV2ZW50W2V2ZW50TmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIEVuYWJsZS9kaXNhYmxlIHJlY29nbml6ZXIgZm9yIHRoZSBnaXZlbiBldmVudFxuICAgKi9cbiAgX3RvZ2dsZVJlY29nbml6ZXIobmFtZSwgZW5hYmxlZCkge1xuICAgIGNvbnN0IHttYW5hZ2VyfSA9IHRoaXM7XG4gICAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlY29nbml6ZXIgPSBtYW5hZ2VyLmdldChuYW1lKTtcbiAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgcmVjb2duaXplci5zZXQoe2VuYWJsZTogZW5hYmxlZH0pO1xuXG4gICAgICBjb25zdCBmYWxsYmFja1JlY29nbml6ZXJzID0gUkVDT0dOSVpFUl9GQUxMQkFDS19NQVBbbmFtZV07XG4gICAgICBpZiAoZmFsbGJhY2tSZWNvZ25pemVycyAmJiAhdGhpcy5vcHRpb25zLnJlY29nbml6ZXJzKSB7XG4gICAgICAgIC8vIFNldCBkZWZhdWx0IHJlcXVpcmUgZmFpbHVyZXNcbiAgICAgICAgLy8gaHR0cDovL2hhbW1lcmpzLmdpdGh1Yi5pby9yZXF1aXJlLWZhaWx1cmUvXG4gICAgICAgIGZhbGxiYWNrUmVjb2duaXplcnMuZm9yRWFjaChvdGhlck5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IG90aGVyUmVjb2duaXplciA9IG1hbmFnZXIuZ2V0KG90aGVyTmFtZSk7XG4gICAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoaXMgcmVjb2duaXplciB0byBmYWlsXG4gICAgICAgICAgICBvdGhlclJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUobmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERvIG5vdCB3YWl0IGZvciB0aGlzIHJlY29nbml6ZXIgdG8gZmFpbFxuICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLmRyb3BSZXF1aXJlRmFpbHVyZShuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLndoZWVsSW5wdXQuZW5hYmxlRXZlbnRUeXBlKG5hbWUsIGVuYWJsZWQpO1xuICAgIHRoaXMubW92ZUlucHV0LmVuYWJsZUV2ZW50VHlwZShuYW1lLCBlbmFibGVkKTtcbiAgICB0aGlzLmtleUlucHV0LmVuYWJsZUV2ZW50VHlwZShuYW1lLCBlbmFibGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRoZSBldmVudCByZWdpc3RyYXRpb24gZm9yIGEgc2luZ2xlIGV2ZW50ICsgaGFuZGxlci5cbiAgICovXG4gIF9hZGRFdmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIHNyY0VsZW1lbnQgPSBudWxsKSB7XG4gICAgY29uc3Qge21hbmFnZXIsIGV2ZW50SGFuZGxlcnN9ID0gdGhpcztcbiAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IHRoaXMuX3dyYXBFdmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIHNyY0VsZW1lbnQpO1xuICAgIC8vIEFsaWFzIHRvIGEgcmVjb2duaXplZCBnZXN0dXJlIGFzIG5lY2Vzc2FyeS5cbiAgICBjb25zdCBldmVudEFsaWFzID0gR0VTVFVSRV9FVkVOVF9BTElBU0VTW2V2ZW50XSB8fCBldmVudDtcbiAgICAvLyBHZXQgcmVjb2duaXplciBmb3IgdGhpcyBldmVudFxuICAgIGNvbnN0IHJlY29nbml6ZXJOYW1lID0gRVZFTlRfUkVDT0dOSVpFUl9NQVBbZXZlbnRBbGlhc10gfHwgZXZlbnRBbGlhcztcbiAgICAvLyBFbmFibGUgcmVjb2duaXplciBmb3IgdGhpcyBldmVudC5cbiAgICB0aGlzLl90b2dnbGVSZWNvZ25pemVyKHJlY29nbml6ZXJOYW1lLCB0cnVlKTtcblxuICAgIC8vIEZpbmQgYW5jZXN0b3JzXG4gICAgY29uc3QgYW5jZXN0b3JFdmVudEhhbmRsZXJzID0gZXZlbnRIYW5kbGVycy5maWx0ZXIoZW50cnkgPT4ge1xuICAgICAgcmV0dXJuIGVudHJ5LmV2ZW50QWxpYXMgPT09IGV2ZW50QWxpYXMgJiZcbiAgICAgICAgZW50cnkuc3JjRWxlbWVudCAhPT0gc3JjRWxlbWVudCAmJlxuICAgICAgICAoIWVudHJ5LnNyY0VsZW1lbnQgfHwgZW50cnkuc3JjRWxlbWVudC5jb250YWlucyhzcmNFbGVtZW50KSk7XG4gICAgfSk7XG5cbiAgICAvLyBTYXZlIHdyYXBwZWQgaGFuZGxlclxuICAgIGV2ZW50SGFuZGxlcnMucHVzaCh7ZXZlbnQsIGV2ZW50QWxpYXMsIHJlY29nbml6ZXJOYW1lLCBzcmNFbGVtZW50LFxuICAgICAgaGFuZGxlciwgd3JhcHBlZEhhbmRsZXJ9KTtcblxuICAgIC8vIFNvcnQgaGFuZGxlcnMgYnkgRE9NIGhpZXJhcmNoeVxuICAgIC8vIFNvIHRoZSBldmVudCB3aWxsIGFsd2F5cyBmaXJlIGZpcnN0IG9uIGNoaWxkIG5vZGVzXG4gICAgYW5jZXN0b3JFdmVudEhhbmRsZXJzLmZvckVhY2goZW50cnkgPT4gbWFuYWdlci5vZmYoZXZlbnRBbGlhcywgZW50cnkud3JhcHBlZEhhbmRsZXIpKTtcbiAgICBpZiAobWFuYWdlcikge1xuICAgICAgbWFuYWdlci5vbihldmVudEFsaWFzLCB3cmFwcGVkSGFuZGxlcik7XG4gICAgfVxuICAgIGFuY2VzdG9yRXZlbnRIYW5kbGVycy5mb3JFYWNoKGVudHJ5ID0+IG1hbmFnZXIub24oZXZlbnRBbGlhcywgZW50cnkud3JhcHBlZEhhbmRsZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRoZSBldmVudCBkZXJlZ2lzdHJhdGlvbiBmb3IgYSBzaW5nbGUgZXZlbnQgKyBoYW5kbGVyLlxuICAgKi9cbiAgX3JlbW92ZUV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlcikge1xuICAgIGNvbnN0IHttYW5hZ2VyLCBldmVudEhhbmRsZXJzfSA9IHRoaXM7XG4gICAgbGV0IGV2ZW50SGFuZGxlclJlbW92ZWQgPSBmYWxzZTtcblxuICAgIC8vIEZpbmQgc2F2ZWQgaGFuZGxlciBpZiBhbnkuXG4gICAgZm9yIChsZXQgaSA9IGV2ZW50SGFuZGxlcnMubGVuZ3RoOyBpLS07KSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGV2ZW50SGFuZGxlcnNbaV07XG4gICAgICBpZiAoZW50cnkuZXZlbnQgPT09IGV2ZW50ICYmIGVudHJ5LmhhbmRsZXIgPT09IGhhbmRsZXIpIHtcbiAgICAgICAgLy8gRGVyZWdpc3RlciBldmVudCBoYW5kbGVyLlxuICAgICAgICBpZiAobWFuYWdlcikge1xuICAgICAgICAgIG1hbmFnZXIub2ZmKGVudHJ5LmV2ZW50QWxpYXMsIGVudHJ5LndyYXBwZWRIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEZWxldGUgc2F2ZWQgaGFuZGxlclxuICAgICAgICBldmVudEhhbmRsZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgZXZlbnRIYW5kbGVyUmVtb3ZlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50SGFuZGxlclJlbW92ZWQpIHtcbiAgICAgIC8vIEFsaWFzIHRvIGEgcmVjb2duaXplZCBnZXN0dXJlIGFzIG5lY2Vzc2FyeS5cbiAgICAgIGNvbnN0IGV2ZW50QWxpYXMgPSBHRVNUVVJFX0VWRU5UX0FMSUFTRVNbZXZlbnRdIHx8IGV2ZW50O1xuICAgICAgLy8gR2V0IHJlY29nbml6ZXIgZm9yIHRoaXMgZXZlbnRcbiAgICAgIGNvbnN0IHJlY29nbml6ZXJOYW1lID0gRVZFTlRfUkVDT0dOSVpFUl9NQVBbZXZlbnRBbGlhc10gfHwgZXZlbnRBbGlhcztcbiAgICAgIC8vIERpc2FibGUgcmVjb2duaXplciBpZiBubyBtb3JlIGhhbmRsZXJzIGFyZSBhdHRhY2hlZCB0byBpdHMgZXZlbnRzXG4gICAgICBjb25zdCBpc1JlY29nbml6ZXJVc2VkID0gZXZlbnRIYW5kbGVycy5maW5kKFxuICAgICAgICBlbnRyeSA9PiBlbnRyeS5yZWNvZ25pemVyTmFtZSA9PT0gcmVjb2duaXplck5hbWVcbiAgICAgICk7XG4gICAgICBpZiAoIWlzUmVjb2duaXplclVzZWQpIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlUmVjb2duaXplcihyZWNvZ25pemVyTmFtZSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGV2ZW50IGhhbmRsZXIgdGhhdCBhbGlhc2VzIGV2ZW50cyBhbmQgYWRkIHByb3BzIGJlZm9yZSBwYXNzaW5nXG4gICAqIHRvIHRoZSByZWFsIGhhbmRsZXIuXG4gICAqL1xuICBfd3JhcEV2ZW50SGFuZGxlcih0eXBlLCBoYW5kbGVyLCBzcmNFbGVtZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50ID0+IHtcbiAgICAgIGxldCB7bWpvbG5pckV2ZW50fSA9IGV2ZW50O1xuXG4gICAgICBpZiAoIW1qb2xuaXJFdmVudCkge1xuICAgICAgICBtam9sbmlyRXZlbnQgPSB0aGlzLl9ub3JtYWxpemVFdmVudChldmVudCk7XG4gICAgICAgIGV2ZW50Lm1qb2xuaXJFdmVudCA9IG1qb2xuaXJFdmVudDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNTdG9wcGVkID0gbWpvbG5pckV2ZW50LmhhbmRsZWQgJiYgbWpvbG5pckV2ZW50LmhhbmRsZWQgIT09IHNyY0VsZW1lbnQ7XG5cbiAgICAgIGlmICghaXNTdG9wcGVkKSB7XG4gICAgICAgIGNvbnN0IGlzRnJvbURlY2VuZGFudCA9ICFzcmNFbGVtZW50IHx8IHNyY0VsZW1lbnQuY29udGFpbnMoZXZlbnQuc3JjRXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGlzRnJvbURlY2VuZGFudCkge1xuICAgICAgICAgIGhhbmRsZXIoT2JqZWN0LmFzc2lnbih7fSwgbWpvbG5pckV2ZW50LCB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghbWpvbG5pckV2ZW50LmhhbmRsZWQpIHtcbiAgICAgICAgICAgICAgICBtam9sbmlyRXZlbnQuaGFuZGxlZCA9IHNyY0VsZW1lbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgaGFtbWVyanMgYW5kIGN1c3RvbSBldmVudHMgdG8gaGF2ZSBwcmVkaWN0YWJsZSBmaWVsZHMuXG4gICAqL1xuICBfbm9ybWFsaXplRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB7ZWxlbWVudH0gPSB0aGlzO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LFxuICAgICAgd2hpY2hCdXR0b25zKGV2ZW50KSxcbiAgICAgIGdldE9mZnNldFBvc2l0aW9uKGV2ZW50LCBlbGVtZW50KSxcbiAgICAgIHtcbiAgICAgICAgaGFuZGxlZDogZmFsc2UsXG4gICAgICAgIHJvb3RFbGVtZW50OiBlbGVtZW50XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYmFzaWMgZXZlbnRzIHVzaW5nIHRoZSAnaGFtbWVyLmlucHV0JyBIYW1tZXIuanMgQVBJOlxuICAgKiBCZWZvcmUgcnVubmluZyBSZWNvZ25pemVycywgSGFtbWVyIGVtaXRzIGEgJ2hhbW1lci5pbnB1dCcgZXZlbnRcbiAgICogd2l0aCB0aGUgYmFzaWMgZXZlbnQgaW5mby4gVGhpcyBmdW5jdGlvbiBlbWl0cyBhbGwgYmFzaWMgZXZlbnRzXG4gICAqIGFsaWFzZWQgdG8gdGhlIFwiY2xhc3NcIiBvZiBldmVudCByZWNlaXZlZC5cbiAgICogU2VlIGNvbnN0YW50cy5CQVNJQ19FVkVOVF9DTEFTU0VTIGJhc2ljIGV2ZW50IGNsYXNzIGRlZmluaXRpb25zLlxuICAgKi9cbiAgX29uQmFzaWNJbnB1dChldmVudCkge1xuICAgIGNvbnN0IHtzcmNFdmVudH0gPSBldmVudDtcbiAgICBjb25zdCBhbGlhcyA9IEJBU0lDX0VWRU5UX0FMSUFTRVNbc3JjRXZlbnQudHlwZV07XG4gICAgaWYgKGFsaWFzKSB7XG4gICAgICAvLyBmaXJlIGFsbCBldmVudHMgYWxpYXNlZCB0byBzcmNFdmVudC50eXBlXG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdChhbGlhcywgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgZXZlbnRzIG5vdCBzdXBwb3J0ZWQgYnkgSGFtbWVyLmpzLFxuICAgKiBhbmQgcGlwZSBiYWNrIG91dCB0aHJvdWdoIHNhbWUgKEhhbW1lcikgY2hhbm5lbCB1c2VkIGJ5IG90aGVyIGV2ZW50cy5cbiAgICovXG4gIF9vbk90aGVyRXZlbnQoZXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuZW1pdChldmVudC50eXBlLCBldmVudCk7XG4gIH1cbn1cbiJdfQ==
  47431. /***/ }),
  47432. /* 673 */
  47433. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  47434. "use strict";
  47435. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants__ = __webpack_require__(114);
  47436. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  47437. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  47438. // Copyright (c) 2017 Uber Technologies, Inc.
  47439. //
  47440. // Permission is hereby granted, free of charge, to any person obtaining a copy
  47441. // of this software and associated documentation files (the "Software"), to deal
  47442. // in the Software without restriction, including without limitation the rights
  47443. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  47444. // copies of the Software, and to permit persons to whom the Software is
  47445. // furnished to do so, subject to the following conditions:
  47446. //
  47447. // The above copyright notice and this permission notice shall be included in
  47448. // all copies or substantial portions of the Software.
  47449. //
  47450. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  47451. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  47452. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  47453. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  47454. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  47455. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  47456. // THE SOFTWARE.
  47457. var KEY_EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants__["g" /* INPUT_EVENT_TYPES */].KEY_EVENTS;
  47458. var DOWN_EVENT_TYPE = 'keydown';
  47459. var UP_EVENT_TYPE = 'keyup';
  47460. var KeyInput = function () {
  47461. function KeyInput(element, callback) {
  47462. var _this = this;
  47463. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  47464. _classCallCheck(this, KeyInput);
  47465. this.element = element;
  47466. this.callback = callback;
  47467. this.options = Object.assign({ enable: true }, options);
  47468. this.enableDownEvent = this.options.enable;
  47469. this.enableUpEvent = this.options.enable;
  47470. this.events = KEY_EVENTS.concat(options.events || []);
  47471. this.handleEvent = this.handleEvent.bind(this);
  47472. element.tabIndex = 1;
  47473. element.style.outline = 'none';
  47474. this.events.forEach(function (event) {
  47475. return element.addEventListener(event, _this.handleEvent);
  47476. });
  47477. }
  47478. _createClass(KeyInput, [{
  47479. key: 'destroy',
  47480. value: function destroy() {
  47481. var _this2 = this;
  47482. this.events.forEach(function (event) {
  47483. return _this2.element.removeEventListener(event, _this2.handleEvent);
  47484. });
  47485. }
  47486. /**
  47487. * Enable this input (begin processing events)
  47488. * if the specified event type is among those handled by this input.
  47489. */
  47490. }, {
  47491. key: 'enableEventType',
  47492. value: function enableEventType(eventType, enabled) {
  47493. if (eventType === DOWN_EVENT_TYPE) {
  47494. this.enableDownEvent = enabled;
  47495. }
  47496. if (eventType === UP_EVENT_TYPE) {
  47497. this.enableUpEvent = enabled;
  47498. }
  47499. }
  47500. }, {
  47501. key: 'handleEvent',
  47502. value: function handleEvent(event) {
  47503. // Ignore if focused on text input
  47504. var targetElement = event.target || event.srcElement;
  47505. if (targetElement.tagName === 'INPUT' && targetElement.type === 'text' || targetElement.tagName === 'TEXTAREA') {
  47506. return;
  47507. }
  47508. if (this.enableDownEvent && event.type === 'keydown') {
  47509. this.callback({
  47510. type: DOWN_EVENT_TYPE,
  47511. srcEvent: event,
  47512. key: event.key,
  47513. target: event.target
  47514. });
  47515. }
  47516. if (this.enableUpEvent && event.type === 'keyup') {
  47517. this.callback({
  47518. type: UP_EVENT_TYPE,
  47519. srcEvent: event,
  47520. key: event.key,
  47521. target: event.target
  47522. });
  47523. }
  47524. }
  47525. }]);
  47526. return KeyInput;
  47527. }();
  47528. /* harmony default export */ __webpack_exports__["a"] = (KeyInput);
  47529. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnB1dHMva2V5LWlucHV0LmpzIl0sIm5hbWVzIjpbIklOUFVUX0VWRU5UX1RZUEVTIiwiS0VZX0VWRU5UUyIsIkRPV05fRVZFTlRfVFlQRSIsIlVQX0VWRU5UX1RZUEUiLCJLZXlJbnB1dCIsImVsZW1lbnQiLCJjYWxsYmFjayIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJlbmFibGUiLCJlbmFibGVEb3duRXZlbnQiLCJlbmFibGVVcEV2ZW50IiwiZXZlbnRzIiwiY29uY2F0IiwiaGFuZGxlRXZlbnQiLCJiaW5kIiwidGFiSW5kZXgiLCJzdHlsZSIsIm91dGxpbmUiLCJmb3JFYWNoIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV2ZW50VHlwZSIsImVuYWJsZWQiLCJ0YXJnZXRFbGVtZW50IiwidGFyZ2V0Iiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJ0eXBlIiwic3JjRXZlbnQiLCJrZXkiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFRQSxpQkFBUixRQUFnQyxjQUFoQzs7SUFFT0MsVSxHQUFjRCxpQixDQUFkQyxVOztBQUNQLElBQU1DLGtCQUFrQixTQUF4QjtBQUNBLElBQU1DLGdCQUFnQixPQUF0Qjs7SUFFcUJDLFE7QUFDbkIsb0JBQVlDLE9BQVosRUFBcUJDLFFBQXJCLEVBQTZDO0FBQUE7O0FBQUEsUUFBZEMsT0FBYyx1RUFBSixFQUFJOztBQUFBOztBQUMzQyxTQUFLRixPQUFMLEdBQWVBLE9BQWY7QUFDQSxTQUFLQyxRQUFMLEdBQWdCQSxRQUFoQjs7QUFFQSxTQUFLQyxPQUFMLEdBQWVDLE9BQU9DLE1BQVAsQ0FBYyxFQUFDQyxRQUFRLElBQVQsRUFBZCxFQUE4QkgsT0FBOUIsQ0FBZjtBQUNBLFNBQUtJLGVBQUwsR0FBdUIsS0FBS0osT0FBTCxDQUFhRyxNQUFwQztBQUNBLFNBQUtFLGFBQUwsR0FBcUIsS0FBS0wsT0FBTCxDQUFhRyxNQUFsQzs7QUFFQSxTQUFLRyxNQUFMLEdBQWNaLFdBQVdhLE1BQVgsQ0FBa0JQLFFBQVFNLE1BQVIsSUFBa0IsRUFBcEMsQ0FBZDs7QUFFQSxTQUFLRSxXQUFMLEdBQW1CLEtBQUtBLFdBQUwsQ0FBaUJDLElBQWpCLENBQXNCLElBQXRCLENBQW5COztBQUVBWCxZQUFRWSxRQUFSLEdBQW1CLENBQW5CO0FBQ0FaLFlBQVFhLEtBQVIsQ0FBY0MsT0FBZCxHQUF3QixNQUF4QjtBQUNBLFNBQUtOLE1BQUwsQ0FBWU8sT0FBWixDQUFvQjtBQUFBLGFBQVNmLFFBQVFnQixnQkFBUixDQUF5QkMsS0FBekIsRUFBZ0MsTUFBS1AsV0FBckMsQ0FBVDtBQUFBLEtBQXBCO0FBQ0Q7Ozs7OEJBRVM7QUFBQTs7QUFDUixXQUFLRixNQUFMLENBQVlPLE9BQVosQ0FBb0I7QUFBQSxlQUFTLE9BQUtmLE9BQUwsQ0FBYWtCLG1CQUFiLENBQWlDRCxLQUFqQyxFQUF3QyxPQUFLUCxXQUE3QyxDQUFUO0FBQUEsT0FBcEI7QUFDRDs7QUFFRDs7Ozs7OztvQ0FJZ0JTLFMsRUFBV0MsTyxFQUFTO0FBQ2xDLFVBQUlELGNBQWN0QixlQUFsQixFQUFtQztBQUNqQyxhQUFLUyxlQUFMLEdBQXVCYyxPQUF2QjtBQUNEO0FBQ0QsVUFBSUQsY0FBY3JCLGFBQWxCLEVBQWlDO0FBQy9CLGFBQUtTLGFBQUwsR0FBcUJhLE9BQXJCO0FBQ0Q7QUFDRjs7O2dDQUVXSCxLLEVBQU87QUFDakI7QUFDQSxVQUFNSSxnQkFBZ0JKLE1BQU1LLE1BQU4sSUFBZ0JMLE1BQU1NLFVBQTVDO0FBQ0EsVUFBS0YsY0FBY0csT0FBZCxLQUEwQixPQUExQixJQUFxQ0gsY0FBY0ksSUFBZCxLQUF1QixNQUE3RCxJQUNGSixjQUFjRyxPQUFkLEtBQTBCLFVBRDVCLEVBQ3dDO0FBQ3RDO0FBQ0Q7O0FBRUQsVUFBSSxLQUFLbEIsZUFBTCxJQUF3QlcsTUFBTVEsSUFBTixLQUFlLFNBQTNDLEVBQXNEO0FBQ3BELGFBQUt4QixRQUFMLENBQWM7QUFDWndCLGdCQUFNNUIsZUFETTtBQUVaNkIsb0JBQVVULEtBRkU7QUFHWlUsZUFBS1YsTUFBTVUsR0FIQztBQUlaTCxrQkFBUUwsTUFBTUs7QUFKRixTQUFkO0FBTUQ7O0FBRUQsVUFBSSxLQUFLZixhQUFMLElBQXNCVSxNQUFNUSxJQUFOLEtBQWUsT0FBekMsRUFBa0Q7QUFDaEQsYUFBS3hCLFFBQUwsQ0FBYztBQUNad0IsZ0JBQU0zQixhQURNO0FBRVo0QixvQkFBVVQsS0FGRTtBQUdaVSxlQUFLVixNQUFNVSxHQUhDO0FBSVpMLGtCQUFRTCxNQUFNSztBQUpGLFNBQWQ7QUFNRDtBQUNGOzs7Ozs7ZUE1RGtCdkIsUSIsImZpbGUiOiJrZXktaW5wdXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTcgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge0lOUFVUX0VWRU5UX1RZUEVTfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5jb25zdCB7S0VZX0VWRU5UU30gPSBJTlBVVF9FVkVOVF9UWVBFUztcbmNvbnN0IERPV05fRVZFTlRfVFlQRSA9ICdrZXlkb3duJztcbmNvbnN0IFVQX0VWRU5UX1RZUEUgPSAna2V5dXAnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBLZXlJbnB1dCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe2VuYWJsZTogdHJ1ZX0sIG9wdGlvbnMpO1xuICAgIHRoaXMuZW5hYmxlRG93bkV2ZW50ID0gdGhpcy5vcHRpb25zLmVuYWJsZTtcbiAgICB0aGlzLmVuYWJsZVVwRXZlbnQgPSB0aGlzLm9wdGlvbnMuZW5hYmxlO1xuXG4gICAgdGhpcy5ldmVudHMgPSBLRVlfRVZFTlRTLmNvbmNhdChvcHRpb25zLmV2ZW50cyB8fCBbXSk7XG5cbiAgICB0aGlzLmhhbmRsZUV2ZW50ID0gdGhpcy5oYW5kbGVFdmVudC5iaW5kKHRoaXMpO1xuXG4gICAgZWxlbWVudC50YWJJbmRleCA9IDE7XG4gICAgZWxlbWVudC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuICAgIHRoaXMuZXZlbnRzLmZvckVhY2goZXZlbnQgPT4gZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCB0aGlzLmhhbmRsZUV2ZW50KSk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuZXZlbnRzLmZvckVhY2goZXZlbnQgPT4gdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHRoaXMuaGFuZGxlRXZlbnQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhpcyBpbnB1dCAoYmVnaW4gcHJvY2Vzc2luZyBldmVudHMpXG4gICAqIGlmIHRoZSBzcGVjaWZpZWQgZXZlbnQgdHlwZSBpcyBhbW9uZyB0aG9zZSBoYW5kbGVkIGJ5IHRoaXMgaW5wdXQuXG4gICAqL1xuICBlbmFibGVFdmVudFR5cGUoZXZlbnRUeXBlLCBlbmFibGVkKSB7XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gRE9XTl9FVkVOVF9UWVBFKSB7XG4gICAgICB0aGlzLmVuYWJsZURvd25FdmVudCA9IGVuYWJsZWQ7XG4gICAgfVxuICAgIGlmIChldmVudFR5cGUgPT09IFVQX0VWRU5UX1RZUEUpIHtcbiAgICAgIHRoaXMuZW5hYmxlVXBFdmVudCA9IGVuYWJsZWQ7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAvLyBJZ25vcmUgaWYgZm9jdXNlZCBvbiB0ZXh0IGlucHV0XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgIGlmICgodGFyZ2V0RWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnICYmIHRhcmdldEVsZW1lbnQudHlwZSA9PT0gJ3RleHQnKSB8fFxuICAgICAgdGFyZ2V0RWxlbWVudC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5hYmxlRG93bkV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJykge1xuICAgICAgdGhpcy5jYWxsYmFjayh7XG4gICAgICAgIHR5cGU6IERPV05fRVZFTlRfVFlQRSxcbiAgICAgICAgc3JjRXZlbnQ6IGV2ZW50LFxuICAgICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuYWJsZVVwRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgdGhpcy5jYWxsYmFjayh7XG4gICAgICAgIHR5cGU6IFVQX0VWRU5UX1RZUEUsXG4gICAgICAgIHNyY0V2ZW50OiBldmVudCxcbiAgICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
  47530. /***/ }),
  47531. /* 674 */
  47532. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  47533. "use strict";
  47534. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants__ = __webpack_require__(114);
  47535. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  47536. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  47537. // Copyright (c) 2017 Uber Technologies, Inc.
  47538. //
  47539. // Permission is hereby granted, free of charge, to any person obtaining a copy
  47540. // of this software and associated documentation files (the "Software"), to deal
  47541. // in the Software without restriction, including without limitation the rights
  47542. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  47543. // copies of the Software, and to permit persons to whom the Software is
  47544. // furnished to do so, subject to the following conditions:
  47545. //
  47546. // The above copyright notice and this permission notice shall be included in
  47547. // all copies or substantial portions of the Software.
  47548. //
  47549. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  47550. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  47551. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  47552. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  47553. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  47554. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  47555. // THE SOFTWARE.
  47556. var MOUSE_EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants__["g" /* INPUT_EVENT_TYPES */].MOUSE_EVENTS;
  47557. var MOVE_EVENT_TYPE = 'pointermove';
  47558. var LEAVE_EVENT_TYPE = 'pointerleave';
  47559. /**
  47560. * Hammer.js swallows 'move' events (for pointer/touch/mouse)
  47561. * when the pointer is not down. This class sets up a handler
  47562. * specifically for these events to work around this limitation.
  47563. * Note that this could be extended to more intelligently handle
  47564. * move events across input types, e.g. storing multiple simultaneous
  47565. * pointer/touch events, calculating speed/direction, etc.
  47566. */
  47567. var MoveInput = function () {
  47568. function MoveInput(element, callback) {
  47569. var _this = this;
  47570. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  47571. _classCallCheck(this, MoveInput);
  47572. this.element = element;
  47573. this.callback = callback;
  47574. this.pressed = false;
  47575. this.options = Object.assign({ enable: true }, options);
  47576. this.enableMoveEvent = this.options.enable;
  47577. this.enableLeaveEvent = this.options.enable;
  47578. this.events = MOUSE_EVENTS.concat(options.events || []);
  47579. this.handleEvent = this.handleEvent.bind(this);
  47580. this.events.forEach(function (event) {
  47581. return element.addEventListener(event, _this.handleEvent);
  47582. });
  47583. }
  47584. _createClass(MoveInput, [{
  47585. key: 'destroy',
  47586. value: function destroy() {
  47587. var _this2 = this;
  47588. this.events.forEach(function (event) {
  47589. return _this2.element.removeEventListener(event, _this2.handleEvent);
  47590. });
  47591. }
  47592. /**
  47593. * Enable this input (begin processing events)
  47594. * if the specified event type is among those handled by this input.
  47595. */
  47596. }, {
  47597. key: 'enableEventType',
  47598. value: function enableEventType(eventType, enabled) {
  47599. if (eventType === MOVE_EVENT_TYPE) {
  47600. this.enableMoveEvent = enabled;
  47601. }
  47602. if (eventType === LEAVE_EVENT_TYPE) {
  47603. this.enableLeaveEvent = enabled;
  47604. }
  47605. }
  47606. }, {
  47607. key: 'handleEvent',
  47608. value: function handleEvent(event) {
  47609. if (this.enableLeaveEvent) {
  47610. if (event.type === 'mouseleave') {
  47611. this.callback({
  47612. type: LEAVE_EVENT_TYPE,
  47613. srcEvent: event,
  47614. pointerType: 'mouse',
  47615. target: event.target
  47616. });
  47617. }
  47618. }
  47619. if (this.enableMoveEvent) {
  47620. switch (event.type) {
  47621. case 'mousedown':
  47622. if (event.button >= 0) {
  47623. // Button is down
  47624. this.pressed = true;
  47625. }
  47626. break;
  47627. case 'mousemove':
  47628. // Move events use `which` to track the button being pressed
  47629. if (event.which === 0) {
  47630. // Button is not down
  47631. this.pressed = false;
  47632. }
  47633. if (!this.pressed) {
  47634. // Drag events are emitted by hammer already
  47635. // we just need to emit the move event on hover
  47636. this.callback({
  47637. type: MOVE_EVENT_TYPE,
  47638. srcEvent: event,
  47639. pointerType: 'mouse',
  47640. target: event.target
  47641. });
  47642. }
  47643. break;
  47644. case 'mouseup':
  47645. this.pressed = false;
  47646. break;
  47647. default:
  47648. }
  47649. }
  47650. }
  47651. }]);
  47652. return MoveInput;
  47653. }();
  47654. /* harmony default export */ __webpack_exports__["a"] = (MoveInput);
  47655. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnB1dHMvbW92ZS1pbnB1dC5qcyJdLCJuYW1lcyI6WyJJTlBVVF9FVkVOVF9UWVBFUyIsIk1PVVNFX0VWRU5UUyIsIk1PVkVfRVZFTlRfVFlQRSIsIkxFQVZFX0VWRU5UX1RZUEUiLCJNb3ZlSW5wdXQiLCJlbGVtZW50IiwiY2FsbGJhY2siLCJvcHRpb25zIiwicHJlc3NlZCIsIk9iamVjdCIsImFzc2lnbiIsImVuYWJsZSIsImVuYWJsZU1vdmVFdmVudCIsImVuYWJsZUxlYXZlRXZlbnQiLCJldmVudHMiLCJjb25jYXQiLCJoYW5kbGVFdmVudCIsImJpbmQiLCJmb3JFYWNoIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV2ZW50VHlwZSIsImVuYWJsZWQiLCJ0eXBlIiwic3JjRXZlbnQiLCJwb2ludGVyVHlwZSIsInRhcmdldCIsImJ1dHRvbiIsIndoaWNoIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUUEsaUJBQVIsUUFBZ0MsY0FBaEM7O0lBRU9DLFksR0FBZ0JELGlCLENBQWhCQyxZOztBQUNQLElBQU1DLGtCQUFrQixhQUF4QjtBQUNBLElBQU1DLG1CQUFtQixjQUF6Qjs7QUFFQTs7Ozs7Ozs7O0lBUXFCQyxTO0FBRW5CLHFCQUFZQyxPQUFaLEVBQXFCQyxRQUFyQixFQUE2QztBQUFBOztBQUFBLFFBQWRDLE9BQWMsdUVBQUosRUFBSTs7QUFBQTs7QUFDM0MsU0FBS0YsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkEsUUFBaEI7QUFDQSxTQUFLRSxPQUFMLEdBQWUsS0FBZjs7QUFFQSxTQUFLRCxPQUFMLEdBQWVFLE9BQU9DLE1BQVAsQ0FBYyxFQUFDQyxRQUFRLElBQVQsRUFBZCxFQUE4QkosT0FBOUIsQ0FBZjtBQUNBLFNBQUtLLGVBQUwsR0FBdUIsS0FBS0wsT0FBTCxDQUFhSSxNQUFwQztBQUNBLFNBQUtFLGdCQUFMLEdBQXdCLEtBQUtOLE9BQUwsQ0FBYUksTUFBckM7O0FBRUEsU0FBS0csTUFBTCxHQUFjYixhQUFhYyxNQUFiLENBQW9CUixRQUFRTyxNQUFSLElBQWtCLEVBQXRDLENBQWQ7O0FBRUEsU0FBS0UsV0FBTCxHQUFtQixLQUFLQSxXQUFMLENBQWlCQyxJQUFqQixDQUFzQixJQUF0QixDQUFuQjtBQUNBLFNBQUtILE1BQUwsQ0FBWUksT0FBWixDQUFvQjtBQUFBLGFBQVNiLFFBQVFjLGdCQUFSLENBQXlCQyxLQUF6QixFQUFnQyxNQUFLSixXQUFyQyxDQUFUO0FBQUEsS0FBcEI7QUFDRDs7Ozs4QkFFUztBQUFBOztBQUNSLFdBQUtGLE1BQUwsQ0FBWUksT0FBWixDQUFvQjtBQUFBLGVBQVMsT0FBS2IsT0FBTCxDQUFhZ0IsbUJBQWIsQ0FBaUNELEtBQWpDLEVBQXdDLE9BQUtKLFdBQTdDLENBQVQ7QUFBQSxPQUFwQjtBQUNEOztBQUVEOzs7Ozs7O29DQUlnQk0sUyxFQUFXQyxPLEVBQVM7QUFDbEMsVUFBSUQsY0FBY3BCLGVBQWxCLEVBQW1DO0FBQ2pDLGFBQUtVLGVBQUwsR0FBdUJXLE9BQXZCO0FBQ0Q7QUFDRCxVQUFJRCxjQUFjbkIsZ0JBQWxCLEVBQW9DO0FBQ2xDLGFBQUtVLGdCQUFMLEdBQXdCVSxPQUF4QjtBQUNEO0FBQ0Y7OztnQ0FFV0gsSyxFQUFPO0FBQ2pCLFVBQUksS0FBS1AsZ0JBQVQsRUFBMkI7QUFDekIsWUFBSU8sTUFBTUksSUFBTixLQUFlLFlBQW5CLEVBQWlDO0FBQy9CLGVBQUtsQixRQUFMLENBQWM7QUFDWmtCLGtCQUFNckIsZ0JBRE07QUFFWnNCLHNCQUFVTCxLQUZFO0FBR1pNLHlCQUFhLE9BSEQ7QUFJWkMsb0JBQVFQLE1BQU1PO0FBSkYsV0FBZDtBQU1EO0FBQ0Y7O0FBRUQsVUFBSSxLQUFLZixlQUFULEVBQTBCO0FBQ3hCLGdCQUFRUSxNQUFNSSxJQUFkO0FBQ0EsZUFBSyxXQUFMO0FBQ0UsZ0JBQUlKLE1BQU1RLE1BQU4sSUFBZ0IsQ0FBcEIsRUFBdUI7QUFDckI7QUFDQSxtQkFBS3BCLE9BQUwsR0FBZSxJQUFmO0FBQ0Q7QUFDRDtBQUNGLGVBQUssV0FBTDtBQUNFO0FBQ0EsZ0JBQUlZLE1BQU1TLEtBQU4sS0FBZ0IsQ0FBcEIsRUFBdUI7QUFDckI7QUFDQSxtQkFBS3JCLE9BQUwsR0FBZSxLQUFmO0FBQ0Q7QUFDRCxnQkFBSSxDQUFDLEtBQUtBLE9BQVYsRUFBbUI7QUFDakI7QUFDQTtBQUNBLG1CQUFLRixRQUFMLENBQWM7QUFDWmtCLHNCQUFNdEIsZUFETTtBQUVadUIsMEJBQVVMLEtBRkU7QUFHWk0sNkJBQWEsT0FIRDtBQUlaQyx3QkFBUVAsTUFBTU87QUFKRixlQUFkO0FBTUQ7QUFDRDtBQUNGLGVBQUssU0FBTDtBQUNFLGlCQUFLbkIsT0FBTCxHQUFlLEtBQWY7QUFDQTtBQUNGO0FBM0JBO0FBNkJEO0FBRUY7Ozs7OztlQTlFa0JKLFMiLCJmaWxlIjoibW92ZS1pbnB1dC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxNyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7SU5QVVRfRVZFTlRfVFlQRVN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmNvbnN0IHtNT1VTRV9FVkVOVFN9ID0gSU5QVVRfRVZFTlRfVFlQRVM7XG5jb25zdCBNT1ZFX0VWRU5UX1RZUEUgPSAncG9pbnRlcm1vdmUnO1xuY29uc3QgTEVBVkVfRVZFTlRfVFlQRSA9ICdwb2ludGVybGVhdmUnO1xuXG4vKipcbiAqIEhhbW1lci5qcyBzd2FsbG93cyAnbW92ZScgZXZlbnRzIChmb3IgcG9pbnRlci90b3VjaC9tb3VzZSlcbiAqIHdoZW4gdGhlIHBvaW50ZXIgaXMgbm90IGRvd24uIFRoaXMgY2xhc3Mgc2V0cyB1cCBhIGhhbmRsZXJcbiAqIHNwZWNpZmljYWxseSBmb3IgdGhlc2UgZXZlbnRzIHRvIHdvcmsgYXJvdW5kIHRoaXMgbGltaXRhdGlvbi5cbiAqIE5vdGUgdGhhdCB0aGlzIGNvdWxkIGJlIGV4dGVuZGVkIHRvIG1vcmUgaW50ZWxsaWdlbnRseSBoYW5kbGVcbiAqIG1vdmUgZXZlbnRzIGFjcm9zcyBpbnB1dCB0eXBlcywgZS5nLiBzdG9yaW5nIG11bHRpcGxlIHNpbXVsdGFuZW91c1xuICogcG9pbnRlci90b3VjaCBldmVudHMsIGNhbGN1bGF0aW5nIHNwZWVkL2RpcmVjdGlvbiwgZXRjLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb3ZlSW5wdXQge1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe2VuYWJsZTogdHJ1ZX0sIG9wdGlvbnMpO1xuICAgIHRoaXMuZW5hYmxlTW92ZUV2ZW50ID0gdGhpcy5vcHRpb25zLmVuYWJsZTtcbiAgICB0aGlzLmVuYWJsZUxlYXZlRXZlbnQgPSB0aGlzLm9wdGlvbnMuZW5hYmxlO1xuXG4gICAgdGhpcy5ldmVudHMgPSBNT1VTRV9FVkVOVFMuY29uY2F0KG9wdGlvbnMuZXZlbnRzIHx8IFtdKTtcblxuICAgIHRoaXMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcyk7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaChldmVudCA9PiBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHRoaXMuaGFuZGxlRXZlbnQpKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaChldmVudCA9PiB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgdGhpcy5oYW5kbGVFdmVudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGlzIGlucHV0IChiZWdpbiBwcm9jZXNzaW5nIGV2ZW50cylcbiAgICogaWYgdGhlIHNwZWNpZmllZCBldmVudCB0eXBlIGlzIGFtb25nIHRob3NlIGhhbmRsZWQgYnkgdGhpcyBpbnB1dC5cbiAgICovXG4gIGVuYWJsZUV2ZW50VHlwZShldmVudFR5cGUsIGVuYWJsZWQpIHtcbiAgICBpZiAoZXZlbnRUeXBlID09PSBNT1ZFX0VWRU5UX1RZUEUpIHtcbiAgICAgIHRoaXMuZW5hYmxlTW92ZUV2ZW50ID0gZW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gTEVBVkVfRVZFTlRfVFlQRSkge1xuICAgICAgdGhpcy5lbmFibGVMZWF2ZUV2ZW50ID0gZW5hYmxlZDtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICh0aGlzLmVuYWJsZUxlYXZlRXZlbnQpIHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2VsZWF2ZScpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogTEVBVkVfRVZFTlRfVFlQRSxcbiAgICAgICAgICBzcmNFdmVudDogZXZlbnQsXG4gICAgICAgICAgcG9pbnRlclR5cGU6ICdtb3VzZScsXG4gICAgICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5hYmxlTW92ZUV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgICAgIGlmIChldmVudC5idXR0b24gPj0gMCkge1xuICAgICAgICAgIC8vIEJ1dHRvbiBpcyBkb3duXG4gICAgICAgICAgdGhpcy5wcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vdXNlbW92ZSc6XG4gICAgICAgIC8vIE1vdmUgZXZlbnRzIHVzZSBgd2hpY2hgIHRvIHRyYWNrIHRoZSBidXR0b24gYmVpbmcgcHJlc3NlZFxuICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDApIHtcbiAgICAgICAgICAvLyBCdXR0b24gaXMgbm90IGRvd25cbiAgICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgICAgIC8vIERyYWcgZXZlbnRzIGFyZSBlbWl0dGVkIGJ5IGhhbW1lciBhbHJlYWR5XG4gICAgICAgICAgLy8gd2UganVzdCBuZWVkIHRvIGVtaXQgdGhlIG1vdmUgZXZlbnQgb24gaG92ZXJcbiAgICAgICAgICB0aGlzLmNhbGxiYWNrKHtcbiAgICAgICAgICAgIHR5cGU6IE1PVkVfRVZFTlRfVFlQRSxcbiAgICAgICAgICAgIHNyY0V2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiAnbW91c2UnLFxuICAgICAgICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vdXNldXAnOlxuICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgfVxuICAgIH1cblxuICB9XG59XG4iXX0=
  47656. /***/ }),
  47657. /* 675 */
  47658. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  47659. "use strict";
  47660. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constants__ = __webpack_require__(114);
  47661. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_globals__ = __webpack_require__(282);
  47662. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_globals___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__utils_globals__);
  47663. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  47664. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  47665. // Copyright (c) 2017 Uber Technologies, Inc.
  47666. //
  47667. // Permission is hereby granted, free of charge, to any person obtaining a copy
  47668. // of this software and associated documentation files (the "Software"), to deal
  47669. // in the Software without restriction, including without limitation the rights
  47670. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  47671. // copies of the Software, and to permit persons to whom the Software is
  47672. // furnished to do so, subject to the following conditions:
  47673. //
  47674. // The above copyright notice and this permission notice shall be included in
  47675. // all copies or substantial portions of the Software.
  47676. //
  47677. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  47678. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  47679. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  47680. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  47681. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  47682. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  47683. // THE SOFTWARE.
  47684. var firefox = __WEBPACK_IMPORTED_MODULE_1__utils_globals__["userAgent"].indexOf('firefox') !== -1;
  47685. var WHEEL_EVENTS = __WEBPACK_IMPORTED_MODULE_0__constants__["g" /* INPUT_EVENT_TYPES */].WHEEL_EVENTS;
  47686. var EVENT_TYPE = 'wheel';
  47687. // Constants for normalizing input delta
  47688. var WHEEL_DELTA_MAGIC_SCALER = 4.000244140625;
  47689. var WHEEL_DELTA_PER_LINE = 40;
  47690. var TRACKPAD_MAX_DELTA = 4;
  47691. var TRACKPAD_MAX_DELTA_PER_TIME = 200;
  47692. // Slow down zoom if shift key is held for more precise zooming
  47693. var SHIFT_MULTIPLIER = 0.25;
  47694. var WheelInput = function () {
  47695. function WheelInput(element, callback) {
  47696. var _this = this;
  47697. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  47698. _classCallCheck(this, WheelInput);
  47699. this.element = element;
  47700. this.callback = callback;
  47701. this.options = Object.assign({ enable: true }, options);
  47702. this.time = 0;
  47703. this.wheelPosition = null;
  47704. this.type = null;
  47705. this.timeout = null;
  47706. this.lastValue = 0;
  47707. this.events = WHEEL_EVENTS.concat(options.events || []);
  47708. this.handleEvent = this.handleEvent.bind(this);
  47709. this.events.forEach(function (event) {
  47710. return element.addEventListener(event, _this.handleEvent);
  47711. });
  47712. }
  47713. _createClass(WheelInput, [{
  47714. key: 'destroy',
  47715. value: function destroy() {
  47716. var _this2 = this;
  47717. this.events.forEach(function (event) {
  47718. return _this2.element.removeEventListener(event, _this2.handleEvent);
  47719. });
  47720. }
  47721. /**
  47722. * Enable this input (begin processing events)
  47723. * if the specified event type is among those handled by this input.
  47724. */
  47725. }, {
  47726. key: 'enableEventType',
  47727. value: function enableEventType(eventType, enabled) {
  47728. if (eventType === EVENT_TYPE) {
  47729. this.options.enable = enabled;
  47730. }
  47731. }
  47732. /* eslint-disable complexity, max-statements */
  47733. }, {
  47734. key: 'handleEvent',
  47735. value: function handleEvent(event) {
  47736. if (!this.options.enable) {
  47737. return;
  47738. }
  47739. event.preventDefault();
  47740. var value = event.deltaY;
  47741. if (__WEBPACK_IMPORTED_MODULE_1__utils_globals__["window"].WheelEvent) {
  47742. // Firefox doubles the values on retina screens...
  47743. if (firefox && event.deltaMode === __WEBPACK_IMPORTED_MODULE_1__utils_globals__["window"].WheelEvent.DOM_DELTA_PIXEL) {
  47744. value /= __WEBPACK_IMPORTED_MODULE_1__utils_globals__["window"].devicePixelRatio;
  47745. }
  47746. if (event.deltaMode === __WEBPACK_IMPORTED_MODULE_1__utils_globals__["window"].WheelEvent.DOM_DELTA_LINE) {
  47747. value *= WHEEL_DELTA_PER_LINE;
  47748. }
  47749. }
  47750. var type = this.type,
  47751. timeout = this.timeout,
  47752. lastValue = this.lastValue,
  47753. time = this.time;
  47754. var now = (__WEBPACK_IMPORTED_MODULE_1__utils_globals__["window"] && __WEBPACK_IMPORTED_MODULE_1__utils_globals__["window"].performance || Date).now();
  47755. var timeDelta = now - (time || 0);
  47756. this.wheelPosition = {
  47757. x: event.clientX,
  47758. y: event.clientY
  47759. };
  47760. time = now;
  47761. if (value !== 0 && value % WHEEL_DELTA_MAGIC_SCALER === 0) {
  47762. // This one is definitely a mouse wheel event.
  47763. type = 'wheel';
  47764. // Normalize this value to match trackpad.
  47765. value = Math.floor(value / WHEEL_DELTA_MAGIC_SCALER);
  47766. } else if (value !== 0 && Math.abs(value) < TRACKPAD_MAX_DELTA) {
  47767. // This one is definitely a trackpad event because it is so small.
  47768. type = 'trackpad';
  47769. } else if (timeDelta > 400) {
  47770. // This is likely a new scroll action.
  47771. type = null;
  47772. lastValue = value;
  47773. // Start a timeout in case this was a singular event,
  47774. // and delay it by up to 40ms.
  47775. timeout = __WEBPACK_IMPORTED_MODULE_1__utils_globals__["window"].setTimeout(function setTimeout() {
  47776. this._onWheel(event, -lastValue, this.wheelPosition);
  47777. type = 'wheel';
  47778. }.bind(this), 40);
  47779. } else if (!type) {
  47780. // This is a repeating event, but we don't know the type of event just yet.
  47781. // If the delta per time is small, we assume it's a fast trackpad;
  47782. // otherwise we switch into wheel mode.
  47783. type = Math.abs(timeDelta * value) < TRACKPAD_MAX_DELTA_PER_TIME ? 'trackpad' : 'wheel';
  47784. // Make sure our delayed event isn't fired again, because we accumulate
  47785. // the previous event (which was less than 40ms ago) into this event.
  47786. if (timeout) {
  47787. __WEBPACK_IMPORTED_MODULE_1__utils_globals__["window"].clearTimeout(timeout);
  47788. timeout = null;
  47789. value += lastValue;
  47790. }
  47791. }
  47792. if (event.shiftKey && value) {
  47793. value = value * SHIFT_MULTIPLIER;
  47794. }
  47795. // Only fire the callback if we actually know
  47796. // what type of scrolling device the user uses.
  47797. if (type) {
  47798. this._onWheel(event, -value, this.wheelPosition);
  47799. }
  47800. }
  47801. }, {
  47802. key: '_onWheel',
  47803. value: function _onWheel(srcEvent, delta, position) {
  47804. this.callback({
  47805. type: EVENT_TYPE,
  47806. center: position,
  47807. delta: delta,
  47808. srcEvent: srcEvent,
  47809. pointerType: 'mouse',
  47810. target: srcEvent.target
  47811. });
  47812. }
  47813. }]);
  47814. return WheelInput;
  47815. }();
  47816. /* harmony default export */ __webpack_exports__["a"] = (WheelInput);
  47817. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnB1dHMvd2hlZWwtaW5wdXQuanMiXSwibmFtZXMiOlsiSU5QVVRfRVZFTlRfVFlQRVMiLCJ3aW5kb3ciLCJ1c2VyQWdlbnQiLCJmaXJlZm94IiwiaW5kZXhPZiIsIldIRUVMX0VWRU5UUyIsIkVWRU5UX1RZUEUiLCJXSEVFTF9ERUxUQV9NQUdJQ19TQ0FMRVIiLCJXSEVFTF9ERUxUQV9QRVJfTElORSIsIlRSQUNLUEFEX01BWF9ERUxUQSIsIlRSQUNLUEFEX01BWF9ERUxUQV9QRVJfVElNRSIsIlNISUZUX01VTFRJUExJRVIiLCJXaGVlbElucHV0IiwiZWxlbWVudCIsImNhbGxiYWNrIiwib3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsImVuYWJsZSIsInRpbWUiLCJ3aGVlbFBvc2l0aW9uIiwidHlwZSIsInRpbWVvdXQiLCJsYXN0VmFsdWUiLCJldmVudHMiLCJjb25jYXQiLCJoYW5kbGVFdmVudCIsImJpbmQiLCJmb3JFYWNoIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV2ZW50VHlwZSIsImVuYWJsZWQiLCJwcmV2ZW50RGVmYXVsdCIsInZhbHVlIiwiZGVsdGFZIiwiV2hlZWxFdmVudCIsImRlbHRhTW9kZSIsIkRPTV9ERUxUQV9QSVhFTCIsImRldmljZVBpeGVsUmF0aW8iLCJET01fREVMVEFfTElORSIsIm5vdyIsInBlcmZvcm1hbmNlIiwiRGF0ZSIsInRpbWVEZWx0YSIsIngiLCJjbGllbnRYIiwieSIsImNsaWVudFkiLCJNYXRoIiwiZmxvb3IiLCJhYnMiLCJzZXRUaW1lb3V0IiwiX29uV2hlZWwiLCJjbGVhclRpbWVvdXQiLCJzaGlmdEtleSIsInNyY0V2ZW50IiwiZGVsdGEiLCJwb3NpdGlvbiIsImNlbnRlciIsInBvaW50ZXJUeXBlIiwidGFyZ2V0Il0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUUEsaUJBQVIsUUFBZ0MsY0FBaEM7QUFDQSxTQUFRQyxNQUFSLEVBQWdCQyxTQUFoQixRQUFnQyxrQkFBaEM7O0FBRUEsSUFBTUMsVUFBVUQsVUFBVUUsT0FBVixDQUFrQixTQUFsQixNQUFpQyxDQUFDLENBQWxEOztJQUVPQyxZLEdBQWdCTCxpQixDQUFoQkssWTs7QUFDUCxJQUFNQyxhQUFhLE9BQW5COztBQUVBO0FBQ0EsSUFBTUMsMkJBQTJCLGNBQWpDO0FBQ0EsSUFBTUMsdUJBQXVCLEVBQTdCO0FBQ0EsSUFBTUMscUJBQXFCLENBQTNCO0FBQ0EsSUFBTUMsOEJBQThCLEdBQXBDO0FBQ0E7QUFDQSxJQUFNQyxtQkFBbUIsSUFBekI7O0lBRXFCQyxVO0FBRW5CLHNCQUFZQyxPQUFaLEVBQXFCQyxRQUFyQixFQUE2QztBQUFBOztBQUFBLFFBQWRDLE9BQWMsdUVBQUosRUFBSTs7QUFBQTs7QUFDM0MsU0FBS0YsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkEsUUFBaEI7O0FBRUEsU0FBS0MsT0FBTCxHQUFlQyxPQUFPQyxNQUFQLENBQWMsRUFBQ0MsUUFBUSxJQUFULEVBQWQsRUFBOEJILE9BQTlCLENBQWY7O0FBRUEsU0FBS0ksSUFBTCxHQUFZLENBQVo7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLElBQXJCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZLElBQVo7QUFDQSxTQUFLQyxPQUFMLEdBQWUsSUFBZjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsQ0FBakI7O0FBRUEsU0FBS0MsTUFBTCxHQUFjbkIsYUFBYW9CLE1BQWIsQ0FBb0JWLFFBQVFTLE1BQVIsSUFBa0IsRUFBdEMsQ0FBZDs7QUFFQSxTQUFLRSxXQUFMLEdBQW1CLEtBQUtBLFdBQUwsQ0FBaUJDLElBQWpCLENBQXNCLElBQXRCLENBQW5CO0FBQ0EsU0FBS0gsTUFBTCxDQUFZSSxPQUFaLENBQW9CO0FBQUEsYUFBU2YsUUFBUWdCLGdCQUFSLENBQXlCQyxLQUF6QixFQUFnQyxNQUFLSixXQUFyQyxDQUFUO0FBQUEsS0FBcEI7QUFDRDs7Ozs4QkFFUztBQUFBOztBQUNSLFdBQUtGLE1BQUwsQ0FBWUksT0FBWixDQUFvQjtBQUFBLGVBQVMsT0FBS2YsT0FBTCxDQUFha0IsbUJBQWIsQ0FBaUNELEtBQWpDLEVBQXdDLE9BQUtKLFdBQTdDLENBQVQ7QUFBQSxPQUFwQjtBQUNEOztBQUVEOzs7Ozs7O29DQUlnQk0sUyxFQUFXQyxPLEVBQVM7QUFDbEMsVUFBSUQsY0FBYzFCLFVBQWxCLEVBQThCO0FBQzVCLGFBQUtTLE9BQUwsQ0FBYUcsTUFBYixHQUFzQmUsT0FBdEI7QUFDRDtBQUNGOztBQUVEOzs7O2dDQUNZSCxLLEVBQU87QUFDakIsVUFBSSxDQUFDLEtBQUtmLE9BQUwsQ0FBYUcsTUFBbEIsRUFBMEI7QUFDeEI7QUFDRDtBQUNEWSxZQUFNSSxjQUFOOztBQUVBLFVBQUlDLFFBQVFMLE1BQU1NLE1BQWxCO0FBQ0EsVUFBSW5DLE9BQU9vQyxVQUFYLEVBQXVCO0FBQ3JCO0FBQ0EsWUFBSWxDLFdBQVcyQixNQUFNUSxTQUFOLEtBQW9CckMsT0FBT29DLFVBQVAsQ0FBa0JFLGVBQXJELEVBQXNFO0FBQ3BFSixtQkFBU2xDLE9BQU91QyxnQkFBaEI7QUFDRDtBQUNELFlBQUlWLE1BQU1RLFNBQU4sS0FBb0JyQyxPQUFPb0MsVUFBUCxDQUFrQkksY0FBMUMsRUFBMEQ7QUFDeEROLG1CQUFTM0Isb0JBQVQ7QUFDRDtBQUNGOztBQWZnQixVQWtCZmEsSUFsQmUsR0FzQmIsSUF0QmEsQ0FrQmZBLElBbEJlO0FBQUEsVUFtQmZDLE9BbkJlLEdBc0JiLElBdEJhLENBbUJmQSxPQW5CZTtBQUFBLFVBb0JmQyxTQXBCZSxHQXNCYixJQXRCYSxDQW9CZkEsU0FwQmU7QUFBQSxVQXFCZkosSUFyQmUsR0FzQmIsSUF0QmEsQ0FxQmZBLElBckJlOzs7QUF3QmpCLFVBQU11QixNQUFNLENBQUV6QyxVQUFVQSxPQUFPMEMsV0FBbEIsSUFBa0NDLElBQW5DLEVBQXlDRixHQUF6QyxFQUFaO0FBQ0EsVUFBTUcsWUFBWUgsT0FBT3ZCLFFBQVEsQ0FBZixDQUFsQjs7QUFFQSxXQUFLQyxhQUFMLEdBQXFCO0FBQ25CMEIsV0FBR2hCLE1BQU1pQixPQURVO0FBRW5CQyxXQUFHbEIsTUFBTW1CO0FBRlUsT0FBckI7QUFJQTlCLGFBQU91QixHQUFQOztBQUVBLFVBQUlQLFVBQVUsQ0FBVixJQUFlQSxRQUFRNUIsd0JBQVIsS0FBcUMsQ0FBeEQsRUFBMkQ7QUFDekQ7QUFDQWMsZUFBTyxPQUFQO0FBQ0E7QUFDQWMsZ0JBQVFlLEtBQUtDLEtBQUwsQ0FBV2hCLFFBQVE1Qix3QkFBbkIsQ0FBUjtBQUNELE9BTEQsTUFLTyxJQUFJNEIsVUFBVSxDQUFWLElBQWVlLEtBQUtFLEdBQUwsQ0FBU2pCLEtBQVQsSUFBa0IxQixrQkFBckMsRUFBeUQ7QUFDOUQ7QUFDQVksZUFBTyxVQUFQO0FBQ0QsT0FITSxNQUdBLElBQUl3QixZQUFZLEdBQWhCLEVBQXFCO0FBQzFCO0FBQ0F4QixlQUFPLElBQVA7QUFDQUUsb0JBQVlZLEtBQVo7QUFDQTtBQUNBO0FBQ0FiLGtCQUFVckIsT0FBT29ELFVBQVAsQ0FBa0IsU0FBU0EsVUFBVCxHQUFzQjtBQUNoRCxlQUFLQyxRQUFMLENBQWN4QixLQUFkLEVBQXFCLENBQUNQLFNBQXRCLEVBQWlDLEtBQUtILGFBQXRDO0FBQ0FDLGlCQUFPLE9BQVA7QUFDRCxTQUgyQixDQUcxQk0sSUFIMEIsQ0FHckIsSUFIcUIsQ0FBbEIsRUFHSSxFQUhKLENBQVY7QUFJRCxPQVZNLE1BVUEsSUFBSSxDQUFDTixJQUFMLEVBQVc7QUFDaEI7QUFDQTtBQUNBO0FBQ0FBLGVBQU82QixLQUFLRSxHQUFMLENBQVNQLFlBQVlWLEtBQXJCLElBQThCekIsMkJBQTlCLEdBQTRELFVBQTVELEdBQXlFLE9BQWhGOztBQUVBO0FBQ0E7QUFDQSxZQUFJWSxPQUFKLEVBQWE7QUFDWHJCLGlCQUFPc0QsWUFBUCxDQUFvQmpDLE9BQXBCO0FBQ0FBLG9CQUFVLElBQVY7QUFDQWEsbUJBQVNaLFNBQVQ7QUFDRDtBQUNGOztBQUVELFVBQUlPLE1BQU0wQixRQUFOLElBQWtCckIsS0FBdEIsRUFBNkI7QUFDM0JBLGdCQUFRQSxRQUFReEIsZ0JBQWhCO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBLFVBQUlVLElBQUosRUFBVTtBQUNSLGFBQUtpQyxRQUFMLENBQWN4QixLQUFkLEVBQXFCLENBQUNLLEtBQXRCLEVBQTZCLEtBQUtmLGFBQWxDO0FBQ0Q7QUFDRjs7OzZCQUVRcUMsUSxFQUFVQyxLLEVBQU9DLFEsRUFBVTtBQUNsQyxXQUFLN0MsUUFBTCxDQUFjO0FBQ1pPLGNBQU1mLFVBRE07QUFFWnNELGdCQUFRRCxRQUZJO0FBR1pELG9CQUhZO0FBSVpELDBCQUpZO0FBS1pJLHFCQUFhLE9BTEQ7QUFNWkMsZ0JBQVFMLFNBQVNLO0FBTkwsT0FBZDtBQVFEOzs7Ozs7ZUF6SGtCbEQsVSIsImZpbGUiOiJ3aGVlbC1pbnB1dC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxNyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7SU5QVVRfRVZFTlRfVFlQRVN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge3dpbmRvdywgdXNlckFnZW50fSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcblxuY29uc3QgZmlyZWZveCA9IHVzZXJBZ2VudC5pbmRleE9mKCdmaXJlZm94JykgIT09IC0xO1xuXG5jb25zdCB7V0hFRUxfRVZFTlRTfSA9IElOUFVUX0VWRU5UX1RZUEVTO1xuY29uc3QgRVZFTlRfVFlQRSA9ICd3aGVlbCc7XG5cbi8vIENvbnN0YW50cyBmb3Igbm9ybWFsaXppbmcgaW5wdXQgZGVsdGFcbmNvbnN0IFdIRUVMX0RFTFRBX01BR0lDX1NDQUxFUiA9IDQuMDAwMjQ0MTQwNjI1O1xuY29uc3QgV0hFRUxfREVMVEFfUEVSX0xJTkUgPSA0MDtcbmNvbnN0IFRSQUNLUEFEX01BWF9ERUxUQSA9IDQ7XG5jb25zdCBUUkFDS1BBRF9NQVhfREVMVEFfUEVSX1RJTUUgPSAyMDA7XG4vLyBTbG93IGRvd24gem9vbSBpZiBzaGlmdCBrZXkgaXMgaGVsZCBmb3IgbW9yZSBwcmVjaXNlIHpvb21pbmdcbmNvbnN0IFNISUZUX01VTFRJUExJRVIgPSAwLjI1O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGVlbElucHV0IHtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtlbmFibGU6IHRydWV9LCBvcHRpb25zKTtcblxuICAgIHRoaXMudGltZSA9IDA7XG4gICAgdGhpcy53aGVlbFBvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnR5cGUgPSBudWxsO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0VmFsdWUgPSAwO1xuXG4gICAgdGhpcy5ldmVudHMgPSBXSEVFTF9FVkVOVFMuY29uY2F0KG9wdGlvbnMuZXZlbnRzIHx8IFtdKTtcblxuICAgIHRoaXMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcyk7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaChldmVudCA9PiBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIHRoaXMuaGFuZGxlRXZlbnQpKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaChldmVudCA9PiB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgdGhpcy5oYW5kbGVFdmVudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGlzIGlucHV0IChiZWdpbiBwcm9jZXNzaW5nIGV2ZW50cylcbiAgICogaWYgdGhlIHNwZWNpZmllZCBldmVudCB0eXBlIGlzIGFtb25nIHRob3NlIGhhbmRsZWQgYnkgdGhpcyBpbnB1dC5cbiAgICovXG4gIGVuYWJsZUV2ZW50VHlwZShldmVudFR5cGUsIGVuYWJsZWQpIHtcbiAgICBpZiAoZXZlbnRUeXBlID09PSBFVkVOVF9UWVBFKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlID0gZW5hYmxlZDtcbiAgICB9XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50cyAqL1xuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zLmVuYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgbGV0IHZhbHVlID0gZXZlbnQuZGVsdGFZO1xuICAgIGlmICh3aW5kb3cuV2hlZWxFdmVudCkge1xuICAgICAgLy8gRmlyZWZveCBkb3VibGVzIHRoZSB2YWx1ZXMgb24gcmV0aW5hIHNjcmVlbnMuLi5cbiAgICAgIGlmIChmaXJlZm94ICYmIGV2ZW50LmRlbHRhTW9kZSA9PT0gd2luZG93LldoZWVsRXZlbnQuRE9NX0RFTFRBX1BJWEVMKSB7XG4gICAgICAgIHZhbHVlIC89IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmRlbHRhTW9kZSA9PT0gd2luZG93LldoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkUpIHtcbiAgICAgICAgdmFsdWUgKj0gV0hFRUxfREVMVEFfUEVSX0xJTkU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHtcbiAgICAgIHR5cGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgbGFzdFZhbHVlLFxuICAgICAgdGltZVxuICAgIH0gPSB0aGlzO1xuXG4gICAgY29uc3Qgbm93ID0gKCh3aW5kb3cgJiYgd2luZG93LnBlcmZvcm1hbmNlKSB8fCBEYXRlKS5ub3coKTtcbiAgICBjb25zdCB0aW1lRGVsdGEgPSBub3cgLSAodGltZSB8fCAwKTtcblxuICAgIHRoaXMud2hlZWxQb3NpdGlvbiA9IHtcbiAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICB5OiBldmVudC5jbGllbnRZXG4gICAgfTtcbiAgICB0aW1lID0gbm93O1xuXG4gICAgaWYgKHZhbHVlICE9PSAwICYmIHZhbHVlICUgV0hFRUxfREVMVEFfTUFHSUNfU0NBTEVSID09PSAwKSB7XG4gICAgICAvLyBUaGlzIG9uZSBpcyBkZWZpbml0ZWx5IGEgbW91c2Ugd2hlZWwgZXZlbnQuXG4gICAgICB0eXBlID0gJ3doZWVsJztcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGlzIHZhbHVlIHRvIG1hdGNoIHRyYWNrcGFkLlxuICAgICAgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlIC8gV0hFRUxfREVMVEFfTUFHSUNfU0NBTEVSKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSAwICYmIE1hdGguYWJzKHZhbHVlKSA8IFRSQUNLUEFEX01BWF9ERUxUQSkge1xuICAgICAgLy8gVGhpcyBvbmUgaXMgZGVmaW5pdGVseSBhIHRyYWNrcGFkIGV2ZW50IGJlY2F1c2UgaXQgaXMgc28gc21hbGwuXG4gICAgICB0eXBlID0gJ3RyYWNrcGFkJztcbiAgICB9IGVsc2UgaWYgKHRpbWVEZWx0YSA+IDQwMCkge1xuICAgICAgLy8gVGhpcyBpcyBsaWtlbHkgYSBuZXcgc2Nyb2xsIGFjdGlvbi5cbiAgICAgIHR5cGUgPSBudWxsO1xuICAgICAgbGFzdFZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBTdGFydCBhIHRpbWVvdXQgaW4gY2FzZSB0aGlzIHdhcyBhIHNpbmd1bGFyIGV2ZW50LFxuICAgICAgLy8gYW5kIGRlbGF5IGl0IGJ5IHVwIHRvIDQwbXMuXG4gICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gc2V0VGltZW91dCgpIHtcbiAgICAgICAgdGhpcy5fb25XaGVlbChldmVudCwgLWxhc3RWYWx1ZSwgdGhpcy53aGVlbFBvc2l0aW9uKTtcbiAgICAgICAgdHlwZSA9ICd3aGVlbCc7XG4gICAgICB9LmJpbmQodGhpcyksIDQwKTtcbiAgICB9IGVsc2UgaWYgKCF0eXBlKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgcmVwZWF0aW5nIGV2ZW50LCBidXQgd2UgZG9uJ3Qga25vdyB0aGUgdHlwZSBvZiBldmVudCBqdXN0IHlldC5cbiAgICAgIC8vIElmIHRoZSBkZWx0YSBwZXIgdGltZSBpcyBzbWFsbCwgd2UgYXNzdW1lIGl0J3MgYSBmYXN0IHRyYWNrcGFkO1xuICAgICAgLy8gb3RoZXJ3aXNlIHdlIHN3aXRjaCBpbnRvIHdoZWVsIG1vZGUuXG4gICAgICB0eXBlID0gTWF0aC5hYnModGltZURlbHRhICogdmFsdWUpIDwgVFJBQ0tQQURfTUFYX0RFTFRBX1BFUl9USU1FID8gJ3RyYWNrcGFkJyA6ICd3aGVlbCc7XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSBvdXIgZGVsYXllZCBldmVudCBpc24ndCBmaXJlZCBhZ2FpbiwgYmVjYXVzZSB3ZSBhY2N1bXVsYXRlXG4gICAgICAvLyB0aGUgcHJldmlvdXMgZXZlbnQgKHdoaWNoIHdhcyBsZXNzIHRoYW4gNDBtcyBhZ28pIGludG8gdGhpcyBldmVudC5cbiAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICB2YWx1ZSArPSBsYXN0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlICogU0hJRlRfTVVMVElQTElFUjtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGZpcmUgdGhlIGNhbGxiYWNrIGlmIHdlIGFjdHVhbGx5IGtub3dcbiAgICAvLyB3aGF0IHR5cGUgb2Ygc2Nyb2xsaW5nIGRldmljZSB0aGUgdXNlciB1c2VzLlxuICAgIGlmICh0eXBlKSB7XG4gICAgICB0aGlzLl9vbldoZWVsKGV2ZW50LCAtdmFsdWUsIHRoaXMud2hlZWxQb3NpdGlvbik7XG4gICAgfVxuICB9XG5cbiAgX29uV2hlZWwoc3JjRXZlbnQsIGRlbHRhLCBwb3NpdGlvbikge1xuICAgIHRoaXMuY2FsbGJhY2soe1xuICAgICAgdHlwZTogRVZFTlRfVFlQRSxcbiAgICAgIGNlbnRlcjogcG9zaXRpb24sXG4gICAgICBkZWx0YSxcbiAgICAgIHNyY0V2ZW50LFxuICAgICAgcG9pbnRlclR5cGU6ICdtb3VzZScsXG4gICAgICB0YXJnZXQ6IHNyY0V2ZW50LnRhcmdldFxuICAgIH0pO1xuICB9XG59XG4iXX0=
  47818. /***/ }),
  47819. /* 676 */
  47820. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  47821. "use strict";
  47822. /* harmony export (immutable) */ __webpack_exports__["a"] = whichButtons;
  47823. /* harmony export (immutable) */ __webpack_exports__["b"] = getOffsetPosition;
  47824. /* Constants */
  47825. var DOWN_EVENT = 1;
  47826. var MOVE_EVENT = 2;
  47827. var UP_EVENT = 4;
  47828. var MOUSE_EVENTS = {
  47829. pointerdown: DOWN_EVENT,
  47830. pointermove: MOVE_EVENT,
  47831. pointerup: UP_EVENT,
  47832. mousedown: DOWN_EVENT,
  47833. mousemove: MOVE_EVENT,
  47834. mouseup: UP_EVENT
  47835. };
  47836. // MouseEvent.which https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which
  47837. var MOUSE_EVENT_WHICH_LEFT = 1;
  47838. var MOUSE_EVENT_WHICH_MIDDLE = 2;
  47839. var MOUSE_EVENT_WHICH_RIGHT = 3;
  47840. // MouseEvent.button https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button
  47841. var MOUSE_EVENT_BUTTON_LEFT = 0;
  47842. var MOUSE_EVENT_BUTTON_MIDDLE = 1;
  47843. var MOUSE_EVENT_BUTTON_RIGHT = 2;
  47844. // MouseEvent.buttons https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons
  47845. var MOUSE_EVENT_BUTTONS_LEFT_MASK = 1;
  47846. var MOUSE_EVENT_BUTTONS_RIGHT_MASK = 2;
  47847. var MOUSE_EVENT_BUTTONS_MIDDLE_MASK = 4;
  47848. /**
  47849. * Extract the involved mouse button
  47850. */
  47851. function whichButtons(event) {
  47852. var eventType = MOUSE_EVENTS[event.srcEvent.type];
  47853. if (!eventType) {
  47854. // Not a mouse evet
  47855. return null;
  47856. }
  47857. var _event$srcEvent = event.srcEvent,
  47858. buttons = _event$srcEvent.buttons,
  47859. button = _event$srcEvent.button,
  47860. which = _event$srcEvent.which;
  47861. var leftButton = false;
  47862. var middleButton = false;
  47863. var rightButton = false;
  47864. if (
  47865. // button is up, need to find out which one was pressed before
  47866. eventType === UP_EVENT ||
  47867. // moving but does not support `buttons` API
  47868. eventType === MOVE_EVENT && !Number.isFinite(buttons)) {
  47869. leftButton = which === MOUSE_EVENT_WHICH_LEFT;
  47870. middleButton = which === MOUSE_EVENT_WHICH_MIDDLE;
  47871. rightButton = which === MOUSE_EVENT_WHICH_RIGHT;
  47872. } else if (eventType === MOVE_EVENT) {
  47873. leftButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_LEFT_MASK);
  47874. middleButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_MIDDLE_MASK);
  47875. rightButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_RIGHT_MASK);
  47876. } else if (eventType === DOWN_EVENT) {
  47877. leftButton = button === MOUSE_EVENT_BUTTON_LEFT;
  47878. middleButton = button === MOUSE_EVENT_BUTTON_MIDDLE;
  47879. rightButton = button === MOUSE_EVENT_BUTTON_RIGHT;
  47880. }
  47881. return { leftButton: leftButton, middleButton: middleButton, rightButton: rightButton };
  47882. }
  47883. /**
  47884. * Calculate event position relative to the root element
  47885. */
  47886. function getOffsetPosition(event, rootElement) {
  47887. var srcEvent = event.srcEvent;
  47888. // `center` is a hammer.js event property
  47889. if (!event.center && !Number.isFinite(srcEvent.clientX)) {
  47890. // Not a gestural event
  47891. return null;
  47892. }
  47893. var center = event.center || {
  47894. x: srcEvent.clientX,
  47895. y: srcEvent.clientY
  47896. };
  47897. var rect = rootElement.getBoundingClientRect();
  47898. // Fix scale for map affected by a CSS transform.
  47899. // See https://stackoverflow.com/a/26893663/3528533
  47900. var scaleX = rect.width / rootElement.offsetWidth;
  47901. var scaleY = rect.height / rootElement.offsetHeight;
  47902. // Calculate center relative to the root element
  47903. var offsetCenter = {
  47904. x: (center.x - rect.left - rootElement.clientLeft) / scaleX,
  47905. y: (center.y - rect.top - rootElement.clientTop) / scaleY
  47906. };
  47907. return { center: center, offsetCenter: offsetCenter };
  47908. }
  47909. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ldmVudC11dGlscy5qcyJdLCJuYW1lcyI6WyJET1dOX0VWRU5UIiwiTU9WRV9FVkVOVCIsIlVQX0VWRU5UIiwiTU9VU0VfRVZFTlRTIiwicG9pbnRlcmRvd24iLCJwb2ludGVybW92ZSIsInBvaW50ZXJ1cCIsIm1vdXNlZG93biIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJNT1VTRV9FVkVOVF9XSElDSF9MRUZUIiwiTU9VU0VfRVZFTlRfV0hJQ0hfTUlERExFIiwiTU9VU0VfRVZFTlRfV0hJQ0hfUklHSFQiLCJNT1VTRV9FVkVOVF9CVVRUT05fTEVGVCIsIk1PVVNFX0VWRU5UX0JVVFRPTl9NSURETEUiLCJNT1VTRV9FVkVOVF9CVVRUT05fUklHSFQiLCJNT1VTRV9FVkVOVF9CVVRUT05TX0xFRlRfTUFTSyIsIk1PVVNFX0VWRU5UX0JVVFRPTlNfUklHSFRfTUFTSyIsIk1PVVNFX0VWRU5UX0JVVFRPTlNfTUlERExFX01BU0siLCJ3aGljaEJ1dHRvbnMiLCJldmVudCIsImV2ZW50VHlwZSIsInNyY0V2ZW50IiwidHlwZSIsImJ1dHRvbnMiLCJidXR0b24iLCJ3aGljaCIsImxlZnRCdXR0b24iLCJtaWRkbGVCdXR0b24iLCJyaWdodEJ1dHRvbiIsIk51bWJlciIsImlzRmluaXRlIiwiQm9vbGVhbiIsImdldE9mZnNldFBvc2l0aW9uIiwicm9vdEVsZW1lbnQiLCJjZW50ZXIiLCJjbGllbnRYIiwieCIsInkiLCJjbGllbnRZIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjYWxlWCIsIndpZHRoIiwib2Zmc2V0V2lkdGgiLCJzY2FsZVkiLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXRDZW50ZXIiLCJsZWZ0IiwiY2xpZW50TGVmdCIsInRvcCIsImNsaWVudFRvcCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFNQSxhQUFhLENBQW5CO0FBQ0EsSUFBTUMsYUFBYSxDQUFuQjtBQUNBLElBQU1DLFdBQVcsQ0FBakI7QUFDQSxJQUFNQyxlQUFlO0FBQ25CQyxlQUFhSixVQURNO0FBRW5CSyxlQUFhSixVQUZNO0FBR25CSyxhQUFXSixRQUhRO0FBSW5CSyxhQUFXUCxVQUpRO0FBS25CUSxhQUFXUCxVQUxRO0FBTW5CUSxXQUFTUDtBQU5VLENBQXJCOztBQVNBO0FBQ0EsSUFBTVEseUJBQXlCLENBQS9CO0FBQ0EsSUFBTUMsMkJBQTJCLENBQWpDO0FBQ0EsSUFBTUMsMEJBQTBCLENBQWhDO0FBQ0E7QUFDQSxJQUFNQywwQkFBMEIsQ0FBaEM7QUFDQSxJQUFNQyw0QkFBNEIsQ0FBbEM7QUFDQSxJQUFNQywyQkFBMkIsQ0FBakM7QUFDQTtBQUNBLElBQU1DLGdDQUFnQyxDQUF0QztBQUNBLElBQU1DLGlDQUFpQyxDQUF2QztBQUNBLElBQU1DLGtDQUFrQyxDQUF4Qzs7QUFFQTs7O0FBR0EsT0FBTyxTQUFTQyxZQUFULENBQXNCQyxLQUF0QixFQUE2QjtBQUNsQyxNQUFNQyxZQUFZbEIsYUFBYWlCLE1BQU1FLFFBQU4sQ0FBZUMsSUFBNUIsQ0FBbEI7QUFDQSxNQUFJLENBQUNGLFNBQUwsRUFBZ0I7QUFDZDtBQUNBLFdBQU8sSUFBUDtBQUNEOztBQUxpQyx3QkFPREQsTUFBTUUsUUFQTDtBQUFBLE1BTzNCRSxPQVAyQixtQkFPM0JBLE9BUDJCO0FBQUEsTUFPbEJDLE1BUGtCLG1CQU9sQkEsTUFQa0I7QUFBQSxNQU9WQyxLQVBVLG1CQU9WQSxLQVBVOztBQVFsQyxNQUFJQyxhQUFhLEtBQWpCO0FBQ0EsTUFBSUMsZUFBZSxLQUFuQjtBQUNBLE1BQUlDLGNBQWMsS0FBbEI7O0FBRUE7QUFDRTtBQUNBUixnQkFBY25CLFFBQWQ7QUFDQTtBQUNDbUIsZ0JBQWNwQixVQUFkLElBQTRCLENBQUM2QixPQUFPQyxRQUFQLENBQWdCUCxPQUFoQixDQUpoQyxFQUtFO0FBQ0FHLGlCQUFhRCxVQUFVaEIsc0JBQXZCO0FBQ0FrQixtQkFBZUYsVUFBVWYsd0JBQXpCO0FBQ0FrQixrQkFBY0gsVUFBVWQsdUJBQXhCO0FBQ0QsR0FURCxNQVNPLElBQUlTLGNBQWNwQixVQUFsQixFQUE4QjtBQUNuQzBCLGlCQUFhSyxRQUFRUixVQUFVUiw2QkFBbEIsQ0FBYjtBQUNBWSxtQkFBZUksUUFBUVIsVUFBVU4sK0JBQWxCLENBQWY7QUFDQVcsa0JBQWNHLFFBQVFSLFVBQVVQLDhCQUFsQixDQUFkO0FBQ0QsR0FKTSxNQUlBLElBQUlJLGNBQWNyQixVQUFsQixFQUE4QjtBQUNuQzJCLGlCQUFhRixXQUFXWix1QkFBeEI7QUFDQWUsbUJBQWVILFdBQVdYLHlCQUExQjtBQUNBZSxrQkFBY0osV0FBV1Ysd0JBQXpCO0FBQ0Q7O0FBRUQsU0FBTyxFQUFDWSxzQkFBRCxFQUFhQywwQkFBYixFQUEyQkMsd0JBQTNCLEVBQVA7QUFDRDs7QUFFRDs7O0FBR0EsT0FBTyxTQUFTSSxpQkFBVCxDQUEyQmIsS0FBM0IsRUFBa0NjLFdBQWxDLEVBQStDO0FBQUEsTUFDN0NaLFFBRDZDLEdBQ2pDRixLQURpQyxDQUM3Q0UsUUFENkM7O0FBR3BEOztBQUNBLE1BQUksQ0FBQ0YsTUFBTWUsTUFBUCxJQUFpQixDQUFDTCxPQUFPQyxRQUFQLENBQWdCVCxTQUFTYyxPQUF6QixDQUF0QixFQUF5RDtBQUN2RDtBQUNBLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQU1ELFNBQVNmLE1BQU1lLE1BQU4sSUFBZ0I7QUFDN0JFLE9BQUdmLFNBQVNjLE9BRGlCO0FBRTdCRSxPQUFHaEIsU0FBU2lCO0FBRmlCLEdBQS9COztBQUtBLE1BQU1DLE9BQU9OLFlBQVlPLHFCQUFaLEVBQWI7O0FBRUE7QUFDQTtBQUNBLE1BQU1DLFNBQVNGLEtBQUtHLEtBQUwsR0FBYVQsWUFBWVUsV0FBeEM7QUFDQSxNQUFNQyxTQUFTTCxLQUFLTSxNQUFMLEdBQWNaLFlBQVlhLFlBQXpDOztBQUVBO0FBQ0EsTUFBTUMsZUFBZTtBQUNuQlgsT0FBRyxDQUFDRixPQUFPRSxDQUFQLEdBQVdHLEtBQUtTLElBQWhCLEdBQXVCZixZQUFZZ0IsVUFBcEMsSUFBa0RSLE1BRGxDO0FBRW5CSixPQUFHLENBQUNILE9BQU9HLENBQVAsR0FBV0UsS0FBS1csR0FBaEIsR0FBc0JqQixZQUFZa0IsU0FBbkMsSUFBZ0RQO0FBRmhDLEdBQXJCOztBQUtBLFNBQU8sRUFBQ1YsY0FBRCxFQUFTYSwwQkFBVCxFQUFQO0FBQ0QiLCJmaWxlIjoiZXZlbnQtdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBDb25zdGFudHMgKi9cbmNvbnN0IERPV05fRVZFTlQgPSAxO1xuY29uc3QgTU9WRV9FVkVOVCA9IDI7XG5jb25zdCBVUF9FVkVOVCA9IDQ7XG5jb25zdCBNT1VTRV9FVkVOVFMgPSB7XG4gIHBvaW50ZXJkb3duOiBET1dOX0VWRU5ULFxuICBwb2ludGVybW92ZTogTU9WRV9FVkVOVCxcbiAgcG9pbnRlcnVwOiBVUF9FVkVOVCxcbiAgbW91c2Vkb3duOiBET1dOX0VWRU5ULFxuICBtb3VzZW1vdmU6IE1PVkVfRVZFTlQsXG4gIG1vdXNldXA6IFVQX0VWRU5UXG59O1xuXG4vLyBNb3VzZUV2ZW50LndoaWNoIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Nb3VzZUV2ZW50L3doaWNoXG5jb25zdCBNT1VTRV9FVkVOVF9XSElDSF9MRUZUID0gMTtcbmNvbnN0IE1PVVNFX0VWRU5UX1dISUNIX01JRERMRSA9IDI7XG5jb25zdCBNT1VTRV9FVkVOVF9XSElDSF9SSUdIVCA9IDM7XG4vLyBNb3VzZUV2ZW50LmJ1dHRvbiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTW91c2VFdmVudC9idXR0b25cbmNvbnN0IE1PVVNFX0VWRU5UX0JVVFRPTl9MRUZUID0gMDtcbmNvbnN0IE1PVVNFX0VWRU5UX0JVVFRPTl9NSURETEUgPSAxO1xuY29uc3QgTU9VU0VfRVZFTlRfQlVUVE9OX1JJR0hUID0gMjtcbi8vIE1vdXNlRXZlbnQuYnV0dG9ucyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTW91c2VFdmVudC9idXR0b25zXG5jb25zdCBNT1VTRV9FVkVOVF9CVVRUT05TX0xFRlRfTUFTSyA9IDE7XG5jb25zdCBNT1VTRV9FVkVOVF9CVVRUT05TX1JJR0hUX01BU0sgPSAyO1xuY29uc3QgTU9VU0VfRVZFTlRfQlVUVE9OU19NSURETEVfTUFTSyA9IDQ7XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgaW52b2x2ZWQgbW91c2UgYnV0dG9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGljaEJ1dHRvbnMoZXZlbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gTU9VU0VfRVZFTlRTW2V2ZW50LnNyY0V2ZW50LnR5cGVdO1xuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIC8vIE5vdCBhIG1vdXNlIGV2ZXRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHtidXR0b25zLCBidXR0b24sIHdoaWNofSA9IGV2ZW50LnNyY0V2ZW50O1xuICBsZXQgbGVmdEJ1dHRvbiA9IGZhbHNlO1xuICBsZXQgbWlkZGxlQnV0dG9uID0gZmFsc2U7XG4gIGxldCByaWdodEJ1dHRvbiA9IGZhbHNlO1xuXG4gIGlmIChcbiAgICAvLyBidXR0b24gaXMgdXAsIG5lZWQgdG8gZmluZCBvdXQgd2hpY2ggb25lIHdhcyBwcmVzc2VkIGJlZm9yZVxuICAgIGV2ZW50VHlwZSA9PT0gVVBfRVZFTlQgfHxcbiAgICAvLyBtb3ZpbmcgYnV0IGRvZXMgbm90IHN1cHBvcnQgYGJ1dHRvbnNgIEFQSVxuICAgIChldmVudFR5cGUgPT09IE1PVkVfRVZFTlQgJiYgIU51bWJlci5pc0Zpbml0ZShidXR0b25zKSlcbiAgKSB7XG4gICAgbGVmdEJ1dHRvbiA9IHdoaWNoID09PSBNT1VTRV9FVkVOVF9XSElDSF9MRUZUO1xuICAgIG1pZGRsZUJ1dHRvbiA9IHdoaWNoID09PSBNT1VTRV9FVkVOVF9XSElDSF9NSURETEU7XG4gICAgcmlnaHRCdXR0b24gPSB3aGljaCA9PT0gTU9VU0VfRVZFTlRfV0hJQ0hfUklHSFQ7XG4gIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBNT1ZFX0VWRU5UKSB7XG4gICAgbGVmdEJ1dHRvbiA9IEJvb2xlYW4oYnV0dG9ucyAmIE1PVVNFX0VWRU5UX0JVVFRPTlNfTEVGVF9NQVNLKTtcbiAgICBtaWRkbGVCdXR0b24gPSBCb29sZWFuKGJ1dHRvbnMgJiBNT1VTRV9FVkVOVF9CVVRUT05TX01JRERMRV9NQVNLKTtcbiAgICByaWdodEJ1dHRvbiA9IEJvb2xlYW4oYnV0dG9ucyAmIE1PVVNFX0VWRU5UX0JVVFRPTlNfUklHSFRfTUFTSyk7XG4gIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBET1dOX0VWRU5UKSB7XG4gICAgbGVmdEJ1dHRvbiA9IGJ1dHRvbiA9PT0gTU9VU0VfRVZFTlRfQlVUVE9OX0xFRlQ7XG4gICAgbWlkZGxlQnV0dG9uID0gYnV0dG9uID09PSBNT1VTRV9FVkVOVF9CVVRUT05fTUlERExFO1xuICAgIHJpZ2h0QnV0dG9uID0gYnV0dG9uID09PSBNT1VTRV9FVkVOVF9CVVRUT05fUklHSFQ7XG4gIH1cblxuICByZXR1cm4ge2xlZnRCdXR0b24sIG1pZGRsZUJ1dHRvbiwgcmlnaHRCdXR0b259O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBldmVudCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcm9vdCBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRQb3NpdGlvbihldmVudCwgcm9vdEVsZW1lbnQpIHtcbiAgY29uc3Qge3NyY0V2ZW50fSA9IGV2ZW50O1xuXG4gIC8vIGBjZW50ZXJgIGlzIGEgaGFtbWVyLmpzIGV2ZW50IHByb3BlcnR5XG4gIGlmICghZXZlbnQuY2VudGVyICYmICFOdW1iZXIuaXNGaW5pdGUoc3JjRXZlbnQuY2xpZW50WCkpIHtcbiAgICAvLyBOb3QgYSBnZXN0dXJhbCBldmVudFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2VudGVyID0gZXZlbnQuY2VudGVyIHx8IHtcbiAgICB4OiBzcmNFdmVudC5jbGllbnRYLFxuICAgIHk6IHNyY0V2ZW50LmNsaWVudFlcbiAgfTtcblxuICBjb25zdCByZWN0ID0gcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgLy8gRml4IHNjYWxlIGZvciBtYXAgYWZmZWN0ZWQgYnkgYSBDU1MgdHJhbnNmb3JtLlxuICAvLyBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2ODkzNjYzLzM1Mjg1MzNcbiAgY29uc3Qgc2NhbGVYID0gcmVjdC53aWR0aCAvIHJvb3RFbGVtZW50Lm9mZnNldFdpZHRoO1xuICBjb25zdCBzY2FsZVkgPSByZWN0LmhlaWdodCAvIHJvb3RFbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICAvLyBDYWxjdWxhdGUgY2VudGVyIHJlbGF0aXZlIHRvIHRoZSByb290IGVsZW1lbnRcbiAgY29uc3Qgb2Zmc2V0Q2VudGVyID0ge1xuICAgIHg6IChjZW50ZXIueCAtIHJlY3QubGVmdCAtIHJvb3RFbGVtZW50LmNsaWVudExlZnQpIC8gc2NhbGVYLFxuICAgIHk6IChjZW50ZXIueSAtIHJlY3QudG9wIC0gcm9vdEVsZW1lbnQuY2xpZW50VG9wKSAvIHNjYWxlWVxuICB9O1xuXG4gIHJldHVybiB7Y2VudGVyLCBvZmZzZXRDZW50ZXJ9O1xufVxuIl19
  47910. /***/ }),
  47911. /* 677 */
  47912. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  47913. "use strict";
  47914. /* harmony export (immutable) */ __webpack_exports__["a"] = enhancePointerEventInput;
  47915. /* harmony export (immutable) */ __webpack_exports__["b"] = enhanceMouseInput;
  47916. /**
  47917. * This file contains overrides the default
  47918. * hammer.js functions to add our own utility
  47919. */
  47920. /* Hammer.js constants */
  47921. var INPUT_START = 1;
  47922. var INPUT_MOVE = 2;
  47923. var INPUT_END = 4;
  47924. var MOUSE_INPUT_MAP = {
  47925. mousedown: INPUT_START,
  47926. mousemove: INPUT_MOVE,
  47927. mouseup: INPUT_END
  47928. };
  47929. /**
  47930. * Helper function that returns true if any element in an array meets given criteria.
  47931. * Because older browsers do not support `Array.prototype.some`
  47932. * @params array {Array}
  47933. * @params predict {Function}
  47934. */
  47935. function some(array, predict) {
  47936. for (var i = 0; i < array.length; i++) {
  47937. if (predict(array[i])) {
  47938. return true;
  47939. }
  47940. }
  47941. return false;
  47942. }
  47943. /* eslint-disable no-invalid-this */
  47944. function enhancePointerEventInput(PointerEventInput) {
  47945. var oldHandler = PointerEventInput.prototype.handler;
  47946. // overrides PointerEventInput.handler to accept right mouse button
  47947. PointerEventInput.prototype.handler = function handler(ev) {
  47948. var store = this.store;
  47949. // Allow non-left mouse buttons through
  47950. if (ev.button > 0) {
  47951. if (!some(store, function (e) {
  47952. return e.pointerId === ev.pointerId;
  47953. })) {
  47954. store.push(ev);
  47955. }
  47956. }
  47957. oldHandler.call(this, ev);
  47958. };
  47959. }
  47960. // overrides MouseInput.handler to accept right mouse button
  47961. function enhanceMouseInput(MouseInput) {
  47962. MouseInput.prototype.handler = function handler(ev) {
  47963. var eventType = MOUSE_INPUT_MAP[ev.type];
  47964. // on start we want to have the mouse button down
  47965. if (eventType & INPUT_START && ev.button >= 0) {
  47966. this.pressed = true;
  47967. }
  47968. if (eventType & INPUT_MOVE && ev.which === 0) {
  47969. eventType = INPUT_END;
  47970. }
  47971. // mouse must be down
  47972. if (!this.pressed) {
  47973. return;
  47974. }
  47975. if (eventType & INPUT_END) {
  47976. this.pressed = false;
  47977. }
  47978. this.callback(this.manager, eventType, {
  47979. pointers: [ev],
  47980. changedPointers: [ev],
  47981. pointerType: 'mouse',
  47982. srcEvent: ev
  47983. });
  47984. };
  47985. }
  47986. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oYW1tZXItb3ZlcnJpZGVzLmpzIl0sIm5hbWVzIjpbIklOUFVUX1NUQVJUIiwiSU5QVVRfTU9WRSIsIklOUFVUX0VORCIsIk1PVVNFX0lOUFVUX01BUCIsIm1vdXNlZG93biIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJzb21lIiwiYXJyYXkiLCJwcmVkaWN0IiwiaSIsImxlbmd0aCIsImVuaGFuY2VQb2ludGVyRXZlbnRJbnB1dCIsIlBvaW50ZXJFdmVudElucHV0Iiwib2xkSGFuZGxlciIsInByb3RvdHlwZSIsImhhbmRsZXIiLCJldiIsInN0b3JlIiwiYnV0dG9uIiwiZSIsInBvaW50ZXJJZCIsInB1c2giLCJjYWxsIiwiZW5oYW5jZU1vdXNlSW5wdXQiLCJNb3VzZUlucHV0IiwiZXZlbnRUeXBlIiwidHlwZSIsInByZXNzZWQiLCJ3aGljaCIsImNhbGxiYWNrIiwibWFuYWdlciIsInBvaW50ZXJzIiwiY2hhbmdlZFBvaW50ZXJzIiwicG9pbnRlclR5cGUiLCJzcmNFdmVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0FBS0E7QUFDQSxJQUFNQSxjQUFjLENBQXBCO0FBQ0EsSUFBTUMsYUFBYSxDQUFuQjtBQUNBLElBQU1DLFlBQVksQ0FBbEI7QUFDQSxJQUFNQyxrQkFBa0I7QUFDdEJDLGFBQVdKLFdBRFc7QUFFdEJLLGFBQVdKLFVBRlc7QUFHdEJLLFdBQVNKO0FBSGEsQ0FBeEI7O0FBTUE7Ozs7OztBQU1BLFNBQVNLLElBQVQsQ0FBY0MsS0FBZCxFQUFxQkMsT0FBckIsRUFBOEI7QUFDNUIsT0FBSyxJQUFJQyxJQUFJLENBQWIsRUFBZ0JBLElBQUlGLE1BQU1HLE1BQTFCLEVBQWtDRCxHQUFsQyxFQUF1QztBQUNyQyxRQUFJRCxRQUFRRCxNQUFNRSxDQUFOLENBQVIsQ0FBSixFQUF1QjtBQUNyQixhQUFPLElBQVA7QUFDRDtBQUNGO0FBQ0QsU0FBTyxLQUFQO0FBQ0Q7O0FBRUQ7QUFDQSxPQUFPLFNBQVNFLHdCQUFULENBQWtDQyxpQkFBbEMsRUFBcUQ7QUFDMUQsTUFBTUMsYUFBYUQsa0JBQWtCRSxTQUFsQixDQUE0QkMsT0FBL0M7O0FBRUE7QUFDQUgsb0JBQWtCRSxTQUFsQixDQUE0QkMsT0FBNUIsR0FBc0MsU0FBU0EsT0FBVCxDQUFpQkMsRUFBakIsRUFBcUI7QUFDekQsUUFBTUMsUUFBUSxLQUFLQSxLQUFuQjs7QUFFQTtBQUNBLFFBQUlELEdBQUdFLE1BQUgsR0FBWSxDQUFoQixFQUFtQjtBQUNqQixVQUFJLENBQUNaLEtBQUtXLEtBQUwsRUFBWTtBQUFBLGVBQUtFLEVBQUVDLFNBQUYsS0FBZ0JKLEdBQUdJLFNBQXhCO0FBQUEsT0FBWixDQUFMLEVBQXFEO0FBQ25ESCxjQUFNSSxJQUFOLENBQVdMLEVBQVg7QUFDRDtBQUNGOztBQUVESCxlQUFXUyxJQUFYLENBQWdCLElBQWhCLEVBQXNCTixFQUF0QjtBQUNELEdBWEQ7QUFZRDs7QUFFRDtBQUNBLE9BQU8sU0FBU08saUJBQVQsQ0FBMkJDLFVBQTNCLEVBQXVDO0FBQzVDQSxhQUFXVixTQUFYLENBQXFCQyxPQUFyQixHQUErQixTQUFTQSxPQUFULENBQWlCQyxFQUFqQixFQUFxQjtBQUNsRCxRQUFJUyxZQUFZdkIsZ0JBQWdCYyxHQUFHVSxJQUFuQixDQUFoQjs7QUFFQTtBQUNBLFFBQUlELFlBQVkxQixXQUFaLElBQTJCaUIsR0FBR0UsTUFBSCxJQUFhLENBQTVDLEVBQStDO0FBQzdDLFdBQUtTLE9BQUwsR0FBZSxJQUFmO0FBQ0Q7O0FBRUQsUUFBSUYsWUFBWXpCLFVBQVosSUFBMEJnQixHQUFHWSxLQUFILEtBQWEsQ0FBM0MsRUFBOEM7QUFDNUNILGtCQUFZeEIsU0FBWjtBQUNEOztBQUVEO0FBQ0EsUUFBSSxDQUFDLEtBQUswQixPQUFWLEVBQW1CO0FBQ2pCO0FBQ0Q7O0FBRUQsUUFBSUYsWUFBWXhCLFNBQWhCLEVBQTJCO0FBQ3pCLFdBQUswQixPQUFMLEdBQWUsS0FBZjtBQUNEOztBQUVELFNBQUtFLFFBQUwsQ0FBYyxLQUFLQyxPQUFuQixFQUE0QkwsU0FBNUIsRUFBdUM7QUFDckNNLGdCQUFVLENBQUNmLEVBQUQsQ0FEMkI7QUFFckNnQix1QkFBaUIsQ0FBQ2hCLEVBQUQsQ0FGb0I7QUFHckNpQixtQkFBYSxPQUh3QjtBQUlyQ0MsZ0JBQVVsQjtBQUoyQixLQUF2QztBQU1ELEdBM0JEO0FBNEJEIiwiZmlsZSI6ImhhbW1lci1vdmVycmlkZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgZmlsZSBjb250YWlucyBvdmVycmlkZXMgdGhlIGRlZmF1bHRcbiAqIGhhbW1lci5qcyBmdW5jdGlvbnMgdG8gYWRkIG91ciBvd24gdXRpbGl0eVxuICovXG5cbi8qIEhhbW1lci5qcyBjb25zdGFudHMgKi9cbmNvbnN0IElOUFVUX1NUQVJUID0gMTtcbmNvbnN0IElOUFVUX01PVkUgPSAyO1xuY29uc3QgSU5QVVRfRU5EID0gNDtcbmNvbnN0IE1PVVNFX0lOUFVUX01BUCA9IHtcbiAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgbW91c2Vtb3ZlOiBJTlBVVF9NT1ZFLFxuICBtb3VzZXVwOiBJTlBVVF9FTkRcbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGFueSBlbGVtZW50IGluIGFuIGFycmF5IG1lZXRzIGdpdmVuIGNyaXRlcmlhLlxuICogQmVjYXVzZSBvbGRlciBicm93c2VycyBkbyBub3Qgc3VwcG9ydCBgQXJyYXkucHJvdG90eXBlLnNvbWVgXG4gKiBAcGFyYW1zIGFycmF5IHtBcnJheX1cbiAqIEBwYXJhbXMgcHJlZGljdCB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNvbWUoYXJyYXksIHByZWRpY3QpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChwcmVkaWN0KGFycmF5W2ldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8taW52YWxpZC10aGlzICovXG5leHBvcnQgZnVuY3Rpb24gZW5oYW5jZVBvaW50ZXJFdmVudElucHV0KFBvaW50ZXJFdmVudElucHV0KSB7XG4gIGNvbnN0IG9sZEhhbmRsZXIgPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGUuaGFuZGxlcjtcblxuICAvLyBvdmVycmlkZXMgUG9pbnRlckV2ZW50SW5wdXQuaGFuZGxlciB0byBhY2NlcHQgcmlnaHQgbW91c2UgYnV0dG9uXG4gIFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZS5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5zdG9yZTtcblxuICAgIC8vIEFsbG93IG5vbi1sZWZ0IG1vdXNlIGJ1dHRvbnMgdGhyb3VnaFxuICAgIGlmIChldi5idXR0b24gPiAwKSB7XG4gICAgICBpZiAoIXNvbWUoc3RvcmUsIGUgPT4gZS5wb2ludGVySWQgPT09IGV2LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgc3RvcmUucHVzaChldik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb2xkSGFuZGxlci5jYWxsKHRoaXMsIGV2KTtcbiAgfTtcbn1cblxuLy8gb3ZlcnJpZGVzIE1vdXNlSW5wdXQuaGFuZGxlciB0byBhY2NlcHQgcmlnaHQgbW91c2UgYnV0dG9uXG5leHBvcnQgZnVuY3Rpb24gZW5oYW5jZU1vdXNlSW5wdXQoTW91c2VJbnB1dCkge1xuICBNb3VzZUlucHV0LnByb3RvdHlwZS5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIGxldCBldmVudFR5cGUgPSBNT1VTRV9JTlBVVF9NQVBbZXYudHlwZV07XG5cbiAgICAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIG1vdXNlIGJ1dHRvbiBkb3duXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIGV2LmJ1dHRvbiA+PSAwKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9NT1ZFICYmIGV2LndoaWNoID09PSAwKSB7XG4gICAgICBldmVudFR5cGUgPSBJTlBVVF9FTkQ7XG4gICAgfVxuXG4gICAgLy8gbW91c2UgbXVzdCBiZSBkb3duXG4gICAgaWYgKCF0aGlzLnByZXNzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogW2V2XSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiAnbW91c2UnLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG59XG4iXX0=
  47987. /***/ }),
  47988. /* 678 */
  47989. /***/ (function(module, exports, __webpack_require__) {
  47990. "use strict";
  47991. /**
  47992. * Copyright (c) 2013-present, Facebook, Inc.
  47993. *
  47994. * This source code is licensed under the MIT license found in the
  47995. * LICENSE file in the root directory of this source tree.
  47996. */
  47997. var emptyFunction = __webpack_require__(74);
  47998. var invariant = __webpack_require__(101);
  47999. var ReactPropTypesSecret = __webpack_require__(172);
  48000. module.exports = function() {
  48001. function shim(props, propName, componentName, location, propFullName, secret) {
  48002. if (secret === ReactPropTypesSecret) {
  48003. // It is still safe when called from React.
  48004. return;
  48005. }
  48006. invariant(
  48007. false,
  48008. 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
  48009. 'Use PropTypes.checkPropTypes() to call them. ' +
  48010. 'Read more at http://fb.me/use-check-prop-types'
  48011. );
  48012. };
  48013. shim.isRequired = shim;
  48014. function getShim() {
  48015. return shim;
  48016. };
  48017. // Important!
  48018. // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
  48019. var ReactPropTypes = {
  48020. array: shim,
  48021. bool: shim,
  48022. func: shim,
  48023. number: shim,
  48024. object: shim,
  48025. string: shim,
  48026. symbol: shim,
  48027. any: shim,
  48028. arrayOf: getShim,
  48029. element: shim,
  48030. instanceOf: getShim,
  48031. node: shim,
  48032. objectOf: getShim,
  48033. oneOf: getShim,
  48034. oneOfType: getShim,
  48035. shape: getShim,
  48036. exact: getShim
  48037. };
  48038. ReactPropTypes.checkPropTypes = emptyFunction;
  48039. ReactPropTypes.PropTypes = ReactPropTypes;
  48040. return ReactPropTypes;
  48041. };
  48042. /***/ }),
  48043. /* 679 */
  48044. /***/ (function(module, exports, __webpack_require__) {
  48045. "use strict";
  48046. /* WEBPACK VAR INJECTION */(function(process) {/**
  48047. * Copyright (c) 2013-present, Facebook, Inc.
  48048. *
  48049. * This source code is licensed under the MIT license found in the
  48050. * LICENSE file in the root directory of this source tree.
  48051. */
  48052. var emptyFunction = __webpack_require__(74);
  48053. var invariant = __webpack_require__(101);
  48054. var warning = __webpack_require__(155);
  48055. var assign = __webpack_require__(171);
  48056. var ReactPropTypesSecret = __webpack_require__(172);
  48057. var checkPropTypes = __webpack_require__(284);
  48058. module.exports = function(isValidElement, throwOnDirectAccess) {
  48059. /* global Symbol */
  48060. var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
  48061. var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
  48062. /**
  48063. * Returns the iterator method function contained on the iterable object.
  48064. *
  48065. * Be sure to invoke the function with the iterable as context:
  48066. *
  48067. * var iteratorFn = getIteratorFn(myIterable);
  48068. * if (iteratorFn) {
  48069. * var iterator = iteratorFn.call(myIterable);
  48070. * ...
  48071. * }
  48072. *
  48073. * @param {?object} maybeIterable
  48074. * @return {?function}
  48075. */
  48076. function getIteratorFn(maybeIterable) {
  48077. var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
  48078. if (typeof iteratorFn === 'function') {
  48079. return iteratorFn;
  48080. }
  48081. }
  48082. /**
  48083. * Collection of methods that allow declaration and validation of props that are
  48084. * supplied to React components. Example usage:
  48085. *
  48086. * var Props = require('ReactPropTypes');
  48087. * var MyArticle = React.createClass({
  48088. * propTypes: {
  48089. * // An optional string prop named "description".
  48090. * description: Props.string,
  48091. *
  48092. * // A required enum prop named "category".
  48093. * category: Props.oneOf(['News','Photos']).isRequired,
  48094. *
  48095. * // A prop named "dialog" that requires an instance of Dialog.
  48096. * dialog: Props.instanceOf(Dialog).isRequired
  48097. * },
  48098. * render: function() { ... }
  48099. * });
  48100. *
  48101. * A more formal specification of how these methods are used:
  48102. *
  48103. * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
  48104. * decl := ReactPropTypes.{type}(.isRequired)?
  48105. *
  48106. * Each and every declaration produces a function with the same signature. This
  48107. * allows the creation of custom validation functions. For example:
  48108. *
  48109. * var MyLink = React.createClass({
  48110. * propTypes: {
  48111. * // An optional string or URI prop named "href".
  48112. * href: function(props, propName, componentName) {
  48113. * var propValue = props[propName];
  48114. * if (propValue != null && typeof propValue !== 'string' &&
  48115. * !(propValue instanceof URI)) {
  48116. * return new Error(
  48117. * 'Expected a string or an URI for ' + propName + ' in ' +
  48118. * componentName
  48119. * );
  48120. * }
  48121. * }
  48122. * },
  48123. * render: function() {...}
  48124. * });
  48125. *
  48126. * @internal
  48127. */
  48128. var ANONYMOUS = '<<anonymous>>';
  48129. // Important!
  48130. // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
  48131. var ReactPropTypes = {
  48132. array: createPrimitiveTypeChecker('array'),
  48133. bool: createPrimitiveTypeChecker('boolean'),
  48134. func: createPrimitiveTypeChecker('function'),
  48135. number: createPrimitiveTypeChecker('number'),
  48136. object: createPrimitiveTypeChecker('object'),
  48137. string: createPrimitiveTypeChecker('string'),
  48138. symbol: createPrimitiveTypeChecker('symbol'),
  48139. any: createAnyTypeChecker(),
  48140. arrayOf: createArrayOfTypeChecker,
  48141. element: createElementTypeChecker(),
  48142. instanceOf: createInstanceTypeChecker,
  48143. node: createNodeChecker(),
  48144. objectOf: createObjectOfTypeChecker,
  48145. oneOf: createEnumTypeChecker,
  48146. oneOfType: createUnionTypeChecker,
  48147. shape: createShapeTypeChecker,
  48148. exact: createStrictShapeTypeChecker,
  48149. };
  48150. /**
  48151. * inlined Object.is polyfill to avoid requiring consumers ship their own
  48152. * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
  48153. */
  48154. /*eslint-disable no-self-compare*/
  48155. function is(x, y) {
  48156. // SameValue algorithm
  48157. if (x === y) {
  48158. // Steps 1-5, 7-10
  48159. // Steps 6.b-6.e: +0 != -0
  48160. return x !== 0 || 1 / x === 1 / y;
  48161. } else {
  48162. // Step 6.a: NaN == NaN
  48163. return x !== x && y !== y;
  48164. }
  48165. }
  48166. /*eslint-enable no-self-compare*/
  48167. /**
  48168. * We use an Error-like object for backward compatibility as people may call
  48169. * PropTypes directly and inspect their output. However, we don't use real
  48170. * Errors anymore. We don't inspect their stack anyway, and creating them
  48171. * is prohibitively expensive if they are created too often, such as what
  48172. * happens in oneOfType() for any type before the one that matched.
  48173. */
  48174. function PropTypeError(message) {
  48175. this.message = message;
  48176. this.stack = '';
  48177. }
  48178. // Make `instanceof Error` still work for returned errors.
  48179. PropTypeError.prototype = Error.prototype;
  48180. function createChainableTypeChecker(validate) {
  48181. if (process.env.NODE_ENV !== 'production') {
  48182. var manualPropTypeCallCache = {};
  48183. var manualPropTypeWarningCount = 0;
  48184. }
  48185. function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
  48186. componentName = componentName || ANONYMOUS;
  48187. propFullName = propFullName || propName;
  48188. if (secret !== ReactPropTypesSecret) {
  48189. if (throwOnDirectAccess) {
  48190. // New behavior only for users of `prop-types` package
  48191. invariant(
  48192. false,
  48193. 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
  48194. 'Use `PropTypes.checkPropTypes()` to call them. ' +
  48195. 'Read more at http://fb.me/use-check-prop-types'
  48196. );
  48197. } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {
  48198. // Old behavior for people using React.PropTypes
  48199. var cacheKey = componentName + ':' + propName;
  48200. if (
  48201. !manualPropTypeCallCache[cacheKey] &&
  48202. // Avoid spamming the console because they are often not actionable except for lib authors
  48203. manualPropTypeWarningCount < 3
  48204. ) {
  48205. warning(
  48206. false,
  48207. 'You are manually calling a React.PropTypes validation ' +
  48208. 'function for the `%s` prop on `%s`. This is deprecated ' +
  48209. 'and will throw in the standalone `prop-types` package. ' +
  48210. 'You may be seeing this warning due to a third-party PropTypes ' +
  48211. 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.',
  48212. propFullName,
  48213. componentName
  48214. );
  48215. manualPropTypeCallCache[cacheKey] = true;
  48216. manualPropTypeWarningCount++;
  48217. }
  48218. }
  48219. }
  48220. if (props[propName] == null) {
  48221. if (isRequired) {
  48222. if (props[propName] === null) {
  48223. return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
  48224. }
  48225. return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
  48226. }
  48227. return null;
  48228. } else {
  48229. return validate(props, propName, componentName, location, propFullName);
  48230. }
  48231. }
  48232. var chainedCheckType = checkType.bind(null, false);
  48233. chainedCheckType.isRequired = checkType.bind(null, true);
  48234. return chainedCheckType;
  48235. }
  48236. function createPrimitiveTypeChecker(expectedType) {
  48237. function validate(props, propName, componentName, location, propFullName, secret) {
  48238. var propValue = props[propName];
  48239. var propType = getPropType(propValue);
  48240. if (propType !== expectedType) {
  48241. // `propValue` being instance of, say, date/regexp, pass the 'object'
  48242. // check, but we can offer a more precise error message here rather than
  48243. // 'of type `object`'.
  48244. var preciseType = getPreciseType(propValue);
  48245. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
  48246. }
  48247. return null;
  48248. }
  48249. return createChainableTypeChecker(validate);
  48250. }
  48251. function createAnyTypeChecker() {
  48252. return createChainableTypeChecker(emptyFunction.thatReturnsNull);
  48253. }
  48254. function createArrayOfTypeChecker(typeChecker) {
  48255. function validate(props, propName, componentName, location, propFullName) {
  48256. if (typeof typeChecker !== 'function') {
  48257. return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
  48258. }
  48259. var propValue = props[propName];
  48260. if (!Array.isArray(propValue)) {
  48261. var propType = getPropType(propValue);
  48262. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
  48263. }
  48264. for (var i = 0; i < propValue.length; i++) {
  48265. var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
  48266. if (error instanceof Error) {
  48267. return error;
  48268. }
  48269. }
  48270. return null;
  48271. }
  48272. return createChainableTypeChecker(validate);
  48273. }
  48274. function createElementTypeChecker() {
  48275. function validate(props, propName, componentName, location, propFullName) {
  48276. var propValue = props[propName];
  48277. if (!isValidElement(propValue)) {
  48278. var propType = getPropType(propValue);
  48279. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
  48280. }
  48281. return null;
  48282. }
  48283. return createChainableTypeChecker(validate);
  48284. }
  48285. function createInstanceTypeChecker(expectedClass) {
  48286. function validate(props, propName, componentName, location, propFullName) {
  48287. if (!(props[propName] instanceof expectedClass)) {
  48288. var expectedClassName = expectedClass.name || ANONYMOUS;
  48289. var actualClassName = getClassName(props[propName]);
  48290. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
  48291. }
  48292. return null;
  48293. }
  48294. return createChainableTypeChecker(validate);
  48295. }
  48296. function createEnumTypeChecker(expectedValues) {
  48297. if (!Array.isArray(expectedValues)) {
  48298. process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;
  48299. return emptyFunction.thatReturnsNull;
  48300. }
  48301. function validate(props, propName, componentName, location, propFullName) {
  48302. var propValue = props[propName];
  48303. for (var i = 0; i < expectedValues.length; i++) {
  48304. if (is(propValue, expectedValues[i])) {
  48305. return null;
  48306. }
  48307. }
  48308. var valuesString = JSON.stringify(expectedValues);
  48309. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
  48310. }
  48311. return createChainableTypeChecker(validate);
  48312. }
  48313. function createObjectOfTypeChecker(typeChecker) {
  48314. function validate(props, propName, componentName, location, propFullName) {
  48315. if (typeof typeChecker !== 'function') {
  48316. return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
  48317. }
  48318. var propValue = props[propName];
  48319. var propType = getPropType(propValue);
  48320. if (propType !== 'object') {
  48321. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
  48322. }
  48323. for (var key in propValue) {
  48324. if (propValue.hasOwnProperty(key)) {
  48325. var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
  48326. if (error instanceof Error) {
  48327. return error;
  48328. }
  48329. }
  48330. }
  48331. return null;
  48332. }
  48333. return createChainableTypeChecker(validate);
  48334. }
  48335. function createUnionTypeChecker(arrayOfTypeCheckers) {
  48336. if (!Array.isArray(arrayOfTypeCheckers)) {
  48337. process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;
  48338. return emptyFunction.thatReturnsNull;
  48339. }
  48340. for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
  48341. var checker = arrayOfTypeCheckers[i];
  48342. if (typeof checker !== 'function') {
  48343. warning(
  48344. false,
  48345. 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
  48346. 'received %s at index %s.',
  48347. getPostfixForTypeWarning(checker),
  48348. i
  48349. );
  48350. return emptyFunction.thatReturnsNull;
  48351. }
  48352. }
  48353. function validate(props, propName, componentName, location, propFullName) {
  48354. for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
  48355. var checker = arrayOfTypeCheckers[i];
  48356. if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {
  48357. return null;
  48358. }
  48359. }
  48360. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
  48361. }
  48362. return createChainableTypeChecker(validate);
  48363. }
  48364. function createNodeChecker() {
  48365. function validate(props, propName, componentName, location, propFullName) {
  48366. if (!isNode(props[propName])) {
  48367. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
  48368. }
  48369. return null;
  48370. }
  48371. return createChainableTypeChecker(validate);
  48372. }
  48373. function createShapeTypeChecker(shapeTypes) {
  48374. function validate(props, propName, componentName, location, propFullName) {
  48375. var propValue = props[propName];
  48376. var propType = getPropType(propValue);
  48377. if (propType !== 'object') {
  48378. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
  48379. }
  48380. for (var key in shapeTypes) {
  48381. var checker = shapeTypes[key];
  48382. if (!checker) {
  48383. continue;
  48384. }
  48385. var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
  48386. if (error) {
  48387. return error;
  48388. }
  48389. }
  48390. return null;
  48391. }
  48392. return createChainableTypeChecker(validate);
  48393. }
  48394. function createStrictShapeTypeChecker(shapeTypes) {
  48395. function validate(props, propName, componentName, location, propFullName) {
  48396. var propValue = props[propName];
  48397. var propType = getPropType(propValue);
  48398. if (propType !== 'object') {
  48399. return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
  48400. }
  48401. // We need to check all keys in case some are required but missing from
  48402. // props.
  48403. var allKeys = assign({}, props[propName], shapeTypes);
  48404. for (var key in allKeys) {
  48405. var checker = shapeTypes[key];
  48406. if (!checker) {
  48407. return new PropTypeError(
  48408. 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
  48409. '\nBad object: ' + JSON.stringify(props[propName], null, ' ') +
  48410. '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')
  48411. );
  48412. }
  48413. var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
  48414. if (error) {
  48415. return error;
  48416. }
  48417. }
  48418. return null;
  48419. }
  48420. return createChainableTypeChecker(validate);
  48421. }
  48422. function isNode(propValue) {
  48423. switch (typeof propValue) {
  48424. case 'number':
  48425. case 'string':
  48426. case 'undefined':
  48427. return true;
  48428. case 'boolean':
  48429. return !propValue;
  48430. case 'object':
  48431. if (Array.isArray(propValue)) {
  48432. return propValue.every(isNode);
  48433. }
  48434. if (propValue === null || isValidElement(propValue)) {
  48435. return true;
  48436. }
  48437. var iteratorFn = getIteratorFn(propValue);
  48438. if (iteratorFn) {
  48439. var iterator = iteratorFn.call(propValue);
  48440. var step;
  48441. if (iteratorFn !== propValue.entries) {
  48442. while (!(step = iterator.next()).done) {
  48443. if (!isNode(step.value)) {
  48444. return false;
  48445. }
  48446. }
  48447. } else {
  48448. // Iterator will provide entry [k,v] tuples rather than values.
  48449. while (!(step = iterator.next()).done) {
  48450. var entry = step.value;
  48451. if (entry) {
  48452. if (!isNode(entry[1])) {
  48453. return false;
  48454. }
  48455. }
  48456. }
  48457. }
  48458. } else {
  48459. return false;
  48460. }
  48461. return true;
  48462. default:
  48463. return false;
  48464. }
  48465. }
  48466. function isSymbol(propType, propValue) {
  48467. // Native Symbol.
  48468. if (propType === 'symbol') {
  48469. return true;
  48470. }
  48471. // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
  48472. if (propValue['@@toStringTag'] === 'Symbol') {
  48473. return true;
  48474. }
  48475. // Fallback for non-spec compliant Symbols which are polyfilled.
  48476. if (typeof Symbol === 'function' && propValue instanceof Symbol) {
  48477. return true;
  48478. }
  48479. return false;
  48480. }
  48481. // Equivalent of `typeof` but with special handling for array and regexp.
  48482. function getPropType(propValue) {
  48483. var propType = typeof propValue;
  48484. if (Array.isArray(propValue)) {
  48485. return 'array';
  48486. }
  48487. if (propValue instanceof RegExp) {
  48488. // Old webkits (at least until Android 4.0) return 'function' rather than
  48489. // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
  48490. // passes PropTypes.object.
  48491. return 'object';
  48492. }
  48493. if (isSymbol(propType, propValue)) {
  48494. return 'symbol';
  48495. }
  48496. return propType;
  48497. }
  48498. // This handles more types than `getPropType`. Only used for error messages.
  48499. // See `createPrimitiveTypeChecker`.
  48500. function getPreciseType(propValue) {
  48501. if (typeof propValue === 'undefined' || propValue === null) {
  48502. return '' + propValue;
  48503. }
  48504. var propType = getPropType(propValue);
  48505. if (propType === 'object') {
  48506. if (propValue instanceof Date) {
  48507. return 'date';
  48508. } else if (propValue instanceof RegExp) {
  48509. return 'regexp';
  48510. }
  48511. }
  48512. return propType;
  48513. }
  48514. // Returns a string that is postfixed to a warning about an invalid type.
  48515. // For example, "undefined" or "of type array"
  48516. function getPostfixForTypeWarning(value) {
  48517. var type = getPreciseType(value);
  48518. switch (type) {
  48519. case 'array':
  48520. case 'object':
  48521. return 'an ' + type;
  48522. case 'boolean':
  48523. case 'date':
  48524. case 'regexp':
  48525. return 'a ' + type;
  48526. default:
  48527. return type;
  48528. }
  48529. }
  48530. // Returns class name of the object, if any.
  48531. function getClassName(propValue) {
  48532. if (!propValue.constructor || !propValue.constructor.name) {
  48533. return ANONYMOUS;
  48534. }
  48535. return propValue.constructor.name;
  48536. }
  48537. ReactPropTypes.checkPropTypes = checkPropTypes;
  48538. ReactPropTypes.PropTypes = ReactPropTypes;
  48539. return ReactPropTypes;
  48540. };
  48541. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)))
  48542. /***/ }),
  48543. /* 680 */
  48544. /***/ (function(module, exports, __webpack_require__) {
  48545. "use strict";
  48546. /* WEBPACK VAR INJECTION */(function(process) {/** @license React v16.2.0
  48547. * react.development.js
  48548. *
  48549. * Copyright (c) 2013-present, Facebook, Inc.
  48550. *
  48551. * This source code is licensed under the MIT license found in the
  48552. * LICENSE file in the root directory of this source tree.
  48553. */
  48554. if (process.env.NODE_ENV !== "production") {
  48555. (function() {
  48556. 'use strict';
  48557. var _assign = __webpack_require__(171);
  48558. var emptyObject = __webpack_require__(233);
  48559. var invariant = __webpack_require__(101);
  48560. var warning = __webpack_require__(155);
  48561. var emptyFunction = __webpack_require__(74);
  48562. var checkPropTypes = __webpack_require__(284);
  48563. // TODO: this is special because it gets imported during build.
  48564. var ReactVersion = '16.2.0';
  48565. // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
  48566. // nor polyfill, then a plain number is used for performance.
  48567. var hasSymbol = typeof Symbol === 'function' && Symbol['for'];
  48568. var REACT_ELEMENT_TYPE = hasSymbol ? Symbol['for']('react.element') : 0xeac7;
  48569. var REACT_CALL_TYPE = hasSymbol ? Symbol['for']('react.call') : 0xeac8;
  48570. var REACT_RETURN_TYPE = hasSymbol ? Symbol['for']('react.return') : 0xeac9;
  48571. var REACT_PORTAL_TYPE = hasSymbol ? Symbol['for']('react.portal') : 0xeaca;
  48572. var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol['for']('react.fragment') : 0xeacb;
  48573. var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
  48574. var FAUX_ITERATOR_SYMBOL = '@@iterator';
  48575. function getIteratorFn(maybeIterable) {
  48576. if (maybeIterable === null || typeof maybeIterable === 'undefined') {
  48577. return null;
  48578. }
  48579. var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
  48580. if (typeof maybeIterator === 'function') {
  48581. return maybeIterator;
  48582. }
  48583. return null;
  48584. }
  48585. /**
  48586. * WARNING: DO NOT manually require this module.
  48587. * This is a replacement for `invariant(...)` used by the error code system
  48588. * and will _only_ be required by the corresponding babel pass.
  48589. * It always throws.
  48590. */
  48591. /**
  48592. * Forked from fbjs/warning:
  48593. * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js
  48594. *
  48595. * Only change is we use console.warn instead of console.error,
  48596. * and do nothing when 'console' is not supported.
  48597. * This really simplifies the code.
  48598. * ---
  48599. * Similar to invariant but only logs a warning if the condition is not met.
  48600. * This can be used to log issues in development environments in critical
  48601. * paths. Removing the logging code for production environments will keep the
  48602. * same logic and follow the same code paths.
  48603. */
  48604. var lowPriorityWarning = function () {};
  48605. {
  48606. var printWarning = function (format) {
  48607. for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  48608. args[_key - 1] = arguments[_key];
  48609. }
  48610. var argIndex = 0;
  48611. var message = 'Warning: ' + format.replace(/%s/g, function () {
  48612. return args[argIndex++];
  48613. });
  48614. if (typeof console !== 'undefined') {
  48615. console.warn(message);
  48616. }
  48617. try {
  48618. // --- Welcome to debugging React ---
  48619. // This error was thrown as a convenience so that you can use this stack
  48620. // to find the callsite that caused this warning to fire.
  48621. throw new Error(message);
  48622. } catch (x) {}
  48623. };
  48624. lowPriorityWarning = function (condition, format) {
  48625. if (format === undefined) {
  48626. throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
  48627. }
  48628. if (!condition) {
  48629. for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
  48630. args[_key2 - 2] = arguments[_key2];
  48631. }
  48632. printWarning.apply(undefined, [format].concat(args));
  48633. }
  48634. };
  48635. }
  48636. var lowPriorityWarning$1 = lowPriorityWarning;
  48637. var didWarnStateUpdateForUnmountedComponent = {};
  48638. function warnNoop(publicInstance, callerName) {
  48639. {
  48640. var constructor = publicInstance.constructor;
  48641. var componentName = constructor && (constructor.displayName || constructor.name) || 'ReactClass';
  48642. var warningKey = componentName + '.' + callerName;
  48643. if (didWarnStateUpdateForUnmountedComponent[warningKey]) {
  48644. return;
  48645. }
  48646. warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op.\n\nPlease check the code for the %s component.', callerName, callerName, componentName);
  48647. didWarnStateUpdateForUnmountedComponent[warningKey] = true;
  48648. }
  48649. }
  48650. /**
  48651. * This is the abstract API for an update queue.
  48652. */
  48653. var ReactNoopUpdateQueue = {
  48654. /**
  48655. * Checks whether or not this composite component is mounted.
  48656. * @param {ReactClass} publicInstance The instance we want to test.
  48657. * @return {boolean} True if mounted, false otherwise.
  48658. * @protected
  48659. * @final
  48660. */
  48661. isMounted: function (publicInstance) {
  48662. return false;
  48663. },
  48664. /**
  48665. * Forces an update. This should only be invoked when it is known with
  48666. * certainty that we are **not** in a DOM transaction.
  48667. *
  48668. * You may want to call this when you know that some deeper aspect of the
  48669. * component's state has changed but `setState` was not called.
  48670. *
  48671. * This will not invoke `shouldComponentUpdate`, but it will invoke
  48672. * `componentWillUpdate` and `componentDidUpdate`.
  48673. *
  48674. * @param {ReactClass} publicInstance The instance that should rerender.
  48675. * @param {?function} callback Called after component is updated.
  48676. * @param {?string} callerName name of the calling function in the public API.
  48677. * @internal
  48678. */
  48679. enqueueForceUpdate: function (publicInstance, callback, callerName) {
  48680. warnNoop(publicInstance, 'forceUpdate');
  48681. },
  48682. /**
  48683. * Replaces all of the state. Always use this or `setState` to mutate state.
  48684. * You should treat `this.state` as immutable.
  48685. *
  48686. * There is no guarantee that `this.state` will be immediately updated, so
  48687. * accessing `this.state` after calling this method may return the old value.
  48688. *
  48689. * @param {ReactClass} publicInstance The instance that should rerender.
  48690. * @param {object} completeState Next state.
  48691. * @param {?function} callback Called after component is updated.
  48692. * @param {?string} callerName name of the calling function in the public API.
  48693. * @internal
  48694. */
  48695. enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {
  48696. warnNoop(publicInstance, 'replaceState');
  48697. },
  48698. /**
  48699. * Sets a subset of the state. This only exists because _pendingState is
  48700. * internal. This provides a merging strategy that is not available to deep
  48701. * properties which is confusing. TODO: Expose pendingState or don't use it
  48702. * during the merge.
  48703. *
  48704. * @param {ReactClass} publicInstance The instance that should rerender.
  48705. * @param {object} partialState Next partial state to be merged with state.
  48706. * @param {?function} callback Called after component is updated.
  48707. * @param {?string} Name of the calling function in the public API.
  48708. * @internal
  48709. */
  48710. enqueueSetState: function (publicInstance, partialState, callback, callerName) {
  48711. warnNoop(publicInstance, 'setState');
  48712. }
  48713. };
  48714. /**
  48715. * Base class helpers for the updating state of a component.
  48716. */
  48717. function Component(props, context, updater) {
  48718. this.props = props;
  48719. this.context = context;
  48720. this.refs = emptyObject;
  48721. // We initialize the default updater but the real one gets injected by the
  48722. // renderer.
  48723. this.updater = updater || ReactNoopUpdateQueue;
  48724. }
  48725. Component.prototype.isReactComponent = {};
  48726. /**
  48727. * Sets a subset of the state. Always use this to mutate
  48728. * state. You should treat `this.state` as immutable.
  48729. *
  48730. * There is no guarantee that `this.state` will be immediately updated, so
  48731. * accessing `this.state` after calling this method may return the old value.
  48732. *
  48733. * There is no guarantee that calls to `setState` will run synchronously,
  48734. * as they may eventually be batched together. You can provide an optional
  48735. * callback that will be executed when the call to setState is actually
  48736. * completed.
  48737. *
  48738. * When a function is provided to setState, it will be called at some point in
  48739. * the future (not synchronously). It will be called with the up to date
  48740. * component arguments (state, props, context). These values can be different
  48741. * from this.* because your function may be called after receiveProps but before
  48742. * shouldComponentUpdate, and this new state, props, and context will not yet be
  48743. * assigned to this.
  48744. *
  48745. * @param {object|function} partialState Next partial state or function to
  48746. * produce next partial state to be merged with current state.
  48747. * @param {?function} callback Called after state is updated.
  48748. * @final
  48749. * @protected
  48750. */
  48751. Component.prototype.setState = function (partialState, callback) {
  48752. !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : void 0;
  48753. this.updater.enqueueSetState(this, partialState, callback, 'setState');
  48754. };
  48755. /**
  48756. * Forces an update. This should only be invoked when it is known with
  48757. * certainty that we are **not** in a DOM transaction.
  48758. *
  48759. * You may want to call this when you know that some deeper aspect of the
  48760. * component's state has changed but `setState` was not called.
  48761. *
  48762. * This will not invoke `shouldComponentUpdate`, but it will invoke
  48763. * `componentWillUpdate` and `componentDidUpdate`.
  48764. *
  48765. * @param {?function} callback Called after update is complete.
  48766. * @final
  48767. * @protected
  48768. */
  48769. Component.prototype.forceUpdate = function (callback) {
  48770. this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
  48771. };
  48772. /**
  48773. * Deprecated APIs. These APIs used to exist on classic React classes but since
  48774. * we would like to deprecate them, we're not going to move them over to this
  48775. * modern base class. Instead, we define a getter that warns if it's accessed.
  48776. */
  48777. {
  48778. var deprecatedAPIs = {
  48779. isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
  48780. replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
  48781. };
  48782. var defineDeprecationWarning = function (methodName, info) {
  48783. Object.defineProperty(Component.prototype, methodName, {
  48784. get: function () {
  48785. lowPriorityWarning$1(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);
  48786. return undefined;
  48787. }
  48788. });
  48789. };
  48790. for (var fnName in deprecatedAPIs) {
  48791. if (deprecatedAPIs.hasOwnProperty(fnName)) {
  48792. defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
  48793. }
  48794. }
  48795. }
  48796. /**
  48797. * Base class helpers for the updating state of a component.
  48798. */
  48799. function PureComponent(props, context, updater) {
  48800. // Duplicated from Component.
  48801. this.props = props;
  48802. this.context = context;
  48803. this.refs = emptyObject;
  48804. // We initialize the default updater but the real one gets injected by the
  48805. // renderer.
  48806. this.updater = updater || ReactNoopUpdateQueue;
  48807. }
  48808. function ComponentDummy() {}
  48809. ComponentDummy.prototype = Component.prototype;
  48810. var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();
  48811. pureComponentPrototype.constructor = PureComponent;
  48812. // Avoid an extra prototype jump for these methods.
  48813. _assign(pureComponentPrototype, Component.prototype);
  48814. pureComponentPrototype.isPureReactComponent = true;
  48815. function AsyncComponent(props, context, updater) {
  48816. // Duplicated from Component.
  48817. this.props = props;
  48818. this.context = context;
  48819. this.refs = emptyObject;
  48820. // We initialize the default updater but the real one gets injected by the
  48821. // renderer.
  48822. this.updater = updater || ReactNoopUpdateQueue;
  48823. }
  48824. var asyncComponentPrototype = AsyncComponent.prototype = new ComponentDummy();
  48825. asyncComponentPrototype.constructor = AsyncComponent;
  48826. // Avoid an extra prototype jump for these methods.
  48827. _assign(asyncComponentPrototype, Component.prototype);
  48828. asyncComponentPrototype.unstable_isAsyncReactComponent = true;
  48829. asyncComponentPrototype.render = function () {
  48830. return this.props.children;
  48831. };
  48832. /**
  48833. * Keeps track of the current owner.
  48834. *
  48835. * The current owner is the component who should own any components that are
  48836. * currently being constructed.
  48837. */
  48838. var ReactCurrentOwner = {
  48839. /**
  48840. * @internal
  48841. * @type {ReactComponent}
  48842. */
  48843. current: null
  48844. };
  48845. var hasOwnProperty = Object.prototype.hasOwnProperty;
  48846. var RESERVED_PROPS = {
  48847. key: true,
  48848. ref: true,
  48849. __self: true,
  48850. __source: true
  48851. };
  48852. var specialPropKeyWarningShown;
  48853. var specialPropRefWarningShown;
  48854. function hasValidRef(config) {
  48855. {
  48856. if (hasOwnProperty.call(config, 'ref')) {
  48857. var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
  48858. if (getter && getter.isReactWarning) {
  48859. return false;
  48860. }
  48861. }
  48862. }
  48863. return config.ref !== undefined;
  48864. }
  48865. function hasValidKey(config) {
  48866. {
  48867. if (hasOwnProperty.call(config, 'key')) {
  48868. var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
  48869. if (getter && getter.isReactWarning) {
  48870. return false;
  48871. }
  48872. }
  48873. }
  48874. return config.key !== undefined;
  48875. }
  48876. function defineKeyPropWarningGetter(props, displayName) {
  48877. var warnAboutAccessingKey = function () {
  48878. if (!specialPropKeyWarningShown) {
  48879. specialPropKeyWarningShown = true;
  48880. warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);
  48881. }
  48882. };
  48883. warnAboutAccessingKey.isReactWarning = true;
  48884. Object.defineProperty(props, 'key', {
  48885. get: warnAboutAccessingKey,
  48886. configurable: true
  48887. });
  48888. }
  48889. function defineRefPropWarningGetter(props, displayName) {
  48890. var warnAboutAccessingRef = function () {
  48891. if (!specialPropRefWarningShown) {
  48892. specialPropRefWarningShown = true;
  48893. warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);
  48894. }
  48895. };
  48896. warnAboutAccessingRef.isReactWarning = true;
  48897. Object.defineProperty(props, 'ref', {
  48898. get: warnAboutAccessingRef,
  48899. configurable: true
  48900. });
  48901. }
  48902. /**
  48903. * Factory method to create a new React element. This no longer adheres to
  48904. * the class pattern, so do not use new to call it. Also, no instanceof check
  48905. * will work. Instead test $$typeof field against Symbol.for('react.element') to check
  48906. * if something is a React Element.
  48907. *
  48908. * @param {*} type
  48909. * @param {*} key
  48910. * @param {string|object} ref
  48911. * @param {*} self A *temporary* helper to detect places where `this` is
  48912. * different from the `owner` when React.createElement is called, so that we
  48913. * can warn. We want to get rid of owner and replace string `ref`s with arrow
  48914. * functions, and as long as `this` and owner are the same, there will be no
  48915. * change in behavior.
  48916. * @param {*} source An annotation object (added by a transpiler or otherwise)
  48917. * indicating filename, line number, and/or other information.
  48918. * @param {*} owner
  48919. * @param {*} props
  48920. * @internal
  48921. */
  48922. var ReactElement = function (type, key, ref, self, source, owner, props) {
  48923. var element = {
  48924. // This tag allow us to uniquely identify this as a React Element
  48925. $$typeof: REACT_ELEMENT_TYPE,
  48926. // Built-in properties that belong on the element
  48927. type: type,
  48928. key: key,
  48929. ref: ref,
  48930. props: props,
  48931. // Record the component responsible for creating this element.
  48932. _owner: owner
  48933. };
  48934. {
  48935. // The validation flag is currently mutative. We put it on
  48936. // an external backing store so that we can freeze the whole object.
  48937. // This can be replaced with a WeakMap once they are implemented in
  48938. // commonly used development environments.
  48939. element._store = {};
  48940. // To make comparing ReactElements easier for testing purposes, we make
  48941. // the validation flag non-enumerable (where possible, which should
  48942. // include every environment we run tests in), so the test framework
  48943. // ignores it.
  48944. Object.defineProperty(element._store, 'validated', {
  48945. configurable: false,
  48946. enumerable: false,
  48947. writable: true,
  48948. value: false
  48949. });
  48950. // self and source are DEV only properties.
  48951. Object.defineProperty(element, '_self', {
  48952. configurable: false,
  48953. enumerable: false,
  48954. writable: false,
  48955. value: self
  48956. });
  48957. // Two elements created in two different places should be considered
  48958. // equal for testing purposes and therefore we hide it from enumeration.
  48959. Object.defineProperty(element, '_source', {
  48960. configurable: false,
  48961. enumerable: false,
  48962. writable: false,
  48963. value: source
  48964. });
  48965. if (Object.freeze) {
  48966. Object.freeze(element.props);
  48967. Object.freeze(element);
  48968. }
  48969. }
  48970. return element;
  48971. };
  48972. /**
  48973. * Create and return a new ReactElement of the given type.
  48974. * See https://reactjs.org/docs/react-api.html#createelement
  48975. */
  48976. function createElement(type, config, children) {
  48977. var propName;
  48978. // Reserved names are extracted
  48979. var props = {};
  48980. var key = null;
  48981. var ref = null;
  48982. var self = null;
  48983. var source = null;
  48984. if (config != null) {
  48985. if (hasValidRef(config)) {
  48986. ref = config.ref;
  48987. }
  48988. if (hasValidKey(config)) {
  48989. key = '' + config.key;
  48990. }
  48991. self = config.__self === undefined ? null : config.__self;
  48992. source = config.__source === undefined ? null : config.__source;
  48993. // Remaining properties are added to a new props object
  48994. for (propName in config) {
  48995. if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
  48996. props[propName] = config[propName];
  48997. }
  48998. }
  48999. }
  49000. // Children can be more than one argument, and those are transferred onto
  49001. // the newly allocated props object.
  49002. var childrenLength = arguments.length - 2;
  49003. if (childrenLength === 1) {
  49004. props.children = children;
  49005. } else if (childrenLength > 1) {
  49006. var childArray = Array(childrenLength);
  49007. for (var i = 0; i < childrenLength; i++) {
  49008. childArray[i] = arguments[i + 2];
  49009. }
  49010. {
  49011. if (Object.freeze) {
  49012. Object.freeze(childArray);
  49013. }
  49014. }
  49015. props.children = childArray;
  49016. }
  49017. // Resolve default props
  49018. if (type && type.defaultProps) {
  49019. var defaultProps = type.defaultProps;
  49020. for (propName in defaultProps) {
  49021. if (props[propName] === undefined) {
  49022. props[propName] = defaultProps[propName];
  49023. }
  49024. }
  49025. }
  49026. {
  49027. if (key || ref) {
  49028. if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {
  49029. var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
  49030. if (key) {
  49031. defineKeyPropWarningGetter(props, displayName);
  49032. }
  49033. if (ref) {
  49034. defineRefPropWarningGetter(props, displayName);
  49035. }
  49036. }
  49037. }
  49038. }
  49039. return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
  49040. }
  49041. /**
  49042. * Return a function that produces ReactElements of a given type.
  49043. * See https://reactjs.org/docs/react-api.html#createfactory
  49044. */
  49045. function cloneAndReplaceKey(oldElement, newKey) {
  49046. var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
  49047. return newElement;
  49048. }
  49049. /**
  49050. * Clone and return a new ReactElement using element as the starting point.
  49051. * See https://reactjs.org/docs/react-api.html#cloneelement
  49052. */
  49053. function cloneElement(element, config, children) {
  49054. var propName;
  49055. // Original props are copied
  49056. var props = _assign({}, element.props);
  49057. // Reserved names are extracted
  49058. var key = element.key;
  49059. var ref = element.ref;
  49060. // Self is preserved since the owner is preserved.
  49061. var self = element._self;
  49062. // Source is preserved since cloneElement is unlikely to be targeted by a
  49063. // transpiler, and the original source is probably a better indicator of the
  49064. // true owner.
  49065. var source = element._source;
  49066. // Owner will be preserved, unless ref is overridden
  49067. var owner = element._owner;
  49068. if (config != null) {
  49069. if (hasValidRef(config)) {
  49070. // Silently steal the ref from the parent.
  49071. ref = config.ref;
  49072. owner = ReactCurrentOwner.current;
  49073. }
  49074. if (hasValidKey(config)) {
  49075. key = '' + config.key;
  49076. }
  49077. // Remaining properties override existing props
  49078. var defaultProps;
  49079. if (element.type && element.type.defaultProps) {
  49080. defaultProps = element.type.defaultProps;
  49081. }
  49082. for (propName in config) {
  49083. if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
  49084. if (config[propName] === undefined && defaultProps !== undefined) {
  49085. // Resolve default props
  49086. props[propName] = defaultProps[propName];
  49087. } else {
  49088. props[propName] = config[propName];
  49089. }
  49090. }
  49091. }
  49092. }
  49093. // Children can be more than one argument, and those are transferred onto
  49094. // the newly allocated props object.
  49095. var childrenLength = arguments.length - 2;
  49096. if (childrenLength === 1) {
  49097. props.children = children;
  49098. } else if (childrenLength > 1) {
  49099. var childArray = Array(childrenLength);
  49100. for (var i = 0; i < childrenLength; i++) {
  49101. childArray[i] = arguments[i + 2];
  49102. }
  49103. props.children = childArray;
  49104. }
  49105. return ReactElement(element.type, key, ref, self, source, owner, props);
  49106. }
  49107. /**
  49108. * Verifies the object is a ReactElement.
  49109. * See https://reactjs.org/docs/react-api.html#isvalidelement
  49110. * @param {?object} object
  49111. * @return {boolean} True if `object` is a valid component.
  49112. * @final
  49113. */
  49114. function isValidElement(object) {
  49115. return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  49116. }
  49117. var ReactDebugCurrentFrame = {};
  49118. {
  49119. // Component that is being worked on
  49120. ReactDebugCurrentFrame.getCurrentStack = null;
  49121. ReactDebugCurrentFrame.getStackAddendum = function () {
  49122. var impl = ReactDebugCurrentFrame.getCurrentStack;
  49123. if (impl) {
  49124. return impl();
  49125. }
  49126. return null;
  49127. };
  49128. }
  49129. var SEPARATOR = '.';
  49130. var SUBSEPARATOR = ':';
  49131. /**
  49132. * Escape and wrap key so it is safe to use as a reactid
  49133. *
  49134. * @param {string} key to be escaped.
  49135. * @return {string} the escaped key.
  49136. */
  49137. function escape(key) {
  49138. var escapeRegex = /[=:]/g;
  49139. var escaperLookup = {
  49140. '=': '=0',
  49141. ':': '=2'
  49142. };
  49143. var escapedString = ('' + key).replace(escapeRegex, function (match) {
  49144. return escaperLookup[match];
  49145. });
  49146. return '$' + escapedString;
  49147. }
  49148. /**
  49149. * TODO: Test that a single child and an array with one item have the same key
  49150. * pattern.
  49151. */
  49152. var didWarnAboutMaps = false;
  49153. var userProvidedKeyEscapeRegex = /\/+/g;
  49154. function escapeUserProvidedKey(text) {
  49155. return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');
  49156. }
  49157. var POOL_SIZE = 10;
  49158. var traverseContextPool = [];
  49159. function getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {
  49160. if (traverseContextPool.length) {
  49161. var traverseContext = traverseContextPool.pop();
  49162. traverseContext.result = mapResult;
  49163. traverseContext.keyPrefix = keyPrefix;
  49164. traverseContext.func = mapFunction;
  49165. traverseContext.context = mapContext;
  49166. traverseContext.count = 0;
  49167. return traverseContext;
  49168. } else {
  49169. return {
  49170. result: mapResult,
  49171. keyPrefix: keyPrefix,
  49172. func: mapFunction,
  49173. context: mapContext,
  49174. count: 0
  49175. };
  49176. }
  49177. }
  49178. function releaseTraverseContext(traverseContext) {
  49179. traverseContext.result = null;
  49180. traverseContext.keyPrefix = null;
  49181. traverseContext.func = null;
  49182. traverseContext.context = null;
  49183. traverseContext.count = 0;
  49184. if (traverseContextPool.length < POOL_SIZE) {
  49185. traverseContextPool.push(traverseContext);
  49186. }
  49187. }
  49188. /**
  49189. * @param {?*} children Children tree container.
  49190. * @param {!string} nameSoFar Name of the key path so far.
  49191. * @param {!function} callback Callback to invoke with each child found.
  49192. * @param {?*} traverseContext Used to pass information throughout the traversal
  49193. * process.
  49194. * @return {!number} The number of children in this subtree.
  49195. */
  49196. function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {
  49197. var type = typeof children;
  49198. if (type === 'undefined' || type === 'boolean') {
  49199. // All of the above are perceived as null.
  49200. children = null;
  49201. }
  49202. var invokeCallback = false;
  49203. if (children === null) {
  49204. invokeCallback = true;
  49205. } else {
  49206. switch (type) {
  49207. case 'string':
  49208. case 'number':
  49209. invokeCallback = true;
  49210. break;
  49211. case 'object':
  49212. switch (children.$$typeof) {
  49213. case REACT_ELEMENT_TYPE:
  49214. case REACT_CALL_TYPE:
  49215. case REACT_RETURN_TYPE:
  49216. case REACT_PORTAL_TYPE:
  49217. invokeCallback = true;
  49218. }
  49219. }
  49220. }
  49221. if (invokeCallback) {
  49222. callback(traverseContext, children,
  49223. // If it's the only child, treat the name as if it was wrapped in an array
  49224. // so that it's consistent if the number of children grows.
  49225. nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);
  49226. return 1;
  49227. }
  49228. var child;
  49229. var nextName;
  49230. var subtreeCount = 0; // Count of children found in the current subtree.
  49231. var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
  49232. if (Array.isArray(children)) {
  49233. for (var i = 0; i < children.length; i++) {
  49234. child = children[i];
  49235. nextName = nextNamePrefix + getComponentKey(child, i);
  49236. subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
  49237. }
  49238. } else {
  49239. var iteratorFn = getIteratorFn(children);
  49240. if (typeof iteratorFn === 'function') {
  49241. {
  49242. // Warn about using Maps as children
  49243. if (iteratorFn === children.entries) {
  49244. warning(didWarnAboutMaps, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.%s', ReactDebugCurrentFrame.getStackAddendum());
  49245. didWarnAboutMaps = true;
  49246. }
  49247. }
  49248. var iterator = iteratorFn.call(children);
  49249. var step;
  49250. var ii = 0;
  49251. while (!(step = iterator.next()).done) {
  49252. child = step.value;
  49253. nextName = nextNamePrefix + getComponentKey(child, ii++);
  49254. subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
  49255. }
  49256. } else if (type === 'object') {
  49257. var addendum = '';
  49258. {
  49259. addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();
  49260. }
  49261. var childrenString = '' + children;
  49262. invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum);
  49263. }
  49264. }
  49265. return subtreeCount;
  49266. }
  49267. /**
  49268. * Traverses children that are typically specified as `props.children`, but
  49269. * might also be specified through attributes:
  49270. *
  49271. * - `traverseAllChildren(this.props.children, ...)`
  49272. * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
  49273. *
  49274. * The `traverseContext` is an optional argument that is passed through the
  49275. * entire traversal. It can be used to store accumulations or anything else that
  49276. * the callback might find relevant.
  49277. *
  49278. * @param {?*} children Children tree object.
  49279. * @param {!function} callback To invoke upon traversing each child.
  49280. * @param {?*} traverseContext Context for traversal.
  49281. * @return {!number} The number of children in this subtree.
  49282. */
  49283. function traverseAllChildren(children, callback, traverseContext) {
  49284. if (children == null) {
  49285. return 0;
  49286. }
  49287. return traverseAllChildrenImpl(children, '', callback, traverseContext);
  49288. }
  49289. /**
  49290. * Generate a key string that identifies a component within a set.
  49291. *
  49292. * @param {*} component A component that could contain a manual key.
  49293. * @param {number} index Index that is used if a manual key is not provided.
  49294. * @return {string}
  49295. */
  49296. function getComponentKey(component, index) {
  49297. // Do some typechecking here since we call this blindly. We want to ensure
  49298. // that we don't block potential future ES APIs.
  49299. if (typeof component === 'object' && component !== null && component.key != null) {
  49300. // Explicit key
  49301. return escape(component.key);
  49302. }
  49303. // Implicit key determined by the index in the set
  49304. return index.toString(36);
  49305. }
  49306. function forEachSingleChild(bookKeeping, child, name) {
  49307. var func = bookKeeping.func,
  49308. context = bookKeeping.context;
  49309. func.call(context, child, bookKeeping.count++);
  49310. }
  49311. /**
  49312. * Iterates through children that are typically specified as `props.children`.
  49313. *
  49314. * See https://reactjs.org/docs/react-api.html#react.children.foreach
  49315. *
  49316. * The provided forEachFunc(child, index) will be called for each
  49317. * leaf child.
  49318. *
  49319. * @param {?*} children Children tree container.
  49320. * @param {function(*, int)} forEachFunc
  49321. * @param {*} forEachContext Context for forEachContext.
  49322. */
  49323. function forEachChildren(children, forEachFunc, forEachContext) {
  49324. if (children == null) {
  49325. return children;
  49326. }
  49327. var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);
  49328. traverseAllChildren(children, forEachSingleChild, traverseContext);
  49329. releaseTraverseContext(traverseContext);
  49330. }
  49331. function mapSingleChildIntoContext(bookKeeping, child, childKey) {
  49332. var result = bookKeeping.result,
  49333. keyPrefix = bookKeeping.keyPrefix,
  49334. func = bookKeeping.func,
  49335. context = bookKeeping.context;
  49336. var mappedChild = func.call(context, child, bookKeeping.count++);
  49337. if (Array.isArray(mappedChild)) {
  49338. mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);
  49339. } else if (mappedChild != null) {
  49340. if (isValidElement(mappedChild)) {
  49341. mappedChild = cloneAndReplaceKey(mappedChild,
  49342. // Keep both the (mapped) and old keys if they differ, just as
  49343. // traverseAllChildren used to do for objects as children
  49344. keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);
  49345. }
  49346. result.push(mappedChild);
  49347. }
  49348. }
  49349. function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
  49350. var escapedPrefix = '';
  49351. if (prefix != null) {
  49352. escapedPrefix = escapeUserProvidedKey(prefix) + '/';
  49353. }
  49354. var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);
  49355. traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
  49356. releaseTraverseContext(traverseContext);
  49357. }
  49358. /**
  49359. * Maps children that are typically specified as `props.children`.
  49360. *
  49361. * See https://reactjs.org/docs/react-api.html#react.children.map
  49362. *
  49363. * The provided mapFunction(child, key, index) will be called for each
  49364. * leaf child.
  49365. *
  49366. * @param {?*} children Children tree container.
  49367. * @param {function(*, int)} func The map function.
  49368. * @param {*} context Context for mapFunction.
  49369. * @return {object} Object containing the ordered map of results.
  49370. */
  49371. function mapChildren(children, func, context) {
  49372. if (children == null) {
  49373. return children;
  49374. }
  49375. var result = [];
  49376. mapIntoWithKeyPrefixInternal(children, result, null, func, context);
  49377. return result;
  49378. }
  49379. /**
  49380. * Count the number of children that are typically specified as
  49381. * `props.children`.
  49382. *
  49383. * See https://reactjs.org/docs/react-api.html#react.children.count
  49384. *
  49385. * @param {?*} children Children tree container.
  49386. * @return {number} The number of children.
  49387. */
  49388. function countChildren(children, context) {
  49389. return traverseAllChildren(children, emptyFunction.thatReturnsNull, null);
  49390. }
  49391. /**
  49392. * Flatten a children object (typically specified as `props.children`) and
  49393. * return an array with appropriately re-keyed children.
  49394. *
  49395. * See https://reactjs.org/docs/react-api.html#react.children.toarray
  49396. */
  49397. function toArray(children) {
  49398. var result = [];
  49399. mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);
  49400. return result;
  49401. }
  49402. /**
  49403. * Returns the first child in a collection of children and verifies that there
  49404. * is only one child in the collection.
  49405. *
  49406. * See https://reactjs.org/docs/react-api.html#react.children.only
  49407. *
  49408. * The current implementation of this function assumes that a single child gets
  49409. * passed without a wrapper, but the purpose of this helper function is to
  49410. * abstract away the particular structure of children.
  49411. *
  49412. * @param {?object} children Child collection structure.
  49413. * @return {ReactElement} The first and only `ReactElement` contained in the
  49414. * structure.
  49415. */
  49416. function onlyChild(children) {
  49417. !isValidElement(children) ? invariant(false, 'React.Children.only expected to receive a single React element child.') : void 0;
  49418. return children;
  49419. }
  49420. var describeComponentFrame = function (name, source, ownerName) {
  49421. return '\n in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');
  49422. };
  49423. function getComponentName(fiber) {
  49424. var type = fiber.type;
  49425. if (typeof type === 'string') {
  49426. return type;
  49427. }
  49428. if (typeof type === 'function') {
  49429. return type.displayName || type.name;
  49430. }
  49431. return null;
  49432. }
  49433. /**
  49434. * ReactElementValidator provides a wrapper around a element factory
  49435. * which validates the props passed to the element. This is intended to be
  49436. * used only in DEV and could be replaced by a static type checker for languages
  49437. * that support it.
  49438. */
  49439. {
  49440. var currentlyValidatingElement = null;
  49441. var propTypesMisspellWarningShown = false;
  49442. var getDisplayName = function (element) {
  49443. if (element == null) {
  49444. return '#empty';
  49445. } else if (typeof element === 'string' || typeof element === 'number') {
  49446. return '#text';
  49447. } else if (typeof element.type === 'string') {
  49448. return element.type;
  49449. } else if (element.type === REACT_FRAGMENT_TYPE) {
  49450. return 'React.Fragment';
  49451. } else {
  49452. return element.type.displayName || element.type.name || 'Unknown';
  49453. }
  49454. };
  49455. var getStackAddendum = function () {
  49456. var stack = '';
  49457. if (currentlyValidatingElement) {
  49458. var name = getDisplayName(currentlyValidatingElement);
  49459. var owner = currentlyValidatingElement._owner;
  49460. stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner));
  49461. }
  49462. stack += ReactDebugCurrentFrame.getStackAddendum() || '';
  49463. return stack;
  49464. };
  49465. var VALID_FRAGMENT_PROPS = new Map([['children', true], ['key', true]]);
  49466. }
  49467. function getDeclarationErrorAddendum() {
  49468. if (ReactCurrentOwner.current) {
  49469. var name = getComponentName(ReactCurrentOwner.current);
  49470. if (name) {
  49471. return '\n\nCheck the render method of `' + name + '`.';
  49472. }
  49473. }
  49474. return '';
  49475. }
  49476. function getSourceInfoErrorAddendum(elementProps) {
  49477. if (elementProps !== null && elementProps !== undefined && elementProps.__source !== undefined) {
  49478. var source = elementProps.__source;
  49479. var fileName = source.fileName.replace(/^.*[\\\/]/, '');
  49480. var lineNumber = source.lineNumber;
  49481. return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
  49482. }
  49483. return '';
  49484. }
  49485. /**
  49486. * Warn if there's no key explicitly set on dynamic arrays of children or
  49487. * object keys are not valid. This allows us to keep track of children between
  49488. * updates.
  49489. */
  49490. var ownerHasKeyUseWarning = {};
  49491. function getCurrentComponentErrorInfo(parentType) {
  49492. var info = getDeclarationErrorAddendum();
  49493. if (!info) {
  49494. var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
  49495. if (parentName) {
  49496. info = '\n\nCheck the top-level render call using <' + parentName + '>.';
  49497. }
  49498. }
  49499. return info;
  49500. }
  49501. /**
  49502. * Warn if the element doesn't have an explicit key assigned to it.
  49503. * This element is in an array. The array could grow and shrink or be
  49504. * reordered. All children that haven't already been validated are required to
  49505. * have a "key" property assigned to it. Error statuses are cached so a warning
  49506. * will only be shown once.
  49507. *
  49508. * @internal
  49509. * @param {ReactElement} element Element that requires a key.
  49510. * @param {*} parentType element's parent's type.
  49511. */
  49512. function validateExplicitKey(element, parentType) {
  49513. if (!element._store || element._store.validated || element.key != null) {
  49514. return;
  49515. }
  49516. element._store.validated = true;
  49517. var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
  49518. if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
  49519. return;
  49520. }
  49521. ownerHasKeyUseWarning[currentComponentErrorInfo] = true;
  49522. // Usually the current owner is the offender, but if it accepts children as a
  49523. // property, it may be the creator of the child that's responsible for
  49524. // assigning it a key.
  49525. var childOwner = '';
  49526. if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
  49527. // Give the component that originally created this child.
  49528. childOwner = ' It was passed a child from ' + getComponentName(element._owner) + '.';
  49529. }
  49530. currentlyValidatingElement = element;
  49531. {
  49532. warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, getStackAddendum());
  49533. }
  49534. currentlyValidatingElement = null;
  49535. }
  49536. /**
  49537. * Ensure that every element either is passed in a static location, in an
  49538. * array with an explicit keys property defined, or in an object literal
  49539. * with valid key property.
  49540. *
  49541. * @internal
  49542. * @param {ReactNode} node Statically passed child of any type.
  49543. * @param {*} parentType node's parent's type.
  49544. */
  49545. function validateChildKeys(node, parentType) {
  49546. if (typeof node !== 'object') {
  49547. return;
  49548. }
  49549. if (Array.isArray(node)) {
  49550. for (var i = 0; i < node.length; i++) {
  49551. var child = node[i];
  49552. if (isValidElement(child)) {
  49553. validateExplicitKey(child, parentType);
  49554. }
  49555. }
  49556. } else if (isValidElement(node)) {
  49557. // This element was passed in a valid location.
  49558. if (node._store) {
  49559. node._store.validated = true;
  49560. }
  49561. } else if (node) {
  49562. var iteratorFn = getIteratorFn(node);
  49563. if (typeof iteratorFn === 'function') {
  49564. // Entry iterators used to provide implicit keys,
  49565. // but now we print a separate warning for them later.
  49566. if (iteratorFn !== node.entries) {
  49567. var iterator = iteratorFn.call(node);
  49568. var step;
  49569. while (!(step = iterator.next()).done) {
  49570. if (isValidElement(step.value)) {
  49571. validateExplicitKey(step.value, parentType);
  49572. }
  49573. }
  49574. }
  49575. }
  49576. }
  49577. }
  49578. /**
  49579. * Given an element, validate that its props follow the propTypes definition,
  49580. * provided by the type.
  49581. *
  49582. * @param {ReactElement} element
  49583. */
  49584. function validatePropTypes(element) {
  49585. var componentClass = element.type;
  49586. if (typeof componentClass !== 'function') {
  49587. return;
  49588. }
  49589. var name = componentClass.displayName || componentClass.name;
  49590. var propTypes = componentClass.propTypes;
  49591. if (propTypes) {
  49592. currentlyValidatingElement = element;
  49593. checkPropTypes(propTypes, element.props, 'prop', name, getStackAddendum);
  49594. currentlyValidatingElement = null;
  49595. } else if (componentClass.PropTypes !== undefined && !propTypesMisspellWarningShown) {
  49596. propTypesMisspellWarningShown = true;
  49597. warning(false, 'Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');
  49598. }
  49599. if (typeof componentClass.getDefaultProps === 'function') {
  49600. warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
  49601. }
  49602. }
  49603. /**
  49604. * Given a fragment, validate that it can only be provided with fragment props
  49605. * @param {ReactElement} fragment
  49606. */
  49607. function validateFragmentProps(fragment) {
  49608. currentlyValidatingElement = fragment;
  49609. var _iteratorNormalCompletion = true;
  49610. var _didIteratorError = false;
  49611. var _iteratorError = undefined;
  49612. try {
  49613. for (var _iterator = Object.keys(fragment.props)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  49614. var key = _step.value;
  49615. if (!VALID_FRAGMENT_PROPS.has(key)) {
  49616. warning(false, 'Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.%s', key, getStackAddendum());
  49617. break;
  49618. }
  49619. }
  49620. } catch (err) {
  49621. _didIteratorError = true;
  49622. _iteratorError = err;
  49623. } finally {
  49624. try {
  49625. if (!_iteratorNormalCompletion && _iterator['return']) {
  49626. _iterator['return']();
  49627. }
  49628. } finally {
  49629. if (_didIteratorError) {
  49630. throw _iteratorError;
  49631. }
  49632. }
  49633. }
  49634. if (fragment.ref !== null) {
  49635. warning(false, 'Invalid attribute `ref` supplied to `React.Fragment`.%s', getStackAddendum());
  49636. }
  49637. currentlyValidatingElement = null;
  49638. }
  49639. function createElementWithValidation(type, props, children) {
  49640. var validType = typeof type === 'string' || typeof type === 'function' || typeof type === 'symbol' || typeof type === 'number';
  49641. // We warn in this case but don't throw. We expect the element creation to
  49642. // succeed and there will likely be errors in render.
  49643. if (!validType) {
  49644. var info = '';
  49645. if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
  49646. info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
  49647. }
  49648. var sourceInfo = getSourceInfoErrorAddendum(props);
  49649. if (sourceInfo) {
  49650. info += sourceInfo;
  49651. } else {
  49652. info += getDeclarationErrorAddendum();
  49653. }
  49654. info += getStackAddendum() || '';
  49655. warning(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', type == null ? type : typeof type, info);
  49656. }
  49657. var element = createElement.apply(this, arguments);
  49658. // The result can be nullish if a mock or a custom function is used.
  49659. // TODO: Drop this when these are no longer allowed as the type argument.
  49660. if (element == null) {
  49661. return element;
  49662. }
  49663. // Skip key warning if the type isn't valid since our key validation logic
  49664. // doesn't expect a non-string/function type and can throw confusing errors.
  49665. // We don't want exception behavior to differ between dev and prod.
  49666. // (Rendering will throw with a helpful message and as soon as the type is
  49667. // fixed, the key warnings will appear.)
  49668. if (validType) {
  49669. for (var i = 2; i < arguments.length; i++) {
  49670. validateChildKeys(arguments[i], type);
  49671. }
  49672. }
  49673. if (typeof type === 'symbol' && type === REACT_FRAGMENT_TYPE) {
  49674. validateFragmentProps(element);
  49675. } else {
  49676. validatePropTypes(element);
  49677. }
  49678. return element;
  49679. }
  49680. function createFactoryWithValidation(type) {
  49681. var validatedFactory = createElementWithValidation.bind(null, type);
  49682. // Legacy hook TODO: Warn if this is accessed
  49683. validatedFactory.type = type;
  49684. {
  49685. Object.defineProperty(validatedFactory, 'type', {
  49686. enumerable: false,
  49687. get: function () {
  49688. lowPriorityWarning$1(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');
  49689. Object.defineProperty(this, 'type', {
  49690. value: type
  49691. });
  49692. return type;
  49693. }
  49694. });
  49695. }
  49696. return validatedFactory;
  49697. }
  49698. function cloneElementWithValidation(element, props, children) {
  49699. var newElement = cloneElement.apply(this, arguments);
  49700. for (var i = 2; i < arguments.length; i++) {
  49701. validateChildKeys(arguments[i], newElement.type);
  49702. }
  49703. validatePropTypes(newElement);
  49704. return newElement;
  49705. }
  49706. var React = {
  49707. Children: {
  49708. map: mapChildren,
  49709. forEach: forEachChildren,
  49710. count: countChildren,
  49711. toArray: toArray,
  49712. only: onlyChild
  49713. },
  49714. Component: Component,
  49715. PureComponent: PureComponent,
  49716. unstable_AsyncComponent: AsyncComponent,
  49717. Fragment: REACT_FRAGMENT_TYPE,
  49718. createElement: createElementWithValidation,
  49719. cloneElement: cloneElementWithValidation,
  49720. createFactory: createFactoryWithValidation,
  49721. isValidElement: isValidElement,
  49722. version: ReactVersion,
  49723. __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {
  49724. ReactCurrentOwner: ReactCurrentOwner,
  49725. // Used by renderers to avoid bundling object-assign twice in UMD bundles:
  49726. assign: _assign
  49727. }
  49728. };
  49729. {
  49730. _assign(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, {
  49731. // These should not be included in production.
  49732. ReactDebugCurrentFrame: ReactDebugCurrentFrame,
  49733. // Shim for React DOM 16.0.0 which still destructured (but not used) this.
  49734. // TODO: remove in React 17.0.
  49735. ReactComponentTreeHook: {}
  49736. });
  49737. }
  49738. var React$2 = Object.freeze({
  49739. default: React
  49740. });
  49741. var React$3 = ( React$2 && React ) || React$2;
  49742. // TODO: decide on the top-level export form.
  49743. // This is hacky but makes it work with both Rollup and Jest.
  49744. var react = React$3['default'] ? React$3['default'] : React$3;
  49745. module.exports = react;
  49746. })();
  49747. }
  49748. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)))
  49749. /***/ }),
  49750. /* 681 */
  49751. /***/ (function(module, exports, __webpack_require__) {
  49752. "use strict";
  49753. /** @license React v16.2.0
  49754. * react.production.min.js
  49755. *
  49756. * Copyright (c) 2013-present, Facebook, Inc.
  49757. *
  49758. * This source code is licensed under the MIT license found in the
  49759. * LICENSE file in the root directory of this source tree.
  49760. */
  49761. var m=__webpack_require__(171),n=__webpack_require__(233),p=__webpack_require__(74),q="function"===typeof Symbol&&Symbol["for"],r=q?Symbol["for"]("react.element"):60103,t=q?Symbol["for"]("react.call"):60104,u=q?Symbol["for"]("react.return"):60105,v=q?Symbol["for"]("react.portal"):60106,w=q?Symbol["for"]("react.fragment"):60107,x="function"===typeof Symbol&&Symbol.iterator;
  49762. function y(a){for(var b=arguments.length-1,e="Minified React error #"+a+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\x3d"+a,c=0;c<b;c++)e+="\x26args[]\x3d"+encodeURIComponent(arguments[c+1]);b=Error(e+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.");b.name="Invariant Violation";b.framesToPop=1;throw b;}
  49763. var z={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};function A(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e||z}A.prototype.isReactComponent={};A.prototype.setState=function(a,b){"object"!==typeof a&&"function"!==typeof a&&null!=a?y("85"):void 0;this.updater.enqueueSetState(this,a,b,"setState")};A.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate")};
  49764. function B(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e||z}function C(){}C.prototype=A.prototype;var D=B.prototype=new C;D.constructor=B;m(D,A.prototype);D.isPureReactComponent=!0;function E(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e||z}var F=E.prototype=new C;F.constructor=E;m(F,A.prototype);F.unstable_isAsyncReactComponent=!0;F.render=function(){return this.props.children};var G={current:null},H=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};
  49765. function J(a,b,e){var c,d={},g=null,k=null;if(null!=b)for(c in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=""+b.key),b)H.call(b,c)&&!I.hasOwnProperty(c)&&(d[c]=b[c]);var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){for(var h=Array(f),l=0;l<f;l++)h[l]=arguments[l+2];d.children=h}if(a&&a.defaultProps)for(c in f=a.defaultProps,f)void 0===d[c]&&(d[c]=f[c]);return{$$typeof:r,type:a,key:g,ref:k,props:d,_owner:G.current}}function K(a){return"object"===typeof a&&null!==a&&a.$$typeof===r}
  49766. function escape(a){var b={"\x3d":"\x3d0",":":"\x3d2"};return"$"+(""+a).replace(/[=:]/g,function(a){return b[a]})}var L=/\/+/g,M=[];function N(a,b,e,c){if(M.length){var d=M.pop();d.result=a;d.keyPrefix=b;d.func=e;d.context=c;d.count=0;return d}return{result:a,keyPrefix:b,func:e,context:c,count:0}}function O(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>M.length&&M.push(a)}
  49767. function P(a,b,e,c){var d=typeof a;if("undefined"===d||"boolean"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case "string":case "number":g=!0;break;case "object":switch(a.$$typeof){case r:case t:case u:case v:g=!0}}if(g)return e(c,a,""===b?"."+Q(a,0):b),1;g=0;b=""===b?".":b+":";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+Q(d,k);g+=P(d,f,e,c)}else if(null===a||"undefined"===typeof a?f=null:(f=x&&a[x]||a["@@iterator"],f="function"===typeof f?f:null),"function"===typeof f)for(a=
  49768. f.call(a),k=0;!(d=a.next()).done;)d=d.value,f=b+Q(d,k++),g+=P(d,f,e,c);else"object"===d&&(e=""+a,y("31","[object Object]"===e?"object with keys {"+Object.keys(a).join(", ")+"}":e,""));return g}function Q(a,b){return"object"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function R(a,b){a.func.call(a.context,b,a.count++)}
  49769. function S(a,b,e){var c=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?T(a,c,e,p.thatReturnsArgument):null!=a&&(K(a)&&(b=d+(!a.key||b&&b.key===a.key?"":(""+a.key).replace(L,"$\x26/")+"/")+e,a={$$typeof:r,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}),c.push(a))}function T(a,b,e,c,d){var g="";null!=e&&(g=(""+e).replace(L,"$\x26/")+"/");b=N(b,g,c,d);null==a||P(a,"",S,b);O(b)}
  49770. var U={Children:{map:function(a,b,e){if(null==a)return a;var c=[];T(a,c,null,b,e);return c},forEach:function(a,b,e){if(null==a)return a;b=N(null,null,b,e);null==a||P(a,"",R,b);O(b)},count:function(a){return null==a?0:P(a,"",p.thatReturnsNull,null)},toArray:function(a){var b=[];T(a,b,null,p.thatReturnsArgument);return b},only:function(a){K(a)?void 0:y("143");return a}},Component:A,PureComponent:B,unstable_AsyncComponent:E,Fragment:w,createElement:J,cloneElement:function(a,b,e){var c=m({},a.props),
  49771. d=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=G.current);void 0!==b.key&&(d=""+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)H.call(b,h)&&!I.hasOwnProperty(h)&&(c[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)c.children=e;else if(1<h){f=Array(h);for(var l=0;l<h;l++)f[l]=arguments[l+2];c.children=f}return{$$typeof:r,type:a.type,key:d,ref:g,props:c,_owner:k}},createFactory:function(a){var b=J.bind(null,a);b.type=a;return b},
  49772. isValidElement:K,version:"16.2.0",__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentOwner:G,assign:m}},V=Object.freeze({default:U}),W=V&&U||V;module.exports=W["default"]?W["default"]:W;
  49773. /***/ }),
  49774. /* 682 */
  49775. /***/ (function(module, exports) {
  49776. if (typeof Object.create === 'function') {
  49777. // implementation from standard node.js 'util' module
  49778. module.exports = function inherits(ctor, superCtor) {
  49779. ctor.super_ = superCtor
  49780. ctor.prototype = Object.create(superCtor.prototype, {
  49781. constructor: {
  49782. value: ctor,
  49783. enumerable: false,
  49784. writable: true,
  49785. configurable: true
  49786. }
  49787. });
  49788. };
  49789. } else {
  49790. // old school shim for old browsers
  49791. module.exports = function inherits(ctor, superCtor) {
  49792. ctor.super_ = superCtor
  49793. var TempCtor = function () {}
  49794. TempCtor.prototype = superCtor.prototype
  49795. ctor.prototype = new TempCtor()
  49796. ctor.prototype.constructor = ctor
  49797. }
  49798. }
  49799. /***/ }),
  49800. /* 683 */
  49801. /***/ (function(module, exports) {
  49802. module.exports = function isBuffer(arg) {
  49803. return arg && typeof arg === 'object'
  49804. && typeof arg.copy === 'function'
  49805. && typeof arg.fill === 'function'
  49806. && typeof arg.readUInt8 === 'function';
  49807. }
  49808. /***/ }),
  49809. /* 684 */
  49810. /***/ (function(module, exports, __webpack_require__) {
  49811. /* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.
  49812. //
  49813. // Permission is hereby granted, free of charge, to any person obtaining a
  49814. // copy of this software and associated documentation files (the
  49815. // "Software"), to deal in the Software without restriction, including
  49816. // without limitation the rights to use, copy, modify, merge, publish,
  49817. // distribute, sublicense, and/or sell copies of the Software, and to permit
  49818. // persons to whom the Software is furnished to do so, subject to the
  49819. // following conditions:
  49820. //
  49821. // The above copyright notice and this permission notice shall be included
  49822. // in all copies or substantial portions of the Software.
  49823. //
  49824. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  49825. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  49826. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  49827. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  49828. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  49829. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  49830. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  49831. var formatRegExp = /%[sdj%]/g;
  49832. exports.format = function(f) {
  49833. if (!isString(f)) {
  49834. var objects = [];
  49835. for (var i = 0; i < arguments.length; i++) {
  49836. objects.push(inspect(arguments[i]));
  49837. }
  49838. return objects.join(' ');
  49839. }
  49840. var i = 1;
  49841. var args = arguments;
  49842. var len = args.length;
  49843. var str = String(f).replace(formatRegExp, function(x) {
  49844. if (x === '%%') return '%';
  49845. if (i >= len) return x;
  49846. switch (x) {
  49847. case '%s': return String(args[i++]);
  49848. case '%d': return Number(args[i++]);
  49849. case '%j':
  49850. try {
  49851. return JSON.stringify(args[i++]);
  49852. } catch (_) {
  49853. return '[Circular]';
  49854. }
  49855. default:
  49856. return x;
  49857. }
  49858. });
  49859. for (var x = args[i]; i < len; x = args[++i]) {
  49860. if (isNull(x) || !isObject(x)) {
  49861. str += ' ' + x;
  49862. } else {
  49863. str += ' ' + inspect(x);
  49864. }
  49865. }
  49866. return str;
  49867. };
  49868. // Mark that a method should not be used.
  49869. // Returns a modified function which warns once by default.
  49870. // If --no-deprecation is set, then it is a no-op.
  49871. exports.deprecate = function(fn, msg) {
  49872. // Allow for deprecating things in the process of starting up.
  49873. if (isUndefined(global.process)) {
  49874. return function() {
  49875. return exports.deprecate(fn, msg).apply(this, arguments);
  49876. };
  49877. }
  49878. if (process.noDeprecation === true) {
  49879. return fn;
  49880. }
  49881. var warned = false;
  49882. function deprecated() {
  49883. if (!warned) {
  49884. if (process.throwDeprecation) {
  49885. throw new Error(msg);
  49886. } else if (process.traceDeprecation) {
  49887. console.trace(msg);
  49888. } else {
  49889. console.error(msg);
  49890. }
  49891. warned = true;
  49892. }
  49893. return fn.apply(this, arguments);
  49894. }
  49895. return deprecated;
  49896. };
  49897. var debugs = {};
  49898. var debugEnviron;
  49899. exports.debuglog = function(set) {
  49900. if (isUndefined(debugEnviron))
  49901. debugEnviron = process.env.NODE_DEBUG || '';
  49902. set = set.toUpperCase();
  49903. if (!debugs[set]) {
  49904. if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
  49905. var pid = process.pid;
  49906. debugs[set] = function() {
  49907. var msg = exports.format.apply(exports, arguments);
  49908. console.error('%s %d: %s', set, pid, msg);
  49909. };
  49910. } else {
  49911. debugs[set] = function() {};
  49912. }
  49913. }
  49914. return debugs[set];
  49915. };
  49916. /**
  49917. * Echos the value of a value. Trys to print the value out
  49918. * in the best way possible given the different types.
  49919. *
  49920. * @param {Object} obj The object to print out.
  49921. * @param {Object} opts Optional options object that alters the output.
  49922. */
  49923. /* legacy: obj, showHidden, depth, colors*/
  49924. function inspect(obj, opts) {
  49925. // default options
  49926. var ctx = {
  49927. seen: [],
  49928. stylize: stylizeNoColor
  49929. };
  49930. // legacy...
  49931. if (arguments.length >= 3) ctx.depth = arguments[2];
  49932. if (arguments.length >= 4) ctx.colors = arguments[3];
  49933. if (isBoolean(opts)) {
  49934. // legacy...
  49935. ctx.showHidden = opts;
  49936. } else if (opts) {
  49937. // got an "options" object
  49938. exports._extend(ctx, opts);
  49939. }
  49940. // set default options
  49941. if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
  49942. if (isUndefined(ctx.depth)) ctx.depth = 2;
  49943. if (isUndefined(ctx.colors)) ctx.colors = false;
  49944. if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
  49945. if (ctx.colors) ctx.stylize = stylizeWithColor;
  49946. return formatValue(ctx, obj, ctx.depth);
  49947. }
  49948. exports.inspect = inspect;
  49949. // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
  49950. inspect.colors = {
  49951. 'bold' : [1, 22],
  49952. 'italic' : [3, 23],
  49953. 'underline' : [4, 24],
  49954. 'inverse' : [7, 27],
  49955. 'white' : [37, 39],
  49956. 'grey' : [90, 39],
  49957. 'black' : [30, 39],
  49958. 'blue' : [34, 39],
  49959. 'cyan' : [36, 39],
  49960. 'green' : [32, 39],
  49961. 'magenta' : [35, 39],
  49962. 'red' : [31, 39],
  49963. 'yellow' : [33, 39]
  49964. };
  49965. // Don't use 'blue' not visible on cmd.exe
  49966. inspect.styles = {
  49967. 'special': 'cyan',
  49968. 'number': 'yellow',
  49969. 'boolean': 'yellow',
  49970. 'undefined': 'grey',
  49971. 'null': 'bold',
  49972. 'string': 'green',
  49973. 'date': 'magenta',
  49974. // "name": intentionally not styling
  49975. 'regexp': 'red'
  49976. };
  49977. function stylizeWithColor(str, styleType) {
  49978. var style = inspect.styles[styleType];
  49979. if (style) {
  49980. return '\u001b[' + inspect.colors[style][0] + 'm' + str +
  49981. '\u001b[' + inspect.colors[style][1] + 'm';
  49982. } else {
  49983. return str;
  49984. }
  49985. }
  49986. function stylizeNoColor(str, styleType) {
  49987. return str;
  49988. }
  49989. function arrayToHash(array) {
  49990. var hash = {};
  49991. array.forEach(function(val, idx) {
  49992. hash[val] = true;
  49993. });
  49994. return hash;
  49995. }
  49996. function formatValue(ctx, value, recurseTimes) {
  49997. // Provide a hook for user-specified inspect functions.
  49998. // Check that value is an object with an inspect function on it
  49999. if (ctx.customInspect &&
  50000. value &&
  50001. isFunction(value.inspect) &&
  50002. // Filter out the util module, it's inspect function is special
  50003. value.inspect !== exports.inspect &&
  50004. // Also filter out any prototype objects using the circular check.
  50005. !(value.constructor && value.constructor.prototype === value)) {
  50006. var ret = value.inspect(recurseTimes, ctx);
  50007. if (!isString(ret)) {
  50008. ret = formatValue(ctx, ret, recurseTimes);
  50009. }
  50010. return ret;
  50011. }
  50012. // Primitive types cannot have properties
  50013. var primitive = formatPrimitive(ctx, value);
  50014. if (primitive) {
  50015. return primitive;
  50016. }
  50017. // Look up the keys of the object.
  50018. var keys = Object.keys(value);
  50019. var visibleKeys = arrayToHash(keys);
  50020. if (ctx.showHidden) {
  50021. keys = Object.getOwnPropertyNames(value);
  50022. }
  50023. // IE doesn't make error fields non-enumerable
  50024. // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
  50025. if (isError(value)
  50026. && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
  50027. return formatError(value);
  50028. }
  50029. // Some type of object without properties can be shortcutted.
  50030. if (keys.length === 0) {
  50031. if (isFunction(value)) {
  50032. var name = value.name ? ': ' + value.name : '';
  50033. return ctx.stylize('[Function' + name + ']', 'special');
  50034. }
  50035. if (isRegExp(value)) {
  50036. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  50037. }
  50038. if (isDate(value)) {
  50039. return ctx.stylize(Date.prototype.toString.call(value), 'date');
  50040. }
  50041. if (isError(value)) {
  50042. return formatError(value);
  50043. }
  50044. }
  50045. var base = '', array = false, braces = ['{', '}'];
  50046. // Make Array say that they are Array
  50047. if (isArray(value)) {
  50048. array = true;
  50049. braces = ['[', ']'];
  50050. }
  50051. // Make functions say that they are functions
  50052. if (isFunction(value)) {
  50053. var n = value.name ? ': ' + value.name : '';
  50054. base = ' [Function' + n + ']';
  50055. }
  50056. // Make RegExps say that they are RegExps
  50057. if (isRegExp(value)) {
  50058. base = ' ' + RegExp.prototype.toString.call(value);
  50059. }
  50060. // Make dates with properties first say the date
  50061. if (isDate(value)) {
  50062. base = ' ' + Date.prototype.toUTCString.call(value);
  50063. }
  50064. // Make error with message first say the error
  50065. if (isError(value)) {
  50066. base = ' ' + formatError(value);
  50067. }
  50068. if (keys.length === 0 && (!array || value.length == 0)) {
  50069. return braces[0] + base + braces[1];
  50070. }
  50071. if (recurseTimes < 0) {
  50072. if (isRegExp(value)) {
  50073. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  50074. } else {
  50075. return ctx.stylize('[Object]', 'special');
  50076. }
  50077. }
  50078. ctx.seen.push(value);
  50079. var output;
  50080. if (array) {
  50081. output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
  50082. } else {
  50083. output = keys.map(function(key) {
  50084. return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
  50085. });
  50086. }
  50087. ctx.seen.pop();
  50088. return reduceToSingleString(output, base, braces);
  50089. }
  50090. function formatPrimitive(ctx, value) {
  50091. if (isUndefined(value))
  50092. return ctx.stylize('undefined', 'undefined');
  50093. if (isString(value)) {
  50094. var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
  50095. .replace(/'/g, "\\'")
  50096. .replace(/\\"/g, '"') + '\'';
  50097. return ctx.stylize(simple, 'string');
  50098. }
  50099. if (isNumber(value))
  50100. return ctx.stylize('' + value, 'number');
  50101. if (isBoolean(value))
  50102. return ctx.stylize('' + value, 'boolean');
  50103. // For some reason typeof null is "object", so special case here.
  50104. if (isNull(value))
  50105. return ctx.stylize('null', 'null');
  50106. }
  50107. function formatError(value) {
  50108. return '[' + Error.prototype.toString.call(value) + ']';
  50109. }
  50110. function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  50111. var output = [];
  50112. for (var i = 0, l = value.length; i < l; ++i) {
  50113. if (hasOwnProperty(value, String(i))) {
  50114. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  50115. String(i), true));
  50116. } else {
  50117. output.push('');
  50118. }
  50119. }
  50120. keys.forEach(function(key) {
  50121. if (!key.match(/^\d+$/)) {
  50122. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  50123. key, true));
  50124. }
  50125. });
  50126. return output;
  50127. }
  50128. function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
  50129. var name, str, desc;
  50130. desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
  50131. if (desc.get) {
  50132. if (desc.set) {
  50133. str = ctx.stylize('[Getter/Setter]', 'special');
  50134. } else {
  50135. str = ctx.stylize('[Getter]', 'special');
  50136. }
  50137. } else {
  50138. if (desc.set) {
  50139. str = ctx.stylize('[Setter]', 'special');
  50140. }
  50141. }
  50142. if (!hasOwnProperty(visibleKeys, key)) {
  50143. name = '[' + key + ']';
  50144. }
  50145. if (!str) {
  50146. if (ctx.seen.indexOf(desc.value) < 0) {
  50147. if (isNull(recurseTimes)) {
  50148. str = formatValue(ctx, desc.value, null);
  50149. } else {
  50150. str = formatValue(ctx, desc.value, recurseTimes - 1);
  50151. }
  50152. if (str.indexOf('\n') > -1) {
  50153. if (array) {
  50154. str = str.split('\n').map(function(line) {
  50155. return ' ' + line;
  50156. }).join('\n').substr(2);
  50157. } else {
  50158. str = '\n' + str.split('\n').map(function(line) {
  50159. return ' ' + line;
  50160. }).join('\n');
  50161. }
  50162. }
  50163. } else {
  50164. str = ctx.stylize('[Circular]', 'special');
  50165. }
  50166. }
  50167. if (isUndefined(name)) {
  50168. if (array && key.match(/^\d+$/)) {
  50169. return str;
  50170. }
  50171. name = JSON.stringify('' + key);
  50172. if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
  50173. name = name.substr(1, name.length - 2);
  50174. name = ctx.stylize(name, 'name');
  50175. } else {
  50176. name = name.replace(/'/g, "\\'")
  50177. .replace(/\\"/g, '"')
  50178. .replace(/(^"|"$)/g, "'");
  50179. name = ctx.stylize(name, 'string');
  50180. }
  50181. }
  50182. return name + ': ' + str;
  50183. }
  50184. function reduceToSingleString(output, base, braces) {
  50185. var numLinesEst = 0;
  50186. var length = output.reduce(function(prev, cur) {
  50187. numLinesEst++;
  50188. if (cur.indexOf('\n') >= 0) numLinesEst++;
  50189. return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
  50190. }, 0);
  50191. if (length > 60) {
  50192. return braces[0] +
  50193. (base === '' ? '' : base + '\n ') +
  50194. ' ' +
  50195. output.join(',\n ') +
  50196. ' ' +
  50197. braces[1];
  50198. }
  50199. return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
  50200. }
  50201. // NOTE: These type checking functions intentionally don't use `instanceof`
  50202. // because it is fragile and can be easily faked with `Object.create()`.
  50203. function isArray(ar) {
  50204. return Array.isArray(ar);
  50205. }
  50206. exports.isArray = isArray;
  50207. function isBoolean(arg) {
  50208. return typeof arg === 'boolean';
  50209. }
  50210. exports.isBoolean = isBoolean;
  50211. function isNull(arg) {
  50212. return arg === null;
  50213. }
  50214. exports.isNull = isNull;
  50215. function isNullOrUndefined(arg) {
  50216. return arg == null;
  50217. }
  50218. exports.isNullOrUndefined = isNullOrUndefined;
  50219. function isNumber(arg) {
  50220. return typeof arg === 'number';
  50221. }
  50222. exports.isNumber = isNumber;
  50223. function isString(arg) {
  50224. return typeof arg === 'string';
  50225. }
  50226. exports.isString = isString;
  50227. function isSymbol(arg) {
  50228. return typeof arg === 'symbol';
  50229. }
  50230. exports.isSymbol = isSymbol;
  50231. function isUndefined(arg) {
  50232. return arg === void 0;
  50233. }
  50234. exports.isUndefined = isUndefined;
  50235. function isRegExp(re) {
  50236. return isObject(re) && objectToString(re) === '[object RegExp]';
  50237. }
  50238. exports.isRegExp = isRegExp;
  50239. function isObject(arg) {
  50240. return typeof arg === 'object' && arg !== null;
  50241. }
  50242. exports.isObject = isObject;
  50243. function isDate(d) {
  50244. return isObject(d) && objectToString(d) === '[object Date]';
  50245. }
  50246. exports.isDate = isDate;
  50247. function isError(e) {
  50248. return isObject(e) &&
  50249. (objectToString(e) === '[object Error]' || e instanceof Error);
  50250. }
  50251. exports.isError = isError;
  50252. function isFunction(arg) {
  50253. return typeof arg === 'function';
  50254. }
  50255. exports.isFunction = isFunction;
  50256. function isPrimitive(arg) {
  50257. return arg === null ||
  50258. typeof arg === 'boolean' ||
  50259. typeof arg === 'number' ||
  50260. typeof arg === 'string' ||
  50261. typeof arg === 'symbol' || // ES6 symbol
  50262. typeof arg === 'undefined';
  50263. }
  50264. exports.isPrimitive = isPrimitive;
  50265. exports.isBuffer = __webpack_require__(683);
  50266. function objectToString(o) {
  50267. return Object.prototype.toString.call(o);
  50268. }
  50269. function pad(n) {
  50270. return n < 10 ? '0' + n.toString(10) : n.toString(10);
  50271. }
  50272. var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
  50273. 'Oct', 'Nov', 'Dec'];
  50274. // 26 Feb 16:19:34
  50275. function timestamp() {
  50276. var d = new Date();
  50277. var time = [pad(d.getHours()),
  50278. pad(d.getMinutes()),
  50279. pad(d.getSeconds())].join(':');
  50280. return [d.getDate(), months[d.getMonth()], time].join(' ');
  50281. }
  50282. // log is just a thin wrapper to console.log that prepends a timestamp
  50283. exports.log = function() {
  50284. console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
  50285. };
  50286. /**
  50287. * Inherit the prototype methods from one constructor into another.
  50288. *
  50289. * The Function.prototype.inherits from lang.js rewritten as a standalone
  50290. * function (not on Function.prototype). NOTE: If this file is to be loaded
  50291. * during bootstrapping this function needs to be rewritten using some native
  50292. * functions as prototype setup using normal JavaScript does not work as
  50293. * expected during bootstrapping (see mirror.js in r114903).
  50294. *
  50295. * @param {function} ctor Constructor function which needs to inherit the
  50296. * prototype.
  50297. * @param {function} superCtor Constructor function to inherit prototype from.
  50298. */
  50299. exports.inherits = __webpack_require__(682);
  50300. exports._extend = function(origin, add) {
  50301. // Don't do anything if add isn't an object
  50302. if (!add || !isObject(add)) return origin;
  50303. var keys = Object.keys(add);
  50304. var i = keys.length;
  50305. while (i--) {
  50306. origin[keys[i]] = add[keys[i]];
  50307. }
  50308. return origin;
  50309. };
  50310. function hasOwnProperty(obj, prop) {
  50311. return Object.prototype.hasOwnProperty.call(obj, prop);
  50312. }
  50313. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(47), __webpack_require__(26)))
  50314. /***/ }),
  50315. /* 685 */
  50316. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  50317. "use strict";
  50318. /* harmony export (immutable) */ __webpack_exports__["a"] = flyToViewport;
  50319. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_math_gl__ = __webpack_require__(16);
  50320. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math_utils__ = __webpack_require__(118);
  50321. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__ = __webpack_require__(80);
  50322. var EPSILON = 0.01;
  50323. var VIEWPORT_TRANSITION_PROPS = ['longitude', 'latitude', 'zoom'];
  50324. /**
  50325. * mapbox-gl-js flyTo : https://www.mapbox.com/mapbox-gl-js/api/#map#flyto.
  50326. * It implements “Smooth and efficient zooming and panning.” algorithm by
  50327. * "Jarke J. van Wijk and Wim A.A. Nuij"
  50328. */
  50329. /* eslint-disable max-statements */
  50330. function flyToViewport(startProps, endProps, t) {
  50331. // Equations from above paper are referred where needed.
  50332. var viewport = {};
  50333. // TODO: add this as an option for applications.
  50334. var rho = 1.414;
  50335. var startZoom = startProps.zoom;
  50336. var startCenter = [startProps.longitude, startProps.latitude];
  50337. var startScale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__["j" /* zoomToScale */])(startZoom);
  50338. var endZoom = endProps.zoom;
  50339. var endCenter = [endProps.longitude, endProps.latitude];
  50340. var scale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__["j" /* zoomToScale */])(endZoom - startZoom);
  50341. var startCenterXY = new __WEBPACK_IMPORTED_MODULE_0_math_gl__["Vector2"](__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__["a" /* lngLatToWorld */])(startCenter, startScale));
  50342. var endCenterXY = new __WEBPACK_IMPORTED_MODULE_0_math_gl__["Vector2"](__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__["a" /* lngLatToWorld */])(endCenter, startScale));
  50343. var uDelta = endCenterXY.subtract(startCenterXY);
  50344. var w0 = Math.max(startProps.width, startProps.height);
  50345. var w1 = w0 / scale;
  50346. var u1 = Math.sqrt(uDelta.x * uDelta.x + uDelta.y * uDelta.y);
  50347. // u0 is treated as '0' in Eq (9).
  50348. // If change in center is too small, do linear interpolaiton.
  50349. if (Math.abs(u1) < EPSILON) {
  50350. var _iteratorNormalCompletion = true;
  50351. var _didIteratorError = false;
  50352. var _iteratorError = undefined;
  50353. try {
  50354. for (var _iterator = VIEWPORT_TRANSITION_PROPS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  50355. var key = _step.value;
  50356. var startValue = startProps[key];
  50357. var endValue = endProps[key];
  50358. viewport[key] = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["c" /* lerp */])(startValue, endValue, t);
  50359. }
  50360. } catch (err) {
  50361. _didIteratorError = true;
  50362. _iteratorError = err;
  50363. } finally {
  50364. try {
  50365. if (!_iteratorNormalCompletion && _iterator.return) {
  50366. _iterator.return();
  50367. }
  50368. } finally {
  50369. if (_didIteratorError) {
  50370. throw _iteratorError;
  50371. }
  50372. }
  50373. }
  50374. return viewport;
  50375. }
  50376. // Implement Equation (9) from above algorithm.
  50377. var rho2 = rho * rho;
  50378. var b0 = (w1 * w1 - w0 * w0 + rho2 * rho2 * u1 * u1) / (2 * w0 * rho2 * u1);
  50379. var b1 = (w1 * w1 - w0 * w0 - rho2 * rho2 * u1 * u1) / (2 * w1 * rho2 * u1);
  50380. var r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0);
  50381. var r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
  50382. var S = (r1 - r0) / rho;
  50383. var s = t * S;
  50384. var w = Math.cosh(r0) / Math.cosh(r0 + rho * s);
  50385. var u = w0 * ((Math.cosh(r0) * Math.tanh(r0 + rho * s) - Math.sinh(r0)) / rho2) / u1;
  50386. var scaleIncrement = 1 / w; // Using w method for scaling.
  50387. var newZoom = startZoom + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__["k" /* scaleToZoom */])(scaleIncrement);
  50388. var newCenter = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__["b" /* worldToLngLat */])(startCenterXY.add(uDelta.scale(u)).scale(scaleIncrement), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__["j" /* zoomToScale */])(newZoom));
  50389. viewport.longitude = newCenter[0];
  50390. viewport.latitude = newCenter[1];
  50391. viewport.zoom = newZoom;
  50392. return viewport;
  50393. }
  50394. /* eslint-enable max-statements */
  50395. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mbHktdG8tdmlld3BvcnQuanMiXSwibmFtZXMiOlsiVmVjdG9yMiIsImxlcnAiLCJzY2FsZVRvWm9vbSIsInpvb21Ub1NjYWxlIiwibG5nTGF0VG9Xb3JsZCIsIndvcmxkVG9MbmdMYXQiLCJFUFNJTE9OIiwiVklFV1BPUlRfVFJBTlNJVElPTl9QUk9QUyIsImZseVRvVmlld3BvcnQiLCJzdGFydFByb3BzIiwiZW5kUHJvcHMiLCJ0Iiwidmlld3BvcnQiLCJyaG8iLCJzdGFydFpvb20iLCJ6b29tIiwic3RhcnRDZW50ZXIiLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIsInN0YXJ0U2NhbGUiLCJlbmRab29tIiwiZW5kQ2VudGVyIiwic2NhbGUiLCJzdGFydENlbnRlclhZIiwiZW5kQ2VudGVyWFkiLCJ1RGVsdGEiLCJzdWJ0cmFjdCIsIncwIiwiTWF0aCIsIm1heCIsIndpZHRoIiwiaGVpZ2h0IiwidzEiLCJ1MSIsInNxcnQiLCJ4IiwieSIsImFicyIsImtleSIsInN0YXJ0VmFsdWUiLCJlbmRWYWx1ZSIsInJobzIiLCJiMCIsImIxIiwicjAiLCJsb2ciLCJyMSIsIlMiLCJzIiwidyIsImNvc2giLCJ1IiwidGFuaCIsInNpbmgiLCJzY2FsZUluY3JlbWVudCIsIm5ld1pvb20iLCJuZXdDZW50ZXIiLCJhZGQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLE9BQVIsUUFBc0IsU0FBdEI7QUFDQSxTQUFRQyxJQUFSLFFBQW1CLGNBQW5CO0FBQ0EsU0FDRUMsV0FERixFQUVFQyxXQUZGLEVBR0VDLGFBSEYsRUFJRUMsYUFKRixRQUtPLHNCQUxQOztBQU9BLElBQU1DLFVBQVUsSUFBaEI7QUFDQSxJQUFNQyw0QkFBNEIsQ0FBQyxXQUFELEVBQWMsVUFBZCxFQUEwQixNQUExQixDQUFsQzs7QUFFQTs7Ozs7QUFLQTtBQUNBLGVBQWUsU0FBU0MsYUFBVCxDQUF1QkMsVUFBdkIsRUFBbUNDLFFBQW5DLEVBQTZDQyxDQUE3QyxFQUFnRDtBQUM3RDs7QUFFQSxNQUFNQyxXQUFXLEVBQWpCOztBQUVBO0FBQ0EsTUFBTUMsTUFBTSxLQUFaOztBQUVBLE1BQU1DLFlBQVlMLFdBQVdNLElBQTdCO0FBQ0EsTUFBTUMsY0FBYyxDQUFDUCxXQUFXUSxTQUFaLEVBQXVCUixXQUFXUyxRQUFsQyxDQUFwQjtBQUNBLE1BQU1DLGFBQWFoQixZQUFZVyxTQUFaLENBQW5CO0FBQ0EsTUFBTU0sVUFBVVYsU0FBU0ssSUFBekI7QUFDQSxNQUFNTSxZQUFZLENBQUNYLFNBQVNPLFNBQVYsRUFBcUJQLFNBQVNRLFFBQTlCLENBQWxCO0FBQ0EsTUFBTUksUUFBUW5CLFlBQVlpQixVQUFVTixTQUF0QixDQUFkOztBQUVBLE1BQU1TLGdCQUFnQixJQUFJdkIsT0FBSixDQUFZSSxjQUFjWSxXQUFkLEVBQTJCRyxVQUEzQixDQUFaLENBQXRCO0FBQ0EsTUFBTUssY0FBYyxJQUFJeEIsT0FBSixDQUFZSSxjQUFjaUIsU0FBZCxFQUF5QkYsVUFBekIsQ0FBWixDQUFwQjtBQUNBLE1BQU1NLFNBQVNELFlBQVlFLFFBQVosQ0FBcUJILGFBQXJCLENBQWY7O0FBRUEsTUFBTUksS0FBS0MsS0FBS0MsR0FBTCxDQUFTcEIsV0FBV3FCLEtBQXBCLEVBQTJCckIsV0FBV3NCLE1BQXRDLENBQVg7QUFDQSxNQUFNQyxLQUFLTCxLQUFLTCxLQUFoQjtBQUNBLE1BQU1XLEtBQUtMLEtBQUtNLElBQUwsQ0FBV1QsT0FBT1UsQ0FBUCxHQUFXVixPQUFPVSxDQUFuQixHQUF5QlYsT0FBT1csQ0FBUCxHQUFXWCxPQUFPVyxDQUFyRCxDQUFYO0FBQ0E7O0FBRUE7QUFDQSxNQUFJUixLQUFLUyxHQUFMLENBQVNKLEVBQVQsSUFBZTNCLE9BQW5CLEVBQTRCO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQzFCLDJCQUFrQkMseUJBQWxCLDhIQUE2QztBQUFBLFlBQWxDK0IsR0FBa0M7O0FBQzNDLFlBQU1DLGFBQWE5QixXQUFXNkIsR0FBWCxDQUFuQjtBQUNBLFlBQU1FLFdBQVc5QixTQUFTNEIsR0FBVCxDQUFqQjtBQUNBMUIsaUJBQVMwQixHQUFULElBQWdCckMsS0FBS3NDLFVBQUwsRUFBaUJDLFFBQWpCLEVBQTJCN0IsQ0FBM0IsQ0FBaEI7QUFDRDtBQUx5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQU0xQixXQUFPQyxRQUFQO0FBQ0Q7O0FBRUQ7QUFDQSxNQUFNNkIsT0FBTzVCLE1BQU1BLEdBQW5CO0FBQ0EsTUFBTTZCLEtBQUssQ0FBQ1YsS0FBS0EsRUFBTCxHQUFVTCxLQUFLQSxFQUFmLEdBQW9CYyxPQUFPQSxJQUFQLEdBQWNSLEVBQWQsR0FBbUJBLEVBQXhDLEtBQStDLElBQUlOLEVBQUosR0FBU2MsSUFBVCxHQUFnQlIsRUFBL0QsQ0FBWDtBQUNBLE1BQU1VLEtBQUssQ0FBQ1gsS0FBS0EsRUFBTCxHQUFVTCxLQUFLQSxFQUFmLEdBQW9CYyxPQUFPQSxJQUFQLEdBQWNSLEVBQWQsR0FBbUJBLEVBQXhDLEtBQStDLElBQUlELEVBQUosR0FBU1MsSUFBVCxHQUFnQlIsRUFBL0QsQ0FBWDtBQUNBLE1BQU1XLEtBQUtoQixLQUFLaUIsR0FBTCxDQUFTakIsS0FBS00sSUFBTCxDQUFVUSxLQUFLQSxFQUFMLEdBQVUsQ0FBcEIsSUFBeUJBLEVBQWxDLENBQVg7QUFDQSxNQUFNSSxLQUFLbEIsS0FBS2lCLEdBQUwsQ0FBU2pCLEtBQUtNLElBQUwsQ0FBVVMsS0FBS0EsRUFBTCxHQUFVLENBQXBCLElBQXlCQSxFQUFsQyxDQUFYO0FBQ0EsTUFBTUksSUFBSSxDQUFDRCxLQUFLRixFQUFOLElBQVkvQixHQUF0QjtBQUNBLE1BQU1tQyxJQUFJckMsSUFBSW9DLENBQWQ7O0FBRUEsTUFBTUUsSUFBS3JCLEtBQUtzQixJQUFMLENBQVVOLEVBQVYsSUFBZ0JoQixLQUFLc0IsSUFBTCxDQUFVTixLQUFLL0IsTUFBTW1DLENBQXJCLENBQTNCO0FBQ0EsTUFBTUcsSUFBSXhCLE1BQU0sQ0FBQ0MsS0FBS3NCLElBQUwsQ0FBVU4sRUFBVixJQUFnQmhCLEtBQUt3QixJQUFMLENBQVVSLEtBQUsvQixNQUFNbUMsQ0FBckIsQ0FBaEIsR0FBMENwQixLQUFLeUIsSUFBTCxDQUFVVCxFQUFWLENBQTNDLElBQTRESCxJQUFsRSxJQUEwRVIsRUFBcEY7O0FBRUEsTUFBTXFCLGlCQUFpQixJQUFJTCxDQUEzQixDQTlDNkQsQ0E4Qy9CO0FBQzlCLE1BQU1NLFVBQVV6QyxZQUFZWixZQUFZb0QsY0FBWixDQUE1Qjs7QUFFQSxNQUFNRSxZQUFZbkQsY0FDZmtCLGNBQWNrQyxHQUFkLENBQWtCaEMsT0FBT0gsS0FBUCxDQUFhNkIsQ0FBYixDQUFsQixDQUFELENBQXFDN0IsS0FBckMsQ0FBMkNnQyxjQUEzQyxDQURnQixFQUVoQm5ELFlBQVlvRCxPQUFaLENBRmdCLENBQWxCO0FBR0EzQyxXQUFTSyxTQUFULEdBQXFCdUMsVUFBVSxDQUFWLENBQXJCO0FBQ0E1QyxXQUFTTSxRQUFULEdBQW9Cc0MsVUFBVSxDQUFWLENBQXBCO0FBQ0E1QyxXQUFTRyxJQUFULEdBQWdCd0MsT0FBaEI7QUFDQSxTQUFPM0MsUUFBUDtBQUNEO0FBQ0QiLCJmaWxlIjoiZmx5LXRvLXZpZXdwb3J0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtWZWN0b3IyfSBmcm9tICdtYXRoLmdsJztcbmltcG9ydCB7bGVycH0gZnJvbSAnLi9tYXRoLXV0aWxzJztcbmltcG9ydCB7XG4gIHNjYWxlVG9ab29tLFxuICB6b29tVG9TY2FsZSxcbiAgbG5nTGF0VG9Xb3JsZCxcbiAgd29ybGRUb0xuZ0xhdFxufSBmcm9tICcuL3dlYi1tZXJjYXRvci11dGlscyc7XG5cbmNvbnN0IEVQU0lMT04gPSAwLjAxO1xuY29uc3QgVklFV1BPUlRfVFJBTlNJVElPTl9QUk9QUyA9IFsnbG9uZ2l0dWRlJywgJ2xhdGl0dWRlJywgJ3pvb20nXTtcblxuLyoqXG4gKiBtYXBib3gtZ2wtanMgZmx5VG8gOiBodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9hcGkvI21hcCNmbHl0by5cbiAqIEl0IGltcGxlbWVudHMg4oCcU21vb3RoIGFuZCBlZmZpY2llbnQgem9vbWluZyBhbmQgcGFubmluZy7igJ0gYWxnb3JpdGhtIGJ5XG4gKiBcIkphcmtlIEouIHZhbiBXaWprIGFuZCBXaW0gQS5BLiBOdWlqXCJcbiovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmx5VG9WaWV3cG9ydChzdGFydFByb3BzLCBlbmRQcm9wcywgdCkge1xuICAvLyBFcXVhdGlvbnMgZnJvbSBhYm92ZSBwYXBlciBhcmUgcmVmZXJyZWQgd2hlcmUgbmVlZGVkLlxuXG4gIGNvbnN0IHZpZXdwb3J0ID0ge307XG5cbiAgLy8gVE9ETzogYWRkIHRoaXMgYXMgYW4gb3B0aW9uIGZvciBhcHBsaWNhdGlvbnMuXG4gIGNvbnN0IHJobyA9IDEuNDE0O1xuXG4gIGNvbnN0IHN0YXJ0Wm9vbSA9IHN0YXJ0UHJvcHMuem9vbTtcbiAgY29uc3Qgc3RhcnRDZW50ZXIgPSBbc3RhcnRQcm9wcy5sb25naXR1ZGUsIHN0YXJ0UHJvcHMubGF0aXR1ZGVdO1xuICBjb25zdCBzdGFydFNjYWxlID0gem9vbVRvU2NhbGUoc3RhcnRab29tKTtcbiAgY29uc3QgZW5kWm9vbSA9IGVuZFByb3BzLnpvb207XG4gIGNvbnN0IGVuZENlbnRlciA9IFtlbmRQcm9wcy5sb25naXR1ZGUsIGVuZFByb3BzLmxhdGl0dWRlXTtcbiAgY29uc3Qgc2NhbGUgPSB6b29tVG9TY2FsZShlbmRab29tIC0gc3RhcnRab29tKTtcblxuICBjb25zdCBzdGFydENlbnRlclhZID0gbmV3IFZlY3RvcjIobG5nTGF0VG9Xb3JsZChzdGFydENlbnRlciwgc3RhcnRTY2FsZSkpO1xuICBjb25zdCBlbmRDZW50ZXJYWSA9IG5ldyBWZWN0b3IyKGxuZ0xhdFRvV29ybGQoZW5kQ2VudGVyLCBzdGFydFNjYWxlKSk7XG4gIGNvbnN0IHVEZWx0YSA9IGVuZENlbnRlclhZLnN1YnRyYWN0KHN0YXJ0Q2VudGVyWFkpO1xuXG4gIGNvbnN0IHcwID0gTWF0aC5tYXgoc3RhcnRQcm9wcy53aWR0aCwgc3RhcnRQcm9wcy5oZWlnaHQpO1xuICBjb25zdCB3MSA9IHcwIC8gc2NhbGU7XG4gIGNvbnN0IHUxID0gTWF0aC5zcXJ0KCh1RGVsdGEueCAqIHVEZWx0YS54KSArICh1RGVsdGEueSAqIHVEZWx0YS55KSk7XG4gIC8vIHUwIGlzIHRyZWF0ZWQgYXMgJzAnIGluIEVxICg5KS5cblxuICAvLyBJZiBjaGFuZ2UgaW4gY2VudGVyIGlzIHRvbyBzbWFsbCwgZG8gbGluZWFyIGludGVycG9sYWl0b24uXG4gIGlmIChNYXRoLmFicyh1MSkgPCBFUFNJTE9OKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgVklFV1BPUlRfVFJBTlNJVElPTl9QUk9QUykge1xuICAgICAgY29uc3Qgc3RhcnRWYWx1ZSA9IHN0YXJ0UHJvcHNba2V5XTtcbiAgICAgIGNvbnN0IGVuZFZhbHVlID0gZW5kUHJvcHNba2V5XTtcbiAgICAgIHZpZXdwb3J0W2tleV0gPSBsZXJwKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCB0KTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdwb3J0O1xuICB9XG5cbiAgLy8gSW1wbGVtZW50IEVxdWF0aW9uICg5KSBmcm9tIGFib3ZlIGFsZ29yaXRobS5cbiAgY29uc3QgcmhvMiA9IHJobyAqIHJobztcbiAgY29uc3QgYjAgPSAodzEgKiB3MSAtIHcwICogdzAgKyByaG8yICogcmhvMiAqIHUxICogdTEpIC8gKDIgKiB3MCAqIHJobzIgKiB1MSk7XG4gIGNvbnN0IGIxID0gKHcxICogdzEgLSB3MCAqIHcwIC0gcmhvMiAqIHJobzIgKiB1MSAqIHUxKSAvICgyICogdzEgKiByaG8yICogdTEpO1xuICBjb25zdCByMCA9IE1hdGgubG9nKE1hdGguc3FydChiMCAqIGIwICsgMSkgLSBiMCk7XG4gIGNvbnN0IHIxID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIxICogYjEgKyAxKSAtIGIxKTtcbiAgY29uc3QgUyA9IChyMSAtIHIwKSAvIHJobztcbiAgY29uc3QgcyA9IHQgKiBTO1xuXG4gIGNvbnN0IHcgPSAoTWF0aC5jb3NoKHIwKSAvIE1hdGguY29zaChyMCArIHJobyAqIHMpKTtcbiAgY29uc3QgdSA9IHcwICogKChNYXRoLmNvc2gocjApICogTWF0aC50YW5oKHIwICsgcmhvICogcykgLSBNYXRoLnNpbmgocjApKSAvIHJobzIpIC8gdTE7XG5cbiAgY29uc3Qgc2NhbGVJbmNyZW1lbnQgPSAxIC8gdzsgLy8gVXNpbmcgdyBtZXRob2QgZm9yIHNjYWxpbmcuXG4gIGNvbnN0IG5ld1pvb20gPSBzdGFydFpvb20gKyBzY2FsZVRvWm9vbShzY2FsZUluY3JlbWVudCk7XG5cbiAgY29uc3QgbmV3Q2VudGVyID0gd29ybGRUb0xuZ0xhdChcbiAgICAoc3RhcnRDZW50ZXJYWS5hZGQodURlbHRhLnNjYWxlKHUpKSkuc2NhbGUoc2NhbGVJbmNyZW1lbnQpLFxuICAgIHpvb21Ub1NjYWxlKG5ld1pvb20pKTtcbiAgdmlld3BvcnQubG9uZ2l0dWRlID0gbmV3Q2VudGVyWzBdO1xuICB2aWV3cG9ydC5sYXRpdHVkZSA9IG5ld0NlbnRlclsxXTtcbiAgdmlld3BvcnQuem9vbSA9IG5ld1pvb207XG4gIHJldHVybiB2aWV3cG9ydDtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cbiJdfQ==
  50396. /***/ }),
  50397. /* 686 */
  50398. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  50399. "use strict";
  50400. /* harmony export (immutable) */ __webpack_exports__["a"] = normalizeViewportProps;
  50401. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__web_mercator_viewport__ = __webpack_require__(81);
  50402. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math_utils__ = __webpack_require__(118);
  50403. // defined by mapbox-gl
  50404. var MAX_LATITUDE = 85.05113;
  50405. var MIN_LATITUDE = -85.05113;
  50406. // Apply mathematical constraints to viewport props
  50407. /* eslint-disable complexity */
  50408. function normalizeViewportProps(_ref) {
  50409. var width = _ref.width,
  50410. height = _ref.height,
  50411. longitude = _ref.longitude,
  50412. latitude = _ref.latitude,
  50413. zoom = _ref.zoom,
  50414. _ref$pitch = _ref.pitch,
  50415. pitch = _ref$pitch === undefined ? 0 : _ref$pitch,
  50416. _ref$bearing = _ref.bearing,
  50417. bearing = _ref$bearing === undefined ? 0 : _ref$bearing;
  50418. // Normalize degrees
  50419. if (longitude < -180 || longitude > 180) {
  50420. longitude = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["d" /* mod */])(longitude + 180, 360) - 180;
  50421. }
  50422. if (bearing < -180 || bearing > 180) {
  50423. bearing = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["d" /* mod */])(bearing + 180, 360) - 180;
  50424. }
  50425. // Constrain zoom and shift center at low zoom levels
  50426. var flatViewport = new __WEBPACK_IMPORTED_MODULE_0__web_mercator_viewport__["a" /* default */]({ width: width, height: height, longitude: longitude, latitude: latitude, zoom: zoom });
  50427. var topY = flatViewport.project([longitude, MAX_LATITUDE])[1];
  50428. var bottomY = flatViewport.project([longitude, MIN_LATITUDE])[1];
  50429. var shiftY = 0;
  50430. if (bottomY - topY < height) {
  50431. // Map height must not be smaller than viewport height
  50432. // Zoom out map to fit map height into viewport
  50433. zoom += Math.log2(height / (bottomY - topY));
  50434. // Calculate top and bottom using new zoom
  50435. flatViewport = new __WEBPACK_IMPORTED_MODULE_0__web_mercator_viewport__["a" /* default */]({ width: width, height: height, longitude: longitude, latitude: latitude, zoom: zoom });
  50436. topY = flatViewport.project([longitude, MAX_LATITUDE])[1];
  50437. bottomY = flatViewport.project([longitude, MIN_LATITUDE])[1];
  50438. }
  50439. if (topY > 0) {
  50440. // Compensate for white gap on top
  50441. shiftY = topY;
  50442. } else if (bottomY < height) {
  50443. // Compensate for white gap on bottom
  50444. shiftY = bottomY - height;
  50445. }
  50446. if (shiftY) {
  50447. latitude = flatViewport.unproject([width / 2, height / 2 + shiftY])[1];
  50448. }
  50449. return { width: width, height: height, longitude: longitude, latitude: latitude, zoom: zoom, pitch: pitch, bearing: bearing };
  50450. }
  50451. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ub3JtYWxpemUtdmlld3BvcnQtcHJvcHMuanMiXSwibmFtZXMiOlsiV2ViTWVyY2F0b3JWaWV3cG9ydCIsIm1vZCIsIk1BWF9MQVRJVFVERSIsIk1JTl9MQVRJVFVERSIsIm5vcm1hbGl6ZVZpZXdwb3J0UHJvcHMiLCJ3aWR0aCIsImhlaWdodCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsInBpdGNoIiwiYmVhcmluZyIsImZsYXRWaWV3cG9ydCIsInRvcFkiLCJwcm9qZWN0IiwiYm90dG9tWSIsInNoaWZ0WSIsIk1hdGgiLCJsb2cyIiwidW5wcm9qZWN0Il0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxtQkFBUCxNQUFnQyx5QkFBaEM7QUFDQSxTQUFRQyxHQUFSLFFBQW1CLGNBQW5COztBQUVBO0FBQ0EsSUFBTUMsZUFBZSxRQUFyQjtBQUNBLElBQU1DLGVBQWUsQ0FBQyxRQUF0Qjs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxTQUFTQyxzQkFBVCxPQVFaO0FBQUEsTUFQREMsS0FPQyxRQVBEQSxLQU9DO0FBQUEsTUFOREMsTUFNQyxRQU5EQSxNQU1DO0FBQUEsTUFMREMsU0FLQyxRQUxEQSxTQUtDO0FBQUEsTUFKREMsUUFJQyxRQUpEQSxRQUlDO0FBQUEsTUFIREMsSUFHQyxRQUhEQSxJQUdDO0FBQUEsd0JBRkRDLEtBRUM7QUFBQSxNQUZEQSxLQUVDLDhCQUZPLENBRVA7QUFBQSwwQkFEREMsT0FDQztBQUFBLE1BRERBLE9BQ0MsZ0NBRFMsQ0FDVDs7QUFDRDtBQUNBLE1BQUlKLFlBQVksQ0FBQyxHQUFiLElBQW9CQSxZQUFZLEdBQXBDLEVBQXlDO0FBQ3ZDQSxnQkFBWU4sSUFBSU0sWUFBWSxHQUFoQixFQUFxQixHQUFyQixJQUE0QixHQUF4QztBQUNEO0FBQ0QsTUFBSUksVUFBVSxDQUFDLEdBQVgsSUFBa0JBLFVBQVUsR0FBaEMsRUFBcUM7QUFDbkNBLGNBQVVWLElBQUlVLFVBQVUsR0FBZCxFQUFtQixHQUFuQixJQUEwQixHQUFwQztBQUNEOztBQUVEO0FBQ0EsTUFBSUMsZUFBZSxJQUFJWixtQkFBSixDQUF3QixFQUFDSyxZQUFELEVBQVFDLGNBQVIsRUFBZ0JDLG9CQUFoQixFQUEyQkMsa0JBQTNCLEVBQXFDQyxVQUFyQyxFQUF4QixDQUFuQjtBQUNBLE1BQUlJLE9BQU9ELGFBQWFFLE9BQWIsQ0FBcUIsQ0FBQ1AsU0FBRCxFQUFZTCxZQUFaLENBQXJCLEVBQWdELENBQWhELENBQVg7QUFDQSxNQUFJYSxVQUFVSCxhQUFhRSxPQUFiLENBQXFCLENBQUNQLFNBQUQsRUFBWUosWUFBWixDQUFyQixFQUFnRCxDQUFoRCxDQUFkO0FBQ0EsTUFBSWEsU0FBUyxDQUFiOztBQUVBLE1BQUlELFVBQVVGLElBQVYsR0FBaUJQLE1BQXJCLEVBQTZCO0FBQzNCO0FBQ0E7QUFDQUcsWUFBUVEsS0FBS0MsSUFBTCxDQUFVWixVQUFVUyxVQUFVRixJQUFwQixDQUFWLENBQVI7O0FBRUE7QUFDQUQsbUJBQWUsSUFBSVosbUJBQUosQ0FBd0IsRUFBQ0ssWUFBRCxFQUFRQyxjQUFSLEVBQWdCQyxvQkFBaEIsRUFBMkJDLGtCQUEzQixFQUFxQ0MsVUFBckMsRUFBeEIsQ0FBZjtBQUNBSSxXQUFPRCxhQUFhRSxPQUFiLENBQXFCLENBQUNQLFNBQUQsRUFBWUwsWUFBWixDQUFyQixFQUFnRCxDQUFoRCxDQUFQO0FBQ0FhLGNBQVVILGFBQWFFLE9BQWIsQ0FBcUIsQ0FBQ1AsU0FBRCxFQUFZSixZQUFaLENBQXJCLEVBQWdELENBQWhELENBQVY7QUFDRDtBQUNELE1BQUlVLE9BQU8sQ0FBWCxFQUFjO0FBQ1o7QUFDQUcsYUFBU0gsSUFBVDtBQUNELEdBSEQsTUFHTyxJQUFJRSxVQUFVVCxNQUFkLEVBQXNCO0FBQzNCO0FBQ0FVLGFBQVNELFVBQVVULE1BQW5CO0FBQ0Q7QUFDRCxNQUFJVSxNQUFKLEVBQVk7QUFDVlIsZUFBV0ksYUFBYU8sU0FBYixDQUF1QixDQUFDZCxRQUFRLENBQVQsRUFBWUMsU0FBUyxDQUFULEdBQWFVLE1BQXpCLENBQXZCLEVBQXlELENBQXpELENBQVg7QUFDRDs7QUFFRCxTQUFPLEVBQUNYLFlBQUQsRUFBUUMsY0FBUixFQUFnQkMsb0JBQWhCLEVBQTJCQyxrQkFBM0IsRUFBcUNDLFVBQXJDLEVBQTJDQyxZQUEzQyxFQUFrREMsZ0JBQWxELEVBQVA7QUFDRCIsImZpbGUiOiJub3JtYWxpemUtdmlld3BvcnQtcHJvcHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV2ViTWVyY2F0b3JWaWV3cG9ydCBmcm9tICcuL3dlYi1tZXJjYXRvci12aWV3cG9ydCc7XG5pbXBvcnQge21vZH0gIGZyb20gJy4vbWF0aC11dGlscyc7XG5cbi8vIGRlZmluZWQgYnkgbWFwYm94LWdsXG5jb25zdCBNQVhfTEFUSVRVREUgPSA4NS4wNTExMztcbmNvbnN0IE1JTl9MQVRJVFVERSA9IC04NS4wNTExMztcblxuLy8gQXBwbHkgbWF0aGVtYXRpY2FsIGNvbnN0cmFpbnRzIHRvIHZpZXdwb3J0IHByb3BzXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVWaWV3cG9ydFByb3BzKHtcbiAgd2lkdGgsXG4gIGhlaWdodCxcbiAgbG9uZ2l0dWRlLFxuICBsYXRpdHVkZSxcbiAgem9vbSxcbiAgcGl0Y2ggPSAwLFxuICBiZWFyaW5nID0gMFxufSkge1xuICAvLyBOb3JtYWxpemUgZGVncmVlc1xuICBpZiAobG9uZ2l0dWRlIDwgLTE4MCB8fCBsb25naXR1ZGUgPiAxODApIHtcbiAgICBsb25naXR1ZGUgPSBtb2QobG9uZ2l0dWRlICsgMTgwLCAzNjApIC0gMTgwO1xuICB9XG4gIGlmIChiZWFyaW5nIDwgLTE4MCB8fCBiZWFyaW5nID4gMTgwKSB7XG4gICAgYmVhcmluZyA9IG1vZChiZWFyaW5nICsgMTgwLCAzNjApIC0gMTgwO1xuICB9XG5cbiAgLy8gQ29uc3RyYWluIHpvb20gYW5kIHNoaWZ0IGNlbnRlciBhdCBsb3cgem9vbSBsZXZlbHNcbiAgbGV0IGZsYXRWaWV3cG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHt3aWR0aCwgaGVpZ2h0LCBsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tfSk7XG4gIGxldCB0b3BZID0gZmxhdFZpZXdwb3J0LnByb2plY3QoW2xvbmdpdHVkZSwgTUFYX0xBVElUVURFXSlbMV07XG4gIGxldCBib3R0b21ZID0gZmxhdFZpZXdwb3J0LnByb2plY3QoW2xvbmdpdHVkZSwgTUlOX0xBVElUVURFXSlbMV07XG4gIGxldCBzaGlmdFkgPSAwO1xuXG4gIGlmIChib3R0b21ZIC0gdG9wWSA8IGhlaWdodCkge1xuICAgIC8vIE1hcCBoZWlnaHQgbXVzdCBub3QgYmUgc21hbGxlciB0aGFuIHZpZXdwb3J0IGhlaWdodFxuICAgIC8vIFpvb20gb3V0IG1hcCB0byBmaXQgbWFwIGhlaWdodCBpbnRvIHZpZXdwb3J0XG4gICAgem9vbSArPSBNYXRoLmxvZzIoaGVpZ2h0IC8gKGJvdHRvbVkgLSB0b3BZKSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdG9wIGFuZCBib3R0b20gdXNpbmcgbmV3IHpvb21cbiAgICBmbGF0Vmlld3BvcnQgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh7d2lkdGgsIGhlaWdodCwgbG9uZ2l0dWRlLCBsYXRpdHVkZSwgem9vbX0pO1xuICAgIHRvcFkgPSBmbGF0Vmlld3BvcnQucHJvamVjdChbbG9uZ2l0dWRlLCBNQVhfTEFUSVRVREVdKVsxXTtcbiAgICBib3R0b21ZID0gZmxhdFZpZXdwb3J0LnByb2plY3QoW2xvbmdpdHVkZSwgTUlOX0xBVElUVURFXSlbMV07XG4gIH1cbiAgaWYgKHRvcFkgPiAwKSB7XG4gICAgLy8gQ29tcGVuc2F0ZSBmb3Igd2hpdGUgZ2FwIG9uIHRvcFxuICAgIHNoaWZ0WSA9IHRvcFk7XG4gIH0gZWxzZSBpZiAoYm90dG9tWSA8IGhlaWdodCkge1xuICAgIC8vIENvbXBlbnNhdGUgZm9yIHdoaXRlIGdhcCBvbiBib3R0b21cbiAgICBzaGlmdFkgPSBib3R0b21ZIC0gaGVpZ2h0O1xuICB9XG4gIGlmIChzaGlmdFkpIHtcbiAgICBsYXRpdHVkZSA9IGZsYXRWaWV3cG9ydC51bnByb2plY3QoW3dpZHRoIC8gMiwgaGVpZ2h0IC8gMiArIHNoaWZ0WV0pWzFdO1xuICB9XG5cbiAgcmV0dXJuIHt3aWR0aCwgaGVpZ2h0LCBsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tLCBwaXRjaCwgYmVhcmluZ307XG59XG4iXX0=
  50452. /***/ }),
  50453. /* 687 */
  50454. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  50455. "use strict";
  50456. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_math_gl__ = __webpack_require__(16);
  50457. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math_utils__ = __webpack_require__(118);
  50458. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__ = __webpack_require__(80);
  50459. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_mat4_scale__ = __webpack_require__(77);
  50460. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_gl_mat4_scale___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_gl_mat4_scale__);
  50461. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_mat4_translate__ = __webpack_require__(78);
  50462. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_gl_mat4_translate___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_gl_mat4_translate__);
  50463. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_mat4_multiply__ = __webpack_require__(75);
  50464. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_gl_mat4_multiply___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_gl_mat4_multiply__);
  50465. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_mat4_invert__ = __webpack_require__(156);
  50466. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_gl_mat4_invert___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_gl_mat4_invert__);
  50467. var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
  50468. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  50469. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  50470. // View and Projection Matrix management
  50471. /* eslint-disable camelcase */
  50472. var IDENTITY = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["a" /* createMat4 */])();
  50473. var Viewport = function () {
  50474. /**
  50475. * @classdesc
  50476. * Manages coordinate system transformations for deck.gl.
  50477. *
  50478. * Note: The Viewport is immutable in the sense that it only has accessors.
  50479. * A new viewport instance should be created if any parameters have changed.
  50480. *
  50481. * @class
  50482. * @param {Object} opt - options
  50483. * @param {Boolean} mercator=true - Whether to use mercator projection
  50484. *
  50485. * @param {Number} opt.width=1 - Width of "viewport" or window
  50486. * @param {Number} opt.height=1 - Height of "viewport" or window
  50487. * @param {Array} opt.center=[0, 0] - Center of viewport
  50488. * [longitude, latitude] or [x, y]
  50489. * @param {Number} opt.scale=1 - Either use scale or zoom
  50490. * @param {Number} opt.pitch=0 - Camera angle in degrees (0 is straight down)
  50491. * @param {Number} opt.bearing=0 - Map rotation in degrees (0 means north is up)
  50492. * @param {Number} opt.altitude= - Altitude of camera in screen units
  50493. *
  50494. * Web mercator projection short-hand parameters
  50495. * @param {Number} opt.latitude - Center of viewport on map (alternative to opt.center)
  50496. * @param {Number} opt.longitude - Center of viewport on map (alternative to opt.center)
  50497. * @param {Number} opt.zoom - Scale = Math.pow(2,zoom) on map (alternative to opt.scale)
  50498. */
  50499. /* eslint-disable complexity */
  50500. function Viewport() {
  50501. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  50502. width = _ref.width,
  50503. height = _ref.height,
  50504. _ref$viewMatrix = _ref.viewMatrix,
  50505. viewMatrix = _ref$viewMatrix === undefined ? IDENTITY : _ref$viewMatrix,
  50506. _ref$projectionMatrix = _ref.projectionMatrix,
  50507. //iclient
  50508. isGeographicCoordinateSystem=_ref.isGeographicCoordinateSystem,
  50509. projectionMatrix = _ref$projectionMatrix === undefined ? IDENTITY : _ref$projectionMatrix;
  50510. _classCallCheck(this, Viewport);
  50511. // Silently allow apps to send in 0,0
  50512. this.width = width || 1;
  50513. this.height = height || 1;
  50514. this.scale = 1;
  50515. this.viewMatrix = viewMatrix;
  50516. this.projectionMatrix = projectionMatrix;
  50517. this.isGeographicCoordinateSystem = isGeographicCoordinateSystem;
  50518. // Note: As usual, matrix operations should be applied in "reverse" order
  50519. // since vectors will be multiplied in from the right during transformation
  50520. var vpm = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["a" /* createMat4 */])();
  50521. __WEBPACK_IMPORTED_MODULE_5_gl_mat4_multiply___default()(vpm, vpm, this.projectionMatrix);
  50522. __WEBPACK_IMPORTED_MODULE_5_gl_mat4_multiply___default()(vpm, vpm, this.viewMatrix);
  50523. this.viewProjectionMatrix = vpm;
  50524. // Calculate matrices and scales needed for projection
  50525. /**
  50526. * Builds matrices that converts preprojected lngLats to screen pixels
  50527. * and vice versa.
  50528. * Note: Currently returns bottom-left coordinates!
  50529. * Note: Starts with the GL projection matrix and adds steps to the
  50530. * scale and translate that matrix onto the window.
  50531. * Note: WebGL controls clip space to screen projection with gl.viewport
  50532. * and does not need this step.
  50533. */
  50534. var m = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["a" /* createMat4 */])();
  50535. // matrix for conversion from location to screen coordinates
  50536. __WEBPACK_IMPORTED_MODULE_3_gl_mat4_scale___default()(m, m, [this.width / 2, -this.height / 2, 1]);
  50537. __WEBPACK_IMPORTED_MODULE_4_gl_mat4_translate___default()(m, m, [1, -1, 0]);
  50538. __WEBPACK_IMPORTED_MODULE_5_gl_mat4_multiply___default()(m, m, this.viewProjectionMatrix);
  50539. var mInverse = __WEBPACK_IMPORTED_MODULE_6_gl_mat4_invert___default()(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math_utils__["a" /* createMat4 */])(), m);
  50540. if (!mInverse) {
  50541. throw new Error('Pixel project matrix not invertible');
  50542. }
  50543. this.pixelProjectionMatrix = m;
  50544. this.pixelUnprojectionMatrix = mInverse;
  50545. // Bind methods for easy access
  50546. this.equals = this.equals.bind(this);
  50547. this.project = this.project.bind(this);
  50548. this.unproject = this.unproject.bind(this);
  50549. this.projectFlat = this.projectFlat.bind(this);
  50550. this.unprojectFlat = this.unprojectFlat.bind(this);
  50551. }
  50552. /* eslint-enable complexity */
  50553. // Two viewports are equal if width and height are identical, and if
  50554. // their view and projection matrices are (approximately) equal.
  50555. _createClass(Viewport, [{
  50556. key: 'equals',
  50557. value: function equals(viewport) {
  50558. if (!(viewport instanceof Viewport)) {
  50559. return false;
  50560. }
  50561. return viewport.width === this.width && viewport.height === this.height && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_math_gl__["equals"])(viewport.projectionMatrix, this.projectionMatrix) && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_math_gl__["equals"])(viewport.viewMatrix, this.viewMatrix);
  50562. }
  50563. /**
  50564. * Projects xyz (possibly latitude and longitude) to pixel coordinates in window
  50565. * using viewport projection parameters
  50566. * - [longitude, latitude] to [x, y]
  50567. * - [longitude, latitude, Z] => [x, y, z]
  50568. * Note: By default, returns top-left coordinates for canvas/SVG type render
  50569. *
  50570. * @param {Array} lngLatZ - [lng, lat] or [lng, lat, Z]
  50571. * @param {Object} opts - options
  50572. * @param {Object} opts.topLeft=true - Whether projected coords are top left
  50573. * @return {Array} - screen coordinates [x, y] or [x, y, z], z as pixel depth
  50574. */
  50575. }, {
  50576. key: 'project',
  50577. value: function project(xyz) {
  50578. debugger
  50579. var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  50580. _ref2$topLeft = _ref2.topLeft,
  50581. topLeft = _ref2$topLeft === undefined ? true : _ref2$topLeft;
  50582. var _xyz = _slicedToArray(xyz, 3),
  50583. x0 = _xyz[0],
  50584. y0 = _xyz[1],
  50585. z0 = _xyz[2];
  50586. var _projectFlat = this.projectFlat([x0, y0]),
  50587. _projectFlat2 = _slicedToArray(_projectFlat, 2),
  50588. X = _projectFlat2[0],
  50589. Y = _projectFlat2[1];
  50590. var coord = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__["c" /* worldToPixels */])([X, Y, z0], this.pixelProjectionMatrix);
  50591. var _coord = _slicedToArray(coord, 2),
  50592. x = _coord[0],
  50593. y = _coord[1];
  50594. var y2 = topLeft ? y : this.height - y;
  50595. return xyz.length === 2 ? [x, y2] : [x, y2, coord[2]];
  50596. }
  50597. /**
  50598. * Unproject pixel coordinates on screen onto world coordinates,
  50599. * (possibly [lon, lat]) on map.
  50600. * - [x, y] => [lng, lat]
  50601. * - [x, y, z] => [lng, lat, Z]
  50602. * @param {Array} xyz - screen coordinates, z as pixel depth
  50603. * @param {Object} opts - options
  50604. * @param {Object} opts.topLeft=true - Whether projected coords are top left
  50605. * @param {Object} opts.targetZ=0 - If pixel depth is unknown, targetZ is used as
  50606. * the elevation plane to unproject onto
  50607. * @return {Array} - [lng, lat, Z] or [X, Y, Z]
  50608. */
  50609. }, {
  50610. key: 'unproject',
  50611. value: function unproject(xyz) {
  50612. debugger
  50613. var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
  50614. _ref3$topLeft = _ref3.topLeft,
  50615. topLeft = _ref3$topLeft === undefined ? true : _ref3$topLeft,
  50616. targetZ = _ref3.targetZ;
  50617. var _xyz2 = _slicedToArray(xyz, 3),
  50618. x = _xyz2[0],
  50619. y = _xyz2[1],
  50620. z = _xyz2[2];
  50621. var y2 = topLeft ? y : this.height - y;
  50622. var coord = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__web_mercator_utils__["d" /* pixelsToWorld */])([x, y2, z], this.pixelUnprojectionMatrix, targetZ);
  50623. var _unprojectFlat = this.unprojectFlat(coord),
  50624. _unprojectFlat2 = _slicedToArray(_unprojectFlat, 2),
  50625. X = _unprojectFlat2[0],
  50626. Y = _unprojectFlat2[1];
  50627. if (Number.isFinite(z)) {
  50628. // Has depth component
  50629. return [X, Y, coord[2]];
  50630. }
  50631. return Number.isFinite(targetZ) ? [X, Y, targetZ] : [X, Y];
  50632. }
  50633. // NON_LINEAR PROJECTION HOOKS
  50634. // Used for web meractor projection
  50635. /**
  50636. * Project map coordinates to world coordinates.
  50637. * This should be overridden by each viewport that implements a specific
  50638. * geographic projection.
  50639. * @param {Array} xyz - map coordinates
  50640. * @return {Array} [x,y,z] world coordinates.
  50641. */
  50642. }, {
  50643. key: 'projectFlat',
  50644. value: function projectFlat(xyz) {
  50645. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  50646. return xyz;
  50647. }
  50648. /**
  50649. * Project world coordinates to map coordinates.
  50650. * This should be overridden by each viewport that implements a specific
  50651. * geographic projection.
  50652. * @param {Array} xyz - world coordinates
  50653. * @return {Array} [x,y,z] map coordinates.
  50654. */
  50655. }, {
  50656. key: 'unprojectFlat',
  50657. value: function unprojectFlat(xyz) {
  50658. var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.scale;
  50659. return xyz;
  50660. }
  50661. }]);
  50662. return Viewport;
  50663. }();
  50664. /* harmony default export */ __webpack_exports__["a"] = (Viewport);
  50665. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92aWV3cG9ydC5qcyJdLCJuYW1lcyI6WyJlcXVhbHMiLCJjcmVhdGVNYXQ0Iiwid29ybGRUb1BpeGVscyIsInBpeGVsc1RvV29ybGQiLCJtYXQ0X3NjYWxlIiwibWF0NF90cmFuc2xhdGUiLCJtYXQ0X211bHRpcGx5IiwibWF0NF9pbnZlcnQiLCJJREVOVElUWSIsIlZpZXdwb3J0Iiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3TWF0cml4IiwicHJvamVjdGlvbk1hdHJpeCIsInNjYWxlIiwidnBtIiwidmlld1Byb2plY3Rpb25NYXRyaXgiLCJtIiwibUludmVyc2UiLCJFcnJvciIsInBpeGVsUHJvamVjdGlvbk1hdHJpeCIsInBpeGVsVW5wcm9qZWN0aW9uTWF0cml4IiwiYmluZCIsInByb2plY3QiLCJ1bnByb2plY3QiLCJwcm9qZWN0RmxhdCIsInVucHJvamVjdEZsYXQiLCJ2aWV3cG9ydCIsInh5eiIsInRvcExlZnQiLCJ4MCIsInkwIiwiejAiLCJYIiwiWSIsImNvb3JkIiwieCIsInkiLCJ5MiIsImxlbmd0aCIsInRhcmdldFoiLCJ6IiwiTnVtYmVyIiwiaXNGaW5pdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUVBO0FBQ0EsU0FBUUEsaUJBQVIsUUFBcUIsU0FBckI7QUFDQSxTQUFRQyxVQUFSLFFBQXlCLGNBQXpCO0FBQ0EsU0FBUUMsYUFBUixFQUF1QkMsYUFBdkIsUUFBMkMsc0JBQTNDOztBQUVBLE9BQU9DLFVBQVAsTUFBdUIsZUFBdkI7QUFDQSxPQUFPQyxjQUFQLE1BQTJCLG1CQUEzQjtBQUNBLE9BQU9DLGFBQVAsTUFBMEIsa0JBQTFCO0FBQ0EsT0FBT0MsV0FBUCxNQUF3QixnQkFBeEI7O0FBRUEsSUFBTUMsV0FBV1AsWUFBakI7O0lBRXFCUSxRO0FBQ25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJBO0FBQ0Esc0JBT1E7QUFBQSxtRkFBSixFQUFJO0FBQUEsUUFMTkMsS0FLTSxRQUxOQSxLQUtNO0FBQUEsUUFKTkMsTUFJTSxRQUpOQSxNQUlNO0FBQUEsK0JBRk5DLFVBRU07QUFBQSxRQUZOQSxVQUVNLG1DQUZPSixRQUVQO0FBQUEscUNBRE5LLGdCQUNNO0FBQUEsUUFETkEsZ0JBQ00seUNBRGFMLFFBQ2I7O0FBQUE7O0FBQ047QUFDQSxTQUFLRSxLQUFMLEdBQWFBLFNBQVMsQ0FBdEI7QUFDQSxTQUFLQyxNQUFMLEdBQWNBLFVBQVUsQ0FBeEI7QUFDQSxTQUFLRyxLQUFMLEdBQWEsQ0FBYjs7QUFFQSxTQUFLRixVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFNBQUtDLGdCQUFMLEdBQXdCQSxnQkFBeEI7O0FBRUE7QUFDQTtBQUNBLFFBQU1FLE1BQU1kLFlBQVo7QUFDQUssa0JBQWNTLEdBQWQsRUFBbUJBLEdBQW5CLEVBQXdCLEtBQUtGLGdCQUE3QjtBQUNBUCxrQkFBY1MsR0FBZCxFQUFtQkEsR0FBbkIsRUFBd0IsS0FBS0gsVUFBN0I7QUFDQSxTQUFLSSxvQkFBTCxHQUE0QkQsR0FBNUI7O0FBRUE7QUFDQTs7Ozs7Ozs7O0FBU0EsUUFBTUUsSUFBSWhCLFlBQVY7O0FBRUE7QUFDQUcsZUFBV2EsQ0FBWCxFQUFjQSxDQUFkLEVBQWlCLENBQUMsS0FBS1AsS0FBTCxHQUFhLENBQWQsRUFBaUIsQ0FBQyxLQUFLQyxNQUFOLEdBQWUsQ0FBaEMsRUFBbUMsQ0FBbkMsQ0FBakI7QUFDQU4sbUJBQWVZLENBQWYsRUFBa0JBLENBQWxCLEVBQXFCLENBQUMsQ0FBRCxFQUFJLENBQUMsQ0FBTCxFQUFRLENBQVIsQ0FBckI7O0FBRUFYLGtCQUFjVyxDQUFkLEVBQWlCQSxDQUFqQixFQUFvQixLQUFLRCxvQkFBekI7O0FBRUEsUUFBTUUsV0FBV1gsWUFBWU4sWUFBWixFQUEwQmdCLENBQTFCLENBQWpCO0FBQ0EsUUFBSSxDQUFDQyxRQUFMLEVBQWU7QUFDYixZQUFNLElBQUlDLEtBQUosQ0FBVSxxQ0FBVixDQUFOO0FBQ0Q7O0FBRUQsU0FBS0MscUJBQUwsR0FBNkJILENBQTdCO0FBQ0EsU0FBS0ksdUJBQUwsR0FBK0JILFFBQS9COztBQUVBO0FBQ0EsU0FBS2xCLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVlzQixJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhRCxJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDQSxTQUFLRSxTQUFMLEdBQWlCLEtBQUtBLFNBQUwsQ0FBZUYsSUFBZixDQUFvQixJQUFwQixDQUFqQjtBQUNBLFNBQUtHLFdBQUwsR0FBbUIsS0FBS0EsV0FBTCxDQUFpQkgsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBbkI7QUFDQSxTQUFLSSxhQUFMLEdBQXFCLEtBQUtBLGFBQUwsQ0FBbUJKLElBQW5CLENBQXdCLElBQXhCLENBQXJCO0FBQ0Q7QUFDRDs7QUFFQTtBQUNBOzs7OzsyQkFDT0ssUSxFQUFVO0FBQ2YsVUFBSSxFQUFFQSxvQkFBb0JsQixRQUF0QixDQUFKLEVBQXFDO0FBQ25DLGVBQU8sS0FBUDtBQUNEOztBQUVELGFBQU9rQixTQUFTakIsS0FBVCxLQUFtQixLQUFLQSxLQUF4QixJQUNMaUIsU0FBU2hCLE1BQVQsS0FBb0IsS0FBS0EsTUFEcEIsSUFFTFgsUUFBTzJCLFNBQVNkLGdCQUFoQixFQUFrQyxLQUFLQSxnQkFBdkMsQ0FGSyxJQUdMYixRQUFPMkIsU0FBU2YsVUFBaEIsRUFBNEIsS0FBS0EsVUFBakMsQ0FIRjtBQUlEOztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7NEJBWVFnQixHLEVBQTRCO0FBQUEsc0ZBQUosRUFBSTtBQUFBLGdDQUF0QkMsT0FBc0I7QUFBQSxVQUF0QkEsT0FBc0IsaUNBQVosSUFBWTs7QUFBQSxnQ0FDYkQsR0FEYTtBQUFBLFVBQzNCRSxFQUQyQjtBQUFBLFVBQ3ZCQyxFQUR1QjtBQUFBLFVBQ25CQyxFQURtQjs7QUFBQSx5QkFHbkIsS0FBS1AsV0FBTCxDQUFpQixDQUFDSyxFQUFELEVBQUtDLEVBQUwsQ0FBakIsQ0FIbUI7QUFBQTtBQUFBLFVBRzNCRSxDQUgyQjtBQUFBLFVBR3hCQyxDQUh3Qjs7QUFJbEMsVUFBTUMsUUFBUWpDLGNBQWMsQ0FBQytCLENBQUQsRUFBSUMsQ0FBSixFQUFPRixFQUFQLENBQWQsRUFBMEIsS0FBS1oscUJBQS9CLENBQWQ7O0FBSmtDLGtDQU1uQmUsS0FObUI7QUFBQSxVQU0zQkMsQ0FOMkI7QUFBQSxVQU14QkMsQ0FOd0I7O0FBT2xDLFVBQU1DLEtBQUtULFVBQVVRLENBQVYsR0FBYyxLQUFLMUIsTUFBTCxHQUFjMEIsQ0FBdkM7QUFDQSxhQUFPVCxJQUFJVyxNQUFKLEtBQWUsQ0FBZixHQUFtQixDQUFDSCxDQUFELEVBQUlFLEVBQUosQ0FBbkIsR0FBNkIsQ0FBQ0YsQ0FBRCxFQUFJRSxFQUFKLEVBQVFILE1BQU0sQ0FBTixDQUFSLENBQXBDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs4QkFZVVAsRyxFQUFxQztBQUFBLHNGQUFKLEVBQUk7QUFBQSxnQ0FBL0JDLE9BQStCO0FBQUEsVUFBL0JBLE9BQStCLGlDQUFyQixJQUFxQjtBQUFBLFVBQWZXLE9BQWUsU0FBZkEsT0FBZTs7QUFBQSxpQ0FDM0JaLEdBRDJCO0FBQUEsVUFDdENRLENBRHNDO0FBQUEsVUFDbkNDLENBRG1DO0FBQUEsVUFDaENJLENBRGdDOztBQUc3QyxVQUFNSCxLQUFLVCxVQUFVUSxDQUFWLEdBQWMsS0FBSzFCLE1BQUwsR0FBYzBCLENBQXZDO0FBQ0EsVUFBTUYsUUFBUWhDLGNBQWMsQ0FBQ2lDLENBQUQsRUFBSUUsRUFBSixFQUFRRyxDQUFSLENBQWQsRUFBMEIsS0FBS3BCLHVCQUEvQixFQUF3RG1CLE9BQXhELENBQWQ7O0FBSjZDLDJCQUs5QixLQUFLZCxhQUFMLENBQW1CUyxLQUFuQixDQUw4QjtBQUFBO0FBQUEsVUFLdENGLENBTHNDO0FBQUEsVUFLbkNDLENBTG1DOztBQU83QyxVQUFJUSxPQUFPQyxRQUFQLENBQWdCRixDQUFoQixDQUFKLEVBQXdCO0FBQ3RCO0FBQ0EsZUFBTyxDQUFDUixDQUFELEVBQUlDLENBQUosRUFBT0MsTUFBTSxDQUFOLENBQVAsQ0FBUDtBQUNEOztBQUVELGFBQU9PLE9BQU9DLFFBQVAsQ0FBZ0JILE9BQWhCLElBQTJCLENBQUNQLENBQUQsRUFBSUMsQ0FBSixFQUFPTSxPQUFQLENBQTNCLEdBQTZDLENBQUNQLENBQUQsRUFBSUMsQ0FBSixDQUFwRDtBQUNEOztBQUVEO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Z0NBT1lOLEcsRUFBeUI7QUFBQSxVQUFwQmQsS0FBb0IsdUVBQVosS0FBS0EsS0FBTzs7QUFDbkMsYUFBT2MsR0FBUDtBQUNEOztBQUVEOzs7Ozs7Ozs7O2tDQU9jQSxHLEVBQXlCO0FBQUEsVUFBcEJkLEtBQW9CLHVFQUFaLEtBQUtBLEtBQU87O0FBQ3JDLGFBQU9jLEdBQVA7QUFDRDs7Ozs7O2VBM0trQm5CLFEiLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBWaWV3IGFuZCBQcm9qZWN0aW9uIE1hdHJpeCBtYW5hZ2VtZW50XG5cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IHtlcXVhbHN9IGZyb20gJ21hdGguZ2wnO1xuaW1wb3J0IHtjcmVhdGVNYXQ0fSBmcm9tICcuL21hdGgtdXRpbHMnO1xuaW1wb3J0IHt3b3JsZFRvUGl4ZWxzLCBwaXhlbHNUb1dvcmxkfSBmcm9tICcuL3dlYi1tZXJjYXRvci11dGlscyc7XG5cbmltcG9ydCBtYXQ0X3NjYWxlIGZyb20gJ2dsLW1hdDQvc2NhbGUnO1xuaW1wb3J0IG1hdDRfdHJhbnNsYXRlIGZyb20gJ2dsLW1hdDQvdHJhbnNsYXRlJztcbmltcG9ydCBtYXQ0X211bHRpcGx5IGZyb20gJ2dsLW1hdDQvbXVsdGlwbHknO1xuaW1wb3J0IG1hdDRfaW52ZXJ0IGZyb20gJ2dsLW1hdDQvaW52ZXJ0JztcblxuY29uc3QgSURFTlRJVFkgPSBjcmVhdGVNYXQ0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXdwb3J0IHtcbiAgLyoqXG4gICAqIEBjbGFzc2Rlc2NcbiAgICogTWFuYWdlcyBjb29yZGluYXRlIHN5c3RlbSB0cmFuc2Zvcm1hdGlvbnMgZm9yIGRlY2suZ2wuXG4gICAqXG4gICAqIE5vdGU6IFRoZSBWaWV3cG9ydCBpcyBpbW11dGFibGUgaW4gdGhlIHNlbnNlIHRoYXQgaXQgb25seSBoYXMgYWNjZXNzb3JzLlxuICAgKiBBIG5ldyB2aWV3cG9ydCBpbnN0YW5jZSBzaG91bGQgYmUgY3JlYXRlZCBpZiBhbnkgcGFyYW1ldGVycyBoYXZlIGNoYW5nZWQuXG4gICAqXG4gICAqIEBjbGFzc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0IC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IG1lcmNhdG9yPXRydWUgLSBXaGV0aGVyIHRvIHVzZSBtZXJjYXRvciBwcm9qZWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcHQud2lkdGg9MSAtIFdpZHRoIG9mIFwidmlld3BvcnRcIiBvciB3aW5kb3dcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdC5oZWlnaHQ9MSAtIEhlaWdodCBvZiBcInZpZXdwb3J0XCIgb3Igd2luZG93XG4gICAqIEBwYXJhbSB7QXJyYXl9IG9wdC5jZW50ZXI9WzAsIDBdIC0gQ2VudGVyIG9mIHZpZXdwb3J0XG4gICAqICAgW2xvbmdpdHVkZSwgbGF0aXR1ZGVdIG9yIFt4LCB5XVxuICAgKiBAcGFyYW0ge051bWJlcn0gb3B0LnNjYWxlPTEgLSBFaXRoZXIgdXNlIHNjYWxlIG9yIHpvb21cbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdC5waXRjaD0wIC0gQ2FtZXJhIGFuZ2xlIGluIGRlZ3JlZXMgKDAgaXMgc3RyYWlnaHQgZG93bilcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdC5iZWFyaW5nPTAgLSBNYXAgcm90YXRpb24gaW4gZGVncmVlcyAoMCBtZWFucyBub3J0aCBpcyB1cClcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdC5hbHRpdHVkZT0gLSBBbHRpdHVkZSBvZiBjYW1lcmEgaW4gc2NyZWVuIHVuaXRzXG4gICAqXG4gICAqIFdlYiBtZXJjYXRvciBwcm9qZWN0aW9uIHNob3J0LWhhbmQgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge051bWJlcn0gb3B0LmxhdGl0dWRlIC0gQ2VudGVyIG9mIHZpZXdwb3J0IG9uIG1hcCAoYWx0ZXJuYXRpdmUgdG8gb3B0LmNlbnRlcilcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdC5sb25naXR1ZGUgLSBDZW50ZXIgb2Ygdmlld3BvcnQgb24gbWFwIChhbHRlcm5hdGl2ZSB0byBvcHQuY2VudGVyKVxuICAgKiBAcGFyYW0ge051bWJlcn0gb3B0Lnpvb20gLSBTY2FsZSA9IE1hdGgucG93KDIsem9vbSkgb24gbWFwIChhbHRlcm5hdGl2ZSB0byBvcHQuc2NhbGUpXG4gICAqL1xuICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gIGNvbnN0cnVjdG9yKHtcbiAgICAvLyBXaW5kb3cgd2lkdGgvaGVpZ2h0IGluIHBpeGVscyAoZm9yIHBpeGVsIHByb2plY3Rpb24pXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIC8vIERlc2NcbiAgICB2aWV3TWF0cml4ID0gSURFTlRJVFksXG4gICAgcHJvamVjdGlvbk1hdHJpeCA9IElERU5USVRZXG4gIH0gPSB7fSkge1xuICAgIC8vIFNpbGVudGx5IGFsbG93IGFwcHMgdG8gc2VuZCBpbiAwLDBcbiAgICB0aGlzLndpZHRoID0gd2lkdGggfHwgMTtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodCB8fCAxO1xuICAgIHRoaXMuc2NhbGUgPSAxO1xuXG4gICAgdGhpcy52aWV3TWF0cml4ID0gdmlld01hdHJpeDtcbiAgICB0aGlzLnByb2plY3Rpb25NYXRyaXggPSBwcm9qZWN0aW9uTWF0cml4O1xuXG4gICAgLy8gTm90ZTogQXMgdXN1YWwsIG1hdHJpeCBvcGVyYXRpb25zIHNob3VsZCBiZSBhcHBsaWVkIGluIFwicmV2ZXJzZVwiIG9yZGVyXG4gICAgLy8gc2luY2UgdmVjdG9ycyB3aWxsIGJlIG11bHRpcGxpZWQgaW4gZnJvbSB0aGUgcmlnaHQgZHVyaW5nIHRyYW5zZm9ybWF0aW9uXG4gICAgY29uc3QgdnBtID0gY3JlYXRlTWF0NCgpO1xuICAgIG1hdDRfbXVsdGlwbHkodnBtLCB2cG0sIHRoaXMucHJvamVjdGlvbk1hdHJpeCk7XG4gICAgbWF0NF9tdWx0aXBseSh2cG0sIHZwbSwgdGhpcy52aWV3TWF0cml4KTtcbiAgICB0aGlzLnZpZXdQcm9qZWN0aW9uTWF0cml4ID0gdnBtO1xuXG4gICAgLy8gQ2FsY3VsYXRlIG1hdHJpY2VzIGFuZCBzY2FsZXMgbmVlZGVkIGZvciBwcm9qZWN0aW9uXG4gICAgLyoqXG4gICAgICogQnVpbGRzIG1hdHJpY2VzIHRoYXQgY29udmVydHMgcHJlcHJvamVjdGVkIGxuZ0xhdHMgdG8gc2NyZWVuIHBpeGVsc1xuICAgICAqIGFuZCB2aWNlIHZlcnNhLlxuICAgICAqIE5vdGU6IEN1cnJlbnRseSByZXR1cm5zIGJvdHRvbS1sZWZ0IGNvb3JkaW5hdGVzIVxuICAgICAqIE5vdGU6IFN0YXJ0cyB3aXRoIHRoZSBHTCBwcm9qZWN0aW9uIG1hdHJpeCBhbmQgYWRkcyBzdGVwcyB0byB0aGVcbiAgICAgKiAgICAgICBzY2FsZSBhbmQgdHJhbnNsYXRlIHRoYXQgbWF0cml4IG9udG8gdGhlIHdpbmRvdy5cbiAgICAgKiBOb3RlOiBXZWJHTCBjb250cm9scyBjbGlwIHNwYWNlIHRvIHNjcmVlbiBwcm9qZWN0aW9uIHdpdGggZ2wudmlld3BvcnRcbiAgICAgKiAgICAgICBhbmQgZG9lcyBub3QgbmVlZCB0aGlzIHN0ZXAuXG4gICAgICovXG4gICAgY29uc3QgbSA9IGNyZWF0ZU1hdDQoKTtcblxuICAgIC8vIG1hdHJpeCBmb3IgY29udmVyc2lvbiBmcm9tIGxvY2F0aW9uIHRvIHNjcmVlbiBjb29yZGluYXRlc1xuICAgIG1hdDRfc2NhbGUobSwgbSwgW3RoaXMud2lkdGggLyAyLCAtdGhpcy5oZWlnaHQgLyAyLCAxXSk7XG4gICAgbWF0NF90cmFuc2xhdGUobSwgbSwgWzEsIC0xLCAwXSk7XG5cbiAgICBtYXQ0X211bHRpcGx5KG0sIG0sIHRoaXMudmlld1Byb2plY3Rpb25NYXRyaXgpO1xuXG4gICAgY29uc3QgbUludmVyc2UgPSBtYXQ0X2ludmVydChjcmVhdGVNYXQ0KCksIG0pO1xuICAgIGlmICghbUludmVyc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGl4ZWwgcHJvamVjdCBtYXRyaXggbm90IGludmVydGlibGUnKTtcbiAgICB9XG5cbiAgICB0aGlzLnBpeGVsUHJvamVjdGlvbk1hdHJpeCA9IG07XG4gICAgdGhpcy5waXhlbFVucHJvamVjdGlvbk1hdHJpeCA9IG1JbnZlcnNlO1xuXG4gICAgLy8gQmluZCBtZXRob2RzIGZvciBlYXN5IGFjY2Vzc1xuICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2plY3QgPSB0aGlzLnByb2plY3QuYmluZCh0aGlzKTtcbiAgICB0aGlzLnVucHJvamVjdCA9IHRoaXMudW5wcm9qZWN0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9qZWN0RmxhdCA9IHRoaXMucHJvamVjdEZsYXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnVucHJvamVjdEZsYXQgPSB0aGlzLnVucHJvamVjdEZsYXQuYmluZCh0aGlzKTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAvLyBUd28gdmlld3BvcnRzIGFyZSBlcXVhbCBpZiB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBpZGVudGljYWwsIGFuZCBpZlxuICAvLyB0aGVpciB2aWV3IGFuZCBwcm9qZWN0aW9uIG1hdHJpY2VzIGFyZSAoYXBwcm94aW1hdGVseSkgZXF1YWwuXG4gIGVxdWFscyh2aWV3cG9ydCkge1xuICAgIGlmICghKHZpZXdwb3J0IGluc3RhbmNlb2YgVmlld3BvcnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpZXdwb3J0LndpZHRoID09PSB0aGlzLndpZHRoICYmXG4gICAgICB2aWV3cG9ydC5oZWlnaHQgPT09IHRoaXMuaGVpZ2h0ICYmXG4gICAgICBlcXVhbHModmlld3BvcnQucHJvamVjdGlvbk1hdHJpeCwgdGhpcy5wcm9qZWN0aW9uTWF0cml4KSAmJlxuICAgICAgZXF1YWxzKHZpZXdwb3J0LnZpZXdNYXRyaXgsIHRoaXMudmlld01hdHJpeCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvamVjdHMgeHl6IChwb3NzaWJseSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlKSB0byBwaXhlbCBjb29yZGluYXRlcyBpbiB3aW5kb3dcbiAgICogdXNpbmcgdmlld3BvcnQgcHJvamVjdGlvbiBwYXJhbWV0ZXJzXG4gICAqIC0gW2xvbmdpdHVkZSwgbGF0aXR1ZGVdIHRvIFt4LCB5XVxuICAgKiAtIFtsb25naXR1ZGUsIGxhdGl0dWRlLCBaXSA9PiBbeCwgeSwgel1cbiAgICogTm90ZTogQnkgZGVmYXVsdCwgcmV0dXJucyB0b3AtbGVmdCBjb29yZGluYXRlcyBmb3IgY2FudmFzL1NWRyB0eXBlIHJlbmRlclxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBsbmdMYXRaIC0gW2xuZywgbGF0XSBvciBbbG5nLCBsYXQsIFpdXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cy50b3BMZWZ0PXRydWUgLSBXaGV0aGVyIHByb2plY3RlZCBjb29yZHMgYXJlIHRvcCBsZWZ0XG4gICAqIEByZXR1cm4ge0FycmF5fSAtIHNjcmVlbiBjb29yZGluYXRlcyBbeCwgeV0gb3IgW3gsIHksIHpdLCB6IGFzIHBpeGVsIGRlcHRoXG4gICAqL1xuICBwcm9qZWN0KHh5eiwge3RvcExlZnQgPSB0cnVlfSA9IHt9KSB7XG4gICAgY29uc3QgW3gwLCB5MCwgejBdID0geHl6O1xuXG4gICAgY29uc3QgW1gsIFldID0gdGhpcy5wcm9qZWN0RmxhdChbeDAsIHkwXSk7XG4gICAgY29uc3QgY29vcmQgPSB3b3JsZFRvUGl4ZWxzKFtYLCBZLCB6MF0sIHRoaXMucGl4ZWxQcm9qZWN0aW9uTWF0cml4KTtcblxuICAgIGNvbnN0IFt4LCB5XSA9IGNvb3JkO1xuICAgIGNvbnN0IHkyID0gdG9wTGVmdCA/IHkgOiB0aGlzLmhlaWdodCAtIHk7XG4gICAgcmV0dXJuIHh5ei5sZW5ndGggPT09IDIgPyBbeCwgeTJdIDogW3gsIHkyLCBjb29yZFsyXV07XG4gIH1cblxuICAvKipcbiAgICogVW5wcm9qZWN0IHBpeGVsIGNvb3JkaW5hdGVzIG9uIHNjcmVlbiBvbnRvIHdvcmxkIGNvb3JkaW5hdGVzLFxuICAgKiAocG9zc2libHkgW2xvbiwgbGF0XSkgb24gbWFwLlxuICAgKiAtIFt4LCB5XSA9PiBbbG5nLCBsYXRdXG4gICAqIC0gW3gsIHksIHpdID0+IFtsbmcsIGxhdCwgWl1cbiAgICogQHBhcmFtIHtBcnJheX0geHl6IC0gc2NyZWVuIGNvb3JkaW5hdGVzLCB6IGFzIHBpeGVsIGRlcHRoXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cy50b3BMZWZ0PXRydWUgLSBXaGV0aGVyIHByb2plY3RlZCBjb29yZHMgYXJlIHRvcCBsZWZ0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzLnRhcmdldFo9MCAtIElmIHBpeGVsIGRlcHRoIGlzIHVua25vd24sIHRhcmdldFogaXMgdXNlZCBhc1xuICAgKiAgIHRoZSBlbGV2YXRpb24gcGxhbmUgdG8gdW5wcm9qZWN0IG9udG9cbiAgICogQHJldHVybiB7QXJyYXl9IC0gW2xuZywgbGF0LCBaXSBvciBbWCwgWSwgWl1cbiAgICovXG4gIHVucHJvamVjdCh4eXosIHt0b3BMZWZ0ID0gdHJ1ZSwgdGFyZ2V0Wn0gPSB7fSkge1xuICAgIGNvbnN0IFt4LCB5LCB6XSA9IHh5ejtcblxuICAgIGNvbnN0IHkyID0gdG9wTGVmdCA/IHkgOiB0aGlzLmhlaWdodCAtIHk7XG4gICAgY29uc3QgY29vcmQgPSBwaXhlbHNUb1dvcmxkKFt4LCB5Miwgel0sIHRoaXMucGl4ZWxVbnByb2plY3Rpb25NYXRyaXgsIHRhcmdldFopO1xuICAgIGNvbnN0IFtYLCBZXSA9IHRoaXMudW5wcm9qZWN0RmxhdChjb29yZCk7XG5cbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHopKSB7XG4gICAgICAvLyBIYXMgZGVwdGggY29tcG9uZW50XG4gICAgICByZXR1cm4gW1gsIFksIGNvb3JkWzJdXTtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHRhcmdldFopID8gW1gsIFksIHRhcmdldFpdIDogW1gsIFldO1xuICB9XG5cbiAgLy8gTk9OX0xJTkVBUiBQUk9KRUNUSU9OIEhPT0tTXG4gIC8vIFVzZWQgZm9yIHdlYiBtZXJhY3RvciBwcm9qZWN0aW9uXG5cbiAgLyoqXG4gICAqIFByb2plY3QgbWFwIGNvb3JkaW5hdGVzIHRvIHdvcmxkIGNvb3JkaW5hdGVzLlxuICAgKiBUaGlzIHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IGVhY2ggdmlld3BvcnQgdGhhdCBpbXBsZW1lbnRzIGEgc3BlY2lmaWNcbiAgICogZ2VvZ3JhcGhpYyBwcm9qZWN0aW9uLlxuICAgKiBAcGFyYW0ge0FycmF5fSB4eXogLSBtYXAgY29vcmRpbmF0ZXNcbiAgICogQHJldHVybiB7QXJyYXl9IFt4LHksel0gd29ybGQgY29vcmRpbmF0ZXMuXG4gICAqL1xuICBwcm9qZWN0RmxhdCh4eXosIHNjYWxlID0gdGhpcy5zY2FsZSkge1xuICAgIHJldHVybiB4eXo7XG4gIH1cblxuICAvKipcbiAgICogUHJvamVjdCB3b3JsZCBjb29yZGluYXRlcyB0byBtYXAgY29vcmRpbmF0ZXMuXG4gICAqIFRoaXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgZWFjaCB2aWV3cG9ydCB0aGF0IGltcGxlbWVudHMgYSBzcGVjaWZpY1xuICAgKiBnZW9ncmFwaGljIHByb2plY3Rpb24uXG4gICAqIEBwYXJhbSB7QXJyYXl9IHh5eiAtIHdvcmxkIGNvb3JkaW5hdGVzXG4gICAqIEByZXR1cm4ge0FycmF5fSBbeCx5LHpdIG1hcCBjb29yZGluYXRlcy5cbiAgICovXG4gIHVucHJvamVjdEZsYXQoeHl6LCBzY2FsZSA9IHRoaXMuc2NhbGUpIHtcbiAgICByZXR1cm4geHl6O1xuICB9XG5cbn1cbiJdfQ==
  50666. /***/ }),
  50667. /* 688 */
  50668. /***/ (function(module, exports, __webpack_require__) {
  50669. /* WEBPACK VAR INJECTION */(function(global) {/*
  50670. ** Copyright (c) 2012 The Khronos Group Inc.
  50671. **
  50672. ** Permission is hereby granted, free of charge, to any person obtaining a
  50673. ** copy of this software and/or associated documentation files (the
  50674. ** "Materials"), to deal in the Materials without restriction, including
  50675. ** without limitation the rights to use, copy, modify, merge, publish,
  50676. ** distribute, sublicense, and/or sell copies of the Materials, and to
  50677. ** permit persons to whom the Materials are furnished to do so, subject to
  50678. ** the following conditions:
  50679. **
  50680. ** The above copyright notice and this permission notice shall be included
  50681. ** in all copies or substantial portions of the Materials.
  50682. **
  50683. ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  50684. ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  50685. ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  50686. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  50687. ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  50688. ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  50689. ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
  50690. */
  50691. //Ported to node by Marcin Ignac on 2016-05-20
  50692. // Various functions for helping debug WebGL apps.
  50693. WebGLDebugUtils = function() {
  50694. var window
  50695. //polyfill window in node
  50696. if (typeof(window) == 'undefined') {
  50697. window = global;
  50698. }
  50699. /**
  50700. * Wrapped logging function.
  50701. * @param {string} msg Message to log.
  50702. */
  50703. var log = function(msg) {
  50704. if (window.console && window.console.log) {
  50705. window.console.log(msg);
  50706. }
  50707. };
  50708. /**
  50709. * Wrapped error logging function.
  50710. * @param {string} msg Message to log.
  50711. */
  50712. var error = function(msg) {
  50713. if (window.console && window.console.error) {
  50714. window.console.error(msg);
  50715. } else {
  50716. log(msg);
  50717. }
  50718. };
  50719. /**
  50720. * Which arguments are enums based on the number of arguments to the function.
  50721. * So
  50722. * 'texImage2D': {
  50723. * 9: { 0:true, 2:true, 6:true, 7:true },
  50724. * 6: { 0:true, 2:true, 3:true, 4:true },
  50725. * },
  50726. *
  50727. * means if there are 9 arguments then 6 and 7 are enums, if there are 6
  50728. * arguments 3 and 4 are enums
  50729. *
  50730. * @type {!Object.<number, !Object.<number, string>}
  50731. */
  50732. var glValidEnumContexts = {
  50733. // Generic setters and getters
  50734. 'enable': {1: { 0:true }},
  50735. 'disable': {1: { 0:true }},
  50736. 'getParameter': {1: { 0:true }},
  50737. // Rendering
  50738. 'drawArrays': {3:{ 0:true }},
  50739. 'drawElements': {4:{ 0:true, 2:true }},
  50740. // Shaders
  50741. 'createShader': {1: { 0:true }},
  50742. 'getShaderParameter': {2: { 1:true }},
  50743. 'getProgramParameter': {2: { 1:true }},
  50744. 'getShaderPrecisionFormat': {2: { 0: true, 1:true }},
  50745. // Vertex attributes
  50746. 'getVertexAttrib': {2: { 1:true }},
  50747. 'vertexAttribPointer': {6: { 2:true }},
  50748. // Textures
  50749. 'bindTexture': {2: { 0:true }},
  50750. 'activeTexture': {1: { 0:true }},
  50751. 'getTexParameter': {2: { 0:true, 1:true }},
  50752. 'texParameterf': {3: { 0:true, 1:true }},
  50753. 'texParameteri': {3: { 0:true, 1:true, 2:true }},
  50754. // texImage2D and texSubImage2D are defined below with WebGL 2 entrypoints
  50755. 'copyTexImage2D': {8: { 0:true, 2:true }},
  50756. 'copyTexSubImage2D': {8: { 0:true }},
  50757. 'generateMipmap': {1: { 0:true }},
  50758. // compressedTexImage2D and compressedTexSubImage2D are defined below with WebGL 2 entrypoints
  50759. // Buffer objects
  50760. 'bindBuffer': {2: { 0:true }},
  50761. // bufferData and bufferSubData are defined below with WebGL 2 entrypoints
  50762. 'getBufferParameter': {2: { 0:true, 1:true }},
  50763. // Renderbuffers and framebuffers
  50764. 'pixelStorei': {2: { 0:true, 1:true }},
  50765. // readPixels is defined below with WebGL 2 entrypoints
  50766. 'bindRenderbuffer': {2: { 0:true }},
  50767. 'bindFramebuffer': {2: { 0:true }},
  50768. 'checkFramebufferStatus': {1: { 0:true }},
  50769. 'framebufferRenderbuffer': {4: { 0:true, 1:true, 2:true }},
  50770. 'framebufferTexture2D': {5: { 0:true, 1:true, 2:true }},
  50771. 'getFramebufferAttachmentParameter': {3: { 0:true, 1:true, 2:true }},
  50772. 'getRenderbufferParameter': {2: { 0:true, 1:true }},
  50773. 'renderbufferStorage': {4: { 0:true, 1:true }},
  50774. // Frame buffer operations (clear, blend, depth test, stencil)
  50775. 'clear': {1: { 0: { 'enumBitwiseOr': ['COLOR_BUFFER_BIT', 'DEPTH_BUFFER_BIT', 'STENCIL_BUFFER_BIT'] }}},
  50776. 'depthFunc': {1: { 0:true }},
  50777. 'blendFunc': {2: { 0:true, 1:true }},
  50778. 'blendFuncSeparate': {4: { 0:true, 1:true, 2:true, 3:true }},
  50779. 'blendEquation': {1: { 0:true }},
  50780. 'blendEquationSeparate': {2: { 0:true, 1:true }},
  50781. 'stencilFunc': {3: { 0:true }},
  50782. 'stencilFuncSeparate': {4: { 0:true, 1:true }},
  50783. 'stencilMaskSeparate': {2: { 0:true }},
  50784. 'stencilOp': {3: { 0:true, 1:true, 2:true }},
  50785. 'stencilOpSeparate': {4: { 0:true, 1:true, 2:true, 3:true }},
  50786. // Culling
  50787. 'cullFace': {1: { 0:true }},
  50788. 'frontFace': {1: { 0:true }},
  50789. // ANGLE_instanced_arrays extension
  50790. 'drawArraysInstancedANGLE': {4: { 0:true }},
  50791. 'drawElementsInstancedANGLE': {5: { 0:true, 2:true }},
  50792. // EXT_blend_minmax extension
  50793. 'blendEquationEXT': {1: { 0:true }},
  50794. // WebGL 2 Buffer objects
  50795. 'bufferData': {
  50796. 3: { 0:true, 2:true }, // WebGL 1
  50797. 4: { 0:true, 2:true }, // WebGL 2
  50798. 5: { 0:true, 2:true } // WebGL 2
  50799. },
  50800. 'bufferSubData': {
  50801. 3: { 0:true }, // WebGL 1
  50802. 4: { 0:true }, // WebGL 2
  50803. 5: { 0:true } // WebGL 2
  50804. },
  50805. 'copyBufferSubData': {5: { 0:true, 1:true }},
  50806. 'getBufferSubData': {3: { 0:true }, 4: { 0:true }, 5: { 0:true }},
  50807. // WebGL 2 Framebuffer objects
  50808. 'blitFramebuffer': {10: { 8: { 'enumBitwiseOr': ['COLOR_BUFFER_BIT', 'DEPTH_BUFFER_BIT', 'STENCIL_BUFFER_BIT'] }, 9:true }},
  50809. 'framebufferTextureLayer': {5: { 0:true, 1:true }},
  50810. 'invalidateFramebuffer': {2: { 0:true }},
  50811. 'invalidateSubFramebuffer': {6: { 0:true }},
  50812. 'readBuffer': {1: { 0:true }},
  50813. // WebGL 2 Renderbuffer objects
  50814. 'getInternalformatParameter': {3: { 0:true, 1:true, 2:true }},
  50815. 'renderbufferStorageMultisample': {5: { 0:true, 2:true }},
  50816. // WebGL 2 Texture objects
  50817. 'texStorage2D': {5: { 0:true, 2:true }},
  50818. 'texStorage3D': {6: { 0:true, 2:true }},
  50819. 'texImage2D': {
  50820. 9: { 0:true, 2:true, 6:true, 7:true }, // WebGL 1 & 2
  50821. 6: { 0:true, 2:true, 3:true, 4:true }, // WebGL 1
  50822. 10: { 0:true, 2:true, 6:true, 7:true } // WebGL 2
  50823. },
  50824. 'texImage3D': {
  50825. 10: { 0:true, 2:true, 7:true, 8:true },
  50826. 11: { 0:true, 2:true, 7:true, 8:true }
  50827. },
  50828. 'texSubImage2D': {
  50829. 9: { 0:true, 6:true, 7:true }, // WebGL 1 & 2
  50830. 7: { 0:true, 4:true, 5:true }, // WebGL 1
  50831. 10: { 0:true, 6:true, 7:true } // WebGL 2
  50832. },
  50833. 'texSubImage3D': {
  50834. 11: { 0:true, 8:true, 9:true },
  50835. 12: { 0:true, 8:true, 9:true }
  50836. },
  50837. 'copyTexSubImage3D': {9: { 0:true }},
  50838. 'compressedTexImage2D': {
  50839. 7: { 0: true, 2:true }, // WebGL 1 & 2
  50840. 8: { 0: true, 2:true }, // WebGL 2
  50841. 9: { 0: true, 2:true } // WebGL 2
  50842. },
  50843. 'compressedTexImage3D': {
  50844. 8: { 0: true, 2:true },
  50845. 9: { 0: true, 2:true },
  50846. 10: { 0: true, 2:true }
  50847. },
  50848. 'compressedTexSubImage2D': {
  50849. 8: { 0: true, 6:true }, // WebGL 1 & 2
  50850. 9: { 0: true, 6:true }, // WebGL 2
  50851. 10: { 0: true, 6:true } // WebGL 2
  50852. },
  50853. 'compressedTexSubImage3D': {
  50854. 10: { 0: true, 8:true },
  50855. 11: { 0: true, 8:true },
  50856. 12: { 0: true, 8:true }
  50857. },
  50858. // WebGL 2 Vertex attribs
  50859. 'vertexAttribIPointer': {5: { 2:true }},
  50860. // WebGL 2 Writing to the drawing buffer
  50861. 'drawArraysInstanced': {4: { 0:true }},
  50862. 'drawElementsInstanced': {5: { 0:true, 2:true }},
  50863. 'drawRangeElements': {6: { 0:true, 4:true }},
  50864. // WebGL 2 Reading back pixels
  50865. 'readPixels': {
  50866. 7: { 4:true, 5:true }, // WebGL 1 & 2
  50867. 8: { 4:true, 5:true } // WebGL 2
  50868. },
  50869. // WebGL 2 Multiple Render Targets
  50870. 'clearBufferfv': {3: { 0:true }, 4: { 0:true }},
  50871. 'clearBufferiv': {3: { 0:true }, 4: { 0:true }},
  50872. 'clearBufferuiv': {3: { 0:true }, 4: { 0:true }},
  50873. 'clearBufferfi': {4: { 0:true }},
  50874. // WebGL 2 Query objects
  50875. 'beginQuery': {2: { 0:true }},
  50876. 'endQuery': {1: { 0:true }},
  50877. 'getQuery': {2: { 0:true, 1:true }},
  50878. 'getQueryParameter': {2: { 1:true }},
  50879. // WebGL 2 Sampler objects
  50880. 'samplerParameteri': {3: { 1:true, 2:true }},
  50881. 'samplerParameterf': {3: { 1:true }},
  50882. 'getSamplerParameter': {2: { 1:true }},
  50883. // WebGL 2 Sync objects
  50884. 'fenceSync': {2: { 0:true, 1: { 'enumBitwiseOr': [] } }},
  50885. 'clientWaitSync': {3: { 1: { 'enumBitwiseOr': ['SYNC_FLUSH_COMMANDS_BIT'] } }},
  50886. 'waitSync': {3: { 1: { 'enumBitwiseOr': [] } }},
  50887. 'getSyncParameter': {2: { 1:true }},
  50888. // WebGL 2 Transform Feedback
  50889. 'bindTransformFeedback': {2: { 0:true }},
  50890. 'beginTransformFeedback': {1: { 0:true }},
  50891. 'transformFeedbackVaryings': {3: { 2:true }},
  50892. // WebGL2 Uniform Buffer Objects and Transform Feedback Buffers
  50893. 'bindBufferBase': {3: { 0:true }},
  50894. 'bindBufferRange': {5: { 0:true }},
  50895. 'getIndexedParameter': {2: { 0:true }},
  50896. 'getActiveUniforms': {3: { 2:true }},
  50897. 'getActiveUniformBlockParameter': {3: { 2:true }}
  50898. };
  50899. /**
  50900. * Map of numbers to names.
  50901. * @type {Object}
  50902. */
  50903. var glEnums = null;
  50904. /**
  50905. * Map of names to numbers.
  50906. * @type {Object}
  50907. */
  50908. var enumStringToValue = null;
  50909. /**
  50910. * Initializes this module. Safe to call more than once.
  50911. * @param {!WebGLRenderingContext} ctx A WebGL context. If
  50912. * you have more than one context it doesn't matter which one
  50913. * you pass in, it is only used to pull out constants.
  50914. */
  50915. function init(ctx) {
  50916. if (glEnums == null) {
  50917. glEnums = { };
  50918. enumStringToValue = { };
  50919. for (var propertyName in ctx) {
  50920. if (typeof ctx[propertyName] == 'number') {
  50921. glEnums[ctx[propertyName]] = propertyName;
  50922. enumStringToValue[propertyName] = ctx[propertyName];
  50923. }
  50924. }
  50925. }
  50926. }
  50927. /**
  50928. * Checks the utils have been initialized.
  50929. */
  50930. function checkInit() {
  50931. if (glEnums == null) {
  50932. throw 'WebGLDebugUtils.init(ctx) not called';
  50933. }
  50934. }
  50935. /**
  50936. * Returns true or false if value matches any WebGL enum
  50937. * @param {*} value Value to check if it might be an enum.
  50938. * @return {boolean} True if value matches one of the WebGL defined enums
  50939. */
  50940. function mightBeEnum(value) {
  50941. checkInit();
  50942. return (glEnums[value] !== undefined);
  50943. }
  50944. /**
  50945. * Gets an string version of an WebGL enum.
  50946. *
  50947. * Example:
  50948. * var str = WebGLDebugUtil.glEnumToString(ctx.getError());
  50949. *
  50950. * @param {number} value Value to return an enum for
  50951. * @return {string} The string version of the enum.
  50952. */
  50953. function glEnumToString(value) {
  50954. checkInit();
  50955. var name = glEnums[value];
  50956. return (name !== undefined) ? ("gl." + name) :
  50957. ("/*UNKNOWN WebGL ENUM*/ 0x" + value.toString(16) + "");
  50958. }
  50959. /**
  50960. * Returns the string version of a WebGL argument.
  50961. * Attempts to convert enum arguments to strings.
  50962. * @param {string} functionName the name of the WebGL function.
  50963. * @param {number} numArgs the number of arguments passed to the function.
  50964. * @param {number} argumentIndx the index of the argument.
  50965. * @param {*} value The value of the argument.
  50966. * @return {string} The value as a string.
  50967. */
  50968. function glFunctionArgToString(functionName, numArgs, argumentIndex, value) {
  50969. var funcInfo = glValidEnumContexts[functionName];
  50970. if (funcInfo !== undefined) {
  50971. var funcInfo = funcInfo[numArgs];
  50972. if (funcInfo !== undefined) {
  50973. if (funcInfo[argumentIndex]) {
  50974. if (typeof funcInfo[argumentIndex] === 'object' &&
  50975. funcInfo[argumentIndex]['enumBitwiseOr'] !== undefined) {
  50976. var enums = funcInfo[argumentIndex]['enumBitwiseOr'];
  50977. var orResult = 0;
  50978. var orEnums = [];
  50979. for (var i = 0; i < enums.length; ++i) {
  50980. var enumValue = enumStringToValue[enums[i]];
  50981. if ((value & enumValue) !== 0) {
  50982. orResult |= enumValue;
  50983. orEnums.push(glEnumToString(enumValue));
  50984. }
  50985. }
  50986. if (orResult === value) {
  50987. return orEnums.join(' | ');
  50988. } else {
  50989. return glEnumToString(value);
  50990. }
  50991. } else {
  50992. return glEnumToString(value);
  50993. }
  50994. }
  50995. }
  50996. }
  50997. if (value === null) {
  50998. return "null";
  50999. } else if (value === undefined) {
  51000. return "undefined";
  51001. } else {
  51002. return value.toString();
  51003. }
  51004. }
  51005. /**
  51006. * Converts the arguments of a WebGL function to a string.
  51007. * Attempts to convert enum arguments to strings.
  51008. *
  51009. * @param {string} functionName the name of the WebGL function.
  51010. * @param {number} args The arguments.
  51011. * @return {string} The arguments as a string.
  51012. */
  51013. function glFunctionArgsToString(functionName, args) {
  51014. // apparently we can't do args.join(",");
  51015. var argStr = "";
  51016. var numArgs = args.length;
  51017. for (var ii = 0; ii < numArgs; ++ii) {
  51018. argStr += ((ii == 0) ? '' : ', ') +
  51019. glFunctionArgToString(functionName, numArgs, ii, args[ii]);
  51020. }
  51021. return argStr;
  51022. };
  51023. function makePropertyWrapper(wrapper, original, propertyName) {
  51024. //log("wrap prop: " + propertyName);
  51025. wrapper.__defineGetter__(propertyName, function() {
  51026. return original[propertyName];
  51027. });
  51028. // TODO(gmane): this needs to handle properties that take more than
  51029. // one value?
  51030. wrapper.__defineSetter__(propertyName, function(value) {
  51031. //log("set: " + propertyName);
  51032. original[propertyName] = value;
  51033. });
  51034. }
  51035. // Makes a function that calls a function on another object.
  51036. function makeFunctionWrapper(original, functionName) {
  51037. //log("wrap fn: " + functionName);
  51038. var f = original[functionName];
  51039. return function() {
  51040. //log("call: " + functionName);
  51041. var result = f.apply(original, arguments);
  51042. return result;
  51043. };
  51044. }
  51045. /**
  51046. * Given a WebGL context returns a wrapped context that calls
  51047. * gl.getError after every command and calls a function if the
  51048. * result is not gl.NO_ERROR.
  51049. *
  51050. * @param {!WebGLRenderingContext} ctx The webgl context to
  51051. * wrap.
  51052. * @param {!function(err, funcName, args): void} opt_onErrorFunc
  51053. * The function to call when gl.getError returns an
  51054. * error. If not specified the default function calls
  51055. * console.log with a message.
  51056. * @param {!function(funcName, args): void} opt_onFunc The
  51057. * function to call when each webgl function is called.
  51058. * You can use this to log all calls for example.
  51059. * @param {!WebGLRenderingContext} opt_err_ctx The webgl context
  51060. * to call getError on if different than ctx.
  51061. */
  51062. function makeDebugContext(ctx, opt_onErrorFunc, opt_onFunc, opt_err_ctx) {
  51063. opt_err_ctx = opt_err_ctx || ctx;
  51064. init(ctx);
  51065. opt_onErrorFunc = opt_onErrorFunc || function(err, functionName, args) {
  51066. // apparently we can't do args.join(",");
  51067. var argStr = "";
  51068. var numArgs = args.length;
  51069. for (var ii = 0; ii < numArgs; ++ii) {
  51070. argStr += ((ii == 0) ? '' : ', ') +
  51071. glFunctionArgToString(functionName, numArgs, ii, args[ii]);
  51072. }
  51073. error("WebGL error "+ glEnumToString(err) + " in "+ functionName +
  51074. "(" + argStr + ")");
  51075. };
  51076. // Holds booleans for each GL error so after we get the error ourselves
  51077. // we can still return it to the client app.
  51078. var glErrorShadow = { };
  51079. // Makes a function that calls a WebGL function and then calls getError.
  51080. function makeErrorWrapper(ctx, functionName) {
  51081. return function() {
  51082. if (opt_onFunc) {
  51083. opt_onFunc(functionName, arguments);
  51084. }
  51085. var result = ctx[functionName].apply(ctx, arguments);
  51086. var err = opt_err_ctx.getError();
  51087. if (err != 0) {
  51088. glErrorShadow[err] = true;
  51089. opt_onErrorFunc(err, functionName, arguments);
  51090. }
  51091. return result;
  51092. };
  51093. }
  51094. // Make a an object that has a copy of every property of the WebGL context
  51095. // but wraps all functions.
  51096. var wrapper = {};
  51097. for (var propertyName in ctx) {
  51098. if (typeof ctx[propertyName] == 'function') {
  51099. if (propertyName != 'getExtension') {
  51100. wrapper[propertyName] = makeErrorWrapper(ctx, propertyName);
  51101. } else {
  51102. var wrapped = makeErrorWrapper(ctx, propertyName);
  51103. wrapper[propertyName] = function () {
  51104. var result = wrapped.apply(ctx, arguments);
  51105. if (!result) {
  51106. return null;
  51107. }
  51108. return makeDebugContext(result, opt_onErrorFunc, opt_onFunc, opt_err_ctx);
  51109. };
  51110. }
  51111. } else {
  51112. makePropertyWrapper(wrapper, ctx, propertyName);
  51113. }
  51114. }
  51115. // Override the getError function with one that returns our saved results.
  51116. wrapper.getError = function() {
  51117. for (var err in glErrorShadow) {
  51118. if (glErrorShadow.hasOwnProperty(err)) {
  51119. if (glErrorShadow[err]) {
  51120. glErrorShadow[err] = false;
  51121. return err;
  51122. }
  51123. }
  51124. }
  51125. return ctx.NO_ERROR;
  51126. };
  51127. return wrapper;
  51128. }
  51129. function resetToInitialState(ctx) {
  51130. var isWebGL2RenderingContext = !!ctx.createTransformFeedback;
  51131. if (isWebGL2RenderingContext) {
  51132. ctx.bindVertexArray(null);
  51133. }
  51134. var numAttribs = ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS);
  51135. var tmp = ctx.createBuffer();
  51136. ctx.bindBuffer(ctx.ARRAY_BUFFER, tmp);
  51137. for (var ii = 0; ii < numAttribs; ++ii) {
  51138. ctx.disableVertexAttribArray(ii);
  51139. ctx.vertexAttribPointer(ii, 4, ctx.FLOAT, false, 0, 0);
  51140. ctx.vertexAttrib1f(ii, 0);
  51141. if (isWebGL2RenderingContext) {
  51142. ctx.vertexAttribDivisor(ii, 0);
  51143. }
  51144. }
  51145. ctx.deleteBuffer(tmp);
  51146. var numTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);
  51147. for (var ii = 0; ii < numTextureUnits; ++ii) {
  51148. ctx.activeTexture(ctx.TEXTURE0 + ii);
  51149. ctx.bindTexture(ctx.TEXTURE_CUBE_MAP, null);
  51150. ctx.bindTexture(ctx.TEXTURE_2D, null);
  51151. if (isWebGL2RenderingContext) {
  51152. ctx.bindTexture(ctx.TEXTURE_2D_ARRAY, null);
  51153. ctx.bindTexture(ctx.TEXTURE_3D, null);
  51154. ctx.bindSampler(ii, null);
  51155. }
  51156. }
  51157. ctx.activeTexture(ctx.TEXTURE0);
  51158. ctx.useProgram(null);
  51159. ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
  51160. ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
  51161. ctx.bindFramebuffer(ctx.FRAMEBUFFER, null);
  51162. ctx.bindRenderbuffer(ctx.RENDERBUFFER, null);
  51163. ctx.disable(ctx.BLEND);
  51164. ctx.disable(ctx.CULL_FACE);
  51165. ctx.disable(ctx.DEPTH_TEST);
  51166. ctx.disable(ctx.DITHER);
  51167. ctx.disable(ctx.SCISSOR_TEST);
  51168. ctx.blendColor(0, 0, 0, 0);
  51169. ctx.blendEquation(ctx.FUNC_ADD);
  51170. ctx.blendFunc(ctx.ONE, ctx.ZERO);
  51171. ctx.clearColor(0, 0, 0, 0);
  51172. ctx.clearDepth(1);
  51173. ctx.clearStencil(-1);
  51174. ctx.colorMask(true, true, true, true);
  51175. ctx.cullFace(ctx.BACK);
  51176. ctx.depthFunc(ctx.LESS);
  51177. ctx.depthMask(true);
  51178. ctx.depthRange(0, 1);
  51179. ctx.frontFace(ctx.CCW);
  51180. ctx.hint(ctx.GENERATE_MIPMAP_HINT, ctx.DONT_CARE);
  51181. ctx.lineWidth(1);
  51182. ctx.pixelStorei(ctx.PACK_ALIGNMENT, 4);
  51183. ctx.pixelStorei(ctx.UNPACK_ALIGNMENT, 4);
  51184. ctx.pixelStorei(ctx.UNPACK_FLIP_Y_WEBGL, false);
  51185. ctx.pixelStorei(ctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
  51186. // TODO: Delete this IF.
  51187. if (ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL) {
  51188. ctx.pixelStorei(ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL, ctx.BROWSER_DEFAULT_WEBGL);
  51189. }
  51190. ctx.polygonOffset(0, 0);
  51191. ctx.sampleCoverage(1, false);
  51192. ctx.scissor(0, 0, ctx.canvas.width, ctx.canvas.height);
  51193. ctx.stencilFunc(ctx.ALWAYS, 0, 0xFFFFFFFF);
  51194. ctx.stencilMask(0xFFFFFFFF);
  51195. ctx.stencilOp(ctx.KEEP, ctx.KEEP, ctx.KEEP);
  51196. ctx.viewport(0, 0, ctx.canvas.width, ctx.canvas.height);
  51197. ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT | ctx.STENCIL_BUFFER_BIT);
  51198. if (isWebGL2RenderingContext) {
  51199. ctx.drawBuffers([ctx.BACK]);
  51200. ctx.readBuffer(ctx.BACK);
  51201. ctx.bindBuffer(ctx.COPY_READ_BUFFER, null);
  51202. ctx.bindBuffer(ctx.COPY_WRITE_BUFFER, null);
  51203. ctx.bindBuffer(ctx.PIXEL_PACK_BUFFER, null);
  51204. ctx.bindBuffer(ctx.PIXEL_UNPACK_BUFFER, null);
  51205. var numTransformFeedbacks = ctx.getParameter(ctx.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS);
  51206. for (var ii = 0; ii < numTransformFeedbacks; ++ii) {
  51207. ctx.bindBufferBase(ctx.TRANSFORM_FEEDBACK_BUFFER, ii, null);
  51208. }
  51209. var numUBOs = ctx.getParameter(ctx.MAX_UNIFORM_BUFFER_BINDINGS);
  51210. for (var ii = 0; ii < numUBOs; ++ii) {
  51211. ctx.bindBufferBase(ctx.UNIFORM_BUFFER, ii, null);
  51212. }
  51213. ctx.disable(ctx.RASTERIZER_DISCARD);
  51214. ctx.pixelStorei(ctx.UNPACK_IMAGE_HEIGHT, 0);
  51215. ctx.pixelStorei(ctx.UNPACK_SKIP_IMAGES, 0);
  51216. ctx.pixelStorei(ctx.UNPACK_ROW_LENGTH, 0);
  51217. ctx.pixelStorei(ctx.UNPACK_SKIP_ROWS, 0);
  51218. ctx.pixelStorei(ctx.UNPACK_SKIP_PIXELS, 0);
  51219. ctx.pixelStorei(ctx.PACK_ROW_LENGTH, 0);
  51220. ctx.pixelStorei(ctx.PACK_SKIP_ROWS, 0);
  51221. ctx.pixelStorei(ctx.PACK_SKIP_PIXELS, 0);
  51222. ctx.hint(ctx.FRAGMENT_SHADER_DERIVATIVE_HINT, ctx.DONT_CARE);
  51223. }
  51224. // TODO: This should NOT be needed but Firefox fails with 'hint'
  51225. while(ctx.getError());
  51226. }
  51227. function makeLostContextSimulatingCanvas(canvas) {
  51228. var unwrappedContext_;
  51229. var wrappedContext_;
  51230. var onLost_ = [];
  51231. var onRestored_ = [];
  51232. var wrappedContext_ = {};
  51233. var contextId_ = 1;
  51234. var contextLost_ = false;
  51235. var resourceId_ = 0;
  51236. var resourceDb_ = [];
  51237. var numCallsToLoseContext_ = 0;
  51238. var numCalls_ = 0;
  51239. var canRestore_ = false;
  51240. var restoreTimeout_ = 0;
  51241. var isWebGL2RenderingContext;
  51242. // Holds booleans for each GL error so can simulate errors.
  51243. var glErrorShadow_ = { };
  51244. canvas.getContext = function(f) {
  51245. return function() {
  51246. var ctx = f.apply(canvas, arguments);
  51247. // Did we get a context and is it a WebGL context?
  51248. if ((ctx instanceof WebGLRenderingContext) || (window.WebGL2RenderingContext && (ctx instanceof WebGL2RenderingContext))) {
  51249. if (ctx != unwrappedContext_) {
  51250. if (unwrappedContext_) {
  51251. throw "got different context"
  51252. }
  51253. isWebGL2RenderingContext = window.WebGL2RenderingContext && (ctx instanceof WebGL2RenderingContext);
  51254. unwrappedContext_ = ctx;
  51255. wrappedContext_ = makeLostContextSimulatingContext(unwrappedContext_);
  51256. }
  51257. return wrappedContext_;
  51258. }
  51259. return ctx;
  51260. }
  51261. }(canvas.getContext);
  51262. function wrapEvent(listener) {
  51263. if (typeof(listener) == "function") {
  51264. return listener;
  51265. } else {
  51266. return function(info) {
  51267. listener.handleEvent(info);
  51268. }
  51269. }
  51270. }
  51271. var addOnContextLostListener = function(listener) {
  51272. onLost_.push(wrapEvent(listener));
  51273. };
  51274. var addOnContextRestoredListener = function(listener) {
  51275. onRestored_.push(wrapEvent(listener));
  51276. };
  51277. function wrapAddEventListener(canvas) {
  51278. var f = canvas.addEventListener;
  51279. canvas.addEventListener = function(type, listener, bubble) {
  51280. switch (type) {
  51281. case 'webglcontextlost':
  51282. addOnContextLostListener(listener);
  51283. break;
  51284. case 'webglcontextrestored':
  51285. addOnContextRestoredListener(listener);
  51286. break;
  51287. default:
  51288. f.apply(canvas, arguments);
  51289. }
  51290. };
  51291. }
  51292. wrapAddEventListener(canvas);
  51293. canvas.loseContext = function() {
  51294. if (!contextLost_) {
  51295. contextLost_ = true;
  51296. numCallsToLoseContext_ = 0;
  51297. ++contextId_;
  51298. while (unwrappedContext_.getError());
  51299. clearErrors();
  51300. glErrorShadow_[unwrappedContext_.CONTEXT_LOST_WEBGL] = true;
  51301. var event = makeWebGLContextEvent("context lost");
  51302. var callbacks = onLost_.slice();
  51303. setTimeout(function() {
  51304. //log("numCallbacks:" + callbacks.length);
  51305. for (var ii = 0; ii < callbacks.length; ++ii) {
  51306. //log("calling callback:" + ii);
  51307. callbacks[ii](event);
  51308. }
  51309. if (restoreTimeout_ >= 0) {
  51310. setTimeout(function() {
  51311. canvas.restoreContext();
  51312. }, restoreTimeout_);
  51313. }
  51314. }, 0);
  51315. }
  51316. };
  51317. canvas.restoreContext = function() {
  51318. if (contextLost_) {
  51319. if (onRestored_.length) {
  51320. setTimeout(function() {
  51321. if (!canRestore_) {
  51322. throw "can not restore. webglcontestlost listener did not call event.preventDefault";
  51323. }
  51324. freeResources();
  51325. resetToInitialState(unwrappedContext_);
  51326. contextLost_ = false;
  51327. numCalls_ = 0;
  51328. canRestore_ = false;
  51329. var callbacks = onRestored_.slice();
  51330. var event = makeWebGLContextEvent("context restored");
  51331. for (var ii = 0; ii < callbacks.length; ++ii) {
  51332. callbacks[ii](event);
  51333. }
  51334. }, 0);
  51335. }
  51336. }
  51337. };
  51338. canvas.loseContextInNCalls = function(numCalls) {
  51339. if (contextLost_) {
  51340. throw "You can not ask a lost contet to be lost";
  51341. }
  51342. numCallsToLoseContext_ = numCalls_ + numCalls;
  51343. };
  51344. canvas.getNumCalls = function() {
  51345. return numCalls_;
  51346. };
  51347. canvas.setRestoreTimeout = function(timeout) {
  51348. restoreTimeout_ = timeout;
  51349. };
  51350. function isWebGLObject(obj) {
  51351. //return false;
  51352. return (obj instanceof WebGLBuffer ||
  51353. obj instanceof WebGLFramebuffer ||
  51354. obj instanceof WebGLProgram ||
  51355. obj instanceof WebGLRenderbuffer ||
  51356. obj instanceof WebGLShader ||
  51357. obj instanceof WebGLTexture);
  51358. }
  51359. function checkResources(args) {
  51360. for (var ii = 0; ii < args.length; ++ii) {
  51361. var arg = args[ii];
  51362. if (isWebGLObject(arg)) {
  51363. return arg.__webglDebugContextLostId__ == contextId_;
  51364. }
  51365. }
  51366. return true;
  51367. }
  51368. function clearErrors() {
  51369. var k = Object.keys(glErrorShadow_);
  51370. for (var ii = 0; ii < k.length; ++ii) {
  51371. delete glErrorShadow_[k[ii]];
  51372. }
  51373. }
  51374. function loseContextIfTime() {
  51375. ++numCalls_;
  51376. if (!contextLost_) {
  51377. if (numCallsToLoseContext_ == numCalls_) {
  51378. canvas.loseContext();
  51379. }
  51380. }
  51381. }
  51382. // Makes a function that simulates WebGL when out of context.
  51383. function makeLostContextFunctionWrapper(ctx, functionName) {
  51384. var f = ctx[functionName];
  51385. return function() {
  51386. // log("calling:" + functionName);
  51387. // Only call the functions if the context is not lost.
  51388. loseContextIfTime();
  51389. if (!contextLost_) {
  51390. //if (!checkResources(arguments)) {
  51391. // glErrorShadow_[wrappedContext_.INVALID_OPERATION] = true;
  51392. // return;
  51393. //}
  51394. var result = f.apply(ctx, arguments);
  51395. return result;
  51396. }
  51397. };
  51398. }
  51399. function freeResources() {
  51400. for (var ii = 0; ii < resourceDb_.length; ++ii) {
  51401. var resource = resourceDb_[ii];
  51402. if (resource instanceof WebGLBuffer) {
  51403. unwrappedContext_.deleteBuffer(resource);
  51404. } else if (resource instanceof WebGLFramebuffer) {
  51405. unwrappedContext_.deleteFramebuffer(resource);
  51406. } else if (resource instanceof WebGLProgram) {
  51407. unwrappedContext_.deleteProgram(resource);
  51408. } else if (resource instanceof WebGLRenderbuffer) {
  51409. unwrappedContext_.deleteRenderbuffer(resource);
  51410. } else if (resource instanceof WebGLShader) {
  51411. unwrappedContext_.deleteShader(resource);
  51412. } else if (resource instanceof WebGLTexture) {
  51413. unwrappedContext_.deleteTexture(resource);
  51414. }
  51415. else if (isWebGL2RenderingContext) {
  51416. if (resource instanceof WebGLQuery) {
  51417. unwrappedContext_.deleteQuery(resource);
  51418. } else if (resource instanceof WebGLSampler) {
  51419. unwrappedContext_.deleteSampler(resource);
  51420. } else if (resource instanceof WebGLSync) {
  51421. unwrappedContext_.deleteSync(resource);
  51422. } else if (resource instanceof WebGLTransformFeedback) {
  51423. unwrappedContext_.deleteTransformFeedback(resource);
  51424. } else if (resource instanceof WebGLVertexArrayObject) {
  51425. unwrappedContext_.deleteVertexArray(resource);
  51426. }
  51427. }
  51428. }
  51429. }
  51430. function makeWebGLContextEvent(statusMessage) {
  51431. return {
  51432. statusMessage: statusMessage,
  51433. preventDefault: function() {
  51434. canRestore_ = true;
  51435. }
  51436. };
  51437. }
  51438. return canvas;
  51439. function makeLostContextSimulatingContext(ctx) {
  51440. // copy all functions and properties to wrapper
  51441. for (var propertyName in ctx) {
  51442. if (typeof ctx[propertyName] == 'function') {
  51443. wrappedContext_[propertyName] = makeLostContextFunctionWrapper(
  51444. ctx, propertyName);
  51445. } else {
  51446. makePropertyWrapper(wrappedContext_, ctx, propertyName);
  51447. }
  51448. }
  51449. // Wrap a few functions specially.
  51450. wrappedContext_.getError = function() {
  51451. loseContextIfTime();
  51452. if (!contextLost_) {
  51453. var err;
  51454. while (err = unwrappedContext_.getError()) {
  51455. glErrorShadow_[err] = true;
  51456. }
  51457. }
  51458. for (var err in glErrorShadow_) {
  51459. if (glErrorShadow_[err]) {
  51460. delete glErrorShadow_[err];
  51461. return err;
  51462. }
  51463. }
  51464. return wrappedContext_.NO_ERROR;
  51465. };
  51466. var creationFunctions = [
  51467. "createBuffer",
  51468. "createFramebuffer",
  51469. "createProgram",
  51470. "createRenderbuffer",
  51471. "createShader",
  51472. "createTexture"
  51473. ];
  51474. if (isWebGL2RenderingContext) {
  51475. creationFunctions.push(
  51476. "createQuery",
  51477. "createSampler",
  51478. "fenceSync",
  51479. "createTransformFeedback",
  51480. "createVertexArray"
  51481. );
  51482. }
  51483. for (var ii = 0; ii < creationFunctions.length; ++ii) {
  51484. var functionName = creationFunctions[ii];
  51485. wrappedContext_[functionName] = function(f) {
  51486. return function() {
  51487. loseContextIfTime();
  51488. if (contextLost_) {
  51489. return null;
  51490. }
  51491. var obj = f.apply(ctx, arguments);
  51492. obj.__webglDebugContextLostId__ = contextId_;
  51493. resourceDb_.push(obj);
  51494. return obj;
  51495. };
  51496. }(ctx[functionName]);
  51497. }
  51498. var functionsThatShouldReturnNull = [
  51499. "getActiveAttrib",
  51500. "getActiveUniform",
  51501. "getBufferParameter",
  51502. "getContextAttributes",
  51503. "getAttachedShaders",
  51504. "getFramebufferAttachmentParameter",
  51505. "getParameter",
  51506. "getProgramParameter",
  51507. "getProgramInfoLog",
  51508. "getRenderbufferParameter",
  51509. "getShaderParameter",
  51510. "getShaderInfoLog",
  51511. "getShaderSource",
  51512. "getTexParameter",
  51513. "getUniform",
  51514. "getUniformLocation",
  51515. "getVertexAttrib"
  51516. ];
  51517. if (isWebGL2RenderingContext) {
  51518. functionsThatShouldReturnNull.push(
  51519. "getInternalformatParameter",
  51520. "getQuery",
  51521. "getQueryParameter",
  51522. "getSamplerParameter",
  51523. "getSyncParameter",
  51524. "getTransformFeedbackVarying",
  51525. "getIndexedParameter",
  51526. "getUniformIndices",
  51527. "getActiveUniforms",
  51528. "getActiveUniformBlockParameter",
  51529. "getActiveUniformBlockName"
  51530. );
  51531. }
  51532. for (var ii = 0; ii < functionsThatShouldReturnNull.length; ++ii) {
  51533. var functionName = functionsThatShouldReturnNull[ii];
  51534. wrappedContext_[functionName] = function(f) {
  51535. return function() {
  51536. loseContextIfTime();
  51537. if (contextLost_) {
  51538. return null;
  51539. }
  51540. return f.apply(ctx, arguments);
  51541. }
  51542. }(wrappedContext_[functionName]);
  51543. }
  51544. var isFunctions = [
  51545. "isBuffer",
  51546. "isEnabled",
  51547. "isFramebuffer",
  51548. "isProgram",
  51549. "isRenderbuffer",
  51550. "isShader",
  51551. "isTexture"
  51552. ];
  51553. if (isWebGL2RenderingContext) {
  51554. isFunctions.push(
  51555. "isQuery",
  51556. "isSampler",
  51557. "isSync",
  51558. "isTransformFeedback",
  51559. "isVertexArray"
  51560. );
  51561. }
  51562. for (var ii = 0; ii < isFunctions.length; ++ii) {
  51563. var functionName = isFunctions[ii];
  51564. wrappedContext_[functionName] = function(f) {
  51565. return function() {
  51566. loseContextIfTime();
  51567. if (contextLost_) {
  51568. return false;
  51569. }
  51570. return f.apply(ctx, arguments);
  51571. }
  51572. }(wrappedContext_[functionName]);
  51573. }
  51574. wrappedContext_.checkFramebufferStatus = function(f) {
  51575. return function() {
  51576. loseContextIfTime();
  51577. if (contextLost_) {
  51578. return wrappedContext_.FRAMEBUFFER_UNSUPPORTED;
  51579. }
  51580. return f.apply(ctx, arguments);
  51581. };
  51582. }(wrappedContext_.checkFramebufferStatus);
  51583. wrappedContext_.getAttribLocation = function(f) {
  51584. return function() {
  51585. loseContextIfTime();
  51586. if (contextLost_) {
  51587. return -1;
  51588. }
  51589. return f.apply(ctx, arguments);
  51590. };
  51591. }(wrappedContext_.getAttribLocation);
  51592. wrappedContext_.getVertexAttribOffset = function(f) {
  51593. return function() {
  51594. loseContextIfTime();
  51595. if (contextLost_) {
  51596. return 0;
  51597. }
  51598. return f.apply(ctx, arguments);
  51599. };
  51600. }(wrappedContext_.getVertexAttribOffset);
  51601. wrappedContext_.isContextLost = function() {
  51602. return contextLost_;
  51603. };
  51604. if (isWebGL2RenderingContext) {
  51605. wrappedContext_.getFragDataLocation = function(f) {
  51606. return function() {
  51607. loseContextIfTime();
  51608. if (contextLost_) {
  51609. return -1;
  51610. }
  51611. return f.apply(ctx, arguments);
  51612. };
  51613. }(wrappedContext_.getFragDataLocation);
  51614. wrappedContext_.clientWaitSync = function(f) {
  51615. return function() {
  51616. loseContextIfTime();
  51617. if (contextLost_) {
  51618. return wrappedContext_.WAIT_FAILED;
  51619. }
  51620. return f.apply(ctx, arguments);
  51621. };
  51622. }(wrappedContext_.clientWaitSync);
  51623. wrappedContext_.getUniformBlockIndex = function(f) {
  51624. return function() {
  51625. loseContextIfTime();
  51626. if (contextLost_) {
  51627. return wrappedContext_.INVALID_INDEX;
  51628. }
  51629. return f.apply(ctx, arguments);
  51630. };
  51631. }(wrappedContext_.getUniformBlockIndex);
  51632. }
  51633. return wrappedContext_;
  51634. }
  51635. }
  51636. return {
  51637. /**
  51638. * Initializes this module. Safe to call more than once.
  51639. * @param {!WebGLRenderingContext} ctx A WebGL context. If
  51640. * you have more than one context it doesn't matter which one
  51641. * you pass in, it is only used to pull out constants.
  51642. */
  51643. 'init': init,
  51644. /**
  51645. * Returns true or false if value matches any WebGL enum
  51646. * @param {*} value Value to check if it might be an enum.
  51647. * @return {boolean} True if value matches one of the WebGL defined enums
  51648. */
  51649. 'mightBeEnum': mightBeEnum,
  51650. /**
  51651. * Gets an string version of an WebGL enum.
  51652. *
  51653. * Example:
  51654. * WebGLDebugUtil.init(ctx);
  51655. * var str = WebGLDebugUtil.glEnumToString(ctx.getError());
  51656. *
  51657. * @param {number} value Value to return an enum for
  51658. * @return {string} The string version of the enum.
  51659. */
  51660. 'glEnumToString': glEnumToString,
  51661. /**
  51662. * Converts the argument of a WebGL function to a string.
  51663. * Attempts to convert enum arguments to strings.
  51664. *
  51665. * Example:
  51666. * WebGLDebugUtil.init(ctx);
  51667. * var str = WebGLDebugUtil.glFunctionArgToString('bindTexture', 2, 0, gl.TEXTURE_2D);
  51668. *
  51669. * would return 'TEXTURE_2D'
  51670. *
  51671. * @param {string} functionName the name of the WebGL function.
  51672. * @param {number} numArgs The number of arguments
  51673. * @param {number} argumentIndx the index of the argument.
  51674. * @param {*} value The value of the argument.
  51675. * @return {string} The value as a string.
  51676. */
  51677. 'glFunctionArgToString': glFunctionArgToString,
  51678. /**
  51679. * Converts the arguments of a WebGL function to a string.
  51680. * Attempts to convert enum arguments to strings.
  51681. *
  51682. * @param {string} functionName the name of the WebGL function.
  51683. * @param {number} args The arguments.
  51684. * @return {string} The arguments as a string.
  51685. */
  51686. 'glFunctionArgsToString': glFunctionArgsToString,
  51687. /**
  51688. * Given a WebGL context returns a wrapped context that calls
  51689. * gl.getError after every command and calls a function if the
  51690. * result is not NO_ERROR.
  51691. *
  51692. * You can supply your own function if you want. For example, if you'd like
  51693. * an exception thrown on any GL error you could do this
  51694. *
  51695. * function throwOnGLError(err, funcName, args) {
  51696. * throw WebGLDebugUtils.glEnumToString(err) +
  51697. * " was caused by call to " + funcName;
  51698. * };
  51699. *
  51700. * ctx = WebGLDebugUtils.makeDebugContext(
  51701. * canvas.getContext("webgl"), throwOnGLError);
  51702. *
  51703. * @param {!WebGLRenderingContext} ctx The webgl context to wrap.
  51704. * @param {!function(err, funcName, args): void} opt_onErrorFunc The function
  51705. * to call when gl.getError returns an error. If not specified the default
  51706. * function calls console.log with a message.
  51707. * @param {!function(funcName, args): void} opt_onFunc The
  51708. * function to call when each webgl function is called. You
  51709. * can use this to log all calls for example.
  51710. */
  51711. 'makeDebugContext': makeDebugContext,
  51712. /**
  51713. * Given a canvas element returns a wrapped canvas element that will
  51714. * simulate lost context. The canvas returned adds the following functions.
  51715. *
  51716. * loseContext:
  51717. * simulates a lost context event.
  51718. *
  51719. * restoreContext:
  51720. * simulates the context being restored.
  51721. *
  51722. * lostContextInNCalls:
  51723. * loses the context after N gl calls.
  51724. *
  51725. * getNumCalls:
  51726. * tells you how many gl calls there have been so far.
  51727. *
  51728. * setRestoreTimeout:
  51729. * sets the number of milliseconds until the context is restored
  51730. * after it has been lost. Defaults to 0. Pass -1 to prevent
  51731. * automatic restoring.
  51732. *
  51733. * @param {!Canvas} canvas The canvas element to wrap.
  51734. */
  51735. 'makeLostContextSimulatingCanvas': makeLostContextSimulatingCanvas,
  51736. /**
  51737. * Resets a context to the initial state.
  51738. * @param {!WebGLRenderingContext} ctx The webgl context to
  51739. * reset.
  51740. */
  51741. 'resetToInitialState': resetToInitialState
  51742. };
  51743. }();
  51744. module.exports = WebGLDebugUtils;
  51745. /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(47)))
  51746. /***/ })
  51747. /******/ ]);
  51748. });