f2.js 537 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209
  1. (function webpackUniversalModuleDefinition(root, factory) {
  2. if(typeof exports === 'object' && typeof module === 'object')
  3. module.exports = factory();
  4. else if(typeof define === 'function' && define.amd)
  5. define([], factory);
  6. else if(typeof exports === 'object')
  7. exports["F2"] = factory();
  8. else
  9. root["F2"] = factory();
  10. })(this, function() {
  11. return /******/ (function(modules) { // webpackBootstrap
  12. /******/ // The module cache
  13. /******/ var installedModules = {};
  14. /******/
  15. /******/ // The require function
  16. /******/ function __webpack_require__(moduleId) {
  17. /******/
  18. /******/ // Check if module is in cache
  19. /******/ if(installedModules[moduleId]) {
  20. /******/ return installedModules[moduleId].exports;
  21. /******/ }
  22. /******/ // Create a new module (and put it into the cache)
  23. /******/ var module = installedModules[moduleId] = {
  24. /******/ i: moduleId,
  25. /******/ l: false,
  26. /******/ exports: {}
  27. /******/ };
  28. /******/
  29. /******/ // Execute the module function
  30. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  31. /******/
  32. /******/ // Flag the module as loaded
  33. /******/ module.l = true;
  34. /******/
  35. /******/ // Return the exports of the module
  36. /******/ return module.exports;
  37. /******/ }
  38. /******/
  39. /******/
  40. /******/ // expose the modules object (__webpack_modules__)
  41. /******/ __webpack_require__.m = modules;
  42. /******/
  43. /******/ // expose the module cache
  44. /******/ __webpack_require__.c = installedModules;
  45. /******/
  46. /******/ // define getter function for harmony exports
  47. /******/ __webpack_require__.d = function(exports, name, getter) {
  48. /******/ if(!__webpack_require__.o(exports, name)) {
  49. /******/ Object.defineProperty(exports, name, {
  50. /******/ configurable: false,
  51. /******/ enumerable: true,
  52. /******/ get: getter
  53. /******/ });
  54. /******/ }
  55. /******/ };
  56. /******/
  57. /******/ // getDefaultExport function for compatibility with non-harmony modules
  58. /******/ __webpack_require__.n = function(module) {
  59. /******/ var getter = module && module.__esModule ?
  60. /******/ function getDefault() { return module['default']; } :
  61. /******/ function getModuleExports() { return module; };
  62. /******/ __webpack_require__.d(getter, 'a', getter);
  63. /******/ return getter;
  64. /******/ };
  65. /******/
  66. /******/ // Object.prototype.hasOwnProperty.call
  67. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  68. /******/
  69. /******/ // __webpack_public_path__
  70. /******/ __webpack_require__.p = "";
  71. /******/
  72. /******/ // Load entry module and return exports
  73. /******/ return __webpack_require__(__webpack_require__.s = 246);
  74. /******/ })
  75. /************************************************************************/
  76. /******/ ([
  77. /* 0 */
  78. /***/ (function(module, exports, __webpack_require__) {
  79. "use strict";
  80. var _interopRequireWildcard = __webpack_require__(49);
  81. exports.__esModule = true;
  82. var _exportNames = {
  83. isObjectValueEqual: true,
  84. parsePadding: true,
  85. directionEnabled: true,
  86. upperFirst: true,
  87. lowerFirst: true,
  88. isString: true,
  89. isNumber: true,
  90. isBoolean: true,
  91. isFunction: true,
  92. isDate: true,
  93. isArray: true,
  94. isNil: true,
  95. isObject: true,
  96. isPlainObject: true,
  97. isEqual: true,
  98. deepMix: true,
  99. mix: true,
  100. each: true,
  101. uniq: true,
  102. find: true,
  103. Array: true
  104. };
  105. exports.isObjectValueEqual = isObjectValueEqual;
  106. exports.parsePadding = parsePadding;
  107. exports.directionEnabled = directionEnabled;
  108. exports.Array = void 0;
  109. var _util = __webpack_require__(20);
  110. exports.upperFirst = _util.upperFirst;
  111. exports.lowerFirst = _util.lowerFirst;
  112. exports.isString = _util.isString;
  113. exports.isNumber = _util.isNumber;
  114. exports.isBoolean = _util.isBoolean;
  115. exports.isFunction = _util.isFunction;
  116. exports.isDate = _util.isDate;
  117. exports.isArray = _util.isArray;
  118. exports.isNil = _util.isNil;
  119. exports.isObject = _util.isObject;
  120. exports.isPlainObject = _util.isPlainObject;
  121. exports.isEqual = _util.isEqual;
  122. exports.deepMix = _util.deepMix;
  123. exports.mix = _util.mix;
  124. exports.each = _util.each;
  125. exports.uniq = _util.uniq;
  126. exports.find = _util.find;
  127. var ArrayUtil = _interopRequireWildcard(__webpack_require__(75));
  128. exports.Array = ArrayUtil;
  129. var _dom = __webpack_require__(62);
  130. Object.keys(_dom).forEach(function (key) {
  131. if (key === "default" || key === "__esModule") return;
  132. if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
  133. exports[key] = _dom[key];
  134. });
  135. /**
  136. * @fileOverview Utility for F2
  137. * @author dxq613 @gmail.com
  138. * @author sima.zhang1990@gmail.com
  139. */
  140. function isObjectValueEqual(a, b) {
  141. // for vue.js
  142. a = Object.assign({}, a);
  143. b = Object.assign({}, b);
  144. var aProps = Object.getOwnPropertyNames(a);
  145. var bProps = Object.getOwnPropertyNames(b);
  146. if (aProps.length !== bProps.length) {
  147. return false;
  148. }
  149. for (var i = 0, len = aProps.length; i < len; i++) {
  150. var propName = aProps[i];
  151. if (a[propName] !== b[propName]) {
  152. return false;
  153. }
  154. }
  155. return true;
  156. }
  157. function parsePadding(padding) {
  158. var top;
  159. var right;
  160. var bottom;
  161. var left;
  162. if ((0, _util.isNumber)(padding) || (0, _util.isString)(padding)) {
  163. top = bottom = left = right = padding;
  164. } else if ((0, _util.isArray)(padding)) {
  165. top = padding[0];
  166. right = !(0, _util.isNil)(padding[1]) ? padding[1] : padding[0];
  167. bottom = !(0, _util.isNil)(padding[2]) ? padding[2] : padding[0];
  168. left = !(0, _util.isNil)(padding[3]) ? padding[3] : right;
  169. }
  170. return [top, right, bottom, left];
  171. }
  172. function directionEnabled(mode, dir) {
  173. if (mode === undefined) {
  174. return true;
  175. } else if (typeof mode === 'string') {
  176. return mode.indexOf(dir) !== -1;
  177. }
  178. return false;
  179. }
  180. /***/ }),
  181. /* 1 */
  182. /***/ (function(module, exports) {
  183. function _interopRequireDefault(obj) {
  184. return obj && obj.__esModule ? obj : {
  185. "default": obj
  186. };
  187. }
  188. module.exports = _interopRequireDefault;
  189. /***/ }),
  190. /* 2 */
  191. /***/ (function(module, exports, __webpack_require__) {
  192. var _typeof = __webpack_require__(50);
  193. var assertThisInitialized = __webpack_require__(22);
  194. function _possibleConstructorReturn(self, call) {
  195. if (call && (_typeof(call) === "object" || typeof call === "function")) {
  196. return call;
  197. }
  198. return assertThisInitialized(self);
  199. }
  200. module.exports = _possibleConstructorReturn;
  201. /***/ }),
  202. /* 3 */
  203. /***/ (function(module, exports) {
  204. function _getPrototypeOf(o) {
  205. module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
  206. return o.__proto__ || Object.getPrototypeOf(o);
  207. };
  208. return _getPrototypeOf(o);
  209. }
  210. module.exports = _getPrototypeOf;
  211. /***/ }),
  212. /* 4 */
  213. /***/ (function(module, exports) {
  214. function _inheritsLoose(subClass, superClass) {
  215. subClass.prototype = Object.create(superClass.prototype);
  216. subClass.prototype.constructor = subClass;
  217. subClass.__proto__ = superClass;
  218. }
  219. module.exports = _inheritsLoose;
  220. /***/ }),
  221. /* 5 */
  222. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  223. "use strict";
  224. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(11);
  225. /* harmony default export */ __webpack_exports__["a"] = (function (value) {
  226. return Array.isArray ? Array.isArray(value) : Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a" /* default */])(value, 'Array');
  227. });
  228. /***/ }),
  229. /* 6 */
  230. /***/ (function(module, exports, __webpack_require__) {
  231. "use strict";
  232. var Theme = __webpack_require__(78);
  233. var Util = __webpack_require__(0);
  234. var Global = {
  235. version: '3.6.3',
  236. scales: {},
  237. widthRatio: {
  238. column: 1 / 2,
  239. rose: 0.999999,
  240. multiplePie: 3 / 4
  241. },
  242. lineDash: [4, 4]
  243. };
  244. Global.setTheme = function (theme) {
  245. Util.deepMix(this, theme);
  246. };
  247. Global.setTheme(Theme);
  248. module.exports = Global;
  249. /***/ }),
  250. /* 7 */
  251. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  252. "use strict";
  253. var isArrayLike = function (value) {
  254. /**
  255. * isArrayLike([1, 2, 3]) => true
  256. * isArrayLike(document.body.children) => true
  257. * isArrayLike('abc') => true
  258. * isArrayLike(Function) => false
  259. */
  260. return value !== null && typeof value !== 'function' && isFinite(value.length);
  261. };
  262. /* harmony default export */ __webpack_exports__["a"] = (isArrayLike);
  263. /***/ }),
  264. /* 8 */
  265. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  266. "use strict";
  267. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  268. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_object__ = __webpack_require__(29);
  269. function each(elements, func) {
  270. if (!elements) {
  271. return;
  272. }
  273. var rst;
  274. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(elements)) {
  275. for (var i = 0, len = elements.length; i < len; i++) {
  276. rst = func(elements[i], i);
  277. if (rst === false) {
  278. break;
  279. }
  280. }
  281. } else if (Object(__WEBPACK_IMPORTED_MODULE_1__is_object__["a" /* default */])(elements)) {
  282. for (var k in elements) {
  283. if (elements.hasOwnProperty(k)) {
  284. rst = func(elements[k], k);
  285. if (rst === false) {
  286. break;
  287. }
  288. }
  289. }
  290. }
  291. }
  292. /* harmony default export */ __webpack_exports__["a"] = (each);
  293. /***/ }),
  294. /* 9 */
  295. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  296. "use strict";
  297. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(11);
  298. /**
  299. * 是否为函数
  300. * @param {*} fn 对象
  301. * @return {Boolean} 是否函数
  302. */
  303. /* harmony default export */ __webpack_exports__["a"] = (function (value) {
  304. return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a" /* default */])(value, 'Function');
  305. });
  306. /***/ }),
  307. /* 10 */
  308. /***/ (function(module, exports, __webpack_require__) {
  309. "use strict";
  310. var _interopRequireDefault = __webpack_require__(1);
  311. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  312. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  313. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  314. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  315. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  316. var Util = __webpack_require__(0);
  317. var Element = __webpack_require__(46);
  318. var Shape = /*#__PURE__*/function (_Element) {
  319. (0, _inheritsLoose2["default"])(Shape, _Element);
  320. var _super = _createSuper(Shape);
  321. function Shape() {
  322. return _Element.apply(this, arguments) || this;
  323. }
  324. var _proto = Shape.prototype;
  325. _proto._initProperties = function _initProperties() {
  326. this._attrs = {
  327. zIndex: 0,
  328. visible: true,
  329. destroyed: false,
  330. isShape: true,
  331. attrs: {}
  332. };
  333. };
  334. _proto.getType = function getType() {
  335. return this._attrs.type;
  336. };
  337. _proto.drawInner = function drawInner(context) {
  338. var self = this;
  339. var attrs = self.get('attrs');
  340. self.createPath(context);
  341. var originOpacity = context.globalAlpha;
  342. if (self.hasFill()) {
  343. var fillOpacity = attrs.fillOpacity;
  344. if (!Util.isNil(fillOpacity) && fillOpacity !== 1) {
  345. context.globalAlpha = fillOpacity;
  346. context.fill();
  347. context.globalAlpha = originOpacity;
  348. } else {
  349. context.fill();
  350. }
  351. }
  352. if (self.hasStroke()) {
  353. var lineWidth = attrs.lineWidth;
  354. if (lineWidth > 0) {
  355. var strokeOpacity = attrs.strokeOpacity;
  356. if (!Util.isNil(strokeOpacity) && strokeOpacity !== 1) {
  357. context.globalAlpha = strokeOpacity;
  358. }
  359. context.stroke();
  360. }
  361. }
  362. };
  363. _proto.getBBox = function getBBox() {
  364. var bbox = this._attrs.bbox;
  365. if (!bbox) {
  366. bbox = this.calculateBox();
  367. if (bbox) {
  368. bbox.x = bbox.minX;
  369. bbox.y = bbox.minY;
  370. bbox.width = bbox.maxX - bbox.minX;
  371. bbox.height = bbox.maxY - bbox.minY;
  372. }
  373. this._attrs.bbox = bbox;
  374. }
  375. return bbox;
  376. };
  377. _proto.calculateBox = function calculateBox() {
  378. return null;
  379. };
  380. _proto.createPath = function createPath() {};
  381. return Shape;
  382. }(Element);
  383. module.exports = Shape;
  384. /***/ }),
  385. /* 11 */
  386. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  387. "use strict";
  388. var toString = {}.toString;
  389. var isType = function (value, type) {
  390. return toString.call(value) === '[object ' + type + ']';
  391. };
  392. /* harmony default export */ __webpack_exports__["a"] = (isType);
  393. /***/ }),
  394. /* 12 */
  395. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  396. "use strict";
  397. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(11);
  398. /**
  399. * 判断是否数字
  400. * @return {Boolean} 是否数字
  401. */
  402. var isNumber = function (value) {
  403. return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a" /* default */])(value, 'Number');
  404. };
  405. /* harmony default export */ __webpack_exports__["a"] = (isNumber);
  406. /***/ }),
  407. /* 13 */
  408. /***/ (function(module, exports, __webpack_require__) {
  409. "use strict";
  410. /**
  411. * 2 Dimensional Vector
  412. * @module vector2
  413. */
  414. module.exports = {
  415. /**
  416. * Creates a new, empty vector2
  417. *
  418. * @return {vector2} a new 2D vector
  419. */
  420. create: function create() {
  421. return [0, 0];
  422. },
  423. /**
  424. * Calculates the length of a vector2
  425. *
  426. * @param {vector2} v vector to calculate length of
  427. * @return {Number} length of v
  428. */
  429. length: function length(v) {
  430. var x = v[0];
  431. var y = v[1];
  432. return Math.sqrt(x * x + y * y);
  433. },
  434. /**
  435. * Normalize a vector2
  436. *
  437. * @param {vector2} out the receiving vector
  438. * @param {vector2} v vector to normalize
  439. * @return {vector2} out
  440. */
  441. normalize: function normalize(out, v) {
  442. var len = this.length(v);
  443. if (len === 0) {
  444. out[0] = 0;
  445. out[1] = 0;
  446. } else {
  447. out[0] = v[0] / len;
  448. out[1] = v[1] / len;
  449. }
  450. return out;
  451. },
  452. /**
  453. * Adds two vector2's
  454. *
  455. * @param {vector2} out the receiving vector
  456. * @param {vector2} v1 the first operand
  457. * @param {vector2} v2 the second operand
  458. * @return {vector2} out
  459. */
  460. add: function add(out, v1, v2) {
  461. out[0] = v1[0] + v2[0];
  462. out[1] = v1[1] + v2[1];
  463. return out;
  464. },
  465. /**
  466. * Subtracts vector v2 from vector v1
  467. *
  468. * @param {vector2} out the receiving vector
  469. * @param {vector2} v1 the first operand
  470. * @param {vector2} v2 the second operand
  471. * @return {vector2} out
  472. */
  473. sub: function sub(out, v1, v2) {
  474. out[0] = v1[0] - v2[0];
  475. out[1] = v1[1] - v2[1];
  476. return out;
  477. },
  478. /**
  479. * Scales a vector2 by a scalar number
  480. *
  481. * @param {vector2} out the receiving vector
  482. * @param {vector2} v the vector to scale
  483. * @param {Number} s amount to scale the vector by
  484. * @return {vector2} out
  485. */
  486. scale: function scale(out, v, s) {
  487. out[0] = v[0] * s;
  488. out[1] = v[1] * s;
  489. return out;
  490. },
  491. /**
  492. * Calculates the dot product of two vector2's
  493. *
  494. * @param {vector2} v1 the first operand
  495. * @param {vector2} v2 the second operand
  496. * @return {Number} dot product of v1 and v2
  497. */
  498. dot: function dot(v1, v2) {
  499. return v1[0] * v2[0] + v1[1] * v2[1];
  500. },
  501. /**
  502. * Calculates the direction of two vector2's
  503. *
  504. * @param {vector2} v1 the first operand
  505. * @param {vector2} v2 the second operand
  506. * @return {Boolean} the direction of v1 and v2
  507. */
  508. direction: function direction(v1, v2) {
  509. return v1[0] * v2[1] - v2[0] * v1[1];
  510. },
  511. /**
  512. * Calculates the angle of two vector2's
  513. *
  514. * @param {vector2} v1 the first operand
  515. * @param {vector2} v2 the second operand
  516. * @return {Number} angle of v1 and v2
  517. */
  518. angle: function angle(v1, v2) {
  519. var theta = this.dot(v1, v2) / (this.length(v1) * this.length(v2));
  520. return Math.acos(theta);
  521. },
  522. /**
  523. * Calculates the angle of two vector2's with direction
  524. *
  525. * @param {vector2} v1 the first operand
  526. * @param {vector2} v2 the second operand
  527. * @param {Boolean} direction the direction of two vector2's
  528. * @return {Number} angle of v1 and v2
  529. */
  530. angleTo: function angleTo(v1, v2, direction) {
  531. var angle = this.angle(v1, v2);
  532. var angleLargeThanPI = this.direction(v1, v2) >= 0;
  533. if (direction) {
  534. if (angleLargeThanPI) {
  535. return Math.PI * 2 - angle;
  536. }
  537. return angle;
  538. }
  539. if (angleLargeThanPI) {
  540. return angle;
  541. }
  542. return Math.PI * 2 - angle;
  543. },
  544. /**
  545. * whether a vector2 is zero vector
  546. *
  547. * @param {vector2} v vector to calculate
  548. * @return {Boolean} is or not a zero vector
  549. */
  550. zero: function zero(v) {
  551. return v[0] === 0 && v[1] === 0;
  552. },
  553. /**
  554. * Calculates the euclidian distance between two vector2's
  555. *
  556. * @param {vector2} v1 the first operand
  557. * @param {vector2} v2 the second operand
  558. * @return {Number} distance between a and b
  559. */
  560. distance: function distance(v1, v2) {
  561. var x = v2[0] - v1[0];
  562. var y = v2[1] - v1[1];
  563. return Math.sqrt(x * x + y * y);
  564. },
  565. /**
  566. * Creates a new vector2 initialized with values from an existing vector
  567. *
  568. * @param {vector2} v vector to clone
  569. * @return {Array} a new 2D vector
  570. */
  571. clone: function clone(v) {
  572. return [v[0], v[1]];
  573. },
  574. /**
  575. * Return the minimum of two vector2's
  576. *
  577. * @param {vector2} out the receiving vector
  578. * @param {vector2} v1 the first operand
  579. * @param {vector2} v2 the second operand
  580. * @return {vector2} out
  581. */
  582. min: function min(out, v1, v2) {
  583. out[0] = Math.min(v1[0], v2[0]);
  584. out[1] = Math.min(v1[1], v2[1]);
  585. return out;
  586. },
  587. /**
  588. * Return the maximum of two vector2's
  589. *
  590. * @param {vector2} out the receiving vector
  591. * @param {vector2} v1 the first operand
  592. * @param {vector2} v2 the second operand
  593. * @return {vector2} out
  594. */
  595. max: function max(out, v1, v2) {
  596. out[0] = Math.max(v1[0], v2[0]);
  597. out[1] = Math.max(v1[1], v2[1]);
  598. return out;
  599. },
  600. /**
  601. * Transforms the vector2 with a mat2d
  602. *
  603. * @param {vector2} out the receiving vector
  604. * @param {vector2} v the vector to transform
  605. * @param {mat2d} m matrix to transform with
  606. * @return {vector2} out
  607. */
  608. transformMat2d: function transformMat2d(out, v, m) {
  609. var x = v[0];
  610. var y = v[1];
  611. out[0] = m[0] * x + m[2] * y + m[4];
  612. out[1] = m[1] * x + m[3] * y + m[5];
  613. return out;
  614. }
  615. };
  616. /***/ }),
  617. /* 14 */
  618. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  619. "use strict";
  620. // isFinite,
  621. var isNil = function (value) {
  622. /**
  623. * isNil(null) => true
  624. * isNil() => true
  625. */
  626. return value === null || value === undefined;
  627. };
  628. /* harmony default export */ __webpack_exports__["a"] = (isNil);
  629. /***/ }),
  630. /* 15 */
  631. /***/ (function(module, exports, __webpack_require__) {
  632. var isObject = __webpack_require__(44);
  633. var isArray = __webpack_require__(34);
  634. var each = function each(elements, func) {
  635. if (!elements) {
  636. return;
  637. }
  638. var rst = void 0;
  639. if (isArray(elements)) {
  640. for (var i = 0, len = elements.length; i < len; i++) {
  641. rst = func(elements[i], i);
  642. if (rst === false) {
  643. break;
  644. }
  645. }
  646. } else if (isObject(elements)) {
  647. for (var k in elements) {
  648. if (elements.hasOwnProperty(k)) {
  649. rst = func(elements[k], k);
  650. if (rst === false) {
  651. break;
  652. }
  653. }
  654. }
  655. }
  656. };
  657. module.exports = each;
  658. /***/ }),
  659. /* 16 */
  660. /***/ (function(module, exports, __webpack_require__) {
  661. "use strict";
  662. var G = {
  663. Canvas: __webpack_require__(176),
  664. Group: __webpack_require__(67),
  665. Shape: __webpack_require__(10),
  666. Matrix: __webpack_require__(31),
  667. Vector2: __webpack_require__(13)
  668. };
  669. __webpack_require__(180);
  670. __webpack_require__(181);
  671. __webpack_require__(182);
  672. __webpack_require__(183);
  673. __webpack_require__(184);
  674. __webpack_require__(185);
  675. __webpack_require__(186);
  676. __webpack_require__(187);
  677. __webpack_require__(189);
  678. module.exports = G;
  679. /***/ }),
  680. /* 17 */
  681. /***/ (function(module, exports, __webpack_require__) {
  682. "use strict";
  683. var _interopRequireWildcard = __webpack_require__(49);
  684. var _interopRequireDefault = __webpack_require__(1);
  685. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  686. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  687. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  688. var Attr = _interopRequireWildcard(__webpack_require__(161));
  689. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  690. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  691. var Util = __webpack_require__(0);
  692. var Base = __webpack_require__(63);
  693. var GROUP_ATTRS = ['color', 'size', 'shape'];
  694. var FIELD_ORIGIN = '_origin';
  695. var FIELD_ORIGIN_Y = '_originY';
  696. var Global = __webpack_require__(6);
  697. var GeometryShape = __webpack_require__(19);
  698. var Adjust = __webpack_require__(33);
  699. function parseFields(field) {
  700. if (Util.isArray(field)) {
  701. return field;
  702. }
  703. if (Util.isString(field)) {
  704. return field.split('*');
  705. }
  706. return [field];
  707. }
  708. /**
  709. * The parent class for Geometry
  710. * @class Geom
  711. */
  712. var Geom = /*#__PURE__*/function (_Base) {
  713. (0, _inheritsLoose2["default"])(Geom, _Base);
  714. var _super = _createSuper(Geom);
  715. function Geom() {
  716. return _Base.apply(this, arguments) || this;
  717. }
  718. var _proto = Geom.prototype;
  719. _proto.getDefaultCfg = function getDefaultCfg() {
  720. return {
  721. /**
  722. * geometry type
  723. * @type {String}
  724. */
  725. type: null,
  726. /**
  727. * the data of geometry
  728. * @type {Array}
  729. */
  730. data: null,
  731. /**
  732. * the attrs of geo,etry
  733. * @type {Object}
  734. */
  735. attrs: {},
  736. scales: {},
  737. /**
  738. * group for storing the shapes
  739. * @type {Canvas}
  740. */
  741. container: null,
  742. /**
  743. * style options
  744. * @type {Object}
  745. */
  746. styleOptions: null,
  747. chart: null,
  748. shapeType: '',
  749. /**
  750. * wether to generate key points for each shape
  751. * @protected
  752. * @type {Boolean}
  753. */
  754. generatePoints: false,
  755. attrOptions: {},
  756. sortable: false,
  757. startOnZero: true,
  758. visible: true,
  759. connectNulls: false,
  760. // 是否丢弃没有值的分组。
  761. ignoreEmptyGroup: false
  762. };
  763. };
  764. _proto.init = function init() {
  765. var self = this;
  766. self._initAttrs();
  767. self._processData();
  768. };
  769. _proto._getGroupScales = function _getGroupScales() {
  770. var self = this;
  771. var scales = [];
  772. Util.each(GROUP_ATTRS, function (attrName) {
  773. var attr = self.getAttr(attrName);
  774. if (attr) {
  775. var attrScales = attr.scales;
  776. Util.each(attrScales, function (scale) {
  777. if (scale && scale.isCategory && scales.indexOf(scale) === -1) {
  778. scales.push(scale);
  779. }
  780. });
  781. }
  782. });
  783. return scales;
  784. };
  785. _proto._groupData = function _groupData(data) {
  786. var self = this;
  787. var colDefs = self.get('colDefs');
  788. var groupScales = self._getGroupScales();
  789. if (groupScales.length) {
  790. var appendConditions = {};
  791. var names = [];
  792. Util.each(groupScales, function (scale) {
  793. var field = scale.field;
  794. names.push(field);
  795. if (colDefs && colDefs[field] && colDefs[field].values) {
  796. // users have defined
  797. appendConditions[scale.field] = colDefs[field].values;
  798. }
  799. });
  800. return Util.Array.group(data, names, appendConditions);
  801. }
  802. return [data];
  803. };
  804. _proto._setAttrOptions = function _setAttrOptions(attrName, attrCfg) {
  805. var options = this.get('attrOptions');
  806. options[attrName] = attrCfg;
  807. var attrs = this.get('attrs'); // 说明已经初始化过了
  808. if (Object.keys(attrs).length) {
  809. this._createAttr(attrName, attrCfg);
  810. }
  811. };
  812. _proto._createAttrOption = function _createAttrOption(attrName, field, cfg, defaultValues) {
  813. var attrCfg = {};
  814. attrCfg.field = field;
  815. if (cfg) {
  816. if (Util.isFunction(cfg)) {
  817. attrCfg.callback = cfg;
  818. } else {
  819. attrCfg.values = cfg;
  820. }
  821. } else {
  822. attrCfg.values = defaultValues;
  823. }
  824. this._setAttrOptions(attrName, attrCfg);
  825. };
  826. _proto._createAttr = function _createAttr(type, option) {
  827. var self = this;
  828. var attrs = self.get('attrs');
  829. var coord = self.get('coord');
  830. var className = Util.upperFirst(type);
  831. var fields = parseFields(option.field);
  832. if (type === 'position') {
  833. option.coord = coord;
  834. }
  835. var scales = [];
  836. for (var i = 0, len = fields.length; i < len; i++) {
  837. var field = fields[i];
  838. var scale = self._createScale(field);
  839. scales.push(scale);
  840. }
  841. if (type === 'position') {
  842. var yScale = scales[1]; // 饼图的处理,但是还不知道为啥
  843. if (coord.type === 'polar' && coord.transposed && self.hasAdjust('stack')) {
  844. if (yScale.values.length) {
  845. yScale.change({
  846. nice: false,
  847. min: 0,
  848. max: Math.max.apply(null, yScale.values)
  849. });
  850. }
  851. }
  852. }
  853. option.scales = scales;
  854. var attr = new Attr[className](option);
  855. attrs[type] = attr;
  856. return attr;
  857. };
  858. _proto._initAttrs = function _initAttrs() {
  859. var self = this;
  860. var attrOptions = self.get('attrOptions');
  861. for (var type in attrOptions) {
  862. if (attrOptions.hasOwnProperty(type)) {
  863. this._createAttr(type, attrOptions[type]);
  864. }
  865. }
  866. };
  867. _proto._createScale = function _createScale(field) {
  868. var scales = this.get('scales');
  869. var scale = scales[field];
  870. if (!scale) {
  871. scale = this.get('chart').createScale(field);
  872. scales[field] = scale;
  873. }
  874. return scale;
  875. };
  876. _proto._processData = function _processData() {
  877. var self = this;
  878. var data = this.get('data');
  879. var dataArray = [];
  880. var groupedArray = this._groupData(data);
  881. if (this.get('ignoreEmptyGroup')) {
  882. var yScale = this.getYScale();
  883. groupedArray = groupedArray.filter(function (group) {
  884. return group.some(function (item) {
  885. return typeof item[yScale.field] !== 'undefined';
  886. });
  887. });
  888. }
  889. for (var i = 0, len = groupedArray.length; i < len; i++) {
  890. var subData = groupedArray[i];
  891. var tempData = self._saveOrigin(subData);
  892. if (this.hasAdjust('dodge')) {
  893. self._numberic(tempData);
  894. }
  895. dataArray.push(tempData);
  896. }
  897. if (self.get('adjust')) {
  898. self._adjustData(dataArray);
  899. }
  900. if (self.get('sortable')) {
  901. self._sort(dataArray);
  902. }
  903. self.set('dataArray', dataArray);
  904. return dataArray;
  905. };
  906. _proto._saveOrigin = function _saveOrigin(data) {
  907. var rst = [];
  908. for (var i = 0, len = data.length; i < len; i++) {
  909. var origin = data[i];
  910. var obj = {};
  911. for (var k in origin) {
  912. obj[k] = origin[k];
  913. }
  914. obj[FIELD_ORIGIN] = origin;
  915. rst.push(obj);
  916. }
  917. return rst;
  918. };
  919. _proto._numberic = function _numberic(data) {
  920. var positionAttr = this.getAttr('position');
  921. var scales = positionAttr.scales;
  922. for (var j = 0, len = data.length; j < len; j++) {
  923. var obj = data[j];
  924. var count = Math.min(2, scales.length);
  925. for (var i = 0; i < count; i++) {
  926. var scale = scales[i];
  927. if (scale.isCategory) {
  928. var field = scale.field;
  929. obj[field] = scale.translate(obj[field]);
  930. }
  931. }
  932. }
  933. };
  934. _proto._adjustData = function _adjustData(dataArray) {
  935. var self = this;
  936. var adjust = self.get('adjust');
  937. if (adjust) {
  938. var adjustType = Util.upperFirst(adjust.type);
  939. if (!Adjust[adjustType]) {
  940. throw new Error('not support such adjust : ' + adjust);
  941. }
  942. var xScale = self.getXScale();
  943. var yScale = self.getYScale();
  944. var cfg = Util.mix({
  945. xField: xScale.field,
  946. yField: yScale.field
  947. }, adjust);
  948. var adjustObject = new Adjust[adjustType](cfg);
  949. adjustObject.processAdjust(dataArray);
  950. if (adjustType === 'Stack') {
  951. self._updateStackRange(yScale.field, yScale, dataArray);
  952. }
  953. }
  954. };
  955. _proto._updateStackRange = function _updateStackRange(field, scale, dataArray) {
  956. var mergeArray = Util.Array.merge(dataArray);
  957. var min = scale.min;
  958. var max = scale.max;
  959. for (var i = 0, len = mergeArray.length; i < len; i++) {
  960. var obj = mergeArray[i];
  961. var tmpMin = Math.min.apply(null, obj[field]);
  962. var tmpMax = Math.max.apply(null, obj[field]);
  963. if (tmpMin < min) {
  964. min = tmpMin;
  965. }
  966. if (tmpMax > max) {
  967. max = tmpMax;
  968. }
  969. }
  970. if (min < scale.min || max > scale.max) {
  971. scale.change({
  972. min: min,
  973. max: max
  974. });
  975. }
  976. };
  977. _proto._sort = function _sort(mappedArray) {
  978. var self = this;
  979. var xScale = self.getXScale();
  980. var field = xScale.field,
  981. type = xScale.type;
  982. if (type !== 'identity' && xScale.values.length > 1) {
  983. Util.each(mappedArray, function (itemArr) {
  984. itemArr.sort(function (obj1, obj2) {
  985. if (type === 'timeCat') {
  986. return xScale._toTimeStamp(obj1[FIELD_ORIGIN][field]) - xScale._toTimeStamp(obj2[FIELD_ORIGIN][field]);
  987. }
  988. return xScale.translate(obj1[FIELD_ORIGIN][field]) - xScale.translate(obj2[FIELD_ORIGIN][field]);
  989. });
  990. });
  991. }
  992. self.set('hasSorted', true);
  993. self.set('dataArray', mappedArray);
  994. };
  995. _proto.paint = function paint() {
  996. var self = this;
  997. var dataArray = self.get('dataArray');
  998. var mappedArray = [];
  999. var shapeFactory = self.getShapeFactory();
  1000. shapeFactory.setCoord(self.get('coord'));
  1001. self._beforeMapping(dataArray);
  1002. for (var i = 0, len = dataArray.length; i < len; i++) {
  1003. var data = dataArray[i];
  1004. if (data.length) {
  1005. data = self._mapping(data);
  1006. mappedArray.push(data);
  1007. self.draw(data, shapeFactory);
  1008. }
  1009. }
  1010. self.set('dataArray', mappedArray);
  1011. };
  1012. _proto.getShapeFactory = function getShapeFactory() {
  1013. var shapeFactory = this.get('shapeFactory');
  1014. if (!shapeFactory) {
  1015. var shapeType = this.get('shapeType');
  1016. shapeFactory = GeometryShape.getShapeFactory(shapeType);
  1017. this.set('shapeFactory', shapeFactory);
  1018. }
  1019. return shapeFactory;
  1020. };
  1021. _proto._mapping = function _mapping(data) {
  1022. var self = this;
  1023. var attrs = self.get('attrs');
  1024. var yField = self.getYScale().field; // 用来缓存转换的值,减少mapping耗时
  1025. var mappedCache = {};
  1026. for (var k in attrs) {
  1027. if (attrs.hasOwnProperty(k)) {
  1028. var attr = attrs[k];
  1029. var names = attr.names;
  1030. var scales = attr.scales;
  1031. for (var i = 0, len = data.length; i < len; i++) {
  1032. var record = data[i];
  1033. record[FIELD_ORIGIN_Y] = record[yField]; // 获取视觉属性对应的value值
  1034. // 位置的缓存命中率低,还是每次单独计算
  1035. if (attr.type === 'position') {
  1036. var values = self._getAttrValues(attr, record);
  1037. for (var j = 0, _len = values.length; j < _len; j++) {
  1038. var val = values[j];
  1039. var name = names[j];
  1040. record[name] = Util.isArray(val) && val.length === 1 ? val[0] : val;
  1041. }
  1042. } else {
  1043. // 除了position其他都只有一项
  1044. var _name = names[0];
  1045. var field = scales[0].field;
  1046. var value = record[field];
  1047. var key = "" + _name + value;
  1048. var _values = mappedCache[key];
  1049. if (!_values) {
  1050. _values = self._getAttrValues(attr, record);
  1051. mappedCache[key] = _values;
  1052. }
  1053. record[_name] = _values[0];
  1054. }
  1055. }
  1056. }
  1057. }
  1058. return data;
  1059. };
  1060. _proto._getAttrValues = function _getAttrValues(attr, record) {
  1061. var scales = attr.scales;
  1062. var params = [];
  1063. for (var i = 0, len = scales.length; i < len; i++) {
  1064. var scale = scales[i];
  1065. var field = scale.field;
  1066. if (scale.type === 'identity') {
  1067. params.push(scale.value);
  1068. } else {
  1069. params.push(record[field]);
  1070. }
  1071. }
  1072. var values = attr.mapping.apply(attr, params);
  1073. return values;
  1074. };
  1075. _proto.getAttrValue = function getAttrValue(attrName, record) {
  1076. var attr = this.getAttr(attrName);
  1077. var rst = null;
  1078. if (attr) {
  1079. var values = this._getAttrValues(attr, record);
  1080. rst = values[0];
  1081. }
  1082. return rst;
  1083. };
  1084. _proto._beforeMapping = function _beforeMapping(dataArray) {
  1085. var self = this;
  1086. if (self.get('generatePoints')) {
  1087. self._generatePoints(dataArray);
  1088. }
  1089. };
  1090. _proto.isInCircle = function isInCircle() {
  1091. var coord = this.get('coord');
  1092. return coord && coord.isPolar;
  1093. };
  1094. _proto.getCallbackCfg = function getCallbackCfg(fields, cfg, origin) {
  1095. if (!fields) {
  1096. return cfg;
  1097. }
  1098. var tmpCfg = {};
  1099. var params = fields.map(function (field) {
  1100. return origin[field];
  1101. });
  1102. Util.each(cfg, function (v, k) {
  1103. if (Util.isFunction(v)) {
  1104. tmpCfg[k] = v.apply(null, params);
  1105. } else {
  1106. tmpCfg[k] = v;
  1107. }
  1108. });
  1109. return tmpCfg;
  1110. };
  1111. _proto.getDrawCfg = function getDrawCfg(obj) {
  1112. var self = this;
  1113. var isInCircle = self.isInCircle();
  1114. var cfg = {
  1115. origin: obj,
  1116. x: obj.x,
  1117. y: obj.y,
  1118. color: obj.color,
  1119. size: obj.size,
  1120. shape: obj.shape,
  1121. isInCircle: isInCircle,
  1122. opacity: obj.opacity
  1123. };
  1124. var styleOptions = self.get('styleOptions');
  1125. if (styleOptions && styleOptions.style) {
  1126. cfg.style = self.getCallbackCfg(styleOptions.fields, styleOptions.style, obj[FIELD_ORIGIN]);
  1127. }
  1128. if (self.get('generatePoints')) {
  1129. cfg.points = obj.points;
  1130. cfg.nextPoints = obj.nextPoints;
  1131. }
  1132. if (isInCircle) {
  1133. cfg.center = self.get('coord').center;
  1134. }
  1135. return cfg;
  1136. };
  1137. _proto.draw = function draw(data, shapeFactory) {
  1138. var self = this;
  1139. var container = self.get('container');
  1140. var yScale = self.getYScale();
  1141. Util.each(data, function (obj, index) {
  1142. if (yScale && Util.isNil(obj._origin[yScale.field])) {
  1143. return;
  1144. }
  1145. obj.index = index;
  1146. var cfg = self.getDrawCfg(obj);
  1147. var shape = obj.shape;
  1148. self.drawShape(shape, obj, cfg, container, shapeFactory);
  1149. });
  1150. };
  1151. _proto.drawShape = function drawShape(shape, shapeData, cfg, container, shapeFactory) {
  1152. var gShape = shapeFactory.drawShape(shape, cfg, container);
  1153. if (gShape) {
  1154. Util.each([].concat(gShape), function (s) {
  1155. s.set('origin', shapeData);
  1156. });
  1157. }
  1158. };
  1159. _proto._generatePoints = function _generatePoints(dataArray) {
  1160. var self = this;
  1161. var shapeFactory = self.getShapeFactory();
  1162. var shapeAttr = self.getAttr('shape');
  1163. Util.each(dataArray, function (data) {
  1164. for (var i = 0, len = data.length; i < len; i++) {
  1165. var obj = data[i];
  1166. var cfg = self.createShapePointsCfg(obj);
  1167. var shape = shapeAttr ? self._getAttrValues(shapeAttr, obj) : null;
  1168. var points = shapeFactory.getShapePoints(shape, cfg);
  1169. obj.points = points;
  1170. }
  1171. }); // 添加nextPoints
  1172. Util.each(dataArray, function (data, index) {
  1173. var nextData = dataArray[index + 1];
  1174. if (nextData) {
  1175. data[0].nextPoints = nextData[0].points;
  1176. }
  1177. });
  1178. }
  1179. /**
  1180. * get the info of each shape
  1181. * @protected
  1182. * @param {Object} obj the data item
  1183. * @return {Object} cfg return the result
  1184. */
  1185. ;
  1186. _proto.createShapePointsCfg = function createShapePointsCfg(obj) {
  1187. var xScale = this.getXScale();
  1188. var yScale = this.getYScale();
  1189. var x = this._normalizeValues(obj[xScale.field], xScale);
  1190. var y;
  1191. if (yScale) {
  1192. y = this._normalizeValues(obj[yScale.field], yScale);
  1193. } else {
  1194. y = obj.y ? obj.y : 0.1;
  1195. }
  1196. return {
  1197. x: x,
  1198. y: y,
  1199. y0: yScale ? yScale.scale(this.getYMinValue()) : undefined
  1200. };
  1201. };
  1202. _proto.getYMinValue = function getYMinValue() {
  1203. var yScale = this.getYScale();
  1204. var min = yScale.min,
  1205. max = yScale.max;
  1206. var value;
  1207. if (this.get('startOnZero')) {
  1208. if (max <= 0 && min <= 0) {
  1209. value = max;
  1210. } else {
  1211. value = min >= 0 ? min : 0;
  1212. }
  1213. } else {
  1214. value = min;
  1215. }
  1216. return value;
  1217. };
  1218. _proto._normalizeValues = function _normalizeValues(values, scale) {
  1219. var rst = [];
  1220. if (Util.isArray(values)) {
  1221. for (var i = 0, len = values.length; i < len; i++) {
  1222. var v = values[i];
  1223. rst.push(scale.scale(v));
  1224. }
  1225. } else {
  1226. rst = scale.scale(values);
  1227. }
  1228. return rst;
  1229. };
  1230. _proto.getAttr = function getAttr(name) {
  1231. return this.get('attrs')[name];
  1232. };
  1233. _proto.getXScale = function getXScale() {
  1234. return this.getAttr('position').scales[0];
  1235. };
  1236. _proto.getYScale = function getYScale() {
  1237. return this.getAttr('position').scales[1];
  1238. };
  1239. _proto.hasAdjust = function hasAdjust(adjust) {
  1240. return this.get('adjust') && this.get('adjust').type === adjust;
  1241. };
  1242. _proto._getSnap = function _getSnap(scale, item, arr) {
  1243. var i = 0;
  1244. var values;
  1245. var yField = this.getYScale().field; // 叠加的维度
  1246. if (this.hasAdjust('stack') && scale.field === yField) {
  1247. values = [];
  1248. arr.forEach(function (obj) {
  1249. values.push(obj[FIELD_ORIGIN_Y]);
  1250. });
  1251. for (var len = values.length; i < len; i++) {
  1252. if (values[0][0] > item) {
  1253. break;
  1254. }
  1255. if (values[values.length - 1][1] <= item) {
  1256. i = values.length - 1;
  1257. break;
  1258. }
  1259. if (values[i][0] <= item && values[i][1] > item) {
  1260. break;
  1261. }
  1262. }
  1263. } else {
  1264. values = scale.values;
  1265. values.sort(function (a, b) {
  1266. return a - b;
  1267. });
  1268. for (var _len2 = values.length; i < _len2; i++) {
  1269. // 如果只有1个点直接返回第1个点
  1270. if (_len2 <= 1) {
  1271. break;
  1272. } // 第1个点和第2个点之间
  1273. if ((values[0] + values[1]) / 2 > item) {
  1274. break;
  1275. } // 中间的点
  1276. if ((values[i - 1] + values[i]) / 2 <= item && (values[i + 1] + values[i]) / 2 > item) {
  1277. break;
  1278. } // 最后2个点
  1279. if ((values[values.length - 2] + values[values.length - 1]) / 2 <= item) {
  1280. i = values.length - 1;
  1281. break;
  1282. }
  1283. }
  1284. }
  1285. var result = values[i];
  1286. return result;
  1287. };
  1288. _proto.getSnapRecords = function getSnapRecords(point) {
  1289. var self = this;
  1290. var coord = self.get('coord');
  1291. var xScale = self.getXScale();
  1292. var yScale = self.getYScale();
  1293. var xfield = xScale.field;
  1294. var dataArray = self.get('dataArray');
  1295. if (!this.get('hasSorted')) {
  1296. this._sort(dataArray);
  1297. }
  1298. var rst = [];
  1299. var invertPoint = coord.invertPoint(point);
  1300. var invertPointX = invertPoint.x;
  1301. if (self.isInCircle() && !coord.transposed && invertPointX > (1 + xScale.rangeMax()) / 2) {
  1302. invertPointX = xScale.rangeMin();
  1303. }
  1304. var xValue = xScale.invert(invertPointX);
  1305. if (!xScale.isCategory) {
  1306. xValue = self._getSnap(xScale, xValue);
  1307. }
  1308. var tmp = [];
  1309. dataArray.forEach(function (data) {
  1310. data.forEach(function (obj) {
  1311. var originValue = Util.isNil(obj[FIELD_ORIGIN]) ? obj[xfield] : obj[FIELD_ORIGIN][xfield];
  1312. if (self._isEqual(originValue, xValue, xScale)) {
  1313. tmp.push(obj);
  1314. }
  1315. });
  1316. }); // special for pie chart
  1317. if (this.hasAdjust('stack') && coord.isPolar && coord.transposed) {
  1318. if (invertPointX >= 0 && invertPointX <= 1) {
  1319. var yValue = yScale.invert(invertPoint.y);
  1320. yValue = self._getSnap(yScale, yValue, tmp);
  1321. tmp.forEach(function (obj) {
  1322. if (Util.isArray(yValue) ? obj[FIELD_ORIGIN_Y].toString() === yValue.toString() : obj[FIELD_ORIGIN_Y] === yValue) {
  1323. rst.push(obj);
  1324. }
  1325. });
  1326. }
  1327. } else {
  1328. rst = tmp;
  1329. }
  1330. return rst;
  1331. };
  1332. _proto._isEqual = function _isEqual(originValue, value, scale) {
  1333. if (scale.type === 'timeCat') {
  1334. return scale._toTimeStamp(originValue) === value;
  1335. }
  1336. return value === originValue;
  1337. };
  1338. _proto.position = function position(field) {
  1339. this._setAttrOptions('position', {
  1340. field: field
  1341. });
  1342. return this;
  1343. };
  1344. _proto.color = function color(field, values) {
  1345. this._createAttrOption('color', field, values, Global.colors);
  1346. return this;
  1347. };
  1348. _proto.size = function size(field, values) {
  1349. this._createAttrOption('size', field, values, Global.sizes);
  1350. return this;
  1351. };
  1352. _proto.shape = function shape(field, values) {
  1353. var type = this.get('type');
  1354. var shapes = Global.shapes[type] || [];
  1355. this._createAttrOption('shape', field, values, shapes);
  1356. return this;
  1357. };
  1358. _proto.style = function style(field, cfg) {
  1359. var styleOptions = this.get('styleOptions');
  1360. if (!styleOptions) {
  1361. styleOptions = {};
  1362. this.set('styleOptions', styleOptions);
  1363. }
  1364. if (Util.isObject(field)) {
  1365. cfg = field;
  1366. field = null;
  1367. }
  1368. var fields;
  1369. if (field) {
  1370. fields = parseFields(field);
  1371. }
  1372. styleOptions.fields = fields;
  1373. styleOptions.style = cfg;
  1374. return this;
  1375. };
  1376. _proto.adjust = function adjust(type) {
  1377. if (Util.isString(type)) {
  1378. type = {
  1379. type: type
  1380. };
  1381. }
  1382. this.set('adjust', type);
  1383. return this;
  1384. };
  1385. _proto.animate = function animate(cfg) {
  1386. this.set('animateCfg', cfg);
  1387. return this;
  1388. };
  1389. _proto.changeData = function changeData(data) {
  1390. this.set('data', data); // 改变数据后,情况度量,因为需要重新实例化
  1391. this.set('scales', {});
  1392. this.init();
  1393. };
  1394. _proto.clearInner = function clearInner() {
  1395. var container = this.get('container');
  1396. if (container) {
  1397. container.clear(); // container.setMatrix([ 1, 0, 0, 1, 0, 0 ]);
  1398. }
  1399. };
  1400. _proto.reset = function reset() {
  1401. this.set('attrs', {});
  1402. this.set('attrOptions', {});
  1403. this.set('adjust', null);
  1404. this.clearInner();
  1405. };
  1406. _proto.clear = function clear() {
  1407. this.clearInner();
  1408. };
  1409. _proto.destroy = function destroy() {
  1410. this.clear();
  1411. _Base.prototype.destroy.call(this);
  1412. };
  1413. _proto._display = function _display(visible) {
  1414. this.set('visible', visible);
  1415. var container = this.get('container');
  1416. var canvas = container.get('canvas');
  1417. container.set('visible', visible);
  1418. canvas.draw();
  1419. };
  1420. _proto.show = function show() {
  1421. this._display(true);
  1422. };
  1423. _proto.hide = function hide() {
  1424. this._display(false);
  1425. };
  1426. return Geom;
  1427. }(Base);
  1428. module.exports = Geom;
  1429. /***/ }),
  1430. /* 18 */
  1431. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1432. "use strict";
  1433. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(11);
  1434. /* harmony default export */ __webpack_exports__["a"] = (function (str) {
  1435. return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a" /* default */])(str, 'String');
  1436. });
  1437. /***/ }),
  1438. /* 19 */
  1439. /***/ (function(module, exports, __webpack_require__) {
  1440. "use strict";
  1441. var Util = __webpack_require__(0);
  1442. var Global = __webpack_require__(6);
  1443. var Shape = {};
  1444. var ShapeBase = {
  1445. _coord: null,
  1446. /**
  1447. * draw the shape
  1448. * @param {Object} cfg options
  1449. * @param {Object} container container to store the shapes
  1450. */
  1451. draw: function draw(cfg, container) {
  1452. if (this.drawShape) {
  1453. this.drawShape(cfg, container);
  1454. }
  1455. },
  1456. /**
  1457. * set the coordinate instance
  1458. * @param {Coord} coord coordinate instance
  1459. */
  1460. setCoord: function setCoord(coord) {
  1461. this._coord = coord;
  1462. },
  1463. /**
  1464. * convert the normalized value to the canvas position
  1465. * @param {point} point the point to convert
  1466. * @return {point} point return the result
  1467. */
  1468. parsePoint: function parsePoint(point) {
  1469. var coord = this._coord;
  1470. if (coord.isPolar) {
  1471. if (point.x === 1) point.x = 0.9999999;
  1472. if (point.y === 1) point.y = 0.9999999;
  1473. }
  1474. return coord.convertPoint(point);
  1475. },
  1476. /**
  1477. * convert the normalized value to the canvas position
  1478. * @param {points} points the array that store the points
  1479. * @return {points} points return the result
  1480. */
  1481. parsePoints: function parsePoints(points) {
  1482. if (!points) return false;
  1483. var self = this;
  1484. var rst = [];
  1485. points.forEach(function (point) {
  1486. rst.push(self.parsePoint(point));
  1487. });
  1488. return rst;
  1489. }
  1490. };
  1491. var ShapeFactoryBase = {
  1492. defaultShapeType: null,
  1493. setCoord: function setCoord(coord) {
  1494. this._coord = coord;
  1495. },
  1496. getShape: function getShape(type) {
  1497. var self = this;
  1498. if (Util.isArray(type)) {
  1499. type = type[0];
  1500. }
  1501. var shape = self[type] || self[self.defaultShapeType];
  1502. shape._coord = self._coord;
  1503. return shape;
  1504. },
  1505. getShapePoints: function getShapePoints(type, cfg) {
  1506. var shape = this.getShape(type);
  1507. var fn = shape.getPoints || shape.getShapePoints || this.getDefaultPoints;
  1508. var points = fn(cfg);
  1509. return points;
  1510. },
  1511. getDefaultPoints: function getDefaultPoints()
  1512. /* cfg */
  1513. {
  1514. return [];
  1515. },
  1516. drawShape: function drawShape(type, cfg, container) {
  1517. var shape = this.getShape(type);
  1518. if (!cfg.color) {
  1519. cfg.color = Global.colors[0];
  1520. }
  1521. return shape.draw(cfg, container);
  1522. }
  1523. };
  1524. Shape.registerFactory = function (factoryName, cfg) {
  1525. var className = Util.upperFirst(factoryName);
  1526. var geomObj = Util.mix({}, ShapeFactoryBase, cfg);
  1527. Shape[className] = geomObj;
  1528. geomObj.name = factoryName;
  1529. return geomObj;
  1530. };
  1531. Shape.registerShape = function (factoryName, shapeType, cfg) {
  1532. var className = Util.upperFirst(factoryName);
  1533. var factory = Shape[className];
  1534. var shapeObj = Util.mix({}, ShapeBase, cfg);
  1535. factory[shapeType] = shapeObj;
  1536. return shapeObj;
  1537. };
  1538. Shape.registShape = Shape.registerShape;
  1539. Shape.getShapeFactory = function (factoryName) {
  1540. var self = this;
  1541. factoryName = factoryName || 'point';
  1542. var className = Util.upperFirst(factoryName);
  1543. return self[className];
  1544. };
  1545. module.exports = Shape;
  1546. /***/ }),
  1547. /* 20 */
  1548. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1549. "use strict";
  1550. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  1551. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__contains__ = __webpack_require__(28);
  1552. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "contains", function() { return __WEBPACK_IMPORTED_MODULE_0__contains__["a"]; });
  1553. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "includes", function() { return __WEBPACK_IMPORTED_MODULE_0__contains__["a"]; });
  1554. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__difference__ = __webpack_require__(79);
  1555. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "difference", function() { return __WEBPACK_IMPORTED_MODULE_1__difference__["a"]; });
  1556. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__find__ = __webpack_require__(80);
  1557. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "find", function() { return __WEBPACK_IMPORTED_MODULE_2__find__["a"]; });
  1558. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__find_index__ = __webpack_require__(81);
  1559. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return __WEBPACK_IMPORTED_MODULE_3__find_index__["a"]; });
  1560. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__first_value__ = __webpack_require__(82);
  1561. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "firstValue", function() { return __WEBPACK_IMPORTED_MODULE_4__first_value__["a"]; });
  1562. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__flatten__ = __webpack_require__(83);
  1563. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "flatten", function() { return __WEBPACK_IMPORTED_MODULE_5__flatten__["a"]; });
  1564. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__flatten_deep__ = __webpack_require__(84);
  1565. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "flattenDeep", function() { return __WEBPACK_IMPORTED_MODULE_6__flatten_deep__["a"]; });
  1566. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__get_range__ = __webpack_require__(85);
  1567. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getRange", function() { return __WEBPACK_IMPORTED_MODULE_7__get_range__["a"]; });
  1568. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__pull__ = __webpack_require__(86);
  1569. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "pull", function() { return __WEBPACK_IMPORTED_MODULE_8__pull__["a"]; });
  1570. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__pull_at__ = __webpack_require__(53);
  1571. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "pullAt", function() { return __WEBPACK_IMPORTED_MODULE_9__pull_at__["a"]; });
  1572. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__reduce__ = __webpack_require__(87);
  1573. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return __WEBPACK_IMPORTED_MODULE_10__reduce__["a"]; });
  1574. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__remove__ = __webpack_require__(88);
  1575. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "remove", function() { return __WEBPACK_IMPORTED_MODULE_11__remove__["a"]; });
  1576. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__sort_by__ = __webpack_require__(89);
  1577. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "sortBy", function() { return __WEBPACK_IMPORTED_MODULE_12__sort_by__["a"]; });
  1578. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__union__ = __webpack_require__(90);
  1579. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "union", function() { return __WEBPACK_IMPORTED_MODULE_13__union__["a"]; });
  1580. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__uniq__ = __webpack_require__(54);
  1581. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "uniq", function() { return __WEBPACK_IMPORTED_MODULE_14__uniq__["a"]; });
  1582. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__values_of_key__ = __webpack_require__(91);
  1583. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "valuesOfKey", function() { return __WEBPACK_IMPORTED_MODULE_15__values_of_key__["a"]; });
  1584. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__head__ = __webpack_require__(92);
  1585. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "head", function() { return __WEBPACK_IMPORTED_MODULE_16__head__["a"]; });
  1586. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__last__ = __webpack_require__(93);
  1587. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "last", function() { return __WEBPACK_IMPORTED_MODULE_17__last__["a"]; });
  1588. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__starts_with__ = __webpack_require__(94);
  1589. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "startsWith", function() { return __WEBPACK_IMPORTED_MODULE_18__starts_with__["a"]; });
  1590. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__ends_with__ = __webpack_require__(95);
  1591. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "endsWith", function() { return __WEBPACK_IMPORTED_MODULE_19__ends_with__["a"]; });
  1592. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__filter__ = __webpack_require__(39);
  1593. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return __WEBPACK_IMPORTED_MODULE_20__filter__["a"]; });
  1594. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__every__ = __webpack_require__(96);
  1595. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "every", function() { return __WEBPACK_IMPORTED_MODULE_21__every__["a"]; });
  1596. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__some__ = __webpack_require__(97);
  1597. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "some", function() { return __WEBPACK_IMPORTED_MODULE_22__some__["a"]; });
  1598. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__group__ = __webpack_require__(98);
  1599. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "group", function() { return __WEBPACK_IMPORTED_MODULE_23__group__["a"]; });
  1600. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__group_by__ = __webpack_require__(56);
  1601. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return __WEBPACK_IMPORTED_MODULE_24__group_by__["a"]; });
  1602. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__group_to_map__ = __webpack_require__(55);
  1603. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "groupToMap", function() { return __WEBPACK_IMPORTED_MODULE_25__group_to_map__["a"]; });
  1604. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__get_wrap_behavior__ = __webpack_require__(99);
  1605. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getWrapBehavior", function() { return __WEBPACK_IMPORTED_MODULE_26__get_wrap_behavior__["a"]; });
  1606. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__wrap_behavior__ = __webpack_require__(100);
  1607. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "wrapBehavior", function() { return __WEBPACK_IMPORTED_MODULE_27__wrap_behavior__["a"]; });
  1608. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__number2color__ = __webpack_require__(101);
  1609. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "number2color", function() { return __WEBPACK_IMPORTED_MODULE_28__number2color__["a"]; });
  1610. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__parse_radius__ = __webpack_require__(102);
  1611. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "parseRadius", function() { return __WEBPACK_IMPORTED_MODULE_29__parse_radius__["a"]; });
  1612. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__clamp__ = __webpack_require__(103);
  1613. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "clamp", function() { return __WEBPACK_IMPORTED_MODULE_30__clamp__["a"]; });
  1614. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__fixed_base__ = __webpack_require__(104);
  1615. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "fixedBase", function() { return __WEBPACK_IMPORTED_MODULE_31__fixed_base__["a"]; });
  1616. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__is_decimal__ = __webpack_require__(105);
  1617. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isDecimal", function() { return __WEBPACK_IMPORTED_MODULE_32__is_decimal__["a"]; });
  1618. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__is_even__ = __webpack_require__(106);
  1619. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isEven", function() { return __WEBPACK_IMPORTED_MODULE_33__is_even__["a"]; });
  1620. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__is_integer__ = __webpack_require__(107);
  1621. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isInteger", function() { return __WEBPACK_IMPORTED_MODULE_34__is_integer__["a"]; });
  1622. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__is_negative__ = __webpack_require__(108);
  1623. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isNegative", function() { return __WEBPACK_IMPORTED_MODULE_35__is_negative__["a"]; });
  1624. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__is_number_equal__ = __webpack_require__(109);
  1625. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isNumberEqual", function() { return __WEBPACK_IMPORTED_MODULE_36__is_number_equal__["a"]; });
  1626. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__is_odd__ = __webpack_require__(110);
  1627. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isOdd", function() { return __WEBPACK_IMPORTED_MODULE_37__is_odd__["a"]; });
  1628. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__is_positive__ = __webpack_require__(111);
  1629. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isPositive", function() { return __WEBPACK_IMPORTED_MODULE_38__is_positive__["a"]; });
  1630. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_39__max_by__ = __webpack_require__(112);
  1631. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "maxBy", function() { return __WEBPACK_IMPORTED_MODULE_39__max_by__["a"]; });
  1632. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_40__min_by__ = __webpack_require__(113);
  1633. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "minBy", function() { return __WEBPACK_IMPORTED_MODULE_40__min_by__["a"]; });
  1634. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_41__mod__ = __webpack_require__(114);
  1635. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "mod", function() { return __WEBPACK_IMPORTED_MODULE_41__mod__["a"]; });
  1636. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_42__to_degree__ = __webpack_require__(115);
  1637. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "toDegree", function() { return __WEBPACK_IMPORTED_MODULE_42__to_degree__["a"]; });
  1638. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_43__to_integer__ = __webpack_require__(116);
  1639. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "toInteger", function() { return __WEBPACK_IMPORTED_MODULE_43__to_integer__["a"]; });
  1640. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_44__to_radian__ = __webpack_require__(117);
  1641. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "toRadian", function() { return __WEBPACK_IMPORTED_MODULE_44__to_radian__["a"]; });
  1642. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_45__for_in__ = __webpack_require__(118);
  1643. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "forIn", function() { return __WEBPACK_IMPORTED_MODULE_45__for_in__["a"]; });
  1644. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__has__ = __webpack_require__(57);
  1645. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "has", function() { return __WEBPACK_IMPORTED_MODULE_46__has__["a"]; });
  1646. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_47__has_key__ = __webpack_require__(119);
  1647. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "hasKey", function() { return __WEBPACK_IMPORTED_MODULE_47__has_key__["a"]; });
  1648. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_48__has_value__ = __webpack_require__(120);
  1649. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "hasValue", function() { return __WEBPACK_IMPORTED_MODULE_48__has_value__["a"]; });
  1650. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_49__keys__ = __webpack_require__(52);
  1651. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "keys", function() { return __WEBPACK_IMPORTED_MODULE_49__keys__["a"]; });
  1652. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_50__is_match__ = __webpack_require__(51);
  1653. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isMatch", function() { return __WEBPACK_IMPORTED_MODULE_50__is_match__["a"]; });
  1654. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_51__values__ = __webpack_require__(58);
  1655. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "values", function() { return __WEBPACK_IMPORTED_MODULE_51__values__["a"]; });
  1656. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_52__lower_case__ = __webpack_require__(121);
  1657. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "lowerCase", function() { return __WEBPACK_IMPORTED_MODULE_52__lower_case__["a"]; });
  1658. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_53__lower_first__ = __webpack_require__(122);
  1659. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "lowerFirst", function() { return __WEBPACK_IMPORTED_MODULE_53__lower_first__["a"]; });
  1660. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_54__substitute__ = __webpack_require__(123);
  1661. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "substitute", function() { return __WEBPACK_IMPORTED_MODULE_54__substitute__["a"]; });
  1662. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_55__upper_case__ = __webpack_require__(124);
  1663. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "upperCase", function() { return __WEBPACK_IMPORTED_MODULE_55__upper_case__["a"]; });
  1664. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_56__upper_first__ = __webpack_require__(125);
  1665. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "upperFirst", function() { return __WEBPACK_IMPORTED_MODULE_56__upper_first__["a"]; });
  1666. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_57__get_type__ = __webpack_require__(59);
  1667. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "getType", function() { return __WEBPACK_IMPORTED_MODULE_57__get_type__["a"]; });
  1668. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_58__is_arguments__ = __webpack_require__(126);
  1669. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isArguments", function() { return __WEBPACK_IMPORTED_MODULE_58__is_arguments__["a"]; });
  1670. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_59__is_array__ = __webpack_require__(5);
  1671. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isArray", function() { return __WEBPACK_IMPORTED_MODULE_59__is_array__["a"]; });
  1672. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_60__is_array_like__ = __webpack_require__(7);
  1673. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isArrayLike", function() { return __WEBPACK_IMPORTED_MODULE_60__is_array_like__["a"]; });
  1674. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_61__is_boolean__ = __webpack_require__(127);
  1675. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isBoolean", function() { return __WEBPACK_IMPORTED_MODULE_61__is_boolean__["a"]; });
  1676. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_62__is_date__ = __webpack_require__(128);
  1677. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isDate", function() { return __WEBPACK_IMPORTED_MODULE_62__is_date__["a"]; });
  1678. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_63__is_error__ = __webpack_require__(129);
  1679. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isError", function() { return __WEBPACK_IMPORTED_MODULE_63__is_error__["a"]; });
  1680. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_64__is_function__ = __webpack_require__(9);
  1681. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isFunction", function() { return __WEBPACK_IMPORTED_MODULE_64__is_function__["a"]; });
  1682. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_65__is_finite__ = __webpack_require__(130);
  1683. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isFinite", function() { return __WEBPACK_IMPORTED_MODULE_65__is_finite__["a"]; });
  1684. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_66__is_nil__ = __webpack_require__(14);
  1685. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isNil", function() { return __WEBPACK_IMPORTED_MODULE_66__is_nil__["a"]; });
  1686. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_67__is_null__ = __webpack_require__(131);
  1687. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isNull", function() { return __WEBPACK_IMPORTED_MODULE_67__is_null__["a"]; });
  1688. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_68__is_number__ = __webpack_require__(12);
  1689. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isNumber", function() { return __WEBPACK_IMPORTED_MODULE_68__is_number__["a"]; });
  1690. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_69__is_object__ = __webpack_require__(29);
  1691. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isObject", function() { return __WEBPACK_IMPORTED_MODULE_69__is_object__["a"]; });
  1692. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_70__is_object_like__ = __webpack_require__(40);
  1693. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isObjectLike", function() { return __WEBPACK_IMPORTED_MODULE_70__is_object_like__["a"]; });
  1694. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_71__is_plain_object__ = __webpack_require__(24);
  1695. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isPlainObject", function() { return __WEBPACK_IMPORTED_MODULE_71__is_plain_object__["a"]; });
  1696. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_72__is_prototype__ = __webpack_require__(60);
  1697. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isPrototype", function() { return __WEBPACK_IMPORTED_MODULE_72__is_prototype__["a"]; });
  1698. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_73__is_reg_exp__ = __webpack_require__(132);
  1699. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isRegExp", function() { return __WEBPACK_IMPORTED_MODULE_73__is_reg_exp__["a"]; });
  1700. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_74__is_string__ = __webpack_require__(18);
  1701. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isString", function() { return __WEBPACK_IMPORTED_MODULE_74__is_string__["a"]; });
  1702. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_75__is_type__ = __webpack_require__(11);
  1703. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isType", function() { return __WEBPACK_IMPORTED_MODULE_75__is_type__["a"]; });
  1704. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_76__is_undefined__ = __webpack_require__(133);
  1705. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isUndefined", function() { return __WEBPACK_IMPORTED_MODULE_76__is_undefined__["a"]; });
  1706. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_77__is_element__ = __webpack_require__(134);
  1707. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isElement", function() { return __WEBPACK_IMPORTED_MODULE_77__is_element__["a"]; });
  1708. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_78__request_animation_frame__ = __webpack_require__(135);
  1709. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "requestAnimationFrame", function() { return __WEBPACK_IMPORTED_MODULE_78__request_animation_frame__["a"]; });
  1710. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_79__clear_animation_frame__ = __webpack_require__(136);
  1711. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "clearAnimationFrame", function() { return __WEBPACK_IMPORTED_MODULE_79__clear_animation_frame__["a"]; });
  1712. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_80__augment__ = __webpack_require__(137);
  1713. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "augment", function() { return __WEBPACK_IMPORTED_MODULE_80__augment__["a"]; });
  1714. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_81__clone__ = __webpack_require__(138);
  1715. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "clone", function() { return __WEBPACK_IMPORTED_MODULE_81__clone__["a"]; });
  1716. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_82__debounce__ = __webpack_require__(139);
  1717. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return __WEBPACK_IMPORTED_MODULE_82__debounce__["a"]; });
  1718. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_83__memoize__ = __webpack_require__(140);
  1719. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "memoize", function() { return __WEBPACK_IMPORTED_MODULE_83__memoize__["a"]; });
  1720. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_84__deep_mix__ = __webpack_require__(141);
  1721. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "deepMix", function() { return __WEBPACK_IMPORTED_MODULE_84__deep_mix__["a"]; });
  1722. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_85__each__ = __webpack_require__(8);
  1723. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "each", function() { return __WEBPACK_IMPORTED_MODULE_85__each__["a"]; });
  1724. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_86__extend__ = __webpack_require__(142);
  1725. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return __WEBPACK_IMPORTED_MODULE_86__extend__["a"]; });
  1726. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_87__index_of__ = __webpack_require__(143);
  1727. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "indexOf", function() { return __WEBPACK_IMPORTED_MODULE_87__index_of__["a"]; });
  1728. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_88__is_empty__ = __webpack_require__(144);
  1729. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return __WEBPACK_IMPORTED_MODULE_88__is_empty__["a"]; });
  1730. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_89__is_equal__ = __webpack_require__(61);
  1731. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isEqual", function() { return __WEBPACK_IMPORTED_MODULE_89__is_equal__["a"]; });
  1732. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_90__is_equal_with__ = __webpack_require__(145);
  1733. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "isEqualWith", function() { return __WEBPACK_IMPORTED_MODULE_90__is_equal_with__["a"]; });
  1734. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_91__map__ = __webpack_require__(146);
  1735. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return __WEBPACK_IMPORTED_MODULE_91__map__["a"]; });
  1736. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_92__map_values__ = __webpack_require__(147);
  1737. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "mapValues", function() { return __WEBPACK_IMPORTED_MODULE_92__map_values__["a"]; });
  1738. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_93__mix__ = __webpack_require__(41);
  1739. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "mix", function() { return __WEBPACK_IMPORTED_MODULE_93__mix__["a"]; });
  1740. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "assign", function() { return __WEBPACK_IMPORTED_MODULE_93__mix__["a"]; });
  1741. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_94__get__ = __webpack_require__(148);
  1742. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return __WEBPACK_IMPORTED_MODULE_94__get__["a"]; });
  1743. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_95__set__ = __webpack_require__(149);
  1744. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "set", function() { return __WEBPACK_IMPORTED_MODULE_95__set__["a"]; });
  1745. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_96__pick__ = __webpack_require__(150);
  1746. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "pick", function() { return __WEBPACK_IMPORTED_MODULE_96__pick__["a"]; });
  1747. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_97__throttle__ = __webpack_require__(151);
  1748. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return __WEBPACK_IMPORTED_MODULE_97__throttle__["a"]; });
  1749. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_98__to_array__ = __webpack_require__(152);
  1750. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return __WEBPACK_IMPORTED_MODULE_98__to_array__["a"]; });
  1751. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_99__to_string__ = __webpack_require__(25);
  1752. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "toString", function() { return __WEBPACK_IMPORTED_MODULE_99__to_string__["a"]; });
  1753. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_100__unique_id__ = __webpack_require__(153);
  1754. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "uniqueId", function() { return __WEBPACK_IMPORTED_MODULE_100__unique_id__["a"]; });
  1755. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_101__noop__ = __webpack_require__(154);
  1756. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return __WEBPACK_IMPORTED_MODULE_101__noop__["a"]; });
  1757. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_102__identity__ = __webpack_require__(155);
  1758. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return __WEBPACK_IMPORTED_MODULE_102__identity__["a"]; });
  1759. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_103__size__ = __webpack_require__(156);
  1760. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "size", function() { return __WEBPACK_IMPORTED_MODULE_103__size__["a"]; });
  1761. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_104__cache__ = __webpack_require__(157);
  1762. /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Cache", function() { return __WEBPACK_IMPORTED_MODULE_104__cache__["a"]; });
  1763. // array
  1764. // event
  1765. // format
  1766. // math
  1767. // object
  1768. // string
  1769. // type
  1770. // other
  1771. // 不知道为什么,需要把这个 export,不然 ts 会报类型错误
  1772. /***/ }),
  1773. /* 21 */
  1774. /***/ (function(module, exports, __webpack_require__) {
  1775. "use strict";
  1776. var Vector2 = __webpack_require__(13);
  1777. var start = Vector2.create();
  1778. var end = Vector2.create();
  1779. var extremity = Vector2.create();
  1780. function getCubicBezierXYatT(startPt, controlPt1, controlPt2, endPt, T) {
  1781. var x = CubicN(T, startPt.x, controlPt1.x, controlPt2.x, endPt.x);
  1782. var y = CubicN(T, startPt.y, controlPt1.y, controlPt2.y, endPt.y);
  1783. return {
  1784. x: x,
  1785. y: y
  1786. };
  1787. } // cubic helper formula at T distance
  1788. function CubicN(T, a, b, c, d) {
  1789. var t2 = T * T;
  1790. var t3 = t2 * T;
  1791. return a + (-a * 3 + T * (3 * a - a * T)) * T + (3 * b + T * (-6 * b + b * 3 * T)) * T + (c * 3 - c * 3 * T) * t2 + d * t3;
  1792. }
  1793. function cubicBezierBounds(c) {
  1794. var minX = Infinity;
  1795. var maxX = -Infinity;
  1796. var minY = Infinity;
  1797. var maxY = -Infinity;
  1798. var s = {
  1799. x: c[0],
  1800. y: c[1]
  1801. };
  1802. var c1 = {
  1803. x: c[2],
  1804. y: c[3]
  1805. };
  1806. var c2 = {
  1807. x: c[4],
  1808. y: c[5]
  1809. };
  1810. var e = {
  1811. x: c[6],
  1812. y: c[7]
  1813. };
  1814. for (var t = 0; t < 100; t++) {
  1815. var pt = getCubicBezierXYatT(s, c1, c2, e, t / 100);
  1816. if (pt.x < minX) {
  1817. minX = pt.x;
  1818. }
  1819. if (pt.x > maxX) {
  1820. maxX = pt.x;
  1821. }
  1822. if (pt.y < minY) {
  1823. minY = pt.y;
  1824. }
  1825. if (pt.y > maxY) {
  1826. maxY = pt.y;
  1827. }
  1828. }
  1829. return {
  1830. minX: minX,
  1831. minY: minY,
  1832. maxX: maxX,
  1833. maxY: maxY
  1834. };
  1835. }
  1836. module.exports = {
  1837. getBBoxFromPoints: function getBBoxFromPoints(points, lineWidth) {
  1838. if (points.length === 0) {
  1839. return;
  1840. }
  1841. var p = points[0];
  1842. var left = p.x;
  1843. var right = p.x;
  1844. var top = p.y;
  1845. var bottom = p.y;
  1846. var len = points.length;
  1847. for (var i = 1; i < len; i++) {
  1848. p = points[i];
  1849. left = Math.min(left, p.x);
  1850. right = Math.max(right, p.x);
  1851. top = Math.min(top, p.y);
  1852. bottom = Math.max(bottom, p.y);
  1853. }
  1854. lineWidth = lineWidth / 2 || 0;
  1855. return {
  1856. minX: left - lineWidth,
  1857. minY: top - lineWidth,
  1858. maxX: right + lineWidth,
  1859. maxY: bottom + lineWidth
  1860. };
  1861. },
  1862. getBBoxFromLine: function getBBoxFromLine(x0, y0, x1, y1, lineWidth) {
  1863. lineWidth = lineWidth / 2 || 0;
  1864. return {
  1865. minX: Math.min(x0, x1) - lineWidth,
  1866. minY: Math.min(y0, y1) - lineWidth,
  1867. maxX: Math.max(x0, x1) + lineWidth,
  1868. maxY: Math.max(y0, y1) + lineWidth
  1869. };
  1870. },
  1871. getBBoxFromArc: function getBBoxFromArc(x, y, r, startAngle, endAngle, anticlockwise) {
  1872. var diff = Math.abs(startAngle - endAngle);
  1873. if (diff % (Math.PI * 2) < 1e-4 && diff > 1e-4) {
  1874. // Is a circle
  1875. return {
  1876. minX: x - r,
  1877. minY: y - r,
  1878. maxX: x + r,
  1879. maxY: y + r
  1880. };
  1881. }
  1882. start[0] = Math.cos(startAngle) * r + x;
  1883. start[1] = Math.sin(startAngle) * r + y;
  1884. end[0] = Math.cos(endAngle) * r + x;
  1885. end[1] = Math.sin(endAngle) * r + y;
  1886. var min = [0, 0];
  1887. var max = [0, 0];
  1888. Vector2.min(min, start, end);
  1889. Vector2.max(max, start, end); // Thresh to [0, Math.PI * 2]
  1890. startAngle = startAngle % (Math.PI * 2);
  1891. if (startAngle < 0) {
  1892. startAngle = startAngle + Math.PI * 2;
  1893. }
  1894. endAngle = endAngle % (Math.PI * 2);
  1895. if (endAngle < 0) {
  1896. endAngle = endAngle + Math.PI * 2;
  1897. }
  1898. if (startAngle > endAngle && !anticlockwise) {
  1899. endAngle += Math.PI * 2;
  1900. } else if (startAngle < endAngle && anticlockwise) {
  1901. startAngle += Math.PI * 2;
  1902. }
  1903. if (anticlockwise) {
  1904. var tmp = endAngle;
  1905. endAngle = startAngle;
  1906. startAngle = tmp;
  1907. }
  1908. for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {
  1909. if (angle > startAngle) {
  1910. extremity[0] = Math.cos(angle) * r + x;
  1911. extremity[1] = Math.sin(angle) * r + y;
  1912. Vector2.min(min, extremity, min);
  1913. Vector2.max(max, extremity, max);
  1914. }
  1915. }
  1916. return {
  1917. minX: min[0],
  1918. minY: min[1],
  1919. maxX: max[0],
  1920. maxY: max[1]
  1921. };
  1922. },
  1923. getBBoxFromBezierGroup: function getBBoxFromBezierGroup(points, lineWidth) {
  1924. var minX = Infinity;
  1925. var maxX = -Infinity;
  1926. var minY = Infinity;
  1927. var maxY = -Infinity;
  1928. for (var i = 0, len = points.length; i < len; i++) {
  1929. var bbox = cubicBezierBounds(points[i]);
  1930. if (bbox.minX < minX) {
  1931. minX = bbox.minX;
  1932. }
  1933. if (bbox.maxX > maxX) {
  1934. maxX = bbox.maxX;
  1935. }
  1936. if (bbox.minY < minY) {
  1937. minY = bbox.minY;
  1938. }
  1939. if (bbox.maxY > maxY) {
  1940. maxY = bbox.maxY;
  1941. }
  1942. }
  1943. lineWidth = lineWidth / 2 || 0;
  1944. return {
  1945. minX: minX - lineWidth,
  1946. minY: minY - lineWidth,
  1947. maxX: maxX + lineWidth,
  1948. maxY: maxY + lineWidth
  1949. };
  1950. }
  1951. };
  1952. /***/ }),
  1953. /* 22 */
  1954. /***/ (function(module, exports) {
  1955. function _assertThisInitialized(self) {
  1956. if (self === void 0) {
  1957. throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  1958. }
  1959. return self;
  1960. }
  1961. module.exports = _assertThisInitialized;
  1962. /***/ }),
  1963. /* 23 */
  1964. /***/ (function(module, exports, __webpack_require__) {
  1965. "use strict";
  1966. var Util = __webpack_require__(0);
  1967. var KEYWORDS_PERCENT = {
  1968. min: 0,
  1969. median: 0.5,
  1970. max: 1
  1971. };
  1972. var GuideBase = /*#__PURE__*/function () {
  1973. var _proto = GuideBase.prototype;
  1974. _proto._initDefaultCfg = function _initDefaultCfg() {};
  1975. function GuideBase(cfg) {
  1976. this._initDefaultCfg();
  1977. Util.deepMix(this, cfg);
  1978. }
  1979. _proto._getNormalizedValue = function _getNormalizedValue(val, scale) {
  1980. var rst;
  1981. if (Util.isNil(KEYWORDS_PERCENT[val])) {
  1982. rst = scale.scale(val);
  1983. } else {
  1984. rst = KEYWORDS_PERCENT[val];
  1985. }
  1986. return rst;
  1987. };
  1988. _proto.parsePercentPoint = function parsePercentPoint(coord, position) {
  1989. var xPercent = parseFloat(position[0]) / 100;
  1990. var yPercent = parseFloat(position[1]) / 100;
  1991. var start = coord.start;
  1992. var end = coord.end;
  1993. var width = Math.abs(start.x - end.x);
  1994. var height = Math.abs(start.y - end.y);
  1995. var x = width * xPercent + Math.min(start.x, end.x);
  1996. var y = height * yPercent + Math.min(start.y, end.y);
  1997. return {
  1998. x: x,
  1999. y: y
  2000. };
  2001. };
  2002. _proto.parsePoint = function parsePoint(coord, position) {
  2003. var self = this;
  2004. var xScale = self.xScale;
  2005. var yScales = self.yScales;
  2006. if (Util.isFunction(position)) {
  2007. position = position(xScale, yScales); // position 必须是对象
  2008. } // 如果数据格式是 ['50%', '50%'] 的格式
  2009. // fix: 原始数据中可能会包含 'xxx5%xxx' 这样的数据,需要判断下 https://github.com/antvis/f2/issues/590
  2010. if (Util.isString(position[0]) && position[0].indexOf('%') !== -1 && !isNaN(position[0].slice(0, -1))) {
  2011. return this.parsePercentPoint(coord, position);
  2012. }
  2013. var x = self._getNormalizedValue(position[0], xScale);
  2014. var y = self._getNormalizedValue(position[1], yScales[0]);
  2015. var point = coord.convertPoint({
  2016. x: x,
  2017. y: y
  2018. });
  2019. if (self.limitInPlot) {
  2020. // limit in chart plotRange
  2021. if (x >= 0 && x <= 1 && y >= 0 && y <= 1) {
  2022. return point;
  2023. }
  2024. return null;
  2025. }
  2026. return point;
  2027. }
  2028. /**
  2029. * render the guide component
  2030. * @param {Coord} coord coordinate instance
  2031. * @param {Canvas.Group} group the container
  2032. */
  2033. ;
  2034. _proto.render = function render()
  2035. /* coord,group */
  2036. {};
  2037. _proto.repaint = function repaint() {
  2038. this.remove();
  2039. var coord = this.coord,
  2040. container = this.container,
  2041. canvas = this.canvas;
  2042. if (container && !container.isDestroyed()) {
  2043. this.render(coord, container);
  2044. canvas.draw();
  2045. }
  2046. };
  2047. _proto.remove = function remove() {
  2048. var element = this.element;
  2049. element && element.remove(true);
  2050. };
  2051. _proto.changeVisible = function changeVisible(visible) {
  2052. var self = this;
  2053. self.visible = visible;
  2054. var element = self.element;
  2055. if (!element) return;
  2056. if (element.set) {
  2057. element.set('visible', visible);
  2058. } else {
  2059. element.style.display = visible ? '' : 'none';
  2060. }
  2061. };
  2062. return GuideBase;
  2063. }();
  2064. module.exports = GuideBase;
  2065. /***/ }),
  2066. /* 24 */
  2067. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2068. "use strict";
  2069. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_object_like__ = __webpack_require__(40);
  2070. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_type__ = __webpack_require__(11);
  2071. var isPlainObject = function (value) {
  2072. /**
  2073. * isObjectLike(new Foo) => false
  2074. * isObjectLike([1, 2, 3]) => false
  2075. * isObjectLike({ x: 0, y: 0 }) => true
  2076. * isObjectLike(Object.create(null)) => true
  2077. */
  2078. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_object_like__["a" /* default */])(value) || !Object(__WEBPACK_IMPORTED_MODULE_1__is_type__["a" /* default */])(value, 'Object')) {
  2079. return false;
  2080. }
  2081. if (Object.getPrototypeOf(value) === null) {
  2082. return true;
  2083. }
  2084. var proto = value;
  2085. while (Object.getPrototypeOf(proto) !== null) {
  2086. proto = Object.getPrototypeOf(proto);
  2087. }
  2088. return Object.getPrototypeOf(value) === proto;
  2089. };
  2090. /* harmony default export */ __webpack_exports__["a"] = (isPlainObject);
  2091. /***/ }),
  2092. /* 25 */
  2093. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2094. "use strict";
  2095. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(14);
  2096. /* harmony default export */ __webpack_exports__["a"] = (function (value) {
  2097. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a" /* default */])(value)) return '';
  2098. return value.toString();
  2099. });
  2100. /***/ }),
  2101. /* 26 */
  2102. /***/ (function(module, exports, __webpack_require__) {
  2103. var mix = __webpack_require__(64);
  2104. var each = __webpack_require__(15);
  2105. var isObject = __webpack_require__(44);
  2106. var isNil = __webpack_require__(35);
  2107. var Scale = /*#__PURE__*/function () {
  2108. var _proto = Scale.prototype;
  2109. _proto._initDefaultCfg = function _initDefaultCfg() {
  2110. this.type = 'base';
  2111. /**
  2112. * 格式化函数,输出文本或者tick时的格式化函数
  2113. * @type {Function}
  2114. */
  2115. this.formatter = null;
  2116. /**
  2117. * 输出的值域
  2118. * @type {Array}
  2119. */
  2120. this.range = [0, 1];
  2121. /**
  2122. * 度量的标记
  2123. * @type {Array}
  2124. */
  2125. this.ticks = null;
  2126. /**
  2127. * 参与度量计算的值,可选项
  2128. * @type {Array}
  2129. */
  2130. this.values = [];
  2131. };
  2132. function Scale(cfg) {
  2133. this._initDefaultCfg();
  2134. mix(this, cfg);
  2135. this.init();
  2136. }
  2137. /**
  2138. * 度量初始化
  2139. * @protected
  2140. */
  2141. _proto.init = function init() {}
  2142. /**
  2143. * 获取该度量的ticks,返回的是多个对象,
  2144. * - text: tick 的文本
  2145. * - value: 对应的度量转换后的值
  2146. * <code>
  2147. * [
  2148. * {text: 0,value:0}
  2149. * {text: 1,value:0.2}
  2150. * {text: 2,value:0.4}
  2151. * {text: 3,value:0.6}
  2152. * {text: 4,value:0.8}
  2153. * {text: 5,value:1}
  2154. * ]
  2155. * </code>
  2156. * @param {Number} count 输出tick的个数的近似值,默认是 10
  2157. * @return {Array} 返回 ticks 数组
  2158. */
  2159. ;
  2160. _proto.getTicks = function getTicks() {
  2161. var self = this;
  2162. var ticks = self.ticks;
  2163. var rst = [];
  2164. each(ticks, function (tick) {
  2165. var obj;
  2166. if (isObject(tick)) {
  2167. obj = tick;
  2168. } else {
  2169. obj = {
  2170. text: self.getText(tick),
  2171. tickValue: tick,
  2172. value: self.scale(tick)
  2173. };
  2174. }
  2175. rst.push(obj);
  2176. });
  2177. return rst;
  2178. }
  2179. /**
  2180. * 获取格式化后的文本
  2181. * @param {*} value 输入的数据
  2182. * @param {*} key 字段的 key
  2183. * @return {String} 格式化的文本
  2184. */
  2185. ;
  2186. _proto.getText = function getText(value, key) {
  2187. var formatter = this.formatter;
  2188. value = formatter ? formatter(value, key) : value;
  2189. if (isNil(value) || !value.toString) {
  2190. value = '';
  2191. }
  2192. return value.toString();
  2193. }
  2194. /**
  2195. * 输出的值域最小值
  2196. * @protected
  2197. * @return {Number} 返回最小的值
  2198. */
  2199. ;
  2200. _proto.rangeMin = function rangeMin() {
  2201. return this.range[0];
  2202. }
  2203. /**
  2204. * 输出的值域最大值
  2205. * @protected
  2206. * @return {Number} 返回最大的值
  2207. */
  2208. ;
  2209. _proto.rangeMax = function rangeMax() {
  2210. var range = this.range;
  2211. return range[range.length - 1];
  2212. }
  2213. /**
  2214. * 度量转换后的结果,翻转回输入域
  2215. * @param {Number} value 需要翻转的数值
  2216. * @return {*} 度量的输入值
  2217. */
  2218. ;
  2219. _proto.invert = function invert(value) {
  2220. return value;
  2221. }
  2222. /**
  2223. * 将传入的值从非数值转换成数值格式,如分类字符串、时间字符串等
  2224. * @param {*} value 传入的值
  2225. * @return {Number} 转换的值
  2226. */
  2227. ;
  2228. _proto.translate = function translate(value) {
  2229. return value;
  2230. }
  2231. /**
  2232. * 进行度量转换
  2233. * @param {*} value 输入值
  2234. * @return {Number} 输出值,在设定的输出值域之间,默认[0,1]
  2235. */
  2236. ;
  2237. _proto.scale = function scale(value) {
  2238. return value;
  2239. }
  2240. /**
  2241. * 克隆一个新的scale,拥有跟当前scale相同的输入域、输出域等
  2242. * @return {Scale} 克隆的度量
  2243. */
  2244. ;
  2245. _proto.clone = function clone() {
  2246. var self = this;
  2247. var constr = self.constructor;
  2248. var cfg = {};
  2249. each(self, function (v, k) {
  2250. cfg[k] = self[k];
  2251. });
  2252. return new constr(cfg);
  2253. }
  2254. /**
  2255. * 更改度量的属性信息
  2256. * @param {Object} info 属性信息
  2257. * @chainable
  2258. * @return {Scale} 返回自身的引用
  2259. */
  2260. ;
  2261. _proto.change = function change(info) {
  2262. this.ticks = null;
  2263. mix(this, info);
  2264. this.init();
  2265. return this;
  2266. };
  2267. return Scale;
  2268. }();
  2269. module.exports = Scale;
  2270. /***/ }),
  2271. /* 27 */
  2272. /***/ (function(module, exports) {
  2273. var toString = {}.toString;
  2274. var isType = function isType(value, type) {
  2275. return toString.call(value) === '[object ' + type + ']';
  2276. };
  2277. module.exports = isType;
  2278. /***/ }),
  2279. /* 28 */
  2280. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2281. "use strict";
  2282. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(7);
  2283. var contains = function (arr, value) {
  2284. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a" /* default */])(arr)) {
  2285. return false;
  2286. }
  2287. return arr.indexOf(value) > -1;
  2288. };
  2289. /* harmony default export */ __webpack_exports__["a"] = (contains);
  2290. /***/ }),
  2291. /* 29 */
  2292. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2293. "use strict";
  2294. /* harmony default export */ __webpack_exports__["a"] = (function (value) {
  2295. /**
  2296. * isObject({}) => true
  2297. * isObject([1, 2, 3]) => true
  2298. * isObject(Function) => true
  2299. * isObject(null) => false
  2300. */
  2301. var type = typeof value;
  2302. return value !== null && type === 'object' || type === 'function';
  2303. });
  2304. /***/ }),
  2305. /* 30 */
  2306. /***/ (function(module, exports, __webpack_require__) {
  2307. "use strict";
  2308. var _interopRequireDefault = __webpack_require__(1);
  2309. var _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(22));
  2310. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  2311. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  2312. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  2313. var _const = __webpack_require__(47);
  2314. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  2315. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  2316. var Base = __webpack_require__(63);
  2317. var Plot = __webpack_require__(158);
  2318. var Util = __webpack_require__(0);
  2319. var Coord = __webpack_require__(159);
  2320. var Geom = __webpack_require__(17);
  2321. var ScaleController = __webpack_require__(167);
  2322. var AxisController = __webpack_require__(173);
  2323. var Global = __webpack_require__(6);
  2324. var _require = __webpack_require__(16),
  2325. Canvas = _require.Canvas;
  2326. var Helper = __webpack_require__(37);
  2327. function compare(a, b) {
  2328. return a - b;
  2329. }
  2330. function _isScaleExist(scales, compareScale) {
  2331. var flag = false;
  2332. Util.each(scales, function (scale) {
  2333. var scaleValues = [].concat(scale.values);
  2334. var compareScaleValues = [].concat(compareScale.values);
  2335. if (scale.type === compareScale.type && scale.field === compareScale.field && scaleValues.sort(compare).toString() === compareScaleValues.sort(compare).toString()) {
  2336. flag = true;
  2337. return;
  2338. }
  2339. });
  2340. return flag;
  2341. }
  2342. var Chart = /*#__PURE__*/function (_Base) {
  2343. (0, _inheritsLoose2["default"])(Chart, _Base);
  2344. var _super = _createSuper(Chart);
  2345. Chart.initPlugins = function initPlugins() {
  2346. return {
  2347. _plugins: [],
  2348. _cacheId: 0,
  2349. register: function register(plugins) {
  2350. var p = this._plugins;
  2351. [].concat(plugins).forEach(function (plugin) {
  2352. if (p.indexOf(plugin) === -1) {
  2353. p.push(plugin);
  2354. }
  2355. });
  2356. this._cacheId++;
  2357. },
  2358. unregister: function unregister(plugins) {
  2359. var p = this._plugins;
  2360. [].concat(plugins).forEach(function (plugin) {
  2361. var idx = p.indexOf(plugin);
  2362. if (idx !== -1) {
  2363. p.splice(idx, 1);
  2364. }
  2365. });
  2366. this._cacheId++;
  2367. },
  2368. clear: function clear() {
  2369. this._plugins = [];
  2370. this._cacheId++;
  2371. },
  2372. count: function count() {
  2373. return this._plugins.length;
  2374. },
  2375. getAll: function getAll() {
  2376. return this._plugins;
  2377. },
  2378. notify: function notify(chart, hook, args) {
  2379. var descriptors = this.descriptors(chart);
  2380. var ilen = descriptors.length;
  2381. var i;
  2382. var descriptor;
  2383. var plugin;
  2384. var params;
  2385. var method;
  2386. for (i = 0; i < ilen; ++i) {
  2387. descriptor = descriptors[i];
  2388. plugin = descriptor.plugin;
  2389. method = plugin[hook];
  2390. if (typeof method === 'function') {
  2391. params = [chart].concat(args || []);
  2392. if (method.apply(plugin, params) === false) {
  2393. return false;
  2394. }
  2395. }
  2396. }
  2397. return true;
  2398. },
  2399. descriptors: function descriptors(chart) {
  2400. var cache = chart._plugins || (chart._plugins = {});
  2401. if (cache.id === this._cacheId) {
  2402. return cache.descriptors;
  2403. }
  2404. var plugins = [];
  2405. var descriptors = [];
  2406. this._plugins.concat(chart && chart.get('plugins') || []).forEach(function (plugin) {
  2407. var idx = plugins.indexOf(plugin);
  2408. if (idx !== -1) {
  2409. return;
  2410. }
  2411. plugins.push(plugin);
  2412. descriptors.push({
  2413. plugin: plugin
  2414. });
  2415. });
  2416. cache.descriptors = descriptors;
  2417. cache.id = this._cacheId;
  2418. return descriptors;
  2419. }
  2420. };
  2421. };
  2422. var _proto = Chart.prototype;
  2423. _proto.getDefaultCfg = function getDefaultCfg() {
  2424. return {
  2425. /**
  2426. * the id of canvas
  2427. * @type {String}
  2428. */
  2429. id: null,
  2430. rendered: false,
  2431. /**
  2432. * padding
  2433. * @type {Array|Number}
  2434. */
  2435. padding: Global.padding,
  2436. /**
  2437. * data
  2438. * @type {Array}
  2439. */
  2440. data: null,
  2441. /**
  2442. * scales of chart
  2443. * @type {Object}
  2444. */
  2445. scales: {},
  2446. /**
  2447. * @private
  2448. * geometry instances
  2449. * @type {Array}
  2450. */
  2451. geoms: [],
  2452. /**
  2453. * scale configuration
  2454. * @type {Object}
  2455. */
  2456. colDefs: null,
  2457. pixelRatio: Global.pixelRatio,
  2458. /**
  2459. * filter options
  2460. * @type {Object}
  2461. */
  2462. filters: null,
  2463. appendPadding: Global.appendPadding
  2464. };
  2465. };
  2466. _proto._syncYScales = function _syncYScales() {
  2467. var syncY = this.get('syncY');
  2468. if (!syncY) {
  2469. return;
  2470. }
  2471. var geoms = this.get('geoms');
  2472. var syncScales = [];
  2473. var min = [];
  2474. var max = [];
  2475. Util.each(geoms, function (geom) {
  2476. var yScale = geom.getYScale();
  2477. if (yScale.isLinear) {
  2478. syncScales.push(yScale);
  2479. min.push(yScale.min);
  2480. max.push(yScale.max);
  2481. }
  2482. });
  2483. min = Math.min.apply(null, min);
  2484. max = Math.max.apply(null, max);
  2485. Util.each(syncScales, function (scale) {
  2486. scale.change({
  2487. min: min
  2488. });
  2489. scale.change({
  2490. max: max
  2491. });
  2492. });
  2493. };
  2494. _proto._getFieldsForLegend = function _getFieldsForLegend() {
  2495. var fields = [];
  2496. var geoms = this.get('geoms');
  2497. Util.each(geoms, function (geom) {
  2498. var attrOptions = geom.get('attrOptions');
  2499. var attrCfg = attrOptions.color;
  2500. if (attrCfg && attrCfg.field && Util.isString(attrCfg.field)) {
  2501. var arr = attrCfg.field.split('*');
  2502. Util.each(arr, function (item) {
  2503. if (fields.indexOf(item) === -1) {
  2504. fields.push(item);
  2505. }
  2506. });
  2507. }
  2508. });
  2509. return fields;
  2510. };
  2511. _proto._getScaleData = function _getScaleData(field) {
  2512. var data = this.get('data');
  2513. var filteredData = this.get('filteredData');
  2514. if (filteredData.length) {
  2515. var legendFields = this._getFieldsForLegend();
  2516. if (legendFields.indexOf(field) === -1) {
  2517. data = filteredData;
  2518. }
  2519. }
  2520. return data;
  2521. } // _updateScales() {
  2522. // const scaleController = this.get('scaleController');
  2523. // scaleController.updateScales();
  2524. // this._adjustScale();
  2525. // }
  2526. ;
  2527. _proto._adjustScale = function _adjustScale() {
  2528. var self = this;
  2529. var scaleController = self.get('scaleController'); // 看起来是为了让柱状图最小或最大都默认从0开始
  2530. var geoms = this.get('geoms');
  2531. for (var i = 0; i < geoms.length; i++) {
  2532. var geom = geoms[i];
  2533. if (geom.get('type') === 'interval') {
  2534. var yScale = geom.getYScale();
  2535. scaleController.adjustStartZero(yScale);
  2536. }
  2537. }
  2538. };
  2539. _proto._removeGeoms = function _removeGeoms() {
  2540. var geoms = this.get('geoms');
  2541. while (geoms.length > 0) {
  2542. var geom = geoms.shift();
  2543. geom.destroy();
  2544. }
  2545. };
  2546. _proto._clearGeoms = function _clearGeoms() {
  2547. var geoms = this.get('geoms');
  2548. for (var i = 0, length = geoms.length; i < length; i++) {
  2549. var geom = geoms[i];
  2550. geom.clear();
  2551. }
  2552. };
  2553. _proto._clearInner = function _clearInner() {
  2554. this._clearGeoms();
  2555. Chart.plugins.notify(this, 'clearInner');
  2556. this.get('axisController') && this.get('axisController').clear();
  2557. };
  2558. _proto._initFilteredData = function _initFilteredData() {
  2559. var filters = this.get('filters');
  2560. var data = this.get('data') || [];
  2561. if (filters) {
  2562. data = data.filter(function (obj) {
  2563. var rst = true;
  2564. Util.each(filters, function (fn, k) {
  2565. if (fn) {
  2566. rst = fn(obj[k], obj);
  2567. if (!rst) {
  2568. return false;
  2569. }
  2570. }
  2571. });
  2572. return rst;
  2573. });
  2574. }
  2575. this.set('filteredData', data);
  2576. };
  2577. _proto._changeGeomsData = function _changeGeomsData() {
  2578. var geoms = this.get('geoms');
  2579. var data = this.get('filteredData');
  2580. for (var i = 0, length = geoms.length; i < length; i++) {
  2581. var geom = geoms[i];
  2582. geom.changeData(data);
  2583. }
  2584. };
  2585. _proto._initGeom = function _initGeom(geom) {
  2586. var coord = this.get('coord');
  2587. var data = this.get('filteredData');
  2588. var colDefs = this.get('colDefs');
  2589. var middlePlot = this.get('middlePlot');
  2590. geom.set('chart', this);
  2591. geom.set('container', middlePlot.addGroup());
  2592. geom.set('data', data);
  2593. geom.set('coord', coord);
  2594. geom.set('colDefs', colDefs);
  2595. geom.init();
  2596. this.emit(_const.EVENT_AFTER_GEOM_INIT, geom);
  2597. };
  2598. _proto._initGeoms = function _initGeoms() {
  2599. var geoms = this.get('geoms');
  2600. for (var i = 0, length = geoms.length; i < length; i++) {
  2601. this._initGeom(geoms[i]);
  2602. }
  2603. };
  2604. _proto._initCoord = function _initCoord() {
  2605. var plot = this.get('plotRange');
  2606. var coordCfg = Util.mix({
  2607. type: 'cartesian'
  2608. }, this.get('coordCfg'), {
  2609. plot: plot
  2610. });
  2611. var type = coordCfg.type;
  2612. var C = Coord[Util.upperFirst(type)];
  2613. var coord = new C(coordCfg);
  2614. this.set('coord', coord);
  2615. };
  2616. _proto._initLayout = function _initLayout() {
  2617. var padding = this.get('_padding');
  2618. if (!padding) {
  2619. padding = this.get('margin') || this.get('padding');
  2620. padding = Util.parsePadding(padding);
  2621. }
  2622. var top = padding[0] === 'auto' ? 0 : padding[0];
  2623. var right = padding[1] === 'auto' ? 0 : padding[1];
  2624. var bottom = padding[2] === 'auto' ? 0 : padding[2];
  2625. var left = padding[3] === 'auto' ? 0 : padding[3];
  2626. var width = this.get('width');
  2627. var height = this.get('height');
  2628. var start = {
  2629. x: left,
  2630. y: top
  2631. };
  2632. var end = {
  2633. x: width - right,
  2634. y: height - bottom
  2635. };
  2636. var plot = this.get('plot');
  2637. if (plot) {
  2638. plot.reset(start, end);
  2639. return;
  2640. }
  2641. var newPlot = new Plot({
  2642. start: start,
  2643. end: end
  2644. });
  2645. this.set('plotRange', newPlot);
  2646. this.set('plot', newPlot);
  2647. };
  2648. _proto._initCanvas = function _initCanvas() {
  2649. var self = this;
  2650. try {
  2651. var canvas = new Canvas({
  2652. el: self.get('el') || self.get('id'),
  2653. context: self.get('context'),
  2654. pixelRatio: self.get('pixelRatio'),
  2655. width: self.get('width'),
  2656. height: self.get('height'),
  2657. fontFamily: Global.fontFamily
  2658. });
  2659. self.set('canvas', canvas);
  2660. self.set('el', canvas.get('el'));
  2661. self.set('width', canvas.get('width'));
  2662. self.set('height', canvas.get('height'));
  2663. } catch (error) {
  2664. throw error;
  2665. }
  2666. Chart.plugins.notify(self, 'afterCanvasInit');
  2667. };
  2668. _proto._initLayers = function _initLayers() {
  2669. var canvas = this.get('canvas');
  2670. this.set('backPlot', canvas.addGroup());
  2671. this.set('middlePlot', canvas.addGroup({
  2672. zIndex: 10
  2673. }));
  2674. this.set('frontPlot', canvas.addGroup({
  2675. zIndex: 20
  2676. }));
  2677. };
  2678. _proto._initEvents = function _initEvents() {
  2679. var _this2 = this;
  2680. // 数据更新后的一些更新
  2681. this.on(_const.EVENT_AFTER_DATA_CHANGE, function () {
  2682. // 数据更新后,重新设置filterdata
  2683. _this2._initFilteredData(); // 更新geoms里的数据
  2684. _this2._changeGeomsData();
  2685. _this2._adjustScale();
  2686. }); // 大小变化后的一些更新
  2687. this.on(_const.EVENT_AFTER_SIZE_CHANGE, function () {
  2688. _this2._initLayout(); // layout变化后,坐标轴也需要做相应的变化
  2689. var coord = _this2.get('coord');
  2690. if (coord) {
  2691. coord.reset(_this2.get('plot'));
  2692. }
  2693. });
  2694. };
  2695. _proto._initScaleController = function _initScaleController() {
  2696. var scaleController = new ScaleController({
  2697. chart: this
  2698. }); // 让colDefs 和 scaleController.defs 用同一个对象,这样就不用考虑同步的问题
  2699. this.set('colDefs', scaleController.defs); // 已经实例化的scales 也保持统一个对象
  2700. this.set('scales', scaleController.scales);
  2701. this.set('scaleController', scaleController);
  2702. };
  2703. _proto._clearScaleController = function _clearScaleController() {
  2704. var scaleController = this.get('scaleController');
  2705. scaleController.clear();
  2706. };
  2707. _proto._init = function _init() {
  2708. var self = this;
  2709. self._initCanvas();
  2710. self._initLayout();
  2711. self._initLayers();
  2712. self._initEvents();
  2713. self._initScaleController();
  2714. self.set('axisController', new AxisController({
  2715. frontPlot: self.get('frontPlot').addGroup({
  2716. className: 'axisContainer'
  2717. }),
  2718. backPlot: self.get('backPlot').addGroup({
  2719. className: 'axisContainer'
  2720. }),
  2721. chart: self
  2722. }));
  2723. Chart.plugins.notify(self, 'init');
  2724. };
  2725. function Chart(cfg) {
  2726. var _this;
  2727. _this = _Base.call(this, cfg) || this;
  2728. var self = (0, _assertThisInitialized2["default"])(_this);
  2729. Util.each(Geom, function (geomConstructor, className) {
  2730. var methodName = Util.lowerFirst(className);
  2731. self[methodName] = function (cfg) {
  2732. var geom = new geomConstructor(cfg);
  2733. self.addGeom(geom);
  2734. return geom;
  2735. };
  2736. });
  2737. self._init();
  2738. return _this;
  2739. }
  2740. _proto.init = function init() {
  2741. // 初始filterData
  2742. this._initFilteredData(); // initialization coordinate instance
  2743. this._initCoord();
  2744. Chart.plugins.notify(this, 'beforeGeomInit'); // init all geometry instances
  2745. this._initGeoms(); // 多 Y 轴的情况时,统一 Y 轴的数值范围。
  2746. this._syncYScales(); // do some adjust for data
  2747. this._adjustScale();
  2748. this.emit(_const.EVENT_AFTER_INIT);
  2749. }
  2750. /**
  2751. * set data and some scale configuration
  2752. * @chainable
  2753. * @param {Array} data the dataset to visualize
  2754. * @param {Object} colDefs the configuration for scales
  2755. * @return {Chart} return the chart instance
  2756. */
  2757. ;
  2758. _proto.source = function source(data, colDefs) {
  2759. this.set('data', data);
  2760. if (colDefs) {
  2761. this.scale(colDefs);
  2762. }
  2763. return this;
  2764. };
  2765. _proto.scale = function scale(field, cfg) {
  2766. var scaleController = this.get('scaleController');
  2767. scaleController.setFieldDef(field, cfg);
  2768. return this;
  2769. }
  2770. /**
  2771. * configure the axis
  2772. * @chainable
  2773. * @param {String|Boolean} field the field name of data
  2774. * @param {Object} cfg configuration for axis
  2775. * @return {Chart} return the chart instance
  2776. */
  2777. ;
  2778. _proto.axis = function axis(field, cfg) {
  2779. var axisController = this.get('axisController');
  2780. if (!field) {
  2781. axisController.axisCfg = null;
  2782. } else {
  2783. axisController.axisCfg = axisController.axisCfg || {};
  2784. axisController.axisCfg[field] = cfg;
  2785. }
  2786. return this;
  2787. }
  2788. /**
  2789. * configure the coordinate
  2790. * @chainable
  2791. * @param {String} type set the type of coodinate
  2792. * @param {Object} cfg configuration for coordinate
  2793. * @return {Chart} return the chart instance
  2794. */
  2795. ;
  2796. _proto.coord = function coord(type, cfg) {
  2797. var coordCfg;
  2798. if (Util.isObject(type)) {
  2799. coordCfg = type;
  2800. } else {
  2801. coordCfg = cfg || {};
  2802. coordCfg.type = type || 'cartesian';
  2803. }
  2804. this.set('coordCfg', coordCfg);
  2805. return this;
  2806. };
  2807. _proto.filter = function filter(field, condition) {
  2808. var filters = this.get('filters') || {};
  2809. filters[field] = condition;
  2810. this.set('filters', filters); // 如果已经render过,则再重新触发一次change
  2811. if (this.get('rendered')) {
  2812. this.emit(_const.EVENT_AFTER_DATA_CHANGE, this.get('data'));
  2813. }
  2814. }
  2815. /**
  2816. * render the chart
  2817. * @chainable
  2818. * @return {Chart} return the chart instance
  2819. */
  2820. ;
  2821. _proto.render = function render() {
  2822. var rendered = this.get('rendered');
  2823. var canvas = this.get('canvas');
  2824. var geoms = this.get('geoms');
  2825. if (!rendered) {
  2826. this.init();
  2827. this.set('rendered', true);
  2828. }
  2829. this.emit(_const.EVENT_BEFORE_RENDER);
  2830. Chart.plugins.notify(this, 'beforeGeomDraw');
  2831. this._renderAxis();
  2832. var middlePlot = this.get('middlePlot');
  2833. if (this.get('limitInPlot') && !middlePlot.attr('clip')) {
  2834. var coord = this.get('coord');
  2835. var clip = Helper.getClip(coord);
  2836. clip.set('canvas', middlePlot.get('canvas'));
  2837. middlePlot.attr('clip', clip);
  2838. }
  2839. for (var i = 0, length = geoms.length; i < length; i++) {
  2840. var geom = geoms[i];
  2841. geom.paint();
  2842. }
  2843. Chart.plugins.notify(this, 'afterGeomDraw');
  2844. canvas.sort();
  2845. this.get('frontPlot').sort();
  2846. Chart.plugins.notify(this, 'beforeCanvasDraw');
  2847. canvas.draw();
  2848. this.emit(_const.EVENT_AFTER_RENDER);
  2849. return this;
  2850. }
  2851. /**
  2852. * clear the chart, include geometris and all the shapes
  2853. * @chainable
  2854. * @return {Chart} return the chart
  2855. */
  2856. ;
  2857. _proto.clear = function clear() {
  2858. Chart.plugins.notify(this, 'clear');
  2859. this._clearInner();
  2860. this._removeGeoms();
  2861. this._clearScaleController();
  2862. this.set('legendItems', null);
  2863. this.set('filters', null);
  2864. this.set('isUpdate', false);
  2865. this.set('_padding', null);
  2866. this.set('rendered', false);
  2867. var canvas = this.get('canvas');
  2868. canvas.draw();
  2869. return this;
  2870. };
  2871. _proto.repaint = function repaint() {
  2872. // 如果在没有render之前就repaint的,就直接return退出
  2873. var rendered = this.get('rendered');
  2874. if (!rendered) {
  2875. return;
  2876. }
  2877. this.set('isUpdate', true);
  2878. this.set('legendItems', null);
  2879. Chart.plugins.notify(this, 'repaint');
  2880. this._clearInner();
  2881. this.render();
  2882. };
  2883. _proto.changeData = function changeData(data) {
  2884. this.emit(_const.EVENT_BEFORE_DATA_CHANGE, data);
  2885. this.set('data', data);
  2886. Chart.plugins.notify(this, 'changeData');
  2887. this.emit(_const.EVENT_AFTER_DATA_CHANGE, data);
  2888. this.set('_padding', null);
  2889. this.repaint();
  2890. };
  2891. _proto.changeSize = function changeSize(width, height) {
  2892. if (width) {
  2893. this.set('width', width);
  2894. } else {
  2895. width = this.get('width');
  2896. }
  2897. if (height) {
  2898. this.set('height', height);
  2899. } else {
  2900. height = this.get('height');
  2901. }
  2902. var canvas = this.get('canvas');
  2903. canvas.changeSize(width, height);
  2904. this.emit(_const.EVENT_AFTER_SIZE_CHANGE, {
  2905. width: width,
  2906. height: height
  2907. });
  2908. this.repaint();
  2909. return this;
  2910. };
  2911. _proto.destroy = function destroy() {
  2912. this.clear();
  2913. var canvas = this.get('canvas');
  2914. canvas.destroy();
  2915. Chart.plugins.notify(this, 'afterCanvasDestroyed');
  2916. if (this._interactions) {
  2917. Util.each(this._interactions, function (interaction) {
  2918. interaction.destroy();
  2919. });
  2920. }
  2921. _Base.prototype.destroy.call(this);
  2922. }
  2923. /**
  2924. * calculate dataset's position on canvas
  2925. * @param {Object} record the dataset
  2926. * @return {Object} return the position
  2927. */
  2928. ;
  2929. _proto.getPosition = function getPosition(record) {
  2930. var self = this;
  2931. var coord = self.get('coord');
  2932. var xScale = self.getXScale();
  2933. var yScale = self.getYScales()[0];
  2934. var xField = xScale.field;
  2935. var x = xScale.scale(record[xField]);
  2936. var yField = yScale.field;
  2937. var y = yScale.scale(record[yField]);
  2938. return coord.convertPoint({
  2939. x: x,
  2940. y: y
  2941. });
  2942. }
  2943. /**
  2944. * get the data item of the point
  2945. * @param {Object} point canvas position
  2946. * @return {Object} return the data item
  2947. */
  2948. ;
  2949. _proto.getRecord = function getRecord(point) {
  2950. var self = this;
  2951. var coord = self.get('coord');
  2952. var xScale = self.getXScale();
  2953. var yScale = self.getYScales()[0];
  2954. var invertPoint = coord.invertPoint(point);
  2955. var record = {};
  2956. record[xScale.field] = xScale.invert(invertPoint.x);
  2957. record[yScale.field] = yScale.invert(invertPoint.y);
  2958. return record;
  2959. }
  2960. /**
  2961. * get the dataset of the point
  2962. * @param {Object} point canvas position
  2963. * @return {Array} return the dataset
  2964. **/
  2965. ;
  2966. _proto.getSnapRecords = function getSnapRecords(point) {
  2967. var geom = this.get('geoms')[0];
  2968. var data = [];
  2969. if (geom) {
  2970. // need to judge
  2971. data = geom.getSnapRecords(point);
  2972. }
  2973. return data;
  2974. }
  2975. /**
  2976. * creat scale instances
  2977. * @param {String} field field name of data
  2978. * @return {Scale} return the scale
  2979. */
  2980. ;
  2981. _proto.createScale = function createScale(field) {
  2982. var data = this._getScaleData(field);
  2983. var scaleController = this.get('scaleController');
  2984. return scaleController.createScale(field, data);
  2985. }
  2986. /**
  2987. * @protected
  2988. * add geometry instance to geoms
  2989. * @param {Geom} geom geometry instance
  2990. */
  2991. ;
  2992. _proto.addGeom = function addGeom(geom) {
  2993. var rendered = this.get('rendered');
  2994. var geoms = this.get('geoms');
  2995. geoms.push(geom); // 如果图表已经渲染过了,则直接初始化geom
  2996. if (rendered) {
  2997. this._initGeom(geom);
  2998. }
  2999. }
  3000. /**
  3001. * get the scale of x axis
  3002. * @return {Scale} return the scale
  3003. */
  3004. ;
  3005. _proto.getXScale = function getXScale() {
  3006. var self = this;
  3007. var geoms = self.get('geoms');
  3008. var xScale = geoms[0].getXScale();
  3009. return xScale;
  3010. }
  3011. /**
  3012. * get the scale of y axis
  3013. * @return {Array} return the scale
  3014. */
  3015. ;
  3016. _proto.getYScales = function getYScales() {
  3017. var geoms = this.get('geoms');
  3018. var rst = [];
  3019. Util.each(geoms, function (geom) {
  3020. var yScale = geom.getYScale();
  3021. if (rst.indexOf(yScale) === -1) {
  3022. rst.push(yScale);
  3023. }
  3024. });
  3025. return rst;
  3026. };
  3027. _proto.getLegendItems = function getLegendItems() {
  3028. if (this.get('legendItems')) {
  3029. return this.get('legendItems');
  3030. }
  3031. var legendItems = {};
  3032. var scales = [];
  3033. var geoms = this.get('geoms');
  3034. Util.each(geoms, function (geom) {
  3035. var colorAttr = geom.getAttr('color');
  3036. if (colorAttr) {
  3037. var scale = colorAttr.getScale('color'); // 只支持分类图例
  3038. if (scale.isCategory && !_isScaleExist(scales, scale)) {
  3039. scales.push(scale);
  3040. var field = scale.field;
  3041. var ticks = scale.getTicks();
  3042. var items = [];
  3043. Util.each(ticks, function (tick) {
  3044. var text = tick.text;
  3045. var name = text;
  3046. var scaleValue = tick.value;
  3047. var value = scale.invert(scaleValue);
  3048. var color = colorAttr.mapping(value).join('') || Global.defaultColor;
  3049. var marker = {
  3050. fill: color,
  3051. radius: 3,
  3052. symbol: 'circle',
  3053. stroke: '#fff'
  3054. };
  3055. items.push({
  3056. name: name,
  3057. // for display
  3058. dataValue: value,
  3059. // the origin value
  3060. checked: true,
  3061. marker: marker
  3062. });
  3063. });
  3064. legendItems[field] = items;
  3065. }
  3066. }
  3067. });
  3068. this.set('legendItems', legendItems);
  3069. return legendItems;
  3070. } // register the plugins
  3071. ;
  3072. _proto.registerPlugins = function registerPlugins(plugins) {
  3073. var self = this;
  3074. var chartPlugins = self.get('plugins') || [];
  3075. if (!Util.isArray(chartPlugins)) {
  3076. chartPlugins = [chartPlugins];
  3077. }
  3078. [].concat(plugins).forEach(function (plugin) {
  3079. if (chartPlugins.indexOf(plugin) === -1) {
  3080. plugin.init && plugin.init(self); // init
  3081. chartPlugins.push(plugin);
  3082. }
  3083. });
  3084. Chart.plugins._cacheId++;
  3085. self.set('plugins', chartPlugins);
  3086. };
  3087. _proto._renderAxis = function _renderAxis() {
  3088. var axisController = this.get('axisController');
  3089. var xScale = this.getXScale();
  3090. var yScales = this.getYScales();
  3091. var coord = this.get('coord');
  3092. Chart.plugins.notify(this, 'beforeRenderAxis');
  3093. axisController.createAxis(coord, xScale, yScales);
  3094. };
  3095. _proto._isAutoPadding = function _isAutoPadding() {
  3096. if (this.get('_padding')) {
  3097. return false;
  3098. }
  3099. var padding = this.get('padding');
  3100. if (Util.isArray(padding)) {
  3101. return padding.indexOf('auto') !== -1;
  3102. }
  3103. return padding === 'auto';
  3104. };
  3105. _proto._updateLayout = function _updateLayout(padding) {
  3106. var width = this.get('width');
  3107. var height = this.get('height');
  3108. var start = {
  3109. x: padding[3],
  3110. y: padding[0]
  3111. };
  3112. var end = {
  3113. x: width - padding[1],
  3114. y: height - padding[2]
  3115. };
  3116. var plot = this.get('plot');
  3117. var coord = this.get('coord');
  3118. plot.reset(start, end);
  3119. coord.reset(plot);
  3120. };
  3121. return Chart;
  3122. }(Base);
  3123. Chart.plugins = Chart.initPlugins();
  3124. module.exports = Chart;
  3125. /***/ }),
  3126. /* 31 */
  3127. /***/ (function(module, exports, __webpack_require__) {
  3128. "use strict";
  3129. var Matrix = {
  3130. multiply: function multiply(m1, m2) {
  3131. var m11 = m1[0] * m2[0] + m1[2] * m2[1];
  3132. var m12 = m1[1] * m2[0] + m1[3] * m2[1];
  3133. var m21 = m1[0] * m2[2] + m1[2] * m2[3];
  3134. var m22 = m1[1] * m2[2] + m1[3] * m2[3];
  3135. var dx = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];
  3136. var dy = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];
  3137. return [m11, m12, m21, m22, dx, dy];
  3138. },
  3139. scale: function scale(out, m, v) {
  3140. out[0] = m[0] * v[0];
  3141. out[1] = m[1] * v[0];
  3142. out[2] = m[2] * v[1];
  3143. out[3] = m[3] * v[1];
  3144. out[4] = m[4];
  3145. out[5] = m[5];
  3146. return out;
  3147. },
  3148. rotate: function rotate(out, m, radian) {
  3149. var c = Math.cos(radian);
  3150. var s = Math.sin(radian);
  3151. var m11 = m[0] * c + m[2] * s;
  3152. var m12 = m[1] * c + m[3] * s;
  3153. var m21 = m[0] * -s + m[2] * c;
  3154. var m22 = m[1] * -s + m[3] * c;
  3155. out[0] = m11;
  3156. out[1] = m12;
  3157. out[2] = m21;
  3158. out[3] = m22;
  3159. out[4] = m[4];
  3160. out[5] = m[5];
  3161. return out;
  3162. },
  3163. translate: function translate(out, m, v) {
  3164. out[0] = m[0];
  3165. out[1] = m[1];
  3166. out[2] = m[2];
  3167. out[3] = m[3];
  3168. out[4] = m[4] + m[0] * v[0] + m[2] * v[1];
  3169. out[5] = m[5] + m[1] * v[0] + m[3] * v[1];
  3170. return out;
  3171. },
  3172. transform: function transform(m, actions) {
  3173. var out = [].concat(m);
  3174. for (var i = 0, len = actions.length; i < len; i++) {
  3175. var action = actions[i];
  3176. switch (action[0]) {
  3177. case 't':
  3178. Matrix.translate(out, out, [action[1], action[2]]);
  3179. break;
  3180. case 's':
  3181. Matrix.scale(out, out, [action[1], action[2]]);
  3182. break;
  3183. case 'r':
  3184. Matrix.rotate(out, out, action[1]);
  3185. break;
  3186. default:
  3187. break;
  3188. }
  3189. }
  3190. return out;
  3191. }
  3192. };
  3193. module.exports = Matrix;
  3194. /***/ }),
  3195. /* 32 */
  3196. /***/ (function(module, exports, __webpack_require__) {
  3197. "use strict";
  3198. exports.__esModule = true;
  3199. exports["default"] = void 0;
  3200. var _util = __webpack_require__(20);
  3201. /**
  3202. * @fileOverview the Attribute base class
  3203. */
  3204. function toScaleString(scale, value) {
  3205. if ((0, _util.isString)(value)) {
  3206. return value;
  3207. }
  3208. return scale.invert(scale.scale(value));
  3209. }
  3210. /**
  3211. * 所有视觉通道属性的基类
  3212. * @class Attr
  3213. */
  3214. var AttributeBase = /*#__PURE__*/function () {
  3215. function AttributeBase(cfg) {
  3216. var _this = this;
  3217. /**
  3218. * 属性的类型
  3219. * @type {String}
  3220. */
  3221. this.type = 'base';
  3222. /**
  3223. * 属性的名称
  3224. * @type {String}
  3225. */
  3226. this.name = null;
  3227. /**
  3228. * 回调函数
  3229. * @type {Function}
  3230. */
  3231. this.method = null;
  3232. /**
  3233. * 备选的值数组
  3234. * @type {Array}
  3235. */
  3236. this.values = [];
  3237. /**
  3238. * 属性内部的度量
  3239. * @type {Array}
  3240. */
  3241. this.scales = [];
  3242. /**
  3243. * 是否通过线性取值, 如果未指定,则根据数值的类型判定
  3244. * @type {Boolean}
  3245. */
  3246. this.linear = null;
  3247. /**
  3248. * 当用户设置的 callback 返回 null 时, 应该返回默认 callback 中的值
  3249. */
  3250. var mixedCallback = null;
  3251. var defaultCallback = this.callback;
  3252. if (cfg.callback) {
  3253. var userCallback = cfg.callback;
  3254. mixedCallback = function mixedCallback() {
  3255. for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
  3256. params[_key] = arguments[_key];
  3257. }
  3258. var ret = userCallback.apply(void 0, params);
  3259. if ((0, _util.isNil)(ret)) {
  3260. ret = defaultCallback.apply(_this, params);
  3261. }
  3262. return ret;
  3263. };
  3264. }
  3265. (0, _util.mix)(this, cfg);
  3266. if (mixedCallback) {
  3267. (0, _util.mix)(this, {
  3268. callback: mixedCallback
  3269. });
  3270. }
  3271. } // 获取属性值,将值映射到视觉通道
  3272. var _proto = AttributeBase.prototype;
  3273. _proto._getAttrValue = function _getAttrValue(scale, value) {
  3274. var values = this.values;
  3275. if (scale.isCategory && !this.linear) {
  3276. var index = scale.translate(value);
  3277. return values[index % values.length];
  3278. }
  3279. var percent = scale.scale(value);
  3280. return this.getLinearValue(percent);
  3281. }
  3282. /**
  3283. * 如果进行线性映射,返回对应的映射值
  3284. * @protected
  3285. * @param {Number} percent 百分比
  3286. * @return {*} 颜色值、形状、大小等
  3287. */
  3288. ;
  3289. _proto.getLinearValue = function getLinearValue(percent) {
  3290. var values = this.values;
  3291. var steps = values.length - 1;
  3292. var step = Math.floor(steps * percent);
  3293. var leftPercent = steps * percent - step;
  3294. var start = values[step];
  3295. var end = step === steps ? start : values[step + 1];
  3296. var rstValue = start + (end - start) * leftPercent;
  3297. return rstValue;
  3298. }
  3299. /**
  3300. * 默认的回调函数
  3301. * @param {*} value 回调函数的值
  3302. * @type {Function}
  3303. * @return {Array} 返回映射后的值
  3304. */
  3305. ;
  3306. _proto.callback = function callback(value) {
  3307. var self = this;
  3308. var scale = self.scales[0];
  3309. var rstValue = null;
  3310. if (scale.type === 'identity') {
  3311. rstValue = scale.value;
  3312. } else {
  3313. rstValue = self._getAttrValue(scale, value);
  3314. }
  3315. return rstValue;
  3316. }
  3317. /**
  3318. * 根据度量获取属性名
  3319. * @return {Array} dims of this Attribute
  3320. */
  3321. ;
  3322. _proto.getNames = function getNames() {
  3323. var scales = this.scales;
  3324. var names = this.names;
  3325. var length = Math.min(scales.length, names.length);
  3326. var rst = [];
  3327. for (var i = 0; i < length; i++) {
  3328. rst.push(names[i]);
  3329. }
  3330. return rst;
  3331. }
  3332. /**
  3333. * 根据度量获取维度名
  3334. * @return {Array} dims of this Attribute
  3335. */
  3336. ;
  3337. _proto.getFields = function getFields() {
  3338. var scales = this.scales;
  3339. var rst = [];
  3340. (0, _util.each)(scales, function (scale) {
  3341. rst.push(scale.field);
  3342. });
  3343. return rst;
  3344. }
  3345. /**
  3346. * 根据名称获取度量
  3347. * @param {String} name the name of scale
  3348. * @return {Scale} scale
  3349. */
  3350. ;
  3351. _proto.getScale = function getScale(name) {
  3352. var scales = this.scales;
  3353. var names = this.names;
  3354. var index = names.indexOf(name);
  3355. return scales[index];
  3356. }
  3357. /**
  3358. * 映射数据
  3359. * @param {*} param1...paramn 多个数值
  3360. * @return {Array} 映射的值组成的数组
  3361. */
  3362. ;
  3363. _proto.mapping = function mapping() {
  3364. var scales = this.scales;
  3365. var callback = this.callback;
  3366. for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
  3367. params[_key2] = arguments[_key2];
  3368. }
  3369. var values = params;
  3370. if (callback) {
  3371. for (var i = 0, len = params.length; i < len; i++) {
  3372. params[i] = this._toOriginParam(params[i], scales[i]);
  3373. }
  3374. values = callback.apply(this, params);
  3375. }
  3376. values = [].concat(values);
  3377. return values;
  3378. } // 原始的参数
  3379. ;
  3380. _proto._toOriginParam = function _toOriginParam(param, scale) {
  3381. var rst = param;
  3382. if (!scale.isLinear) {
  3383. if ((0, _util.isArray)(param)) {
  3384. rst = [];
  3385. for (var i = 0, len = param.length; i < len; i++) {
  3386. rst.push(toScaleString(scale, param[i]));
  3387. }
  3388. } else {
  3389. rst = toScaleString(scale, param);
  3390. }
  3391. }
  3392. return rst;
  3393. };
  3394. return AttributeBase;
  3395. }();
  3396. var _default = AttributeBase;
  3397. exports["default"] = _default;
  3398. /***/ }),
  3399. /* 33 */
  3400. /***/ (function(module, exports, __webpack_require__) {
  3401. var mix = __webpack_require__(64);
  3402. var Adjust = /*#__PURE__*/function () {
  3403. var _proto = Adjust.prototype;
  3404. _proto._initDefaultCfg = function _initDefaultCfg() {
  3405. this.adjustNames = ['x', 'y']; // 调整的维度,默认,x,y都做调整
  3406. };
  3407. function Adjust(cfg) {
  3408. this._initDefaultCfg();
  3409. mix(this, cfg);
  3410. }
  3411. /**
  3412. * @override
  3413. */
  3414. _proto.processAdjust = function processAdjust()
  3415. /* dataArray */
  3416. {};
  3417. return Adjust;
  3418. }();
  3419. module.exports = Adjust;
  3420. /***/ }),
  3421. /* 34 */
  3422. /***/ (function(module, exports, __webpack_require__) {
  3423. var isType = __webpack_require__(27);
  3424. var isArray = Array.isArray ? Array.isArray : function (value) {
  3425. return isType(value, 'Array');
  3426. };
  3427. module.exports = isArray;
  3428. /***/ }),
  3429. /* 35 */
  3430. /***/ (function(module, exports) {
  3431. // isFinite,
  3432. var isNil = function isNil(value) {
  3433. /**
  3434. * isNil(null) => true
  3435. * isNil() => true
  3436. */
  3437. return value === null || value === undefined;
  3438. };
  3439. module.exports = isNil;
  3440. /***/ }),
  3441. /* 36 */
  3442. /***/ (function(module, exports, __webpack_require__) {
  3443. /**
  3444. * 判断是否数字
  3445. * @return {Boolean} 是否数字
  3446. */
  3447. var isType = __webpack_require__(27);
  3448. var isNumber = function isNumber(value) {
  3449. return isType(value, 'Number');
  3450. };
  3451. module.exports = isNumber;
  3452. /***/ }),
  3453. /* 37 */
  3454. /***/ (function(module, exports, __webpack_require__) {
  3455. "use strict";
  3456. exports.__esModule = true;
  3457. exports.getClip = getClip;
  3458. exports.isPointInPlot = isPointInPlot;
  3459. var _require = __webpack_require__(16),
  3460. Shape = _require.Shape;
  3461. function getClip(coord) {
  3462. var start = coord.start;
  3463. var end = coord.end;
  3464. var width = end.x - start.x;
  3465. var height = Math.abs(end.y - start.y);
  3466. var margin = 10;
  3467. var clip;
  3468. if (coord.isPolar) {
  3469. var circleRadius = coord.circleRadius,
  3470. center = coord.center,
  3471. startAngle = coord.startAngle,
  3472. endAngle = coord.endAngle;
  3473. clip = new Shape.Sector({
  3474. attrs: {
  3475. x: center.x,
  3476. y: center.y,
  3477. r: circleRadius,
  3478. r0: 0,
  3479. startAngle: startAngle,
  3480. endAngle: endAngle
  3481. }
  3482. });
  3483. } else {
  3484. clip = new Shape.Rect({
  3485. attrs: {
  3486. x: start.x,
  3487. y: end.y - margin,
  3488. width: width,
  3489. height: height + 2 * margin
  3490. }
  3491. });
  3492. }
  3493. clip.isClip = true;
  3494. return clip;
  3495. }
  3496. function isPointInPlot(point, plot) {
  3497. var x = point.x,
  3498. y = point.y;
  3499. var tl = plot.tl,
  3500. tr = plot.tr,
  3501. br = plot.br;
  3502. return x >= tl.x && x <= tr.x && y >= tl.y && y <= br.y;
  3503. }
  3504. /***/ }),
  3505. /* 38 */
  3506. /***/ (function(module, exports, __webpack_require__) {
  3507. "use strict";
  3508. /**
  3509. * @fileOverview shape util
  3510. * @author dxq613@gmail.com
  3511. */
  3512. var Util = __webpack_require__(0);
  3513. var ShapeUtil = {
  3514. splitPoints: function splitPoints(obj) {
  3515. var points = [];
  3516. var x = obj.x;
  3517. var y = obj.y;
  3518. y = Util.isArray(y) ? y : [y];
  3519. y.forEach(function (yItem, index) {
  3520. var point = {
  3521. x: Util.isArray(x) ? x[index] : x,
  3522. y: yItem
  3523. };
  3524. points.push(point);
  3525. });
  3526. return points;
  3527. },
  3528. splitArray: function splitArray(data, yField, connectNulls) {
  3529. if (!data.length) return [];
  3530. var arr = [];
  3531. var tmp = [];
  3532. var yValue;
  3533. Util.each(data, function (obj) {
  3534. yValue = obj._origin ? obj._origin[yField] : obj[yField];
  3535. if (connectNulls) {
  3536. if (!Util.isNil(yValue)) {
  3537. tmp.push(obj);
  3538. }
  3539. } else {
  3540. if (Util.isArray(yValue) && Util.isNil(yValue[0]) || Util.isNil(yValue)) {
  3541. if (tmp.length) {
  3542. arr.push(tmp);
  3543. tmp = [];
  3544. }
  3545. } else {
  3546. tmp.push(obj);
  3547. }
  3548. }
  3549. });
  3550. if (tmp.length) {
  3551. arr.push(tmp);
  3552. }
  3553. return arr;
  3554. }
  3555. };
  3556. module.exports = ShapeUtil;
  3557. /***/ }),
  3558. /* 39 */
  3559. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  3560. "use strict";
  3561. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  3562. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(7);
  3563. var filter = function (arr, func) {
  3564. if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a" /* default */])(arr)) {
  3565. return arr;
  3566. }
  3567. var result = [];
  3568. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(arr, function (value, index) {
  3569. if (func(value, index)) {
  3570. result.push(value);
  3571. }
  3572. });
  3573. return result;
  3574. };
  3575. /* harmony default export */ __webpack_exports__["a"] = (filter);
  3576. /***/ }),
  3577. /* 40 */
  3578. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  3579. "use strict";
  3580. var isObjectLike = function (value) {
  3581. /**
  3582. * isObjectLike({}) => true
  3583. * isObjectLike([1, 2, 3]) => true
  3584. * isObjectLike(Function) => false
  3585. * isObjectLike(null) => false
  3586. */
  3587. return typeof value === 'object' && value !== null;
  3588. };
  3589. /* harmony default export */ __webpack_exports__["a"] = (isObjectLike);
  3590. /***/ }),
  3591. /* 41 */
  3592. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  3593. "use strict";
  3594. /* harmony export (immutable) */ __webpack_exports__["a"] = mix;
  3595. // FIXME: Mutable param should be forbidden in static lang.
  3596. function _mix(dist, obj) {
  3597. for (var key in obj) {
  3598. if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {
  3599. dist[key] = obj[key];
  3600. }
  3601. }
  3602. }
  3603. function mix(dist, src1, src2, src3) {
  3604. if (src1) _mix(dist, src1);
  3605. if (src2) _mix(dist, src2);
  3606. if (src3) _mix(dist, src3);
  3607. return dist;
  3608. }
  3609. /***/ }),
  3610. /* 42 */
  3611. /***/ (function(module, exports, __webpack_require__) {
  3612. "use strict";
  3613. exports.__esModule = true;
  3614. exports["default"] = void 0;
  3615. var _common = __webpack_require__(0);
  3616. // 实现简单的事件机制
  3617. var EventEmit = /*#__PURE__*/function () {
  3618. function EventEmit() {
  3619. this.__events = {};
  3620. }
  3621. var _proto = EventEmit.prototype;
  3622. _proto.on = function on(type, listener) {
  3623. if (!type || !listener) {
  3624. return;
  3625. }
  3626. var events = this.__events[type] || [];
  3627. events.push(listener);
  3628. this.__events[type] = events;
  3629. };
  3630. _proto.emit = function emit(type, e) {
  3631. var _this = this;
  3632. if ((0, _common.isObject)(type)) {
  3633. e = type;
  3634. type = e && e.type;
  3635. }
  3636. if (!type) {
  3637. return;
  3638. }
  3639. var events = this.__events[type];
  3640. if (!events || !events.length) {
  3641. return;
  3642. }
  3643. events.forEach(function (listener) {
  3644. listener.call(_this, e);
  3645. });
  3646. };
  3647. _proto.off = function off(type, listener) {
  3648. var __events = this.__events;
  3649. var events = __events[type];
  3650. if (!events || !events.length) {
  3651. return;
  3652. } // 如果没有指定方法,则删除所有项
  3653. if (!listener) {
  3654. delete __events[type];
  3655. return;
  3656. } // 删除指定的 listener
  3657. for (var i = 0, len = events.length; i < len; i++) {
  3658. if (events[i] === listener) {
  3659. events.splice(i, 1);
  3660. }
  3661. }
  3662. };
  3663. return EventEmit;
  3664. }();
  3665. var _default = EventEmit;
  3666. exports["default"] = _default;
  3667. /***/ }),
  3668. /* 43 */
  3669. /***/ (function(module, exports, __webpack_require__) {
  3670. "use strict";
  3671. var Util = __webpack_require__(0);
  3672. var MatrixUtil = __webpack_require__(31);
  3673. var Vector2 = __webpack_require__(13);
  3674. var defaultMatrix = [1, 0, 0, 1, 0, 0];
  3675. var Base = /*#__PURE__*/function () {
  3676. var _proto = Base.prototype;
  3677. _proto._initDefaultCfg = function _initDefaultCfg() {};
  3678. function Base(cfg) {
  3679. this._initDefaultCfg();
  3680. Util.mix(this, cfg);
  3681. var start;
  3682. var end;
  3683. if (this.plot) {
  3684. start = this.plot.bl;
  3685. end = this.plot.tr;
  3686. this.start = start;
  3687. this.end = end;
  3688. } else {
  3689. start = this.start;
  3690. end = this.end;
  3691. }
  3692. this.init(start, end);
  3693. }
  3694. _proto._scale = function _scale(s1, s2) {
  3695. var matrix = this.matrix;
  3696. var center = this.center;
  3697. MatrixUtil.translate(matrix, matrix, [center.x, center.y]);
  3698. MatrixUtil.scale(matrix, matrix, [s1, s2]);
  3699. MatrixUtil.translate(matrix, matrix, [-center.x, -center.y]);
  3700. };
  3701. _proto.init = function init(start, end) {
  3702. this.matrix = [].concat(defaultMatrix); // 设置中心点
  3703. this.center = {
  3704. x: (end.x - start.x) / 2 + start.x,
  3705. y: (end.y - start.y) / 2 + start.y
  3706. };
  3707. if (this.scale) {
  3708. this._scale(this.scale[0], this.scale[1]);
  3709. }
  3710. };
  3711. _proto.convertPoint = function convertPoint(point) {
  3712. var _this$_convertPoint = this._convertPoint(point),
  3713. x = _this$_convertPoint.x,
  3714. y = _this$_convertPoint.y;
  3715. var vector = [x, y];
  3716. Vector2.transformMat2d(vector, vector, this.matrix);
  3717. return {
  3718. x: vector[0],
  3719. y: vector[1]
  3720. };
  3721. };
  3722. _proto.invertPoint = function invertPoint(point) {
  3723. return this._invertPoint(point);
  3724. };
  3725. _proto._convertPoint = function _convertPoint(point) {
  3726. return point;
  3727. };
  3728. _proto._invertPoint = function _invertPoint(point) {
  3729. return point;
  3730. };
  3731. _proto.reset = function reset(plot) {
  3732. this.plot = plot;
  3733. var bl = plot.bl,
  3734. tr = plot.tr;
  3735. this.start = bl;
  3736. this.end = tr;
  3737. this.init(bl, tr);
  3738. };
  3739. return Base;
  3740. }();
  3741. module.exports = Base;
  3742. /***/ }),
  3743. /* 44 */
  3744. /***/ (function(module, exports) {
  3745. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
  3746. return typeof obj;
  3747. } : function (obj) {
  3748. return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
  3749. };
  3750. var isObject = function isObject(value) {
  3751. /**
  3752. * isObject({}) => true
  3753. * isObject([1, 2, 3]) => true
  3754. * isObject(Function) => true
  3755. * isObject(null) => false
  3756. */
  3757. var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
  3758. return value !== null && type === 'object' || type === 'function';
  3759. };
  3760. module.exports = isObject;
  3761. /***/ }),
  3762. /* 45 */
  3763. /***/ (function(module, exports, __webpack_require__) {
  3764. "use strict";
  3765. var Util = __webpack_require__(0);
  3766. var Global = __webpack_require__(6);
  3767. var Vector2 = __webpack_require__(13);
  3768. var Abastract = /*#__PURE__*/function () {
  3769. var _proto = Abastract.prototype;
  3770. _proto._initDefaultCfg = function _initDefaultCfg() {
  3771. /**
  3772. * ticks
  3773. * @type {Array}
  3774. */
  3775. this.ticks = [];
  3776. /**
  3777. * the configuration for tickLine
  3778. * @type {Object}
  3779. */
  3780. this.tickLine = {};
  3781. /**
  3782. * the direction of ticks, 1 means clockwise
  3783. * @type {Number}
  3784. */
  3785. this.offsetFactor = 1;
  3786. /**
  3787. * the top container
  3788. * @type {container}
  3789. */
  3790. this.frontContainer = null;
  3791. /**
  3792. * the back container
  3793. * @type {[type]}
  3794. */
  3795. this.backContainer = null;
  3796. /**
  3797. * points for draw grid line
  3798. * @type {Array}
  3799. */
  3800. this.gridPoints = [];
  3801. };
  3802. function Abastract(cfg) {
  3803. this._initDefaultCfg();
  3804. Util.mix(this, cfg);
  3805. this.draw();
  3806. }
  3807. _proto.draw = function draw() {
  3808. var line = this.line,
  3809. tickLine = this.tickLine,
  3810. label = this.label,
  3811. grid = this.grid;
  3812. grid && this.drawGrid(grid); // draw the grid lines
  3813. tickLine && this.drawTicks(tickLine); // draw the tickLine
  3814. line && this.drawLine(line); // draw axis line
  3815. label && this.drawLabels(); // draw ticks
  3816. };
  3817. _proto.drawTicks = function drawTicks(tickCfg) {
  3818. var self = this;
  3819. var ticks = self.ticks;
  3820. var length = tickCfg.length;
  3821. var container = self.getContainer(tickCfg.top);
  3822. Util.each(ticks, function (tick) {
  3823. var start = self.getOffsetPoint(tick.value);
  3824. var end = self.getSidePoint(start, length);
  3825. var shape = container.addShape('line', {
  3826. className: 'axis-tick',
  3827. attrs: Util.mix({
  3828. x1: start.x,
  3829. y1: start.y,
  3830. x2: end.x,
  3831. y2: end.y
  3832. }, tickCfg)
  3833. });
  3834. shape._id = self._id + '-ticks';
  3835. });
  3836. };
  3837. _proto.drawLabels = function drawLabels() {
  3838. var self = this;
  3839. var labelOffset = self.labelOffset;
  3840. var labels = self.labels;
  3841. Util.each(labels, function (labelShape) {
  3842. var container = self.getContainer(labelShape.get('top'));
  3843. var start = self.getOffsetPoint(labelShape.get('value'));
  3844. var _self$getSidePoint = self.getSidePoint(start, labelOffset),
  3845. x = _self$getSidePoint.x,
  3846. y = _self$getSidePoint.y;
  3847. labelShape.attr(Util.mix({
  3848. x: x,
  3849. y: y
  3850. }, self.getTextAlignInfo(start, labelOffset), labelShape.get('textStyle')));
  3851. labelShape._id = self._id + '-' + labelShape.attr('text');
  3852. container.add(labelShape);
  3853. });
  3854. };
  3855. _proto.drawLine = function drawLine() {};
  3856. _proto.drawGrid = function drawGrid(grid) {
  3857. var self = this;
  3858. var gridPoints = self.gridPoints,
  3859. ticks = self.ticks;
  3860. var gridCfg = grid;
  3861. var count = gridPoints.length;
  3862. Util.each(gridPoints, function (subPoints, index) {
  3863. if (Util.isFunction(grid)) {
  3864. var tick = ticks[index] || {};
  3865. var executedGrid = grid(tick.text, index, count);
  3866. gridCfg = executedGrid ? Util.mix({}, Global._defaultAxis.grid, executedGrid) : null;
  3867. }
  3868. if (gridCfg) {
  3869. var type = gridCfg.type; // has two types: 'line' and 'arc'
  3870. var points = subPoints.points;
  3871. var container = self.getContainer(gridCfg.top);
  3872. var shape;
  3873. if (type === 'arc') {
  3874. var center = self.center,
  3875. startAngle = self.startAngle,
  3876. endAngle = self.endAngle;
  3877. var radius = Vector2.length([points[0].x - center.x, points[0].y - center.y]);
  3878. shape = container.addShape('Arc', {
  3879. className: 'axis-grid',
  3880. attrs: Util.mix({
  3881. x: center.x,
  3882. y: center.y,
  3883. startAngle: startAngle,
  3884. endAngle: endAngle,
  3885. r: radius
  3886. }, gridCfg)
  3887. });
  3888. } else {
  3889. shape = container.addShape('Polyline', {
  3890. className: 'axis-grid',
  3891. attrs: Util.mix({
  3892. points: points
  3893. }, gridCfg)
  3894. });
  3895. }
  3896. shape._id = subPoints._id;
  3897. }
  3898. });
  3899. };
  3900. _proto.getOffsetPoint = function getOffsetPoint() {};
  3901. _proto.getAxisVector = function getAxisVector() {};
  3902. _proto.getOffsetVector = function getOffsetVector(point, offset) {
  3903. var self = this;
  3904. var axisVector = self.getAxisVector(point);
  3905. var normal = Vector2.normalize([], axisVector);
  3906. var factor = self.offsetFactor;
  3907. var verticalVector = [normal[1] * -1 * factor, normal[0] * factor];
  3908. return Vector2.scale([], verticalVector, offset);
  3909. };
  3910. _proto.getSidePoint = function getSidePoint(point, offset) {
  3911. var self = this;
  3912. var offsetVector = self.getOffsetVector(point, offset);
  3913. return {
  3914. x: point.x + offsetVector[0],
  3915. y: point.y + offsetVector[1]
  3916. };
  3917. };
  3918. _proto.getTextAlignInfo = function getTextAlignInfo(point, offset) {
  3919. var self = this;
  3920. var offsetVector = self.getOffsetVector(point, offset);
  3921. var align;
  3922. var baseLine;
  3923. if (offsetVector[0] > 0) {
  3924. align = 'left';
  3925. } else if (offsetVector[0] < 0) {
  3926. align = 'right';
  3927. } else {
  3928. align = 'center';
  3929. }
  3930. if (offsetVector[1] > 0) {
  3931. baseLine = 'top';
  3932. } else if (offsetVector[1] < 0) {
  3933. baseLine = 'bottom';
  3934. } else {
  3935. baseLine = 'middle';
  3936. }
  3937. return {
  3938. textAlign: align,
  3939. textBaseline: baseLine
  3940. };
  3941. };
  3942. _proto.getContainer = function getContainer(isTop) {
  3943. var frontContainer = this.frontContainer,
  3944. backContainer = this.backContainer;
  3945. return isTop ? frontContainer : backContainer;
  3946. };
  3947. return Abastract;
  3948. }();
  3949. module.exports = Abastract;
  3950. /***/ }),
  3951. /* 46 */
  3952. /***/ (function(module, exports, __webpack_require__) {
  3953. "use strict";
  3954. var Util = __webpack_require__(0);
  3955. var MatrixUtil = __webpack_require__(31);
  3956. var Vector2 = __webpack_require__(13);
  3957. var StyleUtil = __webpack_require__(179);
  3958. function isUnchanged(m) {
  3959. return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;
  3960. }
  3961. var ALIAS_ATTRS_MAP = {
  3962. stroke: 'strokeStyle',
  3963. fill: 'fillStyle',
  3964. opacity: 'globalAlpha'
  3965. };
  3966. var SHAPE_ATTRS = ['fillStyle', 'font', 'globalAlpha', 'lineCap', 'lineWidth', 'lineJoin', 'miterLimit', 'shadowBlur', 'shadowColor', 'shadowOffsetX', 'shadowOffsetY', 'strokeStyle', 'textAlign', 'textBaseline', 'lineDash', 'shadow' // 兼容支付宝小程序
  3967. ];
  3968. var CLIP_SHAPES = ['circle', 'sector', 'polygon', 'rect', 'polyline'];
  3969. var Element = /*#__PURE__*/function () {
  3970. var _proto = Element.prototype;
  3971. _proto._initProperties = function _initProperties() {
  3972. this._attrs = {
  3973. zIndex: 0,
  3974. visible: true,
  3975. destroyed: false
  3976. };
  3977. };
  3978. function Element(cfg) {
  3979. this._initProperties();
  3980. Util.mix(this._attrs, cfg);
  3981. var attrs = this._attrs.attrs;
  3982. if (attrs) {
  3983. this.initAttrs(attrs);
  3984. }
  3985. this.initTransform();
  3986. }
  3987. _proto.get = function get(name) {
  3988. return this._attrs[name];
  3989. };
  3990. _proto.set = function set(name, value) {
  3991. this._attrs[name] = value;
  3992. };
  3993. _proto.isGroup = function isGroup() {
  3994. return this.get('isGroup');
  3995. };
  3996. _proto.isShape = function isShape() {
  3997. return this.get('isShape');
  3998. };
  3999. _proto.initAttrs = function initAttrs(attrs) {
  4000. this.attr(Util.mix(this.getDefaultAttrs(), attrs));
  4001. };
  4002. _proto.getDefaultAttrs = function getDefaultAttrs() {
  4003. return {};
  4004. };
  4005. _proto._setAttr = function _setAttr(name, value) {
  4006. var attrs = this._attrs.attrs;
  4007. if (name === 'clip') {
  4008. value = this._setAttrClip(value);
  4009. } else {
  4010. var alias = ALIAS_ATTRS_MAP[name];
  4011. if (alias) {
  4012. attrs[alias] = value;
  4013. }
  4014. }
  4015. attrs[name] = value;
  4016. };
  4017. _proto._getAttr = function _getAttr(name) {
  4018. return this._attrs.attrs[name];
  4019. } // _afterAttrsSet() {}
  4020. ;
  4021. _proto._setAttrClip = function _setAttrClip(clip) {
  4022. if (clip && CLIP_SHAPES.indexOf(clip._attrs.type) > -1) {
  4023. if (clip.get('canvas') === null) {
  4024. clip = Object.assign({}, clip);
  4025. }
  4026. clip.set('parent', this.get('parent'));
  4027. clip.set('context', this.get('context'));
  4028. return clip;
  4029. }
  4030. return null;
  4031. };
  4032. _proto.attr = function attr(name, value) {
  4033. var self = this;
  4034. if (self.get('destroyed')) return null;
  4035. var argumentsLen = arguments.length;
  4036. if (argumentsLen === 0) {
  4037. return self._attrs.attrs;
  4038. }
  4039. if (Util.isObject(name)) {
  4040. this._attrs.bbox = null;
  4041. for (var k in name) {
  4042. self._setAttr(k, name[k]);
  4043. }
  4044. if (self._afterAttrsSet) {
  4045. self._afterAttrsSet();
  4046. }
  4047. return self;
  4048. }
  4049. if (argumentsLen === 2) {
  4050. this._attrs.bbox = null;
  4051. self._setAttr(name, value);
  4052. if (self._afterAttrsSet) {
  4053. self._afterAttrsSet();
  4054. }
  4055. return self;
  4056. }
  4057. return self._getAttr(name);
  4058. };
  4059. _proto.getParent = function getParent() {
  4060. return this.get('parent');
  4061. };
  4062. _proto.draw = function draw(context) {
  4063. if (this.get('destroyed')) {
  4064. return;
  4065. }
  4066. if (this.get('visible')) {
  4067. this.setContext(context);
  4068. this.drawInner(context);
  4069. this.restoreContext(context);
  4070. }
  4071. };
  4072. _proto.setContext = function setContext(context) {
  4073. var clip = this._attrs.attrs.clip;
  4074. context.save();
  4075. if (clip) {
  4076. clip.resetTransform(context);
  4077. clip.createPath(context);
  4078. context.clip();
  4079. }
  4080. this.resetContext(context);
  4081. this.resetTransform(context);
  4082. };
  4083. _proto.restoreContext = function restoreContext(context) {
  4084. context.restore();
  4085. };
  4086. _proto.resetContext = function resetContext(context) {
  4087. var elAttrs = this._attrs.attrs;
  4088. if (!this._attrs.isGroup) {
  4089. for (var k in elAttrs) {
  4090. if (SHAPE_ATTRS.indexOf(k) > -1) {
  4091. var v = elAttrs[k];
  4092. if (k === 'fillStyle' || k === 'strokeStyle') {
  4093. v = StyleUtil.parseStyle(v, this, context);
  4094. }
  4095. if (k === 'lineDash' && context.setLineDash && Util.isArray(v)) {
  4096. context.setLineDash(v);
  4097. } else {
  4098. context[k] = v;
  4099. }
  4100. }
  4101. }
  4102. }
  4103. };
  4104. _proto.hasFill = function hasFill() {
  4105. return this.get('canFill') && this._attrs.attrs.fillStyle;
  4106. };
  4107. _proto.hasStroke = function hasStroke() {
  4108. return this.get('canStroke') && this._attrs.attrs.strokeStyle;
  4109. };
  4110. _proto.drawInner = function drawInner()
  4111. /* context */
  4112. {};
  4113. _proto.show = function show() {
  4114. this.set('visible', true);
  4115. return this;
  4116. };
  4117. _proto.hide = function hide() {
  4118. this.set('visible', false);
  4119. return this;
  4120. };
  4121. _proto.isVisible = function isVisible() {
  4122. return this.get('visible');
  4123. };
  4124. _proto._removeFromParent = function _removeFromParent() {
  4125. var parent = this.get('parent');
  4126. if (parent) {
  4127. var children = parent.get('children');
  4128. Util.Array.remove(children, this);
  4129. }
  4130. return this;
  4131. };
  4132. _proto.remove = function remove(destroy) {
  4133. if (destroy) {
  4134. this.destroy();
  4135. } else {
  4136. this._removeFromParent();
  4137. }
  4138. };
  4139. _proto.destroy = function destroy() {
  4140. var destroyed = this.get('destroyed');
  4141. if (destroyed) {
  4142. return null;
  4143. }
  4144. this._removeFromParent();
  4145. this._attrs = {};
  4146. this.set('destroyed', true);
  4147. };
  4148. _proto.getBBox = function getBBox() {
  4149. return {
  4150. minX: 0,
  4151. maxX: 0,
  4152. minY: 0,
  4153. maxY: 0,
  4154. width: 0,
  4155. height: 0
  4156. };
  4157. };
  4158. _proto.initTransform = function initTransform() {
  4159. var attrs = this._attrs.attrs || {};
  4160. if (!attrs.matrix) {
  4161. attrs.matrix = [1, 0, 0, 1, 0, 0];
  4162. }
  4163. this._attrs.attrs = attrs;
  4164. };
  4165. _proto.getMatrix = function getMatrix() {
  4166. return this._attrs.attrs.matrix;
  4167. };
  4168. _proto.setMatrix = function setMatrix(m) {
  4169. this._attrs.attrs.matrix = [m[0], m[1], m[2], m[3], m[4], m[5]];
  4170. };
  4171. _proto.transform = function transform(actions) {
  4172. var matrix = this._attrs.attrs.matrix;
  4173. this._attrs.attrs.matrix = MatrixUtil.transform(matrix, actions);
  4174. return this;
  4175. };
  4176. _proto.setTransform = function setTransform(actions) {
  4177. this._attrs.attrs.matrix = [1, 0, 0, 1, 0, 0];
  4178. return this.transform(actions);
  4179. };
  4180. _proto.translate = function translate(x, y) {
  4181. var matrix = this._attrs.attrs.matrix;
  4182. MatrixUtil.translate(matrix, matrix, [x, y]);
  4183. };
  4184. _proto.rotate = function rotate(rad) {
  4185. var matrix = this._attrs.attrs.matrix;
  4186. MatrixUtil.rotate(matrix, matrix, rad);
  4187. };
  4188. _proto.scale = function scale(sx, sy) {
  4189. var matrix = this._attrs.attrs.matrix;
  4190. MatrixUtil.scale(matrix, matrix, [sx, sy]);
  4191. };
  4192. _proto.moveTo = function moveTo(x, y) {
  4193. var cx = this._attrs.x || 0;
  4194. var cy = this._attrs.y || 0;
  4195. this.translate(x - cx, y - cy);
  4196. this.set('x', x);
  4197. this.set('y', y);
  4198. };
  4199. _proto.apply = function apply(v) {
  4200. var m = this._attrs.attrs.matrix;
  4201. Vector2.transformMat2d(v, v, m);
  4202. return this;
  4203. };
  4204. _proto.resetTransform = function resetTransform(context) {
  4205. var mo = this._attrs.attrs.matrix;
  4206. if (!isUnchanged(mo)) {
  4207. context.transform(mo[0], mo[1], mo[2], mo[3], mo[4], mo[5]);
  4208. }
  4209. };
  4210. _proto.isDestroyed = function isDestroyed() {
  4211. return this.get('destroyed');
  4212. };
  4213. return Element;
  4214. }();
  4215. module.exports = Element;
  4216. /***/ }),
  4217. /* 47 */
  4218. /***/ (function(module, exports, __webpack_require__) {
  4219. "use strict";
  4220. exports.__esModule = true;
  4221. exports.EVENT_AFTER_GEOM_INIT = exports.EVENT_AFTER_SIZE_CHANGE = exports.EVENT_AFTER_DATA_CHANGE = exports.EVENT_BEFORE_DATA_CHANGE = exports.EVENT_AFTER_RENDER = exports.EVENT_BEFORE_RENDER = exports.EVENT_AFTER_INIT = void 0;
  4222. var EVENT_AFTER_INIT = 'afterinit';
  4223. exports.EVENT_AFTER_INIT = EVENT_AFTER_INIT;
  4224. var EVENT_BEFORE_RENDER = 'beforerender';
  4225. exports.EVENT_BEFORE_RENDER = EVENT_BEFORE_RENDER;
  4226. var EVENT_AFTER_RENDER = 'afterrender';
  4227. exports.EVENT_AFTER_RENDER = EVENT_AFTER_RENDER;
  4228. var EVENT_BEFORE_DATA_CHANGE = 'beforedatachange';
  4229. exports.EVENT_BEFORE_DATA_CHANGE = EVENT_BEFORE_DATA_CHANGE;
  4230. var EVENT_AFTER_DATA_CHANGE = 'afterdatachange';
  4231. exports.EVENT_AFTER_DATA_CHANGE = EVENT_AFTER_DATA_CHANGE;
  4232. var EVENT_AFTER_SIZE_CHANGE = '_aftersizechange';
  4233. exports.EVENT_AFTER_SIZE_CHANGE = EVENT_AFTER_SIZE_CHANGE;
  4234. var EVENT_AFTER_GEOM_INIT = '_aftergeominit';
  4235. exports.EVENT_AFTER_GEOM_INIT = EVENT_AFTER_GEOM_INIT;
  4236. /***/ }),
  4237. /* 48 */
  4238. /***/ (function(module, exports, __webpack_require__) {
  4239. var isType = __webpack_require__(27);
  4240. var isString = function isString(str) {
  4241. return isType(str, 'String');
  4242. };
  4243. module.exports = isString;
  4244. /***/ }),
  4245. /* 49 */
  4246. /***/ (function(module, exports, __webpack_require__) {
  4247. var _typeof = __webpack_require__(50);
  4248. function _getRequireWildcardCache() {
  4249. if (typeof WeakMap !== "function") return null;
  4250. var cache = new WeakMap();
  4251. _getRequireWildcardCache = function _getRequireWildcardCache() {
  4252. return cache;
  4253. };
  4254. return cache;
  4255. }
  4256. function _interopRequireWildcard(obj) {
  4257. if (obj && obj.__esModule) {
  4258. return obj;
  4259. }
  4260. if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") {
  4261. return {
  4262. "default": obj
  4263. };
  4264. }
  4265. var cache = _getRequireWildcardCache();
  4266. if (cache && cache.has(obj)) {
  4267. return cache.get(obj);
  4268. }
  4269. var newObj = {};
  4270. var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
  4271. for (var key in obj) {
  4272. if (Object.prototype.hasOwnProperty.call(obj, key)) {
  4273. var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
  4274. if (desc && (desc.get || desc.set)) {
  4275. Object.defineProperty(newObj, key, desc);
  4276. } else {
  4277. newObj[key] = obj[key];
  4278. }
  4279. }
  4280. }
  4281. newObj["default"] = obj;
  4282. if (cache) {
  4283. cache.set(obj, newObj);
  4284. }
  4285. return newObj;
  4286. }
  4287. module.exports = _interopRequireWildcard;
  4288. /***/ }),
  4289. /* 50 */
  4290. /***/ (function(module, exports) {
  4291. function _typeof(obj) {
  4292. "@babel/helpers - typeof";
  4293. if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
  4294. module.exports = _typeof = function _typeof(obj) {
  4295. return typeof obj;
  4296. };
  4297. } else {
  4298. module.exports = _typeof = function _typeof(obj) {
  4299. return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
  4300. };
  4301. }
  4302. return _typeof(obj);
  4303. }
  4304. module.exports = _typeof;
  4305. /***/ }),
  4306. /* 51 */
  4307. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4308. "use strict";
  4309. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(14);
  4310. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__keys__ = __webpack_require__(52);
  4311. function isMatch(obj, attrs) {
  4312. var _keys = Object(__WEBPACK_IMPORTED_MODULE_1__keys__["a" /* default */])(attrs);
  4313. var length = _keys.length;
  4314. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a" /* default */])(obj)) return !length;
  4315. for (var i = 0; i < length; i += 1) {
  4316. var key = _keys[i];
  4317. if (attrs[key] !== obj[key] || !(key in obj)) {
  4318. return false;
  4319. }
  4320. }
  4321. return true;
  4322. }
  4323. /* harmony default export */ __webpack_exports__["a"] = (isMatch);
  4324. /***/ }),
  4325. /* 52 */
  4326. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4327. "use strict";
  4328. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  4329. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(9);
  4330. var keys = Object.keys ? function (obj) {
  4331. return Object.keys(obj);
  4332. } : function (obj) {
  4333. var result = [];
  4334. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(obj, function (value, key) {
  4335. if (!(Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a" /* default */])(obj) && key === 'prototype')) {
  4336. result.push(key);
  4337. }
  4338. });
  4339. return result;
  4340. };
  4341. /* harmony default export */ __webpack_exports__["a"] = (keys);
  4342. /***/ }),
  4343. /* 53 */
  4344. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4345. "use strict";
  4346. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(7);
  4347. var splice = Array.prototype.splice;
  4348. var pullAt = function pullAt(arr, indexes) {
  4349. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a" /* default */])(arr)) {
  4350. return [];
  4351. }
  4352. var length = arr ? indexes.length : 0;
  4353. var last = length - 1;
  4354. while (length--) {
  4355. var previous = void 0;
  4356. var index = indexes[length];
  4357. if (length === last || index !== previous) {
  4358. previous = index;
  4359. splice.call(arr, index, 1);
  4360. }
  4361. }
  4362. return arr;
  4363. };
  4364. /* harmony default export */ __webpack_exports__["a"] = (pullAt);
  4365. /***/ }),
  4366. /* 54 */
  4367. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4368. "use strict";
  4369. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__contains__ = __webpack_require__(28);
  4370. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__each__ = __webpack_require__(8);
  4371. var uniq = function (arr) {
  4372. var resultArr = [];
  4373. Object(__WEBPACK_IMPORTED_MODULE_1__each__["a" /* default */])(arr, function (item) {
  4374. if (!Object(__WEBPACK_IMPORTED_MODULE_0__contains__["a" /* default */])(resultArr, item)) {
  4375. resultArr.push(item);
  4376. }
  4377. });
  4378. return resultArr;
  4379. };
  4380. /* harmony default export */ __webpack_exports__["a"] = (uniq);
  4381. /***/ }),
  4382. /* 55 */
  4383. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4384. "use strict";
  4385. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  4386. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(9);
  4387. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__group_by__ = __webpack_require__(56);
  4388. var groupToMap = function (data, condition) {
  4389. if (!condition) {
  4390. return {
  4391. 0: data
  4392. };
  4393. }
  4394. if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a" /* default */])(condition)) {
  4395. var paramsCondition_1 = Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(condition) ? condition : condition.replace(/\s+/g, '').split('*');
  4396. condition = function (row) {
  4397. var unique = '_'; // 避免出现数字作为Key的情况,会进行按照数字的排序
  4398. for (var i = 0, l = paramsCondition_1.length; i < l; i++) {
  4399. unique += row[paramsCondition_1[i]] && row[paramsCondition_1[i]].toString();
  4400. }
  4401. return unique;
  4402. };
  4403. }
  4404. var groups = Object(__WEBPACK_IMPORTED_MODULE_2__group_by__["a" /* default */])(data, condition);
  4405. return groups;
  4406. };
  4407. /* harmony default export */ __webpack_exports__["a"] = (groupToMap);
  4408. /***/ }),
  4409. /* 56 */
  4410. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4411. "use strict";
  4412. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  4413. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(5);
  4414. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__is_function__ = __webpack_require__(9);
  4415. var hasOwnProperty = Object.prototype.hasOwnProperty;
  4416. function groupBy(data, condition) {
  4417. if (!condition || !Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a" /* default */])(data)) {
  4418. return {};
  4419. }
  4420. var result = {}; // 兼容方法和 字符串的写法
  4421. var predicate = Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a" /* default */])(condition) ? condition : function (item) {
  4422. return item[condition];
  4423. };
  4424. var key;
  4425. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(data, function (item) {
  4426. key = predicate(item);
  4427. if (hasOwnProperty.call(result, key)) {
  4428. result[key].push(item);
  4429. } else {
  4430. result[key] = [item];
  4431. }
  4432. });
  4433. return result;
  4434. }
  4435. /* harmony default export */ __webpack_exports__["a"] = (groupBy);
  4436. /***/ }),
  4437. /* 57 */
  4438. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4439. "use strict";
  4440. /* harmony default export */ __webpack_exports__["a"] = (function (obj, key) {
  4441. return obj.hasOwnProperty(key);
  4442. });
  4443. /***/ }),
  4444. /* 58 */
  4445. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4446. "use strict";
  4447. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  4448. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(9);
  4449. // @ts-ignore
  4450. var values = Object.values ? function (obj) {
  4451. return Object.values(obj);
  4452. } : function (obj) {
  4453. var result = [];
  4454. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(obj, function (value, key) {
  4455. if (!(Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a" /* default */])(obj) && key === 'prototype')) {
  4456. result.push(value);
  4457. }
  4458. });
  4459. return result;
  4460. };
  4461. /* harmony default export */ __webpack_exports__["a"] = (values);
  4462. /***/ }),
  4463. /* 59 */
  4464. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4465. "use strict";
  4466. var toString = {}.toString;
  4467. var getType = function (value) {
  4468. return toString.call(value).replace(/^\[object /, '').replace(/]$/, '');
  4469. };
  4470. /* harmony default export */ __webpack_exports__["a"] = (getType);
  4471. /***/ }),
  4472. /* 60 */
  4473. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4474. "use strict";
  4475. var objectProto = Object.prototype;
  4476. var isPrototype = function (value) {
  4477. var Ctor = value && value.constructor;
  4478. var proto = typeof Ctor === 'function' && Ctor.prototype || objectProto;
  4479. return value === proto;
  4480. };
  4481. /* harmony default export */ __webpack_exports__["a"] = (isPrototype);
  4482. /***/ }),
  4483. /* 61 */
  4484. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  4485. "use strict";
  4486. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_object_like__ = __webpack_require__(40);
  4487. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(7);
  4488. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__is_string__ = __webpack_require__(18);
  4489. var isEqual = function (value, other) {
  4490. if (value === other) {
  4491. return true;
  4492. }
  4493. if (!value || !other) {
  4494. return false;
  4495. }
  4496. if (Object(__WEBPACK_IMPORTED_MODULE_2__is_string__["a" /* default */])(value) || Object(__WEBPACK_IMPORTED_MODULE_2__is_string__["a" /* default */])(other)) {
  4497. return false;
  4498. }
  4499. if (Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a" /* default */])(value) || Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a" /* default */])(other)) {
  4500. if (value.length !== other.length) {
  4501. return false;
  4502. }
  4503. var rst = true;
  4504. for (var i = 0; i < value.length; i++) {
  4505. rst = isEqual(value[i], other[i]);
  4506. if (!rst) {
  4507. break;
  4508. }
  4509. }
  4510. return rst;
  4511. }
  4512. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_object_like__["a" /* default */])(value) || Object(__WEBPACK_IMPORTED_MODULE_0__is_object_like__["a" /* default */])(other)) {
  4513. var valueKeys = Object.keys(value);
  4514. var otherKeys = Object.keys(other);
  4515. if (valueKeys.length !== otherKeys.length) {
  4516. return false;
  4517. }
  4518. var rst = true;
  4519. for (var i = 0; i < valueKeys.length; i++) {
  4520. rst = isEqual(value[valueKeys[i]], other[valueKeys[i]]);
  4521. if (!rst) {
  4522. break;
  4523. }
  4524. }
  4525. return rst;
  4526. }
  4527. return false;
  4528. };
  4529. /* harmony default export */ __webpack_exports__["a"] = (isEqual);
  4530. /***/ }),
  4531. /* 62 */
  4532. /***/ (function(module, exports, __webpack_require__) {
  4533. "use strict";
  4534. exports.__esModule = true;
  4535. exports.isCanvasElement = isCanvasElement;
  4536. exports.getPixelRatio = getPixelRatio;
  4537. exports.getStyle = getStyle;
  4538. exports.getWidth = getWidth;
  4539. exports.getHeight = getHeight;
  4540. exports.getDomById = getDomById;
  4541. exports.getRelativePosition = getRelativePosition;
  4542. exports.addEventListener = addEventListener;
  4543. exports.removeEventListener = removeEventListener;
  4544. exports.createEvent = createEvent;
  4545. exports.measureText = measureText;
  4546. exports.isBrowser = exports.isNode = exports.isMy = exports.isWx = void 0;
  4547. /**
  4548. * Detects support for options object argument in addEventListener.
  4549. * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
  4550. * @private
  4551. */
  4552. var supportsEventListenerOptions = function () {
  4553. var supports = false;
  4554. try {
  4555. var options = Object.defineProperty({}, 'passive', {
  4556. get: function get() {
  4557. supports = true;
  4558. }
  4559. });
  4560. window.addEventListener('e', null, options);
  4561. } catch (e) {// continue regardless of error
  4562. }
  4563. return supports;
  4564. }(); // Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.
  4565. // https://github.com/chartjs/Chart.js/issues/4287
  4566. var eventListenerOptions = supportsEventListenerOptions ? {
  4567. passive: true
  4568. } : false;
  4569. /* global wx, my */
  4570. // weixin miniprogram
  4571. var isWx = typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function'; // ant miniprogram
  4572. exports.isWx = isWx;
  4573. var isMy = typeof my === 'object' && typeof my.getSystemInfoSync === 'function'; // in node
  4574. exports.isMy = isMy;
  4575. var isNode = typeof module !== 'undefined' && typeof module.exports !== 'undefined'; // in browser
  4576. exports.isNode = isNode;
  4577. var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.sessionStorage !== 'undefined';
  4578. exports.isBrowser = isBrowser;
  4579. function isCanvasElement(el) {
  4580. if (!el || typeof el !== 'object') return false;
  4581. if (el.nodeType === 1 && el.nodeName) {
  4582. // HTMLCanvasElement
  4583. return true;
  4584. } // CanvasElement
  4585. return !!el.isCanvasElement;
  4586. }
  4587. function getPixelRatio() {
  4588. return window && window.devicePixelRatio || 1;
  4589. }
  4590. function getStyle(el, property) {
  4591. return el.currentStyle ? el.currentStyle[property] : document.defaultView.getComputedStyle(el, null).getPropertyValue(property);
  4592. }
  4593. function getWidth(el) {
  4594. var width = getStyle(el, 'width');
  4595. if (width === 'auto') {
  4596. width = el.offsetWidth;
  4597. }
  4598. return parseFloat(width);
  4599. }
  4600. function getHeight(el) {
  4601. var height = getStyle(el, 'height');
  4602. if (height === 'auto') {
  4603. height = el.offsetHeight;
  4604. }
  4605. return parseFloat(height);
  4606. }
  4607. function getDomById(id) {
  4608. if (!id) {
  4609. return null;
  4610. }
  4611. return document.getElementById(id);
  4612. }
  4613. function getRelativePosition(point, canvas) {
  4614. var canvasDom = canvas.get('el');
  4615. if (!canvasDom) return point;
  4616. var _canvasDom$getBoundin = canvasDom.getBoundingClientRect(),
  4617. top = _canvasDom$getBoundin.top,
  4618. right = _canvasDom$getBoundin.right,
  4619. bottom = _canvasDom$getBoundin.bottom,
  4620. left = _canvasDom$getBoundin.left;
  4621. var paddingLeft = parseFloat(getStyle(canvasDom, 'padding-left'));
  4622. var paddingTop = parseFloat(getStyle(canvasDom, 'padding-top'));
  4623. var paddingRight = parseFloat(getStyle(canvasDom, 'padding-right'));
  4624. var paddingBottom = parseFloat(getStyle(canvasDom, 'padding-bottom'));
  4625. var width = right - left - paddingLeft - paddingRight;
  4626. var height = bottom - top - paddingTop - paddingBottom;
  4627. var pixelRatio = canvas.get('pixelRatio');
  4628. var mouseX = (point.x - left - paddingLeft) / width * canvasDom.width / pixelRatio;
  4629. var mouseY = (point.y - top - paddingTop) / height * canvasDom.height / pixelRatio;
  4630. return {
  4631. x: mouseX,
  4632. y: mouseY
  4633. };
  4634. }
  4635. function addEventListener(source, type, listener) {
  4636. source.addEventListener(type, listener, eventListenerOptions);
  4637. }
  4638. function removeEventListener(source, type, listener) {
  4639. source.removeEventListener(type, listener, eventListenerOptions);
  4640. }
  4641. function createEventObj(type, chart, x, y, nativeEvent) {
  4642. return {
  4643. type: type,
  4644. chart: chart,
  4645. "native": nativeEvent || null,
  4646. x: x !== undefined ? x : null,
  4647. y: y !== undefined ? y : null
  4648. };
  4649. }
  4650. function createEvent(event, chart) {
  4651. var type = event.type;
  4652. var clientPoint; // 说明是touch相关事件
  4653. if (event.touches) {
  4654. // https://developer.mozilla.org/zh-CN/docs/Web/API/TouchEvent/changedTouches
  4655. // 这里直接拿changedTouches就可以了,不管是touchstart, touchmove, touchend changedTouches 都是有的
  4656. // 为了以防万一,做个空判断
  4657. var touch = event.changedTouches[0] || {}; // x, y: 相对canvas原点的位置,clientX, clientY 相对于可视窗口的位置
  4658. var x = touch.x,
  4659. y = touch.y,
  4660. clientX = touch.clientX,
  4661. clientY = touch.clientY; // 小程序环境会有x,y,这里就直接返回
  4662. if (x && y) {
  4663. return createEventObj(type, chart, x, y, event);
  4664. }
  4665. clientPoint = {
  4666. x: clientX,
  4667. y: clientY
  4668. };
  4669. } else {
  4670. // mouse相关事件
  4671. clientPoint = {
  4672. x: event.clientX,
  4673. y: event.clientY
  4674. };
  4675. } // 理论上应该是只有有在浏览器环境才会走到这里
  4676. var canvas = chart.get('canvas'); // 通过clientX, clientY 计算x, y
  4677. var point = getRelativePosition(clientPoint, canvas);
  4678. return createEventObj(type, chart, point.x, point.y, event);
  4679. }
  4680. function measureText(text, font, ctx) {
  4681. if (!ctx) {
  4682. ctx = document.createElement('canvas').getContext('2d');
  4683. }
  4684. ctx.font = font || '12px sans-serif';
  4685. return ctx.measureText(text);
  4686. }
  4687. /***/ }),
  4688. /* 63 */
  4689. /***/ (function(module, exports, __webpack_require__) {
  4690. "use strict";
  4691. var _interopRequireDefault = __webpack_require__(1);
  4692. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  4693. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  4694. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  4695. var _emit = _interopRequireDefault(__webpack_require__(42));
  4696. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  4697. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  4698. var Util = __webpack_require__(0);
  4699. var Base = /*#__PURE__*/function (_Emit) {
  4700. (0, _inheritsLoose2["default"])(Base, _Emit);
  4701. var _super = _createSuper(Base);
  4702. var _proto = Base.prototype;
  4703. _proto.getDefaultCfg = function getDefaultCfg() {
  4704. return {};
  4705. };
  4706. function Base(cfg) {
  4707. var _this;
  4708. _this = _Emit.call(this) || this;
  4709. var attrs = {};
  4710. var defaultCfg = _this.getDefaultCfg();
  4711. _this._attrs = attrs;
  4712. Util.mix(attrs, defaultCfg, cfg);
  4713. return _this;
  4714. }
  4715. _proto.get = function get(name) {
  4716. return this._attrs[name];
  4717. };
  4718. _proto.set = function set(name, value) {
  4719. this._attrs[name] = value;
  4720. };
  4721. _proto.destroy = function destroy() {
  4722. this._attrs = {};
  4723. this.destroyed = true;
  4724. };
  4725. return Base;
  4726. }(_emit["default"]);
  4727. module.exports = Base;
  4728. /***/ }),
  4729. /* 64 */
  4730. /***/ (function(module, exports) {
  4731. function _mix(dist, obj) {
  4732. for (var key in obj) {
  4733. if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {
  4734. dist[key] = obj[key];
  4735. }
  4736. }
  4737. }
  4738. var mix = function mix(dist, src1, src2, src3) {
  4739. if (src1) _mix(dist, src1);
  4740. if (src2) _mix(dist, src2);
  4741. if (src3) _mix(dist, src3);
  4742. return dist;
  4743. };
  4744. module.exports = mix;
  4745. /***/ }),
  4746. /* 65 */
  4747. /***/ (function(module, exports, __webpack_require__) {
  4748. /**
  4749. * @fileOverview 计算分类的的坐标点
  4750. * @author dxq613@gmail.com
  4751. */
  4752. var each = __webpack_require__(15);
  4753. var MAX_COUNT = 8;
  4754. var SUB_COUNT = 4; // 控制个数不能过小
  4755. function getSimpleArray(data) {
  4756. var arr = [];
  4757. each(data, function (sub) {
  4758. arr = arr.concat(sub);
  4759. });
  4760. return arr;
  4761. }
  4762. function getGreatestFactor(count, number) {
  4763. var i;
  4764. for (i = number; i > 0; i--) {
  4765. if (count % i === 0) {
  4766. break;
  4767. }
  4768. } // 如果是素数,没有可以整除的数字
  4769. if (i === 1) {
  4770. for (i = number; i > 0; i--) {
  4771. if ((count - 1) % i === 0) {
  4772. break;
  4773. }
  4774. }
  4775. }
  4776. return i;
  4777. }
  4778. module.exports = function (info) {
  4779. var rst = {};
  4780. var ticks = [];
  4781. var isRounding = info.isRounding;
  4782. var categories = getSimpleArray(info.data);
  4783. var length = categories.length;
  4784. var maxCount = info.maxCount || MAX_COUNT;
  4785. var tickCount;
  4786. if (isRounding) {
  4787. // 取整操作
  4788. tickCount = getGreatestFactor(length - 1, maxCount - 1) + 1; // 如果计算出来只有两个坐标点,则直接使用传入的 maxCount
  4789. if (tickCount === 2) {
  4790. tickCount = maxCount;
  4791. } else if (tickCount < maxCount - SUB_COUNT) {
  4792. tickCount = maxCount - SUB_COUNT;
  4793. }
  4794. } else {
  4795. tickCount = maxCount;
  4796. }
  4797. if (!isRounding && length <= tickCount + tickCount / 2) {
  4798. ticks = [].concat(categories);
  4799. } else {
  4800. var step = parseInt(length / (tickCount - 1), 10);
  4801. var groups = categories.map(function (e, i) {
  4802. return i % step === 0 ? categories.slice(i, i + step) : null;
  4803. }).filter(function (e) {
  4804. return e;
  4805. });
  4806. for (var i = 1, groupLen = groups.length; i < groupLen && (isRounding ? i * step < length - step : i < tickCount - 1); i++) {
  4807. ticks.push(groups[i][0]);
  4808. }
  4809. if (categories.length) {
  4810. ticks.unshift(categories[0]);
  4811. var last = categories[length - 1];
  4812. if (ticks.indexOf(last) === -1) {
  4813. ticks.push(last);
  4814. }
  4815. }
  4816. }
  4817. rst.categories = categories;
  4818. rst.ticks = ticks;
  4819. return rst;
  4820. };
  4821. /***/ }),
  4822. /* 66 */
  4823. /***/ (function(module, exports, __webpack_require__) {
  4824. "use strict";
  4825. var Util = __webpack_require__(0);
  4826. var Shape = __webpack_require__(10);
  4827. var SHAPE_MAP = {};
  4828. var INDEX = '_INDEX';
  4829. function getComparer(compare) {
  4830. return function (left, right) {
  4831. var result = compare(left, right);
  4832. return result === 0 ? left[INDEX] - right[INDEX] : result;
  4833. };
  4834. }
  4835. module.exports = {
  4836. getGroupClass: function getGroupClass() {},
  4837. getChildren: function getChildren() {
  4838. return this.get('children');
  4839. },
  4840. addShape: function addShape(type, cfg) {
  4841. if (cfg === void 0) {
  4842. cfg = {};
  4843. }
  4844. var canvas = this.get('canvas');
  4845. var shapeType = SHAPE_MAP[type];
  4846. if (!shapeType) {
  4847. shapeType = Util.upperFirst(type);
  4848. SHAPE_MAP[type] = shapeType;
  4849. }
  4850. cfg.canvas = canvas;
  4851. if (shapeType === 'Text' && canvas && canvas.get('fontFamily')) {
  4852. cfg.attrs.fontFamily = cfg.attrs.fontFamily || canvas.get('fontFamily');
  4853. }
  4854. var shape = new Shape[shapeType](cfg);
  4855. this.add(shape);
  4856. return shape;
  4857. },
  4858. addGroup: function addGroup(cfg) {
  4859. var canvas = this.get('canvas');
  4860. var groupClass = this.getGroupClass();
  4861. cfg = Util.mix({}, cfg);
  4862. cfg.canvas = canvas;
  4863. cfg.parent = this;
  4864. var rst = new groupClass(cfg);
  4865. this.add(rst);
  4866. return rst;
  4867. },
  4868. contain: function contain(item) {
  4869. var children = this.get('children');
  4870. return children.indexOf(item) > -1;
  4871. },
  4872. sort: function sort() {
  4873. var children = this.get('children');
  4874. for (var i = 0, len = children.length; i < len; i++) {
  4875. var child = children[i];
  4876. child[INDEX] = i;
  4877. }
  4878. children.sort(getComparer(function (obj1, obj2) {
  4879. return obj1.get('zIndex') - obj2.get('zIndex');
  4880. }));
  4881. return this;
  4882. },
  4883. clear: function clear() {
  4884. var children = this.get('children');
  4885. while (children.length !== 0) {
  4886. children[children.length - 1].remove(true);
  4887. }
  4888. return this;
  4889. },
  4890. add: function add(items) {
  4891. var self = this;
  4892. var children = self.get('children');
  4893. if (!Util.isArray(items)) {
  4894. items = [items];
  4895. }
  4896. for (var i = 0, len = items.length; i < len; i++) {
  4897. var item = items[i];
  4898. var parent = item.get('parent');
  4899. if (parent) {
  4900. var descendants = parent.get('children');
  4901. Util.Array.remove(descendants, item);
  4902. }
  4903. self._setEvn(item);
  4904. children.push(item);
  4905. }
  4906. return self;
  4907. },
  4908. _setEvn: function _setEvn(item) {
  4909. var self = this;
  4910. item._attrs.parent = self;
  4911. item._attrs.context = self._attrs.context;
  4912. item._attrs.canvas = self._attrs.canvas;
  4913. var clip = item._attrs.attrs.clip;
  4914. if (clip) {
  4915. clip.set('parent', self);
  4916. clip.set('context', self.get('context'));
  4917. }
  4918. if (item._attrs.isGroup) {
  4919. var children = item._attrs.children;
  4920. for (var i = 0, len = children.length; i < len; i++) {
  4921. item._setEvn(children[i]);
  4922. }
  4923. }
  4924. }
  4925. };
  4926. /***/ }),
  4927. /* 67 */
  4928. /***/ (function(module, exports, __webpack_require__) {
  4929. "use strict";
  4930. var _interopRequireDefault = __webpack_require__(1);
  4931. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  4932. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  4933. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  4934. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  4935. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  4936. var Util = __webpack_require__(0);
  4937. var Element = __webpack_require__(46);
  4938. var Container = __webpack_require__(66);
  4939. var Vector2 = __webpack_require__(13);
  4940. var Group = /*#__PURE__*/function (_Element) {
  4941. (0, _inheritsLoose2["default"])(Group, _Element);
  4942. var _super = _createSuper(Group);
  4943. function Group() {
  4944. return _Element.apply(this, arguments) || this;
  4945. }
  4946. var _proto = Group.prototype;
  4947. _proto._initProperties = function _initProperties() {
  4948. this._attrs = {
  4949. zIndex: 0,
  4950. visible: true,
  4951. destroyed: false,
  4952. isGroup: true,
  4953. children: []
  4954. };
  4955. };
  4956. _proto.drawInner = function drawInner(context) {
  4957. var children = this.get('children');
  4958. for (var i = 0, len = children.length; i < len; i++) {
  4959. var child = children[i];
  4960. child.draw(context);
  4961. }
  4962. return this;
  4963. };
  4964. _proto.getBBox = function getBBox() {
  4965. var self = this;
  4966. var minX = Infinity;
  4967. var maxX = -Infinity;
  4968. var minY = Infinity;
  4969. var maxY = -Infinity;
  4970. var children = self.get('children');
  4971. for (var i = 0, length = children.length; i < length; i++) {
  4972. var child = children[i];
  4973. if (child.get('visible')) {
  4974. var box = child.getBBox();
  4975. if (!box) {
  4976. continue;
  4977. }
  4978. var leftTop = [box.minX, box.minY];
  4979. var leftBottom = [box.minX, box.maxY];
  4980. var rightTop = [box.maxX, box.minY];
  4981. var rightBottom = [box.maxX, box.maxY];
  4982. var matrix = child.attr('matrix');
  4983. Vector2.transformMat2d(leftTop, leftTop, matrix);
  4984. Vector2.transformMat2d(leftBottom, leftBottom, matrix);
  4985. Vector2.transformMat2d(rightTop, rightTop, matrix);
  4986. Vector2.transformMat2d(rightBottom, rightBottom, matrix);
  4987. minX = Math.min(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0], minX);
  4988. maxX = Math.max(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0], maxX);
  4989. minY = Math.min(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1], minY);
  4990. maxY = Math.max(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1], maxY);
  4991. }
  4992. }
  4993. return {
  4994. minX: minX,
  4995. minY: minY,
  4996. maxX: maxX,
  4997. maxY: maxY,
  4998. x: minX,
  4999. y: minY,
  5000. width: maxX - minX,
  5001. height: maxY - minY
  5002. };
  5003. };
  5004. _proto.destroy = function destroy() {
  5005. if (this.get('destroyed')) {
  5006. return;
  5007. }
  5008. this.clear();
  5009. _Element.prototype.destroy.call(this);
  5010. };
  5011. return Group;
  5012. }(Element);
  5013. Util.mix(Group.prototype, Container, {
  5014. getGroupClass: function getGroupClass() {
  5015. return Group;
  5016. }
  5017. });
  5018. module.exports = Group;
  5019. /***/ }),
  5020. /* 68 */
  5021. /***/ (function(module, exports, __webpack_require__) {
  5022. "use strict";
  5023. var Util = __webpack_require__(0);
  5024. var Shape = __webpack_require__(19);
  5025. var ShapeUtil = __webpack_require__(38);
  5026. var Global = __webpack_require__(6); // register line geom
  5027. var Line = Shape.registerFactory('line', {
  5028. defaultShapeType: 'line'
  5029. });
  5030. function getStyle(cfg) {
  5031. var style = {
  5032. strokeStyle: cfg.color
  5033. };
  5034. if (cfg.size >= 0) {
  5035. style.lineWidth = cfg.size;
  5036. }
  5037. Util.mix(style, cfg.style);
  5038. return Util.mix({}, Global.shape.line, style);
  5039. }
  5040. function drawLines(cfg, container, style, smooth) {
  5041. var points = cfg.points;
  5042. if (points.length && Util.isArray(points[0].y)) {
  5043. var topPoints = [];
  5044. var bottomPoints = [];
  5045. for (var i = 0, len = points.length; i < len; i++) {
  5046. var point = points[i];
  5047. var tmp = ShapeUtil.splitPoints(point);
  5048. bottomPoints.push(tmp[0]);
  5049. topPoints.push(tmp[1]);
  5050. }
  5051. if (cfg.isInCircle) {
  5052. topPoints.push(topPoints[0]);
  5053. bottomPoints.push(bottomPoints[0]);
  5054. }
  5055. if (cfg.isStack) {
  5056. return container.addShape('Polyline', {
  5057. className: 'line',
  5058. attrs: Util.mix({
  5059. points: topPoints,
  5060. smooth: smooth
  5061. }, style)
  5062. });
  5063. }
  5064. var topShape = container.addShape('Polyline', {
  5065. className: 'line',
  5066. attrs: Util.mix({
  5067. points: topPoints,
  5068. smooth: smooth
  5069. }, style)
  5070. });
  5071. var bottomShape = container.addShape('Polyline', {
  5072. className: 'line',
  5073. attrs: Util.mix({
  5074. points: bottomPoints,
  5075. smooth: smooth
  5076. }, style)
  5077. });
  5078. return [topShape, bottomShape];
  5079. }
  5080. if (cfg.isInCircle) {
  5081. points.push(points[0]);
  5082. }
  5083. return container.addShape('Polyline', {
  5084. className: 'line',
  5085. attrs: Util.mix({
  5086. points: points,
  5087. smooth: smooth
  5088. }, style)
  5089. });
  5090. }
  5091. var SHAPES = ['line', 'smooth', 'dash'];
  5092. Util.each(SHAPES, function (shapeType) {
  5093. Shape.registerShape('line', shapeType, {
  5094. draw: function draw(cfg, container) {
  5095. var smooth = shapeType === 'smooth';
  5096. var style = getStyle(cfg);
  5097. if (shapeType === 'dash') {
  5098. style.lineDash = Global.lineDash;
  5099. }
  5100. return drawLines(cfg, container, style, smooth);
  5101. }
  5102. });
  5103. });
  5104. module.exports = Line;
  5105. /***/ }),
  5106. /* 69 */
  5107. /***/ (function(module, exports, __webpack_require__) {
  5108. function _inheritsLoose(subClass, superClass) {
  5109. subClass.prototype = Object.create(superClass.prototype);
  5110. subClass.prototype.constructor = subClass;
  5111. subClass.__proto__ = superClass;
  5112. }
  5113. var Base = __webpack_require__(26);
  5114. var catAuto = __webpack_require__(65);
  5115. var each = __webpack_require__(15);
  5116. var isNumber = __webpack_require__(36);
  5117. var isString = __webpack_require__(48);
  5118. var Category = /*#__PURE__*/function (_Base) {
  5119. _inheritsLoose(Category, _Base);
  5120. function Category() {
  5121. return _Base.apply(this, arguments) || this;
  5122. }
  5123. var _proto = Category.prototype;
  5124. _proto._initDefaultCfg = function _initDefaultCfg() {
  5125. _Base.prototype._initDefaultCfg.call(this);
  5126. this.type = 'cat';
  5127. /**
  5128. * 是否分类度量
  5129. * @type {Boolean}
  5130. */
  5131. this.isCategory = true;
  5132. this.isRounding = true; // 是否进行取整操作
  5133. }
  5134. /**
  5135. * @override
  5136. */
  5137. ;
  5138. _proto.init = function init() {
  5139. var self = this;
  5140. var values = self.values;
  5141. var tickCount = self.tickCount;
  5142. each(values, function (v, i) {
  5143. values[i] = v.toString();
  5144. });
  5145. if (!self.ticks) {
  5146. var ticks = values;
  5147. if (tickCount) {
  5148. var temp = catAuto({
  5149. maxCount: tickCount,
  5150. data: values,
  5151. isRounding: self.isRounding
  5152. });
  5153. ticks = temp.ticks;
  5154. }
  5155. this.ticks = ticks;
  5156. }
  5157. }
  5158. /**
  5159. * @override
  5160. */
  5161. ;
  5162. _proto.getText = function getText(value) {
  5163. if (this.values.indexOf(value) === -1 && isNumber(value)) {
  5164. value = this.values[Math.round(value)];
  5165. }
  5166. return _Base.prototype.getText.call(this, value);
  5167. }
  5168. /**
  5169. * @override
  5170. */
  5171. ;
  5172. _proto.translate = function translate(value) {
  5173. var index = this.values.indexOf(value);
  5174. if (index === -1 && isNumber(value)) {
  5175. index = value;
  5176. } else if (index === -1) {
  5177. index = NaN;
  5178. }
  5179. return index;
  5180. }
  5181. /**
  5182. * @override
  5183. */
  5184. ;
  5185. _proto.scale = function scale(value) {
  5186. var rangeMin = this.rangeMin();
  5187. var rangeMax = this.rangeMax();
  5188. var percent;
  5189. if (isString(value) || this.values.indexOf(value) !== -1) {
  5190. value = this.translate(value);
  5191. }
  5192. if (this.values.length > 1) {
  5193. percent = value / (this.values.length - 1);
  5194. } else {
  5195. percent = value;
  5196. }
  5197. return rangeMin + percent * (rangeMax - rangeMin);
  5198. }
  5199. /**
  5200. * @override
  5201. */
  5202. ;
  5203. _proto.invert = function invert(value) {
  5204. if (isString(value)) {
  5205. // 如果已经是字符串
  5206. return value;
  5207. }
  5208. var min = this.rangeMin();
  5209. var max = this.rangeMax(); // 归一到 范围内
  5210. if (value < min) {
  5211. value = min;
  5212. }
  5213. if (value > max) {
  5214. value = max;
  5215. }
  5216. var percent = (value - min) / (max - min);
  5217. var index = Math.round(percent * (this.values.length - 1)) % this.values.length;
  5218. index = index || 0;
  5219. return this.values[index];
  5220. };
  5221. return Category;
  5222. }(Base);
  5223. Base.Cat = Category;
  5224. module.exports = Category;
  5225. /***/ }),
  5226. /* 70 */
  5227. /***/ (function(module, exports, __webpack_require__) {
  5228. "use strict";
  5229. module.exports = {
  5230. requestAnimationFrame: typeof window === 'object' && window.requestAnimationFrame ? window.requestAnimationFrame : function (fn) {
  5231. return setTimeout(fn, 16);
  5232. }
  5233. };
  5234. /***/ }),
  5235. /* 71 */
  5236. /***/ (function(module, exports, __webpack_require__) {
  5237. "use strict";
  5238. /**
  5239. * @fileOverview convert the line to curve
  5240. * @author dxq613@gmail.com
  5241. */
  5242. var Vector2 = __webpack_require__(13);
  5243. function getPoint(v) {
  5244. return [v.x, v.y];
  5245. }
  5246. function smoothBezier(points, smooth, isLoop, constraint) {
  5247. var cps = [];
  5248. var prevPoint;
  5249. var nextPoint;
  5250. var hasConstraint = !!constraint;
  5251. var min;
  5252. var max;
  5253. var point;
  5254. var len;
  5255. var l;
  5256. var i;
  5257. if (hasConstraint) {
  5258. min = [Infinity, Infinity];
  5259. max = [-Infinity, -Infinity];
  5260. for (i = 0, l = points.length; i < l; i++) {
  5261. point = getPoint(points[i]);
  5262. Vector2.min(min, min, point);
  5263. Vector2.max(max, max, point);
  5264. }
  5265. Vector2.min(min, min, constraint[0]);
  5266. Vector2.max(max, max, constraint[1]);
  5267. }
  5268. for (i = 0, len = points.length; i < len; i++) {
  5269. point = getPoint(points[i]);
  5270. if (isLoop) {
  5271. prevPoint = getPoint(points[i ? i - 1 : len - 1]);
  5272. nextPoint = getPoint(points[(i + 1) % len]);
  5273. } else {
  5274. if (i === 0 || i === len - 1) {
  5275. cps.push([point[0], point[1]]);
  5276. continue;
  5277. } else {
  5278. prevPoint = getPoint(points[i - 1]);
  5279. nextPoint = getPoint(points[i + 1]);
  5280. }
  5281. }
  5282. var v = Vector2.sub([], nextPoint, prevPoint);
  5283. Vector2.scale(v, v, smooth);
  5284. var d0 = Vector2.distance(point, prevPoint);
  5285. var d1 = Vector2.distance(point, nextPoint);
  5286. var sum = d0 + d1;
  5287. if (sum !== 0) {
  5288. d0 /= sum;
  5289. d1 /= sum;
  5290. }
  5291. var v1 = Vector2.scale([], v, -d0);
  5292. var v2 = Vector2.scale([], v, d1);
  5293. var cp0 = Vector2.add([], point, v1);
  5294. var cp1 = Vector2.add([], point, v2);
  5295. if (hasConstraint) {
  5296. Vector2.max(cp0, cp0, min);
  5297. Vector2.min(cp0, cp0, max);
  5298. Vector2.max(cp1, cp1, min);
  5299. Vector2.min(cp1, cp1, max);
  5300. }
  5301. cps.push([cp0[0], cp0[1]]);
  5302. cps.push([cp1[0], cp1[1]]);
  5303. }
  5304. if (isLoop) {
  5305. cps.push(cps.shift());
  5306. }
  5307. return cps;
  5308. }
  5309. function catmullRom2bezier(pointList, z, constraint) {
  5310. var isLoop = !!z;
  5311. var controlPointList = smoothBezier(pointList, 0.4, isLoop, constraint);
  5312. var len = pointList.length;
  5313. var d1 = [];
  5314. var cp1;
  5315. var cp2;
  5316. var p;
  5317. for (var i = 0; i < len - 1; i++) {
  5318. cp1 = controlPointList[i * 2];
  5319. cp2 = controlPointList[i * 2 + 1];
  5320. p = pointList[i + 1];
  5321. d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p.x, p.y]);
  5322. }
  5323. if (isLoop) {
  5324. cp1 = controlPointList[len];
  5325. cp2 = controlPointList[len + 1];
  5326. p = pointList[0];
  5327. d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p.x, p.y]);
  5328. }
  5329. return d1;
  5330. }
  5331. module.exports = {
  5332. smooth: catmullRom2bezier
  5333. };
  5334. /***/ }),
  5335. /* 72 */
  5336. /***/ (function(module, exports, __webpack_require__) {
  5337. "use strict";
  5338. var _interopRequireDefault = __webpack_require__(1);
  5339. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  5340. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  5341. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  5342. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  5343. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  5344. var Geom = __webpack_require__(17);
  5345. var ShapeUtil = __webpack_require__(38);
  5346. var Util = __webpack_require__(0);
  5347. __webpack_require__(68);
  5348. var Path = /*#__PURE__*/function (_Geom) {
  5349. (0, _inheritsLoose2["default"])(Path, _Geom);
  5350. var _super = _createSuper(Path);
  5351. function Path() {
  5352. return _Geom.apply(this, arguments) || this;
  5353. }
  5354. var _proto = Path.prototype;
  5355. _proto.getDefaultCfg = function getDefaultCfg() {
  5356. var cfg = _Geom.prototype.getDefaultCfg.call(this);
  5357. cfg.type = 'path';
  5358. cfg.shapeType = 'line';
  5359. return cfg;
  5360. };
  5361. _proto.getDrawCfg = function getDrawCfg(obj) {
  5362. var cfg = _Geom.prototype.getDrawCfg.call(this, obj);
  5363. cfg.isStack = this.hasAdjust('stack');
  5364. return cfg;
  5365. };
  5366. _proto.draw = function draw(data, shapeFactory) {
  5367. var self = this;
  5368. var container = self.get('container');
  5369. var yScale = self.getYScale();
  5370. var connectNulls = self.get('connectNulls');
  5371. var splitArray = ShapeUtil.splitArray(data, yScale.field, connectNulls);
  5372. var cfg = this.getDrawCfg(data[0]);
  5373. cfg.origin = data;
  5374. Util.each(splitArray, function (subData, splitedIndex) {
  5375. cfg.splitedIndex = splitedIndex;
  5376. cfg.points = subData;
  5377. self.drawShape(cfg.shape, data[0], cfg, container, shapeFactory);
  5378. });
  5379. };
  5380. return Path;
  5381. }(Geom);
  5382. Geom.Path = Path;
  5383. module.exports = Path;
  5384. /***/ }),
  5385. /* 73 */
  5386. /***/ (function(module, exports, __webpack_require__) {
  5387. "use strict";
  5388. var _const = __webpack_require__(47);
  5389. /**
  5390. * @fileOverview Utility for calculate the with ratui in x axis
  5391. * @author sima.zhang1990@gmail.com
  5392. * @author dxq613@gmail.com
  5393. */
  5394. var Global = __webpack_require__(6);
  5395. var Util = __webpack_require__(0);
  5396. var SizeMixin = {
  5397. initEvent: function initEvent() {
  5398. var _this = this;
  5399. var chart = this.get('chart');
  5400. if (!chart) {
  5401. return;
  5402. }
  5403. chart.on(_const.EVENT_AFTER_SIZE_CHANGE, function () {
  5404. _this.set('_width', null);
  5405. });
  5406. },
  5407. getDefalutSize: function getDefalutSize() {
  5408. var defaultSize = this.get('defaultSize');
  5409. if (!defaultSize) {
  5410. var coord = this.get('coord');
  5411. var xScale = this.getXScale();
  5412. var dataArray = this.get('dataArray');
  5413. var values = Util.uniq(xScale.values);
  5414. var count = values.length;
  5415. var range = xScale.range;
  5416. var normalizeSize = 1 / count;
  5417. var widthRatio = 1;
  5418. if (coord && coord.isPolar) {
  5419. if (coord.transposed && count > 1) {
  5420. widthRatio = Global.widthRatio.multiplePie;
  5421. } else {
  5422. widthRatio = Global.widthRatio.rose;
  5423. }
  5424. } else {
  5425. if (xScale.isLinear) {
  5426. normalizeSize *= range[1] - range[0];
  5427. }
  5428. widthRatio = Global.widthRatio.column;
  5429. }
  5430. normalizeSize *= widthRatio;
  5431. if (this.hasAdjust('dodge')) {
  5432. normalizeSize = normalizeSize / dataArray.length;
  5433. }
  5434. defaultSize = normalizeSize;
  5435. this.set('defaultSize', defaultSize);
  5436. }
  5437. return defaultSize;
  5438. },
  5439. getDimWidth: function getDimWidth(dimName) {
  5440. var coord = this.get('coord');
  5441. var start = coord.convertPoint({
  5442. x: 0,
  5443. y: 0
  5444. });
  5445. var end = coord.convertPoint({
  5446. x: dimName === 'x' ? 1 : 0,
  5447. y: dimName === 'x' ? 0 : 1
  5448. });
  5449. var width = 0;
  5450. if (start && end) {
  5451. width = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2));
  5452. }
  5453. return width;
  5454. },
  5455. _getWidth: function _getWidth() {
  5456. var width = this.get('_width');
  5457. if (!width) {
  5458. var coord = this.get('coord');
  5459. if (coord && coord.isPolar && !coord.transposed) {
  5460. width = (coord.endAngle - coord.startAngle) * coord.circleRadius;
  5461. } else {
  5462. width = this.getDimWidth('x');
  5463. }
  5464. this.set('_width', width);
  5465. }
  5466. return width;
  5467. },
  5468. _toNormalizedSize: function _toNormalizedSize(size) {
  5469. var width = this._getWidth();
  5470. return size / width;
  5471. },
  5472. _toCoordSize: function _toCoordSize(normalizeSize) {
  5473. var width = this._getWidth();
  5474. return width * normalizeSize;
  5475. },
  5476. getNormalizedSize: function getNormalizedSize(obj) {
  5477. var size = this.getAttrValue('size', obj);
  5478. if (Util.isNil(size)) {
  5479. size = this.getDefalutSize();
  5480. } else {
  5481. size = this._toNormalizedSize(size);
  5482. }
  5483. return size;
  5484. },
  5485. getSize: function getSize(obj) {
  5486. var size = this.getAttrValue('size', obj);
  5487. if (Util.isNil(size)) {
  5488. var normalizeSize = this.getDefalutSize();
  5489. size = this._toCoordSize(normalizeSize);
  5490. }
  5491. return size;
  5492. }
  5493. };
  5494. module.exports = SizeMixin;
  5495. /***/ }),
  5496. /* 74 */,
  5497. /* 75 */
  5498. /***/ (function(module, exports, __webpack_require__) {
  5499. "use strict";
  5500. exports.__esModule = true;
  5501. exports.merge = merge;
  5502. exports.values = values;
  5503. exports.firstValue = firstValue;
  5504. exports.group = group;
  5505. exports.groupToMap = groupToMap;
  5506. exports.remove = remove;
  5507. exports.getRange = getRange;
  5508. var _util = __webpack_require__(20);
  5509. function merge(dataArray) {
  5510. var rst = [];
  5511. for (var i = 0, len = dataArray.length; i < len; i++) {
  5512. rst = rst.concat(dataArray[i]);
  5513. }
  5514. return rst;
  5515. }
  5516. function values(data, name) {
  5517. var rst = [];
  5518. var tmpMap = {};
  5519. for (var i = 0, len = data.length; i < len; i++) {
  5520. var obj = data[i];
  5521. var value = obj[name];
  5522. if (!(0, _util.isNil)(value)) {
  5523. if (!(0, _util.isArray)(value)) {
  5524. if (!tmpMap[value]) {
  5525. rst.push(value);
  5526. tmpMap[value] = true;
  5527. }
  5528. } else {
  5529. (0, _util.each)(value, function (val) {
  5530. if (!tmpMap[val]) {
  5531. rst.push(val);
  5532. tmpMap[val] = true;
  5533. }
  5534. });
  5535. }
  5536. }
  5537. }
  5538. return rst;
  5539. }
  5540. function firstValue(data, name) {
  5541. var rst = null;
  5542. for (var i = 0, len = data.length; i < len; i++) {
  5543. var obj = data[i];
  5544. var value = obj[name];
  5545. if (!(0, _util.isNil)(value)) {
  5546. if ((0, _util.isArray)(value)) {
  5547. rst = value[0];
  5548. } else {
  5549. rst = value;
  5550. }
  5551. break;
  5552. }
  5553. }
  5554. return rst;
  5555. }
  5556. function groupToMap(data, fields) {
  5557. if (!fields) {
  5558. return {
  5559. 0: data
  5560. };
  5561. }
  5562. var callback = function callback(row) {
  5563. var unique = '_';
  5564. for (var i = 0, l = fields.length; i < l; i++) {
  5565. unique += row[fields[i]] && row[fields[i]].toString();
  5566. }
  5567. return unique;
  5568. };
  5569. var groups = {};
  5570. for (var i = 0, len = data.length; i < len; i++) {
  5571. var row = data[i];
  5572. var key = callback(row);
  5573. if (groups[key]) {
  5574. groups[key].push(row);
  5575. } else {
  5576. groups[key] = [row];
  5577. }
  5578. }
  5579. return groups;
  5580. }
  5581. function group(data, fields, appendConditions) {
  5582. if (appendConditions === void 0) {
  5583. appendConditions = {};
  5584. }
  5585. if (!fields) {
  5586. return [data];
  5587. }
  5588. var groups = groupToMap(data, fields);
  5589. var array = [];
  5590. if (fields.length === 1 && appendConditions[fields[0]]) {
  5591. var _values = appendConditions[fields[0]];
  5592. (0, _util.each)(_values, function (value) {
  5593. value = '_' + value;
  5594. array.push(groups[value]);
  5595. });
  5596. } else {
  5597. for (var i in groups) {
  5598. array.push(groups[i]);
  5599. }
  5600. }
  5601. return array;
  5602. }
  5603. function remove(arr, obj) {
  5604. if (!arr) {
  5605. return;
  5606. }
  5607. var index = arr.indexOf(obj);
  5608. if (index !== -1) {
  5609. arr.splice(index, 1);
  5610. }
  5611. }
  5612. function getRange(values) {
  5613. if (!values.length) {
  5614. return {
  5615. min: 0,
  5616. max: 0
  5617. };
  5618. }
  5619. var max = Math.max.apply(null, values);
  5620. var min = Math.min.apply(null, values);
  5621. return {
  5622. min: min,
  5623. max: max
  5624. };
  5625. }
  5626. /***/ }),
  5627. /* 76 */
  5628. /***/ (function(module, exports, __webpack_require__) {
  5629. "use strict";
  5630. var _interopRequireDefault = __webpack_require__(1);
  5631. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  5632. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  5633. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  5634. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  5635. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  5636. /**
  5637. * marker shapes,used for tooltip and legend
  5638. */
  5639. var Util = __webpack_require__(0);
  5640. var _require = __webpack_require__(16),
  5641. Shape = _require.Shape;
  5642. var SYMBOLS = {
  5643. circle: function circle(x, y, r, ctx) {
  5644. ctx.arc(x, y, r, 0, Math.PI * 2, false);
  5645. },
  5646. square: function square(x, y, r, ctx) {
  5647. ctx.moveTo(x - r, y - r);
  5648. ctx.lineTo(x + r, y - r);
  5649. ctx.lineTo(x + r, y + r);
  5650. ctx.lineTo(x - r, y + r);
  5651. ctx.closePath();
  5652. }
  5653. };
  5654. var Marker = /*#__PURE__*/function (_Shape) {
  5655. (0, _inheritsLoose2["default"])(Marker, _Shape);
  5656. var _super = _createSuper(Marker);
  5657. function Marker() {
  5658. return _Shape.apply(this, arguments) || this;
  5659. }
  5660. var _proto = Marker.prototype;
  5661. _proto._initProperties = function _initProperties() {
  5662. _Shape.prototype._initProperties.call(this);
  5663. this._attrs.canFill = true;
  5664. this._attrs.canStroke = true;
  5665. this._attrs.type = 'marker';
  5666. };
  5667. _proto.getDefaultAttrs = function getDefaultAttrs() {
  5668. return {
  5669. x: 0,
  5670. y: 0,
  5671. lineWidth: 0
  5672. };
  5673. };
  5674. _proto.createPath = function createPath(context) {
  5675. var attrs = this.get('attrs');
  5676. var x = attrs.x,
  5677. y = attrs.y,
  5678. radius = attrs.radius;
  5679. var symbol = attrs.symbol || 'circle';
  5680. var method;
  5681. if (Util.isFunction(symbol)) {
  5682. method = symbol;
  5683. } else {
  5684. method = SYMBOLS[symbol];
  5685. }
  5686. context.beginPath();
  5687. method(x, y, radius, context, this);
  5688. };
  5689. _proto.calculateBox = function calculateBox() {
  5690. var attrs = this.get('attrs');
  5691. var x = attrs.x,
  5692. y = attrs.y,
  5693. radius = attrs.radius;
  5694. return {
  5695. minX: x - radius,
  5696. minY: y - radius,
  5697. maxX: x + radius,
  5698. maxY: y + radius
  5699. };
  5700. };
  5701. return Marker;
  5702. }(Shape);
  5703. module.exports = Marker;
  5704. /***/ }),
  5705. /* 77 */
  5706. /***/ (function(module, exports, __webpack_require__) {
  5707. "use strict";
  5708. var Core = {};
  5709. var Global = __webpack_require__(6);
  5710. Core.Global = Global;
  5711. Core.version = Global.version;
  5712. Core.Chart = __webpack_require__(30);
  5713. Core.Shape = __webpack_require__(19);
  5714. Core.G = __webpack_require__(16);
  5715. Core.Util = __webpack_require__(0);
  5716. Core.Helper = __webpack_require__(37); // Core.track = function(enable) {
  5717. // Global.trackable = enable;
  5718. // };
  5719. // require('./track');
  5720. // 2018-12-27 关闭打点
  5721. Core.track = function () {
  5722. return null;
  5723. };
  5724. module.exports = Core;
  5725. /***/ }),
  5726. /* 78 */
  5727. /***/ (function(module, exports, __webpack_require__) {
  5728. "use strict";
  5729. /**
  5730. * @fileOverview default theme
  5731. * @author dxq613@gail.com
  5732. */
  5733. var Util = __webpack_require__(0);
  5734. var color1 = '#E8E8E8'; // color of axis-line and axis-grid
  5735. var color2 = '#808080'; // color of axis label
  5736. var defaultAxis = {
  5737. label: {
  5738. fill: color2,
  5739. fontSize: 10
  5740. },
  5741. line: {
  5742. stroke: color1,
  5743. lineWidth: 1
  5744. },
  5745. grid: {
  5746. type: 'line',
  5747. stroke: color1,
  5748. lineWidth: 1,
  5749. lineDash: [2]
  5750. },
  5751. tickLine: null,
  5752. labelOffset: 7.5
  5753. };
  5754. var Theme = {
  5755. fontFamily: '"Helvetica Neue", "San Francisco", Helvetica, Tahoma, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", sans-serif',
  5756. defaultColor: '#1890FF',
  5757. pixelRatio: 1,
  5758. padding: 'auto',
  5759. appendPadding: 15,
  5760. colors: ['#1890FF', '#2FC25B', '#FACC14', '#223273', '#8543E0', '#13C2C2', '#3436C7', '#F04864'],
  5761. shapes: {
  5762. line: ['line', 'dash'],
  5763. point: ['circle', 'hollowCircle']
  5764. },
  5765. sizes: [4, 10],
  5766. axis: {
  5767. common: defaultAxis,
  5768. // common axis configuration
  5769. bottom: Util.mix({}, defaultAxis, {
  5770. grid: null
  5771. }),
  5772. left: Util.mix({}, defaultAxis, {
  5773. line: null
  5774. }),
  5775. right: Util.mix({}, defaultAxis, {
  5776. line: null
  5777. }),
  5778. circle: Util.mix({}, defaultAxis, {
  5779. line: null
  5780. }),
  5781. radius: Util.mix({}, defaultAxis, {
  5782. labelOffset: 4
  5783. })
  5784. },
  5785. shape: {
  5786. line: {
  5787. lineWidth: 2,
  5788. lineJoin: 'round',
  5789. lineCap: 'round'
  5790. },
  5791. point: {
  5792. lineWidth: 0,
  5793. size: 3
  5794. },
  5795. area: {
  5796. fillOpacity: 0.1
  5797. }
  5798. },
  5799. _defaultAxis: defaultAxis
  5800. };
  5801. module.exports = Theme;
  5802. /***/ }),
  5803. /* 79 */
  5804. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5805. "use strict";
  5806. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__filter__ = __webpack_require__(39);
  5807. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__contains__ = __webpack_require__(28);
  5808. /**
  5809. * Flattens `array` a single level deep.
  5810. *
  5811. * @param {Array} arr The array to inspect.
  5812. * @param {Array} values The values to exclude.
  5813. * @return {Array} Returns the new array of filtered values.
  5814. * @example
  5815. * difference([2, 1], [2, 3]); // => [1]
  5816. */
  5817. var difference = function (arr, values) {
  5818. if (values === void 0) {
  5819. values = [];
  5820. }
  5821. return Object(__WEBPACK_IMPORTED_MODULE_0__filter__["a" /* default */])(arr, function (value) {
  5822. return !Object(__WEBPACK_IMPORTED_MODULE_1__contains__["a" /* default */])(values, value);
  5823. });
  5824. };
  5825. /* harmony default export */ __webpack_exports__["a"] = (difference);
  5826. /***/ }),
  5827. /* 80 */
  5828. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5829. "use strict";
  5830. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_function__ = __webpack_require__(9);
  5831. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_match__ = __webpack_require__(51);
  5832. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__is_array__ = __webpack_require__(5);
  5833. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__is_plain_object__ = __webpack_require__(24);
  5834. function find(arr, predicate) {
  5835. if (!Object(__WEBPACK_IMPORTED_MODULE_2__is_array__["a" /* default */])(arr)) return null;
  5836. var _predicate;
  5837. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_function__["a" /* default */])(predicate)) {
  5838. _predicate = predicate;
  5839. }
  5840. if (Object(__WEBPACK_IMPORTED_MODULE_3__is_plain_object__["a" /* default */])(predicate)) {
  5841. _predicate = function (a) {
  5842. return Object(__WEBPACK_IMPORTED_MODULE_1__is_match__["a" /* default */])(a, predicate);
  5843. };
  5844. }
  5845. if (_predicate) {
  5846. for (var i = 0; i < arr.length; i += 1) {
  5847. if (_predicate(arr[i])) {
  5848. return arr[i];
  5849. }
  5850. }
  5851. }
  5852. return null;
  5853. }
  5854. /* harmony default export */ __webpack_exports__["a"] = (find);
  5855. /***/ }),
  5856. /* 81 */
  5857. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5858. "use strict";
  5859. function findIndex(arr, predicate, fromIndex) {
  5860. if (fromIndex === void 0) {
  5861. fromIndex = 0;
  5862. }
  5863. for (var i = fromIndex; i < arr.length; i++) {
  5864. if (predicate(arr[i], i)) {
  5865. // 找到终止循环
  5866. return i;
  5867. }
  5868. }
  5869. return -1;
  5870. }
  5871. /* harmony default export */ __webpack_exports__["a"] = (findIndex);
  5872. /***/ }),
  5873. /* 82 */
  5874. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5875. "use strict";
  5876. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(14);
  5877. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(5);
  5878. var firstValue = function (data, name) {
  5879. var rst = null;
  5880. for (var i = 0; i < data.length; i++) {
  5881. var obj = data[i];
  5882. var value = obj[name];
  5883. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a" /* default */])(value)) {
  5884. if (Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a" /* default */])(value)) {
  5885. rst = value[0]; // todo 这里是否应该使用递归,调用 firstValue @绝云
  5886. } else {
  5887. rst = value;
  5888. }
  5889. break;
  5890. }
  5891. }
  5892. return rst;
  5893. };
  5894. /* harmony default export */ __webpack_exports__["a"] = (firstValue);
  5895. /***/ }),
  5896. /* 83 */
  5897. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5898. "use strict";
  5899. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  5900. /**
  5901. * Flattens `array` a single level deep.
  5902. *
  5903. * @param {Array} arr The array to flatten.
  5904. * @return {Array} Returns the new flattened array.
  5905. * @example
  5906. *
  5907. * flatten([1, [2, [3, [4]], 5]]); // => [1, 2, [3, [4]], 5]
  5908. */
  5909. var flatten = function (arr) {
  5910. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(arr)) {
  5911. return [];
  5912. }
  5913. var rst = [];
  5914. for (var i = 0; i < arr.length; i++) {
  5915. rst = rst.concat(arr[i]);
  5916. }
  5917. return rst;
  5918. };
  5919. /* harmony default export */ __webpack_exports__["a"] = (flatten);
  5920. /***/ }),
  5921. /* 84 */
  5922. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5923. "use strict";
  5924. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  5925. /**
  5926. * Flattens `array` a single level deep.
  5927. *
  5928. * @param {Array} arr The array to flatten.
  5929. * @param {Array} result The array to return.
  5930. * @return {Array} Returns the new flattened array.
  5931. * @example
  5932. *
  5933. * flattenDeep([1, [2, [3, [4]], 5]]); // => [1, 2, 3, 4, 5]
  5934. */
  5935. var flattenDeep = function (arr, result) {
  5936. if (result === void 0) {
  5937. result = [];
  5938. }
  5939. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(arr)) {
  5940. result.push(arr);
  5941. } else {
  5942. for (var i = 0; i < arr.length; i += 1) {
  5943. flattenDeep(arr[i], result);
  5944. }
  5945. }
  5946. return result;
  5947. };
  5948. /* harmony default export */ __webpack_exports__["a"] = (flattenDeep);
  5949. /***/ }),
  5950. /* 85 */
  5951. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5952. "use strict";
  5953. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  5954. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__filter__ = __webpack_require__(39);
  5955. var getRange = function (values) {
  5956. // 存在 NaN 时,min,max 判定会出问题
  5957. values = Object(__WEBPACK_IMPORTED_MODULE_1__filter__["a" /* default */])(values, function (v) {
  5958. return !isNaN(v);
  5959. });
  5960. if (!values.length) {
  5961. // 如果没有数值则直接返回0
  5962. return {
  5963. min: 0,
  5964. max: 0
  5965. };
  5966. }
  5967. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(values[0])) {
  5968. var tmp = [];
  5969. for (var i = 0; i < values.length; i++) {
  5970. tmp = tmp.concat(values[i]);
  5971. }
  5972. values = tmp;
  5973. }
  5974. var max = Math.max.apply(null, values);
  5975. var min = Math.min.apply(null, values);
  5976. return {
  5977. min: min,
  5978. max: max
  5979. };
  5980. };
  5981. /* harmony default export */ __webpack_exports__["a"] = (getRange);
  5982. /***/ }),
  5983. /* 86 */
  5984. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5985. "use strict";
  5986. var arrPrototype = Array.prototype;
  5987. var splice = arrPrototype.splice;
  5988. var indexOf = arrPrototype.indexOf;
  5989. var pull = function (arr) {
  5990. var values = [];
  5991. for (var _i = 1; _i < arguments.length; _i++) {
  5992. values[_i - 1] = arguments[_i];
  5993. }
  5994. for (var i = 0; i < values.length; i++) {
  5995. var value = values[i];
  5996. var fromIndex = -1;
  5997. while ((fromIndex = indexOf.call(arr, value)) > -1) {
  5998. splice.call(arr, fromIndex, 1);
  5999. }
  6000. }
  6001. return arr;
  6002. };
  6003. /* harmony default export */ __webpack_exports__["a"] = (pull);
  6004. /***/ }),
  6005. /* 87 */
  6006. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6007. "use strict";
  6008. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  6009. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(5);
  6010. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__is_plain_object__ = __webpack_require__(24);
  6011. var reduce = function (arr, fn, init) {
  6012. if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a" /* default */])(arr) && !Object(__WEBPACK_IMPORTED_MODULE_2__is_plain_object__["a" /* default */])(arr)) {
  6013. return arr;
  6014. }
  6015. var result = init;
  6016. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(arr, function (data, i) {
  6017. result = fn(result, data, i);
  6018. });
  6019. return result;
  6020. };
  6021. /* harmony default export */ __webpack_exports__["a"] = (reduce);
  6022. /***/ }),
  6023. /* 88 */
  6024. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6025. "use strict";
  6026. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(7);
  6027. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__pull_at__ = __webpack_require__(53);
  6028. var remove = function (arr, predicate) {
  6029. /**
  6030. * const arr = [1, 2, 3, 4]
  6031. * const evens = remove(arr, n => n % 2 == 0)
  6032. * console.log(arr) // => [1, 3]
  6033. * console.log(evens) // => [2, 4]
  6034. */
  6035. var result = [];
  6036. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a" /* default */])(arr)) {
  6037. return result;
  6038. }
  6039. var i = -1;
  6040. var indexes = [];
  6041. var length = arr.length;
  6042. while (++i < length) {
  6043. var value = arr[i];
  6044. if (predicate(value, i, arr)) {
  6045. result.push(value);
  6046. indexes.push(i);
  6047. }
  6048. }
  6049. Object(__WEBPACK_IMPORTED_MODULE_1__pull_at__["a" /* default */])(arr, indexes);
  6050. return result;
  6051. };
  6052. /* harmony default export */ __webpack_exports__["a"] = (remove);
  6053. /***/ }),
  6054. /* 89 */
  6055. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6056. "use strict";
  6057. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  6058. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_string__ = __webpack_require__(18);
  6059. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__is_function__ = __webpack_require__(9);
  6060. function sortBy(arr, key) {
  6061. var comparer;
  6062. if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a" /* default */])(key)) {
  6063. comparer = function (a, b) {
  6064. return key(a) - key(b);
  6065. };
  6066. } else {
  6067. var keys_1 = [];
  6068. if (Object(__WEBPACK_IMPORTED_MODULE_1__is_string__["a" /* default */])(key)) {
  6069. keys_1.push(key);
  6070. } else if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(key)) {
  6071. keys_1 = key;
  6072. }
  6073. comparer = function (a, b) {
  6074. for (var i = 0; i < keys_1.length; i += 1) {
  6075. var prop = keys_1[i];
  6076. if (a[prop] > b[prop]) {
  6077. return 1;
  6078. }
  6079. if (a[prop] < b[prop]) {
  6080. return -1;
  6081. }
  6082. }
  6083. return 0;
  6084. };
  6085. }
  6086. arr.sort(comparer);
  6087. return arr;
  6088. }
  6089. /* harmony default export */ __webpack_exports__["a"] = (sortBy);
  6090. /***/ }),
  6091. /* 90 */
  6092. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6093. "use strict";
  6094. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__uniq__ = __webpack_require__(54);
  6095. var union = function () {
  6096. var sources = [];
  6097. for (var _i = 0; _i < arguments.length; _i++) {
  6098. sources[_i] = arguments[_i];
  6099. }
  6100. return Object(__WEBPACK_IMPORTED_MODULE_0__uniq__["a" /* default */])([].concat.apply([], sources));
  6101. };
  6102. /* harmony default export */ __webpack_exports__["a"] = (union);
  6103. /***/ }),
  6104. /* 91 */
  6105. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6106. "use strict";
  6107. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  6108. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(5);
  6109. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__is_nil__ = __webpack_require__(14);
  6110. /* harmony default export */ __webpack_exports__["a"] = (function (data, name) {
  6111. var rst = [];
  6112. var tmpMap = {};
  6113. data.forEach(function (obj) {
  6114. var value = obj[name];
  6115. if (!Object(__WEBPACK_IMPORTED_MODULE_2__is_nil__["a" /* default */])(value)) {
  6116. // flatten
  6117. if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a" /* default */])(value)) {
  6118. value = [value];
  6119. }
  6120. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(value, function (val) {
  6121. // unique
  6122. if (!tmpMap[val]) {
  6123. rst.push(val);
  6124. tmpMap[val] = true;
  6125. }
  6126. });
  6127. }
  6128. });
  6129. return rst;
  6130. });
  6131. /***/ }),
  6132. /* 92 */
  6133. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6134. "use strict";
  6135. /* harmony export (immutable) */ __webpack_exports__["a"] = head;
  6136. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(7);
  6137. function head(o) {
  6138. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a" /* default */])(o)) {
  6139. return o[0];
  6140. }
  6141. return undefined;
  6142. }
  6143. /***/ }),
  6144. /* 93 */
  6145. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6146. "use strict";
  6147. /* harmony export (immutable) */ __webpack_exports__["a"] = last;
  6148. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(7);
  6149. function last(o) {
  6150. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a" /* default */])(o)) {
  6151. var arr = o;
  6152. return arr[arr.length - 1];
  6153. }
  6154. return undefined;
  6155. }
  6156. /***/ }),
  6157. /* 94 */
  6158. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6159. "use strict";
  6160. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  6161. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_string__ = __webpack_require__(18);
  6162. function startsWith(arr, e) {
  6163. return Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(arr) || Object(__WEBPACK_IMPORTED_MODULE_1__is_string__["a" /* default */])(arr) ? arr[0] === e : false;
  6164. }
  6165. /* harmony default export */ __webpack_exports__["a"] = (startsWith);
  6166. /***/ }),
  6167. /* 95 */
  6168. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6169. "use strict";
  6170. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  6171. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_string__ = __webpack_require__(18);
  6172. function endsWith(arr, e) {
  6173. return Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(arr) || Object(__WEBPACK_IMPORTED_MODULE_1__is_string__["a" /* default */])(arr) ? arr[arr.length - 1] === e : false;
  6174. }
  6175. /* harmony default export */ __webpack_exports__["a"] = (endsWith);
  6176. /***/ }),
  6177. /* 96 */
  6178. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6179. "use strict";
  6180. /**
  6181. * 只要有一个不满足条件就返回 false
  6182. * @param arr
  6183. * @param func
  6184. */
  6185. var every = function (arr, func) {
  6186. for (var i = 0; i < arr.length; i++) {
  6187. if (!func(arr[i], i)) return false;
  6188. }
  6189. return true;
  6190. };
  6191. /* harmony default export */ __webpack_exports__["a"] = (every);
  6192. /***/ }),
  6193. /* 97 */
  6194. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6195. "use strict";
  6196. /**
  6197. * 只要有一个满足条件就返回 true
  6198. * @param arr
  6199. * @param func
  6200. */
  6201. var some = function (arr, func) {
  6202. for (var i = 0; i < arr.length; i++) {
  6203. if (func(arr[i], i)) return true;
  6204. }
  6205. return false;
  6206. };
  6207. /* harmony default export */ __webpack_exports__["a"] = (some);
  6208. /***/ }),
  6209. /* 98 */
  6210. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6211. "use strict";
  6212. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__group_to_map__ = __webpack_require__(55);
  6213. /* harmony default export */ __webpack_exports__["a"] = (function (data, condition) {
  6214. if (!condition) {
  6215. // 没有条件,则自身改成数组
  6216. return [data];
  6217. }
  6218. var groups = Object(__WEBPACK_IMPORTED_MODULE_0__group_to_map__["a" /* default */])(data, condition);
  6219. var array = [];
  6220. for (var i in groups) {
  6221. array.push(groups[i]);
  6222. }
  6223. return array;
  6224. });
  6225. /***/ }),
  6226. /* 99 */
  6227. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6228. "use strict";
  6229. /**
  6230. * 获取封装的事件
  6231. * @protected
  6232. * @param {Object} obj 对象
  6233. * @param {String} action 事件名称
  6234. * @return {Function} 返回事件处理函数
  6235. */
  6236. function getWrapBehavior(obj, action) {
  6237. return obj['_wrap_' + action];
  6238. }
  6239. /* harmony default export */ __webpack_exports__["a"] = (getWrapBehavior);
  6240. /***/ }),
  6241. /* 100 */
  6242. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6243. "use strict";
  6244. /**
  6245. * 封装事件,便于使用上下文this,和便于解除事件时使用
  6246. * @protected
  6247. * @param {Object} obj 对象
  6248. * @param {String} action 事件名称
  6249. * @return {Function} 返回事件处理函数
  6250. */
  6251. function wrapBehavior(obj, action) {
  6252. if (obj['_wrap_' + action]) {
  6253. return obj['_wrap_' + action];
  6254. }
  6255. var method = function (e) {
  6256. obj[action](e);
  6257. };
  6258. obj['_wrap_' + action] = method;
  6259. return method;
  6260. }
  6261. /* harmony default export */ __webpack_exports__["a"] = (wrapBehavior);
  6262. /***/ }),
  6263. /* 101 */
  6264. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6265. "use strict";
  6266. var numColorCache = {};
  6267. function numberToColor(num) {
  6268. // 增加缓存
  6269. var color = numColorCache[num];
  6270. if (!color) {
  6271. var str = num.toString(16);
  6272. for (var i = str.length; i < 6; i++) {
  6273. str = '0' + str;
  6274. }
  6275. color = '#' + str;
  6276. numColorCache[num] = color;
  6277. }
  6278. return color;
  6279. }
  6280. /* harmony default export */ __webpack_exports__["a"] = (numberToColor);
  6281. /***/ }),
  6282. /* 102 */
  6283. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6284. "use strict";
  6285. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  6286. function parseRadius(radius) {
  6287. var r1 = 0,
  6288. r2 = 0,
  6289. r3 = 0,
  6290. r4 = 0;
  6291. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(radius)) {
  6292. if (radius.length === 1) {
  6293. r1 = r2 = r3 = r4 = radius[0];
  6294. } else if (radius.length === 2) {
  6295. r1 = r3 = radius[0];
  6296. r2 = r4 = radius[1];
  6297. } else if (radius.length === 3) {
  6298. r1 = radius[0];
  6299. r2 = r4 = radius[1];
  6300. r3 = radius[2];
  6301. } else {
  6302. r1 = radius[0];
  6303. r2 = radius[1];
  6304. r3 = radius[2];
  6305. r4 = radius[3];
  6306. }
  6307. } else {
  6308. r1 = r2 = r3 = r4 = radius;
  6309. }
  6310. return {
  6311. r1: r1,
  6312. r2: r2,
  6313. r3: r3,
  6314. r4: r4
  6315. };
  6316. }
  6317. /* harmony default export */ __webpack_exports__["a"] = (parseRadius);
  6318. /***/ }),
  6319. /* 103 */
  6320. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6321. "use strict";
  6322. var clamp = function (a, min, max) {
  6323. if (a < min) {
  6324. return min;
  6325. } else if (a > max) {
  6326. return max;
  6327. }
  6328. return a;
  6329. };
  6330. /* harmony default export */ __webpack_exports__["a"] = (clamp);
  6331. /***/ }),
  6332. /* 104 */
  6333. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6334. "use strict";
  6335. var fixedBase = function (v, base) {
  6336. var str = base.toString();
  6337. var index = str.indexOf('.');
  6338. if (index === -1) {
  6339. return Math.round(v);
  6340. }
  6341. var length = str.substr(index + 1).length;
  6342. if (length > 20) {
  6343. length = 20;
  6344. }
  6345. return parseFloat(v.toFixed(length));
  6346. };
  6347. /* harmony default export */ __webpack_exports__["a"] = (fixedBase);
  6348. /***/ }),
  6349. /* 105 */
  6350. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6351. "use strict";
  6352. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(12);
  6353. var isDecimal = function (num) {
  6354. return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a" /* default */])(num) && num % 1 !== 0;
  6355. };
  6356. /* harmony default export */ __webpack_exports__["a"] = (isDecimal);
  6357. /***/ }),
  6358. /* 106 */
  6359. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6360. "use strict";
  6361. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(12);
  6362. var isEven = function (num) {
  6363. return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a" /* default */])(num) && num % 2 === 0;
  6364. };
  6365. /* harmony default export */ __webpack_exports__["a"] = (isEven);
  6366. /***/ }),
  6367. /* 107 */
  6368. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6369. "use strict";
  6370. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(12);
  6371. var isInteger = Number.isInteger ? Number.isInteger : function (num) {
  6372. return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a" /* default */])(num) && num % 1 === 0;
  6373. };
  6374. /* harmony default export */ __webpack_exports__["a"] = (isInteger);
  6375. /***/ }),
  6376. /* 108 */
  6377. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6378. "use strict";
  6379. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(12);
  6380. var isNegative = function (num) {
  6381. return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a" /* default */])(num) && num < 0;
  6382. };
  6383. /* harmony default export */ __webpack_exports__["a"] = (isNegative);
  6384. /***/ }),
  6385. /* 109 */
  6386. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6387. "use strict";
  6388. /* harmony export (immutable) */ __webpack_exports__["a"] = isNumberEqual;
  6389. var PRECISION = 0.00001; // numbers less than this is considered as 0
  6390. function isNumberEqual(a, b, precision) {
  6391. if (precision === void 0) {
  6392. precision = PRECISION;
  6393. }
  6394. return Math.abs(a - b) < precision;
  6395. }
  6396. ;
  6397. /***/ }),
  6398. /* 110 */
  6399. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6400. "use strict";
  6401. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(12);
  6402. var isOdd = function (num) {
  6403. return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a" /* default */])(num) && num % 2 !== 0;
  6404. };
  6405. /* harmony default export */ __webpack_exports__["a"] = (isOdd);
  6406. /***/ }),
  6407. /* 111 */
  6408. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6409. "use strict";
  6410. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(12);
  6411. var isPositive = function (num) {
  6412. return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a" /* default */])(num) && num > 0;
  6413. };
  6414. /* harmony default export */ __webpack_exports__["a"] = (isPositive);
  6415. /***/ }),
  6416. /* 112 */
  6417. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6418. "use strict";
  6419. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  6420. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(5);
  6421. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__is_function__ = __webpack_require__(9);
  6422. /**
  6423. * @param {Array} arr The array to iterate over.
  6424. * @param {Function} [fn] The iteratee invoked per element.
  6425. * @return {*} Returns the maximum value.
  6426. * @example
  6427. *
  6428. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  6429. *
  6430. * maxBy(objects, function(o) { return o.n; });
  6431. * // => { 'n': 2 }
  6432. *
  6433. * maxBy(objects, 'n');
  6434. * // => { 'n': 2 }
  6435. */
  6436. /* harmony default export */ __webpack_exports__["a"] = (function (arr, fn) {
  6437. if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a" /* default */])(arr)) {
  6438. return undefined;
  6439. }
  6440. var max = arr[0];
  6441. var maxData;
  6442. if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a" /* default */])(fn)) {
  6443. maxData = fn(arr[0]);
  6444. } else {
  6445. maxData = arr[0][fn];
  6446. }
  6447. var data;
  6448. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(arr, function (val) {
  6449. if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a" /* default */])(fn)) {
  6450. data = fn(val);
  6451. } else {
  6452. data = val[fn];
  6453. }
  6454. if (data > maxData) {
  6455. max = val;
  6456. maxData = data;
  6457. }
  6458. });
  6459. return max;
  6460. });
  6461. /***/ }),
  6462. /* 113 */
  6463. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6464. "use strict";
  6465. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  6466. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(5);
  6467. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__is_function__ = __webpack_require__(9);
  6468. /**
  6469. * @param {Array} arr The array to iterate over.
  6470. * @param {Function} [fn] The iteratee invoked per element.
  6471. * @return {*} Returns the minimum value.
  6472. * @example
  6473. *
  6474. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  6475. *
  6476. * minBy(objects, function(o) { return o.n; });
  6477. * // => { 'n': 1 }
  6478. *
  6479. * minBy(objects, 'n');
  6480. * // => { 'n': 1 }
  6481. */
  6482. /* harmony default export */ __webpack_exports__["a"] = (function (arr, fn) {
  6483. if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a" /* default */])(arr)) {
  6484. return undefined;
  6485. }
  6486. var min = arr[0];
  6487. var minData;
  6488. if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a" /* default */])(fn)) {
  6489. minData = fn(arr[0]);
  6490. } else {
  6491. minData = arr[0][fn];
  6492. }
  6493. var data;
  6494. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(arr, function (val) {
  6495. if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a" /* default */])(fn)) {
  6496. data = fn(val);
  6497. } else {
  6498. data = val[fn];
  6499. }
  6500. if (data < minData) {
  6501. min = val;
  6502. minData = data;
  6503. }
  6504. });
  6505. return min;
  6506. });
  6507. /***/ }),
  6508. /* 114 */
  6509. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6510. "use strict";
  6511. var mod = function (n, m) {
  6512. return (n % m + m) % m;
  6513. };
  6514. /* harmony default export */ __webpack_exports__["a"] = (mod);
  6515. /***/ }),
  6516. /* 115 */
  6517. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6518. "use strict";
  6519. var DEGREE = 180 / Math.PI;
  6520. var toDegree = function (radian) {
  6521. return DEGREE * radian;
  6522. };
  6523. /* harmony default export */ __webpack_exports__["a"] = (toDegree);
  6524. /***/ }),
  6525. /* 116 */
  6526. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6527. "use strict";
  6528. /* harmony default export */ __webpack_exports__["a"] = (parseInt);
  6529. /***/ }),
  6530. /* 117 */
  6531. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6532. "use strict";
  6533. var RADIAN = Math.PI / 180;
  6534. var toRadian = function (degree) {
  6535. return RADIAN * degree;
  6536. };
  6537. /* harmony default export */ __webpack_exports__["a"] = (toRadian);
  6538. /***/ }),
  6539. /* 118 */
  6540. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6541. "use strict";
  6542. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  6543. /* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */]);
  6544. /***/ }),
  6545. /* 119 */
  6546. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6547. "use strict";
  6548. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__has__ = __webpack_require__(57);
  6549. /* harmony default export */ __webpack_exports__["a"] = (__WEBPACK_IMPORTED_MODULE_0__has__["a" /* default */]);
  6550. /***/ }),
  6551. /* 120 */
  6552. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6553. "use strict";
  6554. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__contains__ = __webpack_require__(28);
  6555. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__values__ = __webpack_require__(58);
  6556. /* harmony default export */ __webpack_exports__["a"] = (function (obj, value) {
  6557. return Object(__WEBPACK_IMPORTED_MODULE_0__contains__["a" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_1__values__["a" /* default */])(obj), value);
  6558. });
  6559. /***/ }),
  6560. /* 121 */
  6561. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6562. "use strict";
  6563. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__to_string__ = __webpack_require__(25);
  6564. var lowerCase = function (str) {
  6565. return Object(__WEBPACK_IMPORTED_MODULE_0__to_string__["a" /* default */])(str).toLowerCase();
  6566. };
  6567. /* harmony default export */ __webpack_exports__["a"] = (lowerCase);
  6568. /***/ }),
  6569. /* 122 */
  6570. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6571. "use strict";
  6572. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__to_string__ = __webpack_require__(25);
  6573. var lowerFirst = function (value) {
  6574. var str = Object(__WEBPACK_IMPORTED_MODULE_0__to_string__["a" /* default */])(value);
  6575. return str.charAt(0).toLowerCase() + str.substring(1);
  6576. };
  6577. /* harmony default export */ __webpack_exports__["a"] = (lowerFirst);
  6578. /***/ }),
  6579. /* 123 */
  6580. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6581. "use strict";
  6582. function substitute(str, o) {
  6583. if (!str || !o) {
  6584. return str;
  6585. }
  6586. return str.replace(/\\?\{([^{}]+)\}/g, function (match, name) {
  6587. if (match.charAt(0) === '\\') {
  6588. return match.slice(1);
  6589. }
  6590. return o[name] === undefined ? '' : o[name];
  6591. });
  6592. }
  6593. /* harmony default export */ __webpack_exports__["a"] = (substitute);
  6594. /***/ }),
  6595. /* 124 */
  6596. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6597. "use strict";
  6598. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__to_string__ = __webpack_require__(25);
  6599. var upperCase = function (str) {
  6600. return Object(__WEBPACK_IMPORTED_MODULE_0__to_string__["a" /* default */])(str).toUpperCase();
  6601. };
  6602. /* harmony default export */ __webpack_exports__["a"] = (upperCase);
  6603. /***/ }),
  6604. /* 125 */
  6605. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6606. "use strict";
  6607. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__to_string__ = __webpack_require__(25);
  6608. var upperFirst = function (value) {
  6609. var str = Object(__WEBPACK_IMPORTED_MODULE_0__to_string__["a" /* default */])(value);
  6610. return str.charAt(0).toUpperCase() + str.substring(1);
  6611. };
  6612. /* harmony default export */ __webpack_exports__["a"] = (upperFirst);
  6613. /***/ }),
  6614. /* 126 */
  6615. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6616. "use strict";
  6617. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(11);
  6618. /**
  6619. * 是否是参数类型
  6620. *
  6621. * @param {Object} value 测试的值
  6622. * @return {Boolean}
  6623. */
  6624. var isArguments = function (value) {
  6625. return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a" /* default */])(value, 'Arguments');
  6626. };
  6627. /* harmony default export */ __webpack_exports__["a"] = (isArguments);
  6628. /***/ }),
  6629. /* 127 */
  6630. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6631. "use strict";
  6632. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(11);
  6633. /**
  6634. * 是否是布尔类型
  6635. *
  6636. * @param {Object} value 测试的值
  6637. * @return {Boolean}
  6638. */
  6639. var isBoolean = function (value) {
  6640. return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a" /* default */])(value, 'Boolean');
  6641. };
  6642. /* harmony default export */ __webpack_exports__["a"] = (isBoolean);
  6643. /***/ }),
  6644. /* 128 */
  6645. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6646. "use strict";
  6647. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(11);
  6648. var isDate = function (value) {
  6649. return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a" /* default */])(value, 'Date');
  6650. };
  6651. /* harmony default export */ __webpack_exports__["a"] = (isDate);
  6652. /***/ }),
  6653. /* 129 */
  6654. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6655. "use strict";
  6656. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(11);
  6657. /**
  6658. * 是否是参数类型
  6659. *
  6660. * @param {Object} value 测试的值
  6661. * @return {Boolean}
  6662. */
  6663. var isError = function (value) {
  6664. return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a" /* default */])(value, 'Error');
  6665. };
  6666. /* harmony default export */ __webpack_exports__["a"] = (isError);
  6667. /***/ }),
  6668. /* 130 */
  6669. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6670. "use strict";
  6671. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(12);
  6672. /**
  6673. * 判断是否为有限数
  6674. * @return {Boolean}
  6675. */
  6676. /* harmony default export */ __webpack_exports__["a"] = (function (value) {
  6677. return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a" /* default */])(value) && isFinite(value);
  6678. });
  6679. /***/ }),
  6680. /* 131 */
  6681. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6682. "use strict";
  6683. var isNull = function (value) {
  6684. return value === null;
  6685. };
  6686. /* harmony default export */ __webpack_exports__["a"] = (isNull);
  6687. /***/ }),
  6688. /* 132 */
  6689. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6690. "use strict";
  6691. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(11);
  6692. var isRegExp = function (str) {
  6693. return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a" /* default */])(str, 'RegExp');
  6694. };
  6695. /* harmony default export */ __webpack_exports__["a"] = (isRegExp);
  6696. /***/ }),
  6697. /* 133 */
  6698. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6699. "use strict";
  6700. var isUndefined = function (value) {
  6701. return value === undefined;
  6702. };
  6703. /* harmony default export */ __webpack_exports__["a"] = (isUndefined);
  6704. /***/ }),
  6705. /* 134 */
  6706. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6707. "use strict";
  6708. /**
  6709. * 判断是否HTML元素
  6710. * @return {Boolean} 是否HTML元素
  6711. */
  6712. var isElement = function (o) {
  6713. return o instanceof Element || o instanceof HTMLDocument;
  6714. };
  6715. /* harmony default export */ __webpack_exports__["a"] = (isElement);
  6716. /***/ }),
  6717. /* 135 */
  6718. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6719. "use strict";
  6720. /* harmony export (immutable) */ __webpack_exports__["a"] = requestAnimationFrame;
  6721. function requestAnimationFrame(fn) {
  6722. var method = window.requestAnimationFrame || window.webkitRequestAnimationFrame || // @ts-ignore
  6723. window.mozRequestAnimationFrame || // @ts-ignore
  6724. window.msRequestAnimationFrame || function (f) {
  6725. return setTimeout(f, 16);
  6726. };
  6727. return method(fn);
  6728. }
  6729. ;
  6730. /***/ }),
  6731. /* 136 */
  6732. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6733. "use strict";
  6734. /* harmony export (immutable) */ __webpack_exports__["a"] = cancelAnimationFrame;
  6735. function cancelAnimationFrame(handler) {
  6736. var method = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || // @ts-ignore
  6737. window.mozCancelAnimationFrame || // @ts-ignore
  6738. window.msCancelAnimationFrame || clearTimeout;
  6739. method(handler);
  6740. }
  6741. ;
  6742. /***/ }),
  6743. /* 137 */
  6744. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6745. "use strict";
  6746. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__mix__ = __webpack_require__(41);
  6747. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(9);
  6748. var augment = function () {
  6749. var args = [];
  6750. for (var _i = 0; _i < arguments.length; _i++) {
  6751. args[_i] = arguments[_i];
  6752. }
  6753. var c = args[0];
  6754. for (var i = 1; i < args.length; i++) {
  6755. var obj = args[i];
  6756. if (Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a" /* default */])(obj)) {
  6757. obj = obj.prototype;
  6758. }
  6759. Object(__WEBPACK_IMPORTED_MODULE_0__mix__["a" /* default */])(c.prototype, obj);
  6760. }
  6761. };
  6762. /* harmony default export */ __webpack_exports__["a"] = (augment);
  6763. /***/ }),
  6764. /* 138 */
  6765. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6766. "use strict";
  6767. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  6768. var clone = function (obj) {
  6769. if (typeof obj !== 'object' || obj === null) {
  6770. return obj;
  6771. }
  6772. var rst;
  6773. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(obj)) {
  6774. rst = [];
  6775. for (var i = 0, l = obj.length; i < l; i++) {
  6776. if (typeof obj[i] === 'object' && obj[i] != null) {
  6777. rst[i] = clone(obj[i]);
  6778. } else {
  6779. rst[i] = obj[i];
  6780. }
  6781. }
  6782. } else {
  6783. rst = {};
  6784. for (var k in obj) {
  6785. if (typeof obj[k] === 'object' && obj[k] != null) {
  6786. rst[k] = clone(obj[k]);
  6787. } else {
  6788. rst[k] = obj[k];
  6789. }
  6790. }
  6791. }
  6792. return rst;
  6793. };
  6794. /* harmony default export */ __webpack_exports__["a"] = (clone);
  6795. /***/ }),
  6796. /* 139 */
  6797. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6798. "use strict";
  6799. function debounce(func, wait, immediate) {
  6800. var timeout;
  6801. return function () {
  6802. var context = this,
  6803. args = arguments;
  6804. var later = function () {
  6805. timeout = null;
  6806. if (!immediate) {
  6807. func.apply(context, args);
  6808. }
  6809. };
  6810. var callNow = immediate && !timeout;
  6811. clearTimeout(timeout);
  6812. timeout = setTimeout(later, wait);
  6813. if (callNow) {
  6814. func.apply(context, args);
  6815. }
  6816. };
  6817. }
  6818. /* harmony default export */ __webpack_exports__["a"] = (debounce);
  6819. /***/ }),
  6820. /* 140 */
  6821. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6822. "use strict";
  6823. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_function__ = __webpack_require__(9);
  6824. /**
  6825. * _.memoize(calColor);
  6826. * _.memoize(calColor, (...args) => args[0]);
  6827. * @param f
  6828. * @param resolver
  6829. */
  6830. /* harmony default export */ __webpack_exports__["a"] = (function (f, resolver) {
  6831. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_function__["a" /* default */])(f)) {
  6832. throw new TypeError('Expected a function');
  6833. }
  6834. var memoized = function () {
  6835. var args = [];
  6836. for (var _i = 0; _i < arguments.length; _i++) {
  6837. args[_i] = arguments[_i];
  6838. } // 使用方法构造 key,如果不存在 resolver,则直接取第一个参数作为 key
  6839. var key = resolver ? resolver.apply(this, args) : args[0];
  6840. var cache = memoized.cache;
  6841. if (cache.has(key)) {
  6842. return cache.get(key);
  6843. }
  6844. var result = f.apply(this, args); // 缓存起来
  6845. cache.set(key, result);
  6846. return result;
  6847. };
  6848. memoized.cache = new Map();
  6849. return memoized;
  6850. });
  6851. /***/ }),
  6852. /* 141 */
  6853. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6854. "use strict";
  6855. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(5);
  6856. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_plain_object__ = __webpack_require__(24);
  6857. var MAX_MIX_LEVEL = 5;
  6858. function _deepMix(dist, src, level, maxLevel) {
  6859. level = level || 0;
  6860. maxLevel = maxLevel || MAX_MIX_LEVEL;
  6861. for (var key in src) {
  6862. if (src.hasOwnProperty(key)) {
  6863. var value = src[key];
  6864. if (value !== null && Object(__WEBPACK_IMPORTED_MODULE_1__is_plain_object__["a" /* default */])(value)) {
  6865. if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_plain_object__["a" /* default */])(dist[key])) {
  6866. dist[key] = {};
  6867. }
  6868. if (level < maxLevel) {
  6869. _deepMix(dist[key], value, level + 1, maxLevel);
  6870. } else {
  6871. dist[key] = src[key];
  6872. }
  6873. } else if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a" /* default */])(value)) {
  6874. dist[key] = [];
  6875. dist[key] = dist[key].concat(value);
  6876. } else if (value !== undefined) {
  6877. dist[key] = value;
  6878. }
  6879. }
  6880. }
  6881. } // todo 重写
  6882. var deepMix = function (rst) {
  6883. var args = [];
  6884. for (var _i = 1; _i < arguments.length; _i++) {
  6885. args[_i - 1] = arguments[_i];
  6886. }
  6887. for (var i = 0; i < args.length; i += 1) {
  6888. _deepMix(rst, args[i]);
  6889. }
  6890. return rst;
  6891. };
  6892. /* harmony default export */ __webpack_exports__["a"] = (deepMix);
  6893. /***/ }),
  6894. /* 142 */
  6895. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6896. "use strict";
  6897. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__mix__ = __webpack_require__(41);
  6898. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(9);
  6899. var extend = function (subclass, superclass, overrides, staticOverrides) {
  6900. // 如果只提供父类构造函数,则自动生成子类构造函数
  6901. if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a" /* default */])(superclass)) {
  6902. overrides = superclass;
  6903. superclass = subclass;
  6904. subclass = function () {};
  6905. }
  6906. var create = Object.create ? function (proto, c) {
  6907. return Object.create(proto, {
  6908. constructor: {
  6909. value: c
  6910. }
  6911. });
  6912. } : function (proto, c) {
  6913. function Tmp() {}
  6914. Tmp.prototype = proto;
  6915. var o = new Tmp();
  6916. o.constructor = c;
  6917. return o;
  6918. };
  6919. var superObj = create(superclass.prototype, subclass); // new superclass(),//实例化父类作为子类的prototype
  6920. subclass.prototype = Object(__WEBPACK_IMPORTED_MODULE_0__mix__["a" /* default */])(superObj, subclass.prototype); // 指定子类的prototype
  6921. subclass.superclass = create(superclass.prototype, superclass);
  6922. Object(__WEBPACK_IMPORTED_MODULE_0__mix__["a" /* default */])(superObj, overrides);
  6923. Object(__WEBPACK_IMPORTED_MODULE_0__mix__["a" /* default */])(subclass, staticOverrides);
  6924. return subclass;
  6925. };
  6926. /* harmony default export */ __webpack_exports__["a"] = (extend);
  6927. /***/ }),
  6928. /* 143 */
  6929. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6930. "use strict";
  6931. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(7);
  6932. var indexOf = function (arr, obj) {
  6933. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a" /* default */])(arr)) {
  6934. return -1;
  6935. }
  6936. var m = Array.prototype.indexOf;
  6937. if (m) {
  6938. return m.call(arr, obj);
  6939. }
  6940. var index = -1;
  6941. for (var i = 0; i < arr.length; i++) {
  6942. if (arr[i] === obj) {
  6943. index = i;
  6944. break;
  6945. }
  6946. }
  6947. return index;
  6948. };
  6949. /* harmony default export */ __webpack_exports__["a"] = (indexOf);
  6950. /***/ }),
  6951. /* 144 */
  6952. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6953. "use strict";
  6954. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(14);
  6955. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(7);
  6956. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__get_type__ = __webpack_require__(59);
  6957. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__is_prototype__ = __webpack_require__(60);
  6958. var hasOwnProperty = Object.prototype.hasOwnProperty;
  6959. function isEmpty(value) {
  6960. /**
  6961. * isEmpty(null) => true
  6962. * isEmpty() => true
  6963. * isEmpty(true) => true
  6964. * isEmpty(1) => true
  6965. * isEmpty([1, 2, 3]) => false
  6966. * isEmpty('abc') => false
  6967. * isEmpty({ a: 1 }) => false
  6968. */
  6969. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a" /* default */])(value)) {
  6970. return true;
  6971. }
  6972. if (Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a" /* default */])(value)) {
  6973. return !value.length;
  6974. }
  6975. var type = Object(__WEBPACK_IMPORTED_MODULE_2__get_type__["a" /* default */])(value);
  6976. if (type === 'Map' || type === 'Set') {
  6977. return !value.size;
  6978. }
  6979. if (Object(__WEBPACK_IMPORTED_MODULE_3__is_prototype__["a" /* default */])(value)) {
  6980. return !Object.keys(value).length;
  6981. }
  6982. for (var key in value) {
  6983. if (hasOwnProperty.call(value, key)) {
  6984. return false;
  6985. }
  6986. }
  6987. return true;
  6988. }
  6989. /* harmony default export */ __webpack_exports__["a"] = (isEmpty);
  6990. /***/ }),
  6991. /* 145 */
  6992. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  6993. "use strict";
  6994. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_function__ = __webpack_require__(9);
  6995. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_equal__ = __webpack_require__(61);
  6996. /**
  6997. * @param {*} value The value to compare.
  6998. * @param {*} other The other value to compare.
  6999. * @param {Function} [fn] The function to customize comparisons.
  7000. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  7001. * @example
  7002. *
  7003. * function isGreeting(value) {
  7004. * return /^h(?:i|ello)$/.test(value);
  7005. * }
  7006. *
  7007. * function customizer(objValue, othValue) {
  7008. * if (isGreeting(objValue) && isGreeting(othValue)) {
  7009. * return true;
  7010. * }
  7011. * }
  7012. *
  7013. * var array = ['hello', 'goodbye'];
  7014. * var other = ['hi', 'goodbye'];
  7015. *
  7016. * isEqualWith(array, other, customizer); // => true
  7017. */
  7018. /* harmony default export */ __webpack_exports__["a"] = (function (value, other, fn) {
  7019. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_function__["a" /* default */])(fn)) {
  7020. return Object(__WEBPACK_IMPORTED_MODULE_1__is_equal__["a" /* default */])(value, other);
  7021. }
  7022. return !!fn(value, other);
  7023. });
  7024. /***/ }),
  7025. /* 146 */
  7026. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7027. "use strict";
  7028. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  7029. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(7);
  7030. var map = function (arr, func) {
  7031. if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a" /* default */])(arr)) {
  7032. // @ts-ignore
  7033. return arr;
  7034. }
  7035. var result = [];
  7036. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(arr, function (value, index) {
  7037. result.push(func(value, index));
  7038. });
  7039. return result;
  7040. };
  7041. /* harmony default export */ __webpack_exports__["a"] = (map);
  7042. /***/ }),
  7043. /* 147 */
  7044. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7045. "use strict";
  7046. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(14);
  7047. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_object__ = __webpack_require__(29);
  7048. var identity = function (v) {
  7049. return v;
  7050. };
  7051. /* harmony default export */ __webpack_exports__["a"] = (function (object, func) {
  7052. if (func === void 0) {
  7053. func = identity;
  7054. }
  7055. var r = {};
  7056. if (Object(__WEBPACK_IMPORTED_MODULE_1__is_object__["a" /* default */])(object) && !Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a" /* default */])(object)) {
  7057. Object.keys(object).forEach(function (key) {
  7058. // @ts-ignore
  7059. r[key] = func(object[key], key);
  7060. });
  7061. }
  7062. return r;
  7063. });
  7064. /***/ }),
  7065. /* 148 */
  7066. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7067. "use strict";
  7068. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_string__ = __webpack_require__(18);
  7069. /**
  7070. * https://github.com/developit/dlv/blob/master/index.js
  7071. * @param obj
  7072. * @param key
  7073. * @param defaultValue
  7074. */
  7075. /* harmony default export */ __webpack_exports__["a"] = (function (obj, key, defaultValue) {
  7076. var p = 0;
  7077. var keyArr = Object(__WEBPACK_IMPORTED_MODULE_0__is_string__["a" /* default */])(key) ? key.split('.') : key;
  7078. while (obj && p < keyArr.length) {
  7079. obj = obj[keyArr[p++]];
  7080. }
  7081. return obj === undefined || p < keyArr.length ? defaultValue : obj;
  7082. });
  7083. /***/ }),
  7084. /* 149 */
  7085. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7086. "use strict";
  7087. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_object__ = __webpack_require__(29);
  7088. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_string__ = __webpack_require__(18);
  7089. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__is_number__ = __webpack_require__(12);
  7090. /**
  7091. * https://github.com/developit/dlv/blob/master/index.js
  7092. * @param obj
  7093. * @param path
  7094. * @param value
  7095. */
  7096. /* harmony default export */ __webpack_exports__["a"] = (function (obj, path, value) {
  7097. var o = obj;
  7098. var keyArr = Object(__WEBPACK_IMPORTED_MODULE_1__is_string__["a" /* default */])(path) ? path.split('.') : path;
  7099. keyArr.forEach(function (key, idx) {
  7100. // 不是最后一个
  7101. if (idx < keyArr.length - 1) {
  7102. if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_object__["a" /* default */])(o[key])) {
  7103. o[key] = Object(__WEBPACK_IMPORTED_MODULE_2__is_number__["a" /* default */])(keyArr[idx + 1]) ? [] : {};
  7104. }
  7105. o = o[key];
  7106. } else {
  7107. o[key] = value;
  7108. }
  7109. });
  7110. return obj;
  7111. });
  7112. /***/ }),
  7113. /* 150 */
  7114. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7115. "use strict";
  7116. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(8);
  7117. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_plain_object__ = __webpack_require__(24);
  7118. var hasOwnProperty = Object.prototype.hasOwnProperty;
  7119. /* harmony default export */ __webpack_exports__["a"] = (function (object, keys) {
  7120. if (object === null || !Object(__WEBPACK_IMPORTED_MODULE_1__is_plain_object__["a" /* default */])(object)) {
  7121. return {};
  7122. }
  7123. var result = {};
  7124. Object(__WEBPACK_IMPORTED_MODULE_0__each__["a" /* default */])(keys, function (key) {
  7125. if (hasOwnProperty.call(object, key)) {
  7126. result[key] = object[key];
  7127. }
  7128. });
  7129. return result;
  7130. });
  7131. /***/ }),
  7132. /* 151 */
  7133. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7134. "use strict";
  7135. /* harmony default export */ __webpack_exports__["a"] = (function (func, wait, options) {
  7136. var timeout, context, args, result;
  7137. var previous = 0;
  7138. if (!options) options = {};
  7139. var later = function () {
  7140. previous = options.leading === false ? 0 : Date.now();
  7141. timeout = null;
  7142. result = func.apply(context, args);
  7143. if (!timeout) context = args = null;
  7144. };
  7145. var throttled = function () {
  7146. var now = Date.now();
  7147. if (!previous && options.leading === false) previous = now;
  7148. var remaining = wait - (now - previous);
  7149. context = this;
  7150. args = arguments;
  7151. if (remaining <= 0 || remaining > wait) {
  7152. if (timeout) {
  7153. clearTimeout(timeout);
  7154. timeout = null;
  7155. }
  7156. previous = now;
  7157. result = func.apply(context, args);
  7158. if (!timeout) context = args = null;
  7159. } else if (!timeout && options.trailing !== false) {
  7160. timeout = setTimeout(later, remaining);
  7161. }
  7162. return result;
  7163. };
  7164. throttled.cancel = function () {
  7165. clearTimeout(timeout);
  7166. previous = 0;
  7167. timeout = context = args = null;
  7168. };
  7169. return throttled;
  7170. });
  7171. /***/ }),
  7172. /* 152 */
  7173. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7174. "use strict";
  7175. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(7);
  7176. /* harmony default export */ __webpack_exports__["a"] = (function (value) {
  7177. return Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a" /* default */])(value) ? Array.prototype.slice.call(value) : [];
  7178. });
  7179. /***/ }),
  7180. /* 153 */
  7181. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7182. "use strict";
  7183. var map = {};
  7184. /* harmony default export */ __webpack_exports__["a"] = (function (prefix) {
  7185. prefix = prefix || 'g';
  7186. if (!map[prefix]) {
  7187. map[prefix] = 1;
  7188. } else {
  7189. map[prefix] += 1;
  7190. }
  7191. return prefix + map[prefix];
  7192. });
  7193. /***/ }),
  7194. /* 154 */
  7195. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7196. "use strict";
  7197. /* harmony default export */ __webpack_exports__["a"] = (function () {});
  7198. /***/ }),
  7199. /* 155 */
  7200. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7201. "use strict";
  7202. /* harmony default export */ __webpack_exports__["a"] = (function (v) {
  7203. return v;
  7204. });
  7205. /***/ }),
  7206. /* 156 */
  7207. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7208. "use strict";
  7209. /* harmony export (immutable) */ __webpack_exports__["a"] = size;
  7210. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(14);
  7211. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(7);
  7212. function size(o) {
  7213. if (Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a" /* default */])(o)) {
  7214. return 0;
  7215. }
  7216. if (Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a" /* default */])(o)) {
  7217. return o.length;
  7218. }
  7219. return Object.keys(o).length;
  7220. }
  7221. /***/ }),
  7222. /* 157 */
  7223. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  7224. "use strict";
  7225. /**
  7226. * k-v 存储
  7227. */
  7228. var default_1 =
  7229. /** @class */
  7230. function () {
  7231. function default_1() {
  7232. this.map = {};
  7233. }
  7234. default_1.prototype.has = function (key) {
  7235. return this.map[key] !== undefined;
  7236. };
  7237. default_1.prototype.get = function (key, def) {
  7238. var v = this.map[key];
  7239. return v === undefined ? def : v;
  7240. };
  7241. default_1.prototype.set = function (key, value) {
  7242. this.map[key] = value;
  7243. };
  7244. default_1.prototype.clear = function () {
  7245. this.map = {};
  7246. };
  7247. default_1.prototype.delete = function (key) {
  7248. delete this.map[key];
  7249. };
  7250. default_1.prototype.size = function () {
  7251. return Object.keys(this.map).length;
  7252. };
  7253. return default_1;
  7254. }();
  7255. /* harmony default export */ __webpack_exports__["a"] = (default_1);
  7256. /***/ }),
  7257. /* 158 */
  7258. /***/ (function(module, exports, __webpack_require__) {
  7259. "use strict";
  7260. var Util = __webpack_require__(0);
  7261. var Plot = /*#__PURE__*/function () {
  7262. function Plot(cfg) {
  7263. Util.mix(this, cfg);
  7264. this._init();
  7265. }
  7266. var _proto = Plot.prototype;
  7267. _proto._init = function _init() {
  7268. var self = this;
  7269. var start = self.start;
  7270. var end = self.end;
  7271. var xMin = Math.min(start.x, end.x);
  7272. var xMax = Math.max(start.x, end.x);
  7273. var yMin = Math.min(start.y, end.y);
  7274. var yMax = Math.max(start.y, end.y);
  7275. this.tl = {
  7276. x: xMin,
  7277. y: yMin
  7278. };
  7279. this.tr = {
  7280. x: xMax,
  7281. y: yMin
  7282. };
  7283. this.bl = {
  7284. x: xMin,
  7285. y: yMax
  7286. };
  7287. this.br = {
  7288. x: xMax,
  7289. y: yMax
  7290. };
  7291. this.width = xMax - xMin;
  7292. this.height = yMax - yMin;
  7293. }
  7294. /**
  7295. * reset
  7296. * @param {Object} start start point
  7297. * @param {Object} end end point
  7298. */
  7299. ;
  7300. _proto.reset = function reset(start, end) {
  7301. this.start = start;
  7302. this.end = end;
  7303. this._init();
  7304. }
  7305. /**
  7306. * check the point is in the range of plot
  7307. * @param {Nubmer} x x value
  7308. * @param {[type]} y y value
  7309. * @return {Boolean} return the result
  7310. */
  7311. ;
  7312. _proto.isInRange = function isInRange(x, y) {
  7313. if (Util.isObject(x)) {
  7314. y = x.y;
  7315. x = x.x;
  7316. }
  7317. var tl = this.tl;
  7318. var br = this.br;
  7319. return tl.x <= x && x <= br.x && tl.y <= y && y <= br.y;
  7320. };
  7321. return Plot;
  7322. }();
  7323. module.exports = Plot;
  7324. /***/ }),
  7325. /* 159 */
  7326. /***/ (function(module, exports, __webpack_require__) {
  7327. "use strict";
  7328. var Coord = __webpack_require__(43);
  7329. __webpack_require__(160);
  7330. module.exports = Coord;
  7331. /***/ }),
  7332. /* 160 */
  7333. /***/ (function(module, exports, __webpack_require__) {
  7334. "use strict";
  7335. var _interopRequireDefault = __webpack_require__(1);
  7336. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  7337. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  7338. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  7339. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  7340. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  7341. var Base = __webpack_require__(43);
  7342. var Cartesian = /*#__PURE__*/function (_Base) {
  7343. (0, _inheritsLoose2["default"])(Cartesian, _Base);
  7344. var _super = _createSuper(Cartesian);
  7345. function Cartesian() {
  7346. return _Base.apply(this, arguments) || this;
  7347. }
  7348. var _proto = Cartesian.prototype;
  7349. _proto._initDefaultCfg = function _initDefaultCfg() {
  7350. this.type = 'cartesian';
  7351. this.transposed = false;
  7352. this.isRect = true;
  7353. };
  7354. _proto.init = function init(start, end) {
  7355. _Base.prototype.init.call(this, start, end);
  7356. this.x = {
  7357. start: start.x,
  7358. end: end.x
  7359. };
  7360. this.y = {
  7361. start: start.y,
  7362. end: end.y
  7363. };
  7364. };
  7365. _proto._convertPoint = function _convertPoint(point) {
  7366. var self = this;
  7367. var transposed = self.transposed;
  7368. var xDim = transposed ? 'y' : 'x';
  7369. var yDim = transposed ? 'x' : 'y';
  7370. var x = self.x;
  7371. var y = self.y;
  7372. return {
  7373. x: x.start + (x.end - x.start) * point[xDim],
  7374. y: y.start + (y.end - y.start) * point[yDim]
  7375. };
  7376. };
  7377. _proto._invertPoint = function _invertPoint(point) {
  7378. var self = this;
  7379. var transposed = self.transposed;
  7380. var xDim = transposed ? 'y' : 'x';
  7381. var yDim = transposed ? 'x' : 'y';
  7382. var x = self.x;
  7383. var y = self.y;
  7384. var rst = {};
  7385. rst[xDim] = (point.x - x.start) / (x.end - x.start);
  7386. rst[yDim] = (point.y - y.start) / (y.end - y.start);
  7387. return rst;
  7388. };
  7389. return Cartesian;
  7390. }(Base);
  7391. Base.Cartesian = Cartesian;
  7392. Base.Rect = Cartesian;
  7393. module.exports = Cartesian;
  7394. /***/ }),
  7395. /* 161 */
  7396. /***/ (function(module, exports, __webpack_require__) {
  7397. "use strict";
  7398. var _interopRequireDefault = __webpack_require__(1);
  7399. exports.__esModule = true;
  7400. exports.Color = exports.Size = exports.Shape = exports.Position = void 0;
  7401. var _position = _interopRequireDefault(__webpack_require__(162));
  7402. exports.Position = _position["default"];
  7403. var _shape = _interopRequireDefault(__webpack_require__(163));
  7404. exports.Shape = _shape["default"];
  7405. var _size = _interopRequireDefault(__webpack_require__(164));
  7406. exports.Size = _size["default"];
  7407. var _color = _interopRequireDefault(__webpack_require__(165));
  7408. exports.Color = _color["default"];
  7409. /***/ }),
  7410. /* 162 */
  7411. /***/ (function(module, exports, __webpack_require__) {
  7412. "use strict";
  7413. var _interopRequireDefault = __webpack_require__(1);
  7414. exports.__esModule = true;
  7415. exports["default"] = void 0;
  7416. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  7417. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  7418. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  7419. var _util = __webpack_require__(20);
  7420. var _base = _interopRequireDefault(__webpack_require__(32));
  7421. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  7422. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  7423. var Position = /*#__PURE__*/function (_Base) {
  7424. (0, _inheritsLoose2["default"])(Position, _Base);
  7425. var _super = _createSuper(Position);
  7426. function Position(cfg) {
  7427. var _this;
  7428. _this = _Base.call(this, cfg) || this;
  7429. _this.names = ['x', 'y'];
  7430. _this.type = 'position';
  7431. return _this;
  7432. }
  7433. var _proto = Position.prototype;
  7434. _proto.mapping = function mapping(x, y) {
  7435. var scales = this.scales;
  7436. var coord = this.coord;
  7437. var scaleX = scales[0];
  7438. var scaleY = scales[1];
  7439. var rstX;
  7440. var rstY;
  7441. var obj;
  7442. if ((0, _util.isNil)(x) || (0, _util.isNil)(y)) {
  7443. return [];
  7444. }
  7445. if ((0, _util.isArray)(y) && (0, _util.isArray)(x)) {
  7446. rstX = [];
  7447. rstY = [];
  7448. for (var i = 0, j = 0, xLen = x.length, yLen = y.length; i < xLen && j < yLen; i++, j++) {
  7449. obj = coord.convertPoint({
  7450. x: scaleX.scale(x[i]),
  7451. y: scaleY.scale(y[j])
  7452. });
  7453. rstX.push(obj.x);
  7454. rstY.push(obj.y);
  7455. }
  7456. } else if ((0, _util.isArray)(y)) {
  7457. x = scaleX.scale(x);
  7458. rstY = [];
  7459. (0, _util.each)(y, function (yVal) {
  7460. yVal = scaleY.scale(yVal);
  7461. obj = coord.convertPoint({
  7462. x: x,
  7463. y: yVal
  7464. });
  7465. if (rstX && rstX !== obj.x) {
  7466. if (!(0, _util.isArray)(rstX)) {
  7467. rstX = [rstX];
  7468. }
  7469. rstX.push(obj.x);
  7470. } else {
  7471. rstX = obj.x;
  7472. }
  7473. rstY.push(obj.y);
  7474. });
  7475. } else if ((0, _util.isArray)(x)) {
  7476. y = scaleY.scale(y);
  7477. rstX = [];
  7478. (0, _util.each)(x, function (xVal) {
  7479. xVal = scaleX.scale(xVal);
  7480. obj = coord.convertPoint({
  7481. x: xVal,
  7482. y: y
  7483. });
  7484. if (rstY && rstY !== obj.y) {
  7485. if (!(0, _util.isArray)(rstY)) {
  7486. rstY = [rstY];
  7487. }
  7488. rstY.push(obj.y);
  7489. } else {
  7490. rstY = obj.y;
  7491. }
  7492. rstX.push(obj.x);
  7493. });
  7494. } else {
  7495. x = scaleX.scale(x);
  7496. y = scaleY.scale(y);
  7497. var point = coord.convertPoint({
  7498. x: x,
  7499. y: y
  7500. });
  7501. rstX = point.x;
  7502. rstY = point.y;
  7503. }
  7504. return [rstX, rstY];
  7505. };
  7506. return Position;
  7507. }(_base["default"]);
  7508. var _default = Position;
  7509. exports["default"] = _default;
  7510. /***/ }),
  7511. /* 163 */
  7512. /***/ (function(module, exports, __webpack_require__) {
  7513. "use strict";
  7514. var _interopRequireDefault = __webpack_require__(1);
  7515. exports.__esModule = true;
  7516. exports["default"] = void 0;
  7517. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  7518. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  7519. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  7520. var _base = _interopRequireDefault(__webpack_require__(32));
  7521. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  7522. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  7523. var Shape = /*#__PURE__*/function (_Base) {
  7524. (0, _inheritsLoose2["default"])(Shape, _Base);
  7525. var _super = _createSuper(Shape);
  7526. function Shape(cfg) {
  7527. var _this;
  7528. _this = _Base.call(this, cfg) || this;
  7529. _this.names = ['shape'];
  7530. _this.type = 'shape';
  7531. _this.gradient = null;
  7532. return _this;
  7533. }
  7534. /**
  7535. * @override
  7536. */
  7537. var _proto = Shape.prototype;
  7538. _proto.getLinearValue = function getLinearValue(percent) {
  7539. var values = this.values;
  7540. var index = Math.round((values.length - 1) * percent);
  7541. return values[index];
  7542. };
  7543. return Shape;
  7544. }(_base["default"]);
  7545. var _default = Shape;
  7546. exports["default"] = _default;
  7547. /***/ }),
  7548. /* 164 */
  7549. /***/ (function(module, exports, __webpack_require__) {
  7550. "use strict";
  7551. var _interopRequireDefault = __webpack_require__(1);
  7552. exports.__esModule = true;
  7553. exports["default"] = void 0;
  7554. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  7555. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  7556. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  7557. var _base = _interopRequireDefault(__webpack_require__(32));
  7558. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  7559. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  7560. var Size = /*#__PURE__*/function (_Base) {
  7561. (0, _inheritsLoose2["default"])(Size, _Base);
  7562. var _super = _createSuper(Size);
  7563. function Size(cfg) {
  7564. var _this;
  7565. _this = _Base.call(this, cfg) || this;
  7566. _this.names = ['size'];
  7567. _this.type = 'size';
  7568. _this.gradient = null;
  7569. return _this;
  7570. }
  7571. return Size;
  7572. }(_base["default"]);
  7573. var _default = Size;
  7574. exports["default"] = _default;
  7575. /***/ }),
  7576. /* 165 */
  7577. /***/ (function(module, exports, __webpack_require__) {
  7578. "use strict";
  7579. var _interopRequireDefault = __webpack_require__(1);
  7580. exports.__esModule = true;
  7581. exports["default"] = void 0;
  7582. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  7583. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  7584. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  7585. var _util = __webpack_require__(20);
  7586. var _base = _interopRequireDefault(__webpack_require__(32));
  7587. var _colorUtil = _interopRequireDefault(__webpack_require__(166));
  7588. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  7589. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  7590. var Color = /*#__PURE__*/function (_Base) {
  7591. (0, _inheritsLoose2["default"])(Color, _Base);
  7592. var _super = _createSuper(Color);
  7593. function Color(cfg) {
  7594. var _this;
  7595. _this = _Base.call(this, cfg) || this;
  7596. _this.names = ['color'];
  7597. _this.type = 'color';
  7598. _this.gradient = null;
  7599. if ((0, _util.isString)(_this.values)) {
  7600. _this.linear = true;
  7601. }
  7602. return _this;
  7603. }
  7604. /**
  7605. * @override
  7606. */
  7607. var _proto = Color.prototype;
  7608. _proto.getLinearValue = function getLinearValue(percent) {
  7609. var gradient = this.gradient;
  7610. if (!gradient) {
  7611. var values = this.values;
  7612. gradient = _colorUtil["default"].gradient(values);
  7613. this.gradient = gradient;
  7614. }
  7615. return gradient(percent);
  7616. };
  7617. return Color;
  7618. }(_base["default"]);
  7619. var _default = Color;
  7620. exports["default"] = _default;
  7621. /***/ }),
  7622. /* 166 */
  7623. /***/ (function(module, exports, __webpack_require__) {
  7624. "use strict";
  7625. exports.__esModule = true;
  7626. exports["default"] = void 0;
  7627. var _util = __webpack_require__(20);
  7628. // Get the interpolation between colors
  7629. function getValue(start, end, percent, index) {
  7630. var value = start[index] + (end[index] - start[index]) * percent;
  7631. return value;
  7632. } // convert to hex
  7633. function arr2hex(arr) {
  7634. return '#' + toRGBValue(arr[0]) + toRGBValue(arr[1]) + toRGBValue(arr[2]);
  7635. }
  7636. function toRGBValue(value) {
  7637. value = Math.round(value);
  7638. value = value.toString(16);
  7639. if (value.length === 1) {
  7640. value = '0' + value;
  7641. }
  7642. return value;
  7643. }
  7644. function calColor(colors, percent) {
  7645. var steps = colors.length - 1;
  7646. var step = Math.floor(steps * percent);
  7647. var left = steps * percent - step;
  7648. var start = colors[step];
  7649. var end = step === steps ? start : colors[step + 1];
  7650. var rgb = arr2hex([getValue(start, end, left, 0), getValue(start, end, left, 1), getValue(start, end, left, 2)]);
  7651. return rgb;
  7652. }
  7653. function hex2arr(str) {
  7654. var arr = [];
  7655. arr.push(parseInt(str.substr(1, 2), 16));
  7656. arr.push(parseInt(str.substr(3, 2), 16));
  7657. arr.push(parseInt(str.substr(5, 2), 16));
  7658. return arr;
  7659. }
  7660. var colorCache = {
  7661. black: '#000000',
  7662. blue: '#0000ff',
  7663. grey: '#808080',
  7664. green: '#008000',
  7665. orange: '#ffa500',
  7666. pink: '#ffc0cb',
  7667. purple: '#800080',
  7668. red: '#ff0000',
  7669. white: '#ffffff',
  7670. yellow: '#ffff00'
  7671. };
  7672. var ColorUtil = {
  7673. /**
  7674. * Returns a hexadecimal string representing this color in RGB space, such as #f7eaba.
  7675. * @param {String} color color value
  7676. * @return {String} Returns a hexadecimal string
  7677. */
  7678. toHex: function toHex(color) {
  7679. if (colorCache[color]) {
  7680. return colorCache[color];
  7681. }
  7682. if (color[0] === '#') {
  7683. if (color.length === 7) {
  7684. return color;
  7685. }
  7686. var hex = color.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, function (m, r, g, b) {
  7687. return '#' + r + r + g + g + b + b;
  7688. }); // hex3 to hex6
  7689. colorCache[color] = hex;
  7690. return hex;
  7691. } // rgb/rgba to hex
  7692. var rst = color.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);
  7693. rst.shift();
  7694. rst = arr2hex(rst);
  7695. colorCache[color] = rst;
  7696. return rst;
  7697. },
  7698. hex2arr: hex2arr,
  7699. /**
  7700. * handle the gradient color
  7701. * @param {Array} colors the colors
  7702. * @return {String} return the color value
  7703. */
  7704. gradient: function gradient(colors) {
  7705. var points = [];
  7706. if ((0, _util.isString)(colors)) {
  7707. colors = colors.split('-');
  7708. }
  7709. (0, _util.each)(colors, function (color) {
  7710. if (color.indexOf('#') === -1) {
  7711. color = ColorUtil.toHex(color);
  7712. }
  7713. points.push(hex2arr(color));
  7714. });
  7715. return function (percent) {
  7716. return calColor(points, percent);
  7717. };
  7718. }
  7719. };
  7720. var _default = ColorUtil;
  7721. exports["default"] = _default;
  7722. /***/ }),
  7723. /* 167 */
  7724. /***/ (function(module, exports, __webpack_require__) {
  7725. "use strict";
  7726. var Util = __webpack_require__(0);
  7727. var Global = __webpack_require__(6);
  7728. var Scale = __webpack_require__(168);
  7729. var SCALE_TYPES_MAP = {
  7730. linear: 'Linear',
  7731. cat: 'Cat',
  7732. timeCat: 'TimeCat',
  7733. identity: 'Identity'
  7734. };
  7735. function isFullCircle(coord) {
  7736. if (!coord.isPolar) {
  7737. return false;
  7738. }
  7739. var startAngle = coord.startAngle;
  7740. var endAngle = coord.endAngle;
  7741. if (!Util.isNil(startAngle) && !Util.isNil(endAngle) && endAngle - startAngle < Math.PI * 2) {
  7742. return false;
  7743. }
  7744. return true;
  7745. }
  7746. function clearObj(obj) {
  7747. Object.keys(obj).forEach(function (key) {
  7748. delete obj[key];
  7749. });
  7750. }
  7751. var ScaleController = /*#__PURE__*/function () {
  7752. function ScaleController(cfg) {
  7753. // defs 列定义
  7754. this.defs = {}; // 已经实例化的scale
  7755. this.scales = {};
  7756. Util.mix(this, cfg);
  7757. }
  7758. var _proto = ScaleController.prototype;
  7759. _proto.setFieldDef = function setFieldDef(field, cfg) {
  7760. var defs = this.defs;
  7761. if (Util.isObject(field)) {
  7762. Util.mix(defs, field);
  7763. } else {
  7764. defs[field] = cfg;
  7765. } // 因为可能同时变更多个scale,所以要把所有已实例化的scale都更新下
  7766. this.updateScales();
  7767. };
  7768. _proto._getDef = function _getDef(field) {
  7769. var defs = this.defs;
  7770. var def = null;
  7771. if (Global.scales[field] || defs[field]) {
  7772. def = Util.mix({}, Global.scales[field]);
  7773. Util.each(defs[field], function (v, k) {
  7774. if (Util.isNil(v)) {
  7775. delete def[k];
  7776. } else {
  7777. def[k] = v;
  7778. }
  7779. });
  7780. }
  7781. return def;
  7782. };
  7783. _proto._getDefaultType = function _getDefaultType(field, data, def) {
  7784. if (def && def.type) {
  7785. return def.type;
  7786. }
  7787. var type = 'linear';
  7788. var value = Util.Array.firstValue(data, field);
  7789. if (Util.isArray(value)) {
  7790. value = value[0];
  7791. }
  7792. if (Util.isString(value)) {
  7793. type = 'cat';
  7794. }
  7795. return type;
  7796. };
  7797. _proto._getScaleDef = function _getScaleDef(type, field, data, def) {
  7798. var values;
  7799. if (def && def.values) {
  7800. values = def.values;
  7801. } else {
  7802. values = Util.Array.values(data, field);
  7803. }
  7804. var cfg = {
  7805. field: field,
  7806. values: values
  7807. };
  7808. if (type !== 'cat' && type !== 'timeCat') {
  7809. if (!def || !(def.min && def.max)) {
  7810. var _Util$Array$getRange = Util.Array.getRange(values),
  7811. min = _Util$Array$getRange.min,
  7812. max = _Util$Array$getRange.max;
  7813. cfg.min = min;
  7814. cfg.max = max;
  7815. cfg.nice = true;
  7816. }
  7817. } else {
  7818. cfg.isRounding = false; // used for tickCount calculation
  7819. }
  7820. return cfg;
  7821. } // 调整range,为了让图形居中
  7822. ;
  7823. _proto._adjustRange = function _adjustRange(type, cfg) {
  7824. var range = cfg.range,
  7825. values = cfg.values; // 如果是线性, 或者有自定义range都不处理
  7826. if (type === 'linear' || range || !values) {
  7827. return cfg;
  7828. }
  7829. var count = values.length; // 单只有一条数据时,在中间显示
  7830. if (count === 1) {
  7831. cfg.range = [0.5, 1];
  7832. } else {
  7833. var chart = this.chart;
  7834. var coord = chart.get('coord');
  7835. var widthRatio = Global.widthRatio.multiplePie;
  7836. var offset = 0;
  7837. if (isFullCircle(coord)) {
  7838. if (!coord.transposed) {
  7839. cfg.range = [0, 1 - 1 / count];
  7840. } else {
  7841. offset = 1 / count * widthRatio;
  7842. cfg.range = [offset / 2, 1 - offset / 2];
  7843. }
  7844. } else {
  7845. // 为了让图形居中,所以才设置range
  7846. offset = 1 / count * 1 / 2;
  7847. cfg.range = [offset, 1 - offset];
  7848. }
  7849. }
  7850. return cfg;
  7851. };
  7852. _proto._getScaleCfg = function _getScaleCfg(field, data) {
  7853. var self = this;
  7854. var def = self._getDef(field);
  7855. if (!data || !data.length) {
  7856. if (def && def.type) {
  7857. def.field = field;
  7858. return {
  7859. type: SCALE_TYPES_MAP[def.type],
  7860. cfg: def
  7861. };
  7862. }
  7863. return {
  7864. type: 'Identity',
  7865. cfg: {
  7866. value: field,
  7867. field: field.toString(),
  7868. values: [field]
  7869. }
  7870. };
  7871. }
  7872. var firstObj = data[0];
  7873. var firstValue = firstObj[field];
  7874. if (firstValue === null) {
  7875. firstValue = Util.Array.firstValue(data, field);
  7876. }
  7877. if (Util.isNumber(field) || Util.isNil(firstValue) && !def) {
  7878. return {
  7879. type: 'Identity',
  7880. cfg: {
  7881. value: field,
  7882. field: field.toString(),
  7883. values: [field]
  7884. }
  7885. };
  7886. }
  7887. var type = self._getDefaultType(field, data, def);
  7888. var cfg = self._getScaleDef(type, field, data, def);
  7889. def && Util.mix(cfg, def);
  7890. cfg = this._adjustRange(type, cfg);
  7891. return {
  7892. type: SCALE_TYPES_MAP[type],
  7893. cfg: cfg
  7894. };
  7895. };
  7896. _proto.createScale = function createScale(field, data) {
  7897. var scales = this.scales;
  7898. var _this$_getScaleCfg = this._getScaleCfg(field, data),
  7899. type = _this$_getScaleCfg.type,
  7900. cfg = _this$_getScaleCfg.cfg;
  7901. var scale = scales[field]; // 如果已经存在,且类型相等时直接返回
  7902. if (scale && SCALE_TYPES_MAP[scale.type] === type) {
  7903. scale.change(cfg);
  7904. return scale;
  7905. }
  7906. var newScale = new Scale[type](cfg);
  7907. scales[field] = newScale;
  7908. return newScale;
  7909. };
  7910. _proto._updateScale = function _updateScale(scale) {
  7911. var field = scale.field; // 因为每个field的数据都会不同
  7912. var data = this.chart._getScaleData(field);
  7913. var _this$_getScaleCfg2 = this._getScaleCfg(field, data),
  7914. cfg = _this$_getScaleCfg2.cfg;
  7915. scale.change(cfg);
  7916. };
  7917. _proto.updateScales = function updateScales() {
  7918. var _this = this;
  7919. var scales = this.scales; // 修改完列定义后,需要更新已经实例化的scale
  7920. // 如果是还没有实例化的,在geom初始化的时候会被实例化,所以这里可以不用更新
  7921. Util.each(scales, function (scale) {
  7922. _this._updateScale(scale);
  7923. });
  7924. } // 调整scale从0开始
  7925. ;
  7926. _proto.adjustStartZero = function adjustStartZero(scale) {
  7927. var defs = this.defs;
  7928. var field = scale.field,
  7929. min = scale.min,
  7930. max = scale.max; // 如果有定义,则不处理
  7931. if (defs[field] && defs[field].min) {
  7932. return;
  7933. }
  7934. if (min > 0) {
  7935. scale.change({
  7936. min: 0
  7937. });
  7938. } else if (max < 0) {
  7939. scale.change({
  7940. max: 0
  7941. });
  7942. }
  7943. };
  7944. _proto.clear = function clear() {
  7945. // this.defs = {};
  7946. // this.scales = {};
  7947. clearObj(this.defs);
  7948. clearObj(this.scales);
  7949. this.data = null;
  7950. };
  7951. return ScaleController;
  7952. }();
  7953. module.exports = ScaleController;
  7954. /***/ }),
  7955. /* 168 */
  7956. /***/ (function(module, exports, __webpack_require__) {
  7957. "use strict";
  7958. var Scale = __webpack_require__(26);
  7959. __webpack_require__(169);
  7960. __webpack_require__(172);
  7961. __webpack_require__(69);
  7962. module.exports = Scale;
  7963. /***/ }),
  7964. /* 169 */
  7965. /***/ (function(module, exports, __webpack_require__) {
  7966. function _inheritsLoose(subClass, superClass) {
  7967. subClass.prototype = Object.create(superClass.prototype);
  7968. subClass.prototype.constructor = subClass;
  7969. subClass.__proto__ = superClass;
  7970. }
  7971. /**
  7972. * @fileOverview The measurement of linear data scale function
  7973. * @author dxq613@gmail.com
  7974. */
  7975. var isNil = __webpack_require__(35);
  7976. var each = __webpack_require__(15);
  7977. var Base = __webpack_require__(26);
  7978. var numberAuto = __webpack_require__(170);
  7979. /**
  7980. * 线性度量
  7981. * @class Scale.Linear
  7982. */
  7983. var Linear = /*#__PURE__*/function (_Base) {
  7984. _inheritsLoose(Linear, _Base);
  7985. function Linear() {
  7986. return _Base.apply(this, arguments) || this;
  7987. }
  7988. var _proto = Linear.prototype;
  7989. _proto._initDefaultCfg = function _initDefaultCfg() {
  7990. _Base.prototype._initDefaultCfg.call(this);
  7991. var self = this;
  7992. self.type = 'linear';
  7993. self.isLinear = true;
  7994. /**
  7995. * 是否为了用户习惯,优化min,max和ticks,如果进行优化,则会根据生成的ticks调整min,max,否则舍弃(min,max)范围之外的ticks
  7996. * @type {Boolean}
  7997. * @default false
  7998. */
  7999. self.nice = false;
  8000. /**
  8001. * min value of the scale
  8002. * @type {Number}
  8003. * @default null
  8004. */
  8005. self.min = null;
  8006. /**
  8007. * min value limitted of the scale
  8008. * @type {Number}
  8009. * @default null
  8010. */
  8011. self.minLimit = null;
  8012. /**
  8013. * max value of the scale
  8014. * @type {Number}
  8015. * @default null
  8016. */
  8017. self.max = null;
  8018. /**
  8019. * max value limitted of the scale
  8020. * @type {Number}
  8021. * @default null
  8022. */
  8023. self.maxLimit = null;
  8024. /**
  8025. * 自动生成标记时的个数
  8026. * @type {Number}
  8027. * @default null
  8028. */
  8029. self.tickCount = null;
  8030. /**
  8031. * 坐标轴点之间的间距,指的是真实数据的差值
  8032. * @type {Number}
  8033. * @default null
  8034. */
  8035. self.tickInterval = null;
  8036. /**
  8037. * 坐标轴点之间的最小间距,指的是真实数据的差值
  8038. * @type {Number}
  8039. * @default null
  8040. */
  8041. self.minTickInterval = null;
  8042. /**
  8043. * 用于计算坐标点时逼近的数组
  8044. * @type {Array}
  8045. */
  8046. self.snapArray = null;
  8047. }
  8048. /**
  8049. * @protected
  8050. * @override
  8051. */
  8052. ;
  8053. _proto.init = function init() {
  8054. var self = this;
  8055. if (!self.ticks) {
  8056. self.min = self.translate(self.min);
  8057. self.max = self.translate(self.max);
  8058. self.initTicks();
  8059. } else {
  8060. var ticks = self.ticks;
  8061. var firstValue = self.translate(ticks[0]);
  8062. var lastValue = self.translate(ticks[ticks.length - 1]);
  8063. if (isNil(self.min) || self.min > firstValue) {
  8064. self.min = firstValue;
  8065. }
  8066. if (isNil(self.max) || self.max < lastValue) {
  8067. self.max = lastValue;
  8068. }
  8069. }
  8070. }
  8071. /**
  8072. * 计算坐标点
  8073. * @protected
  8074. * @return {Array} 计算完成的坐标点
  8075. */
  8076. ;
  8077. _proto.calculateTicks = function calculateTicks() {
  8078. var min = this.min,
  8079. max = this.max,
  8080. minLimit = this.minLimit,
  8081. maxLimit = this.maxLimit,
  8082. tickCount = this.tickCount,
  8083. tickInterval = this.tickInterval,
  8084. minTickInterval = this.minTickInterval,
  8085. snapArray = this.snapArray;
  8086. if (tickCount === 1) {
  8087. throw new Error('linear scale\'tickCount should not be 1');
  8088. }
  8089. if (max < min) {
  8090. throw new Error("max: " + max + " should not be less than min: " + min);
  8091. }
  8092. var tmp = numberAuto({
  8093. min: min,
  8094. max: max,
  8095. minLimit: minLimit,
  8096. maxLimit: maxLimit,
  8097. minCount: tickCount,
  8098. maxCount: tickCount,
  8099. interval: tickInterval,
  8100. minTickInterval: minTickInterval,
  8101. snapArray: snapArray
  8102. });
  8103. return tmp.ticks;
  8104. } // 初始化ticks
  8105. ;
  8106. _proto.initTicks = function initTicks() {
  8107. var self = this;
  8108. var calTicks = self.calculateTicks();
  8109. if (self.nice) {
  8110. // 如果需要优化显示的tick
  8111. self.ticks = calTicks;
  8112. self.min = calTicks[0];
  8113. self.max = calTicks[calTicks.length - 1];
  8114. } else {
  8115. var ticks = [];
  8116. each(calTicks, function (tick) {
  8117. if (tick >= self.min && tick <= self.max) {
  8118. ticks.push(tick);
  8119. }
  8120. }); // 如果 ticks 为空,直接输入最小值、最大值
  8121. if (!ticks.length) {
  8122. ticks.push(self.min);
  8123. ticks.push(self.max);
  8124. }
  8125. self.ticks = ticks;
  8126. }
  8127. }
  8128. /**
  8129. * @override
  8130. */
  8131. ;
  8132. _proto.scale = function scale(value) {
  8133. if (isNil(value)) {
  8134. return NaN;
  8135. }
  8136. var max = this.max;
  8137. var min = this.min;
  8138. if (max === min) {
  8139. return 0;
  8140. }
  8141. var percent = (value - min) / (max - min);
  8142. var rangeMin = this.rangeMin();
  8143. var rangeMax = this.rangeMax();
  8144. return rangeMin + percent * (rangeMax - rangeMin);
  8145. }
  8146. /**
  8147. * @override
  8148. */
  8149. ;
  8150. _proto.invert = function invert(value) {
  8151. var percent = (value - this.rangeMin()) / (this.rangeMax() - this.rangeMin());
  8152. return this.min + percent * (this.max - this.min);
  8153. };
  8154. return Linear;
  8155. }(Base);
  8156. Base.Linear = Linear;
  8157. module.exports = Linear;
  8158. /***/ }),
  8159. /* 170 */
  8160. /***/ (function(module, exports, __webpack_require__) {
  8161. /**
  8162. * @fileOverview 自动计算数字坐标轴
  8163. * @author dxq613@gmail.com
  8164. */
  8165. var isNil = __webpack_require__(35);
  8166. var isNumber = __webpack_require__(36);
  8167. var AutoUtil = __webpack_require__(171);
  8168. var MIN_COUNT = 5;
  8169. var MAX_COUNT = 7;
  8170. var SNAP_COUNT_ARRAY = [0, 1, 1.2, 1.5, 1.6, 2, 2.2, 2.4, 2.5, 3, 4, 5, 6, 7.5, 8, 10];
  8171. var SNAP_ARRAY = [0, 1, 2, 4, 5, 10];
  8172. var EPS = 1e-12;
  8173. module.exports = function (info) {
  8174. var min = info.min;
  8175. var max = info.max;
  8176. var interval = info.interval;
  8177. var minTickInterval = info.minTickInterval;
  8178. var ticks = [];
  8179. var minCount = info.minCount || MIN_COUNT;
  8180. var maxCount = info.maxCount || MAX_COUNT;
  8181. var isFixedCount = minCount === maxCount; // 是否限定死了个数
  8182. var minLimit = isNil(info.minLimit) ? -Infinity : info.minLimit; // 限定的最小值
  8183. var maxLimit = isNil(info.maxLimit) ? Infinity : info.maxLimit; // 限定最大值
  8184. var avgCount = (minCount + maxCount) / 2;
  8185. var count = avgCount; // 用户传入的逼近数组
  8186. var snapArray = info.snapArray ? info.snapArray : isFixedCount ? SNAP_COUNT_ARRAY : SNAP_ARRAY; // 如果限定大小范围,同时大小范围等于用户传入的范围,同时限定了个数,interval 按照个数均分
  8187. if (min === minLimit && max === maxLimit && isFixedCount) {
  8188. interval = (max - min) / (count - 1);
  8189. }
  8190. if (isNil(min)) {
  8191. min = 0;
  8192. }
  8193. if (isNil(max)) {
  8194. max = 0;
  8195. }
  8196. if (Math.abs(max - min) < EPS) {
  8197. if (min === 0) {
  8198. max = 1;
  8199. } else {
  8200. if (min > 0) {
  8201. min = 0;
  8202. } else {
  8203. max = 0;
  8204. }
  8205. }
  8206. if (max - min < 5 && !interval && max - min >= 1) {
  8207. interval = 1;
  8208. }
  8209. }
  8210. if (isNil(interval)) {
  8211. // 计算间距
  8212. var temp = (max - min) / (avgCount - 1);
  8213. interval = AutoUtil.snapFactorTo(temp, snapArray, 'ceil');
  8214. if (maxCount !== minCount) {
  8215. count = parseInt((max - min) / interval, 10);
  8216. if (count > maxCount) {
  8217. count = maxCount;
  8218. }
  8219. if (count < minCount) {
  8220. count = minCount;
  8221. } // 不确定tick的个数时,使得tick偏小
  8222. interval = AutoUtil.snapFactorTo((max - min) / (count - 1), snapArray, 'floor');
  8223. }
  8224. } // interval should not be less than minTickInterval
  8225. if (isNumber(minTickInterval) && interval < minTickInterval) {
  8226. interval = minTickInterval;
  8227. }
  8228. if (info.interval || maxCount !== minCount) {
  8229. // 校正 max 和 min
  8230. max = Math.min(AutoUtil.snapMultiple(max, interval, 'ceil'), maxLimit); // 向上逼近
  8231. min = Math.max(AutoUtil.snapMultiple(min, interval, 'floor'), minLimit); // 向下逼近
  8232. count = Math.round((max - min) / interval);
  8233. min = AutoUtil.fixedBase(min, interval);
  8234. max = AutoUtil.fixedBase(max, interval);
  8235. } else {
  8236. avgCount = parseInt(avgCount, 10); // 取整
  8237. var avg = (max + min) / 2;
  8238. var avgTick = AutoUtil.snapMultiple(avg, interval, 'ceil');
  8239. var sideCount = Math.floor((avgCount - 2) / 2);
  8240. var maxTick = avgTick + sideCount * interval;
  8241. var minTick;
  8242. if (avgCount % 2 === 0) {
  8243. minTick = avgTick - sideCount * interval;
  8244. } else {
  8245. minTick = avgTick - (sideCount + 1) * interval;
  8246. }
  8247. var prevMaxTick = null; // 如果减去intervl, fixBase后,新的minTick没有大于之前的值,就退出,防止死循环
  8248. while (maxTick < max && (prevMaxTick === null || maxTick > prevMaxTick)) {
  8249. // 保证计算出来的刻度最大值 maxTick 不小于数据最大值 max
  8250. prevMaxTick = maxTick;
  8251. maxTick = AutoUtil.fixedBase(maxTick + interval, interval);
  8252. }
  8253. var prevMinTick = null; // 如果减去intervl, fixBase后,新的minTick没有小于之前的值,就退出,防止死循环
  8254. while (minTick > min && (prevMinTick === null || minTick < prevMinTick)) {
  8255. // 保证计算出来的刻度最小值 minTick 不小于数据最大值 min
  8256. prevMinTick = minTick;
  8257. minTick = AutoUtil.fixedBase(minTick - interval, interval); // 防止超常浮点数计算问题
  8258. }
  8259. max = maxTick;
  8260. min = minTick;
  8261. }
  8262. max = Math.min(max, maxLimit);
  8263. min = Math.max(min, minLimit);
  8264. ticks.push(min);
  8265. for (var i = 1; i < count; i++) {
  8266. var tickValue = AutoUtil.fixedBase(interval * i + min, interval);
  8267. if (tickValue < max) {
  8268. ticks.push(tickValue);
  8269. }
  8270. }
  8271. if (ticks[ticks.length - 1] < max) {
  8272. ticks.push(max);
  8273. }
  8274. return {
  8275. min: min,
  8276. max: max,
  8277. interval: interval,
  8278. count: count,
  8279. ticks: ticks
  8280. };
  8281. };
  8282. /***/ }),
  8283. /* 171 */
  8284. /***/ (function(module, exports) {
  8285. /**
  8286. * @fileOverview 计算方法
  8287. * @author dxq613@gmail.com
  8288. */
  8289. // 如果小数点后面超过 10 位浮点数时进行一下处理
  8290. var DECIMAL_LENGTH = 12; // 获取系数
  8291. function getFactor(v) {
  8292. var factor = 1;
  8293. if (v === Infinity || v === -Infinity) {
  8294. throw new Error('Not support Infinity!');
  8295. }
  8296. if (v < 1) {
  8297. var count = 0;
  8298. while (v < 1) {
  8299. factor = factor / 10;
  8300. v = v * 10;
  8301. count++;
  8302. } // 浮点数计算出现问题
  8303. if (factor.toString().length > DECIMAL_LENGTH) {
  8304. factor = parseFloat(factor.toFixed(count));
  8305. }
  8306. } else {
  8307. while (v > 10) {
  8308. factor = factor * 10;
  8309. v = v / 10;
  8310. }
  8311. }
  8312. return factor;
  8313. } // 取小于当前值的
  8314. function arrayFloor(values, value) {
  8315. var length = values.length;
  8316. if (length === 0) {
  8317. return NaN;
  8318. }
  8319. var pre = values[0];
  8320. if (value < values[0]) {
  8321. return NaN;
  8322. }
  8323. if (value >= values[length - 1]) {
  8324. return values[length - 1];
  8325. }
  8326. for (var i = 1; i < values.length; i++) {
  8327. if (value < values[i]) {
  8328. break;
  8329. }
  8330. pre = values[i];
  8331. }
  8332. return pre;
  8333. } // 大于当前值的第一个
  8334. function arrayCeiling(values, value) {
  8335. var length = values.length;
  8336. if (length === 0) {
  8337. return NaN;
  8338. } // var pre = values[0];
  8339. var rst;
  8340. if (value > values[length - 1]) {
  8341. return NaN;
  8342. }
  8343. if (value < values[0]) {
  8344. return values[0];
  8345. }
  8346. for (var i = 1; i < values.length; i++) {
  8347. if (value <= values[i]) {
  8348. rst = values[i];
  8349. break;
  8350. }
  8351. }
  8352. return rst;
  8353. }
  8354. var Util = {
  8355. // 获取逼近的数值
  8356. snapFactorTo: function snapFactorTo(v, arr, snapType) {
  8357. // 假设 v = -512,isFloor = true
  8358. if (isNaN(v)) {
  8359. return NaN;
  8360. }
  8361. var factor = 1; // 计算系数
  8362. if (v !== 0) {
  8363. if (v < 0) {
  8364. factor = -1;
  8365. }
  8366. v = v * factor; // v = 512
  8367. var tmpFactor = getFactor(v);
  8368. factor = factor * tmpFactor; // factor = -100
  8369. v = v / tmpFactor; // v = 5.12
  8370. }
  8371. if (snapType === 'floor') {
  8372. v = Util.snapFloor(arr, v); // v = 5
  8373. } else if (snapType === 'ceil') {
  8374. v = Util.snapCeiling(arr, v); // v = 6
  8375. } else {
  8376. v = Util.snapTo(arr, v); // 四舍五入 5
  8377. }
  8378. var rst = parseFloat((v * factor).toPrecision(DECIMAL_LENGTH)); // 如果出现浮点数计算问题,需要处理一下
  8379. // 如果出现浮点数计算问题,需要处理一下
  8380. if (Math.abs(factor) < 1 && rst.toString().length > DECIMAL_LENGTH) {
  8381. var decimalVal = parseInt(1 / factor);
  8382. var symbol = factor > 0 ? 1 : -1;
  8383. rst = v / decimalVal * symbol;
  8384. }
  8385. return rst;
  8386. },
  8387. // 获取逼近的倍数
  8388. snapMultiple: function snapMultiple(v, base, snapType) {
  8389. var div;
  8390. if (snapType === 'ceil') {
  8391. div = Math.ceil(v / base);
  8392. } else if (snapType === 'floor') {
  8393. div = Math.floor(v / base);
  8394. } else {
  8395. div = Math.round(v / base);
  8396. }
  8397. return div * base;
  8398. },
  8399. /**
  8400. * 获取逼近的值,用于对齐数据
  8401. * @param {Array} values 数据集合
  8402. * @param {Number} value 数值
  8403. * @return {Number} 逼近的值
  8404. */
  8405. snapTo: function snapTo(values, value) {
  8406. // 这里假定values是升序排列
  8407. var floorVal = arrayFloor(values, value);
  8408. var ceilingVal = arrayCeiling(values, value);
  8409. if (isNaN(floorVal) || isNaN(ceilingVal)) {
  8410. if (values[0] >= value) {
  8411. return values[0];
  8412. }
  8413. var last = values[values.length - 1];
  8414. if (last <= value) {
  8415. return last;
  8416. }
  8417. }
  8418. if (Math.abs(value - floorVal) < Math.abs(ceilingVal - value)) {
  8419. return floorVal;
  8420. }
  8421. return ceilingVal;
  8422. },
  8423. /**
  8424. * 获取逼近的最小值,用于对齐数据
  8425. * @param {Array} values 数据集合
  8426. * @param {Number} value 数值
  8427. * @return {Number} 逼近的最小值
  8428. */
  8429. snapFloor: function snapFloor(values, value) {
  8430. // 这里假定values是升序排列
  8431. return arrayFloor(values, value);
  8432. },
  8433. /**
  8434. * 获取逼近的最大值,用于对齐数据
  8435. * @param {Array} values 数据集合
  8436. * @param {Number} value 数值
  8437. * @return {Number} 逼近的最大值
  8438. */
  8439. snapCeiling: function snapCeiling(values, value) {
  8440. // 这里假定values是升序排列
  8441. return arrayCeiling(values, value);
  8442. },
  8443. fixedBase: function fixedBase(v, base) {
  8444. var str = base.toString();
  8445. var index = str.indexOf('.');
  8446. var indexOfExp = str.indexOf('e-'); // 判断是否带小数点,1.000001 1.23e-9
  8447. if (index < 0 && indexOfExp < 0) {
  8448. // base为整数
  8449. return Math.round(v);
  8450. }
  8451. var length = indexOfExp >= 0 ? parseInt(str.substr(indexOfExp + 2), 10) : str.substr(index + 1).length;
  8452. if (length > 20) {
  8453. length = 20;
  8454. }
  8455. return parseFloat(v.toFixed(length));
  8456. }
  8457. };
  8458. module.exports = Util;
  8459. /***/ }),
  8460. /* 172 */
  8461. /***/ (function(module, exports, __webpack_require__) {
  8462. function _inheritsLoose(subClass, superClass) {
  8463. subClass.prototype = Object.create(superClass.prototype);
  8464. subClass.prototype.constructor = subClass;
  8465. subClass.__proto__ = superClass;
  8466. }
  8467. var Base = __webpack_require__(26);
  8468. var isNumber = __webpack_require__(36);
  8469. var Identity = /*#__PURE__*/function (_Base) {
  8470. _inheritsLoose(Identity, _Base);
  8471. function Identity() {
  8472. return _Base.apply(this, arguments) || this;
  8473. }
  8474. var _proto = Identity.prototype;
  8475. _proto._initDefaultCfg = function _initDefaultCfg() {
  8476. _Base.prototype._initDefaultCfg.call(this);
  8477. this.isIdentity = true;
  8478. this.type = 'identity';
  8479. /**
  8480. * 常量值
  8481. * @type {*}
  8482. */
  8483. this.value = null;
  8484. }
  8485. /**
  8486. * @override
  8487. */
  8488. ;
  8489. _proto.getText = function getText() {
  8490. return this.value.toString();
  8491. }
  8492. /**
  8493. * @override
  8494. */
  8495. ;
  8496. _proto.scale = function scale(value) {
  8497. if (this.value !== value && isNumber(value)) {
  8498. return value;
  8499. }
  8500. return this.range[0];
  8501. }
  8502. /**
  8503. * @override
  8504. */
  8505. ;
  8506. _proto.invert = function invert() {
  8507. return this.value;
  8508. };
  8509. return Identity;
  8510. }(Base);
  8511. Base.Identity = Identity;
  8512. module.exports = Identity;
  8513. /***/ }),
  8514. /* 173 */
  8515. /***/ (function(module, exports, __webpack_require__) {
  8516. "use strict";
  8517. var Util = __webpack_require__(0);
  8518. var Axis = __webpack_require__(174);
  8519. var Global = __webpack_require__(6);
  8520. var _require = __webpack_require__(16),
  8521. Shape = _require.Shape;
  8522. function formatTicks(ticks) {
  8523. var tmp = ticks.slice(0);
  8524. if (tmp.length > 0) {
  8525. var first = tmp[0];
  8526. var last = tmp[tmp.length - 1];
  8527. if (first.value !== 0) {
  8528. tmp.unshift({
  8529. value: 0
  8530. });
  8531. }
  8532. if (last.value !== 1) {
  8533. tmp.push({
  8534. value: 1
  8535. });
  8536. }
  8537. }
  8538. return tmp;
  8539. }
  8540. var AxisController = /*#__PURE__*/function () {
  8541. function AxisController(cfg) {
  8542. this.axisCfg = {};
  8543. this.frontPlot = null;
  8544. this.backPlot = null;
  8545. this.axes = {}; // store the axes's options
  8546. Util.mix(this, cfg);
  8547. }
  8548. var _proto = AxisController.prototype;
  8549. _proto._isHide = function _isHide(field) {
  8550. var axisCfg = this.axisCfg;
  8551. return !axisCfg || axisCfg[field] === false;
  8552. };
  8553. _proto._getLinePosition = function _getLinePosition(scale, dimType, index, transposed) {
  8554. var position = '';
  8555. var field = scale.field;
  8556. var axisCfg = this.axisCfg;
  8557. if (axisCfg[field] && axisCfg[field].position) {
  8558. position = axisCfg[field].position;
  8559. } else if (dimType === 'x') {
  8560. position = transposed ? 'left' : 'bottom';
  8561. } else if (dimType === 'y') {
  8562. position = index ? 'right' : 'left';
  8563. if (transposed) {
  8564. position = 'bottom';
  8565. }
  8566. }
  8567. return position;
  8568. };
  8569. _proto._getLineCfg = function _getLineCfg(coord, dimType, position) {
  8570. var start;
  8571. var end;
  8572. var factor = 1; // Mark clockwise or counterclockwise
  8573. if (dimType === 'x') {
  8574. start = {
  8575. x: 0,
  8576. y: 0
  8577. };
  8578. end = {
  8579. x: 1,
  8580. y: 0
  8581. };
  8582. } else {
  8583. if (position === 'right') {
  8584. // there will be several y axes
  8585. start = {
  8586. x: 1,
  8587. y: 0
  8588. };
  8589. end = {
  8590. x: 1,
  8591. y: 1
  8592. };
  8593. } else {
  8594. start = {
  8595. x: 0,
  8596. y: 0
  8597. };
  8598. end = {
  8599. x: 0,
  8600. y: 1
  8601. };
  8602. factor = -1;
  8603. }
  8604. }
  8605. if (coord.transposed) {
  8606. factor *= -1;
  8607. }
  8608. return {
  8609. offsetFactor: factor,
  8610. start: coord.convertPoint(start),
  8611. end: coord.convertPoint(end)
  8612. };
  8613. };
  8614. _proto._getCircleCfg = function _getCircleCfg(coord) {
  8615. return {
  8616. startAngle: coord.startAngle,
  8617. endAngle: coord.endAngle,
  8618. center: coord.center,
  8619. radius: coord.circleRadius
  8620. };
  8621. };
  8622. _proto._getRadiusCfg = function _getRadiusCfg(coord) {
  8623. var transposed = coord.transposed;
  8624. var start;
  8625. var end;
  8626. if (transposed) {
  8627. start = {
  8628. x: 0,
  8629. y: 0
  8630. };
  8631. end = {
  8632. x: 1,
  8633. y: 0
  8634. };
  8635. } else {
  8636. start = {
  8637. x: 0,
  8638. y: 0
  8639. };
  8640. end = {
  8641. x: 0,
  8642. y: 1
  8643. };
  8644. }
  8645. return {
  8646. offsetFactor: -1,
  8647. start: coord.convertPoint(start),
  8648. end: coord.convertPoint(end)
  8649. };
  8650. };
  8651. _proto._getAxisCfg = function _getAxisCfg(coord, scale, verticalScale, dimType, defaultCfg) {
  8652. var self = this;
  8653. var axisCfg = this.axisCfg;
  8654. var ticks = scale.getTicks();
  8655. var cfg = Util.deepMix({
  8656. ticks: ticks,
  8657. frontContainer: this.frontPlot,
  8658. backContainer: this.backPlot
  8659. }, defaultCfg, axisCfg[scale.field]);
  8660. var labels = [];
  8661. var label = cfg.label;
  8662. var count = ticks.length;
  8663. var maxWidth = 0;
  8664. var maxHeight = 0;
  8665. var labelCfg = label;
  8666. Util.each(ticks, function (tick, index) {
  8667. if (Util.isFunction(label)) {
  8668. var executedLabel = label(tick.text, index, count);
  8669. labelCfg = executedLabel ? Util.mix({}, Global._defaultAxis.label, executedLabel) : null;
  8670. }
  8671. if (labelCfg) {
  8672. var textStyle = {};
  8673. if (labelCfg.textAlign) {
  8674. textStyle.textAlign = labelCfg.textAlign;
  8675. }
  8676. if (labelCfg.textBaseline) {
  8677. textStyle.textBaseline = labelCfg.textBaseline;
  8678. }
  8679. var axisLabel = new Shape.Text({
  8680. className: 'axis-label',
  8681. attrs: Util.mix({
  8682. x: 0,
  8683. y: 0,
  8684. text: tick.text,
  8685. fontFamily: self.chart.get('canvas').get('fontFamily')
  8686. }, labelCfg),
  8687. value: tick.value,
  8688. textStyle: textStyle,
  8689. top: labelCfg.top,
  8690. context: self.chart.get('canvas').get('context')
  8691. });
  8692. labels.push(axisLabel);
  8693. var _axisLabel$getBBox = axisLabel.getBBox(),
  8694. width = _axisLabel$getBBox.width,
  8695. height = _axisLabel$getBBox.height;
  8696. maxWidth = Math.max(maxWidth, width);
  8697. maxHeight = Math.max(maxHeight, height);
  8698. }
  8699. });
  8700. cfg.labels = labels;
  8701. cfg.maxWidth = maxWidth;
  8702. cfg.maxHeight = maxHeight;
  8703. return cfg;
  8704. };
  8705. _proto._createAxis = function _createAxis(coord, scale, verticalScale, dimType, index) {
  8706. if (index === void 0) {
  8707. index = '';
  8708. }
  8709. var self = this;
  8710. var coordType = coord.type;
  8711. var transposed = coord.transposed;
  8712. var type;
  8713. var key;
  8714. var defaultCfg;
  8715. if (coordType === 'cartesian' || coordType === 'rect') {
  8716. var position = self._getLinePosition(scale, dimType, index, transposed);
  8717. defaultCfg = Global.axis[position];
  8718. defaultCfg.position = position;
  8719. type = 'Line';
  8720. key = position;
  8721. } else {
  8722. if (dimType === 'x' && !transposed || dimType === 'y' && transposed) {
  8723. defaultCfg = Global.axis.circle;
  8724. type = 'Circle';
  8725. key = 'circle';
  8726. } else {
  8727. defaultCfg = Global.axis.radius;
  8728. type = 'Line';
  8729. key = 'radius';
  8730. }
  8731. }
  8732. var cfg = self._getAxisCfg(coord, scale, verticalScale, dimType, defaultCfg);
  8733. cfg.type = type;
  8734. cfg.dimType = dimType;
  8735. cfg.verticalScale = verticalScale;
  8736. cfg.index = index;
  8737. this.axes[key] = cfg;
  8738. };
  8739. _proto.createAxis = function createAxis(coord, xScale, yScales) {
  8740. var self = this;
  8741. if (xScale && !self._isHide(xScale.field)) {
  8742. self._createAxis(coord, xScale, yScales[0], 'x');
  8743. }
  8744. Util.each(yScales, function (yScale, index) {
  8745. if (!self._isHide(yScale.field)) {
  8746. self._createAxis(coord, yScale, xScale, 'y', index);
  8747. }
  8748. });
  8749. var axes = this.axes;
  8750. var chart = self.chart;
  8751. if (chart._isAutoPadding()) {
  8752. var userPadding = Util.parsePadding(chart.get('padding'));
  8753. var appendPadding = Util.parsePadding(chart.get('appendPadding'));
  8754. var legendRange = chart.get('legendRange') || {
  8755. top: 0,
  8756. right: 0,
  8757. bottom: 0,
  8758. left: 0
  8759. };
  8760. var padding = [userPadding[0] === 'auto' ? legendRange.top + appendPadding[0] * 2 : userPadding[0], userPadding[1] === 'auto' ? legendRange.right + appendPadding[1] : userPadding[1], userPadding[2] === 'auto' ? legendRange.bottom + appendPadding[2] : userPadding[2], userPadding[3] === 'auto' ? legendRange.left + appendPadding[3] : userPadding[3]];
  8761. if (coord.isPolar) {
  8762. var circleAxis = axes.circle;
  8763. if (circleAxis) {
  8764. var maxHeight = circleAxis.maxHeight,
  8765. maxWidth = circleAxis.maxWidth,
  8766. labelOffset = circleAxis.labelOffset;
  8767. padding[0] += maxHeight + labelOffset;
  8768. padding[1] += maxWidth + labelOffset;
  8769. padding[2] += maxHeight + labelOffset;
  8770. padding[3] += maxWidth + labelOffset;
  8771. }
  8772. } else {
  8773. if (axes.right && userPadding[1] === 'auto') {
  8774. var _axes$right = axes.right,
  8775. _maxWidth = _axes$right.maxWidth,
  8776. _labelOffset = _axes$right.labelOffset;
  8777. padding[1] += _maxWidth + _labelOffset;
  8778. }
  8779. if (axes.left && userPadding[3] === 'auto') {
  8780. var _axes$left = axes.left,
  8781. _maxWidth2 = _axes$left.maxWidth,
  8782. _labelOffset2 = _axes$left.labelOffset;
  8783. padding[3] += _maxWidth2 + _labelOffset2;
  8784. }
  8785. if (axes.bottom && userPadding[2] === 'auto') {
  8786. var _axes$bottom = axes.bottom,
  8787. _maxHeight = _axes$bottom.maxHeight,
  8788. _labelOffset3 = _axes$bottom.labelOffset;
  8789. padding[2] += _maxHeight + _labelOffset3;
  8790. }
  8791. }
  8792. chart.set('_padding', padding);
  8793. chart._updateLayout(padding);
  8794. }
  8795. Util.each(axes, function (axis) {
  8796. var type = axis.type,
  8797. grid = axis.grid,
  8798. verticalScale = axis.verticalScale,
  8799. ticks = axis.ticks,
  8800. dimType = axis.dimType,
  8801. position = axis.position,
  8802. index = axis.index;
  8803. var appendCfg;
  8804. if (coord.isPolar) {
  8805. if (type === 'Line') {
  8806. appendCfg = self._getRadiusCfg(coord);
  8807. } else if (type === 'Circle') {
  8808. appendCfg = self._getCircleCfg(coord);
  8809. }
  8810. } else {
  8811. appendCfg = self._getLineCfg(coord, dimType, position);
  8812. }
  8813. if (grid && verticalScale) {
  8814. var gridPoints = [];
  8815. var verticalTicks = formatTicks(verticalScale.getTicks());
  8816. Util.each(ticks, function (tick) {
  8817. var subPoints = [];
  8818. Util.each(verticalTicks, function (verticalTick) {
  8819. var x = dimType === 'x' ? tick.value : verticalTick.value;
  8820. var y = dimType === 'x' ? verticalTick.value : tick.value;
  8821. if (x >= 0 && x <= 1 && y >= 0 && y <= 1) {
  8822. var point = coord.convertPoint({
  8823. x: x,
  8824. y: y
  8825. });
  8826. subPoints.push(point);
  8827. }
  8828. });
  8829. gridPoints.push({
  8830. points: subPoints,
  8831. _id: 'axis-' + dimType + index + '-grid-' + tick.tickValue
  8832. });
  8833. });
  8834. axis.gridPoints = gridPoints;
  8835. if (coord.isPolar) {
  8836. axis.center = coord.center;
  8837. axis.startAngle = coord.startAngle;
  8838. axis.endAngle = coord.endAngle;
  8839. }
  8840. }
  8841. appendCfg._id = 'axis-' + dimType;
  8842. if (!Util.isNil(index)) {
  8843. appendCfg._id = 'axis-' + dimType + index;
  8844. }
  8845. new Axis[type](Util.mix(axis, appendCfg));
  8846. });
  8847. };
  8848. _proto.clear = function clear() {
  8849. this.axes = {};
  8850. this.frontPlot.clear();
  8851. this.backPlot.clear();
  8852. };
  8853. return AxisController;
  8854. }();
  8855. module.exports = AxisController;
  8856. /***/ }),
  8857. /* 174 */
  8858. /***/ (function(module, exports, __webpack_require__) {
  8859. "use strict";
  8860. var Abstract = __webpack_require__(45);
  8861. __webpack_require__(175);
  8862. module.exports = Abstract;
  8863. /***/ }),
  8864. /* 175 */
  8865. /***/ (function(module, exports, __webpack_require__) {
  8866. "use strict";
  8867. var _interopRequireDefault = __webpack_require__(1);
  8868. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  8869. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  8870. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  8871. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  8872. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  8873. var Util = __webpack_require__(0);
  8874. var Abstract = __webpack_require__(45);
  8875. var Line = /*#__PURE__*/function (_Abstract) {
  8876. (0, _inheritsLoose2["default"])(Line, _Abstract);
  8877. var _super = _createSuper(Line);
  8878. function Line() {
  8879. return _Abstract.apply(this, arguments) || this;
  8880. }
  8881. var _proto = Line.prototype;
  8882. _proto._initDefaultCfg = function _initDefaultCfg() {
  8883. _Abstract.prototype._initDefaultCfg.call(this);
  8884. this.start = null;
  8885. this.end = null;
  8886. };
  8887. _proto.getOffsetPoint = function getOffsetPoint(value) {
  8888. var start = this.start,
  8889. end = this.end;
  8890. return {
  8891. x: start.x + (end.x - start.x) * value,
  8892. y: start.y + (end.y - start.y) * value
  8893. };
  8894. };
  8895. _proto.getAxisVector = function getAxisVector() {
  8896. var start = this.start,
  8897. end = this.end;
  8898. return [end.x - start.x, end.y - start.y];
  8899. };
  8900. _proto.drawLine = function drawLine(lineCfg) {
  8901. var container = this.getContainer(lineCfg.top);
  8902. var start = this.start,
  8903. end = this.end;
  8904. container.addShape('line', {
  8905. className: 'axis-line',
  8906. attrs: Util.mix({
  8907. x1: start.x,
  8908. y1: start.y,
  8909. x2: end.x,
  8910. y2: end.y
  8911. }, lineCfg)
  8912. });
  8913. };
  8914. return Line;
  8915. }(Abstract);
  8916. Abstract.Line = Line;
  8917. module.exports = Line;
  8918. /***/ }),
  8919. /* 176 */
  8920. /***/ (function(module, exports, __webpack_require__) {
  8921. "use strict";
  8922. var _interopRequireDefault = __webpack_require__(1);
  8923. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  8924. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  8925. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  8926. var _emit = _interopRequireDefault(__webpack_require__(42));
  8927. var _controller = _interopRequireDefault(__webpack_require__(177));
  8928. var _canvasElement = _interopRequireDefault(__webpack_require__(178));
  8929. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  8930. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  8931. var Util = __webpack_require__(0);
  8932. var Container = __webpack_require__(66);
  8933. var Group = __webpack_require__(67);
  8934. var _require = __webpack_require__(70),
  8935. requestAnimationFrame = _require.requestAnimationFrame;
  8936. var Canvas = /*#__PURE__*/function (_EventEmit) {
  8937. (0, _inheritsLoose2["default"])(Canvas, _EventEmit);
  8938. var _super = _createSuper(Canvas);
  8939. var _proto = Canvas.prototype;
  8940. _proto.get = function get(name) {
  8941. return this._attrs[name];
  8942. };
  8943. _proto.set = function set(name, value) {
  8944. this._attrs[name] = value;
  8945. };
  8946. function Canvas(cfg) {
  8947. var _this;
  8948. _this = _EventEmit.call(this) || this;
  8949. _this._attrs = Util.mix({
  8950. type: 'canvas',
  8951. children: []
  8952. }, cfg);
  8953. _this._initPixelRatio();
  8954. _this._initCanvas();
  8955. return _this;
  8956. }
  8957. _proto._initPixelRatio = function _initPixelRatio() {
  8958. var pixelRatio = this.get('pixelRatio');
  8959. if (!pixelRatio) {
  8960. this.set('pixelRatio', Util.getPixelRatio());
  8961. }
  8962. };
  8963. _proto.beforeDraw = function beforeDraw() {
  8964. var context = this._attrs.context;
  8965. var el = this._attrs.el;
  8966. context && context.clearRect && context.clearRect(0, 0, el.width, el.height);
  8967. };
  8968. _proto._initCanvas = function _initCanvas() {
  8969. var self = this;
  8970. var el = self.get('el');
  8971. var context = self.get('context');
  8972. if (!el && !context) {
  8973. throw new Error('Please specify the id, el or context of the chart!');
  8974. }
  8975. var canvas;
  8976. if (el) {
  8977. // DOMElement or String
  8978. canvas = Util.isString(el) ? Util.getDomById(el) : el;
  8979. } else {
  8980. // 说明没有指定el
  8981. canvas = _canvasElement["default"].create(context);
  8982. }
  8983. if (context && canvas && !canvas.getContext) {
  8984. canvas.getContext = function () {
  8985. return context;
  8986. };
  8987. }
  8988. var width = self.get('width');
  8989. if (!width) {
  8990. width = Util.getWidth(canvas);
  8991. }
  8992. var height = self.get('height');
  8993. if (!height) {
  8994. height = Util.getHeight(canvas);
  8995. }
  8996. self.set('canvas', this);
  8997. self.set('el', canvas);
  8998. self.set('context', context || canvas.getContext('2d'));
  8999. self.changeSize(width, height); // 初始化事件控制器
  9000. var eventController = new _controller["default"]({
  9001. canvas: this,
  9002. el: canvas
  9003. });
  9004. self.set('eventController', eventController);
  9005. };
  9006. _proto.changeSize = function changeSize(width, height) {
  9007. var pixelRatio = this.get('pixelRatio');
  9008. var canvasDOM = this.get('el'); // HTMLCanvasElement or canvasElement
  9009. // 浏览器环境设置style样式
  9010. if (canvasDOM.style) {
  9011. canvasDOM.style.width = width + 'px';
  9012. canvasDOM.style.height = height + 'px';
  9013. }
  9014. if (Util.isCanvasElement(canvasDOM)) {
  9015. canvasDOM.width = width * pixelRatio;
  9016. canvasDOM.height = height * pixelRatio;
  9017. if (pixelRatio !== 1) {
  9018. var ctx = this.get('context');
  9019. ctx.scale(pixelRatio, pixelRatio);
  9020. }
  9021. }
  9022. this.set('width', width);
  9023. this.set('height', height);
  9024. };
  9025. _proto.getWidth = function getWidth() {
  9026. var pixelRatio = this.get('pixelRatio');
  9027. var width = this.get('width');
  9028. return width * pixelRatio;
  9029. };
  9030. _proto.getHeight = function getHeight() {
  9031. var pixelRatio = this.get('pixelRatio');
  9032. var height = this.get('height');
  9033. return height * pixelRatio;
  9034. };
  9035. _proto.getPointByClient = function getPointByClient(clientX, clientY) {
  9036. var el = this.get('el');
  9037. var bbox = el.getBoundingClientRect();
  9038. var width = bbox.right - bbox.left;
  9039. var height = bbox.bottom - bbox.top;
  9040. return {
  9041. x: (clientX - bbox.left) * (el.width / width),
  9042. y: (clientY - bbox.top) * (el.height / height)
  9043. };
  9044. };
  9045. _proto._beginDraw = function _beginDraw() {
  9046. this._attrs.toDraw = true;
  9047. };
  9048. _proto._endDraw = function _endDraw() {
  9049. this._attrs.toDraw = false;
  9050. };
  9051. _proto.draw = function draw() {
  9052. var self = this;
  9053. function drawInner() {
  9054. self.set('animateHandler', requestAnimationFrame(function () {
  9055. self.set('animateHandler', undefined);
  9056. if (self.get('toDraw')) {
  9057. drawInner();
  9058. }
  9059. }));
  9060. self.beforeDraw();
  9061. try {
  9062. var context = self._attrs.context;
  9063. var children = self._attrs.children;
  9064. for (var i = 0, len = children.length; i < len; i++) {
  9065. var child = children[i];
  9066. child.draw(context);
  9067. } // 支付宝,微信小程序,需要调context.draw才能完成绘制, 所以这里直接判断是否有.draw方法
  9068. if (context.draw) {
  9069. context.draw();
  9070. }
  9071. } catch (ev) {
  9072. console.warn('error in draw canvas, detail as:');
  9073. console.warn(ev);
  9074. self._endDraw();
  9075. }
  9076. self._endDraw();
  9077. }
  9078. if (self.get('destroyed')) {
  9079. return;
  9080. }
  9081. if (self.get('animateHandler')) {
  9082. this._beginDraw();
  9083. } else {
  9084. drawInner();
  9085. }
  9086. };
  9087. _proto.destroy = function destroy() {
  9088. if (this.get('destroyed')) {
  9089. return;
  9090. } // 需要清理 canvas 画布内容,否则会导致 spa 应用 ios 下 canvas 白屏
  9091. // https://stackoverflow.com/questions/52532614/total-canvas-memory-use-exceeds-the-maximum-limit-safari-12
  9092. // https://github.com/antvis/F2/issues/630
  9093. var el = this.get('el');
  9094. el.width = 0;
  9095. el.height = 0;
  9096. this.clear();
  9097. this._attrs = {};
  9098. this.set('destroyed', true);
  9099. };
  9100. _proto.isDestroyed = function isDestroyed() {
  9101. return this.get('destroyed');
  9102. };
  9103. return Canvas;
  9104. }(_emit["default"]);
  9105. Util.mix(Canvas.prototype, Container, {
  9106. getGroupClass: function getGroupClass() {
  9107. return Group;
  9108. }
  9109. });
  9110. module.exports = Canvas;
  9111. /***/ }),
  9112. /* 177 */
  9113. /***/ (function(module, exports, __webpack_require__) {
  9114. "use strict";
  9115. exports.__esModule = true;
  9116. exports["default"] = void 0;
  9117. var _dom = __webpack_require__(62);
  9118. var _common = __webpack_require__(0);
  9119. // 计算滑动的方向
  9120. var calcDirection = function calcDirection(start, end) {
  9121. var xDistance = end.x - start.x;
  9122. var yDistance = end.y - start.y; // x 的距离大于y 说明是横向,否则就是纵向
  9123. if (Math.abs(xDistance) > Math.abs(yDistance)) {
  9124. return xDistance > 0 ? 'right' : 'left';
  9125. }
  9126. return yDistance > 0 ? 'down' : 'up';
  9127. }; // 计算2点之间的距离
  9128. var calcDistance = function calcDistance(point1, point2) {
  9129. var xDistance = Math.abs(point2.x - point1.x);
  9130. var yDistance = Math.abs(point2.y - point1.y);
  9131. return Math.sqrt(xDistance * xDistance + yDistance * yDistance);
  9132. };
  9133. var getCenter = function getCenter(point1, point2) {
  9134. var x = point1.x + (point2.x - point1.x) / 2;
  9135. var y = point1.y + (point2.y - point1.y) / 2;
  9136. return {
  9137. x: x,
  9138. y: y
  9139. };
  9140. };
  9141. var convertPoints = function convertPoints(touches, canvas) {
  9142. if (!touches) return;
  9143. var points = [];
  9144. var len = touches.length;
  9145. for (var i = 0; i < len; i++) {
  9146. var touch = touches[i]; // x, y: 相对canvas原点的位置,clientX, clientY 相对于可视窗口的位置
  9147. var x = touch.x,
  9148. y = touch.y,
  9149. clientX = touch.clientX,
  9150. clientY = touch.clientY;
  9151. var point = void 0; // 小程序环境会有x,y
  9152. if ((0, _common.isNumber)(x) || (0, _common.isNumber)(y)) {
  9153. point = {
  9154. x: x,
  9155. y: y
  9156. };
  9157. } else {
  9158. // 浏览器环境再计算下canvas的相对位置
  9159. point = (0, _dom.getRelativePosition)({
  9160. x: clientX,
  9161. y: clientY
  9162. }, canvas);
  9163. }
  9164. points.push(point);
  9165. }
  9166. return points;
  9167. };
  9168. var PRESS_DELAY = 250;
  9169. var EventController = /*#__PURE__*/function () {
  9170. function EventController(_ref) {
  9171. var _this = this;
  9172. var canvas = _ref.canvas,
  9173. el = _ref.el;
  9174. this._click = function (ev) {
  9175. _this.emitEvent('click', ev);
  9176. };
  9177. this._start = function (ev) {
  9178. var points = convertPoints(ev.touches, _this.canvas);
  9179. if (!points) {
  9180. return;
  9181. }
  9182. ev.points = points;
  9183. _this.emitEvent('touchstart', ev); // 防止上次的内容没有清理掉,重新reset下
  9184. _this.reset(); // 记录touch start 的时间
  9185. _this.startTime = Date.now(); // 记录touch start 的点
  9186. _this.startPoints = points;
  9187. if (points.length > 1) {
  9188. _this.startDistance = calcDistance(points[0], points[1]);
  9189. _this.center = getCenter(points[0], points[1]);
  9190. } else {
  9191. // 如果touchstart后停顿250ms, 则也触发press事件
  9192. _this.pressTimeout = setTimeout(function () {
  9193. // 这里固定触发press事件
  9194. var eventType = 'press';
  9195. ev.direction = 'none';
  9196. _this.emitStart(eventType, ev);
  9197. _this.emitEvent(eventType, ev);
  9198. _this.eventType = eventType;
  9199. }, PRESS_DELAY);
  9200. }
  9201. };
  9202. this._move = function (ev) {
  9203. var points = convertPoints(ev.touches, _this.canvas);
  9204. if (!points) return;
  9205. _this.clearPressTimeout();
  9206. ev.points = points;
  9207. _this.emitEvent('touchmove', ev);
  9208. var startPoints = _this.startPoints;
  9209. if (!startPoints) return; // 多指触控
  9210. if (points.length > 1) {
  9211. // touchstart的距离
  9212. var startDistance = _this.startDistance;
  9213. var currentDistance = calcDistance(points[0], points[1]);
  9214. ev.zoom = currentDistance / startDistance;
  9215. ev.center = _this.center; // 触发缩放事件
  9216. _this.emitStart('pinch', ev);
  9217. _this.emitEvent('pinch', ev);
  9218. } else {
  9219. var deltaX = points[0].x - startPoints[0].x;
  9220. var deltaY = points[0].y - startPoints[0].y;
  9221. var direction = _this.direction || calcDirection(startPoints[0], points[0]);
  9222. _this.direction = direction; // 获取press或者pan的事件类型
  9223. // press 按住滑动, pan表示平移
  9224. // 如果start后立刻move,则触发pan, 如果有停顿,则触发press
  9225. var eventType = _this.getEventType(points);
  9226. ev.direction = direction;
  9227. ev.deltaX = deltaX;
  9228. ev.deltaY = deltaY;
  9229. _this.emitStart(eventType, ev);
  9230. _this.emitEvent(eventType, ev); // 记录最后2次move的时间和坐标,为了给swipe事件用
  9231. var prevMoveTime = _this.lastMoveTime;
  9232. var now = Date.now(); // 最后2次的时间间隔一定要大于0,否则swipe没发计算
  9233. if (now - prevMoveTime > 0) {
  9234. _this.prevMoveTime = prevMoveTime;
  9235. _this.prevMovePoints = _this.lastMovePoints;
  9236. _this.lastMoveTime = now;
  9237. _this.lastMovePoints = points;
  9238. }
  9239. }
  9240. };
  9241. this._end = function (ev) {
  9242. _this.emitEnd(ev);
  9243. _this.emitEvent('touchend', ev); // swipe事件处理, 在touchend之后触发
  9244. var lastMoveTime = _this.lastMoveTime;
  9245. var now = Date.now(); // 做这个判断是为了最后一次touchmove后到end前,还有一个停顿的过程
  9246. // 100 是拍的一个值,理论这个值会很短,一般不卡顿的话在10ms以内
  9247. if (now - lastMoveTime < 100) {
  9248. var prevMoveTime = _this.prevMoveTime || _this.startTime;
  9249. var intervalTime = lastMoveTime - prevMoveTime; // 时间间隔一定要大于0, 否则计算没意义
  9250. if (intervalTime > 0) {
  9251. var prevMovePoints = _this.prevMovePoints || _this.startPoints;
  9252. var lastMovePoints = _this.lastMovePoints; // move速率
  9253. var velocity = calcDistance(prevMovePoints[0], lastMovePoints[0]) / intervalTime; // 0.3 是参考hammerjs的设置
  9254. if (velocity > 0.3) {
  9255. ev.velocity = velocity;
  9256. ev.direction = calcDirection(prevMovePoints[0], lastMovePoints[0]);
  9257. _this.emitEvent('swipe', ev);
  9258. }
  9259. }
  9260. }
  9261. _this.reset();
  9262. var touches = ev.touches; // 当多指只释放了1指时也会触发end, 这时重新触发一次start
  9263. if (touches && touches.length > 0) {
  9264. _this._start(ev);
  9265. }
  9266. };
  9267. this._cancel = function (ev) {
  9268. _this.emitEvent('touchcancel', ev);
  9269. _this.reset();
  9270. };
  9271. // canvasEl
  9272. this.canvas = canvas;
  9273. this.delegateEvent(el); // 用来记录当前触发的事件
  9274. this.processEvent = {};
  9275. }
  9276. var _proto = EventController.prototype;
  9277. _proto.delegateEvent = function delegateEvent(canvasEl) {
  9278. // 代理这几个事件
  9279. canvasEl.addEventListener('click', this._click);
  9280. canvasEl.addEventListener('touchstart', this._start);
  9281. canvasEl.addEventListener('touchmove', this._move);
  9282. canvasEl.addEventListener('touchend', this._end);
  9283. canvasEl.addEventListener('touchcancel', this._cancel);
  9284. };
  9285. _proto.emitEvent = function emitEvent(type, ev) {
  9286. var canvas = this.canvas;
  9287. canvas.emit(type, ev);
  9288. };
  9289. _proto.getEventType = function getEventType(points) {
  9290. var eventType = this.eventType,
  9291. canvas = this.canvas,
  9292. startTime = this.startTime,
  9293. startPoints = this.startPoints;
  9294. if (eventType) {
  9295. return eventType;
  9296. }
  9297. var type;
  9298. var panEventListeners = canvas.__events.pan; // 如果没有pan事件的监听,默认都是press
  9299. if (!panEventListeners || !panEventListeners.length) {
  9300. type = 'press';
  9301. } else {
  9302. // 如果有pan事件的处理,press则需要停顿250ms, 且移动距离小于10
  9303. var now = Date.now();
  9304. if (now - startTime > PRESS_DELAY && calcDistance(startPoints[0], points[0]) < 10) {
  9305. type = 'press';
  9306. } else {
  9307. type = 'pan';
  9308. }
  9309. }
  9310. this.eventType = type;
  9311. return type;
  9312. };
  9313. _proto.enable = function enable(eventType) {
  9314. this.processEvent[eventType] = true;
  9315. } // 是否进行中的事件
  9316. ;
  9317. _proto.isProcess = function isProcess(eventType) {
  9318. return this.processEvent[eventType];
  9319. } // 触发start事件
  9320. ;
  9321. _proto.emitStart = function emitStart(type, ev) {
  9322. if (this.isProcess(type)) {
  9323. return;
  9324. }
  9325. this.enable(type);
  9326. this.emitEvent(type + "start", ev);
  9327. } // 触发end事件
  9328. ;
  9329. _proto.emitEnd = function emitEnd(ev) {
  9330. var _this2 = this;
  9331. var processEvent = this.processEvent;
  9332. Object.keys(processEvent).forEach(function (type) {
  9333. _this2.emitEvent(type + "end", ev);
  9334. delete processEvent[type];
  9335. });
  9336. };
  9337. _proto.clearPressTimeout = function clearPressTimeout() {
  9338. if (this.pressTimeout) {
  9339. clearTimeout(this.pressTimeout);
  9340. this.pressTimeout = 0;
  9341. }
  9342. };
  9343. _proto.reset = function reset() {
  9344. this.clearPressTimeout();
  9345. this.startTime = 0;
  9346. this.startPoints = null;
  9347. this.startDistance = 0;
  9348. this.direction = null;
  9349. this.eventType = null;
  9350. this.pinch = false;
  9351. this.prevMoveTime = 0;
  9352. this.prevMovePoints = null;
  9353. this.lastMoveTime = 0;
  9354. this.lastMovePoints = null;
  9355. };
  9356. return EventController;
  9357. }();
  9358. var _default = EventController;
  9359. exports["default"] = _default;
  9360. /***/ }),
  9361. /* 178 */
  9362. /***/ (function(module, exports, __webpack_require__) {
  9363. "use strict";
  9364. var _interopRequireDefault = __webpack_require__(1);
  9365. exports.__esModule = true;
  9366. exports["default"] = void 0;
  9367. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  9368. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  9369. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  9370. var _emit = _interopRequireDefault(__webpack_require__(42));
  9371. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  9372. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  9373. var CanvasElement = /*#__PURE__*/function (_EventEmit) {
  9374. (0, _inheritsLoose2["default"])(CanvasElement, _EventEmit);
  9375. var _super = _createSuper(CanvasElement);
  9376. function CanvasElement(ctx) {
  9377. var _this;
  9378. _this = _EventEmit.call(this) || this;
  9379. _this.context = ctx; // canvas实际的宽高 (width/height) * pixelRatio
  9380. _this.width = 0;
  9381. _this.height = 0;
  9382. _this.style = {};
  9383. _this.currentStyle = {}; // 用来标识是CanvasElement实例
  9384. _this.isCanvasElement = true;
  9385. return _this;
  9386. }
  9387. var _proto = CanvasElement.prototype;
  9388. _proto.getContext = function getContext()
  9389. /* type */
  9390. {
  9391. return this.context;
  9392. };
  9393. _proto.getBoundingClientRect = function getBoundingClientRect() {
  9394. var width = this.width;
  9395. var height = this.height; // 默认都处理成可视窗口的顶部位置
  9396. return {
  9397. top: 0,
  9398. right: width,
  9399. bottom: height,
  9400. left: 0
  9401. };
  9402. };
  9403. _proto.addEventListener = function addEventListener(type, listener) {
  9404. this.on(type, listener);
  9405. };
  9406. _proto.removeEventListener = function removeEventListener(type, listener) {
  9407. this.off(type, listener);
  9408. };
  9409. _proto.dispatchEvent = function dispatchEvent(type, e) {
  9410. this.emit(type, e);
  9411. };
  9412. return CanvasElement;
  9413. }(_emit["default"]);
  9414. function supportEventListener(canvas) {
  9415. if (!canvas) {
  9416. return false;
  9417. } // 非 HTMLCanvasElement
  9418. if (canvas.nodeType !== 1 || !canvas.nodeName || canvas.nodeName.toLowerCase() !== 'canvas') {
  9419. return false;
  9420. } // 微信小程序canvas.getContext('2d')时也是CanvasRenderingContext2D
  9421. // 也会有ctx.canvas, 而且nodeType也是1,所以还要在看下是否支持addEventListener
  9422. var support = false;
  9423. try {
  9424. canvas.addEventListener('eventTest', function () {
  9425. support = true;
  9426. });
  9427. canvas.dispatchEvent(new Event('eventTest'));
  9428. } catch (error) {
  9429. support = false;
  9430. }
  9431. return support;
  9432. }
  9433. var _default = {
  9434. create: function create(ctx) {
  9435. if (!ctx) {
  9436. return null;
  9437. }
  9438. if (supportEventListener(ctx.canvas)) {
  9439. return ctx.canvas;
  9440. }
  9441. return new CanvasElement(ctx);
  9442. }
  9443. };
  9444. exports["default"] = _default;
  9445. /***/ }),
  9446. /* 179 */
  9447. /***/ (function(module, exports, __webpack_require__) {
  9448. "use strict";
  9449. var Util = __webpack_require__(0);
  9450. function _mod(n, m) {
  9451. return (n % m + m) % m;
  9452. }
  9453. function _addStop(steps, gradient) {
  9454. Util.each(steps, function (item) {
  9455. item = item.split(':');
  9456. gradient.addColorStop(Number(item[0]), item[1]);
  9457. });
  9458. } // the string format: 'l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff'
  9459. function _parseLineGradient(color, shape, context) {
  9460. var arr = color.split(' ');
  9461. var angle = arr[0].slice(2, arr[0].length - 1);
  9462. angle = _mod(parseFloat(angle) * Math.PI / 180, Math.PI * 2);
  9463. var steps = arr.slice(1);
  9464. var _shape$getBBox = shape.getBBox(),
  9465. minX = _shape$getBBox.minX,
  9466. minY = _shape$getBBox.minY,
  9467. maxX = _shape$getBBox.maxX,
  9468. maxY = _shape$getBBox.maxY;
  9469. var start;
  9470. var end;
  9471. if (angle >= 0 && angle < 0.5 * Math.PI) {
  9472. start = {
  9473. x: minX,
  9474. y: minY
  9475. };
  9476. end = {
  9477. x: maxX,
  9478. y: maxY
  9479. };
  9480. } else if (0.5 * Math.PI <= angle && angle < Math.PI) {
  9481. start = {
  9482. x: maxX,
  9483. y: minY
  9484. };
  9485. end = {
  9486. x: minX,
  9487. y: maxY
  9488. };
  9489. } else if (Math.PI <= angle && angle < 1.5 * Math.PI) {
  9490. start = {
  9491. x: maxX,
  9492. y: maxY
  9493. };
  9494. end = {
  9495. x: minX,
  9496. y: minY
  9497. };
  9498. } else {
  9499. start = {
  9500. x: minX,
  9501. y: maxY
  9502. };
  9503. end = {
  9504. x: maxX,
  9505. y: minY
  9506. };
  9507. }
  9508. var tanTheta = Math.tan(angle);
  9509. var tanTheta2 = tanTheta * tanTheta;
  9510. var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;
  9511. var y = tanTheta * (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.y;
  9512. var gradient = context.createLinearGradient(start.x, start.y, x, y);
  9513. _addStop(steps, gradient);
  9514. return gradient;
  9515. } // the string format: 'r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff'
  9516. function _parseRadialGradient(color, shape, context) {
  9517. var arr = color.split(' ');
  9518. var circleCfg = arr[0].slice(2, arr[0].length - 1);
  9519. circleCfg = circleCfg.split(',');
  9520. var fx = parseFloat(circleCfg[0]);
  9521. var fy = parseFloat(circleCfg[1]);
  9522. var fr = parseFloat(circleCfg[2]);
  9523. var steps = arr.slice(1); // if radius is 0, no gradient, stroke with the last color
  9524. if (fr === 0) {
  9525. var _color = steps[steps.length - 1];
  9526. return _color.split(':')[1];
  9527. }
  9528. var _shape$getBBox2 = shape.getBBox(),
  9529. width = _shape$getBBox2.width,
  9530. height = _shape$getBBox2.height,
  9531. minX = _shape$getBBox2.minX,
  9532. minY = _shape$getBBox2.minY;
  9533. var r = Math.sqrt(width * width + height * height) / 2;
  9534. var gradient = context.createRadialGradient(minX + width * fx, minY + height * fy, fr * r, minX + width / 2, minY + height / 2, r);
  9535. _addStop(steps, gradient);
  9536. return gradient;
  9537. }
  9538. module.exports = {
  9539. parseStyle: function parseStyle(color, shape, context) {
  9540. if (color[1] === '(') {
  9541. try {
  9542. var firstCode = color[0];
  9543. if (firstCode === 'l') {
  9544. return _parseLineGradient(color, shape, context);
  9545. } else if (firstCode === 'r') {
  9546. return _parseRadialGradient(color, shape, context);
  9547. }
  9548. } catch (ev) {
  9549. console.error('error in parsing gradient string, please check if there are any extra whitespaces.');
  9550. console.error(ev);
  9551. }
  9552. }
  9553. return color;
  9554. }
  9555. };
  9556. /***/ }),
  9557. /* 180 */
  9558. /***/ (function(module, exports, __webpack_require__) {
  9559. "use strict";
  9560. var _interopRequireDefault = __webpack_require__(1);
  9561. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  9562. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  9563. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  9564. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  9565. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  9566. var Util = __webpack_require__(0);
  9567. var Shape = __webpack_require__(10);
  9568. var Rect = /*#__PURE__*/function (_Shape) {
  9569. (0, _inheritsLoose2["default"])(Rect, _Shape);
  9570. var _super = _createSuper(Rect);
  9571. function Rect() {
  9572. return _Shape.apply(this, arguments) || this;
  9573. }
  9574. var _proto = Rect.prototype;
  9575. _proto._initProperties = function _initProperties() {
  9576. _Shape.prototype._initProperties.call(this);
  9577. this._attrs.canFill = true;
  9578. this._attrs.canStroke = true;
  9579. this._attrs.type = 'rect';
  9580. };
  9581. _proto.getDefaultAttrs = function getDefaultAttrs() {
  9582. return {
  9583. x: 0,
  9584. y: 0,
  9585. width: 0,
  9586. height: 0,
  9587. radius: 0,
  9588. lineWidth: 0
  9589. };
  9590. };
  9591. _proto.createPath = function createPath(context) {
  9592. var self = this;
  9593. var attrs = self.get('attrs');
  9594. var x = attrs.x,
  9595. y = attrs.y,
  9596. width = attrs.width,
  9597. height = attrs.height;
  9598. context.beginPath();
  9599. var radius = attrs.radius;
  9600. if (!radius || !(width * height)) {
  9601. context.rect(x, y, width, height);
  9602. } else {
  9603. radius = Util.parsePadding(radius);
  9604. context.moveTo(x + radius[0], y);
  9605. context.lineTo(x + width - radius[1], y);
  9606. context.arc(x + width - radius[1], y + radius[1], radius[1], -Math.PI / 2, 0, false);
  9607. context.lineTo(x + width, y + height - radius[2]);
  9608. context.arc(x + width - radius[2], y + height - radius[2], radius[2], 0, Math.PI / 2, false);
  9609. context.lineTo(x + radius[3], y + height);
  9610. context.arc(x + radius[3], y + height - radius[3], radius[3], Math.PI / 2, Math.PI, false);
  9611. context.lineTo(x, y + radius[0]);
  9612. context.arc(x + radius[0], y + radius[0], radius[0], Math.PI, Math.PI * 3 / 2, false);
  9613. context.closePath();
  9614. }
  9615. };
  9616. _proto.calculateBox = function calculateBox() {
  9617. var attrs = this.get('attrs');
  9618. var x = attrs.x,
  9619. y = attrs.y,
  9620. width = attrs.width,
  9621. height = attrs.height;
  9622. return {
  9623. minX: x,
  9624. minY: y,
  9625. maxX: x + width,
  9626. maxY: y + height
  9627. };
  9628. };
  9629. return Rect;
  9630. }(Shape);
  9631. Shape.Rect = Rect;
  9632. module.exports = Rect;
  9633. /***/ }),
  9634. /* 181 */
  9635. /***/ (function(module, exports, __webpack_require__) {
  9636. "use strict";
  9637. var _interopRequireDefault = __webpack_require__(1);
  9638. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  9639. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  9640. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  9641. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  9642. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  9643. var Shape = __webpack_require__(10);
  9644. var Circle = /*#__PURE__*/function (_Shape) {
  9645. (0, _inheritsLoose2["default"])(Circle, _Shape);
  9646. var _super = _createSuper(Circle);
  9647. function Circle() {
  9648. return _Shape.apply(this, arguments) || this;
  9649. }
  9650. var _proto = Circle.prototype;
  9651. _proto._initProperties = function _initProperties() {
  9652. _Shape.prototype._initProperties.call(this);
  9653. this._attrs.canFill = true;
  9654. this._attrs.canStroke = true;
  9655. this._attrs.type = 'circle';
  9656. };
  9657. _proto.getDefaultAttrs = function getDefaultAttrs() {
  9658. return {
  9659. x: 0,
  9660. y: 0,
  9661. r: 0,
  9662. lineWidth: 0
  9663. };
  9664. };
  9665. _proto.createPath = function createPath(context) {
  9666. var attrs = this.get('attrs');
  9667. var x = attrs.x,
  9668. y = attrs.y,
  9669. r = attrs.r;
  9670. context.beginPath();
  9671. context.arc(x, y, r, 0, Math.PI * 2, false);
  9672. context.closePath();
  9673. };
  9674. _proto.calculateBox = function calculateBox() {
  9675. var attrs = this.get('attrs');
  9676. var x = attrs.x,
  9677. y = attrs.y,
  9678. r = attrs.r;
  9679. return {
  9680. minX: x - r,
  9681. maxX: x + r,
  9682. minY: y - r,
  9683. maxY: y + r
  9684. };
  9685. };
  9686. return Circle;
  9687. }(Shape);
  9688. Shape.Circle = Circle;
  9689. module.exports = Circle;
  9690. /***/ }),
  9691. /* 182 */
  9692. /***/ (function(module, exports, __webpack_require__) {
  9693. "use strict";
  9694. var _interopRequireDefault = __webpack_require__(1);
  9695. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  9696. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  9697. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  9698. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  9699. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  9700. var Shape = __webpack_require__(10);
  9701. var bbox = __webpack_require__(21);
  9702. var Line = /*#__PURE__*/function (_Shape) {
  9703. (0, _inheritsLoose2["default"])(Line, _Shape);
  9704. var _super = _createSuper(Line);
  9705. function Line() {
  9706. return _Shape.apply(this, arguments) || this;
  9707. }
  9708. var _proto = Line.prototype;
  9709. _proto._initProperties = function _initProperties() {
  9710. _Shape.prototype._initProperties.call(this);
  9711. this._attrs.canStroke = true;
  9712. this._attrs.type = 'line';
  9713. };
  9714. _proto.getDefaultAttrs = function getDefaultAttrs() {
  9715. return {
  9716. x1: 0,
  9717. y1: 0,
  9718. x2: 0,
  9719. y2: 0,
  9720. lineWidth: 1
  9721. };
  9722. };
  9723. _proto.createPath = function createPath(context) {
  9724. var attrs = this.get('attrs');
  9725. var x1 = attrs.x1,
  9726. y1 = attrs.y1,
  9727. x2 = attrs.x2,
  9728. y2 = attrs.y2;
  9729. context.beginPath();
  9730. context.moveTo(x1, y1);
  9731. context.lineTo(x2, y2);
  9732. };
  9733. _proto.calculateBox = function calculateBox() {
  9734. var attrs = this.get('attrs');
  9735. var x1 = attrs.x1,
  9736. y1 = attrs.y1,
  9737. x2 = attrs.x2,
  9738. y2 = attrs.y2,
  9739. lineWidth = attrs.lineWidth;
  9740. return bbox.getBBoxFromLine(x1, y1, x2, y2, lineWidth);
  9741. };
  9742. return Line;
  9743. }(Shape);
  9744. Shape.Line = Line;
  9745. module.exports = Line;
  9746. /***/ }),
  9747. /* 183 */
  9748. /***/ (function(module, exports, __webpack_require__) {
  9749. "use strict";
  9750. var _interopRequireDefault = __webpack_require__(1);
  9751. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  9752. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  9753. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  9754. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  9755. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  9756. var Shape = __webpack_require__(10);
  9757. var bbox = __webpack_require__(21);
  9758. var Polygon = /*#__PURE__*/function (_Shape) {
  9759. (0, _inheritsLoose2["default"])(Polygon, _Shape);
  9760. var _super = _createSuper(Polygon);
  9761. function Polygon() {
  9762. return _Shape.apply(this, arguments) || this;
  9763. }
  9764. var _proto = Polygon.prototype;
  9765. _proto._initProperties = function _initProperties() {
  9766. _Shape.prototype._initProperties.call(this);
  9767. this._attrs.canFill = true;
  9768. this._attrs.canStroke = true;
  9769. this._attrs.type = 'polygon';
  9770. };
  9771. _proto.getDefaultAttrs = function getDefaultAttrs() {
  9772. return {
  9773. points: null,
  9774. lineWidth: 0
  9775. };
  9776. };
  9777. _proto.createPath = function createPath(context) {
  9778. var self = this;
  9779. var attrs = self.get('attrs');
  9780. var points = attrs.points;
  9781. context.beginPath();
  9782. for (var i = 0, len = points.length; i < len; i++) {
  9783. var point = points[i];
  9784. if (i === 0) {
  9785. context.moveTo(point.x, point.y);
  9786. } else {
  9787. context.lineTo(point.x, point.y);
  9788. }
  9789. }
  9790. context.closePath();
  9791. };
  9792. _proto.calculateBox = function calculateBox() {
  9793. var attrs = this.get('attrs');
  9794. var points = attrs.points;
  9795. return bbox.getBBoxFromPoints(points);
  9796. };
  9797. return Polygon;
  9798. }(Shape);
  9799. Shape.Polygon = Polygon;
  9800. module.exports = Polygon;
  9801. /***/ }),
  9802. /* 184 */
  9803. /***/ (function(module, exports, __webpack_require__) {
  9804. "use strict";
  9805. var _interopRequireDefault = __webpack_require__(1);
  9806. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  9807. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  9808. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  9809. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  9810. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  9811. var Shape = __webpack_require__(10);
  9812. var Smooth = __webpack_require__(71);
  9813. var bbox = __webpack_require__(21); // filter the point which x or y is NaN
  9814. function _filterPoints(points) {
  9815. var filteredPoints = [];
  9816. for (var i = 0, len = points.length; i < len; i++) {
  9817. var point = points[i];
  9818. if (!isNaN(point.x) && !isNaN(point.y)) {
  9819. filteredPoints.push(point);
  9820. }
  9821. }
  9822. return filteredPoints;
  9823. }
  9824. var Polyline = /*#__PURE__*/function (_Shape) {
  9825. (0, _inheritsLoose2["default"])(Polyline, _Shape);
  9826. var _super = _createSuper(Polyline);
  9827. function Polyline() {
  9828. return _Shape.apply(this, arguments) || this;
  9829. }
  9830. var _proto = Polyline.prototype;
  9831. _proto._initProperties = function _initProperties() {
  9832. _Shape.prototype._initProperties.call(this);
  9833. this._attrs.canFill = true;
  9834. this._attrs.canStroke = true;
  9835. this._attrs.type = 'polyline';
  9836. };
  9837. _proto.getDefaultAttrs = function getDefaultAttrs() {
  9838. return {
  9839. points: null,
  9840. lineWidth: 1,
  9841. smooth: false
  9842. };
  9843. };
  9844. _proto.createPath = function createPath(context) {
  9845. var self = this;
  9846. var attrs = self.get('attrs');
  9847. var points = attrs.points,
  9848. smooth = attrs.smooth;
  9849. var filteredPoints = _filterPoints(points);
  9850. context.beginPath();
  9851. if (filteredPoints.length) {
  9852. context.moveTo(filteredPoints[0].x, filteredPoints[0].y);
  9853. if (smooth) {
  9854. var constaint = [[0, 0], [1, 1]];
  9855. var sps = Smooth.smooth(filteredPoints, false, constaint);
  9856. for (var i = 0, n = sps.length; i < n; i++) {
  9857. var sp = sps[i];
  9858. context.bezierCurveTo(sp[1], sp[2], sp[3], sp[4], sp[5], sp[6]);
  9859. }
  9860. } else {
  9861. var _i;
  9862. var l;
  9863. for (_i = 1, l = filteredPoints.length - 1; _i < l; _i++) {
  9864. context.lineTo(filteredPoints[_i].x, filteredPoints[_i].y);
  9865. }
  9866. context.lineTo(filteredPoints[l].x, filteredPoints[l].y);
  9867. }
  9868. }
  9869. };
  9870. _proto.calculateBox = function calculateBox() {
  9871. var attrs = this.get('attrs');
  9872. var points = attrs.points,
  9873. smooth = attrs.smooth,
  9874. lineWidth = attrs.lineWidth;
  9875. var filteredPoints = _filterPoints(points);
  9876. if (smooth) {
  9877. var newPoints = [];
  9878. var constaint = [[0, 0], [1, 1]];
  9879. var sps = Smooth.smooth(filteredPoints, false, constaint);
  9880. for (var i = 0, n = sps.length; i < n; i++) {
  9881. var sp = sps[i];
  9882. if (i === 0) {
  9883. newPoints.push([filteredPoints[0].x, filteredPoints[0].y, sp[1], sp[2], sp[3], sp[4], sp[5], sp[6]]);
  9884. } else {
  9885. var lastPoint = sps[i - 1];
  9886. newPoints.push([lastPoint[5], lastPoint[6], sp[1], sp[2], sp[3], sp[4], sp[5], sp[6]]);
  9887. }
  9888. }
  9889. return bbox.getBBoxFromBezierGroup(newPoints, lineWidth);
  9890. }
  9891. return bbox.getBBoxFromPoints(filteredPoints, lineWidth);
  9892. };
  9893. return Polyline;
  9894. }(Shape);
  9895. Shape.Polyline = Polyline;
  9896. module.exports = Polyline;
  9897. /***/ }),
  9898. /* 185 */
  9899. /***/ (function(module, exports, __webpack_require__) {
  9900. "use strict";
  9901. var _interopRequireDefault = __webpack_require__(1);
  9902. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  9903. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  9904. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  9905. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  9906. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  9907. var Shape = __webpack_require__(10);
  9908. var bbox = __webpack_require__(21);
  9909. var Arc = /*#__PURE__*/function (_Shape) {
  9910. (0, _inheritsLoose2["default"])(Arc, _Shape);
  9911. var _super = _createSuper(Arc);
  9912. function Arc() {
  9913. return _Shape.apply(this, arguments) || this;
  9914. }
  9915. var _proto = Arc.prototype;
  9916. _proto._initProperties = function _initProperties() {
  9917. _Shape.prototype._initProperties.call(this);
  9918. this._attrs.canStroke = true;
  9919. this._attrs.canFill = true;
  9920. this._attrs.type = 'arc';
  9921. };
  9922. _proto.getDefaultAttrs = function getDefaultAttrs() {
  9923. return {
  9924. x: 0,
  9925. y: 0,
  9926. r: 0,
  9927. startAngle: 0,
  9928. endAngle: Math.PI * 2,
  9929. anticlockwise: false,
  9930. lineWidth: 1
  9931. };
  9932. };
  9933. _proto.createPath = function createPath(context) {
  9934. var attrs = this.get('attrs');
  9935. var x = attrs.x,
  9936. y = attrs.y,
  9937. r = attrs.r,
  9938. startAngle = attrs.startAngle,
  9939. endAngle = attrs.endAngle,
  9940. anticlockwise = attrs.anticlockwise;
  9941. context.beginPath();
  9942. if (startAngle !== endAngle) {
  9943. context.arc(x, y, r, startAngle, endAngle, anticlockwise);
  9944. }
  9945. };
  9946. _proto.calculateBox = function calculateBox() {
  9947. var attrs = this.get('attrs');
  9948. var x = attrs.x,
  9949. y = attrs.y,
  9950. r = attrs.r,
  9951. startAngle = attrs.startAngle,
  9952. endAngle = attrs.endAngle,
  9953. anticlockwise = attrs.anticlockwise;
  9954. return bbox.getBBoxFromArc(x, y, r, startAngle, endAngle, anticlockwise);
  9955. };
  9956. return Arc;
  9957. }(Shape);
  9958. Shape.Arc = Arc;
  9959. module.exports = Arc;
  9960. /***/ }),
  9961. /* 186 */
  9962. /***/ (function(module, exports, __webpack_require__) {
  9963. "use strict";
  9964. var _interopRequireDefault = __webpack_require__(1);
  9965. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  9966. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  9967. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  9968. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  9969. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  9970. var Shape = __webpack_require__(10);
  9971. var bbox = __webpack_require__(21);
  9972. var Sector = /*#__PURE__*/function (_Shape) {
  9973. (0, _inheritsLoose2["default"])(Sector, _Shape);
  9974. var _super = _createSuper(Sector);
  9975. function Sector() {
  9976. return _Shape.apply(this, arguments) || this;
  9977. }
  9978. var _proto = Sector.prototype;
  9979. _proto._initProperties = function _initProperties() {
  9980. _Shape.prototype._initProperties.call(this);
  9981. this._attrs.canFill = true;
  9982. this._attrs.canStroke = true;
  9983. this._attrs.type = 'sector';
  9984. };
  9985. _proto.getDefaultAttrs = function getDefaultAttrs() {
  9986. return {
  9987. x: 0,
  9988. y: 0,
  9989. lineWidth: 0,
  9990. r: 0,
  9991. r0: 0,
  9992. startAngle: 0,
  9993. endAngle: Math.PI * 2,
  9994. anticlockwise: false
  9995. };
  9996. };
  9997. _proto.createPath = function createPath(context) {
  9998. var attrs = this.get('attrs');
  9999. var x = attrs.x,
  10000. y = attrs.y,
  10001. startAngle = attrs.startAngle,
  10002. endAngle = attrs.endAngle,
  10003. r = attrs.r,
  10004. r0 = attrs.r0,
  10005. anticlockwise = attrs.anticlockwise;
  10006. context.beginPath();
  10007. var unitX = Math.cos(startAngle);
  10008. var unitY = Math.sin(startAngle);
  10009. context.moveTo(unitX * r0 + x, unitY * r0 + y);
  10010. context.lineTo(unitX * r + x, unitY * r + y); // 当扇形的角度非常小的时候,就不进行弧线的绘制;或者整个只有1个扇形时,会出现end<0的情况不绘制
  10011. if (Math.abs(endAngle - startAngle) > 0.0001 || startAngle === 0 && endAngle < 0) {
  10012. context.arc(x, y, r, startAngle, endAngle, anticlockwise);
  10013. context.lineTo(Math.cos(endAngle) * r0 + x, Math.sin(endAngle) * r0 + y);
  10014. if (r0 !== 0) {
  10015. context.arc(x, y, r0, endAngle, startAngle, !anticlockwise);
  10016. }
  10017. }
  10018. context.closePath();
  10019. };
  10020. _proto.calculateBox = function calculateBox() {
  10021. var attrs = this.get('attrs');
  10022. var x = attrs.x,
  10023. y = attrs.y,
  10024. r = attrs.r,
  10025. r0 = attrs.r0,
  10026. startAngle = attrs.startAngle,
  10027. endAngle = attrs.endAngle,
  10028. anticlockwise = attrs.anticlockwise;
  10029. var outerBBox = bbox.getBBoxFromArc(x, y, r, startAngle, endAngle, anticlockwise);
  10030. var innerBBox = bbox.getBBoxFromArc(x, y, r0, startAngle, endAngle, anticlockwise);
  10031. return {
  10032. minX: Math.min(outerBBox.minX, innerBBox.minX),
  10033. minY: Math.min(outerBBox.minY, innerBBox.minY),
  10034. maxX: Math.max(outerBBox.maxX, innerBBox.maxX),
  10035. maxY: Math.max(outerBBox.maxY, innerBBox.maxY)
  10036. };
  10037. };
  10038. return Sector;
  10039. }(Shape);
  10040. Shape.Sector = Sector;
  10041. module.exports = Sector;
  10042. /***/ }),
  10043. /* 187 */
  10044. /***/ (function(module, exports, __webpack_require__) {
  10045. "use strict";
  10046. var _interopRequireDefault = __webpack_require__(1);
  10047. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  10048. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  10049. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  10050. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  10051. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  10052. var Util = __webpack_require__(0);
  10053. var Shape = __webpack_require__(10);
  10054. var RectUtil = __webpack_require__(188);
  10055. var textWidthCacheCounter = 0;
  10056. var textWidthCache = {};
  10057. var TEXT_CACHE_MAX = 5000;
  10058. var Text = /*#__PURE__*/function (_Shape) {
  10059. (0, _inheritsLoose2["default"])(Text, _Shape);
  10060. var _super = _createSuper(Text);
  10061. function Text() {
  10062. return _Shape.apply(this, arguments) || this;
  10063. }
  10064. var _proto = Text.prototype;
  10065. _proto._initProperties = function _initProperties() {
  10066. _Shape.prototype._initProperties.call(this);
  10067. this._attrs.canFill = true;
  10068. this._attrs.canStroke = true;
  10069. this._attrs.type = 'text';
  10070. };
  10071. _proto.getDefaultAttrs = function getDefaultAttrs() {
  10072. return {
  10073. lineWidth: 0,
  10074. lineCount: 1,
  10075. fontSize: 12,
  10076. fontFamily: 'sans-serif',
  10077. fontStyle: 'normal',
  10078. fontWeight: 'normal',
  10079. fontVariant: 'normal',
  10080. textAlign: 'start',
  10081. textBaseline: 'bottom',
  10082. lineHeight: null,
  10083. textArr: null
  10084. };
  10085. };
  10086. _proto._getFontStyle = function _getFontStyle() {
  10087. var attrs = this._attrs.attrs;
  10088. var fontSize = attrs.fontSize,
  10089. fontFamily = attrs.fontFamily,
  10090. fontWeight = attrs.fontWeight,
  10091. fontStyle = attrs.fontStyle,
  10092. fontVariant = attrs.fontVariant;
  10093. return fontStyle + " " + fontVariant + " " + fontWeight + " " + fontSize + "px " + fontFamily;
  10094. };
  10095. _proto._afterAttrsSet = function _afterAttrsSet() {
  10096. var attrs = this._attrs.attrs;
  10097. attrs.font = this._getFontStyle();
  10098. if (attrs.text) {
  10099. var text = attrs.text;
  10100. var textArr = null;
  10101. var lineCount = 1;
  10102. if (Util.isString(text) && text.indexOf('\n') !== -1) {
  10103. textArr = text.split('\n');
  10104. lineCount = textArr.length;
  10105. }
  10106. attrs.lineCount = lineCount;
  10107. attrs.textArr = textArr;
  10108. }
  10109. this.set('attrs', attrs);
  10110. };
  10111. _proto._getTextHeight = function _getTextHeight() {
  10112. var attrs = this._attrs.attrs;
  10113. if (attrs.height) {
  10114. return attrs.height;
  10115. }
  10116. var lineCount = attrs.lineCount;
  10117. var fontSize = attrs.fontSize * 1;
  10118. if (lineCount > 1) {
  10119. var spaceingY = this._getSpaceingY();
  10120. return fontSize * lineCount + spaceingY * (lineCount - 1);
  10121. }
  10122. return fontSize;
  10123. };
  10124. _proto._getSpaceingY = function _getSpaceingY() {
  10125. var attrs = this._attrs.attrs;
  10126. var lineHeight = attrs.lineHeight;
  10127. var fontSize = attrs.fontSize * 1;
  10128. return lineHeight ? lineHeight - fontSize : fontSize * 0.14;
  10129. };
  10130. _proto.drawInner = function drawInner(context) {
  10131. var self = this;
  10132. var attrs = self._attrs.attrs;
  10133. var text = attrs.text;
  10134. var x = attrs.x;
  10135. var y = attrs.y;
  10136. if (Util.isNil(text) || isNaN(x) || isNaN(y)) {
  10137. // text will be 0
  10138. return;
  10139. }
  10140. var textArr = attrs.textArr;
  10141. var fontSize = attrs.fontSize * 1;
  10142. var spaceingY = self._getSpaceingY();
  10143. if (attrs.rotate) {
  10144. // do rotation
  10145. context.translate(x, y);
  10146. context.rotate(attrs.rotate);
  10147. x = 0;
  10148. y = 0;
  10149. }
  10150. var textBaseline = attrs.textBaseline;
  10151. var height;
  10152. if (textArr) {
  10153. height = self._getTextHeight();
  10154. }
  10155. var subY; // context.beginPath();
  10156. if (self.hasFill()) {
  10157. var fillOpacity = attrs.fillOpacity;
  10158. if (!Util.isNil(fillOpacity) && fillOpacity !== 1) {
  10159. context.globalAlpha = fillOpacity;
  10160. }
  10161. if (textArr) {
  10162. for (var i = 0, len = textArr.length; i < len; i++) {
  10163. var subText = textArr[i];
  10164. subY = y + i * (spaceingY + fontSize) - height + fontSize; // bottom;
  10165. if (textBaseline === 'middle') {
  10166. subY += height - fontSize - (height - fontSize) / 2;
  10167. }
  10168. if (textBaseline === 'top') {
  10169. subY += height - fontSize;
  10170. }
  10171. context.fillText(subText, x, subY);
  10172. }
  10173. } else {
  10174. context.fillText(text, x, y);
  10175. }
  10176. }
  10177. if (self.hasStroke()) {
  10178. if (textArr) {
  10179. for (var _i = 0, _len = textArr.length; _i < _len; _i++) {
  10180. var _subText = textArr[_i];
  10181. subY = y + _i * (spaceingY + fontSize) - height + fontSize; // bottom;
  10182. if (textBaseline === 'middle') {
  10183. subY += height - fontSize - (height - fontSize) / 2;
  10184. }
  10185. if (textBaseline === 'top') {
  10186. subY += height - fontSize;
  10187. }
  10188. context.strokeText(_subText, x, subY);
  10189. }
  10190. } else {
  10191. context.strokeText(text, x, y);
  10192. }
  10193. }
  10194. };
  10195. _proto.calculateBox = function calculateBox() {
  10196. var self = this;
  10197. var attrs = self._attrs.attrs;
  10198. var x = attrs.x,
  10199. y = attrs.y,
  10200. textAlign = attrs.textAlign,
  10201. textBaseline = attrs.textBaseline;
  10202. var width = self._getTextWidth(); // attrs.width
  10203. if (!width) {
  10204. return {
  10205. minX: x,
  10206. minY: y,
  10207. maxX: x,
  10208. maxY: y
  10209. };
  10210. }
  10211. var height = self._getTextHeight(); // attrs.height
  10212. if (attrs.rotate) {
  10213. var rotatedBox = RectUtil.calcRotatedBox({
  10214. width: width,
  10215. height: height,
  10216. rotate: attrs.rotate
  10217. });
  10218. width = rotatedBox.width;
  10219. height = rotatedBox.height;
  10220. }
  10221. var point = {
  10222. x: x,
  10223. y: y - height
  10224. }; // default textAlign: start, textBaseline: bottom
  10225. if (textAlign) {
  10226. if (textAlign === 'end' || textAlign === 'right') {
  10227. point.x -= width;
  10228. } else if (textAlign === 'center') {
  10229. point.x -= width / 2;
  10230. }
  10231. }
  10232. if (textBaseline) {
  10233. if (textBaseline === 'top') {
  10234. point.y += height;
  10235. } else if (textBaseline === 'middle') {
  10236. point.y += height / 2;
  10237. }
  10238. }
  10239. return {
  10240. minX: point.x,
  10241. minY: point.y,
  10242. maxX: point.x + width,
  10243. maxY: point.y + height
  10244. };
  10245. };
  10246. _proto._getTextWidth = function _getTextWidth() {
  10247. var attrs = this._attrs.attrs;
  10248. if (attrs.width) {
  10249. return attrs.width;
  10250. }
  10251. var text = attrs.text;
  10252. var context = this.get('context');
  10253. if (Util.isNil(text)) return undefined;
  10254. var font = attrs.font;
  10255. var textArr = attrs.textArr;
  10256. var key = text + '' + font;
  10257. if (textWidthCache[key]) {
  10258. return textWidthCache[key];
  10259. }
  10260. var width = 0;
  10261. if (textArr) {
  10262. for (var i = 0, length = textArr.length; i < length; i++) {
  10263. var subText = textArr[i];
  10264. width = Math.max(width, Util.measureText(subText, font, context).width);
  10265. }
  10266. } else {
  10267. width = Util.measureText(text, font, context).width;
  10268. }
  10269. if (textWidthCacheCounter > TEXT_CACHE_MAX) {
  10270. textWidthCacheCounter = 0;
  10271. textWidthCache = {};
  10272. }
  10273. textWidthCacheCounter++;
  10274. textWidthCache[key] = width;
  10275. return width;
  10276. };
  10277. return Text;
  10278. }(Shape);
  10279. Shape.Text = Text;
  10280. module.exports = Text;
  10281. /***/ }),
  10282. /* 188 */
  10283. /***/ (function(module, exports, __webpack_require__) {
  10284. "use strict";
  10285. var Rect = {
  10286. calcRotatedBox: function calcRotatedBox(_ref) {
  10287. var width = _ref.width,
  10288. height = _ref.height,
  10289. rotate = _ref.rotate;
  10290. var absRotate = Math.abs(rotate);
  10291. return {
  10292. width: Math.abs(width * Math.cos(absRotate) + height * Math.sin(absRotate)),
  10293. height: Math.abs(height * Math.cos(absRotate) + width * Math.sin(absRotate))
  10294. };
  10295. }
  10296. };
  10297. module.exports = Rect;
  10298. /***/ }),
  10299. /* 189 */
  10300. /***/ (function(module, exports, __webpack_require__) {
  10301. "use strict";
  10302. var _interopRequireDefault = __webpack_require__(1);
  10303. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  10304. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  10305. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  10306. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  10307. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  10308. var Shape = __webpack_require__(10);
  10309. var Custom = /*#__PURE__*/function (_Shape) {
  10310. (0, _inheritsLoose2["default"])(Custom, _Shape);
  10311. var _super = _createSuper(Custom);
  10312. function Custom() {
  10313. return _Shape.apply(this, arguments) || this;
  10314. }
  10315. var _proto = Custom.prototype;
  10316. _proto._initProperties = function _initProperties() {
  10317. _Shape.prototype._initProperties.call(this);
  10318. this._attrs.canFill = true;
  10319. this._attrs.canStroke = true;
  10320. this._attrs.createPath = null;
  10321. this._attrs.type = 'custom';
  10322. };
  10323. _proto.createPath = function createPath(context) {
  10324. var createPath = this.get('createPath');
  10325. createPath && createPath.call(this, context);
  10326. };
  10327. _proto.calculateBox = function calculateBox() {
  10328. var calculateBox = this.get('calculateBox');
  10329. return calculateBox && calculateBox.call(this);
  10330. };
  10331. return Custom;
  10332. }(Shape);
  10333. Shape.Custom = Custom;
  10334. module.exports = Custom;
  10335. /***/ }),
  10336. /* 190 */
  10337. /***/ (function(module, exports, __webpack_require__) {
  10338. "use strict";
  10339. var _interopRequireDefault = __webpack_require__(1);
  10340. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  10341. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  10342. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  10343. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  10344. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  10345. var Path = __webpack_require__(72);
  10346. var Geom = __webpack_require__(17);
  10347. __webpack_require__(68);
  10348. var Line = /*#__PURE__*/function (_Path) {
  10349. (0, _inheritsLoose2["default"])(Line, _Path);
  10350. var _super = _createSuper(Line);
  10351. function Line() {
  10352. return _Path.apply(this, arguments) || this;
  10353. }
  10354. var _proto = Line.prototype;
  10355. _proto.getDefaultCfg = function getDefaultCfg() {
  10356. var cfg = _Path.prototype.getDefaultCfg.call(this);
  10357. cfg.type = 'line';
  10358. cfg.sortable = true;
  10359. return cfg;
  10360. };
  10361. return Line;
  10362. }(Path);
  10363. Geom.Line = Line;
  10364. module.exports = Line;
  10365. /***/ }),
  10366. /* 191 */
  10367. /***/ (function(module, exports, __webpack_require__) {
  10368. "use strict";
  10369. var _interopRequireDefault = __webpack_require__(1);
  10370. var _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(22));
  10371. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  10372. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  10373. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  10374. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  10375. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  10376. var Geom = __webpack_require__(17);
  10377. var Util = __webpack_require__(0);
  10378. var SizeMixin = __webpack_require__(73);
  10379. __webpack_require__(192);
  10380. var Interval = /*#__PURE__*/function (_Geom) {
  10381. (0, _inheritsLoose2["default"])(Interval, _Geom);
  10382. var _super = _createSuper(Interval);
  10383. var _proto = Interval.prototype;
  10384. _proto.getDefaultCfg = function getDefaultCfg() {
  10385. var cfg = _Geom.prototype.getDefaultCfg.call(this);
  10386. cfg.type = 'interval';
  10387. cfg.shapeType = 'interval';
  10388. cfg.generatePoints = true;
  10389. return cfg;
  10390. };
  10391. function Interval(cfg) {
  10392. var _this;
  10393. _this = _Geom.call(this, cfg) || this;
  10394. Util.mix((0, _assertThisInitialized2["default"])(_this), SizeMixin);
  10395. return _this;
  10396. }
  10397. _proto.init = function init() {
  10398. _Geom.prototype.init.call(this); // 绑定事件
  10399. this.initEvent();
  10400. };
  10401. _proto.createShapePointsCfg = function createShapePointsCfg(obj) {
  10402. var cfg = _Geom.prototype.createShapePointsCfg.call(this, obj);
  10403. cfg.size = this.getNormalizedSize(obj);
  10404. return cfg;
  10405. };
  10406. _proto.clearInner = function clearInner() {
  10407. _Geom.prototype.clearInner.call(this);
  10408. this.set('defaultSize', null);
  10409. };
  10410. return Interval;
  10411. }(Geom);
  10412. Geom.Interval = Interval;
  10413. module.exports = Interval;
  10414. /***/ }),
  10415. /* 192 */
  10416. /***/ (function(module, exports, __webpack_require__) {
  10417. "use strict";
  10418. var Util = __webpack_require__(0);
  10419. var Shape = __webpack_require__(19);
  10420. var Vector2 = __webpack_require__(13);
  10421. var Global = __webpack_require__(6);
  10422. function getRectPoints(cfg) {
  10423. var x = cfg.x,
  10424. y = cfg.y,
  10425. y0 = cfg.y0,
  10426. size = cfg.size;
  10427. var ymin = y0;
  10428. var ymax = y;
  10429. if (Util.isArray(y)) {
  10430. ymax = y[1];
  10431. ymin = y[0];
  10432. }
  10433. var xmin;
  10434. var xmax;
  10435. if (Util.isArray(x)) {
  10436. xmin = x[0];
  10437. xmax = x[1];
  10438. } else {
  10439. xmin = x - size / 2;
  10440. xmax = x + size / 2;
  10441. }
  10442. return [{
  10443. x: xmin,
  10444. y: ymin
  10445. }, {
  10446. x: xmin,
  10447. y: ymax
  10448. }, {
  10449. x: xmax,
  10450. y: ymax
  10451. }, {
  10452. x: xmax,
  10453. y: ymin
  10454. }];
  10455. }
  10456. function getRectRange(points) {
  10457. var xValues = [];
  10458. var yValues = [];
  10459. for (var i = 0, len = points.length; i < len; i++) {
  10460. var point = points[i];
  10461. xValues.push(point.x);
  10462. yValues.push(point.y);
  10463. }
  10464. var xMin = Math.min.apply(null, xValues);
  10465. var yMin = Math.min.apply(null, yValues);
  10466. var xMax = Math.max.apply(null, xValues);
  10467. var yMax = Math.max.apply(null, yValues);
  10468. return {
  10469. x: xMin,
  10470. y: yMin,
  10471. width: xMax - xMin,
  10472. height: yMax - yMin
  10473. };
  10474. }
  10475. function getMiddlePoint(a, b) {
  10476. var x = (a.x - b.x) / 2 + b.x;
  10477. var y = (a.y - b.y) / 2 + b.y;
  10478. return {
  10479. x: x,
  10480. y: y
  10481. };
  10482. }
  10483. var Interval = Shape.registerFactory('interval', {
  10484. defaultShapeType: 'rect',
  10485. getDefaultPoints: function getDefaultPoints(cfg) {
  10486. return getRectPoints(cfg);
  10487. }
  10488. });
  10489. Shape.registerShape('interval', 'rect', {
  10490. draw: function draw(cfg, container) {
  10491. var points = this.parsePoints(cfg.points);
  10492. var style = Util.mix({
  10493. fill: cfg.color
  10494. }, Global.shape.interval, cfg.style);
  10495. if (cfg.isInCircle) {
  10496. var newPoints = points.slice(0);
  10497. if (this._coord.transposed) {
  10498. newPoints = [points[0], points[3], points[2], points[1]];
  10499. }
  10500. var _cfg$center = cfg.center,
  10501. x = _cfg$center.x,
  10502. y = _cfg$center.y;
  10503. var v = [1, 0];
  10504. var v0 = [newPoints[0].x - x, newPoints[0].y - y];
  10505. var v1 = [newPoints[1].x - x, newPoints[1].y - y];
  10506. var v2 = [newPoints[2].x - x, newPoints[2].y - y];
  10507. var startAngle = Vector2.angleTo(v, v1);
  10508. var endAngle = Vector2.angleTo(v, v2);
  10509. var r0 = Vector2.length(v0);
  10510. var r = Vector2.length(v1);
  10511. if (startAngle >= 1.5 * Math.PI) {
  10512. startAngle = startAngle - 2 * Math.PI;
  10513. }
  10514. if (endAngle >= 1.5 * Math.PI) {
  10515. endAngle = endAngle - 2 * Math.PI;
  10516. }
  10517. return container.addShape('Sector', {
  10518. className: 'interval',
  10519. attrs: Util.mix({
  10520. x: x,
  10521. y: y,
  10522. r: r,
  10523. r0: r0,
  10524. startAngle: startAngle,
  10525. endAngle: endAngle
  10526. }, style)
  10527. });
  10528. }
  10529. var rectCfg = getRectRange(points);
  10530. return container.addShape('rect', {
  10531. className: 'interval',
  10532. attrs: Util.mix(rectCfg, style)
  10533. });
  10534. }
  10535. }); // 金字塔 和 漏斗图
  10536. ['pyramid', 'funnel'].forEach(function (shapeType) {
  10537. Shape.registerShape('interval', shapeType, {
  10538. getPoints: function getPoints(cfg) {
  10539. cfg.size = cfg.size * 2; // 漏斗图的 size 是柱状图的两倍
  10540. return getRectPoints(cfg);
  10541. },
  10542. draw: function draw(cfg, container) {
  10543. var points = this.parsePoints(cfg.points);
  10544. var nextPoints = this.parsePoints(cfg.nextPoints);
  10545. var polygonPoints = null;
  10546. if (nextPoints) {
  10547. polygonPoints = [points[0], points[1], nextPoints[1], nextPoints[0]];
  10548. } else {
  10549. polygonPoints = [points[0], points[1]]; // pyramid 顶部是三角形,所以取中心点就好了,funnel顶部是长方形
  10550. if (shapeType === 'pyramid') {
  10551. polygonPoints.push(getMiddlePoint(points[2], points[3]));
  10552. } else {
  10553. polygonPoints.push(points[2], points[3]);
  10554. }
  10555. }
  10556. var attrs = Util.mix({
  10557. fill: cfg.color,
  10558. points: polygonPoints
  10559. }, Global.shape.interval, cfg.style);
  10560. return container.addShape('polygon', {
  10561. className: 'interval',
  10562. attrs: attrs
  10563. });
  10564. }
  10565. });
  10566. });
  10567. module.exports = Interval;
  10568. /***/ }),
  10569. /* 193 */
  10570. /***/ (function(module, exports, __webpack_require__) {
  10571. "use strict";
  10572. module.exports = {
  10573. Stack: __webpack_require__(194),
  10574. Dodge: __webpack_require__(196),
  10575. Symmetric: __webpack_require__(198)
  10576. };
  10577. /***/ }),
  10578. /* 194 */
  10579. /***/ (function(module, exports, __webpack_require__) {
  10580. "use strict";
  10581. var Stack = __webpack_require__(195);
  10582. module.exports = Stack;
  10583. /***/ }),
  10584. /* 195 */
  10585. /***/ (function(module, exports, __webpack_require__) {
  10586. function _inheritsLoose(subClass, superClass) {
  10587. subClass.prototype = Object.create(superClass.prototype);
  10588. subClass.prototype.constructor = subClass;
  10589. subClass.__proto__ = superClass;
  10590. }
  10591. var isArray = __webpack_require__(34);
  10592. var isNil = __webpack_require__(35);
  10593. var Adjust = __webpack_require__(33);
  10594. var Stack = /*#__PURE__*/function (_Adjust) {
  10595. _inheritsLoose(Stack, _Adjust);
  10596. function Stack() {
  10597. return _Adjust.apply(this, arguments) || this;
  10598. }
  10599. var _proto = Stack.prototype;
  10600. _proto._initDefaultCfg = function _initDefaultCfg() {
  10601. this.xField = null; // 调整对应的 x 方向对应的字段名称
  10602. this.yField = null; // 调整对应的 y 方向对应的字段名称
  10603. };
  10604. _proto.processAdjust = function processAdjust(dataArray) {
  10605. this.processStack(dataArray);
  10606. };
  10607. _proto.processStack = function processStack(dataArray) {
  10608. var self = this;
  10609. var xField = self.xField;
  10610. var yField = self.yField;
  10611. var count = dataArray.length;
  10612. var stackCache = {
  10613. positive: {},
  10614. negative: {}
  10615. }; // 层叠顺序翻转
  10616. if (self.reverseOrder) {
  10617. dataArray = dataArray.slice(0).reverse();
  10618. }
  10619. for (var i = 0; i < count; i++) {
  10620. var data = dataArray[i];
  10621. for (var j = 0, len = data.length; j < len; j++) {
  10622. var item = data[j];
  10623. var x = item[xField] || 0;
  10624. var y = item[yField];
  10625. var xkey = x.toString();
  10626. y = isArray(y) ? y[1] : y;
  10627. if (!isNil(y)) {
  10628. var direction = y >= 0 ? 'positive' : 'negative';
  10629. if (!stackCache[direction][xkey]) {
  10630. stackCache[direction][xkey] = 0;
  10631. }
  10632. item[yField] = [stackCache[direction][xkey], y + stackCache[direction][xkey]];
  10633. stackCache[direction][xkey] += y;
  10634. }
  10635. }
  10636. }
  10637. };
  10638. return Stack;
  10639. }(Adjust);
  10640. Adjust.Stack = Stack;
  10641. module.exports = Stack;
  10642. /***/ }),
  10643. /* 196 */
  10644. /***/ (function(module, exports, __webpack_require__) {
  10645. "use strict";
  10646. var Dodge = __webpack_require__(197);
  10647. module.exports = Dodge;
  10648. /***/ }),
  10649. /* 197 */
  10650. /***/ (function(module, exports, __webpack_require__) {
  10651. function _inheritsLoose(subClass, superClass) {
  10652. subClass.prototype = Object.create(superClass.prototype);
  10653. subClass.prototype.constructor = subClass;
  10654. subClass.__proto__ = superClass;
  10655. }
  10656. var Adjust = __webpack_require__(33);
  10657. var each = __webpack_require__(15);
  10658. var MARGIN_RATIO = 1 / 2;
  10659. var DODGE_RATIO = 1 / 2;
  10660. var Dodge = /*#__PURE__*/function (_Adjust) {
  10661. _inheritsLoose(Dodge, _Adjust);
  10662. function Dodge() {
  10663. return _Adjust.apply(this, arguments) || this;
  10664. }
  10665. var _proto = Dodge.prototype;
  10666. _proto._initDefaultCfg = function _initDefaultCfg() {
  10667. /**
  10668. * 调整过程中,2个数据的间距
  10669. * @type {Number}
  10670. */
  10671. this.marginRatio = MARGIN_RATIO;
  10672. /**
  10673. * 调整占单位宽度的比例,例如:占2个分类间距的 1/2
  10674. * @type {Number}
  10675. */
  10676. this.dodgeRatio = DODGE_RATIO;
  10677. this.adjustNames = ['x', 'y']; // 调整的维度,默认,x,y都做调整
  10678. };
  10679. _proto.getDodgeOffset = function getDodgeOffset(range, index, count) {
  10680. var self = this;
  10681. var pre = range.pre;
  10682. var next = range.next;
  10683. var tickLength = next - pre;
  10684. var width = tickLength * self.dodgeRatio / count;
  10685. var margin = self.marginRatio * width;
  10686. var offset = 1 / 2 * (tickLength - count * width - (count - 1) * margin) + ((index + 1) * width + index * margin) - 1 / 2 * width - 1 / 2 * tickLength;
  10687. return (pre + next) / 2 + offset;
  10688. };
  10689. _proto.processAdjust = function processAdjust(dataArray) {
  10690. var self = this;
  10691. var count = dataArray.length;
  10692. var xField = self.xField;
  10693. each(dataArray, function (data, index) {
  10694. for (var i = 0, len = data.length; i < len; i++) {
  10695. var obj = data[i];
  10696. var value = obj[xField];
  10697. var range = {
  10698. pre: len === 1 ? value - 1 : value - 0.5,
  10699. next: len === 1 ? value + 1 : value + 0.5
  10700. };
  10701. var dodgeValue = self.getDodgeOffset(range, index, count);
  10702. obj[xField] = dodgeValue;
  10703. }
  10704. });
  10705. };
  10706. return Dodge;
  10707. }(Adjust);
  10708. Adjust.Dodge = Dodge;
  10709. module.exports = Dodge;
  10710. /***/ }),
  10711. /* 198 */
  10712. /***/ (function(module, exports, __webpack_require__) {
  10713. "use strict";
  10714. var Symmetric = __webpack_require__(199);
  10715. module.exports = Symmetric;
  10716. /***/ }),
  10717. /* 199 */
  10718. /***/ (function(module, exports, __webpack_require__) {
  10719. function _inheritsLoose(subClass, superClass) {
  10720. subClass.prototype = Object.create(superClass.prototype);
  10721. subClass.prototype.constructor = subClass;
  10722. subClass.__proto__ = superClass;
  10723. }
  10724. var each = __webpack_require__(15);
  10725. var maxBy = __webpack_require__(200);
  10726. var isArray = __webpack_require__(34);
  10727. var ArrayUtil = {
  10728. merge: __webpack_require__(202)
  10729. };
  10730. var Adjust = __webpack_require__(33);
  10731. var Symmetric = /*#__PURE__*/function (_Adjust) {
  10732. _inheritsLoose(Symmetric, _Adjust);
  10733. function Symmetric() {
  10734. return _Adjust.apply(this, arguments) || this;
  10735. }
  10736. var _proto = Symmetric.prototype;
  10737. _proto._initDefaultCfg = function _initDefaultCfg() {
  10738. this.xField = null; // 调整对应的 x 方向对应的字段名称
  10739. this.yField = null; // 调整对应的 y 方向对应的字段名称
  10740. this.cacheMax = null; // 缓存的最大值
  10741. this.adjustNames = ['y']; // Only support stack y
  10742. this.groupFields = null; // 参与分组的数据维度
  10743. }; // 获取最大的y值
  10744. _proto._getMax = function _getMax(dim) {
  10745. var self = this;
  10746. var mergeData = self.mergeData;
  10747. var maxRecord = maxBy(mergeData, function (obj) {
  10748. var value = obj[dim];
  10749. if (isArray(value)) {
  10750. return Math.max.apply(null, value);
  10751. }
  10752. return value;
  10753. });
  10754. var maxValue = maxRecord[dim];
  10755. var max = isArray(maxValue) ? Math.max.apply(null, maxValue) : maxValue;
  10756. return max;
  10757. }; // 获取每个字段最大的值
  10758. _proto._getXValuesMax = function _getXValuesMax() {
  10759. var self = this;
  10760. var yField = self.yField;
  10761. var xField = self.xField;
  10762. var cache = {};
  10763. var mergeData = self.mergeData;
  10764. each(mergeData, function (obj) {
  10765. var xValue = obj[xField];
  10766. var yValue = obj[yField];
  10767. var max = isArray(yValue) ? Math.max.apply(null, yValue) : yValue;
  10768. cache[xValue] = cache[xValue] || 0;
  10769. if (cache[xValue] < max) {
  10770. cache[xValue] = max;
  10771. }
  10772. });
  10773. return cache;
  10774. }; // 入口函数
  10775. _proto.processAdjust = function processAdjust(dataArray) {
  10776. var self = this;
  10777. var mergeData = ArrayUtil.merge(dataArray);
  10778. self.mergeData = mergeData;
  10779. self._processSymmetric(dataArray);
  10780. self.mergeData = null;
  10781. }; // 处理对称
  10782. _proto._processSymmetric = function _processSymmetric(dataArray) {
  10783. var self = this;
  10784. var xField = self.xField;
  10785. var yField = self.yField;
  10786. var max = self._getMax(yField);
  10787. var first = dataArray[0][0];
  10788. var cache;
  10789. if (first && isArray(first[yField])) {
  10790. cache = self._getXValuesMax();
  10791. }
  10792. each(dataArray, function (data) {
  10793. each(data, function (obj) {
  10794. var value = obj[yField];
  10795. var offset;
  10796. if (isArray(value)) {
  10797. var xValue = obj[xField];
  10798. var valueMax = cache[xValue];
  10799. offset = (max - valueMax) / 2;
  10800. var tmp = [];
  10801. /* eslint-disable no-loop-func */
  10802. each(value, function (subVal) {
  10803. // 多个字段
  10804. tmp.push(offset + subVal);
  10805. });
  10806. /* eslint-enable no-loop-func */
  10807. obj[yField] = tmp;
  10808. } else {
  10809. offset = (max - value) / 2;
  10810. obj[yField] = [offset, value + offset];
  10811. }
  10812. });
  10813. });
  10814. };
  10815. return Symmetric;
  10816. }(Adjust);
  10817. Adjust.Symmetric = Symmetric;
  10818. module.exports = Symmetric;
  10819. /***/ }),
  10820. /* 200 */
  10821. /***/ (function(module, exports, __webpack_require__) {
  10822. var isArray = __webpack_require__(34);
  10823. var isFunction = __webpack_require__(201);
  10824. var each = __webpack_require__(15);
  10825. /**
  10826. * @param {Array} arr The array to iterate over.
  10827. * @param {Function} [fn] The iteratee invoked per element.
  10828. * @return {*} Returns the maximum value.
  10829. * @example
  10830. *
  10831. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  10832. *
  10833. * maxBy(objects, function(o) { return o.n; });
  10834. * // => { 'n': 2 }
  10835. *
  10836. * maxBy(objects, 'n');
  10837. * // => { 'n': 2 }
  10838. */
  10839. var maxBy = function maxBy(arr, fn) {
  10840. if (!isArray(arr)) {
  10841. return undefined;
  10842. }
  10843. var max = arr[0];
  10844. var maxData = void 0;
  10845. if (isFunction(fn)) {
  10846. maxData = fn(arr[0]);
  10847. } else {
  10848. maxData = arr[0][fn];
  10849. }
  10850. var data = void 0;
  10851. each(arr, function (val) {
  10852. if (isFunction(fn)) {
  10853. data = fn(val);
  10854. } else {
  10855. data = val[fn];
  10856. }
  10857. if (data > maxData) {
  10858. max = val;
  10859. maxData = data;
  10860. }
  10861. });
  10862. return max;
  10863. };
  10864. module.exports = maxBy;
  10865. /***/ }),
  10866. /* 201 */
  10867. /***/ (function(module, exports, __webpack_require__) {
  10868. /**
  10869. * 是否为函数
  10870. * @param {*} fn 对象
  10871. * @return {Boolean} 是否函数
  10872. */
  10873. var isType = __webpack_require__(27);
  10874. var isFunction = function isFunction(value) {
  10875. return isType(value, 'Function');
  10876. };
  10877. module.exports = isFunction;
  10878. /***/ }),
  10879. /* 202 */
  10880. /***/ (function(module, exports) {
  10881. var merge = function merge(dataArray) {
  10882. var rst = [];
  10883. for (var i = 0; i < dataArray.length; i++) {
  10884. rst = rst.concat(dataArray[i]);
  10885. }
  10886. return rst;
  10887. };
  10888. module.exports = merge;
  10889. /***/ }),
  10890. /* 203 */
  10891. /***/ (function(module, exports, __webpack_require__) {
  10892. "use strict";
  10893. var _interopRequireDefault = __webpack_require__(1);
  10894. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  10895. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  10896. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  10897. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  10898. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  10899. var Base = __webpack_require__(43);
  10900. var Vector2 = __webpack_require__(13);
  10901. var Matrix = __webpack_require__(31);
  10902. var Polar = /*#__PURE__*/function (_Base) {
  10903. (0, _inheritsLoose2["default"])(Polar, _Base);
  10904. var _super = _createSuper(Polar);
  10905. function Polar() {
  10906. return _Base.apply(this, arguments) || this;
  10907. }
  10908. var _proto = Polar.prototype;
  10909. _proto._initDefaultCfg = function _initDefaultCfg() {
  10910. this.type = 'polar';
  10911. this.startAngle = -Math.PI / 2;
  10912. this.endAngle = Math.PI * 3 / 2;
  10913. this.inner = 0;
  10914. this.innerRadius = 0; // alias
  10915. this.isPolar = true;
  10916. this.transposed = false;
  10917. this.center = null;
  10918. this.radius = null; // relative, 0 ~ 1
  10919. };
  10920. _proto.init = function init(start, end) {
  10921. _Base.prototype.init.call(this, start, end);
  10922. var self = this;
  10923. var inner = self.inner || self.innerRadius;
  10924. var width = Math.abs(end.x - start.x);
  10925. var height = Math.abs(end.y - start.y);
  10926. var maxRadius;
  10927. var center;
  10928. if (self.startAngle === -Math.PI && self.endAngle === 0) {
  10929. maxRadius = Math.min(width / 2, height);
  10930. center = {
  10931. x: (start.x + end.x) / 2,
  10932. y: start.y
  10933. };
  10934. } else {
  10935. maxRadius = Math.min(width, height) / 2;
  10936. center = {
  10937. x: (start.x + end.x) / 2,
  10938. y: (start.y + end.y) / 2
  10939. };
  10940. }
  10941. var radius = self.radius;
  10942. if (radius > 0 && radius <= 1) {
  10943. maxRadius = maxRadius * radius;
  10944. }
  10945. this.x = {
  10946. start: self.startAngle,
  10947. end: self.endAngle
  10948. };
  10949. this.y = {
  10950. start: maxRadius * inner,
  10951. end: maxRadius
  10952. };
  10953. this.center = center;
  10954. this.circleRadius = maxRadius; // the radius value in px
  10955. };
  10956. _proto._convertPoint = function _convertPoint(point) {
  10957. var self = this;
  10958. var center = self.center;
  10959. var transposed = self.transposed;
  10960. var xDim = transposed ? 'y' : 'x';
  10961. var yDim = transposed ? 'x' : 'y';
  10962. var x = self.x;
  10963. var y = self.y;
  10964. var angle = x.start + (x.end - x.start) * point[xDim];
  10965. var radius = y.start + (y.end - y.start) * point[yDim];
  10966. return {
  10967. x: center.x + Math.cos(angle) * radius,
  10968. y: center.y + Math.sin(angle) * radius
  10969. };
  10970. };
  10971. _proto._invertPoint = function _invertPoint(point) {
  10972. var self = this;
  10973. var center = self.center,
  10974. transposed = self.transposed,
  10975. x = self.x,
  10976. y = self.y;
  10977. var xDim = transposed ? 'y' : 'x';
  10978. var yDim = transposed ? 'x' : 'y';
  10979. var m = [1, 0, 0, 1, 0, 0];
  10980. Matrix.rotate(m, m, x.start);
  10981. var startV = [1, 0];
  10982. Vector2.transformMat2d(startV, startV, m);
  10983. startV = [startV[0], startV[1]];
  10984. var pointV = [point.x - center.x, point.y - center.y];
  10985. if (Vector2.zero(pointV)) {
  10986. return {
  10987. x: 0,
  10988. y: 0
  10989. };
  10990. }
  10991. var theta = Vector2.angleTo(startV, pointV, x.end < x.start);
  10992. if (Math.abs(theta - Math.PI * 2) < 0.001) {
  10993. theta = 0;
  10994. }
  10995. var l = Vector2.length(pointV);
  10996. var percentX = theta / (x.end - x.start);
  10997. percentX = x.end - x.start > 0 ? percentX : -percentX;
  10998. var percentY = (l - y.start) / (y.end - y.start);
  10999. var rst = {};
  11000. rst[xDim] = percentX;
  11001. rst[yDim] = percentY;
  11002. return rst;
  11003. };
  11004. return Polar;
  11005. }(Base);
  11006. Base.Polar = Polar;
  11007. module.exports = Polar;
  11008. /***/ }),
  11009. /* 204 */
  11010. /***/ (function(module, exports, __webpack_require__) {
  11011. /**
  11012. * @fileOverview 提取公共代码到util方法
  11013. * @author dxq613@gmail.com
  11014. */
  11015. var isString = __webpack_require__(48);
  11016. var isDate = __webpack_require__(222);
  11017. module.exports = {
  11018. toTimeStamp: function toTimeStamp(value) {
  11019. if (isString(value)) {
  11020. if (value.indexOf('T') > 0) {
  11021. value = new Date(value).getTime();
  11022. } else {
  11023. value = new Date(value.replace(/-/ig, '/')).getTime();
  11024. }
  11025. }
  11026. if (isDate(value)) {
  11027. value = value.getTime();
  11028. }
  11029. return value;
  11030. }
  11031. };
  11032. /***/ }),
  11033. /* 205 */
  11034. /***/ (function(module, exports, __webpack_require__) {
  11035. "use strict";
  11036. var Util = __webpack_require__(0);
  11037. var _require = __webpack_require__(16),
  11038. Group = _require.Group;
  11039. var Marker = __webpack_require__(76);
  11040. var MARKER_RADIUS = 3;
  11041. var List = /*#__PURE__*/function () {
  11042. var _proto = List.prototype;
  11043. _proto.getDefaultCfg = function getDefaultCfg() {
  11044. return {
  11045. showTitle: false,
  11046. /**
  11047. * title string
  11048. * @type {?String}
  11049. */
  11050. title: null,
  11051. /**
  11052. * items array
  11053. * @type {?Array}
  11054. */
  11055. items: null,
  11056. /**
  11057. * offset between title and items
  11058. * @type {Number}
  11059. */
  11060. titleGap: 12,
  11061. /**
  11062. * offset between each item
  11063. * @type {Number}
  11064. */
  11065. itemGap: 10,
  11066. /**
  11067. * the offset between each item in vertical direaction
  11068. * @type {Number}
  11069. */
  11070. itemMarginBottom: 12,
  11071. /**
  11072. * the formatter for item text
  11073. * @type {[type]}
  11074. */
  11075. itemFormatter: null,
  11076. itemWidth: null,
  11077. /**
  11078. * offset between marker and text
  11079. * @type {Number}
  11080. */
  11081. wordSpace: 6,
  11082. x: 0,
  11083. y: 0,
  11084. layout: 'horizontal',
  11085. /**
  11086. * the join string of `name` and `value`
  11087. * @type {String}
  11088. */
  11089. joinString: ': '
  11090. };
  11091. };
  11092. function List(cfg) {
  11093. Util.deepMix(this, this.getDefaultCfg(), cfg);
  11094. this._init();
  11095. this._renderTitle();
  11096. this._renderItems();
  11097. }
  11098. _proto._init = function _init() {
  11099. var container = new Group({
  11100. zIndex: this.zIndex || 0
  11101. });
  11102. this.container = container;
  11103. var wrapper = container.addGroup();
  11104. this.wrapper = wrapper;
  11105. var itemsGroup = wrapper.addGroup({
  11106. className: 'itemsGroup'
  11107. });
  11108. this.itemsGroup = itemsGroup;
  11109. if (this.parent) {
  11110. this.parent.add(container);
  11111. }
  11112. };
  11113. _proto._renderTitle = function _renderTitle(title) {
  11114. title = title || this.title;
  11115. var titleShape = this.titleShape;
  11116. var titleHeight = 0;
  11117. if (this.showTitle && title) {
  11118. if (titleShape && !titleShape.get('destroyed')) {
  11119. titleShape.attr('text', title);
  11120. } else {
  11121. var wrapper = this.wrapper,
  11122. titleStyle = this.titleStyle;
  11123. titleShape = wrapper.addShape('text', {
  11124. className: 'title',
  11125. attrs: Util.mix({
  11126. x: 0,
  11127. y: 0,
  11128. text: title
  11129. }, titleStyle)
  11130. });
  11131. this.titleShape = titleShape;
  11132. }
  11133. titleHeight = titleShape.getBBox().height + this.titleGap;
  11134. }
  11135. this._titleHeight = titleHeight;
  11136. };
  11137. _proto._renderItems = function _renderItems(items) {
  11138. var self = this;
  11139. items = items || self.items;
  11140. if (!items) {
  11141. return;
  11142. }
  11143. if (self.reversed) {
  11144. items.reverse();
  11145. }
  11146. Util.each(items, function (item, index) {
  11147. self._addItem(item, index);
  11148. });
  11149. if (items.length > 1) {
  11150. this._adjustItems();
  11151. }
  11152. this._renderBackground();
  11153. };
  11154. _proto._renderBackground = function _renderBackground() {
  11155. var background = this.background;
  11156. if (background) {
  11157. var container = this.container;
  11158. var wrapper = this.wrapper;
  11159. var _wrapper$getBBox = wrapper.getBBox(),
  11160. minX = _wrapper$getBBox.minX,
  11161. minY = _wrapper$getBBox.minY,
  11162. width = _wrapper$getBBox.width,
  11163. height = _wrapper$getBBox.height;
  11164. var padding = background.padding || [0, 0, 0, 0];
  11165. padding = Util.parsePadding(padding);
  11166. var attrs = Util.mix({
  11167. x: minX - padding[3],
  11168. y: minY - padding[0],
  11169. width: width + padding[1] + padding[3],
  11170. height: height + padding[0] + padding[2]
  11171. }, background);
  11172. var backShape = this.backShape;
  11173. if (backShape) {
  11174. backShape.attr(attrs);
  11175. } else {
  11176. backShape = container.addShape('Rect', {
  11177. zIndex: -1,
  11178. attrs: attrs
  11179. });
  11180. }
  11181. this.backShape = backShape;
  11182. container.sort();
  11183. }
  11184. };
  11185. _proto._addItem = function _addItem(item) {
  11186. var itemsGroup = this.itemsGroup;
  11187. var itemGroup = itemsGroup.addGroup({
  11188. name: item.name,
  11189. value: item.value,
  11190. dataValue: item.dataValue,
  11191. checked: item.checked
  11192. });
  11193. var unCheckStyle = this.unCheckStyle,
  11194. unCheckColor = this.unCheckColor,
  11195. nameStyle = this.nameStyle,
  11196. valueStyle = this.valueStyle,
  11197. wordSpace = this.wordSpace;
  11198. var marker = item.marker,
  11199. value = item.value;
  11200. var startX = 0;
  11201. if (unCheckColor) {
  11202. unCheckStyle.fill = unCheckColor;
  11203. }
  11204. if (marker) {
  11205. var radius = marker.radius || MARKER_RADIUS;
  11206. var markerAttrs = Util.mix({
  11207. x: radius,
  11208. y: this._titleHeight
  11209. }, marker);
  11210. if (item.checked === false) {
  11211. Util.mix(markerAttrs, unCheckStyle);
  11212. }
  11213. var markerShape = new Marker({
  11214. className: 'item-marker',
  11215. attrs: markerAttrs
  11216. });
  11217. itemGroup.add(markerShape);
  11218. startX += markerShape.getBBox().width + wordSpace;
  11219. }
  11220. var nameText;
  11221. var name = item.name;
  11222. if (name) {
  11223. var joinString = this.joinString || '';
  11224. name = value ? name + joinString : name;
  11225. nameText = itemGroup.addShape('text', {
  11226. className: 'name',
  11227. attrs: Util.mix({
  11228. x: startX,
  11229. y: this._titleHeight,
  11230. text: this._formatItemValue(name)
  11231. }, nameStyle, item.checked === false ? unCheckStyle : null)
  11232. });
  11233. }
  11234. if (value) {
  11235. var valueX = startX;
  11236. if (nameText) {
  11237. valueX += nameText.getBBox().width;
  11238. }
  11239. itemGroup.addShape('text', {
  11240. className: 'value',
  11241. attrs: Util.mix({
  11242. x: valueX,
  11243. y: this._titleHeight,
  11244. text: value
  11245. }, valueStyle, item.checked === false ? unCheckStyle : null)
  11246. });
  11247. }
  11248. return itemGroup;
  11249. };
  11250. _proto._formatItemValue = function _formatItemValue(value) {
  11251. var formatter = this.itemFormatter;
  11252. if (formatter) {
  11253. value = formatter.call(this, value);
  11254. }
  11255. return value;
  11256. };
  11257. _proto._getMaxItemWidth = function _getMaxItemWidth() {
  11258. var width;
  11259. var itemWidth = this.itemWidth;
  11260. if (Util.isNumber(itemWidth) || Util.isNil(itemWidth)) {
  11261. return itemWidth;
  11262. }
  11263. if (itemWidth === 'auto') {
  11264. var itemsGroup = this.itemsGroup;
  11265. var children = itemsGroup.get('children');
  11266. var count = children.length;
  11267. var maxItemWidth = 0;
  11268. for (var i = 0; i < count; i++) {
  11269. var _children$i$getBBox = children[i].getBBox(),
  11270. _width = _children$i$getBBox.width;
  11271. maxItemWidth = Math.max(maxItemWidth, _width);
  11272. }
  11273. var maxLength = this.maxLength;
  11274. var itemGap = this.itemGap;
  11275. var twoAvgWidth = (maxLength - itemGap) / 2;
  11276. var threeAvgWidth = (maxLength - itemGap * 2) / 3;
  11277. if (count === 2) {
  11278. width = Math.max(maxItemWidth, twoAvgWidth);
  11279. } else {
  11280. // 1. max <= 3Avg, 3Avg
  11281. // 2. 3Avg < max && max < 2avg, 2avg
  11282. // 3. max > 2avg, max, one column
  11283. if (maxItemWidth <= threeAvgWidth) {
  11284. width = threeAvgWidth;
  11285. } else if (maxItemWidth <= twoAvgWidth) {
  11286. width = twoAvgWidth;
  11287. } else {
  11288. width = maxItemWidth;
  11289. }
  11290. }
  11291. return width;
  11292. }
  11293. };
  11294. _proto._adjustHorizontal = function _adjustHorizontal() {
  11295. var maxLength = this.maxLength,
  11296. itemsGroup = this.itemsGroup;
  11297. var children = itemsGroup.get('children');
  11298. var itemGap = this.itemGap,
  11299. itemMarginBottom = this.itemMarginBottom;
  11300. var titleHeight = this._titleHeight;
  11301. var row = 0;
  11302. var rowWidth = 0;
  11303. var width;
  11304. var height;
  11305. var itemWidth = this._getMaxItemWidth();
  11306. var legendHitBoxes = [];
  11307. for (var i = 0, len = children.length; i < len; i++) {
  11308. var child = children[i];
  11309. var box = child.getBBox();
  11310. var childHeight = box.height;
  11311. var childWidth = box.width;
  11312. width = itemWidth || childWidth;
  11313. height = childHeight + itemMarginBottom;
  11314. if (width - (maxLength - rowWidth) > 0.0001) {
  11315. row++;
  11316. rowWidth = 0;
  11317. }
  11318. child.moveTo(rowWidth, row * height);
  11319. legendHitBoxes.push({
  11320. x: rowWidth,
  11321. y: row * height + titleHeight - childHeight / 2,
  11322. width: childWidth * 1.375,
  11323. height: childHeight * 1.375
  11324. });
  11325. rowWidth += width + itemGap;
  11326. }
  11327. this.legendHitBoxes = legendHitBoxes;
  11328. return;
  11329. };
  11330. _proto._adjustVertical = function _adjustVertical() {
  11331. var maxLength = this.maxLength,
  11332. itemsGroup = this.itemsGroup;
  11333. var itemGap = this.itemGap,
  11334. itemMarginBottom = this.itemMarginBottom,
  11335. itemWidth = this.itemWidth;
  11336. var titleHeight = this._titleHeight;
  11337. var children = itemsGroup.get('children');
  11338. var colHeight = 0;
  11339. var width;
  11340. var height;
  11341. var maxItemWidth = 0;
  11342. var totalWidth = 0;
  11343. var legendHitBoxes = [];
  11344. for (var i = 0, length = children.length; i < length; i++) {
  11345. var child = children[i];
  11346. var bbox = child.getBBox();
  11347. width = bbox.width;
  11348. height = bbox.height;
  11349. if (Util.isNumber(itemWidth)) {
  11350. maxItemWidth = itemWidth + itemGap;
  11351. } else if (width > maxItemWidth) {
  11352. maxItemWidth = width + itemGap;
  11353. }
  11354. if (maxLength - colHeight < height) {
  11355. colHeight = 0;
  11356. totalWidth += maxItemWidth;
  11357. child.moveTo(totalWidth, 0);
  11358. legendHitBoxes.push({
  11359. x: totalWidth,
  11360. y: titleHeight - height / 2,
  11361. width: width * 1.375,
  11362. height: height * 1.375
  11363. });
  11364. } else {
  11365. child.moveTo(totalWidth, colHeight);
  11366. legendHitBoxes.push({
  11367. x: totalWidth,
  11368. y: colHeight - height / 2 + titleHeight,
  11369. width: width * 1.375,
  11370. height: height * 1.375
  11371. });
  11372. }
  11373. colHeight += height + itemMarginBottom;
  11374. }
  11375. this.legendHitBoxes = legendHitBoxes;
  11376. return;
  11377. };
  11378. _proto._adjustItems = function _adjustItems() {
  11379. var layout = this.layout;
  11380. if (layout === 'horizontal') {
  11381. this._adjustHorizontal();
  11382. } else {
  11383. this._adjustVertical();
  11384. }
  11385. };
  11386. _proto.moveTo = function moveTo(x, y) {
  11387. this.x = x;
  11388. this.y = y;
  11389. var container = this.container;
  11390. container && container.moveTo(x, y);
  11391. return this;
  11392. };
  11393. _proto.setItems = function setItems(items) {
  11394. this.clearItems();
  11395. this._renderItems(items);
  11396. };
  11397. _proto.setTitle = function setTitle(title) {
  11398. this._renderTitle(title);
  11399. };
  11400. _proto.clearItems = function clearItems() {
  11401. var itemsGroup = this.itemsGroup;
  11402. itemsGroup.clear();
  11403. };
  11404. _proto.getWidth = function getWidth() {
  11405. var container = this.container;
  11406. var bbox = container.getBBox();
  11407. return bbox.width;
  11408. };
  11409. _proto.getHeight = function getHeight() {
  11410. var container = this.container;
  11411. var bbox = container.getBBox();
  11412. return bbox.height;
  11413. };
  11414. _proto.show = function show() {
  11415. var container = this.container;
  11416. container.show();
  11417. };
  11418. _proto.hide = function hide() {
  11419. var container = this.container;
  11420. container.hide();
  11421. };
  11422. _proto.clear = function clear() {
  11423. var container = this.container;
  11424. container.clear();
  11425. container.remove(true);
  11426. };
  11427. return List;
  11428. }();
  11429. module.exports = List;
  11430. /***/ }),
  11431. /* 206 */
  11432. /***/ (function(module, exports, __webpack_require__) {
  11433. "use strict";
  11434. /**
  11435. * Animate configuration and register
  11436. * @author sima.zhang1990@gmail.com
  11437. */
  11438. var Util = __webpack_require__(0);
  11439. var defaultAnimationCfg = {
  11440. appear: {
  11441. duration: 450,
  11442. easing: 'quadraticOut'
  11443. },
  11444. // 'appear' animation options
  11445. update: {
  11446. duration: 300,
  11447. easing: 'quadraticOut'
  11448. },
  11449. // 'update' animation options
  11450. enter: {
  11451. duration: 300,
  11452. easing: 'quadraticOut'
  11453. },
  11454. // 'enter' animation options
  11455. leave: {
  11456. duration: 350,
  11457. easing: 'quadraticIn'
  11458. } // 'leave' animation options
  11459. };
  11460. var Animate = {
  11461. defaultCfg: {},
  11462. Action: {},
  11463. getAnimation: function getAnimation(geomType, coord, animationType) {
  11464. var geomAnimateCfg = this.defaultCfg[geomType];
  11465. if (geomAnimateCfg) {
  11466. var animation = geomAnimateCfg[animationType];
  11467. if (Util.isFunction(animation)) {
  11468. return animation(coord);
  11469. }
  11470. }
  11471. return false;
  11472. },
  11473. getAnimateCfg: function getAnimateCfg(geomType, animationType) {
  11474. var defaultCfg = defaultAnimationCfg[animationType];
  11475. var geomConfig = this.defaultCfg[geomType];
  11476. if (geomConfig && geomConfig.cfg && geomConfig.cfg[animationType]) {
  11477. return Util.deepMix({}, defaultCfg, geomConfig.cfg[animationType]);
  11478. }
  11479. return defaultCfg;
  11480. },
  11481. registerAnimation: function registerAnimation(animationName, animationFun) {
  11482. if (!this.Action) {
  11483. this.Action = {};
  11484. }
  11485. this.Action[animationName] = animationFun;
  11486. }
  11487. };
  11488. module.exports = Animate;
  11489. /***/ }),
  11490. /* 207 */
  11491. /***/ (function(module, exports, __webpack_require__) {
  11492. "use strict";
  11493. /**
  11494. * Utility
  11495. * @author sima.zhang1990@gmail.com
  11496. */
  11497. var _require = __webpack_require__(16),
  11498. Matrix = _require.Matrix;
  11499. var Util = __webpack_require__(0);
  11500. var Helpers = {
  11501. getCoordInfo: function getCoordInfo(coord) {
  11502. var start = coord.start;
  11503. var end = coord.end;
  11504. return {
  11505. start: start,
  11506. end: end,
  11507. width: end.x - start.x,
  11508. height: Math.abs(end.y - start.y)
  11509. };
  11510. },
  11511. getScaledMatrix: function getScaledMatrix(shape, v, direct) {
  11512. var scaledMatrix;
  11513. shape.apply(v);
  11514. var x = v[0];
  11515. var y = v[1];
  11516. if (direct === 'x') {
  11517. shape.transform([['t', x, y], ['s', 0.01, 1], ['t', -x, -y]]);
  11518. var matrix = shape.getMatrix();
  11519. scaledMatrix = Matrix.transform(matrix, [['t', x, y], ['s', 100, 1], ['t', -x, -y]]);
  11520. } else if (direct === 'y') {
  11521. shape.transform([['t', x, y], ['s', 1, 0.01], ['t', -x, -y]]);
  11522. var _matrix = shape.getMatrix();
  11523. scaledMatrix = Matrix.transform(_matrix, [['t', x, y], ['s', 1, 100], ['t', -x, -y]]);
  11524. } else if (direct === 'xy') {
  11525. shape.transform([['t', x, y], ['s', 0.01, 0.01], ['t', -x, -y]]);
  11526. var _matrix2 = shape.getMatrix();
  11527. scaledMatrix = Matrix.transform(_matrix2, [['t', x, y], ['s', 100, 100], ['t', -x, -y]]);
  11528. }
  11529. return scaledMatrix;
  11530. },
  11531. getAnimateParam: function getAnimateParam(animateCfg, index, id) {
  11532. var result = {};
  11533. if (animateCfg.delay) {
  11534. result.delay = Util.isFunction(animateCfg.delay) ? animateCfg.delay(index, id) : animateCfg.delay;
  11535. }
  11536. result.easing = animateCfg.easing;
  11537. result.duration = animateCfg.duration;
  11538. result.delay = animateCfg.delay;
  11539. return result;
  11540. },
  11541. doAnimation: function doAnimation(shape, endState, animateCfg, callback) {
  11542. var id = shape._id;
  11543. var index = shape.get('index');
  11544. var _Helpers$getAnimatePa = Helpers.getAnimateParam(animateCfg, index, id),
  11545. easing = _Helpers$getAnimatePa.easing,
  11546. delay = _Helpers$getAnimatePa.delay,
  11547. duration = _Helpers$getAnimatePa.duration;
  11548. var anim = shape.animate().to({
  11549. attrs: endState,
  11550. duration: duration,
  11551. delay: delay,
  11552. easing: easing
  11553. });
  11554. if (callback) {
  11555. anim.onEnd(function () {
  11556. callback();
  11557. });
  11558. }
  11559. }
  11560. };
  11561. module.exports = Helpers;
  11562. /***/ }),
  11563. /* 208 */,
  11564. /* 209 */
  11565. /***/ (function(module, exports, __webpack_require__) {
  11566. "use strict";
  11567. var Geom = __webpack_require__(17);
  11568. __webpack_require__(210);
  11569. __webpack_require__(72);
  11570. __webpack_require__(190);
  11571. __webpack_require__(212);
  11572. __webpack_require__(191);
  11573. __webpack_require__(214);
  11574. __webpack_require__(216);
  11575. module.exports = Geom;
  11576. /***/ }),
  11577. /* 210 */
  11578. /***/ (function(module, exports, __webpack_require__) {
  11579. "use strict";
  11580. var _interopRequireDefault = __webpack_require__(1);
  11581. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  11582. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  11583. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  11584. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  11585. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  11586. var Util = __webpack_require__(0);
  11587. var Geom = __webpack_require__(17);
  11588. __webpack_require__(211);
  11589. var Point = /*#__PURE__*/function (_Geom) {
  11590. (0, _inheritsLoose2["default"])(Point, _Geom);
  11591. var _super = _createSuper(Point);
  11592. function Point() {
  11593. return _Geom.apply(this, arguments) || this;
  11594. }
  11595. var _proto = Point.prototype;
  11596. _proto.getDefaultCfg = function getDefaultCfg() {
  11597. var cfg = _Geom.prototype.getDefaultCfg.call(this);
  11598. cfg.type = 'point';
  11599. cfg.shapeType = 'point';
  11600. cfg.generatePoints = false;
  11601. return cfg;
  11602. };
  11603. _proto.draw = function draw(data, shapeFactory) {
  11604. var self = this;
  11605. var container = self.get('container');
  11606. Util.each(data, function (obj) {
  11607. var shape = obj.shape;
  11608. var cfg = self.getDrawCfg(obj);
  11609. if (Util.isArray(obj.y)) {
  11610. var hasStack = self.hasAdjust('stack');
  11611. Util.each(obj.y, function (y, idx) {
  11612. cfg.y = y;
  11613. if (!hasStack || idx !== 0) {
  11614. self.drawShape(shape, obj, cfg, container, shapeFactory);
  11615. }
  11616. });
  11617. } else if (!Util.isNil(obj.y)) {
  11618. self.drawShape(shape, obj, cfg, container, shapeFactory);
  11619. }
  11620. });
  11621. };
  11622. return Point;
  11623. }(Geom);
  11624. Geom.Point = Point;
  11625. module.exports = Point;
  11626. /***/ }),
  11627. /* 211 */
  11628. /***/ (function(module, exports, __webpack_require__) {
  11629. "use strict";
  11630. var Util = __webpack_require__(0);
  11631. var Global = __webpack_require__(6);
  11632. var ShapeUtil = __webpack_require__(38);
  11633. var Shape = __webpack_require__(19);
  11634. var SHAPES = ['circle', 'hollowCircle', 'rect'];
  11635. var Point = Shape.registerFactory('point', {
  11636. defaultShapeType: 'circle',
  11637. getDefaultPoints: function getDefaultPoints(pointInfo) {
  11638. return ShapeUtil.splitPoints(pointInfo);
  11639. }
  11640. });
  11641. function getPointsCfg(cfg) {
  11642. var style = {
  11643. lineWidth: 0,
  11644. stroke: cfg.color,
  11645. fill: cfg.color
  11646. };
  11647. if (cfg.size) {
  11648. style.size = cfg.size;
  11649. }
  11650. Util.mix(style, cfg.style);
  11651. return Util.mix({}, Global.shape.point, style);
  11652. }
  11653. function drawShape(cfg, container, shape) {
  11654. if (cfg.size === 0) return;
  11655. var pointCfg = getPointsCfg(cfg);
  11656. var size = pointCfg.r || pointCfg.size;
  11657. var x = cfg.x;
  11658. var y = !Util.isArray(cfg.y) ? [cfg.y] : cfg.y;
  11659. if (shape === 'hollowCircle') {
  11660. pointCfg.lineWidth = 1;
  11661. pointCfg.fill = null;
  11662. }
  11663. for (var i = 0, len = y.length; i < len; i++) {
  11664. if (shape === 'rect') {
  11665. return container.addShape('Rect', {
  11666. className: 'point',
  11667. attrs: Util.mix({
  11668. x: x - size,
  11669. y: y[i] - size,
  11670. width: size * 2,
  11671. height: size * 2
  11672. }, pointCfg)
  11673. });
  11674. }
  11675. return container.addShape('Circle', {
  11676. className: 'point',
  11677. attrs: Util.mix({
  11678. x: x,
  11679. y: y[i],
  11680. r: size
  11681. }, pointCfg)
  11682. });
  11683. }
  11684. }
  11685. Util.each(SHAPES, function (shapeType) {
  11686. Shape.registerShape('point', shapeType, {
  11687. draw: function draw(cfg, container) {
  11688. return drawShape(cfg, container, shapeType);
  11689. }
  11690. });
  11691. });
  11692. module.exports = Point;
  11693. /***/ }),
  11694. /* 212 */
  11695. /***/ (function(module, exports, __webpack_require__) {
  11696. "use strict";
  11697. var _interopRequireDefault = __webpack_require__(1);
  11698. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  11699. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  11700. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  11701. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  11702. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  11703. /**
  11704. * @fileOverview area geometry
  11705. * @author dxq613 @gmail.com
  11706. * @author sima.zhang1990@gmail.com
  11707. */
  11708. var Geom = __webpack_require__(17);
  11709. var ShapeUtil = __webpack_require__(38);
  11710. var Util = __webpack_require__(0);
  11711. __webpack_require__(213);
  11712. var Area = /*#__PURE__*/function (_Geom) {
  11713. (0, _inheritsLoose2["default"])(Area, _Geom);
  11714. var _super = _createSuper(Area);
  11715. function Area() {
  11716. return _Geom.apply(this, arguments) || this;
  11717. }
  11718. var _proto = Area.prototype;
  11719. /**
  11720. * get the default configuration
  11721. * @protected
  11722. * @return {Object} return the result
  11723. */
  11724. _proto.getDefaultCfg = function getDefaultCfg() {
  11725. var cfg = _Geom.prototype.getDefaultCfg.call(this);
  11726. cfg.type = 'area';
  11727. cfg.shapeType = 'area';
  11728. cfg.generatePoints = true;
  11729. cfg.sortable = true;
  11730. return cfg;
  11731. };
  11732. _proto.draw = function draw(data, shapeFactory) {
  11733. var self = this;
  11734. var container = self.get('container');
  11735. var cfg = this.getDrawCfg(data[0]);
  11736. var yScale = self.getYScale();
  11737. var connectNulls = self.get('connectNulls');
  11738. var splitArray = ShapeUtil.splitArray(data, yScale.field, connectNulls);
  11739. cfg.origin = data;
  11740. Util.each(splitArray, function (subData, splitedIndex) {
  11741. cfg.splitedIndex = splitedIndex;
  11742. var points = subData.map(function (obj) {
  11743. return obj.points;
  11744. });
  11745. cfg.points = points;
  11746. self.drawShape(cfg.shape, data[0], cfg, container, shapeFactory);
  11747. });
  11748. };
  11749. return Area;
  11750. }(Geom);
  11751. Geom.Area = Area;
  11752. module.exports = Area;
  11753. /***/ }),
  11754. /* 213 */
  11755. /***/ (function(module, exports, __webpack_require__) {
  11756. "use strict";
  11757. var Util = __webpack_require__(0);
  11758. var Shape = __webpack_require__(19);
  11759. var Smooth = __webpack_require__(71);
  11760. var bbox = __webpack_require__(21);
  11761. var Global = __webpack_require__(6);
  11762. function equals(v1, v2) {
  11763. return Math.abs(v1 - v2) < 0.00001;
  11764. }
  11765. function notEmpty(value) {
  11766. return !isNaN(value) && !Util.isNil(value);
  11767. }
  11768. function filterPoints(points) {
  11769. var filteredPoints = []; // filter the point which x or y is NaN
  11770. for (var i = 0, len = points.length; i < len; i++) {
  11771. var point = points[i];
  11772. if (notEmpty(point.x) && notEmpty(point.y)) {
  11773. filteredPoints.push(point);
  11774. }
  11775. }
  11776. return filteredPoints;
  11777. }
  11778. function equalsCenter(points, center) {
  11779. var eqls = true;
  11780. Util.each(points, function (point) {
  11781. if (!equals(point.x, center.x) || !equals(point.y, center.y)) {
  11782. eqls = false;
  11783. return false;
  11784. }
  11785. });
  11786. return eqls;
  11787. }
  11788. function drawRectShape(topPoints, bottomPoints, container, style, isSmooth) {
  11789. var shape;
  11790. var points = topPoints.concat(bottomPoints);
  11791. if (isSmooth) {
  11792. shape = container.addShape('Custom', {
  11793. className: 'area',
  11794. attrs: Util.mix({
  11795. points: points
  11796. }, style),
  11797. createPath: function createPath(context) {
  11798. var constaint = [[0, 0], [1, 1]];
  11799. var points = filterPoints(this._attrs.attrs.points);
  11800. var pointsLen = points.length;
  11801. var topPoints = points.slice(0, pointsLen / 2);
  11802. var bottomPoints = points.slice(pointsLen / 2, pointsLen);
  11803. var topSps = Smooth.smooth(topPoints, false, constaint);
  11804. context.beginPath();
  11805. context.moveTo(topPoints[0].x, topPoints[0].y);
  11806. for (var i = 0, n = topSps.length; i < n; i++) {
  11807. var sp = topSps[i];
  11808. context.bezierCurveTo(sp[1], sp[2], sp[3], sp[4], sp[5], sp[6]);
  11809. }
  11810. if (bottomPoints.length) {
  11811. var bottomSps = Smooth.smooth(bottomPoints, false, constaint);
  11812. context.lineTo(bottomPoints[0].x, bottomPoints[0].y);
  11813. for (var _i = 0, _n = bottomSps.length; _i < _n; _i++) {
  11814. var _sp = bottomSps[_i];
  11815. context.bezierCurveTo(_sp[1], _sp[2], _sp[3], _sp[4], _sp[5], _sp[6]);
  11816. }
  11817. }
  11818. context.closePath();
  11819. },
  11820. calculateBox: function calculateBox() {
  11821. var points = filterPoints(this._attrs.attrs.points);
  11822. return bbox.getBBoxFromPoints(points);
  11823. }
  11824. });
  11825. } else {
  11826. shape = container.addShape('Polyline', {
  11827. className: 'area',
  11828. attrs: Util.mix({
  11829. points: points
  11830. }, style)
  11831. });
  11832. }
  11833. return shape;
  11834. }
  11835. function drawShape(cfg, container, isSmooth) {
  11836. var self = this;
  11837. var points = cfg.points;
  11838. var topPoints = [];
  11839. var bottomPoints = [];
  11840. Util.each(points, function (point) {
  11841. bottomPoints.push(point[0]);
  11842. topPoints.push(point[1]);
  11843. });
  11844. var style = Util.mix({
  11845. fillStyle: cfg.color
  11846. }, Global.shape.area, cfg.style);
  11847. bottomPoints.reverse();
  11848. topPoints = self.parsePoints(topPoints);
  11849. bottomPoints = self.parsePoints(bottomPoints);
  11850. if (cfg.isInCircle) {
  11851. topPoints.push(topPoints[0]);
  11852. bottomPoints.unshift(bottomPoints[bottomPoints.length - 1]);
  11853. if (equalsCenter(bottomPoints, cfg.center)) {
  11854. bottomPoints = [];
  11855. }
  11856. }
  11857. return drawRectShape(topPoints, bottomPoints, container, style, isSmooth);
  11858. }
  11859. var Area = Shape.registerFactory('area', {
  11860. defaultShapeType: 'area',
  11861. getDefaultPoints: function getDefaultPoints(obj) {
  11862. var x = obj.x;
  11863. var y = obj.y;
  11864. var y0 = obj.y0;
  11865. y = Util.isArray(y) ? y : [y0, y];
  11866. var points = [];
  11867. points.push({
  11868. x: x,
  11869. y: y[0]
  11870. }, {
  11871. x: x,
  11872. y: y[1]
  11873. });
  11874. return points;
  11875. }
  11876. });
  11877. var SHAPES = ['area', 'smooth'];
  11878. Util.each(SHAPES, function (shapeType) {
  11879. Shape.registerShape('area', shapeType, {
  11880. draw: function draw(cfg, container) {
  11881. var smooth = shapeType === 'smooth';
  11882. return drawShape.call(this, cfg, container, smooth);
  11883. }
  11884. });
  11885. });
  11886. module.exports = Area;
  11887. /***/ }),
  11888. /* 214 */
  11889. /***/ (function(module, exports, __webpack_require__) {
  11890. "use strict";
  11891. var _interopRequireDefault = __webpack_require__(1);
  11892. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  11893. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  11894. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  11895. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  11896. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  11897. var Geom = __webpack_require__(17);
  11898. var Util = __webpack_require__(0);
  11899. __webpack_require__(215);
  11900. var Polygon = /*#__PURE__*/function (_Geom) {
  11901. (0, _inheritsLoose2["default"])(Polygon, _Geom);
  11902. var _super = _createSuper(Polygon);
  11903. function Polygon() {
  11904. return _Geom.apply(this, arguments) || this;
  11905. }
  11906. var _proto = Polygon.prototype;
  11907. _proto.getDefaultCfg = function getDefaultCfg() {
  11908. var cfg = _Geom.prototype.getDefaultCfg.call(this);
  11909. cfg.type = 'polygon';
  11910. cfg.shapeType = 'polygon';
  11911. cfg.generatePoints = true;
  11912. return cfg;
  11913. };
  11914. _proto.createShapePointsCfg = function createShapePointsCfg(obj) {
  11915. var cfg = _Geom.prototype.createShapePointsCfg.call(this, obj);
  11916. var self = this;
  11917. var x = cfg.x;
  11918. var y = cfg.y;
  11919. var temp;
  11920. if (!(Util.isArray(x) && Util.isArray(y))) {
  11921. var xScale = self.getXScale();
  11922. var yScale = self.getYScale();
  11923. var xCount = xScale.values ? xScale.values.length : xScale.ticks.length;
  11924. var yCount = yScale.values ? yScale.values.length : yScale.ticks.length;
  11925. var xOffset = 0.5 * 1 / xCount;
  11926. var yOffset = 0.5 * 1 / yCount;
  11927. if (xScale.isCategory && yScale.isCategory) {
  11928. x = [x - xOffset, x - xOffset, x + xOffset, x + xOffset];
  11929. y = [y - yOffset, y + yOffset, y + yOffset, y - yOffset];
  11930. } else if (Util.isArray(x)) {
  11931. temp = x;
  11932. x = [temp[0], temp[0], temp[1], temp[1]];
  11933. y = [y - yOffset / 2, y + yOffset / 2, y + yOffset / 2, y - yOffset / 2];
  11934. } else if (Util.isArray(y)) {
  11935. temp = y;
  11936. y = [temp[0], temp[1], temp[1], temp[0]];
  11937. x = [x - xOffset / 2, x - xOffset / 2, x + xOffset / 2, x + xOffset / 2];
  11938. }
  11939. cfg.x = x;
  11940. cfg.y = y;
  11941. }
  11942. return cfg;
  11943. };
  11944. return Polygon;
  11945. }(Geom);
  11946. Geom.Polygon = Polygon;
  11947. module.exports = Polygon;
  11948. /***/ }),
  11949. /* 215 */
  11950. /***/ (function(module, exports, __webpack_require__) {
  11951. "use strict";
  11952. var Shape = __webpack_require__(19);
  11953. var Util = __webpack_require__(0);
  11954. var Polygon = Shape.registerFactory('polygon', {
  11955. defaultShapeType: 'polygon',
  11956. getDefaultPoints: function getDefaultPoints(pointInfo) {
  11957. var points = [];
  11958. var x = pointInfo.x,
  11959. y = pointInfo.y;
  11960. for (var i = 0, len = x.length; i < len; i++) {
  11961. points.push({
  11962. x: x[i],
  11963. y: y[i]
  11964. });
  11965. }
  11966. return points;
  11967. }
  11968. });
  11969. Shape.registerShape('polygon', 'polygon', {
  11970. draw: function draw(cfg, container) {
  11971. var points = this.parsePoints(cfg.points);
  11972. var style = Util.mix({
  11973. fill: cfg.color,
  11974. points: points
  11975. }, cfg.style);
  11976. return container.addShape('Polygon', {
  11977. className: 'polygon',
  11978. attrs: style
  11979. });
  11980. }
  11981. });
  11982. module.exports = Polygon;
  11983. /***/ }),
  11984. /* 216 */
  11985. /***/ (function(module, exports, __webpack_require__) {
  11986. "use strict";
  11987. var _interopRequireDefault = __webpack_require__(1);
  11988. var _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(22));
  11989. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  11990. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  11991. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  11992. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  11993. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  11994. var Geom = __webpack_require__(17);
  11995. var Util = __webpack_require__(0);
  11996. var SizeMixin = __webpack_require__(73);
  11997. __webpack_require__(217);
  11998. var Schema = /*#__PURE__*/function (_Geom) {
  11999. (0, _inheritsLoose2["default"])(Schema, _Geom);
  12000. var _super = _createSuper(Schema);
  12001. var _proto = Schema.prototype;
  12002. _proto.getDefaultCfg = function getDefaultCfg() {
  12003. var cfg = _Geom.prototype.getDefaultCfg.call(this);
  12004. cfg.type = 'schema';
  12005. cfg.shapeType = 'schema';
  12006. cfg.generatePoints = true;
  12007. return cfg;
  12008. };
  12009. function Schema(cfg) {
  12010. var _this;
  12011. _this = _Geom.call(this, cfg) || this;
  12012. Util.mix((0, _assertThisInitialized2["default"])(_this), SizeMixin);
  12013. return _this;
  12014. }
  12015. _proto.init = function init() {
  12016. _Geom.prototype.init.call(this); // 绑定事件
  12017. this.initEvent();
  12018. };
  12019. _proto.createShapePointsCfg = function createShapePointsCfg(obj) {
  12020. var cfg = _Geom.prototype.createShapePointsCfg.call(this, obj);
  12021. cfg.size = this.getNormalizedSize(obj);
  12022. return cfg;
  12023. };
  12024. _proto.clearInner = function clearInner() {
  12025. _Geom.prototype.clearInner.call(this);
  12026. this.set('defaultSize', null);
  12027. };
  12028. return Schema;
  12029. }(Geom);
  12030. Geom.Schema = Schema;
  12031. module.exports = Schema;
  12032. /***/ }),
  12033. /* 217 */
  12034. /***/ (function(module, exports, __webpack_require__) {
  12035. "use strict";
  12036. var Shape = __webpack_require__(19);
  12037. var Util = __webpack_require__(0);
  12038. function _sortValue(value) {
  12039. var sorted = value.sort(function (a, b) {
  12040. return a < b ? 1 : -1;
  12041. });
  12042. var length = sorted.length;
  12043. if (length < 4) {
  12044. var min = sorted[length - 1];
  12045. for (var i = 0; i < 4 - length; i++) {
  12046. sorted.push(min);
  12047. }
  12048. }
  12049. return sorted;
  12050. } // from left bottom corner, and clockwise
  12051. function getCandlePoints(x, y, width) {
  12052. var yValues = _sortValue(y);
  12053. var points = [{
  12054. x: x,
  12055. y: yValues[0]
  12056. }, {
  12057. x: x,
  12058. y: yValues[1]
  12059. }, {
  12060. x: x - width / 2,
  12061. y: yValues[2]
  12062. }, {
  12063. x: x - width / 2,
  12064. y: yValues[1]
  12065. }, {
  12066. x: x + width / 2,
  12067. y: yValues[1]
  12068. }, {
  12069. x: x + width / 2,
  12070. y: yValues[2]
  12071. }, {
  12072. x: x,
  12073. y: yValues[2]
  12074. }, {
  12075. x: x,
  12076. y: yValues[3]
  12077. }];
  12078. return points;
  12079. }
  12080. var Schema = Shape.registerFactory('schema', {});
  12081. Shape.registerShape('schema', 'candle', {
  12082. getPoints: function getPoints(cfg) {
  12083. return getCandlePoints(cfg.x, cfg.y, cfg.size);
  12084. },
  12085. draw: function draw(cfg, container) {
  12086. var points = this.parsePoints(cfg.points);
  12087. var style = Util.mix({
  12088. stroke: cfg.color,
  12089. fill: cfg.color,
  12090. lineWidth: 1
  12091. }, cfg.style);
  12092. return container.addShape('Custom', {
  12093. className: 'schema',
  12094. attrs: style,
  12095. createPath: function createPath(ctx) {
  12096. ctx.beginPath();
  12097. ctx.moveTo(points[0].x, points[0].y);
  12098. ctx.lineTo(points[1].x, points[1].y);
  12099. ctx.moveTo(points[2].x, points[2].y);
  12100. for (var i = 3; i < 6; i++) {
  12101. ctx.lineTo(points[i].x, points[i].y);
  12102. }
  12103. ctx.closePath();
  12104. ctx.moveTo(points[6].x, points[6].y);
  12105. ctx.lineTo(points[7].x, points[7].y);
  12106. }
  12107. });
  12108. }
  12109. });
  12110. module.exports = Schema;
  12111. /***/ }),
  12112. /* 218 */
  12113. /***/ (function(module, exports, __webpack_require__) {
  12114. "use strict";
  12115. var _interopRequireDefault = __webpack_require__(1);
  12116. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  12117. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  12118. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  12119. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  12120. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  12121. var Util = __webpack_require__(0);
  12122. var Abstract = __webpack_require__(45);
  12123. var Circle = /*#__PURE__*/function (_Abstract) {
  12124. (0, _inheritsLoose2["default"])(Circle, _Abstract);
  12125. var _super = _createSuper(Circle);
  12126. function Circle() {
  12127. return _Abstract.apply(this, arguments) || this;
  12128. }
  12129. var _proto = Circle.prototype;
  12130. _proto._initDefaultCfg = function _initDefaultCfg() {
  12131. _Abstract.prototype._initDefaultCfg.call(this);
  12132. this.startAngle = -Math.PI / 2; // start angle,in radian
  12133. this.endAngle = Math.PI * 3 / 2; // end angle, in radian
  12134. this.radius = null; // radius
  12135. this.center = null; // center
  12136. };
  12137. _proto.getOffsetPoint = function getOffsetPoint(value) {
  12138. var startAngle = this.startAngle,
  12139. endAngle = this.endAngle;
  12140. var angle = startAngle + (endAngle - startAngle) * value;
  12141. return this._getCirclePoint(angle);
  12142. };
  12143. _proto._getCirclePoint = function _getCirclePoint(angle, radius) {
  12144. var self = this;
  12145. var center = self.center;
  12146. radius = radius || self.radius;
  12147. return {
  12148. x: center.x + Math.cos(angle) * radius,
  12149. y: center.y + Math.sin(angle) * radius
  12150. };
  12151. };
  12152. _proto.getTextAlignInfo = function getTextAlignInfo(point, offset) {
  12153. var self = this;
  12154. var offsetVector = self.getOffsetVector(point, offset);
  12155. var align;
  12156. var baseLine = 'middle';
  12157. if (offsetVector[0] > 0) {
  12158. align = 'left';
  12159. } else if (offsetVector[0] < 0) {
  12160. align = 'right';
  12161. } else {
  12162. align = 'center';
  12163. if (offsetVector[1] > 0) {
  12164. baseLine = 'top';
  12165. } else if (offsetVector[1] < 0) {
  12166. baseLine = 'bottom';
  12167. }
  12168. }
  12169. return {
  12170. textAlign: align,
  12171. textBaseline: baseLine
  12172. };
  12173. };
  12174. _proto.getAxisVector = function getAxisVector(point) {
  12175. var center = this.center;
  12176. var factor = this.offsetFactor;
  12177. return [(point.y - center.y) * factor, (point.x - center.x) * -1 * factor];
  12178. };
  12179. _proto.drawLine = function drawLine(lineCfg) {
  12180. var center = this.center,
  12181. radius = this.radius,
  12182. startAngle = this.startAngle,
  12183. endAngle = this.endAngle;
  12184. var container = this.getContainer(lineCfg.top);
  12185. container.addShape('arc', {
  12186. className: 'axis-line',
  12187. attrs: Util.mix({
  12188. x: center.x,
  12189. y: center.y,
  12190. r: radius,
  12191. startAngle: startAngle,
  12192. endAngle: endAngle
  12193. }, lineCfg)
  12194. });
  12195. };
  12196. return Circle;
  12197. }(Abstract);
  12198. Abstract.Circle = Circle;
  12199. module.exports = Circle;
  12200. /***/ }),
  12201. /* 219 */
  12202. /***/ (function(module, exports, __webpack_require__) {
  12203. "use strict";
  12204. var TimeCat = __webpack_require__(220);
  12205. module.exports = TimeCat;
  12206. /***/ }),
  12207. /* 220 */
  12208. /***/ (function(module, exports, __webpack_require__) {
  12209. function _inheritsLoose(subClass, superClass) {
  12210. subClass.prototype = Object.create(superClass.prototype);
  12211. subClass.prototype.constructor = subClass;
  12212. subClass.__proto__ = superClass;
  12213. }
  12214. /**
  12215. * @fileOverview 时间数据作为分类类型
  12216. * @author dxq613@gmail.com
  12217. */
  12218. var Base = __webpack_require__(26);
  12219. var Category = __webpack_require__(69);
  12220. var fecha = __webpack_require__(221);
  12221. var catAuto = __webpack_require__(65);
  12222. var TimeUtil = __webpack_require__(204);
  12223. var each = __webpack_require__(15);
  12224. var isNumber = __webpack_require__(36);
  12225. var isObject = __webpack_require__(44);
  12226. var isString = __webpack_require__(48);
  12227. /**
  12228. * 度量的构造函数
  12229. * @class Scale.TimeCategory
  12230. */
  12231. var TimeCategory = /*#__PURE__*/function (_Category) {
  12232. _inheritsLoose(TimeCategory, _Category);
  12233. function TimeCategory() {
  12234. return _Category.apply(this, arguments) || this;
  12235. }
  12236. var _proto = TimeCategory.prototype;
  12237. _proto._initDefaultCfg = function _initDefaultCfg() {
  12238. _Category.prototype._initDefaultCfg.call(this);
  12239. this.type = 'timeCat';
  12240. /**
  12241. * 是否需要排序,默认进行排序
  12242. * @type {Boolean}
  12243. */
  12244. this.sortable = true;
  12245. this.tickCount = 5;
  12246. /**
  12247. * 时间格式化
  12248. * @type {String}
  12249. */
  12250. this.mask = 'YYYY-MM-DD';
  12251. };
  12252. _proto.init = function init() {
  12253. var self = this;
  12254. var values = this.values; // 针对时间分类类型,会将时间统一转换为时间戳
  12255. each(values, function (v, i) {
  12256. values[i] = self._toTimeStamp(v);
  12257. });
  12258. if (this.sortable) {
  12259. // 允许排序
  12260. values.sort(function (v1, v2) {
  12261. return v1 - v2;
  12262. });
  12263. }
  12264. if (!self.ticks) {
  12265. self.ticks = this.calculateTicks();
  12266. }
  12267. }
  12268. /**
  12269. * 计算 ticks
  12270. * @return {array} 返回 ticks 数组
  12271. */
  12272. ;
  12273. _proto.calculateTicks = function calculateTicks() {
  12274. var self = this;
  12275. var count = self.tickCount;
  12276. var ticks;
  12277. if (count) {
  12278. var temp = catAuto({
  12279. maxCount: count,
  12280. data: self.values,
  12281. isRounding: self.isRounding
  12282. });
  12283. ticks = temp.ticks;
  12284. } else {
  12285. ticks = self.values;
  12286. }
  12287. return ticks;
  12288. }
  12289. /**
  12290. * @override
  12291. */
  12292. ;
  12293. _proto.translate = function translate(value) {
  12294. value = this._toTimeStamp(value);
  12295. var index = this.values.indexOf(value);
  12296. if (index === -1) {
  12297. if (isNumber(value) && value < this.values.length) {
  12298. index = value;
  12299. } else {
  12300. index = NaN;
  12301. }
  12302. }
  12303. return index;
  12304. }
  12305. /**
  12306. * @override
  12307. */
  12308. ;
  12309. _proto.scale = function scale(value) {
  12310. var rangeMin = this.rangeMin();
  12311. var rangeMax = this.rangeMax();
  12312. var index = this.translate(value);
  12313. var percent;
  12314. if (this.values.length === 1 || isNaN(index)) {
  12315. // is index is NAN should not be set as 0
  12316. percent = index;
  12317. } else if (index > -1) {
  12318. percent = index / (this.values.length - 1);
  12319. } else {
  12320. percent = 0;
  12321. }
  12322. return rangeMin + percent * (rangeMax - rangeMin);
  12323. }
  12324. /**
  12325. * @override
  12326. */
  12327. ;
  12328. _proto.getText = function getText(value) {
  12329. var result = '';
  12330. var index = this.translate(value);
  12331. if (index > -1) {
  12332. result = this.values[index];
  12333. } else {
  12334. result = value;
  12335. }
  12336. var formatter = this.formatter;
  12337. result = parseInt(result, 10);
  12338. result = formatter ? formatter(result) : fecha.format(result, this.mask);
  12339. return result;
  12340. }
  12341. /**
  12342. * @override
  12343. */
  12344. ;
  12345. _proto.getTicks = function getTicks() {
  12346. var self = this;
  12347. var ticks = this.ticks;
  12348. var rst = [];
  12349. each(ticks, function (tick) {
  12350. var obj;
  12351. if (isObject(tick)) {
  12352. obj = tick;
  12353. } else {
  12354. obj = {
  12355. text: isString(tick) ? tick : self.getText(tick),
  12356. value: self.scale(tick),
  12357. tickValue: tick // 用于坐标轴上文本动画时确定前后帧的对应关系
  12358. };
  12359. }
  12360. rst.push(obj);
  12361. });
  12362. return rst;
  12363. } // 将时间转换为时间戳
  12364. ;
  12365. _proto._toTimeStamp = function _toTimeStamp(value) {
  12366. return TimeUtil.toTimeStamp(value);
  12367. };
  12368. return TimeCategory;
  12369. }(Category);
  12370. Base.TimeCat = TimeCategory;
  12371. module.exports = TimeCategory;
  12372. /***/ }),
  12373. /* 221 */
  12374. /***/ (function(module, exports, __webpack_require__) {
  12375. var __WEBPACK_AMD_DEFINE_RESULT__;(function (main) {
  12376. 'use strict';
  12377. /**
  12378. * Parse or format dates
  12379. * @class fecha
  12380. */
  12381. var fecha = {};
  12382. var token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g;
  12383. var twoDigits = /\d\d?/;
  12384. var threeDigits = /\d{3}/;
  12385. var fourDigits = /\d{4}/;
  12386. var word = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
  12387. var literal = /\[([^]*?)\]/gm;
  12388. var noop = function () {};
  12389. function shorten(arr, sLen) {
  12390. var newArr = [];
  12391. for (var i = 0, len = arr.length; i < len; i++) {
  12392. newArr.push(arr[i].substr(0, sLen));
  12393. }
  12394. return newArr;
  12395. }
  12396. function monthUpdate(arrName) {
  12397. return function (d, v, i18n) {
  12398. var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());
  12399. if (~index) {
  12400. d.month = index;
  12401. }
  12402. };
  12403. }
  12404. function pad(val, len) {
  12405. val = String(val);
  12406. len = len || 2;
  12407. while (val.length < len) {
  12408. val = '0' + val;
  12409. }
  12410. return val;
  12411. }
  12412. var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  12413. var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
  12414. var monthNamesShort = shorten(monthNames, 3);
  12415. var dayNamesShort = shorten(dayNames, 3);
  12416. fecha.i18n = {
  12417. dayNamesShort: dayNamesShort,
  12418. dayNames: dayNames,
  12419. monthNamesShort: monthNamesShort,
  12420. monthNames: monthNames,
  12421. amPm: ['am', 'pm'],
  12422. DoFn: function DoFn(D) {
  12423. return D + ['th', 'st', 'nd', 'rd'][D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10];
  12424. }
  12425. };
  12426. var formatFlags = {
  12427. D: function (dateObj) {
  12428. return dateObj.getDate();
  12429. },
  12430. DD: function (dateObj) {
  12431. return pad(dateObj.getDate());
  12432. },
  12433. Do: function (dateObj, i18n) {
  12434. return i18n.DoFn(dateObj.getDate());
  12435. },
  12436. d: function (dateObj) {
  12437. return dateObj.getDay();
  12438. },
  12439. dd: function (dateObj) {
  12440. return pad(dateObj.getDay());
  12441. },
  12442. ddd: function (dateObj, i18n) {
  12443. return i18n.dayNamesShort[dateObj.getDay()];
  12444. },
  12445. dddd: function (dateObj, i18n) {
  12446. return i18n.dayNames[dateObj.getDay()];
  12447. },
  12448. M: function (dateObj) {
  12449. return dateObj.getMonth() + 1;
  12450. },
  12451. MM: function (dateObj) {
  12452. return pad(dateObj.getMonth() + 1);
  12453. },
  12454. MMM: function (dateObj, i18n) {
  12455. return i18n.monthNamesShort[dateObj.getMonth()];
  12456. },
  12457. MMMM: function (dateObj, i18n) {
  12458. return i18n.monthNames[dateObj.getMonth()];
  12459. },
  12460. YY: function (dateObj) {
  12461. return String(dateObj.getFullYear()).substr(2);
  12462. },
  12463. YYYY: function (dateObj) {
  12464. return pad(dateObj.getFullYear(), 4);
  12465. },
  12466. h: function (dateObj) {
  12467. return dateObj.getHours() % 12 || 12;
  12468. },
  12469. hh: function (dateObj) {
  12470. return pad(dateObj.getHours() % 12 || 12);
  12471. },
  12472. H: function (dateObj) {
  12473. return dateObj.getHours();
  12474. },
  12475. HH: function (dateObj) {
  12476. return pad(dateObj.getHours());
  12477. },
  12478. m: function (dateObj) {
  12479. return dateObj.getMinutes();
  12480. },
  12481. mm: function (dateObj) {
  12482. return pad(dateObj.getMinutes());
  12483. },
  12484. s: function (dateObj) {
  12485. return dateObj.getSeconds();
  12486. },
  12487. ss: function (dateObj) {
  12488. return pad(dateObj.getSeconds());
  12489. },
  12490. S: function (dateObj) {
  12491. return Math.round(dateObj.getMilliseconds() / 100);
  12492. },
  12493. SS: function (dateObj) {
  12494. return pad(Math.round(dateObj.getMilliseconds() / 10), 2);
  12495. },
  12496. SSS: function (dateObj) {
  12497. return pad(dateObj.getMilliseconds(), 3);
  12498. },
  12499. a: function (dateObj, i18n) {
  12500. return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];
  12501. },
  12502. A: function (dateObj, i18n) {
  12503. return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();
  12504. },
  12505. ZZ: function (dateObj) {
  12506. var o = dateObj.getTimezoneOffset();
  12507. return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);
  12508. }
  12509. };
  12510. var parseFlags = {
  12511. D: [twoDigits, function (d, v) {
  12512. d.day = v;
  12513. }],
  12514. Do: [new RegExp(twoDigits.source + word.source), function (d, v) {
  12515. d.day = parseInt(v, 10);
  12516. }],
  12517. M: [twoDigits, function (d, v) {
  12518. d.month = v - 1;
  12519. }],
  12520. YY: [twoDigits, function (d, v) {
  12521. var da = new Date(),
  12522. cent = +('' + da.getFullYear()).substr(0, 2);
  12523. d.year = '' + (v > 68 ? cent - 1 : cent) + v;
  12524. }],
  12525. h: [twoDigits, function (d, v) {
  12526. d.hour = v;
  12527. }],
  12528. m: [twoDigits, function (d, v) {
  12529. d.minute = v;
  12530. }],
  12531. s: [twoDigits, function (d, v) {
  12532. d.second = v;
  12533. }],
  12534. YYYY: [fourDigits, function (d, v) {
  12535. d.year = v;
  12536. }],
  12537. S: [/\d/, function (d, v) {
  12538. d.millisecond = v * 100;
  12539. }],
  12540. SS: [/\d{2}/, function (d, v) {
  12541. d.millisecond = v * 10;
  12542. }],
  12543. SSS: [threeDigits, function (d, v) {
  12544. d.millisecond = v;
  12545. }],
  12546. d: [twoDigits, noop],
  12547. ddd: [word, noop],
  12548. MMM: [word, monthUpdate('monthNamesShort')],
  12549. MMMM: [word, monthUpdate('monthNames')],
  12550. a: [word, function (d, v, i18n) {
  12551. var val = v.toLowerCase();
  12552. if (val === i18n.amPm[0]) {
  12553. d.isPm = false;
  12554. } else if (val === i18n.amPm[1]) {
  12555. d.isPm = true;
  12556. }
  12557. }],
  12558. ZZ: [/([\+\-]\d\d:?\d\d|Z)/, function (d, v) {
  12559. if (v === 'Z') v = '+00:00';
  12560. var parts = (v + '').match(/([\+\-]|\d\d)/gi),
  12561. minutes;
  12562. if (parts) {
  12563. minutes = +(parts[1] * 60) + parseInt(parts[2], 10);
  12564. d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;
  12565. }
  12566. }]
  12567. };
  12568. parseFlags.dd = parseFlags.d;
  12569. parseFlags.dddd = parseFlags.ddd;
  12570. parseFlags.DD = parseFlags.D;
  12571. parseFlags.mm = parseFlags.m;
  12572. parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;
  12573. parseFlags.MM = parseFlags.M;
  12574. parseFlags.ss = parseFlags.s;
  12575. parseFlags.A = parseFlags.a; // Some common format strings
  12576. fecha.masks = {
  12577. default: 'ddd MMM DD YYYY HH:mm:ss',
  12578. shortDate: 'M/D/YY',
  12579. mediumDate: 'MMM D, YYYY',
  12580. longDate: 'MMMM D, YYYY',
  12581. fullDate: 'dddd, MMMM D, YYYY',
  12582. shortTime: 'HH:mm',
  12583. mediumTime: 'HH:mm:ss',
  12584. longTime: 'HH:mm:ss.SSS'
  12585. };
  12586. /***
  12587. * Format a date
  12588. * @method format
  12589. * @param {Date|number} dateObj
  12590. * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'
  12591. */
  12592. fecha.format = function (dateObj, mask, i18nSettings) {
  12593. var i18n = i18nSettings || fecha.i18n;
  12594. if (typeof dateObj === 'number') {
  12595. dateObj = new Date(dateObj);
  12596. }
  12597. if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {
  12598. throw new Error('Invalid Date in fecha.format');
  12599. }
  12600. mask = fecha.masks[mask] || mask || fecha.masks['default'];
  12601. var literals = []; // Make literals inactive by replacing them with ??
  12602. mask = mask.replace(literal, function ($0, $1) {
  12603. literals.push($1);
  12604. return '??';
  12605. }); // Apply formatting rules
  12606. mask = mask.replace(token, function ($0) {
  12607. return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);
  12608. }); // Inline literal values back into the formatted value
  12609. return mask.replace(/\?\?/g, function () {
  12610. return literals.shift();
  12611. });
  12612. };
  12613. /**
  12614. * Parse a date string into an object, changes - into /
  12615. * @method parse
  12616. * @param {string} dateStr Date string
  12617. * @param {string} format Date parse format
  12618. * @returns {Date|boolean}
  12619. */
  12620. fecha.parse = function (dateStr, format, i18nSettings) {
  12621. var i18n = i18nSettings || fecha.i18n;
  12622. if (typeof format !== 'string') {
  12623. throw new Error('Invalid format in fecha.parse');
  12624. }
  12625. format = fecha.masks[format] || format; // Avoid regular expression denial of service, fail early for really long strings
  12626. // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS
  12627. if (dateStr.length > 1000) {
  12628. return false;
  12629. }
  12630. var isValid = true;
  12631. var dateInfo = {};
  12632. format.replace(token, function ($0) {
  12633. if (parseFlags[$0]) {
  12634. var info = parseFlags[$0];
  12635. var index = dateStr.search(info[0]);
  12636. if (!~index) {
  12637. isValid = false;
  12638. } else {
  12639. dateStr.replace(info[0], function (result) {
  12640. info[1](dateInfo, result, i18n);
  12641. dateStr = dateStr.substr(index + result.length);
  12642. return result;
  12643. });
  12644. }
  12645. }
  12646. return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1);
  12647. });
  12648. if (!isValid) {
  12649. return false;
  12650. }
  12651. var today = new Date();
  12652. if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {
  12653. dateInfo.hour = +dateInfo.hour + 12;
  12654. } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {
  12655. dateInfo.hour = 0;
  12656. }
  12657. var date;
  12658. if (dateInfo.timezoneOffset != null) {
  12659. dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;
  12660. date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));
  12661. } else {
  12662. date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);
  12663. }
  12664. return date;
  12665. };
  12666. /* istanbul ignore next */
  12667. if (typeof module !== 'undefined' && module.exports) {
  12668. module.exports = fecha;
  12669. } else if (true) {
  12670. !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {
  12671. return fecha;
  12672. }.call(exports, __webpack_require__, exports, module),
  12673. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  12674. } else {
  12675. main.fecha = fecha;
  12676. }
  12677. })(this);
  12678. /***/ }),
  12679. /* 222 */
  12680. /***/ (function(module, exports, __webpack_require__) {
  12681. var isType = __webpack_require__(27);
  12682. var isDate = function isDate(value) {
  12683. return isType(value, 'Date');
  12684. };
  12685. module.exports = isDate;
  12686. /***/ }),
  12687. /* 223 */
  12688. /***/ (function(module, exports, __webpack_require__) {
  12689. "use strict";
  12690. var _interopRequireDefault = __webpack_require__(1);
  12691. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  12692. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  12693. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  12694. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  12695. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  12696. var Util = __webpack_require__(0);
  12697. var GuideBase = __webpack_require__(23);
  12698. var Arc = /*#__PURE__*/function (_GuideBase) {
  12699. (0, _inheritsLoose2["default"])(Arc, _GuideBase);
  12700. var _super = _createSuper(Arc);
  12701. function Arc() {
  12702. return _GuideBase.apply(this, arguments) || this;
  12703. }
  12704. var _proto = Arc.prototype;
  12705. _proto._initDefaultCfg = function _initDefaultCfg() {
  12706. this.type = 'arc';
  12707. /**
  12708. * start point
  12709. * @type {Array | Function}
  12710. */
  12711. this.start = [];
  12712. /**
  12713. * end point
  12714. * @type {Array | Function}
  12715. */
  12716. this.end = [];
  12717. /**
  12718. * style configuration
  12719. * @type {Object}
  12720. */
  12721. this.style = {
  12722. stroke: '#999',
  12723. lineWidth: 1
  12724. };
  12725. };
  12726. _proto.render = function render(coord, container) {
  12727. var self = this;
  12728. var start = self.parsePoint(coord, self.start);
  12729. var end = self.parsePoint(coord, self.end);
  12730. if (!start || !end) {
  12731. return;
  12732. }
  12733. var coordCenter = coord.center;
  12734. var radius = Math.sqrt((start.x - coordCenter.x) * (start.x - coordCenter.x) + (start.y - coordCenter.y) * (start.y - coordCenter.y));
  12735. var startAngle = Math.atan2(start.y - coordCenter.y, start.x - coordCenter.x);
  12736. var endAngle = Math.atan2(end.y - coordCenter.y, end.x - coordCenter.x);
  12737. var shape = container.addShape('arc', {
  12738. className: 'guide-arc',
  12739. attrs: Util.mix({
  12740. x: coordCenter.x,
  12741. y: coordCenter.y,
  12742. r: radius,
  12743. startAngle: startAngle,
  12744. endAngle: endAngle
  12745. }, self.style)
  12746. });
  12747. self.element = shape;
  12748. return shape;
  12749. };
  12750. return Arc;
  12751. }(GuideBase);
  12752. GuideBase.Arc = Arc;
  12753. module.exports = Arc;
  12754. /***/ }),
  12755. /* 224 */
  12756. /***/ (function(module, exports, __webpack_require__) {
  12757. "use strict";
  12758. var _interopRequireDefault = __webpack_require__(1);
  12759. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  12760. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  12761. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  12762. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  12763. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  12764. var Util = __webpack_require__(0);
  12765. var GuideBase = __webpack_require__(23);
  12766. function getOffsetFromAlign(alignX, alignY, width, height) {
  12767. var result = [];
  12768. if (alignX === 'left' && alignY === 'top') {
  12769. result[0] = 0;
  12770. result[1] = 0;
  12771. } else if (alignX === 'right' && alignY === 'top') {
  12772. result[0] = -width;
  12773. result[1] = 0;
  12774. } else if (alignX === 'left' && alignY === 'bottom') {
  12775. result[0] = 0;
  12776. result[1] = Math.floor(-height);
  12777. } else if (alignX === 'right' && alignY === 'bottom') {
  12778. result[0] = Math.floor(-width);
  12779. result[1] = Math.floor(-height);
  12780. } else if (alignX === 'right' && alignY === 'middle') {
  12781. result[0] = Math.floor(-width);
  12782. result[1] = Math.floor(-height / 2);
  12783. } else if (alignX === 'left' && alignY === 'middle') {
  12784. result[0] = 0;
  12785. result[1] = Math.floor(-height / 2);
  12786. } else if (alignX === 'center' && alignY === 'bottom') {
  12787. result[0] = Math.floor(-width / 2);
  12788. result[1] = Math.floor(-height);
  12789. } else if (alignX === 'center' && alignY === 'top') {
  12790. result[0] = Math.floor(-width / 2);
  12791. result[1] = 0;
  12792. } else {
  12793. result[0] = Math.floor(-width / 2);
  12794. result[1] = Math.floor(-height / 2);
  12795. }
  12796. return result;
  12797. }
  12798. function modifyCSS(DOM, CSS) {
  12799. for (var key in CSS) {
  12800. if (CSS.hasOwnProperty(key)) {
  12801. DOM.style[key] = CSS[key];
  12802. }
  12803. }
  12804. return DOM;
  12805. }
  12806. function createDom(str) {
  12807. var container = document.createElement('div');
  12808. str = str.replace(/(^\s*)|(\s*$)/g, '');
  12809. container.innerHTML = '' + str;
  12810. return container.childNodes[0];
  12811. }
  12812. var Html = /*#__PURE__*/function (_GuideBase) {
  12813. (0, _inheritsLoose2["default"])(Html, _GuideBase);
  12814. var _super = _createSuper(Html);
  12815. function Html() {
  12816. return _GuideBase.apply(this, arguments) || this;
  12817. }
  12818. var _proto = Html.prototype;
  12819. _proto._initDefaultCfg = function _initDefaultCfg() {
  12820. this.type = 'html';
  12821. /**
  12822. * dom position
  12823. * @type {Object | Array}
  12824. */
  12825. this.position = null;
  12826. /**
  12827. * alignment for horizontal direction,can be 'left','center','right'
  12828. * @type {String}
  12829. */
  12830. this.alignX = 'center';
  12831. /**
  12832. * alignment for vertical direction,can be 'top', 'middle', 'bottom'
  12833. * @type {String}
  12834. */
  12835. this.alignY = 'middle';
  12836. /**
  12837. * offset for horizontal direction
  12838. * @type {Number}
  12839. */
  12840. this.offsetX = null;
  12841. /**
  12842. * offset for vertical direction
  12843. * @type {Number}
  12844. */
  12845. this.offsetY = null;
  12846. /**
  12847. * the html string
  12848. *@type {String | Function}
  12849. */
  12850. this.html = null;
  12851. } // override paint
  12852. ;
  12853. _proto.render = function render(coord, container) {
  12854. var self = this;
  12855. var position = self.parsePoint(coord, self.position);
  12856. if (!position) {
  12857. return;
  12858. }
  12859. var myNode = createDom(self.html);
  12860. myNode = modifyCSS(myNode, {
  12861. position: 'absolute',
  12862. top: Math.floor(position.y) + 'px',
  12863. left: Math.floor(position.x) + 'px',
  12864. visibility: 'hidden'
  12865. });
  12866. var canvasDom = container.get('canvas').get('el');
  12867. var parentNode = canvasDom.parentNode;
  12868. parentNode = modifyCSS(parentNode, {
  12869. position: 'relative'
  12870. });
  12871. var wrapperNode = createDom('<div class="guideWapper" style="position: absolute;top: 0; left: 0;"></div>');
  12872. parentNode.appendChild(wrapperNode);
  12873. wrapperNode.appendChild(myNode);
  12874. var canvasOffsetTop = canvasDom.offsetTop;
  12875. var canvasOffsetLeft = canvasDom.offsetLeft;
  12876. var alignX = self.alignX,
  12877. alignY = self.alignY,
  12878. offsetX = self.offsetX,
  12879. offsetY = self.offsetY;
  12880. var width = Util.getWidth(myNode);
  12881. var height = Util.getHeight(myNode);
  12882. var newOffset = getOffsetFromAlign(alignX, alignY, width, height);
  12883. position.x = position.x + newOffset[0] + canvasOffsetLeft;
  12884. position.y = position.y + newOffset[1] + canvasOffsetTop;
  12885. if (offsetX) {
  12886. position.x += offsetX;
  12887. }
  12888. if (offsetY) {
  12889. position.y += offsetY;
  12890. }
  12891. modifyCSS(myNode, {
  12892. top: Math.floor(position.y) + 'px',
  12893. left: Math.floor(position.x) + 'px',
  12894. visibility: 'visible'
  12895. });
  12896. self.element = wrapperNode;
  12897. };
  12898. _proto.remove = function remove() {
  12899. var element = this.element;
  12900. element && element.parentNode && element.parentNode.removeChild(element);
  12901. };
  12902. return Html;
  12903. }(GuideBase);
  12904. GuideBase.Html = Html;
  12905. module.exports = Html;
  12906. /***/ }),
  12907. /* 225 */
  12908. /***/ (function(module, exports, __webpack_require__) {
  12909. "use strict";
  12910. var _interopRequireDefault = __webpack_require__(1);
  12911. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  12912. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  12913. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  12914. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  12915. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  12916. var Util = __webpack_require__(0);
  12917. var GuideBase = __webpack_require__(23);
  12918. var Line = /*#__PURE__*/function (_GuideBase) {
  12919. (0, _inheritsLoose2["default"])(Line, _GuideBase);
  12920. var _super = _createSuper(Line);
  12921. function Line() {
  12922. return _GuideBase.apply(this, arguments) || this;
  12923. }
  12924. var _proto = Line.prototype;
  12925. _proto._initDefaultCfg = function _initDefaultCfg() {
  12926. this.type = 'line';
  12927. this.start = [];
  12928. this.end = [];
  12929. this.style = {
  12930. stroke: '#000',
  12931. lineWidth: 1
  12932. };
  12933. };
  12934. _proto.render = function render(coord, container) {
  12935. var points = [];
  12936. points[0] = this.parsePoint(coord, this.start);
  12937. points[1] = this.parsePoint(coord, this.end);
  12938. if (!points[0] || !points[1]) {
  12939. return;
  12940. }
  12941. var shape = container.addShape('Line', {
  12942. className: 'guide-line',
  12943. attrs: Util.mix({
  12944. x1: points[0].x,
  12945. y1: points[0].y,
  12946. x2: points[1].x,
  12947. y2: points[1].y
  12948. }, this.style)
  12949. });
  12950. this.element = shape;
  12951. return shape;
  12952. };
  12953. return Line;
  12954. }(GuideBase);
  12955. GuideBase.Line = Line;
  12956. module.exports = Line;
  12957. /***/ }),
  12958. /* 226 */
  12959. /***/ (function(module, exports, __webpack_require__) {
  12960. "use strict";
  12961. var _interopRequireDefault = __webpack_require__(1);
  12962. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  12963. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  12964. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  12965. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  12966. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  12967. var Util = __webpack_require__(0);
  12968. var GuideBase = __webpack_require__(23);
  12969. var Rect = /*#__PURE__*/function (_GuideBase) {
  12970. (0, _inheritsLoose2["default"])(Rect, _GuideBase);
  12971. var _super = _createSuper(Rect);
  12972. function Rect() {
  12973. return _GuideBase.apply(this, arguments) || this;
  12974. }
  12975. var _proto = Rect.prototype;
  12976. _proto._initDefaultCfg = function _initDefaultCfg() {
  12977. this.type = 'rect';
  12978. this.start = [];
  12979. this.end = [];
  12980. this.style = {
  12981. fill: '#CCD7EB',
  12982. opacity: 0.4
  12983. };
  12984. };
  12985. _proto.render = function render(coord, container) {
  12986. var start = this.parsePoint(coord, this.start);
  12987. var end = this.parsePoint(coord, this.end);
  12988. if (!start || !end) {
  12989. return;
  12990. }
  12991. var shape = container.addShape('rect', {
  12992. className: 'guide-rect',
  12993. attrs: Util.mix({
  12994. x: Math.min(start.x, end.x),
  12995. y: Math.min(start.y, end.y),
  12996. width: Math.abs(end.x - start.x),
  12997. height: Math.abs(start.y - end.y)
  12998. }, this.style)
  12999. });
  13000. this.element = shape;
  13001. return shape;
  13002. };
  13003. return Rect;
  13004. }(GuideBase);
  13005. GuideBase.Rect = Rect;
  13006. module.exports = Rect;
  13007. /***/ }),
  13008. /* 227 */
  13009. /***/ (function(module, exports, __webpack_require__) {
  13010. "use strict";
  13011. var _interopRequireDefault = __webpack_require__(1);
  13012. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  13013. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  13014. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  13015. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  13016. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  13017. var Util = __webpack_require__(0);
  13018. var GuideBase = __webpack_require__(23);
  13019. var Text = /*#__PURE__*/function (_GuideBase) {
  13020. (0, _inheritsLoose2["default"])(Text, _GuideBase);
  13021. var _super = _createSuper(Text);
  13022. function Text() {
  13023. return _GuideBase.apply(this, arguments) || this;
  13024. }
  13025. var _proto = Text.prototype;
  13026. _proto._initDefaultCfg = function _initDefaultCfg() {
  13027. this.type = 'text';
  13028. /**
  13029. * the position of text
  13030. * @type {Function | Array}
  13031. */
  13032. this.position = null;
  13033. /**
  13034. * the display content
  13035. * @type {String}
  13036. */
  13037. this.content = null;
  13038. /**
  13039. * style configuration for text
  13040. * @type {Object}
  13041. */
  13042. this.style = {
  13043. fill: '#000'
  13044. };
  13045. /**
  13046. * offset of horizontal direction
  13047. * @type {Number}
  13048. */
  13049. this.offsetX = 0;
  13050. /**
  13051. * offset of vertical direction
  13052. * @type {Number}
  13053. */
  13054. this.offsetY = 0;
  13055. };
  13056. _proto.render = function render(coord, container) {
  13057. var position = this.position;
  13058. var point = this.parsePoint(coord, position);
  13059. if (!point) {
  13060. return;
  13061. }
  13062. var content = this.content,
  13063. style = this.style,
  13064. offsetX = this.offsetX,
  13065. offsetY = this.offsetY;
  13066. if (offsetX) {
  13067. point.x += offsetX;
  13068. }
  13069. if (offsetY) {
  13070. point.y += offsetY;
  13071. }
  13072. var shape = container.addShape('text', {
  13073. className: 'guide-text',
  13074. attrs: Util.mix({
  13075. x: point.x,
  13076. y: point.y,
  13077. text: content
  13078. }, style)
  13079. });
  13080. this.element = shape;
  13081. return shape;
  13082. };
  13083. return Text;
  13084. }(GuideBase);
  13085. GuideBase.Text = Text;
  13086. module.exports = Text;
  13087. /***/ }),
  13088. /* 228 */
  13089. /***/ (function(module, exports, __webpack_require__) {
  13090. "use strict";
  13091. var _interopRequireDefault = __webpack_require__(1);
  13092. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  13093. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  13094. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  13095. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  13096. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  13097. var Util = __webpack_require__(0);
  13098. var GuideBase = __webpack_require__(23);
  13099. var Tag = /*#__PURE__*/function (_GuideBase) {
  13100. (0, _inheritsLoose2["default"])(Tag, _GuideBase);
  13101. var _super = _createSuper(Tag);
  13102. function Tag() {
  13103. return _GuideBase.apply(this, arguments) || this;
  13104. }
  13105. var _proto = Tag.prototype;
  13106. _proto._initDefaultCfg = function _initDefaultCfg() {
  13107. this.type = 'tag';
  13108. this.position = null;
  13109. this.content = null;
  13110. this.direct = 'tl';
  13111. this.autoAdjust = true;
  13112. this.offsetX = 0;
  13113. this.offsetY = 0;
  13114. this.side = 4;
  13115. this.background = {
  13116. padding: 5,
  13117. radius: 2,
  13118. fill: '#1890FF'
  13119. };
  13120. this.textStyle = {
  13121. fontSize: 12,
  13122. fill: '#fff',
  13123. textAlign: 'center',
  13124. textBaseline: 'middle'
  13125. };
  13126. this.withPoint = true;
  13127. this.pointStyle = {
  13128. fill: '#1890FF',
  13129. r: 3,
  13130. lineWidth: 1,
  13131. stroke: '#fff'
  13132. };
  13133. };
  13134. _proto._getDirect = function _getDirect(container, point, tagWidth, tagHeight) {
  13135. var direct = this.direct;
  13136. var side = this.side;
  13137. var canvas = container.get('canvas');
  13138. var clientWidth = canvas.get('width');
  13139. var clientHeight = canvas.get('height');
  13140. var x = point.x,
  13141. y = point.y;
  13142. var vertical = direct[0];
  13143. var horizontal = direct[1]; // adjust for vertical direction
  13144. if (vertical === 't' && y - side - tagHeight < 0) {
  13145. vertical = 'b';
  13146. } else if (vertical === 'b' && y + side + tagHeight > clientHeight) {
  13147. vertical = 't';
  13148. } // adjust for horizontal direction
  13149. var diff = vertical === 'c' ? side : 0;
  13150. if (horizontal === 'l' && x - diff - tagWidth < 0) {
  13151. horizontal = 'r';
  13152. } else if (horizontal === 'r' && x + diff + tagWidth > clientWidth) {
  13153. horizontal = 'l';
  13154. } else if (horizontal === 'c') {
  13155. if (tagWidth / 2 + x + diff > clientWidth) {
  13156. horizontal = 'l';
  13157. } else if (x - tagWidth / 2 - diff < 0) {
  13158. horizontal = 'r';
  13159. }
  13160. }
  13161. direct = vertical + horizontal;
  13162. return direct;
  13163. };
  13164. _proto.render = function render(coord, container) {
  13165. var position = this.parsePoint(coord, this.position);
  13166. if (!position) {
  13167. return;
  13168. } // 数据不在显示范围内时,x/y 会为NaN
  13169. if (isNaN(position.x) || isNaN(position.y)) {
  13170. return;
  13171. }
  13172. var content = this.content,
  13173. background = this.background,
  13174. textStyle = this.textStyle;
  13175. var shapes = [];
  13176. var wrapperContainer = container.addGroup({
  13177. className: 'guide-tag'
  13178. });
  13179. if (this.withPoint) {
  13180. var pointShape = wrapperContainer.addShape('Circle', {
  13181. className: 'guide-tag-point',
  13182. attrs: Util.mix({
  13183. x: position.x,
  13184. y: position.y
  13185. }, this.pointStyle)
  13186. });
  13187. shapes.push(pointShape);
  13188. }
  13189. var tagContainer = wrapperContainer.addGroup(); // create a text shape
  13190. var tagText = tagContainer.addShape('text', {
  13191. className: 'guide-tag-text',
  13192. zIndex: 1,
  13193. attrs: Util.mix({
  13194. x: 0,
  13195. y: 0,
  13196. text: content
  13197. }, textStyle)
  13198. });
  13199. shapes.push(tagText); // create background box
  13200. var textBBox = tagText.getBBox();
  13201. var padding = Util.parsePadding(background.padding);
  13202. var tagWidth = textBBox.width + padding[1] + padding[3];
  13203. var tagHeight = textBBox.height + padding[0] + padding[2];
  13204. var yMin = textBBox.minY - padding[0];
  13205. var xMin = textBBox.minX - padding[3];
  13206. var tagBg = tagContainer.addShape('rect', {
  13207. className: 'guide-tag-bg',
  13208. zIndex: -1,
  13209. attrs: Util.mix({
  13210. x: xMin,
  13211. y: yMin,
  13212. width: tagWidth,
  13213. height: tagHeight
  13214. }, background)
  13215. });
  13216. shapes.push(tagBg);
  13217. var direct = this.autoAdjust ? this._getDirect(container, position, tagWidth, tagHeight) : this.direct;
  13218. var side = this.side;
  13219. var x = position.x + this.offsetX;
  13220. var y = position.y + this.offsetY;
  13221. var arrowPoints;
  13222. var radius = Util.parsePadding(background.radius);
  13223. if (direct === 'tl') {
  13224. arrowPoints = [{
  13225. x: tagWidth + xMin - side - 1,
  13226. y: tagHeight + yMin - 1
  13227. }, // 这个 1 是为了防止出现白边
  13228. {
  13229. x: tagWidth + xMin,
  13230. y: tagHeight + yMin - 1
  13231. }, {
  13232. x: tagWidth + xMin,
  13233. y: tagHeight + side + yMin
  13234. }];
  13235. radius[2] = 0;
  13236. x = x - tagWidth;
  13237. y = y - side - tagHeight;
  13238. } else if (direct === 'cl') {
  13239. arrowPoints = [{
  13240. x: tagWidth + xMin - 1,
  13241. y: (tagHeight - side) / 2 + yMin - 1
  13242. }, {
  13243. x: tagWidth + xMin - 1,
  13244. y: (tagHeight + side) / 2 + yMin + 1
  13245. }, {
  13246. x: tagWidth + side + xMin,
  13247. y: tagHeight / 2 + yMin
  13248. }];
  13249. x = x - tagWidth - side;
  13250. y = y - tagHeight / 2;
  13251. } else if (direct === 'bl') {
  13252. arrowPoints = [{
  13253. x: tagWidth + xMin,
  13254. y: -side + yMin
  13255. }, {
  13256. x: tagWidth + xMin - side - 1,
  13257. y: yMin + 1
  13258. }, {
  13259. x: tagWidth + xMin,
  13260. y: yMin + 1
  13261. }];
  13262. radius[1] = 0;
  13263. x = x - tagWidth;
  13264. y = y + side;
  13265. } else if (direct === 'bc') {
  13266. arrowPoints = [{
  13267. x: tagWidth / 2 + xMin,
  13268. y: -side + yMin
  13269. }, {
  13270. x: (tagWidth - side) / 2 + xMin - 1,
  13271. y: yMin + 1
  13272. }, {
  13273. x: (tagWidth + side) / 2 + xMin + 1,
  13274. y: yMin + 1
  13275. }];
  13276. x = x - tagWidth / 2;
  13277. y = y + side;
  13278. } else if (direct === 'br') {
  13279. arrowPoints = [{
  13280. x: xMin,
  13281. y: yMin - side
  13282. }, {
  13283. x: xMin,
  13284. y: yMin + 1
  13285. }, {
  13286. x: xMin + side + 1,
  13287. y: yMin + 1
  13288. }];
  13289. radius[0] = 0;
  13290. y = y + side;
  13291. } else if (direct === 'cr') {
  13292. arrowPoints = [{
  13293. x: xMin - side,
  13294. y: tagHeight / 2 + yMin
  13295. }, {
  13296. x: xMin + 1,
  13297. y: (tagHeight - side) / 2 + yMin - 1
  13298. }, {
  13299. x: xMin + 1,
  13300. y: (tagHeight + side) / 2 + yMin + 1
  13301. }];
  13302. x = x + side;
  13303. y = y - tagHeight / 2;
  13304. } else if (direct === 'tr') {
  13305. arrowPoints = [{
  13306. x: xMin,
  13307. y: tagHeight + side + yMin
  13308. }, {
  13309. x: xMin,
  13310. y: tagHeight + yMin - 1
  13311. }, {
  13312. x: side + xMin + 1,
  13313. y: tagHeight + yMin - 1
  13314. }];
  13315. radius[3] = 0;
  13316. y = y - tagHeight - side;
  13317. } else if (direct === 'tc') {
  13318. arrowPoints = [{
  13319. x: (tagWidth - side) / 2 + xMin - 1,
  13320. y: tagHeight + yMin - 1
  13321. }, {
  13322. x: (tagWidth + side) / 2 + xMin + 1,
  13323. y: tagHeight + yMin - 1
  13324. }, {
  13325. x: tagWidth / 2 + xMin,
  13326. y: tagHeight + side + yMin
  13327. }];
  13328. x = x - tagWidth / 2;
  13329. y = y - tagHeight - side;
  13330. }
  13331. var sideShape = tagContainer.addShape('Polygon', {
  13332. className: 'guide-tag-side',
  13333. zIndex: 0,
  13334. attrs: {
  13335. points: arrowPoints,
  13336. fill: background.fill
  13337. }
  13338. });
  13339. shapes.push(sideShape);
  13340. tagBg.attr('radius', radius);
  13341. tagContainer.moveTo(x - xMin, y - yMin);
  13342. tagContainer.sort();
  13343. this.element = wrapperContainer;
  13344. return shapes;
  13345. };
  13346. return Tag;
  13347. }(GuideBase);
  13348. GuideBase.Tag = Tag;
  13349. module.exports = Tag;
  13350. /***/ }),
  13351. /* 229 */
  13352. /***/ (function(module, exports, __webpack_require__) {
  13353. "use strict";
  13354. var _interopRequireDefault = __webpack_require__(1);
  13355. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  13356. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  13357. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  13358. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  13359. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  13360. var Util = __webpack_require__(0);
  13361. var GuideBase = __webpack_require__(23);
  13362. var Point = /*#__PURE__*/function (_GuideBase) {
  13363. (0, _inheritsLoose2["default"])(Point, _GuideBase);
  13364. var _super = _createSuper(Point);
  13365. function Point() {
  13366. return _GuideBase.apply(this, arguments) || this;
  13367. }
  13368. var _proto = Point.prototype;
  13369. _proto._initDefaultCfg = function _initDefaultCfg() {
  13370. this.type = 'point';
  13371. this.position = null;
  13372. this.offsetX = 0;
  13373. this.offsetY = 0;
  13374. this.style = {
  13375. fill: '#1890FF',
  13376. r: 3,
  13377. lineWidth: 1,
  13378. stroke: '#fff'
  13379. };
  13380. };
  13381. _proto.render = function render(coord, container) {
  13382. var position = this.parsePoint(coord, this.position);
  13383. if (!position) return null;
  13384. var shape = container.addShape('Circle', {
  13385. className: 'guide-point',
  13386. attrs: Util.mix({
  13387. x: position.x + this.offsetX,
  13388. y: position.y + this.offsetY
  13389. }, this.style)
  13390. });
  13391. this.element = shape;
  13392. return shape;
  13393. };
  13394. return Point;
  13395. }(GuideBase);
  13396. GuideBase.Point = Point;
  13397. module.exports = Point;
  13398. /***/ }),
  13399. /* 230 */
  13400. /***/ (function(module, exports, __webpack_require__) {
  13401. "use strict";
  13402. var Util = __webpack_require__(0);
  13403. var Global = __webpack_require__(6);
  13404. var Tooltip = __webpack_require__(231);
  13405. var Helper = __webpack_require__(37); // Register the default configuration for Tooltip
  13406. Global.tooltip = Util.deepMix({
  13407. triggerOn: 'press',
  13408. triggerOff: 'pressend',
  13409. alwaysShow: false,
  13410. showTitle: false,
  13411. showCrosshairs: false,
  13412. crosshairsStyle: {
  13413. stroke: 'rgba(0, 0, 0, 0.25)',
  13414. lineWidth: 1
  13415. },
  13416. showTooltipMarker: true,
  13417. background: {
  13418. radius: 1,
  13419. fill: 'rgba(0, 0, 0, 0.65)',
  13420. padding: [3, 5]
  13421. },
  13422. titleStyle: {
  13423. fontSize: 12,
  13424. fill: '#fff',
  13425. textAlign: 'start',
  13426. textBaseline: 'top'
  13427. },
  13428. nameStyle: {
  13429. fontSize: 12,
  13430. fill: 'rgba(255, 255, 255, 0.65)',
  13431. textAlign: 'start',
  13432. textBaseline: 'middle'
  13433. },
  13434. valueStyle: {
  13435. fontSize: 12,
  13436. fill: '#fff',
  13437. textAlign: 'start',
  13438. textBaseline: 'middle'
  13439. },
  13440. showItemMarker: true,
  13441. itemMarkerStyle: {
  13442. radius: 3,
  13443. symbol: 'circle',
  13444. lineWidth: 1,
  13445. stroke: '#fff'
  13446. },
  13447. layout: 'horizontal',
  13448. snap: false
  13449. }, Global.tooltip || {});
  13450. function _getTooltipValueScale(geom) {
  13451. var colorAttr = geom.getAttr('color');
  13452. if (colorAttr) {
  13453. var colorScale = colorAttr.getScale(colorAttr.type);
  13454. if (colorScale.isLinear) {
  13455. return colorScale;
  13456. }
  13457. }
  13458. var xScale = geom.getXScale();
  13459. var yScale = geom.getYScale();
  13460. if (yScale) {
  13461. return yScale;
  13462. }
  13463. return xScale;
  13464. }
  13465. function getTooltipName(geom, origin) {
  13466. var name;
  13467. var nameScale;
  13468. var groupScales = geom._getGroupScales();
  13469. if (groupScales.length) {
  13470. Util.each(groupScales, function (scale) {
  13471. nameScale = scale;
  13472. return false;
  13473. });
  13474. }
  13475. if (nameScale) {
  13476. var field = nameScale.field;
  13477. name = nameScale.getText(origin[field]);
  13478. } else {
  13479. var valueScale = _getTooltipValueScale(geom);
  13480. name = valueScale.alias || valueScale.field;
  13481. }
  13482. return name;
  13483. }
  13484. function getTooltipValue(geom, origin) {
  13485. var scale = _getTooltipValueScale(geom);
  13486. return scale.getText(origin[scale.field]);
  13487. }
  13488. function getTooltipTitle(geom, origin) {
  13489. var position = geom.getAttr('position');
  13490. var field = position.getFields()[0];
  13491. var scale = geom.get('scales')[field];
  13492. return scale.getText(origin[scale.field]);
  13493. }
  13494. function _indexOfArray(items, item) {
  13495. var rst = -1;
  13496. Util.each(items, function (sub, index) {
  13497. if (sub.title === item.title && sub.name === item.name && sub.value === item.value && sub.color === item.color) {
  13498. rst = index;
  13499. return false;
  13500. }
  13501. });
  13502. return rst;
  13503. }
  13504. function _uniqItems(items) {
  13505. var tmp = [];
  13506. Util.each(items, function (item) {
  13507. var index = _indexOfArray(tmp, item);
  13508. if (index === -1) {
  13509. tmp.push(item);
  13510. } else {
  13511. tmp[index] = item;
  13512. }
  13513. });
  13514. return tmp;
  13515. }
  13516. function isEqual(arr1, arr2) {
  13517. return JSON.stringify(arr1) === JSON.stringify(arr2);
  13518. }
  13519. var TooltipController = /*#__PURE__*/function () {
  13520. function TooltipController(cfg) {
  13521. var _this = this;
  13522. this.handleShowEvent = function (ev) {
  13523. var chart = _this.chart;
  13524. if (!_this.enable) return;
  13525. var plot = chart.get('plotRange');
  13526. var point = Util.createEvent(ev, chart);
  13527. if (!Helper.isPointInPlot(point, plot) && !_this._tooltipCfg.alwaysShow) {
  13528. // not in chart plot
  13529. _this.hideTooltip();
  13530. return;
  13531. }
  13532. var lastTimeStamp = _this.timeStamp;
  13533. var timeStamp = +new Date();
  13534. if (timeStamp - lastTimeStamp > 16) {
  13535. _this.showTooltip(point);
  13536. _this.timeStamp = timeStamp;
  13537. }
  13538. };
  13539. this.handleHideEvent = function () {
  13540. if (!_this.enable) return;
  13541. _this.hideTooltip();
  13542. };
  13543. this.enable = true;
  13544. this.cfg = {};
  13545. this.tooltip = null;
  13546. this.chart = null;
  13547. this.timeStamp = 0;
  13548. Util.mix(this, cfg);
  13549. var _chart = this.chart;
  13550. var canvas = _chart.get('canvas');
  13551. this.canvas = canvas;
  13552. this.canvasDom = canvas.get('el');
  13553. }
  13554. var _proto = TooltipController.prototype;
  13555. _proto._setCrosshairsCfg = function _setCrosshairsCfg() {
  13556. var self = this;
  13557. var chart = self.chart;
  13558. var defaultCfg = Util.mix({}, Global.tooltip);
  13559. var geoms = chart.get('geoms');
  13560. var shapes = [];
  13561. Util.each(geoms, function (geom) {
  13562. var type = geom.get('type');
  13563. if (shapes.indexOf(type) === -1) {
  13564. shapes.push(type);
  13565. }
  13566. });
  13567. var coordType = chart.get('coord').type;
  13568. if (geoms.length && (coordType === 'cartesian' || coordType === 'rect')) {
  13569. if (shapes.length === 1 && ['line', 'area', 'path', 'point'].indexOf(shapes[0]) !== -1) {
  13570. Util.mix(defaultCfg, {
  13571. showCrosshairs: true
  13572. });
  13573. }
  13574. }
  13575. return defaultCfg;
  13576. };
  13577. _proto._getMaxLength = function _getMaxLength(cfg) {
  13578. if (cfg === void 0) {
  13579. cfg = {};
  13580. }
  13581. var _cfg = cfg,
  13582. layout = _cfg.layout,
  13583. plotRange = _cfg.plotRange;
  13584. return layout === 'horizontal' ? plotRange.br.x - plotRange.bl.x : plotRange.bl.y - plotRange.tr.y;
  13585. };
  13586. _proto.render = function render() {
  13587. var self = this;
  13588. if (self.tooltip) {
  13589. return;
  13590. }
  13591. var chart = self.chart;
  13592. var canvas = chart.get('canvas');
  13593. var frontPlot = chart.get('frontPlot').addGroup({
  13594. className: 'tooltipContainer',
  13595. zIndex: 10
  13596. });
  13597. var backPlot = chart.get('backPlot').addGroup({
  13598. className: 'tooltipContainer'
  13599. });
  13600. var plotRange = chart.get('plotRange');
  13601. var coord = chart.get('coord');
  13602. var defaultCfg = self._setCrosshairsCfg();
  13603. var cfg = self.cfg; // 通过 chart.tooltip() 接口传入的 tooltip 配置项
  13604. var tooltipCfg = Util.deepMix({
  13605. plotRange: plotRange,
  13606. frontPlot: frontPlot,
  13607. backPlot: backPlot,
  13608. canvas: canvas,
  13609. fixed: coord.transposed || coord.isPolar
  13610. }, defaultCfg, cfg); // 创建 tooltip 实例需要的配置,不应该修改 this.cfg,即用户传入的配置
  13611. tooltipCfg.maxLength = self._getMaxLength(tooltipCfg);
  13612. this._tooltipCfg = tooltipCfg;
  13613. var tooltip = new Tooltip(tooltipCfg);
  13614. self.tooltip = tooltip;
  13615. self.bindEvents();
  13616. };
  13617. _proto.clear = function clear() {
  13618. var tooltip = this.tooltip;
  13619. if (tooltip) {
  13620. tooltip.destroy();
  13621. this.unBindEvents();
  13622. }
  13623. this.tooltip = null;
  13624. this.prePoint = null;
  13625. this._lastActive = null;
  13626. };
  13627. _proto._getTooltipMarkerStyle = function _getTooltipMarkerStyle(cfg) {
  13628. if (cfg === void 0) {
  13629. cfg = {};
  13630. }
  13631. var _cfg2 = cfg,
  13632. type = _cfg2.type,
  13633. items = _cfg2.items;
  13634. var tooltipCfg = this._tooltipCfg;
  13635. if (type === 'rect') {
  13636. var x;
  13637. var y;
  13638. var width;
  13639. var height;
  13640. var chart = this.chart;
  13641. var _chart$get = chart.get('plotRange'),
  13642. tl = _chart$get.tl,
  13643. br = _chart$get.br;
  13644. var coord = chart.get('coord');
  13645. var firstItem = items[0];
  13646. var lastItem = items[items.length - 1];
  13647. var intervalWidth = firstItem.width;
  13648. if (coord.transposed) {
  13649. x = tl.x;
  13650. y = lastItem.y - intervalWidth * 0.75;
  13651. width = br.x - tl.x;
  13652. height = firstItem.y - lastItem.y + 1.5 * intervalWidth;
  13653. } else {
  13654. x = firstItem.x - intervalWidth * 0.75;
  13655. y = tl.y;
  13656. width = lastItem.x - firstItem.x + 1.5 * intervalWidth;
  13657. height = br.y - tl.y;
  13658. }
  13659. cfg.style = Util.mix({
  13660. x: x,
  13661. y: y,
  13662. width: width,
  13663. height: height,
  13664. fill: '#CCD6EC',
  13665. opacity: 0.3
  13666. }, tooltipCfg.tooltipMarkerStyle);
  13667. } else {
  13668. cfg.style = Util.mix({
  13669. radius: 4,
  13670. fill: '#fff',
  13671. lineWidth: 2
  13672. }, tooltipCfg.tooltipMarkerStyle);
  13673. }
  13674. return cfg;
  13675. };
  13676. _proto._setTooltip = function _setTooltip(point, items, tooltipMarkerCfg) {
  13677. if (tooltipMarkerCfg === void 0) {
  13678. tooltipMarkerCfg = {};
  13679. }
  13680. var lastActive = this._lastActive;
  13681. var tooltip = this.tooltip;
  13682. var cfg = this._tooltipCfg;
  13683. items = _uniqItems(items);
  13684. var chart = this.chart;
  13685. var coord = chart.get('coord');
  13686. var yScale = chart.getYScales()[0];
  13687. var snap = cfg.snap;
  13688. if (snap === false && yScale.isLinear) {
  13689. var invertPoint = coord.invertPoint(point);
  13690. var plot = chart.get('plotRange');
  13691. var tip;
  13692. var pos;
  13693. if (Helper.isPointInPlot(point, plot)) {
  13694. if (coord.transposed) {
  13695. tip = yScale.invert(invertPoint.x);
  13696. pos = point.x;
  13697. tooltip.setXTipContent(tip);
  13698. tooltip.setXTipPosition(pos);
  13699. tooltip.setYCrosshairPosition(pos);
  13700. } else {
  13701. tip = yScale.invert(invertPoint.y);
  13702. pos = point.y;
  13703. tooltip.setYTipContent(tip);
  13704. tooltip.setYTipPosition(pos);
  13705. tooltip.setXCrosshairPosition(pos);
  13706. }
  13707. }
  13708. }
  13709. if (cfg.onShow) {
  13710. cfg.onShow({
  13711. x: point.x,
  13712. y: point.y,
  13713. tooltip: tooltip,
  13714. items: items,
  13715. tooltipMarkerCfg: tooltipMarkerCfg
  13716. });
  13717. }
  13718. if (isEqual(lastActive, items)) {
  13719. if (snap === false && (Util.directionEnabled(cfg.crosshairsType, 'y') || cfg.showYTip)) {
  13720. var canvas = this.chart.get('canvas');
  13721. canvas.draw();
  13722. }
  13723. return;
  13724. }
  13725. this._lastActive = items;
  13726. var onChange = cfg.onChange;
  13727. if (onChange) {
  13728. onChange({
  13729. x: point.x,
  13730. y: point.y,
  13731. tooltip: tooltip,
  13732. items: items,
  13733. tooltipMarkerCfg: tooltipMarkerCfg
  13734. });
  13735. }
  13736. var first = items[0];
  13737. var title = first.title || first.name;
  13738. var xTipPosX = first.x;
  13739. if (items.length > 1) {
  13740. xTipPosX = (items[0].x + items[items.length - 1].x) / 2;
  13741. }
  13742. tooltip.setContent(title, items, coord.transposed);
  13743. tooltip.setPosition(items, point);
  13744. if (coord.transposed) {
  13745. var yTipPosY = first.y;
  13746. if (items.length > 1) {
  13747. yTipPosY = (items[0].y + items[items.length - 1].y) / 2;
  13748. }
  13749. tooltip.setYTipContent(title);
  13750. tooltip.setYTipPosition(yTipPosY);
  13751. tooltip.setXCrosshairPosition(yTipPosY);
  13752. if (snap) {
  13753. tooltip.setXTipContent(first.value);
  13754. tooltip.setXTipPosition(xTipPosX);
  13755. tooltip.setYCrosshairPosition(xTipPosX);
  13756. }
  13757. } else {
  13758. tooltip.setXTipContent(title);
  13759. tooltip.setXTipPosition(xTipPosX);
  13760. tooltip.setYCrosshairPosition(xTipPosX);
  13761. if (snap) {
  13762. tooltip.setYTipContent(first.value);
  13763. tooltip.setYTipPosition(first.y);
  13764. tooltip.setXCrosshairPosition(first.y);
  13765. }
  13766. }
  13767. var markerItems = tooltipMarkerCfg.items;
  13768. if (cfg.showTooltipMarker && markerItems.length) {
  13769. tooltipMarkerCfg = this._getTooltipMarkerStyle(tooltipMarkerCfg);
  13770. tooltip.setMarkers(tooltipMarkerCfg);
  13771. } else {
  13772. tooltip.clearMarkers();
  13773. }
  13774. tooltip.show();
  13775. };
  13776. _proto.showTooltip = function showTooltip(point) {
  13777. var self = this;
  13778. var chart = self.chart;
  13779. var tooltipMarkerType;
  13780. var tooltipMarkerItems = [];
  13781. var items = [];
  13782. var cfg = self._tooltipCfg;
  13783. var marker;
  13784. if (cfg.showItemMarker) {
  13785. marker = cfg.itemMarkerStyle;
  13786. }
  13787. var geoms = chart.get('geoms');
  13788. var coord = chart.get('coord');
  13789. Util.each(geoms, function (geom) {
  13790. if (geom.get('visible')) {
  13791. var type = geom.get('type');
  13792. var records = geom.getSnapRecords(point);
  13793. var adjust = geom.get('adjust'); // 漏斗图和金子塔图tooltip位置有问题,暂时不开放显示
  13794. if (type === 'interval' && adjust && adjust.type === 'symmetric') {
  13795. return;
  13796. }
  13797. Util.each(records, function (record) {
  13798. if (record.x && record.y) {
  13799. var x = record.x,
  13800. y = record.y,
  13801. _origin = record._origin,
  13802. color = record.color;
  13803. var tooltipItem = {
  13804. x: x,
  13805. y: Util.isArray(y) ? y[1] : y,
  13806. color: color || Global.defaultColor,
  13807. origin: _origin,
  13808. name: getTooltipName(geom, _origin),
  13809. value: getTooltipValue(geom, _origin),
  13810. title: getTooltipTitle(geom, _origin)
  13811. };
  13812. if (marker) {
  13813. tooltipItem.marker = Util.mix({
  13814. fill: color || Global.defaultColor
  13815. }, marker);
  13816. }
  13817. items.push(tooltipItem);
  13818. if (['line', 'area', 'path'].indexOf(type) !== -1) {
  13819. tooltipMarkerType = 'circle';
  13820. tooltipMarkerItems.push(tooltipItem);
  13821. } else if (type === 'interval' && (coord.type === 'cartesian' || coord.type === 'rect')) {
  13822. tooltipMarkerType = 'rect';
  13823. tooltipItem.width = geom.getSize(record._origin);
  13824. tooltipMarkerItems.push(tooltipItem);
  13825. }
  13826. }
  13827. });
  13828. }
  13829. });
  13830. if (items.length) {
  13831. var tooltipMarkerCfg = {
  13832. items: tooltipMarkerItems,
  13833. type: tooltipMarkerType
  13834. };
  13835. self._setTooltip(point, items, tooltipMarkerCfg);
  13836. } else {
  13837. self.hideTooltip();
  13838. }
  13839. };
  13840. _proto.hideTooltip = function hideTooltip() {
  13841. var cfg = this._tooltipCfg;
  13842. this._lastActive = null;
  13843. var tooltip = this.tooltip;
  13844. if (tooltip) {
  13845. tooltip.hide();
  13846. if (cfg.onHide) {
  13847. cfg.onHide({
  13848. tooltip: tooltip
  13849. });
  13850. }
  13851. var canvas = this.chart.get('canvas');
  13852. canvas.draw();
  13853. }
  13854. };
  13855. _proto._handleEvent = function _handleEvent(methodName, method, action) {
  13856. var canvas = this.canvas;
  13857. Util.each([].concat(methodName), function (aMethod) {
  13858. if (action === 'bind') {
  13859. canvas.on(aMethod, method);
  13860. } else {
  13861. canvas.off(aMethod, method);
  13862. }
  13863. });
  13864. };
  13865. _proto.bindEvents = function bindEvents() {
  13866. var cfg = this._tooltipCfg;
  13867. var triggerOn = cfg.triggerOn,
  13868. triggerOff = cfg.triggerOff,
  13869. alwaysShow = cfg.alwaysShow;
  13870. triggerOn && this._handleEvent(triggerOn, this.handleShowEvent, 'bind'); // 如果 !alwaysShow, 则在手势离开后就隐藏
  13871. if (!alwaysShow) {
  13872. this._handleEvent(triggerOff, this.handleHideEvent, 'bind');
  13873. }
  13874. };
  13875. _proto.unBindEvents = function unBindEvents() {
  13876. var cfg = this._tooltipCfg;
  13877. var triggerOn = cfg.triggerOn,
  13878. triggerOff = cfg.triggerOff,
  13879. alwaysShow = cfg.alwaysShow;
  13880. triggerOn && this._handleEvent(triggerOn, this.handleShowEvent, 'unBind');
  13881. if (!alwaysShow) {
  13882. this._handleEvent(triggerOff, this.handleHideEvent, 'unBind');
  13883. }
  13884. };
  13885. return TooltipController;
  13886. }();
  13887. module.exports = {
  13888. init: function init(chart) {
  13889. var tooltipController = new TooltipController({
  13890. chart: chart
  13891. });
  13892. chart.set('tooltipController', tooltipController);
  13893. chart.tooltip = function (enable, cfg) {
  13894. if (Util.isObject(enable)) {
  13895. cfg = enable;
  13896. enable = true;
  13897. }
  13898. tooltipController.enable = enable;
  13899. if (cfg) {
  13900. tooltipController.cfg = cfg;
  13901. }
  13902. return this;
  13903. };
  13904. },
  13905. afterGeomDraw: function afterGeomDraw(chart) {
  13906. var tooltipController = chart.get('tooltipController');
  13907. tooltipController.render();
  13908. chart.showTooltip = function (point) {
  13909. tooltipController.showTooltip(point);
  13910. return this;
  13911. };
  13912. chart.hideTooltip = function () {
  13913. tooltipController.hideTooltip();
  13914. return this;
  13915. };
  13916. },
  13917. clearInner: function clearInner(chart) {
  13918. var tooltipController = chart.get('tooltipController');
  13919. tooltipController.clear();
  13920. }
  13921. };
  13922. /***/ }),
  13923. /* 231 */
  13924. /***/ (function(module, exports, __webpack_require__) {
  13925. "use strict";
  13926. var Util = __webpack_require__(0);
  13927. var Marker = __webpack_require__(76);
  13928. var Container = __webpack_require__(205);
  13929. var TextBox = __webpack_require__(232);
  13930. var GAP = 4;
  13931. /**
  13932. * TODOList:
  13933. * 1. 移除 fixed 参数
  13934. */
  13935. var Tooltip = /*#__PURE__*/function () {
  13936. var _proto = Tooltip.prototype;
  13937. _proto.getDefaultCfg = function getDefaultCfg() {
  13938. return {
  13939. /**
  13940. * wether show the crosshairs
  13941. * @type {Object}
  13942. */
  13943. showCrosshairs: false,
  13944. /**
  13945. * the style for crosshairs
  13946. * @type {Object}
  13947. */
  13948. crosshairsStyle: {
  13949. stroke: 'rgba(0, 0, 0, 0.25)',
  13950. lineWidth: 1
  13951. },
  13952. /**
  13953. * the type of crosshairs, optional value is 'x', 'y' or 'xy', default is 'y'
  13954. */
  13955. crosshairsType: 'y',
  13956. /**
  13957. * show or hide the x axis tip
  13958. */
  13959. showXTip: false,
  13960. /**
  13961. * show or hide the y axis tip
  13962. */
  13963. showYTip: false,
  13964. xTip: null,
  13965. xTipBackground: {
  13966. radius: 1,
  13967. fill: 'rgba(0, 0, 0, 0.65)',
  13968. padding: [3, 5]
  13969. },
  13970. yTip: null,
  13971. yTipBackground: {
  13972. radius: 1,
  13973. fill: 'rgba(0, 0, 0, 0.65)',
  13974. padding: [3, 5]
  13975. },
  13976. /**
  13977. * the style for tooltip container's background
  13978. * @type {Object}
  13979. */
  13980. background: null,
  13981. /**
  13982. * layout, can be horizontal or vertical
  13983. * @type {String}
  13984. */
  13985. layout: 'horizontal',
  13986. offsetX: 0,
  13987. offsetY: 0
  13988. };
  13989. };
  13990. function Tooltip(cfg) {
  13991. Util.deepMix(this, this.getDefaultCfg(), cfg);
  13992. var frontPlot = this.frontPlot,
  13993. custom = this.custom;
  13994. if (!custom) {
  13995. // custom means user do customize
  13996. var container = new Container(Util.mix({
  13997. parent: frontPlot,
  13998. zIndex: 3
  13999. }, cfg));
  14000. this.container = container;
  14001. var fixed = this.fixed,
  14002. background = this.background;
  14003. if (!fixed) {
  14004. this.tooltipArrow = frontPlot.addShape('Polygon', {
  14005. className: 'tooltip-arrow',
  14006. visible: false,
  14007. zIndex: 2,
  14008. attrs: Util.mix({
  14009. points: []
  14010. }, background)
  14011. });
  14012. }
  14013. }
  14014. if (this.showXTip) {
  14015. var xTipBackground = this.xTipBackground;
  14016. var xTipBox = new TextBox({
  14017. className: 'xTip',
  14018. background: xTipBackground,
  14019. visible: false
  14020. });
  14021. frontPlot.add(xTipBox.container);
  14022. this.xTipBox = xTipBox;
  14023. }
  14024. if (this.showYTip) {
  14025. var yTipBackground = this.yTipBackground;
  14026. var yTipBox = new TextBox({
  14027. className: 'yTip',
  14028. background: yTipBackground,
  14029. visible: false
  14030. });
  14031. frontPlot.add(yTipBox.container);
  14032. this.yTipBox = yTipBox;
  14033. }
  14034. if (this.showCrosshairs) {
  14035. this._renderCrosshairs();
  14036. }
  14037. frontPlot.sort();
  14038. }
  14039. _proto.setContent = function setContent(title, items) {
  14040. this.title = title;
  14041. this.items = items;
  14042. if (!this.custom) {
  14043. var container = this.container;
  14044. container.setTitle(title);
  14045. container.setItems(items);
  14046. }
  14047. };
  14048. _proto.setYTipContent = function setYTipContent(val) {
  14049. var yTip = this.yTip;
  14050. if (Util.isFunction(yTip)) {
  14051. val = yTip(val);
  14052. } else {
  14053. val = Util.mix({
  14054. text: val
  14055. }, yTip);
  14056. }
  14057. this.yTipBox && this.yTipBox.updateContent(val);
  14058. };
  14059. _proto.setYTipPosition = function setYTipPosition(pos) {
  14060. var plotRange = this.plotRange;
  14061. var crosshairsShapeX = this.crosshairsShapeX;
  14062. if (this.showYTip) {
  14063. var yTipBox = this.yTipBox;
  14064. var yTipHeight = yTipBox.getHeight();
  14065. var yTipWidth = yTipBox.getWidth();
  14066. var posX = plotRange.tl.x - yTipWidth;
  14067. var posY = pos - yTipHeight / 2;
  14068. if (posY <= plotRange.tl.y) {
  14069. posY = plotRange.tl.y;
  14070. }
  14071. if (posY + yTipHeight >= plotRange.br.y) {
  14072. posY = plotRange.br.y - yTipHeight;
  14073. }
  14074. if (posX < 0) {
  14075. posX = plotRange.tl.x;
  14076. crosshairsShapeX && crosshairsShapeX.attr('x1', plotRange.tl.x + yTipWidth);
  14077. }
  14078. yTipBox.updatePosition(posX, posY);
  14079. }
  14080. };
  14081. _proto.setXTipContent = function setXTipContent(val) {
  14082. var xTip = this.xTip;
  14083. if (Util.isFunction(xTip)) {
  14084. val = xTip(val);
  14085. } else {
  14086. val = Util.mix({
  14087. text: val
  14088. }, xTip);
  14089. }
  14090. this.xTipBox && this.xTipBox.updateContent(val);
  14091. };
  14092. _proto.setXTipPosition = function setXTipPosition(pos) {
  14093. var showXTip = this.showXTip,
  14094. canvas = this.canvas,
  14095. plotRange = this.plotRange,
  14096. xTipBox = this.xTipBox,
  14097. crosshairsShapeY = this.crosshairsShapeY;
  14098. if (showXTip) {
  14099. // const el = canvas.get('el');
  14100. // const canvasHeight = Util.getHeight(el);
  14101. var canvasHeight = canvas.get('height');
  14102. var xTipWidth = xTipBox.getWidth();
  14103. var xTipHeight = xTipBox.getHeight();
  14104. var posX = pos - xTipWidth / 2;
  14105. var posY = plotRange.br.y;
  14106. if (posX <= plotRange.tl.x) {
  14107. posX = plotRange.tl.x;
  14108. }
  14109. if (posX + xTipWidth >= plotRange.tr.x) {
  14110. posX = plotRange.tr.x - xTipWidth;
  14111. }
  14112. if (canvasHeight - posY < xTipHeight) {
  14113. posY -= xTipHeight;
  14114. }
  14115. xTipBox.updatePosition(posX, posY);
  14116. crosshairsShapeY && crosshairsShapeY.attr('y1', posY);
  14117. }
  14118. };
  14119. _proto.setXCrosshairPosition = function setXCrosshairPosition(pos) {
  14120. this.crosshairsShapeX && this.crosshairsShapeX.moveTo(0, pos);
  14121. };
  14122. _proto.setYCrosshairPosition = function setYCrosshairPosition(pos) {
  14123. this.crosshairsShapeY && this.crosshairsShapeY.moveTo(pos, 0);
  14124. };
  14125. _proto.setPosition = function setPosition(items) {
  14126. var container = this.container,
  14127. plotRange = this.plotRange,
  14128. offsetX = this.offsetX,
  14129. offsetY = this.offsetY,
  14130. fixed = this.fixed,
  14131. tooltipArrow = this.tooltipArrow;
  14132. if (!container) {
  14133. return;
  14134. }
  14135. var containerBBox = container.container.getBBox();
  14136. var minX = containerBBox.minX,
  14137. minY = containerBBox.minY,
  14138. width = containerBBox.width,
  14139. height = containerBBox.height;
  14140. var tl = plotRange.tl,
  14141. tr = plotRange.tr;
  14142. var posX = 0;
  14143. var posY = tl.y - height - GAP + offsetY;
  14144. if (fixed) {
  14145. var x = (tl.x + tr.x) / 2;
  14146. posX = x - width / 2 + offsetX;
  14147. } else {
  14148. var _x;
  14149. if (items.length > 1) {
  14150. _x = (items[0].x + items[items.length - 1].x) / 2;
  14151. } else {
  14152. _x = items[0].x;
  14153. }
  14154. posX = _x - width / 2 + offsetX;
  14155. if (posX < tl.x) {
  14156. posX = tl.x;
  14157. }
  14158. if (posX + width > tr.x) {
  14159. posX = tr.x - width;
  14160. }
  14161. if (tooltipArrow) {
  14162. tooltipArrow.attr('points', [{
  14163. x: _x - 3,
  14164. y: tl.y - GAP + offsetY
  14165. }, {
  14166. x: _x + 3,
  14167. y: tl.y - GAP + offsetY
  14168. }, {
  14169. x: _x,
  14170. y: tl.y + offsetY
  14171. }]);
  14172. var backShape = container.backShape;
  14173. var radius = Util.parsePadding(backShape.attr('radius'));
  14174. if (_x === tl.x) {
  14175. radius[3] = 0;
  14176. tooltipArrow.attr('points', [{
  14177. x: tl.x,
  14178. y: tl.y + offsetY
  14179. }, {
  14180. x: tl.x,
  14181. y: tl.y - GAP + offsetY
  14182. }, {
  14183. x: tl.x + GAP,
  14184. y: tl.y - GAP + offsetY
  14185. }]);
  14186. } else if (_x === tr.x) {
  14187. radius[2] = 0;
  14188. tooltipArrow.attr('points', [{
  14189. x: tr.x,
  14190. y: tl.y + offsetY
  14191. }, {
  14192. x: tr.x - GAP,
  14193. y: tl.y - GAP + offsetY
  14194. }, {
  14195. x: tr.x,
  14196. y: tl.y - GAP + offsetY
  14197. }]);
  14198. }
  14199. backShape.attr('radius', radius);
  14200. }
  14201. }
  14202. container.moveTo(posX - minX, posY - minY);
  14203. };
  14204. _proto.setMarkers = function setMarkers(cfg) {
  14205. if (cfg === void 0) {
  14206. cfg = {};
  14207. }
  14208. var self = this;
  14209. var _cfg = cfg,
  14210. items = _cfg.items,
  14211. style = _cfg.style,
  14212. type = _cfg.type;
  14213. var markerGroup = self._getMarkerGroup(type);
  14214. if (type === 'circle') {
  14215. for (var i = 0, length = items.length; i < length; i++) {
  14216. var item = items[i];
  14217. var marker = new Marker({
  14218. className: 'tooltip-circle-marker',
  14219. attrs: Util.mix({
  14220. x: item.x,
  14221. y: item.y,
  14222. stroke: item.color
  14223. }, style)
  14224. });
  14225. markerGroup.add(marker);
  14226. }
  14227. } else {
  14228. markerGroup.addShape('rect', {
  14229. className: 'tooltip-rect-marker',
  14230. attrs: style
  14231. });
  14232. }
  14233. };
  14234. _proto.clearMarkers = function clearMarkers() {
  14235. var markerGroup = this.markerGroup;
  14236. markerGroup && markerGroup.clear();
  14237. };
  14238. _proto.show = function show() {
  14239. var crosshairsShapeX = this.crosshairsShapeX;
  14240. var crosshairsShapeY = this.crosshairsShapeY;
  14241. var markerGroup = this.markerGroup;
  14242. var container = this.container;
  14243. var tooltipArrow = this.tooltipArrow;
  14244. var xTipBox = this.xTipBox;
  14245. var yTipBox = this.yTipBox;
  14246. var canvas = this.canvas;
  14247. crosshairsShapeX && crosshairsShapeX.show();
  14248. crosshairsShapeY && crosshairsShapeY.show();
  14249. markerGroup && markerGroup.show();
  14250. container && container.show();
  14251. tooltipArrow && tooltipArrow.show();
  14252. xTipBox && xTipBox.show();
  14253. yTipBox && yTipBox.show();
  14254. canvas.draw();
  14255. };
  14256. _proto.hide = function hide() {
  14257. var crosshairsShapeX = this.crosshairsShapeX;
  14258. var crosshairsShapeY = this.crosshairsShapeY;
  14259. var markerGroup = this.markerGroup;
  14260. var container = this.container;
  14261. var tooltipArrow = this.tooltipArrow;
  14262. var xTipBox = this.xTipBox;
  14263. var yTipBox = this.yTipBox;
  14264. crosshairsShapeX && crosshairsShapeX.hide();
  14265. crosshairsShapeY && crosshairsShapeY.hide();
  14266. markerGroup && markerGroup.hide();
  14267. container && container.hide();
  14268. tooltipArrow && tooltipArrow.hide();
  14269. xTipBox && xTipBox.hide();
  14270. yTipBox && yTipBox.hide();
  14271. };
  14272. _proto.destroy = function destroy() {
  14273. var crosshairsShapeX = this.crosshairsShapeX;
  14274. var crosshairsShapeY = this.crosshairsShapeY;
  14275. var markerGroup = this.markerGroup;
  14276. var container = this.container;
  14277. var tooltipArrow = this.tooltipArrow;
  14278. var xTipBox = this.xTipBox;
  14279. var yTipBox = this.yTipBox;
  14280. crosshairsShapeX && crosshairsShapeX.remove(true);
  14281. crosshairsShapeY && crosshairsShapeY.remove(true);
  14282. markerGroup && markerGroup.remove(true);
  14283. tooltipArrow && tooltipArrow.remove(true);
  14284. container && container.clear();
  14285. xTipBox && xTipBox.clear();
  14286. yTipBox && yTipBox.clear();
  14287. this.destroyed = true;
  14288. };
  14289. _proto._getMarkerGroup = function _getMarkerGroup(type) {
  14290. var markerGroup = this.markerGroup;
  14291. if (!markerGroup) {
  14292. if (type === 'circle') {
  14293. markerGroup = this.frontPlot.addGroup({
  14294. zIndex: 1
  14295. });
  14296. this.frontPlot.sort();
  14297. } else {
  14298. markerGroup = this.backPlot.addGroup();
  14299. }
  14300. this.markerGroup = markerGroup;
  14301. } else {
  14302. markerGroup.clear();
  14303. }
  14304. return markerGroup;
  14305. };
  14306. _proto._renderCrosshairs = function _renderCrosshairs() {
  14307. var crosshairsType = this.crosshairsType,
  14308. crosshairsStyle = this.crosshairsStyle,
  14309. frontPlot = this.frontPlot,
  14310. plotRange = this.plotRange;
  14311. var tl = plotRange.tl,
  14312. br = plotRange.br;
  14313. if (Util.directionEnabled(crosshairsType, 'x')) {
  14314. this.crosshairsShapeX = frontPlot.addShape('Line', {
  14315. className: 'tooltip-crosshairs-x',
  14316. zIndex: 0,
  14317. visible: false,
  14318. attrs: Util.mix({
  14319. x1: tl.x,
  14320. y1: 0,
  14321. x2: br.x,
  14322. y2: 0
  14323. }, crosshairsStyle)
  14324. });
  14325. }
  14326. if (Util.directionEnabled(crosshairsType, 'y')) {
  14327. this.crosshairsShapeY = frontPlot.addShape('Line', {
  14328. className: 'tooltip-crosshairs-y',
  14329. zIndex: 0,
  14330. visible: false,
  14331. attrs: Util.mix({
  14332. x1: 0,
  14333. y1: br.y,
  14334. x2: 0,
  14335. y2: tl.y
  14336. }, crosshairsStyle)
  14337. });
  14338. }
  14339. };
  14340. return Tooltip;
  14341. }();
  14342. module.exports = Tooltip;
  14343. /***/ }),
  14344. /* 232 */
  14345. /***/ (function(module, exports, __webpack_require__) {
  14346. "use strict";
  14347. var Util = __webpack_require__(0);
  14348. var _require = __webpack_require__(16),
  14349. Group = _require.Group;
  14350. var TextBox = /*#__PURE__*/function () {
  14351. var _proto = TextBox.prototype;
  14352. _proto.getDefaultCfg = function getDefaultCfg() {
  14353. return {
  14354. x: 0,
  14355. y: 0,
  14356. content: '',
  14357. textStyle: {
  14358. fontSize: 12,
  14359. fill: '#fff',
  14360. textAlign: 'center',
  14361. textBaseline: 'middle'
  14362. },
  14363. background: {
  14364. radius: 1,
  14365. fill: 'rgba(0, 0, 0, 0.65)',
  14366. padding: [3, 5]
  14367. },
  14368. width: 0,
  14369. height: 0,
  14370. className: ''
  14371. };
  14372. };
  14373. function TextBox(cfg) {
  14374. Util.deepMix(this, this.getDefaultCfg(), cfg);
  14375. this._init();
  14376. var content = this.content,
  14377. x = this.x,
  14378. y = this.y;
  14379. if (!Util.isNil(content)) {
  14380. this.updateContent(content);
  14381. }
  14382. this.updatePosition(x, y);
  14383. }
  14384. _proto._init = function _init() {
  14385. var content = this.content,
  14386. textStyle = this.textStyle,
  14387. background = this.background,
  14388. className = this.className,
  14389. visible = this.visible;
  14390. var container = new Group({
  14391. className: className,
  14392. zIndex: 0,
  14393. visible: visible
  14394. });
  14395. var text = container.addShape('Text', {
  14396. className: className + '-text',
  14397. zIndex: 1,
  14398. attrs: Util.mix({
  14399. text: content,
  14400. x: 0,
  14401. y: 0
  14402. }, textStyle)
  14403. });
  14404. var backgroundShape = container.addShape('Rect', {
  14405. className: className + '-bg',
  14406. zIndex: -1,
  14407. attrs: Util.mix({
  14408. x: 0,
  14409. y: 0,
  14410. width: 0,
  14411. height: 0
  14412. }, background)
  14413. });
  14414. container.sort();
  14415. this.container = container;
  14416. this.textShape = text;
  14417. this.backgroundShape = backgroundShape;
  14418. };
  14419. _proto._getBBox = function _getBBox() {
  14420. var textShape = this.textShape;
  14421. var background = this.background;
  14422. var textBBox = textShape.getBBox();
  14423. var padding = Util.parsePadding(background.padding);
  14424. var width = textBBox.width + padding[1] + padding[3];
  14425. var height = textBBox.height + padding[0] + padding[2];
  14426. var x = textBBox.minX - padding[3];
  14427. var y = textBBox.minY - padding[0];
  14428. return {
  14429. x: x,
  14430. y: y,
  14431. width: width,
  14432. height: height
  14433. };
  14434. };
  14435. _proto.updateContent = function updateContent(text) {
  14436. var textShape = this.textShape,
  14437. backgroundShape = this.backgroundShape;
  14438. if (!Util.isNil(text)) {
  14439. if (!Util.isObject(text)) {
  14440. text = {
  14441. text: text
  14442. };
  14443. }
  14444. textShape.attr(text); // update box shape
  14445. var _this$_getBBox = this._getBBox(),
  14446. x = _this$_getBBox.x,
  14447. y = _this$_getBBox.y,
  14448. tipWidth = _this$_getBBox.width,
  14449. tipHeight = _this$_getBBox.height;
  14450. var width = this.width || tipWidth;
  14451. var height = this.height || tipHeight;
  14452. backgroundShape.attr({
  14453. x: x,
  14454. y: y,
  14455. width: width,
  14456. height: height
  14457. });
  14458. this._width = width;
  14459. this._height = height;
  14460. this.content = text.text;
  14461. }
  14462. };
  14463. _proto.updatePosition = function updatePosition(x, y) {
  14464. var container = this.container;
  14465. var _this$_getBBox2 = this._getBBox(),
  14466. xMin = _this$_getBBox2.x,
  14467. yMin = _this$_getBBox2.y;
  14468. container.moveTo(x - xMin, y - yMin);
  14469. this.x = x - xMin;
  14470. this.y = y - yMin;
  14471. };
  14472. _proto.getWidth = function getWidth() {
  14473. return this._width;
  14474. };
  14475. _proto.getHeight = function getHeight() {
  14476. return this._height;
  14477. };
  14478. _proto.show = function show() {
  14479. this.container.show();
  14480. };
  14481. _proto.hide = function hide() {
  14482. this.container.hide();
  14483. };
  14484. _proto.clear = function clear() {
  14485. var container = this.container;
  14486. container.clear();
  14487. container.remove(true);
  14488. this.container = null;
  14489. this.textShape = null;
  14490. this.backgroundShape = null;
  14491. };
  14492. return TextBox;
  14493. }();
  14494. module.exports = TextBox;
  14495. /***/ }),
  14496. /* 233 */
  14497. /***/ (function(module, exports, __webpack_require__) {
  14498. "use strict";
  14499. var Util = __webpack_require__(0);
  14500. var Guide = __webpack_require__(23);
  14501. var Global = __webpack_require__(6); // register the default configuration for Guide
  14502. Global.guide = Util.deepMix({
  14503. line: {
  14504. style: {
  14505. stroke: '#a3a3a3',
  14506. lineWidth: 1
  14507. },
  14508. top: true
  14509. },
  14510. text: {
  14511. style: {
  14512. fill: '#787878',
  14513. textAlign: 'center',
  14514. textBaseline: 'middle'
  14515. },
  14516. offsetX: 0,
  14517. offsetY: 0,
  14518. top: true
  14519. },
  14520. rect: {
  14521. style: {
  14522. fill: '#fafafa'
  14523. },
  14524. top: false
  14525. },
  14526. arc: {
  14527. style: {
  14528. stroke: '#a3a3a3'
  14529. },
  14530. top: true
  14531. },
  14532. html: {
  14533. offsetX: 0,
  14534. offsetY: 0,
  14535. alignX: 'center',
  14536. alignY: 'middle'
  14537. },
  14538. tag: {
  14539. top: true,
  14540. offsetX: 0,
  14541. offsetY: 0,
  14542. side: 4,
  14543. background: {
  14544. padding: 5,
  14545. radius: 2,
  14546. fill: '#1890FF'
  14547. },
  14548. textStyle: {
  14549. fontSize: 12,
  14550. fill: '#fff',
  14551. textAlign: 'center',
  14552. textBaseline: 'middle'
  14553. }
  14554. },
  14555. point: {
  14556. top: true,
  14557. offsetX: 0,
  14558. offsetY: 0,
  14559. style: {
  14560. fill: '#fff',
  14561. r: 3,
  14562. lineWidth: 2,
  14563. stroke: '#1890ff'
  14564. }
  14565. }
  14566. }, Global.guide || {});
  14567. var GuideController = /*#__PURE__*/function () {
  14568. function GuideController(cfg) {
  14569. this.guides = [];
  14570. this.xScale = null;
  14571. this.yScales = null;
  14572. this.guideShapes = [];
  14573. Util.mix(this, cfg);
  14574. }
  14575. var _proto = GuideController.prototype;
  14576. _proto._toString = function _toString(position) {
  14577. if (Util.isFunction(position)) {
  14578. position = position(this.xScale, this.yScales);
  14579. }
  14580. position = position.toString();
  14581. return position;
  14582. };
  14583. _proto._getId = function _getId(shape, guide) {
  14584. var id = guide.id;
  14585. if (!id) {
  14586. var type = guide.type;
  14587. if (type === 'arc' || type === 'line' || type === 'rect') {
  14588. id = this._toString(guide.start) + '-' + this._toString(guide.end);
  14589. } else {
  14590. id = this._toString(guide.position);
  14591. }
  14592. }
  14593. return id;
  14594. };
  14595. _proto.paint = function paint(coord) {
  14596. var self = this;
  14597. var chart = self.chart,
  14598. guides = self.guides,
  14599. xScale = self.xScale,
  14600. yScales = self.yScales;
  14601. var guideShapes = [];
  14602. Util.each(guides, function (guide, idx) {
  14603. guide.xScale = xScale;
  14604. guide.yScales = yScales;
  14605. var container;
  14606. if (guide.type === 'regionFilter') {
  14607. // TODO: RegionFilter support animation
  14608. guide.chart = chart;
  14609. } else {
  14610. container = guide.top ? self.frontPlot : self.backPlot;
  14611. }
  14612. guide.coord = coord;
  14613. guide.container = container;
  14614. guide.canvas = chart.get('canvas');
  14615. var shape = guide.render(coord, container);
  14616. if (shape) {
  14617. var id = self._getId(shape, guide);
  14618. [].concat(shape).forEach(function (s) {
  14619. s._id = s.get('className') + '-' + id;
  14620. s.set('index', idx);
  14621. guideShapes.push(s);
  14622. });
  14623. }
  14624. });
  14625. self.guideShapes = guideShapes;
  14626. };
  14627. _proto.clear = function clear() {
  14628. this.reset();
  14629. this.guides = [];
  14630. return this;
  14631. };
  14632. _proto.reset = function reset() {
  14633. var guides = this.guides;
  14634. Util.each(guides, function (guide) {
  14635. guide.remove();
  14636. });
  14637. };
  14638. _proto._createGuide = function _createGuide(type, cfg) {
  14639. var ClassName = Util.upperFirst(type);
  14640. var guide = new Guide[ClassName](Util.deepMix({}, Global.guide[type], cfg));
  14641. this.guides.push(guide);
  14642. return guide;
  14643. };
  14644. _proto.line = function line(cfg) {
  14645. if (cfg === void 0) {
  14646. cfg = {};
  14647. }
  14648. return this._createGuide('line', cfg);
  14649. };
  14650. _proto.text = function text(cfg) {
  14651. if (cfg === void 0) {
  14652. cfg = {};
  14653. }
  14654. return this._createGuide('text', cfg);
  14655. };
  14656. _proto.arc = function arc(cfg) {
  14657. if (cfg === void 0) {
  14658. cfg = {};
  14659. }
  14660. return this._createGuide('arc', cfg);
  14661. };
  14662. _proto.html = function html(cfg) {
  14663. if (cfg === void 0) {
  14664. cfg = {};
  14665. }
  14666. return this._createGuide('html', cfg);
  14667. };
  14668. _proto.rect = function rect(cfg) {
  14669. if (cfg === void 0) {
  14670. cfg = {};
  14671. }
  14672. return this._createGuide('rect', cfg);
  14673. };
  14674. _proto.tag = function tag(cfg) {
  14675. if (cfg === void 0) {
  14676. cfg = {};
  14677. }
  14678. return this._createGuide('tag', cfg);
  14679. };
  14680. _proto.point = function point(cfg) {
  14681. if (cfg === void 0) {
  14682. cfg = {};
  14683. }
  14684. return this._createGuide('point', cfg);
  14685. };
  14686. _proto.regionFilter = function regionFilter(cfg) {
  14687. if (cfg === void 0) {
  14688. cfg = {};
  14689. }
  14690. return this._createGuide('regionFilter', cfg);
  14691. };
  14692. return GuideController;
  14693. }();
  14694. module.exports = {
  14695. init: function init(chart) {
  14696. var guideController = new GuideController({
  14697. frontPlot: chart.get('frontPlot').addGroup({
  14698. zIndex: 20,
  14699. className: 'guideContainer'
  14700. }),
  14701. backPlot: chart.get('backPlot').addGroup({
  14702. className: 'guideContainer'
  14703. })
  14704. });
  14705. chart.set('guideController', guideController);
  14706. /**
  14707. * 为图表添加 guide
  14708. * @return {GuideController} 返回 guide 控制器
  14709. */
  14710. chart.guide = function () {
  14711. return guideController;
  14712. };
  14713. },
  14714. afterGeomDraw: function afterGeomDraw(chart) {
  14715. var guideController = chart.get('guideController');
  14716. if (!guideController.guides.length) {
  14717. return;
  14718. }
  14719. var xScale = chart.getXScale();
  14720. var yScales = chart.getYScales();
  14721. var coord = chart.get('coord');
  14722. guideController.xScale = xScale;
  14723. guideController.yScales = yScales;
  14724. guideController.chart = chart; // for regionFilter
  14725. guideController.paint(coord);
  14726. },
  14727. clear: function clear(chart) {
  14728. chart.get('guideController').clear();
  14729. },
  14730. repaint: function repaint(chart) {
  14731. chart.get('guideController').reset();
  14732. }
  14733. };
  14734. /***/ }),
  14735. /* 234 */
  14736. /***/ (function(module, exports, __webpack_require__) {
  14737. "use strict";
  14738. var Util = __webpack_require__(0);
  14739. var List = __webpack_require__(205);
  14740. var Global = __webpack_require__(6);
  14741. var LEGEND_GAP = 12;
  14742. var MARKER_SIZE = 3;
  14743. var DEFAULT_CFG = {
  14744. itemMarginBottom: 12,
  14745. itemGap: 10,
  14746. showTitle: false,
  14747. titleStyle: {
  14748. fontSize: 12,
  14749. fill: '#808080',
  14750. textAlign: 'start',
  14751. textBaseline: 'top'
  14752. },
  14753. nameStyle: {
  14754. fill: '#808080',
  14755. fontSize: 12,
  14756. textAlign: 'start',
  14757. textBaseline: 'middle'
  14758. },
  14759. valueStyle: {
  14760. fill: '#000000',
  14761. fontSize: 12,
  14762. textAlign: 'start',
  14763. textBaseline: 'middle'
  14764. },
  14765. unCheckStyle: {
  14766. fill: '#bfbfbf'
  14767. },
  14768. itemWidth: 'auto',
  14769. wordSpace: 6,
  14770. selectedMode: 'multiple' // 'multiple' or 'single'
  14771. }; // Register the default configuration for Legend
  14772. Global.legend = Util.deepMix({
  14773. common: DEFAULT_CFG,
  14774. // common legend configuration
  14775. right: Util.mix({
  14776. position: 'right',
  14777. layout: 'vertical'
  14778. }, DEFAULT_CFG),
  14779. left: Util.mix({
  14780. position: 'left',
  14781. layout: 'vertical'
  14782. }, DEFAULT_CFG),
  14783. top: Util.mix({
  14784. position: 'top',
  14785. layout: 'horizontal'
  14786. }, DEFAULT_CFG),
  14787. bottom: Util.mix({
  14788. position: 'bottom',
  14789. layout: 'horizontal'
  14790. }, DEFAULT_CFG)
  14791. }, Global.legend || {});
  14792. function getPaddingByPos(pos, appendPadding) {
  14793. var padding = 0;
  14794. appendPadding = Util.parsePadding(appendPadding);
  14795. switch (pos) {
  14796. case 'top':
  14797. padding = appendPadding[0];
  14798. break;
  14799. case 'right':
  14800. padding = appendPadding[1];
  14801. break;
  14802. case 'bottom':
  14803. padding = appendPadding[2];
  14804. break;
  14805. case 'left':
  14806. padding = appendPadding[3];
  14807. break;
  14808. default:
  14809. break;
  14810. }
  14811. return padding;
  14812. }
  14813. var LegendController = /*#__PURE__*/function () {
  14814. function LegendController(cfg) {
  14815. var _this = this;
  14816. this.handleEvent = function (ev) {
  14817. var self = _this;
  14818. function findItem(x, y) {
  14819. var result = null;
  14820. var legends = self.legends;
  14821. Util.each(legends, function (legendItems) {
  14822. Util.each(legendItems, function (legend) {
  14823. var itemsGroup = legend.itemsGroup,
  14824. legendHitBoxes = legend.legendHitBoxes;
  14825. var children = itemsGroup.get('children');
  14826. if (children.length) {
  14827. var legendPosX = legend.x;
  14828. var legendPosY = legend.y;
  14829. Util.each(legendHitBoxes, function (box, index) {
  14830. if (x >= box.x + legendPosX && x <= box.x + box.width + legendPosX && y >= box.y + legendPosY && y <= box.height + box.y + legendPosY) {
  14831. // inbox
  14832. result = {
  14833. clickedItem: children[index],
  14834. clickedLegend: legend
  14835. };
  14836. return false;
  14837. }
  14838. });
  14839. }
  14840. });
  14841. });
  14842. return result;
  14843. }
  14844. var chart = self.chart;
  14845. var _Util$createEvent = Util.createEvent(ev, chart),
  14846. x = _Util$createEvent.x,
  14847. y = _Util$createEvent.y;
  14848. var clicked = findItem(x, y);
  14849. if (clicked && clicked.clickedLegend.clickable !== false) {
  14850. var clickedItem = clicked.clickedItem,
  14851. clickedLegend = clicked.clickedLegend;
  14852. if (clickedLegend.onClick) {
  14853. ev.clickedItem = clickedItem;
  14854. clickedLegend.onClick(ev);
  14855. } else if (!clickedLegend.custom) {
  14856. var checked = clickedItem.get('checked');
  14857. var value = clickedItem.get('dataValue');
  14858. var filteredVals = clickedLegend.filteredVals,
  14859. field = clickedLegend.field,
  14860. selectedMode = clickedLegend.selectedMode;
  14861. var isSingeSelected = selectedMode === 'single';
  14862. if (isSingeSelected) {
  14863. chart.filter(field, function (val) {
  14864. return val === value;
  14865. });
  14866. } else {
  14867. if (checked) {
  14868. filteredVals.push(value);
  14869. } else {
  14870. Util.Array.remove(filteredVals, value);
  14871. }
  14872. chart.filter(field, function (val) {
  14873. return filteredVals.indexOf(val) === -1;
  14874. });
  14875. }
  14876. chart.repaint();
  14877. }
  14878. }
  14879. };
  14880. this.legendCfg = {};
  14881. this.enable = true;
  14882. this.position = 'top';
  14883. Util.mix(this, cfg);
  14884. var _chart = this.chart;
  14885. this.canvasDom = _chart.get('canvas').get('el');
  14886. this.clear();
  14887. }
  14888. var _proto = LegendController.prototype;
  14889. _proto.addLegend = function addLegend(scale, items, filteredVals) {
  14890. var self = this;
  14891. var legendCfg = self.legendCfg;
  14892. var field = scale.field;
  14893. var fieldCfg = legendCfg[field];
  14894. if (fieldCfg === false) {
  14895. return null;
  14896. }
  14897. if (fieldCfg && fieldCfg.custom) {
  14898. self.addCustomLegend(field);
  14899. } else {
  14900. var position = legendCfg.position || self.position;
  14901. if (fieldCfg && fieldCfg.position) {
  14902. position = fieldCfg.position;
  14903. }
  14904. if (scale.isCategory) {
  14905. self._addCategoryLegend(scale, items, position, filteredVals);
  14906. }
  14907. }
  14908. };
  14909. _proto.addCustomLegend = function addCustomLegend(field) {
  14910. var self = this;
  14911. var legendCfg = self.legendCfg;
  14912. if (field && legendCfg[field]) {
  14913. legendCfg = legendCfg[field];
  14914. }
  14915. var position = legendCfg.position || self.position;
  14916. var legends = self.legends;
  14917. legends[position] = legends[position] || [];
  14918. var items = legendCfg.items;
  14919. if (!items) {
  14920. return null;
  14921. }
  14922. var container = self.container;
  14923. Util.each(items, function (item) {
  14924. if (!Util.isPlainObject(item.marker)) {
  14925. item.marker = {
  14926. symbol: item.marker || 'circle',
  14927. fill: item.fill,
  14928. radius: MARKER_SIZE
  14929. };
  14930. } else {
  14931. item.marker.radius = item.marker.radius || MARKER_SIZE;
  14932. }
  14933. item.checked = Util.isNil(item.checked) ? true : item.checked;
  14934. item.name = item.name || item.value;
  14935. });
  14936. var legend = new List(Util.deepMix({}, Global.legend[position], legendCfg, {
  14937. maxLength: self._getMaxLength(position),
  14938. items: items,
  14939. parent: container
  14940. }));
  14941. legends[position].push(legend);
  14942. };
  14943. _proto.clear = function clear() {
  14944. var legends = this.legends;
  14945. Util.each(legends, function (legendItems) {
  14946. Util.each(legendItems, function (legend) {
  14947. legend.clear();
  14948. });
  14949. });
  14950. this.legends = {};
  14951. this.unBindEvents();
  14952. };
  14953. _proto._isFiltered = function _isFiltered(scale, values, value) {
  14954. var rst = false;
  14955. Util.each(values, function (val) {
  14956. rst = rst || scale.getText(val) === scale.getText(value);
  14957. if (rst) {
  14958. return false;
  14959. }
  14960. });
  14961. return rst;
  14962. };
  14963. _proto._getMaxLength = function _getMaxLength(position) {
  14964. var chart = this.chart;
  14965. var appendPadding = Util.parsePadding(chart.get('appendPadding'));
  14966. return position === 'right' || position === 'left' ? chart.get('height') - (appendPadding[0] + appendPadding[2]) : chart.get('width') - (appendPadding[1] + appendPadding[3]);
  14967. };
  14968. _proto._addCategoryLegend = function _addCategoryLegend(scale, items, position, filteredVals) {
  14969. var self = this;
  14970. var legendCfg = self.legendCfg,
  14971. legends = self.legends,
  14972. container = self.container,
  14973. chart = self.chart;
  14974. var field = scale.field;
  14975. legends[position] = legends[position] || [];
  14976. var symbol = 'circle';
  14977. if (legendCfg[field] && legendCfg[field].marker) {
  14978. symbol = legendCfg[field].marker;
  14979. } else if (legendCfg.marker) {
  14980. symbol = legendCfg.marker;
  14981. }
  14982. Util.each(items, function (item) {
  14983. if (Util.isPlainObject(symbol)) {
  14984. Util.mix(item.marker, symbol);
  14985. } else {
  14986. item.marker.symbol = symbol;
  14987. }
  14988. if (filteredVals) {
  14989. item.checked = !self._isFiltered(scale, filteredVals, item.dataValue);
  14990. }
  14991. });
  14992. var legendItems = chart.get('legendItems');
  14993. legendItems[field] = items;
  14994. var lastCfg = Util.deepMix({}, Global.legend[position], legendCfg[field] || legendCfg, {
  14995. maxLength: self._getMaxLength(position),
  14996. items: items,
  14997. field: field,
  14998. filteredVals: filteredVals,
  14999. parent: container
  15000. });
  15001. if (lastCfg.showTitle) {
  15002. Util.deepMix(lastCfg, {
  15003. title: scale.alias || scale.field
  15004. });
  15005. }
  15006. var legend = new List(lastCfg);
  15007. legends[position].push(legend);
  15008. return legend;
  15009. };
  15010. _proto._alignLegend = function _alignLegend(legend, pre, position) {
  15011. var self = this;
  15012. var _self$plotRange = self.plotRange,
  15013. tl = _self$plotRange.tl,
  15014. bl = _self$plotRange.bl;
  15015. var chart = self.chart;
  15016. var offsetX = legend.offsetX || 0;
  15017. var offsetY = legend.offsetY || 0;
  15018. var chartWidth = chart.get('width');
  15019. var chartHeight = chart.get('height');
  15020. var appendPadding = Util.parsePadding(chart.get('appendPadding'));
  15021. var legendHeight = legend.getHeight();
  15022. var legendWidth = legend.getWidth();
  15023. var x = 0;
  15024. var y = 0;
  15025. if (position === 'left' || position === 'right') {
  15026. var verticalAlign = legend.verticalAlign || 'middle';
  15027. var height = Math.abs(tl.y - bl.y);
  15028. x = position === 'left' ? appendPadding[3] : chartWidth - legendWidth - appendPadding[1];
  15029. y = (height - legendHeight) / 2 + tl.y;
  15030. if (verticalAlign === 'top') {
  15031. y = tl.y;
  15032. } else if (verticalAlign === 'bottom') {
  15033. y = bl.y - legendHeight;
  15034. }
  15035. if (pre) {
  15036. y = pre.get('y') - legendHeight - LEGEND_GAP;
  15037. }
  15038. } else {
  15039. var align = legend.align || 'left';
  15040. x = appendPadding[3];
  15041. if (align === 'center') {
  15042. x = chartWidth / 2 - legendWidth / 2;
  15043. } else if (align === 'right') {
  15044. x = chartWidth - (legendWidth + appendPadding[1]);
  15045. }
  15046. y = position === 'top' ? appendPadding[0] + Math.abs(legend.container.getBBox().minY) : chartHeight - legendHeight;
  15047. if (pre) {
  15048. var preWidth = pre.getWidth();
  15049. x = pre.x + preWidth + LEGEND_GAP;
  15050. }
  15051. }
  15052. if (position === 'bottom' && offsetY > 0) {
  15053. offsetY = 0;
  15054. }
  15055. if (position === 'right' && offsetX > 0) {
  15056. offsetX = 0;
  15057. }
  15058. legend.moveTo(x + offsetX, y + offsetY);
  15059. };
  15060. _proto.alignLegends = function alignLegends() {
  15061. var self = this;
  15062. var legends = self.legends;
  15063. Util.each(legends, function (legendItems, position) {
  15064. Util.each(legendItems, function (legend, index) {
  15065. var pre = legendItems[index - 1];
  15066. self._alignLegend(legend, pre, position);
  15067. });
  15068. });
  15069. return self;
  15070. };
  15071. _proto.bindEvents = function bindEvents() {
  15072. var legendCfg = this.legendCfg;
  15073. var triggerOn = legendCfg.triggerOn || 'touchstart';
  15074. Util.addEventListener(this.canvasDom, triggerOn, this.handleEvent);
  15075. };
  15076. _proto.unBindEvents = function unBindEvents() {
  15077. var legendCfg = this.legendCfg;
  15078. var triggerOn = legendCfg.triggerOn || 'touchstart';
  15079. Util.removeEventListener(this.canvasDom, triggerOn, this.handleEvent);
  15080. };
  15081. return LegendController;
  15082. }();
  15083. module.exports = {
  15084. init: function init(chart) {
  15085. var legendController = new LegendController({
  15086. container: chart.get('backPlot'),
  15087. plotRange: chart.get('plotRange'),
  15088. chart: chart
  15089. });
  15090. chart.set('legendController', legendController);
  15091. chart.legend = function (field, cfg) {
  15092. var legendCfg = legendController.legendCfg;
  15093. legendController.enable = true;
  15094. if (Util.isBoolean(field)) {
  15095. legendController.enable = field;
  15096. legendCfg = cfg || {};
  15097. } else if (Util.isObject(field)) {
  15098. legendCfg = field;
  15099. } else {
  15100. legendCfg[field] = cfg;
  15101. }
  15102. legendController.legendCfg = legendCfg;
  15103. return this;
  15104. };
  15105. },
  15106. beforeGeomDraw: function beforeGeomDraw(chart) {
  15107. var legendController = chart.get('legendController');
  15108. if (!legendController.enable) return null; // legend is not displayed
  15109. var legendCfg = legendController.legendCfg;
  15110. if (legendCfg && legendCfg.custom) {
  15111. legendController.addCustomLegend();
  15112. } else {
  15113. var legendItems = chart.getLegendItems();
  15114. var scales = chart.get('scales');
  15115. var filters = chart.get('filters');
  15116. Util.each(legendItems, function (items, field) {
  15117. var scale = scales[field];
  15118. var values = scale.values;
  15119. var filteredVals;
  15120. if (filters && filters[field]) {
  15121. filteredVals = values.filter(function (v) {
  15122. return !filters[field](v);
  15123. });
  15124. } else {
  15125. filteredVals = [];
  15126. }
  15127. legendController.addLegend(scale, items, filteredVals);
  15128. });
  15129. }
  15130. if (legendCfg && legendCfg.clickable !== false) {
  15131. legendController.bindEvents();
  15132. }
  15133. var legends = legendController.legends;
  15134. var legendRange = {
  15135. top: 0,
  15136. right: 0,
  15137. bottom: 0,
  15138. left: 0
  15139. };
  15140. Util.each(legends, function (legendItems, position) {
  15141. var padding = 0;
  15142. Util.each(legendItems, function (legend) {
  15143. var width = legend.getWidth();
  15144. var height = legend.getHeight();
  15145. if (position === 'top' || position === 'bottom') {
  15146. padding = Math.max(padding, height);
  15147. if (legend.offsetY > 0) {
  15148. padding += legend.offsetY;
  15149. }
  15150. } else {
  15151. padding = Math.max(padding, width);
  15152. if (legend.offsetX > 0) {
  15153. padding += legend.offsetX;
  15154. }
  15155. }
  15156. });
  15157. legendRange[position] = padding + getPaddingByPos(position, chart.get('appendPadding'));
  15158. });
  15159. chart.set('legendRange', legendRange);
  15160. },
  15161. afterGeomDraw: function afterGeomDraw(chart) {
  15162. var legendController = chart.get('legendController');
  15163. legendController.alignLegends();
  15164. },
  15165. clearInner: function clearInner(chart) {
  15166. var legendController = chart.get('legendController');
  15167. legendController.clear();
  15168. chart.set('legendRange', null);
  15169. }
  15170. };
  15171. /***/ }),
  15172. /* 235 */
  15173. /***/ (function(module, exports, __webpack_require__) {
  15174. "use strict";
  15175. /**
  15176. * Handle the detail animations
  15177. * @author sima.zhang1990@gmail.com
  15178. */
  15179. var Util = __webpack_require__(0);
  15180. var Element = __webpack_require__(46);
  15181. var Timeline = __webpack_require__(236);
  15182. var Animator = __webpack_require__(237);
  15183. var Animate = __webpack_require__(206);
  15184. var ShapeAction = __webpack_require__(239);
  15185. var GroupAction = __webpack_require__(240);
  15186. var Chart = __webpack_require__(30);
  15187. var timeline;
  15188. Element.prototype.animate = function () {
  15189. var attrs = Util.mix({}, this.get('attrs'));
  15190. return new Animator(this, attrs, timeline);
  15191. };
  15192. Chart.prototype.animate = function (cfg) {
  15193. this.set('animate', cfg);
  15194. return this;
  15195. };
  15196. Animate.Action = ShapeAction;
  15197. Animate.defaultCfg = {
  15198. interval: {
  15199. enter: function enter(coord) {
  15200. if (coord.isPolar && coord.transposed) {
  15201. // for pie chart
  15202. return function (shape) {
  15203. shape.set('zIndex', -1);
  15204. var container = shape.get('parent');
  15205. container.sort();
  15206. };
  15207. }
  15208. return ShapeAction.fadeIn;
  15209. }
  15210. },
  15211. area: {
  15212. enter: function enter(coord) {
  15213. if (coord.isPolar) return null;
  15214. return ShapeAction.fadeIn;
  15215. }
  15216. },
  15217. line: {
  15218. enter: function enter(coord) {
  15219. if (coord.isPolar) return null;
  15220. return ShapeAction.fadeIn;
  15221. }
  15222. },
  15223. path: {
  15224. enter: function enter(coord) {
  15225. if (coord.isPolar) return null;
  15226. return ShapeAction.fadeIn;
  15227. }
  15228. }
  15229. };
  15230. var GROUP_ANIMATION = {
  15231. line: function line(coord) {
  15232. if (coord.isPolar) {
  15233. return GroupAction.groupScaleInXY;
  15234. }
  15235. return GroupAction.groupWaveIn;
  15236. },
  15237. area: function area(coord) {
  15238. if (coord.isPolar) {
  15239. return GroupAction.groupScaleInXY;
  15240. }
  15241. return GroupAction.groupWaveIn;
  15242. },
  15243. path: function path(coord) {
  15244. if (coord.isPolar) {
  15245. return GroupAction.groupScaleInXY;
  15246. }
  15247. return GroupAction.groupWaveIn;
  15248. },
  15249. point: function point() {
  15250. return GroupAction.shapesScaleInXY;
  15251. },
  15252. interval: function interval(coord) {
  15253. var result;
  15254. if (coord.isPolar) {
  15255. // polar coodinate
  15256. result = GroupAction.groupScaleInXY;
  15257. if (coord.transposed) {
  15258. // pie chart
  15259. result = GroupAction.groupWaveIn;
  15260. }
  15261. } else {
  15262. result = coord.transposed ? GroupAction.groupScaleInX : GroupAction.groupScaleInY;
  15263. }
  15264. return result;
  15265. },
  15266. schema: function schema() {
  15267. return GroupAction.groupWaveIn;
  15268. }
  15269. };
  15270. function diff(fromAttrs, toAttrs) {
  15271. var endState = {};
  15272. for (var k in toAttrs) {
  15273. if (Util.isNumber(fromAttrs[k]) && fromAttrs[k] !== toAttrs[k]) {
  15274. endState[k] = toAttrs[k];
  15275. } else if (Util.isArray(fromAttrs[k]) && JSON.stringify(fromAttrs[k]) !== JSON.stringify(toAttrs[k])) {
  15276. endState[k] = toAttrs[k];
  15277. }
  15278. }
  15279. return endState;
  15280. } // Add a unique id identifier to each shape
  15281. function _getShapeId(geom, dataObj, geomIdx) {
  15282. var type = geom.get('type');
  15283. var id = 'geom' + geomIdx + '-' + type;
  15284. var xScale = geom.getXScale();
  15285. var yScale = geom.getYScale();
  15286. var xField = xScale.field || 'x';
  15287. var yField = yScale.field || 'y';
  15288. var yVal = dataObj[yField];
  15289. var xVal;
  15290. if (xScale.isIdentity) {
  15291. xVal = xScale.value;
  15292. } else {
  15293. xVal = dataObj[xField];
  15294. }
  15295. if (type === 'interval' || type === 'schema') {
  15296. id += '-' + xVal;
  15297. } else if (type === 'line' || type === 'area' || type === 'path') {
  15298. id += '-' + type;
  15299. } else {
  15300. id += xScale.isCategory ? '-' + xVal : '-' + xVal + '-' + yVal;
  15301. }
  15302. var groupScales = geom._getGroupScales();
  15303. Util.each(groupScales, function (groupScale) {
  15304. var field = groupScale.field;
  15305. if (groupScale.type !== 'identity') {
  15306. id += '-' + dataObj[field];
  15307. }
  15308. });
  15309. return id;
  15310. } // get geometry's shapes
  15311. function getShapes(geoms, chart, coord) {
  15312. var shapes = [];
  15313. Util.each(geoms, function (geom, geomIdx) {
  15314. var geomContainer = geom.get('container');
  15315. var geomShapes = geomContainer.get('children');
  15316. var type = geom.get('type');
  15317. var animateCfg = Util.isNil(geom.get('animateCfg')) ? _getAnimateCfgByShapeType(type, chart) : geom.get('animateCfg');
  15318. if (animateCfg !== false) {
  15319. Util.each(geomShapes, function (shape, index) {
  15320. if (shape.get('className') === type) {
  15321. shape._id = _getShapeId(geom, shape.get('origin')._origin, geomIdx);
  15322. shape.set('coord', coord);
  15323. shape.set('animateCfg', animateCfg);
  15324. shape.set('index', index);
  15325. shapes.push(shape);
  15326. }
  15327. });
  15328. }
  15329. geom.set('shapes', geomShapes);
  15330. });
  15331. return shapes;
  15332. }
  15333. function cache(shapes) {
  15334. var rst = {};
  15335. for (var i = 0, len = shapes.length; i < len; i++) {
  15336. var shape = shapes[i];
  15337. if (!shape._id || shape.isClip) continue;
  15338. var id = shape._id;
  15339. rst[id] = {
  15340. _id: id,
  15341. type: shape.get('type'),
  15342. // the type of shape
  15343. attrs: Util.mix({}, shape._attrs.attrs),
  15344. // the graphics attributes of shape
  15345. className: shape.get('className'),
  15346. geomType: shape.get('className'),
  15347. index: shape.get('index'),
  15348. coord: shape.get('coord'),
  15349. animateCfg: shape.get('animateCfg')
  15350. };
  15351. }
  15352. return rst;
  15353. }
  15354. function getAnimate(geomType, coord, animationType, animationName) {
  15355. var result;
  15356. if (Util.isFunction(animationName)) {
  15357. result = animationName;
  15358. } else if (Util.isString(animationName)) {
  15359. result = Animate.Action[animationName];
  15360. } else {
  15361. result = Animate.getAnimation(geomType, coord, animationType);
  15362. }
  15363. return result;
  15364. }
  15365. function getAnimateCfg(geomType, animationType, animateCfg) {
  15366. if (animateCfg === false || Util.isObject(animateCfg) && animateCfg[animationType] === false) {
  15367. return false;
  15368. }
  15369. var defaultCfg = Animate.getAnimateCfg(geomType, animationType);
  15370. if (animateCfg && animateCfg[animationType]) {
  15371. return Util.deepMix({}, defaultCfg, animateCfg[animationType]);
  15372. }
  15373. return defaultCfg;
  15374. }
  15375. function addAnimate(cache, shapes, canvas) {
  15376. var animate;
  15377. var animateCfg; // the order of animation: leave -> update -> enter
  15378. var updateShapes = [];
  15379. var newShapes = [];
  15380. Util.each(shapes, function (shape) {
  15381. var result = cache[shape._id];
  15382. if (!result) {
  15383. newShapes.push(shape);
  15384. } else {
  15385. shape.set('cacheShape', result);
  15386. updateShapes.push(shape);
  15387. delete cache[shape._id];
  15388. }
  15389. }); // first do the leave animation
  15390. Util.each(cache, function (deletedShape) {
  15391. var className = deletedShape.className,
  15392. coord = deletedShape.coord,
  15393. _id = deletedShape._id,
  15394. attrs = deletedShape.attrs,
  15395. index = deletedShape.index,
  15396. type = deletedShape.type;
  15397. animateCfg = getAnimateCfg(className, 'leave', deletedShape.animateCfg);
  15398. if (animateCfg === false) return true;
  15399. animate = getAnimate(className, coord, 'leave', animateCfg.animation);
  15400. if (Util.isFunction(animate)) {
  15401. var tempShape = canvas.addShape(type, {
  15402. attrs: attrs,
  15403. index: index,
  15404. canvas: canvas,
  15405. className: className
  15406. });
  15407. tempShape._id = _id;
  15408. animate(tempShape, animateCfg, coord);
  15409. }
  15410. }); // then do the update animation
  15411. Util.each(updateShapes, function (updateShape) {
  15412. var className = updateShape.get('className');
  15413. animateCfg = getAnimateCfg(className, 'update', updateShape.get('animateCfg'));
  15414. if (animateCfg === false) return true;
  15415. var coord = updateShape.get('coord');
  15416. var cacheAttrs = updateShape.get('cacheShape').attrs;
  15417. var endState = diff(cacheAttrs, updateShape._attrs.attrs); // 判断如果属性相同的话就不进行变换
  15418. if (Object.keys(endState).length) {
  15419. animate = getAnimate(className, coord, 'update', animateCfg.animation);
  15420. if (Util.isFunction(animate)) {
  15421. animate(updateShape, animateCfg, coord);
  15422. } else {
  15423. updateShape.attr(cacheAttrs);
  15424. updateShape.animate().to({
  15425. attrs: endState,
  15426. duration: animateCfg.duration,
  15427. easing: animateCfg.easing,
  15428. delay: animateCfg.delay
  15429. }).onEnd(function () {
  15430. updateShape.set('cacheShape', null);
  15431. });
  15432. }
  15433. }
  15434. }); // last, enter animation
  15435. Util.each(newShapes, function (newShape) {
  15436. // 新图形元素的进场元素
  15437. var className = newShape.get('className');
  15438. var coord = newShape.get('coord');
  15439. animateCfg = getAnimateCfg(className, 'enter', newShape.get('animateCfg'));
  15440. if (animateCfg === false) return true;
  15441. animate = getAnimate(className, coord, 'enter', animateCfg.animation);
  15442. if (Util.isFunction(animate)) {
  15443. if (className === 'interval' && coord.isPolar && coord.transposed) {
  15444. var index = newShape.get('index');
  15445. var lastShape = updateShapes[index - 1];
  15446. animate(newShape, animateCfg, lastShape);
  15447. } else {
  15448. animate(newShape, animateCfg, coord);
  15449. }
  15450. }
  15451. });
  15452. }
  15453. function _getAnimateCfgByShapeType(type, chart) {
  15454. if (!type) {
  15455. return null;
  15456. }
  15457. var animateCfg = chart.get('animate');
  15458. if (type.indexOf('guide-tag') > -1) {
  15459. type = 'guide-tag';
  15460. }
  15461. if (Util.isObject(animateCfg)) {
  15462. return animateCfg[type];
  15463. }
  15464. if (animateCfg === false) {
  15465. return false;
  15466. }
  15467. return null;
  15468. }
  15469. module.exports = {
  15470. afterCanvasInit: function afterCanvasInit()
  15471. /* chart */
  15472. {
  15473. timeline = new Timeline();
  15474. timeline.play();
  15475. },
  15476. beforeCanvasDraw: function beforeCanvasDraw(chart) {
  15477. if (chart.get('animate') === false) {
  15478. return;
  15479. }
  15480. var isUpdate = chart.get('isUpdate');
  15481. var canvas = chart.get('canvas');
  15482. var coord = chart.get('coord');
  15483. var geoms = chart.get('geoms');
  15484. var caches = canvas.get('caches') || [];
  15485. if (caches.length === 0) {
  15486. isUpdate = false;
  15487. }
  15488. var cacheShapes = getShapes(geoms, chart, coord);
  15489. var _chart$get = chart.get('axisController'),
  15490. frontPlot = _chart$get.frontPlot,
  15491. backPlot = _chart$get.backPlot;
  15492. var axisShapes = frontPlot.get('children').concat(backPlot.get('children'));
  15493. var guideShapes = [];
  15494. if (chart.get('guideController')) {
  15495. guideShapes = chart.get('guideController').guideShapes;
  15496. }
  15497. var componentShapes = [];
  15498. axisShapes.concat(guideShapes).forEach(function (s) {
  15499. var className = s.get('className');
  15500. var animateCfg = _getAnimateCfgByShapeType(className, chart);
  15501. s.set('coord', coord);
  15502. s.set('animateCfg', animateCfg);
  15503. componentShapes.push(s);
  15504. cacheShapes.push(s);
  15505. });
  15506. canvas.set('caches', cache(cacheShapes));
  15507. if (isUpdate) {
  15508. addAnimate(caches, cacheShapes, canvas);
  15509. } else {
  15510. // do the appear animation
  15511. var animateCfg;
  15512. var animate;
  15513. Util.each(geoms, function (geom) {
  15514. var type = geom.get('type');
  15515. var geomCfg = Util.isNil(geom.get('animateCfg')) ? _getAnimateCfgByShapeType(type, chart) : geom.get('animateCfg');
  15516. if (geomCfg !== false) {
  15517. animateCfg = getAnimateCfg(type, 'appear', geomCfg);
  15518. animate = getAnimate(type, coord, 'appear', animateCfg.animation);
  15519. if (Util.isFunction(animate)) {
  15520. var shapes = geom.get('shapes');
  15521. Util.each(shapes, function (shape) {
  15522. animate(shape, animateCfg, coord);
  15523. });
  15524. } else if (GROUP_ANIMATION[type]) {
  15525. // do the default animation
  15526. animate = GroupAction[animateCfg.animation] || GROUP_ANIMATION[type](coord);
  15527. var yScale = geom.getYScale();
  15528. var zeroY = coord.convertPoint({
  15529. x: 0,
  15530. y: yScale.scale(geom.getYMinValue())
  15531. });
  15532. var container = geom.get('container');
  15533. animate && animate(container, animateCfg, coord, zeroY);
  15534. }
  15535. }
  15536. }); // do the animation of components
  15537. Util.each(componentShapes, function (shape) {
  15538. var animateCfg = shape.get('animateCfg');
  15539. var className = shape.get('className');
  15540. if (animateCfg && animateCfg.appear) {
  15541. // if user configure
  15542. var defaultCfg = Animate.getAnimateCfg(className, 'appear');
  15543. var appearCfg = Util.deepMix({}, defaultCfg, animateCfg.appear);
  15544. var _animate = getAnimate(className, coord, 'appear', appearCfg.animation);
  15545. if (Util.isFunction(_animate)) {
  15546. _animate(shape, appearCfg, coord);
  15547. }
  15548. }
  15549. });
  15550. }
  15551. },
  15552. afterCanvasDestroyed: function afterCanvasDestroyed()
  15553. /* chart */
  15554. {
  15555. timeline.stop();
  15556. }
  15557. };
  15558. /***/ }),
  15559. /* 236 */
  15560. /***/ (function(module, exports, __webpack_require__) {
  15561. "use strict";
  15562. var _require = __webpack_require__(70),
  15563. requestAnimationFrame = _require.requestAnimationFrame;
  15564. var clock = typeof performance === 'object' && performance.now ? performance : Date;
  15565. var Timeline = /*#__PURE__*/function () {
  15566. function Timeline() {
  15567. this.anims = [];
  15568. this.time = null;
  15569. this.playing = false;
  15570. this.canvas = [];
  15571. }
  15572. var _proto = Timeline.prototype;
  15573. _proto.play = function play() {
  15574. var self = this;
  15575. self.time = clock.now();
  15576. self.playing = true;
  15577. function step() {
  15578. if (self.playing) {
  15579. requestAnimationFrame(step);
  15580. self.update();
  15581. }
  15582. }
  15583. requestAnimationFrame(step);
  15584. };
  15585. _proto.stop = function stop() {
  15586. this.playing = false;
  15587. this.time = null;
  15588. this.canvas = [];
  15589. };
  15590. _proto.update = function update() {
  15591. var currentTime = clock.now();
  15592. this.canvas = [];
  15593. for (var i = 0; i < this.anims.length; i++) {
  15594. var propertyAnim = this.anims[i];
  15595. if (currentTime < propertyAnim.startTime || propertyAnim.hasEnded) {
  15596. continue;
  15597. }
  15598. var shape = propertyAnim.shape; // shape
  15599. if (shape.get('destroyed')) {
  15600. this.anims.splice(i, 1);
  15601. i--;
  15602. continue;
  15603. }
  15604. var startState = propertyAnim.startState,
  15605. endState = propertyAnim.endState,
  15606. interpolate = propertyAnim.interpolate,
  15607. duration = propertyAnim.duration;
  15608. if (currentTime >= propertyAnim.startTime && !propertyAnim.hasStarted) {
  15609. propertyAnim.hasStarted = true;
  15610. if (propertyAnim.onStart) {
  15611. propertyAnim.onStart();
  15612. }
  15613. }
  15614. var t = (currentTime - propertyAnim.startTime) / duration;
  15615. t = Math.max(0, Math.min(t, 1));
  15616. t = propertyAnim.easing(t);
  15617. if (propertyAnim.onFrame) {
  15618. propertyAnim.onFrame(t);
  15619. } else {
  15620. for (var key in interpolate) {
  15621. var diff = interpolate[key];
  15622. var value = diff(t);
  15623. var newValue = void 0;
  15624. if (key === 'points') {
  15625. newValue = [];
  15626. var aLen = Math.max(startState.points.length, endState.points.length);
  15627. for (var j = 0; j < aLen; j += 2) {
  15628. newValue.push({
  15629. x: value[j],
  15630. y: value[j + 1]
  15631. });
  15632. }
  15633. } else {
  15634. newValue = value;
  15635. }
  15636. shape._attrs.attrs[key] = newValue;
  15637. shape._attrs.bbox = null; // should clear calculated bbox
  15638. }
  15639. }
  15640. var canvas = shape.get('canvas');
  15641. if (this.canvas.indexOf(canvas) === -1) {
  15642. this.canvas.push(canvas);
  15643. }
  15644. if (propertyAnim.onUpdate) {
  15645. propertyAnim.onUpdate(t);
  15646. }
  15647. if (currentTime >= propertyAnim.endTime && !propertyAnim.hasEnded) {
  15648. propertyAnim.hasEnded = true;
  15649. if (propertyAnim.onEnd) {
  15650. propertyAnim.onEnd();
  15651. }
  15652. }
  15653. if (t === 1) {
  15654. // end
  15655. this.anims.splice(i, 1);
  15656. i--;
  15657. }
  15658. }
  15659. this.canvas.map(function (c) {
  15660. c.draw();
  15661. return c;
  15662. });
  15663. this.time = clock.now();
  15664. };
  15665. return Timeline;
  15666. }();
  15667. module.exports = Timeline;
  15668. /***/ }),
  15669. /* 237 */
  15670. /***/ (function(module, exports, __webpack_require__) {
  15671. "use strict";
  15672. var Easing = __webpack_require__(238);
  15673. function plainArray(arr) {
  15674. var result = [];
  15675. for (var i = 0, len = arr.length; i < len; i++) {
  15676. if (arr[i]) {
  15677. result.push(arr[i].x);
  15678. result.push(arr[i].y);
  15679. }
  15680. }
  15681. return result;
  15682. }
  15683. function interpolateNumber(a, b) {
  15684. a = +a;
  15685. b -= a;
  15686. return function (t) {
  15687. return a + b * t;
  15688. };
  15689. }
  15690. function interpolateArray(a, b) {
  15691. var nb = b ? b.length : 0;
  15692. var na = a ? Math.min(nb, a.length) : 0;
  15693. var x = new Array(na);
  15694. var c = new Array(nb);
  15695. var i;
  15696. for (i = 0; i < na; ++i) {
  15697. x[i] = interpolateNumber(a[i], b[i]);
  15698. }
  15699. for (; i < nb; ++i) {
  15700. c[i] = b[i];
  15701. }
  15702. return function (t) {
  15703. for (i = 0; i < na; ++i) {
  15704. c[i] = x[i](t);
  15705. }
  15706. return c;
  15707. };
  15708. }
  15709. var Animator = /*#__PURE__*/function () {
  15710. function Animator(shape, source, timeline) {
  15711. this.hasStarted = false;
  15712. this.hasEnded = false;
  15713. this.shape = shape;
  15714. this.source = source;
  15715. this.timeline = timeline;
  15716. this.animate = null;
  15717. } // delay, attrs, duration, easing
  15718. var _proto = Animator.prototype;
  15719. _proto.to = function to(cfg) {
  15720. if (cfg === void 0) {
  15721. cfg = {};
  15722. }
  15723. var delay = cfg.delay || 0;
  15724. var attrs = cfg.attrs || {};
  15725. var duration = cfg.duration || 1000;
  15726. var easing; // 缓动函数
  15727. if (typeof cfg.easing === 'function') {
  15728. easing = cfg.easing;
  15729. } else {
  15730. easing = Easing[cfg.easing] || Easing.linear;
  15731. }
  15732. var animInfo = {
  15733. shape: this.shape,
  15734. startTime: this.timeline.time + delay,
  15735. duration: duration,
  15736. easing: easing
  15737. };
  15738. var interpolate = {}; // 差值函数
  15739. for (var attrName in attrs) {
  15740. var startValue = this.source[attrName];
  15741. var endValue = attrs[attrName];
  15742. if (attrName === 'points') {
  15743. startValue = plainArray(startValue);
  15744. endValue = plainArray(endValue);
  15745. interpolate.points = interpolateArray(startValue, endValue);
  15746. this.source.points = startValue;
  15747. attrs.points = endValue;
  15748. } else if (attrName === 'matrix') {
  15749. interpolate.matrix = interpolateArray(startValue, endValue);
  15750. } else {
  15751. interpolate[attrName] = interpolateNumber(startValue, endValue);
  15752. }
  15753. }
  15754. animInfo.interpolate = interpolate;
  15755. animInfo.startState = this.source;
  15756. animInfo.endState = attrs;
  15757. animInfo.endTime = animInfo.startTime + duration;
  15758. this.timeline.anims.push(animInfo);
  15759. this.animate = animInfo;
  15760. return this;
  15761. };
  15762. _proto.onFrame = function onFrame(callback) {
  15763. // 自定义每一帧动画的动作
  15764. if (this.animate) {
  15765. this.animate.onFrame = function (frame) {
  15766. callback(frame);
  15767. };
  15768. }
  15769. return this;
  15770. };
  15771. _proto.onStart = function onStart(callback) {
  15772. if (this.animate) {
  15773. this.animate.onStart = function () {
  15774. callback();
  15775. };
  15776. }
  15777. return this;
  15778. };
  15779. _proto.onUpdate = function onUpdate(callback) {
  15780. if (this.animate) {
  15781. this.animate.onUpdate = function (frame) {
  15782. callback(frame);
  15783. };
  15784. }
  15785. return this;
  15786. };
  15787. _proto.onEnd = function onEnd(callback) {
  15788. if (this.animate) {
  15789. this.animate.onEnd = function () {
  15790. callback();
  15791. };
  15792. }
  15793. return this;
  15794. };
  15795. return Animator;
  15796. }();
  15797. module.exports = Animator;
  15798. /***/ }),
  15799. /* 238 */
  15800. /***/ (function(module, exports, __webpack_require__) {
  15801. "use strict";
  15802. var Easing = {
  15803. linear: function linear(k) {
  15804. return k;
  15805. },
  15806. quadraticIn: function quadraticIn(k) {
  15807. return k * k;
  15808. },
  15809. quadraticOut: function quadraticOut(k) {
  15810. return k * (2 - k);
  15811. },
  15812. quadraticInOut: function quadraticInOut(k) {
  15813. if ((k *= 2) < 1) {
  15814. return 0.5 * k * k;
  15815. }
  15816. return -0.5 * (--k * (k - 2) - 1);
  15817. },
  15818. cubicIn: function cubicIn(k) {
  15819. return k * k * k;
  15820. },
  15821. cubicOut: function cubicOut(k) {
  15822. return --k * k * k + 1;
  15823. },
  15824. cubicInOut: function cubicInOut(k) {
  15825. if ((k *= 2) < 1) {
  15826. return 0.5 * k * k * k;
  15827. }
  15828. return 0.5 * ((k -= 2) * k * k + 2);
  15829. },
  15830. elasticIn: function elasticIn(k) {
  15831. var s;
  15832. var a = 0.1;
  15833. var p = 0.4;
  15834. if (k === 0) return 0;
  15835. if (k === 1) return 1;
  15836. if (!p) {
  15837. p = 0.3;
  15838. }
  15839. if (!a || a < 1) {
  15840. a = 1;
  15841. s = p / 4;
  15842. } else {
  15843. s = p / (2 * Math.PI) * Math.asin(1 / a);
  15844. }
  15845. return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
  15846. },
  15847. elasticOut: function elasticOut(k) {
  15848. var s;
  15849. var a = 0.1;
  15850. var p = 0.4;
  15851. if (k === 0) return 0;
  15852. if (k === 1) return 1;
  15853. if (!p) {
  15854. p = 0.3;
  15855. }
  15856. if (!a || a < 1) {
  15857. a = 1;
  15858. s = p / 4;
  15859. } else {
  15860. s = p / (2 * Math.PI) * Math.asin(1 / a);
  15861. }
  15862. return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;
  15863. },
  15864. elasticInOut: function elasticInOut(k) {
  15865. var s;
  15866. var a = 0.1;
  15867. var p = 0.4;
  15868. if (k === 0) return 0;
  15869. if (k === 1) return 1;
  15870. if (!p) {
  15871. p = 0.3;
  15872. }
  15873. if (!a || a < 1) {
  15874. a = 1;
  15875. s = p / 4;
  15876. } else {
  15877. s = p / (2 * Math.PI) * Math.asin(1 / a);
  15878. }
  15879. if ((k *= 2) < 1) {
  15880. return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
  15881. }
  15882. return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
  15883. },
  15884. backIn: function backIn(k) {
  15885. var s = 1.70158;
  15886. return k * k * ((s + 1) * k - s);
  15887. },
  15888. backOut: function backOut(k) {
  15889. var s = 1.70158;
  15890. return (k = k - 1) * k * ((s + 1) * k + s) + 1;
  15891. },
  15892. backInOut: function backInOut(k) {
  15893. var s = 1.70158 * 1.525;
  15894. if ((k *= 2) < 1) {
  15895. return 0.5 * (k * k * ((s + 1) * k - s));
  15896. }
  15897. return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
  15898. },
  15899. bounceIn: function bounceIn(k) {
  15900. return 1 - Easing.bounceOut(1 - k);
  15901. },
  15902. bounceOut: function bounceOut(k) {
  15903. if ((k /= 1) < 1 / 2.75) {
  15904. return 7.5625 * k * k;
  15905. } else if (k < 2 / 2.75) {
  15906. return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;
  15907. } else if (k < 2.5 / 2.75) {
  15908. return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;
  15909. }
  15910. return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;
  15911. },
  15912. bounceInOut: function bounceInOut(k) {
  15913. if (k < 0.5) {
  15914. return Easing.bounceIn(k * 2) * 0.5;
  15915. }
  15916. return Easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;
  15917. }
  15918. };
  15919. module.exports = Easing;
  15920. /***/ }),
  15921. /* 239 */
  15922. /***/ (function(module, exports, __webpack_require__) {
  15923. "use strict";
  15924. /**
  15925. * Animation functions for shape
  15926. * @author sima.zhang1990@gmail.com
  15927. */
  15928. var Util = __webpack_require__(0);
  15929. var Helpers = __webpack_require__(207);
  15930. /*
  15931. function waveIn(shape, animateCfg, coord) {
  15932. const clip = Helpers.getClip(coord);
  15933. clip.set('canvas', shape.get('canvas'));
  15934. shape.attr('clip', clip);
  15935. const onEnd = function() {
  15936. shape.attr('clip', null);
  15937. clip.remove(true);
  15938. };
  15939. Helpers.doAnimation(clip, clip.endState, animateCfg, onEnd);
  15940. }
  15941. function scaleInX(shape, animateCfg) {
  15942. const box = shape.getBBox();
  15943. const points = shape.get('origin').points;
  15944. let x;
  15945. const y = (box.minY + box.maxY) / 2;
  15946. if (points[0].y - points[1].y > 0) { // 当顶点在零点之下
  15947. x = box.maxX;
  15948. } else {
  15949. x = box.minX;
  15950. }
  15951. const scaledMatrix = Helpers.getScaledMatrix(shape, [ x, y ], 'x');
  15952. Helpers.doAnimation(shape, { matrix: scaledMatrix }, animateCfg);
  15953. }
  15954. function scaleInY(shape, animateCfg) {
  15955. const box = shape.getBBox();
  15956. const points = shape.get('origin').points;
  15957. const x = (box.minX + box.maxX) / 2;
  15958. let y;
  15959. if (points[0].y - points[1].y <= 0) { // 当顶点在零点之下
  15960. y = box.maxY;
  15961. } else {
  15962. y = box.minY;
  15963. }
  15964. const scaledMatrix = Helpers.getScaledMatrix(shape, [ x, y ], 'x');
  15965. Helpers.doAnimation(shape, { matrix: scaledMatrix }, animateCfg);
  15966. }
  15967. */
  15968. function fadeIn(shape, animateCfg) {
  15969. var fillOpacity = Util.isNil(shape.attr('fillOpacity')) ? 1 : shape.attr('fillOpacity');
  15970. var strokeOpacity = Util.isNil(shape.attr('strokeOpacity')) ? 1 : shape.attr('strokeOpacity');
  15971. shape.attr('fillOpacity', 0);
  15972. shape.attr('strokeOpacity', 0);
  15973. var endState = {
  15974. fillOpacity: fillOpacity,
  15975. strokeOpacity: strokeOpacity
  15976. };
  15977. Helpers.doAnimation(shape, endState, animateCfg);
  15978. }
  15979. module.exports = {
  15980. // waveIn,
  15981. // scaleInX,
  15982. // scaleInY,
  15983. fadeIn: fadeIn
  15984. };
  15985. /***/ }),
  15986. /* 240 */
  15987. /***/ (function(module, exports, __webpack_require__) {
  15988. "use strict";
  15989. /**
  15990. * Group animate functions
  15991. * @author sima.zhang1990@gmail.com
  15992. */
  15993. var Util = __webpack_require__(207);
  15994. var Helper = __webpack_require__(37);
  15995. var _require = __webpack_require__(16),
  15996. Shape = _require.Shape;
  15997. function _groupScaleIn(container, animateCfg, coord, zeroY, type) {
  15998. var _Util$getCoordInfo = Util.getCoordInfo(coord),
  15999. start = _Util$getCoordInfo.start,
  16000. end = _Util$getCoordInfo.end,
  16001. width = _Util$getCoordInfo.width,
  16002. height = _Util$getCoordInfo.height;
  16003. var x;
  16004. var y;
  16005. var clip = new Shape.Rect({
  16006. attrs: {
  16007. x: start.x,
  16008. y: end.y,
  16009. width: width,
  16010. height: height
  16011. }
  16012. });
  16013. if (type === 'y') {
  16014. x = start.x + width / 2;
  16015. y = zeroY.y < start.y ? zeroY.y : start.y;
  16016. } else if (type === 'x') {
  16017. x = zeroY.x > start.x ? zeroY.x : start.x;
  16018. y = start.y + height / 2;
  16019. } else if (type === 'xy') {
  16020. if (coord.isPolar) {
  16021. x = coord.center.x;
  16022. y = coord.center.y;
  16023. } else {
  16024. x = (start.x + end.x) / 2;
  16025. y = (start.y + end.y) / 2;
  16026. }
  16027. }
  16028. var endMatrix = Util.getScaledMatrix(clip, [x, y], type);
  16029. clip.isClip = true;
  16030. clip.endState = {
  16031. matrix: endMatrix
  16032. };
  16033. clip.set('canvas', container.get('canvas'));
  16034. container.attr('clip', clip);
  16035. var onEnd = function onEnd() {
  16036. container.attr('clip', null);
  16037. clip.remove(true);
  16038. };
  16039. Util.doAnimation(clip, clip.endState, animateCfg, onEnd);
  16040. }
  16041. function _shapeScale(container, animateCfg, type) {
  16042. var shapes = container.get('children');
  16043. var x;
  16044. var y;
  16045. var endMatrix;
  16046. for (var i = 0, len = shapes.length; i < len; i++) {
  16047. var shape = shapes[i];
  16048. var box = shape.getBBox();
  16049. x = (box.minX + box.maxX) / 2;
  16050. y = (box.minY + box.maxY) / 2;
  16051. endMatrix = Util.getScaledMatrix(shape, [x, y], type);
  16052. Util.doAnimation(shape, {
  16053. matrix: endMatrix
  16054. }, animateCfg);
  16055. }
  16056. }
  16057. function groupScaleInX(container, animateCfg, coord, zeroY) {
  16058. _groupScaleIn(container, animateCfg, coord, zeroY, 'x');
  16059. }
  16060. function groupScaleInY(container, animateCfg, coord, zeroY) {
  16061. _groupScaleIn(container, animateCfg, coord, zeroY, 'y');
  16062. }
  16063. function groupScaleInXY(container, animateCfg, coord, zeroY) {
  16064. _groupScaleIn(container, animateCfg, coord, zeroY, 'xy');
  16065. }
  16066. function shapesScaleInX(container, animateCfg) {
  16067. _shapeScale(container, animateCfg, 'x');
  16068. }
  16069. function shapesScaleInY(container, animateCfg) {
  16070. _shapeScale(container, animateCfg, 'y');
  16071. }
  16072. function shapesScaleInXY(container, animateCfg) {
  16073. _shapeScale(container, animateCfg, 'xy');
  16074. }
  16075. function groupWaveIn(container, animateCfg, coord) {
  16076. var clip = Helper.getClip(coord);
  16077. clip.set('canvas', container.get('canvas'));
  16078. container.attr('clip', clip);
  16079. var onEnd = function onEnd() {
  16080. container.attr('clip', null);
  16081. clip.remove(true);
  16082. };
  16083. var endState = {};
  16084. if (coord.isPolar) {
  16085. var startAngle = coord.startAngle,
  16086. endAngle = coord.endAngle;
  16087. endState.endAngle = endAngle;
  16088. clip.attr('endAngle', startAngle);
  16089. } else {
  16090. var start = coord.start,
  16091. end = coord.end;
  16092. var width = Math.abs(start.x - end.x);
  16093. var height = Math.abs(start.y - end.y);
  16094. if (coord.isTransposed) {
  16095. clip.attr('height', 0);
  16096. endState.height = height;
  16097. } else {
  16098. clip.attr('width', 0);
  16099. endState.width = width;
  16100. }
  16101. }
  16102. Util.doAnimation(clip, endState, animateCfg, onEnd);
  16103. }
  16104. module.exports = {
  16105. groupWaveIn: groupWaveIn,
  16106. groupScaleInX: groupScaleInX,
  16107. groupScaleInY: groupScaleInY,
  16108. groupScaleInXY: groupScaleInXY,
  16109. shapesScaleInX: shapesScaleInX,
  16110. shapesScaleInY: shapesScaleInY,
  16111. shapesScaleInXY: shapesScaleInXY
  16112. };
  16113. /***/ }),
  16114. /* 241 */
  16115. /***/ (function(module, exports, __webpack_require__) {
  16116. "use strict";
  16117. exports.__esModule = true;
  16118. exports["default"] = void 0;
  16119. var _common = __webpack_require__(0);
  16120. var Chart = __webpack_require__(30);
  16121. Chart._Interactions = {};
  16122. Chart.registerInteraction = function (type, constructor) {
  16123. Chart._Interactions[type] = constructor;
  16124. };
  16125. Chart.getInteraction = function (type) {
  16126. return Chart._Interactions[type];
  16127. };
  16128. Chart.prototype.interaction = function (type, cfg) {
  16129. var interactions = this._interactions || {};
  16130. if (interactions[type]) {
  16131. // if reprated, destroy last
  16132. interactions[type].destroy();
  16133. }
  16134. var Ctor = Chart.getInteraction(type);
  16135. var interact = new Ctor(cfg, this);
  16136. interactions[type] = interact;
  16137. this._interactions = interactions;
  16138. return this;
  16139. };
  16140. Chart.prototype.clearInteraction = function (type) {
  16141. var interactions = this._interactions;
  16142. if (!interactions) return;
  16143. if (type) {
  16144. interactions[type] && interactions[type].destroy();
  16145. delete interactions[type];
  16146. } else {
  16147. (0, _common.each)(interactions, function (interaction, key) {
  16148. interaction.destroy();
  16149. delete interactions[key];
  16150. });
  16151. }
  16152. return this;
  16153. };
  16154. var _default = Chart;
  16155. exports["default"] = _default;
  16156. /***/ }),
  16157. /* 242 */,
  16158. /* 243 */,
  16159. /* 244 */
  16160. /***/ (function(module, exports, __webpack_require__) {
  16161. "use strict";
  16162. var _interopRequireDefault = __webpack_require__(1);
  16163. exports.__esModule = true;
  16164. exports["default"] = void 0;
  16165. var _common = __webpack_require__(0);
  16166. var _context = _interopRequireDefault(__webpack_require__(249));
  16167. var Base = /*#__PURE__*/function () {
  16168. var _proto = Base.prototype;
  16169. // 交互的上下文
  16170. _proto.getDefaultCfg = function getDefaultCfg() {
  16171. return {};
  16172. };
  16173. _proto.getInteractionContext = function getInteractionContext(chart) {
  16174. var interactionContext = chart.get('interactionContext');
  16175. if (interactionContext) {
  16176. return interactionContext;
  16177. }
  16178. interactionContext = new _context["default"](chart);
  16179. chart.set('interactionContext', interactionContext);
  16180. return interactionContext;
  16181. };
  16182. function Base(cfg, chart) {
  16183. var _this = this;
  16184. this.type = '';
  16185. this.startEvent = 'touchstart';
  16186. this.processEvent = 'touchmove';
  16187. this.endEvent = 'touchend';
  16188. this.resetEvent = null;
  16189. this.context = null;
  16190. this._start = function (ev) {
  16191. _this.start(ev);
  16192. };
  16193. this._process = function (ev) {
  16194. _this.process(ev);
  16195. };
  16196. this._end = function (ev) {
  16197. _this.end(ev);
  16198. };
  16199. this._reset = function (ev) {
  16200. _this.reset(ev);
  16201. };
  16202. (0, _common.mix)(this, this.getDefaultCfg(), cfg);
  16203. this.context = this.getInteractionContext(chart);
  16204. this.chart = chart; // 只处理range, 暂时先这么处理后面再看情况调整
  16205. var range = this.range;
  16206. if (range) {
  16207. this.context.range = range;
  16208. }
  16209. this._bindEvents(chart);
  16210. }
  16211. _proto._bindEvents = function _bindEvents(chart) {
  16212. var startEvent = this.startEvent,
  16213. processEvent = this.processEvent,
  16214. endEvent = this.endEvent,
  16215. resetEvent = this.resetEvent;
  16216. var canvas = chart.get('canvas'); // 统一绑定事件
  16217. canvas.on(startEvent, this._start);
  16218. canvas.on(processEvent, this._process);
  16219. canvas.on(endEvent, this._end);
  16220. canvas.on(resetEvent, this._reset);
  16221. };
  16222. _proto._clearEvents = function _clearEvents() {
  16223. var chart = this.chart,
  16224. startEvent = this.startEvent,
  16225. processEvent = this.processEvent,
  16226. endEvent = this.endEvent,
  16227. resetEvent = this.resetEvent;
  16228. var canvas = chart.get('canvas'); // 统一绑定事件
  16229. canvas.off(startEvent, this._start);
  16230. canvas.off(processEvent, this._process);
  16231. canvas.off(endEvent, this._end);
  16232. canvas.off(resetEvent, this._start);
  16233. };
  16234. // override
  16235. _proto.start = function start() {} // override
  16236. ;
  16237. _proto.process = function process() {} // override
  16238. ;
  16239. _proto.end = function end() {} // override
  16240. ;
  16241. _proto.reset = function reset() {};
  16242. _proto.destroy = function destroy() {
  16243. this._clearEvents();
  16244. };
  16245. return Base;
  16246. }();
  16247. var _default = Base;
  16248. exports["default"] = _default;
  16249. /***/ }),
  16250. /* 245 */,
  16251. /* 246 */
  16252. /***/ (function(module, exports, __webpack_require__) {
  16253. "use strict";
  16254. /**
  16255. * Default, without interactins
  16256. */
  16257. var F2 = __webpack_require__(77);
  16258. __webpack_require__(209);
  16259. __webpack_require__(193);
  16260. __webpack_require__(203); // polar coordinate
  16261. __webpack_require__(218); // the axis for polar coordinate
  16262. __webpack_require__(219); // timeCat scale
  16263. __webpack_require__(223);
  16264. __webpack_require__(224);
  16265. __webpack_require__(225);
  16266. __webpack_require__(226);
  16267. __webpack_require__(227);
  16268. __webpack_require__(228);
  16269. __webpack_require__(229);
  16270. var Marker = __webpack_require__(76); // 把一些component挂上去,外部可以直接使用
  16271. F2.Component = {
  16272. Marker: Marker
  16273. };
  16274. var Tooltip = __webpack_require__(230);
  16275. var Guide = __webpack_require__(233);
  16276. var Legend = __webpack_require__(234);
  16277. var Animation = __webpack_require__(235);
  16278. F2.Animate = __webpack_require__(206); // register plugins
  16279. F2.Chart.plugins.register([Tooltip, Legend, Guide, Animation]); // 默认添加交互
  16280. __webpack_require__(247);
  16281. module.exports = F2;
  16282. /***/ }),
  16283. /* 247 */
  16284. /***/ (function(module, exports, __webpack_require__) {
  16285. "use strict";
  16286. var _interopRequireDefault = __webpack_require__(1);
  16287. var _register = _interopRequireDefault(__webpack_require__(241));
  16288. var _pan = _interopRequireDefault(__webpack_require__(248));
  16289. var _pinch = _interopRequireDefault(__webpack_require__(250));
  16290. // 注册交互
  16291. _register["default"].registerInteraction('pan', _pan["default"]);
  16292. _register["default"].registerInteraction('pinch', _pinch["default"]);
  16293. /***/ }),
  16294. /* 248 */
  16295. /***/ (function(module, exports, __webpack_require__) {
  16296. "use strict";
  16297. var _interopRequireDefault = __webpack_require__(1);
  16298. exports.__esModule = true;
  16299. exports["default"] = void 0;
  16300. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  16301. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  16302. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  16303. var _base = _interopRequireDefault(__webpack_require__(244));
  16304. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  16305. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  16306. var Pan = /*#__PURE__*/function (_Base) {
  16307. (0, _inheritsLoose2["default"])(Pan, _Base);
  16308. var _super = _createSuper(Pan);
  16309. function Pan() {
  16310. return _Base.apply(this, arguments) || this;
  16311. }
  16312. var _proto = Pan.prototype;
  16313. _proto.getDefaultCfg = function getDefaultCfg() {
  16314. return {
  16315. type: 'pan',
  16316. startEvent: 'panstart',
  16317. processEvent: 'pan',
  16318. endEvent: 'panend'
  16319. };
  16320. };
  16321. _proto.start = function start() {
  16322. var context = this.context;
  16323. context.start();
  16324. };
  16325. _proto.process = function process(e) {
  16326. var direction = e.direction,
  16327. deltaX = e.deltaX;
  16328. if (direction === 'up' || direction === 'down') {
  16329. return;
  16330. }
  16331. e.preventDefault && e.preventDefault();
  16332. var context = this.context;
  16333. var chart = context.chart;
  16334. var coord = chart.get('coord');
  16335. var start = coord.start,
  16336. end = coord.end;
  16337. var coordWidth = end.x - start.x;
  16338. var ratio = deltaX / coordWidth;
  16339. context.doMove(ratio);
  16340. };
  16341. return Pan;
  16342. }(_base["default"]);
  16343. var _default = Pan;
  16344. exports["default"] = _default;
  16345. /***/ }),
  16346. /* 249 */
  16347. /***/ (function(module, exports, __webpack_require__) {
  16348. "use strict";
  16349. exports.__esModule = true;
  16350. exports["default"] = void 0;
  16351. var _array = __webpack_require__(75);
  16352. var _const = __webpack_require__(47);
  16353. var autoCat = __webpack_require__(65); // 判断新老values是否相等,这里只要判断前后是否相等即可
  16354. function isValuesEqual(values, newValues) {
  16355. if (values.length !== newValues.length) {
  16356. return false;
  16357. }
  16358. var lastIndex = values.length - 1;
  16359. return values[0] === newValues[0] && values[lastIndex] === newValues[lastIndex];
  16360. } // 不同交互之间共享的上下文
  16361. var defaultRange = [0, 1];
  16362. var Context = /*#__PURE__*/function () {
  16363. // 最开始的原始值
  16364. // 当前显示的范围
  16365. // 缩放最小的点数
  16366. // 最小的缩放比例, 默认通过minCount计算
  16367. // minScale = 0.01;
  16368. // 交互开始时,ticks个数,主要为了每次缩放后,更新ticks个数
  16369. // lastTickCount;
  16370. function Context(chart) {
  16371. this.chart = null;
  16372. this.values = null;
  16373. this.range = defaultRange;
  16374. this.startRange = defaultRange;
  16375. this.minCount = 10;
  16376. this.chart = chart;
  16377. this._initEvent(chart);
  16378. }
  16379. var _proto = Context.prototype;
  16380. _proto._initEvent = function _initEvent(chart) {
  16381. var _this = this;
  16382. // 在整体初始化后还需要设置一些初始状态
  16383. chart.on(_const.EVENT_AFTER_INIT, function () {
  16384. // 初始化value值
  16385. var scale = _this.getPinchScale(); // 记录原始全量数据
  16386. var values = [].concat(scale.values);
  16387. _this.values = values; // 最小的缩放比例
  16388. if (!_this.minScale) {
  16389. _this.minScale = _this.minCount / values.length;
  16390. } // 初始化的时候有设置range,则初始化成默认比例
  16391. if (_this.range !== defaultRange) {
  16392. _this.updateRange(_this.range);
  16393. _this.updateTicks();
  16394. }
  16395. });
  16396. chart.on(_const.EVENT_AFTER_DATA_CHANGE, function () {
  16397. _this.updateRange(_this.range);
  16398. });
  16399. } // 缩放的主轴scale
  16400. ;
  16401. _proto.getPinchScale = function getPinchScale() {
  16402. var chart = this.chart; // 默认缩放x轴
  16403. var scale = chart.getXScale();
  16404. return scale;
  16405. } // 跟随轴的scale
  16406. ;
  16407. _proto.getFollowScale = function getFollowScale() {
  16408. var chart = this.chart; // 默认缩放x轴
  16409. var scales = chart.getYScales() || [];
  16410. return scales[0];
  16411. };
  16412. _proto.start = function start() {
  16413. var range = this.range;
  16414. var scale = this.getPinchScale();
  16415. var start = range[0],
  16416. end = range[1]; // 记录交互起始的范围
  16417. this.startRange = [start, end]; // 记录开始时的ticks个数
  16418. this.lastTickCount = scale.tickCount;
  16419. };
  16420. _proto.doZoom = function doZoom(leftScale, rightScale, zoom) {
  16421. var range = this.startRange,
  16422. minScale = this.minScale;
  16423. var start = range[0],
  16424. end = range[1];
  16425. var zoomOffset = 1 - zoom;
  16426. var rangeLen = end - start;
  16427. var rangeOffset = rangeLen * zoomOffset;
  16428. var leftOffset = rangeOffset * leftScale;
  16429. var rightOffset = rangeOffset * rightScale;
  16430. var newStart = Math.max(0, start - leftOffset);
  16431. var newEnd = Math.min(1, end + rightOffset);
  16432. var newRange = [newStart, newEnd]; // 如果已经到了最小比例,则不能再继续再放大
  16433. if (newEnd - newStart < minScale) {
  16434. return;
  16435. }
  16436. this.updateRange(newRange);
  16437. };
  16438. _proto.doMove = function doMove(ratio) {
  16439. // 不管是0, 还是其他,都不用处理
  16440. if (!ratio) return;
  16441. var range = this.startRange;
  16442. var start = range[0],
  16443. end = range[1];
  16444. var rangeLen = end - start;
  16445. var rangeOffset = rangeLen * ratio;
  16446. var newStart = start - rangeOffset;
  16447. var newEnd = end - rangeOffset; // 处理边界值
  16448. var newRange;
  16449. if (newStart < 0) {
  16450. newRange = [0, rangeLen];
  16451. } else if (newEnd > 1) {
  16452. newRange = [1 - rangeLen, 1];
  16453. } else {
  16454. newRange = [newStart, newEnd];
  16455. }
  16456. this.updateRange(newRange);
  16457. };
  16458. _proto.updateRange = function updateRange(range) {
  16459. var values = this.values; // 0, 1 的范围之间
  16460. var start = range[0],
  16461. end = range[1]; // start 不能小于0
  16462. start = Math.max(0, start); // end 不能大于1
  16463. end = Math.min(1, end); // 设置当前的范围
  16464. this.range = [start, end];
  16465. var len = values.length;
  16466. var valueStart = start * len;
  16467. var valueEnd = end * len; // 从原始数据里截取需要显示的数据
  16468. var newValues = values.slice(valueStart, valueEnd);
  16469. this.repaint(newValues);
  16470. };
  16471. _proto.repaint = function repaint(newValues) {
  16472. var chart = this.chart;
  16473. var scale = this.getPinchScale();
  16474. var currentValues = scale.values,
  16475. ticks = scale.ticks; // 如果新数组和当前显示的数组相同,则不更新
  16476. if (isValuesEqual(currentValues, newValues)) {
  16477. return;
  16478. } // 更新主轴values
  16479. this.updateScale(scale, {
  16480. ticks: ticks,
  16481. values: newValues
  16482. });
  16483. this.updateFollowScale(scale, newValues);
  16484. chart.repaint();
  16485. };
  16486. _proto.updateFollowScale = function updateFollowScale(pinchScale, pinchValues) {
  16487. var chart = this.chart;
  16488. var followScale = this.getFollowScale();
  16489. var pinchField = pinchScale.field,
  16490. pinchScaleType = pinchScale.type;
  16491. var followField = followScale.field; // 根据主轴的value值,找到所有从轴的value值
  16492. var values = []; // 转成map,让查找性能更高
  16493. var pinchValueMap = {};
  16494. pinchValues.forEach(function (item) {
  16495. pinchValueMap[item] = true;
  16496. });
  16497. var data = chart.get('data');
  16498. data.forEach(function (item) {
  16499. if (pinchScaleType === 'timeCat') {
  16500. var value = pinchScale._toTimeStamp(item[pinchField]);
  16501. if (pinchValueMap[value]) {
  16502. values.push(item[followField]);
  16503. }
  16504. }
  16505. });
  16506. var _getRange = (0, _array.getRange)(values),
  16507. min = _getRange.min,
  16508. max = _getRange.max;
  16509. this.updateScale(followScale, {
  16510. min: min,
  16511. max: max,
  16512. nice: true
  16513. });
  16514. };
  16515. _proto.updateScale = function updateScale(scale, cfg) {
  16516. if (!scale) {
  16517. return;
  16518. }
  16519. scale.change(cfg);
  16520. } // 上一次的tick个数
  16521. ;
  16522. _proto.updateTicks = function updateTicks() {
  16523. var chart = this.chart,
  16524. lastTickCount = this.lastTickCount,
  16525. values = this.values;
  16526. var scale = this.getPinchScale();
  16527. var currentValues = scale.values,
  16528. tickCount = scale.tickCount,
  16529. isRounding = scale.isRounding; // 根据当前数据的比例,和定义的tickCount计算应该需要多少个ticks
  16530. var newTickCount = Math.round(tickCount * values.length / currentValues.length); // 如果个数没有变化,则不更新
  16531. if (newTickCount === lastTickCount) {
  16532. return;
  16533. }
  16534. var cat = autoCat({
  16535. maxCount: newTickCount,
  16536. data: values,
  16537. isRounding: isRounding
  16538. });
  16539. var ticks = cat.ticks;
  16540. this.updateScale(scale, {
  16541. ticks: ticks,
  16542. values: currentValues
  16543. }); // 更新完后,需要重新绘制一次
  16544. chart.repaint();
  16545. };
  16546. return Context;
  16547. }();
  16548. var _default = Context;
  16549. exports["default"] = _default;
  16550. /***/ }),
  16551. /* 250 */
  16552. /***/ (function(module, exports, __webpack_require__) {
  16553. "use strict";
  16554. var _interopRequireDefault = __webpack_require__(1);
  16555. exports.__esModule = true;
  16556. exports["default"] = void 0;
  16557. var _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(22));
  16558. var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(2));
  16559. var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(3));
  16560. var _inheritsLoose2 = _interopRequireDefault(__webpack_require__(4));
  16561. var _base = _interopRequireDefault(__webpack_require__(244));
  16562. var _common = __webpack_require__(0);
  16563. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  16564. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  16565. var Pinch = /*#__PURE__*/function (_Base) {
  16566. (0, _inheritsLoose2["default"])(Pinch, _Base);
  16567. var _super = _createSuper(Pinch);
  16568. var _proto = Pinch.prototype;
  16569. _proto.getDefaultCfg = function getDefaultCfg() {
  16570. return {
  16571. type: 'pinch',
  16572. startEvent: 'pinchstart',
  16573. processEvent: 'pinch',
  16574. endEvent: 'pinchend'
  16575. };
  16576. };
  16577. function Pinch(cfg, chart) {
  16578. var _this;
  16579. _this = _Base.call(this, cfg, chart) || this;
  16580. var _assertThisInitialize = (0, _assertThisInitialized2["default"])(_this),
  16581. context = _assertThisInitialize.context;
  16582. (0, _common.mix)(context, cfg);
  16583. return _this;
  16584. }
  16585. _proto.start = function start() {
  16586. var context = this.context;
  16587. context.start();
  16588. };
  16589. _proto.process = function process(e) {
  16590. e.preventDefault && e.preventDefault();
  16591. var zoom = e.zoom,
  16592. center = e.center;
  16593. var context = this.context;
  16594. var chart = context.chart;
  16595. var coord = chart.get('coord');
  16596. var start = coord.start,
  16597. end = coord.end;
  16598. var coordWidth = end.x - start.x;
  16599. var leftLen = Math.abs(center.x - start.x);
  16600. var rightLen = Math.abs(end.x - center.x); // 计算左右缩放的比例
  16601. var leftScale = leftLen / coordWidth;
  16602. var rightScale = rightLen / coordWidth;
  16603. context.doZoom(leftScale, rightScale, zoom);
  16604. };
  16605. _proto.end = function end() {
  16606. // 缩放完成后再更新ticks
  16607. var context = this.context;
  16608. context.updateTicks();
  16609. };
  16610. return Pinch;
  16611. }(_base["default"]);
  16612. var _default = Pinch;
  16613. exports["default"] = _default;
  16614. /***/ })
  16615. /******/ ]);
  16616. });