智慧水务管理系统 - 精河县供水工程综合管理平台

index.full.js 2.0MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042
  1. /*! Element Plus v2.14.2 */
  2. (function(global, factory) {
  3. typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue')) :
  4. typeof define === 'function' && define.amd ? define(['exports', 'vue'], factory) :
  5. (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.ElementPlus = {}), global.Vue));
  6. })(this, function(exports, vue) {
  7. Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
  8. //#region \0rolldown/runtime.js
  9. var __create = Object.create;
  10. var __defProp = Object.defineProperty;
  11. var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  12. var __getOwnPropNames = Object.getOwnPropertyNames;
  13. var __getProtoOf = Object.getPrototypeOf;
  14. var __hasOwnProp = Object.prototype.hasOwnProperty;
  15. var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
  16. var __copyProps = (to, from, except, desc) => {
  17. if (from && typeof from === "object" || typeof from === "function") {
  18. for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
  19. key = keys[i];
  20. if (!__hasOwnProp.call(to, key) && key !== except) {
  21. __defProp(to, key, {
  22. get: ((k) => from[k]).bind(null, key),
  23. enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
  24. });
  25. }
  26. }
  27. }
  28. return to;
  29. };
  30. var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
  31. value: mod,
  32. enumerable: true
  33. }) : target, mod));
  34. //#endregion
  35. //#region ../../packages/utils/dom/aria.ts
  36. const FOCUSABLE_ELEMENT_SELECTORS = `a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])`;
  37. const isShadowRoot$1 = (e) => {
  38. if (typeof ShadowRoot === "undefined") return false;
  39. return e instanceof ShadowRoot;
  40. };
  41. const isHTMLElement$1 = (e) => {
  42. if (typeof Element === "undefined") return false;
  43. return e instanceof Element;
  44. };
  45. const isVisible = (element) => {
  46. return getComputedStyle(element).position === "fixed" ? false : element.offsetParent !== null;
  47. };
  48. const obtainAllFocusableElements$1 = (element) => {
  49. return Array.from(element.querySelectorAll(FOCUSABLE_ELEMENT_SELECTORS)).filter((item) => isFocusable(item) && isVisible(item));
  50. };
  51. const isFocusable = (element) => {
  52. if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute("tabIndex") !== null) return true;
  53. if (element.tabIndex < 0 || element.hasAttribute("disabled") || element.getAttribute("aria-disabled") === "true") return false;
  54. switch (element.nodeName) {
  55. case "A": return !!element.href && element.rel !== "ignore";
  56. case "INPUT": return !(element.type === "hidden" || element.type === "file");
  57. case "BUTTON":
  58. case "SELECT":
  59. case "TEXTAREA": return true;
  60. default: return false;
  61. }
  62. };
  63. const triggerEvent = function(elm, name, ...opts) {
  64. let eventName;
  65. if (name.includes("mouse") || name.includes("click")) eventName = "MouseEvents";
  66. else if (name.includes("key")) eventName = "KeyboardEvent";
  67. else eventName = "HTMLEvents";
  68. const evt = document.createEvent(eventName);
  69. evt.initEvent(name, ...opts);
  70. elm.dispatchEvent(evt);
  71. return elm;
  72. };
  73. const isLeaf = (el) => !el.getAttribute("aria-owns");
  74. const getSibling = (el, distance, elClass) => {
  75. const { parentNode } = el;
  76. if (!parentNode) return null;
  77. const siblings = parentNode.querySelectorAll(elClass);
  78. return siblings[Array.prototype.indexOf.call(siblings, el) + distance] || null;
  79. };
  80. const focusElement = (el, options) => {
  81. if (!el || !el.focus) return;
  82. let cleanup = false;
  83. if (isHTMLElement$1(el) && !isFocusable(el) && !el.getAttribute("tabindex")) {
  84. el.setAttribute("tabindex", "-1");
  85. cleanup = true;
  86. }
  87. el.focus(options);
  88. if (isHTMLElement$1(el) && cleanup) el.removeAttribute("tabindex");
  89. };
  90. const focusNode = (el) => {
  91. if (!el) return;
  92. focusElement(el);
  93. !isLeaf(el) && el.click();
  94. };
  95. //#endregion
  96. //#region ../../packages/constants/aria.ts
  97. const EVENT_CODE = {
  98. tab: "Tab",
  99. enter: "Enter",
  100. space: "Space",
  101. left: "ArrowLeft",
  102. up: "ArrowUp",
  103. right: "ArrowRight",
  104. down: "ArrowDown",
  105. esc: "Escape",
  106. delete: "Delete",
  107. backspace: "Backspace",
  108. numpadEnter: "NumpadEnter",
  109. pageUp: "PageUp",
  110. pageDown: "PageDown",
  111. home: "Home",
  112. end: "End"
  113. };
  114. //#endregion
  115. //#region ../../packages/constants/date.ts
  116. const datePickTypes = [
  117. "year",
  118. "years",
  119. "month",
  120. "months",
  121. "date",
  122. "dates",
  123. "week",
  124. "datetime",
  125. "datetimerange",
  126. "daterange",
  127. "monthrange",
  128. "yearrange"
  129. ];
  130. const WEEK_DAYS = [
  131. "sun",
  132. "mon",
  133. "tue",
  134. "wed",
  135. "thu",
  136. "fri",
  137. "sat"
  138. ];
  139. //#endregion
  140. //#region ../../packages/constants/event.ts
  141. const UPDATE_MODEL_EVENT = "update:modelValue";
  142. const CHANGE_EVENT = "change";
  143. const INPUT_EVENT = "input";
  144. //#endregion
  145. //#region ../../packages/constants/key.ts
  146. const INSTALLED_KEY = Symbol("INSTALLED_KEY");
  147. //#endregion
  148. //#region ../../packages/constants/size.ts
  149. const componentSizes = [
  150. "",
  151. "default",
  152. "small",
  153. "large"
  154. ];
  155. const componentSizeMap = {
  156. large: 40,
  157. default: 32,
  158. small: 24
  159. };
  160. //#endregion
  161. //#region ../../packages/constants/column-alignment.ts
  162. const columnAlignment = [
  163. "left",
  164. "center",
  165. "right"
  166. ];
  167. //#endregion
  168. //#region ../../packages/constants/form.ts
  169. const MINIMUM_INPUT_WIDTH = 11;
  170. const BORDER_HORIZONTAL_WIDTH = 2;
  171. //#endregion
  172. //#region ../../node_modules/.pnpm/@vueuse+shared@14.3.0_vue@3.5.25/node_modules/@vueuse/shared/dist/index.js
  173. function computedEager(fn, options) {
  174. var _options$flush;
  175. const result = (0, vue.shallowRef)();
  176. (0, vue.watchEffect)(() => {
  177. result.value = fn();
  178. }, {
  179. ...options,
  180. flush: (_options$flush = options === null || options === void 0 ? void 0 : options.flush) !== null && _options$flush !== void 0 ? _options$flush : "sync"
  181. });
  182. return (0, vue.readonly)(result);
  183. }
  184. function tryOnScopeDispose(fn, failSilently) {
  185. if ((0, vue.getCurrentScope)()) {
  186. (0, vue.onScopeDispose)(fn, failSilently);
  187. return true;
  188. }
  189. return false;
  190. }
  191. const localProvidedStateMap = /* @__PURE__ */ new WeakMap();
  192. const injectLocal = (...args) => {
  193. var _getCurrentInstance;
  194. const key = args[0];
  195. const instance = (_getCurrentInstance = (0, vue.getCurrentInstance)()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;
  196. const owner = instance !== null && instance !== void 0 ? instance : (0, vue.getCurrentScope)();
  197. if (owner == null && !(0, vue.hasInjectionContext)()) throw new Error("injectLocal must be called in setup");
  198. if (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];
  199. return (0, vue.inject)(...args);
  200. };
  201. const isClient = typeof window !== "undefined" && typeof document !== "undefined";
  202. const isWorker = typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
  203. const isDef = (val) => typeof val !== "undefined";
  204. const notNullish = (val) => val != null;
  205. const toString$1 = Object.prototype.toString;
  206. const isObject$2 = (val) => toString$1.call(val) === "[object Object]";
  207. const clamp$2 = (n, min, max) => Math.min(max, Math.max(min, n));
  208. const noop$1 = () => {};
  209. const isIOS = /* @__PURE__ */ getIsIOS();
  210. function getIsIOS() {
  211. var _window, _window2, _window3;
  212. return isClient && !!((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent));
  213. }
  214. function createFilterWrapper(filter, fn) {
  215. function wrapper(...args) {
  216. return new Promise((resolve, reject) => {
  217. Promise.resolve(filter(() => fn.apply(this, args), {
  218. fn,
  219. thisArg: this,
  220. args
  221. })).then(resolve).catch(reject);
  222. });
  223. }
  224. return wrapper;
  225. }
  226. function debounceFilter(ms, options = {}) {
  227. let timer;
  228. let maxTimer;
  229. let lastRejector = noop$1;
  230. const _clearTimeout = (timer) => {
  231. clearTimeout(timer);
  232. lastRejector();
  233. lastRejector = noop$1;
  234. };
  235. let lastInvoker;
  236. const filter = (invoke) => {
  237. const duration = (0, vue.toValue)(ms);
  238. const maxDuration = (0, vue.toValue)(options.maxWait);
  239. if (timer) _clearTimeout(timer);
  240. if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {
  241. if (maxTimer) {
  242. _clearTimeout(maxTimer);
  243. maxTimer = void 0;
  244. }
  245. return Promise.resolve(invoke());
  246. }
  247. return new Promise((resolve, reject) => {
  248. lastRejector = options.rejectOnCancel ? reject : resolve;
  249. lastInvoker = invoke;
  250. if (maxDuration && !maxTimer) maxTimer = setTimeout(() => {
  251. if (timer) _clearTimeout(timer);
  252. maxTimer = void 0;
  253. resolve(lastInvoker());
  254. }, maxDuration);
  255. timer = setTimeout(() => {
  256. if (maxTimer) _clearTimeout(maxTimer);
  257. maxTimer = void 0;
  258. resolve(invoke());
  259. }, duration);
  260. });
  261. };
  262. return filter;
  263. }
  264. function throttleFilter(...args) {
  265. let lastExec = 0;
  266. let timer;
  267. let isLeading = true;
  268. let lastRejector = noop$1;
  269. let lastValue;
  270. let ms;
  271. let trailing;
  272. let leading;
  273. let rejectOnCancel;
  274. if (!(0, vue.isRef)(args[0]) && typeof args[0] === "object") ({delay: ms, trailing = true, leading = true, rejectOnCancel = false} = args[0]);
  275. else [ms, trailing = true, leading = true, rejectOnCancel = false] = args;
  276. const clear = () => {
  277. if (timer) {
  278. clearTimeout(timer);
  279. timer = void 0;
  280. lastRejector();
  281. lastRejector = noop$1;
  282. }
  283. };
  284. const filter = (_invoke) => {
  285. const duration = (0, vue.toValue)(ms);
  286. const elapsed = Date.now() - lastExec;
  287. const invoke = () => {
  288. return lastValue = _invoke();
  289. };
  290. clear();
  291. if (duration <= 0) {
  292. lastExec = Date.now();
  293. return invoke();
  294. }
  295. if (elapsed > duration) {
  296. lastExec = Date.now();
  297. if (leading || !isLeading) invoke();
  298. } else if (trailing) lastValue = new Promise((resolve, reject) => {
  299. lastRejector = rejectOnCancel ? reject : resolve;
  300. timer = setTimeout(() => {
  301. lastExec = Date.now();
  302. isLeading = true;
  303. resolve(invoke());
  304. clear();
  305. }, Math.max(0, duration - elapsed));
  306. });
  307. if (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);
  308. isLeading = false;
  309. return lastValue;
  310. };
  311. return filter;
  312. }
  313. function pxValue(px) {
  314. return px.endsWith("rem") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);
  315. }
  316. function toArray(value) {
  317. return Array.isArray(value) ? value : [value];
  318. }
  319. function cacheStringFunction$1(fn) {
  320. const cache = Object.create(null);
  321. return ((str) => {
  322. return cache[str] || (cache[str] = fn(str));
  323. });
  324. }
  325. const hyphenateRE$1 = /\B([A-Z])/g;
  326. const hyphenate$1 = cacheStringFunction$1((str) => str.replace(hyphenateRE$1, "-$1").toLowerCase());
  327. const camelizeRE$1 = /-(\w)/g;
  328. const camelize$1 = cacheStringFunction$1((str) => {
  329. return str.replace(camelizeRE$1, (_, c) => c ? c.toUpperCase() : "");
  330. });
  331. function getLifeCycleTarget(target) {
  332. return target || (0, vue.getCurrentInstance)();
  333. }
  334. function toReactive(objectRef) {
  335. if (!(0, vue.isRef)(objectRef)) return (0, vue.reactive)(objectRef);
  336. return (0, vue.reactive)(new Proxy({}, {
  337. get(_, p, receiver) {
  338. return (0, vue.unref)(Reflect.get(objectRef.value, p, receiver));
  339. },
  340. set(_, p, value) {
  341. if ((0, vue.isRef)(objectRef.value[p]) && !(0, vue.isRef)(value)) objectRef.value[p].value = value;
  342. else objectRef.value[p] = value;
  343. return true;
  344. },
  345. deleteProperty(_, p) {
  346. return Reflect.deleteProperty(objectRef.value, p);
  347. },
  348. has(_, p) {
  349. return Reflect.has(objectRef.value, p);
  350. },
  351. ownKeys() {
  352. return Object.keys(objectRef.value);
  353. },
  354. getOwnPropertyDescriptor() {
  355. return {
  356. enumerable: true,
  357. configurable: true
  358. };
  359. }
  360. }));
  361. }
  362. function reactiveComputed(fn) {
  363. return toReactive((0, vue.computed)(fn));
  364. }
  365. function useDebounceFn(fn, ms = 200, options = {}) {
  366. return createFilterWrapper(debounceFilter(ms, options), fn);
  367. }
  368. function refDebounced(value, ms = 200, options = {}) {
  369. const debounced = (0, vue.ref)((0, vue.toValue)(value));
  370. const updater = useDebounceFn(() => {
  371. debounced.value = value.value;
  372. }, ms, options);
  373. (0, vue.watch)(value, () => updater());
  374. return (0, vue.shallowReadonly)(debounced);
  375. }
  376. function useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {
  377. return createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);
  378. }
  379. function tryOnMounted(fn, sync = true, target) {
  380. if (getLifeCycleTarget(target)) (0, vue.onMounted)(fn, target);
  381. else if (sync) fn();
  382. else (0, vue.nextTick)(fn);
  383. }
  384. function useTimeoutFn(cb, interval, options = {}) {
  385. const { immediate = true, immediateCallback = false } = options;
  386. const isPending = (0, vue.shallowRef)(false);
  387. let timer;
  388. function clear() {
  389. if (timer) {
  390. clearTimeout(timer);
  391. timer = void 0;
  392. }
  393. }
  394. function stop() {
  395. isPending.value = false;
  396. clear();
  397. }
  398. function start(...args) {
  399. if (immediateCallback) cb();
  400. clear();
  401. isPending.value = true;
  402. timer = setTimeout(() => {
  403. isPending.value = false;
  404. timer = void 0;
  405. cb(...args);
  406. }, (0, vue.toValue)(interval));
  407. }
  408. if (immediate) {
  409. isPending.value = true;
  410. if (isClient) start();
  411. }
  412. tryOnScopeDispose(stop);
  413. return {
  414. isPending: (0, vue.shallowReadonly)(isPending),
  415. start,
  416. stop
  417. };
  418. }
  419. function watchImmediate(source, cb, options) {
  420. return (0, vue.watch)(source, cb, {
  421. ...options,
  422. immediate: true
  423. });
  424. }
  425. //#endregion
  426. //#region ../../node_modules/.pnpm/@vueuse+core@14.3.0_vue@3.5.25/node_modules/@vueuse/core/dist/index.js
  427. const defaultWindow = isClient ? window : void 0;
  428. const defaultDocument = isClient ? window.document : void 0;
  429. const defaultNavigator = isClient ? window.navigator : void 0;
  430. const defaultLocation = isClient ? window.location : void 0;
  431. function unrefElement(elRef) {
  432. var _$el;
  433. const plain = (0, vue.toValue)(elRef);
  434. return (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;
  435. }
  436. function useEventListener(...args) {
  437. const register = (el, event, listener, options) => {
  438. el.addEventListener(event, listener, options);
  439. return () => el.removeEventListener(event, listener, options);
  440. };
  441. const firstParamTargets = (0, vue.computed)(() => {
  442. const test = toArray((0, vue.toValue)(args[0])).filter((e) => e != null);
  443. return test.every((e) => typeof e !== "string") ? test : void 0;
  444. });
  445. return watchImmediate(() => {
  446. var _firstParamTargets$va, _firstParamTargets$va2;
  447. return [
  448. (_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),
  449. toArray((0, vue.toValue)(firstParamTargets.value ? args[1] : args[0])),
  450. toArray((0, vue.unref)(firstParamTargets.value ? args[2] : args[1])),
  451. (0, vue.toValue)(firstParamTargets.value ? args[3] : args[2])
  452. ];
  453. }, ([raw_targets, raw_events, raw_listeners, raw_options], _, onCleanup) => {
  454. if (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;
  455. const optionsClone = isObject$2(raw_options) ? { ...raw_options } : raw_options;
  456. const cleanups = raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))));
  457. onCleanup(() => {
  458. cleanups.forEach((fn) => fn());
  459. });
  460. }, { flush: "post" });
  461. }
  462. let _iOSWorkaround = false;
  463. function onClickOutside(target, handler, options = {}) {
  464. const { window = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;
  465. if (!window) return controls ? {
  466. stop: noop$1,
  467. cancel: noop$1,
  468. trigger: noop$1
  469. } : noop$1;
  470. if (isIOS && !_iOSWorkaround) {
  471. _iOSWorkaround = true;
  472. const listenerOptions = { passive: true };
  473. Array.from(window.document.body.children).forEach((el) => el.addEventListener("click", noop$1, listenerOptions));
  474. window.document.documentElement.addEventListener("click", noop$1, listenerOptions);
  475. }
  476. let shouldListen = true;
  477. const shouldIgnore = (event) => {
  478. return (0, vue.toValue)(ignore).some((target) => {
  479. if (typeof target === "string") return Array.from(window.document.querySelectorAll(target)).some((el) => el === event.target || event.composedPath().includes(el));
  480. else {
  481. const el = unrefElement(target);
  482. return el && (event.target === el || event.composedPath().includes(el));
  483. }
  484. });
  485. };
  486. function hasMultipleRoots(target) {
  487. const vm = (0, vue.toValue)(target);
  488. return vm && vm.$.subTree.shapeFlag === 16;
  489. }
  490. function checkMultipleRoots(target, event) {
  491. const vm = (0, vue.toValue)(target);
  492. const children = vm.$.subTree && vm.$.subTree.children;
  493. if (children == null || !Array.isArray(children)) return false;
  494. return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));
  495. }
  496. const listener = (event) => {
  497. const el = unrefElement(target);
  498. if (event.target == null) return;
  499. if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;
  500. if (!el || el === event.target || event.composedPath().includes(el)) return;
  501. if ("detail" in event && event.detail === 0) shouldListen = !shouldIgnore(event);
  502. if (!shouldListen) {
  503. shouldListen = true;
  504. return;
  505. }
  506. handler(event);
  507. };
  508. let isProcessingClick = false;
  509. const cleanup = [
  510. useEventListener(window, "click", (event) => {
  511. if (!isProcessingClick) {
  512. isProcessingClick = true;
  513. setTimeout(() => {
  514. isProcessingClick = false;
  515. }, 0);
  516. listener(event);
  517. }
  518. }, {
  519. passive: true,
  520. capture
  521. }),
  522. useEventListener(window, "pointerdown", (e) => {
  523. const el = unrefElement(target);
  524. shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));
  525. }, { passive: true }),
  526. detectIframe && useEventListener(window, "blur", (event) => {
  527. setTimeout(() => {
  528. const el = unrefElement(target);
  529. let activeEl = window.document.activeElement;
  530. while (activeEl === null || activeEl === void 0 ? void 0 : activeEl.shadowRoot) activeEl = activeEl.shadowRoot.activeElement;
  531. if ((activeEl === null || activeEl === void 0 ? void 0 : activeEl.tagName) === "IFRAME" && !(el === null || el === void 0 ? void 0 : el.contains(window.document.activeElement))) handler(event);
  532. }, 0);
  533. }, { passive: true })
  534. ].filter(Boolean);
  535. const stop = () => cleanup.forEach((fn) => fn());
  536. if (controls) return {
  537. stop,
  538. cancel: () => {
  539. shouldListen = false;
  540. },
  541. trigger: (event) => {
  542. shouldListen = true;
  543. listener(event);
  544. shouldListen = false;
  545. }
  546. };
  547. return stop;
  548. }
  549. function useMounted() {
  550. const isMounted = (0, vue.shallowRef)(false);
  551. const instance = (0, vue.getCurrentInstance)();
  552. if (instance) (0, vue.onMounted)(() => {
  553. isMounted.value = true;
  554. }, instance);
  555. return isMounted;
  556. }
  557. /* @__NO_SIDE_EFFECTS__ */
  558. function useSupported(callback) {
  559. const isMounted = useMounted();
  560. return (0, vue.computed)(() => {
  561. isMounted.value;
  562. return Boolean(callback());
  563. });
  564. }
  565. function useMutationObserver(target, callback, options = {}) {
  566. const { window = defaultWindow, ...mutationOptions } = options;
  567. let observer;
  568. const isSupported = /* @__PURE__ */ useSupported(() => window && "MutationObserver" in window);
  569. const cleanup = () => {
  570. if (observer) {
  571. observer.disconnect();
  572. observer = void 0;
  573. }
  574. };
  575. const stopWatch = (0, vue.watch)((0, vue.computed)(() => {
  576. const items = toArray((0, vue.toValue)(target)).map(unrefElement).filter(notNullish);
  577. return new Set(items);
  578. }), (newTargets) => {
  579. cleanup();
  580. if (isSupported.value && newTargets.size) {
  581. observer = new MutationObserver(callback);
  582. newTargets.forEach((el) => observer.observe(el, mutationOptions));
  583. }
  584. }, {
  585. immediate: true,
  586. flush: "post"
  587. });
  588. const takeRecords = () => {
  589. return observer === null || observer === void 0 ? void 0 : observer.takeRecords();
  590. };
  591. const stop = () => {
  592. stopWatch();
  593. cleanup();
  594. };
  595. tryOnScopeDispose(stop);
  596. return {
  597. isSupported,
  598. stop,
  599. takeRecords
  600. };
  601. }
  602. function onElementRemoval(target, callback, options = {}) {
  603. const { window = defaultWindow, document = window === null || window === void 0 ? void 0 : window.document, flush = "sync" } = options;
  604. if (!window || !document) return noop$1;
  605. let stopFn;
  606. const cleanupAndUpdate = (fn) => {
  607. stopFn === null || stopFn === void 0 || stopFn();
  608. stopFn = fn;
  609. };
  610. const stopWatch = (0, vue.watchEffect)(() => {
  611. const el = unrefElement(target);
  612. if (el) {
  613. const { stop } = useMutationObserver(document, (mutationsList) => {
  614. if (mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el))) callback(mutationsList);
  615. }, {
  616. window,
  617. childList: true,
  618. subtree: true
  619. });
  620. cleanupAndUpdate(stop);
  621. }
  622. }, { flush });
  623. const stopHandle = () => {
  624. stopWatch();
  625. cleanupAndUpdate();
  626. };
  627. tryOnScopeDispose(stopHandle);
  628. return stopHandle;
  629. }
  630. function useActiveElement(options = {}) {
  631. var _options$document;
  632. const { window = defaultWindow, deep = true, triggerOnRemoval = false } = options;
  633. const document = (_options$document = options.document) !== null && _options$document !== void 0 ? _options$document : window === null || window === void 0 ? void 0 : window.document;
  634. const getDeepActiveElement = () => {
  635. let element = document === null || document === void 0 ? void 0 : document.activeElement;
  636. if (deep) {
  637. var _element$shadowRoot;
  638. while (element === null || element === void 0 ? void 0 : element.shadowRoot) element = element === null || element === void 0 || (_element$shadowRoot = element.shadowRoot) === null || _element$shadowRoot === void 0 ? void 0 : _element$shadowRoot.activeElement;
  639. }
  640. return element;
  641. };
  642. const activeElement = (0, vue.shallowRef)();
  643. const trigger = () => {
  644. activeElement.value = getDeepActiveElement();
  645. };
  646. if (window) {
  647. const listenerOptions = {
  648. capture: true,
  649. passive: true
  650. };
  651. useEventListener(window, "blur", (event) => {
  652. if (event.relatedTarget !== null) return;
  653. trigger();
  654. }, listenerOptions);
  655. useEventListener(window, "focus", trigger, listenerOptions);
  656. }
  657. if (triggerOnRemoval) onElementRemoval(activeElement, trigger, { document });
  658. trigger();
  659. return activeElement;
  660. }
  661. const ssrWidthSymbol = Symbol("vueuse-ssr-width");
  662. /* @__NO_SIDE_EFFECTS__ */
  663. function useSSRWidth() {
  664. const ssrWidth = (0, vue.hasInjectionContext)() ? injectLocal(ssrWidthSymbol, null) : null;
  665. return typeof ssrWidth === "number" ? ssrWidth : void 0;
  666. }
  667. function useMediaQuery(query, options = {}) {
  668. const { window = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;
  669. const isSupported = /* @__PURE__ */ useSupported(() => window && "matchMedia" in window && typeof window.matchMedia === "function");
  670. const ssrSupport = (0, vue.shallowRef)(typeof ssrWidth === "number");
  671. const mediaQuery = (0, vue.shallowRef)();
  672. const matches = (0, vue.shallowRef)(false);
  673. const handler = (event) => {
  674. matches.value = event.matches;
  675. };
  676. (0, vue.watchEffect)(() => {
  677. if (ssrSupport.value) {
  678. ssrSupport.value = !isSupported.value;
  679. matches.value = (0, vue.toValue)(query).split(",").some((queryString) => {
  680. const not = queryString.includes("not all");
  681. const minWidth = queryString.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);
  682. const maxWidth = queryString.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);
  683. let res = Boolean(minWidth || maxWidth);
  684. if (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);
  685. if (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);
  686. return not ? !res : res;
  687. });
  688. return;
  689. }
  690. if (!isSupported.value) return;
  691. mediaQuery.value = window.matchMedia((0, vue.toValue)(query));
  692. matches.value = mediaQuery.value.matches;
  693. });
  694. useEventListener(mediaQuery, "change", handler, { passive: true });
  695. return (0, vue.computed)(() => matches.value);
  696. }
  697. function cloneFnJSON(source) {
  698. return JSON.parse(JSON.stringify(source));
  699. }
  700. function useCssVar(prop, target, options = {}) {
  701. const { window = defaultWindow, initialValue, observe = false } = options;
  702. const variable = (0, vue.shallowRef)(initialValue);
  703. const elRef = (0, vue.computed)(() => {
  704. var _window$document;
  705. return unrefElement(target) || (window === null || window === void 0 || (_window$document = window.document) === null || _window$document === void 0 ? void 0 : _window$document.documentElement);
  706. });
  707. function updateCssVar() {
  708. const key = (0, vue.toValue)(prop);
  709. const el = (0, vue.toValue)(elRef);
  710. if (el && window && key) {
  711. var _window$getComputedSt;
  712. variable.value = ((_window$getComputedSt = window.getComputedStyle(el).getPropertyValue(key)) === null || _window$getComputedSt === void 0 ? void 0 : _window$getComputedSt.trim()) || variable.value || initialValue;
  713. }
  714. }
  715. if (observe) useMutationObserver(elRef, updateCssVar, {
  716. attributeFilter: ["style", "class"],
  717. window
  718. });
  719. (0, vue.watch)([elRef, () => (0, vue.toValue)(prop)], (_, old) => {
  720. if (old[0] && old[1]) old[0].style.removeProperty(old[1]);
  721. updateCssVar();
  722. }, { immediate: true });
  723. (0, vue.watch)([variable, elRef], ([val, el]) => {
  724. const raw_prop = (0, vue.toValue)(prop);
  725. if ((el === null || el === void 0 ? void 0 : el.style) && raw_prop) if (val == null) el.style.removeProperty(raw_prop);
  726. else el.style.setProperty(raw_prop, val);
  727. }, { immediate: true });
  728. return variable;
  729. }
  730. function useDocumentVisibility(options = {}) {
  731. const { document = defaultDocument } = options;
  732. if (!document) return (0, vue.shallowRef)("visible");
  733. const visibility = (0, vue.shallowRef)(document.visibilityState);
  734. useEventListener(document, "visibilitychange", () => {
  735. visibility.value = document.visibilityState;
  736. }, { passive: true });
  737. return visibility;
  738. }
  739. function useResizeObserver(target, callback, options = {}) {
  740. const { window = defaultWindow, ...observerOptions } = options;
  741. let observer;
  742. const isSupported = /* @__PURE__ */ useSupported(() => window && "ResizeObserver" in window);
  743. const cleanup = () => {
  744. if (observer) {
  745. observer.disconnect();
  746. observer = void 0;
  747. }
  748. };
  749. const stopWatch = (0, vue.watch)((0, vue.computed)(() => {
  750. const _targets = (0, vue.toValue)(target);
  751. return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];
  752. }), (els) => {
  753. cleanup();
  754. if (isSupported.value && window) {
  755. observer = new ResizeObserver(callback);
  756. for (const _el of els) if (_el) observer.observe(_el, observerOptions);
  757. }
  758. }, {
  759. immediate: true,
  760. flush: "post"
  761. });
  762. const stop = () => {
  763. cleanup();
  764. stopWatch();
  765. };
  766. tryOnScopeDispose(stop);
  767. return {
  768. isSupported,
  769. stop
  770. };
  771. }
  772. function useElementBounding(target, options = {}) {
  773. const { reset = true, windowResize = true, windowScroll = true, immediate = true, updateTiming = "sync" } = options;
  774. const height = (0, vue.shallowRef)(0);
  775. const bottom = (0, vue.shallowRef)(0);
  776. const left = (0, vue.shallowRef)(0);
  777. const right = (0, vue.shallowRef)(0);
  778. const top = (0, vue.shallowRef)(0);
  779. const width = (0, vue.shallowRef)(0);
  780. const x = (0, vue.shallowRef)(0);
  781. const y = (0, vue.shallowRef)(0);
  782. function recalculate() {
  783. const el = unrefElement(target);
  784. if (!el) {
  785. if (reset) {
  786. height.value = 0;
  787. bottom.value = 0;
  788. left.value = 0;
  789. right.value = 0;
  790. top.value = 0;
  791. width.value = 0;
  792. x.value = 0;
  793. y.value = 0;
  794. }
  795. return;
  796. }
  797. const rect = el.getBoundingClientRect();
  798. height.value = rect.height;
  799. bottom.value = rect.bottom;
  800. left.value = rect.left;
  801. right.value = rect.right;
  802. top.value = rect.top;
  803. width.value = rect.width;
  804. x.value = rect.x;
  805. y.value = rect.y;
  806. }
  807. function update() {
  808. if (updateTiming === "sync") recalculate();
  809. else if (updateTiming === "next-frame") requestAnimationFrame(() => recalculate());
  810. }
  811. useResizeObserver(target, update);
  812. (0, vue.watch)(() => unrefElement(target), (ele) => !ele && update());
  813. useMutationObserver(target, update, { attributeFilter: ["style", "class"] });
  814. if (windowScroll) useEventListener("scroll", update, {
  815. capture: true,
  816. passive: true
  817. });
  818. if (windowResize) useEventListener("resize", update, { passive: true });
  819. tryOnMounted(() => {
  820. if (immediate) update();
  821. });
  822. return {
  823. height,
  824. bottom,
  825. left,
  826. right,
  827. top,
  828. width,
  829. x,
  830. y,
  831. update
  832. };
  833. }
  834. function useElementSize(target, initialSize = {
  835. width: 0,
  836. height: 0
  837. }, options = {}) {
  838. const { window = defaultWindow, box = "content-box" } = options;
  839. const isSVG = (0, vue.computed)(() => {
  840. var _unrefElement;
  841. return (_unrefElement = unrefElement(target)) === null || _unrefElement === void 0 || (_unrefElement = _unrefElement.namespaceURI) === null || _unrefElement === void 0 ? void 0 : _unrefElement.includes("svg");
  842. });
  843. const width = (0, vue.shallowRef)(initialSize.width);
  844. const height = (0, vue.shallowRef)(initialSize.height);
  845. const { stop: stop1 } = useResizeObserver(target, ([entry]) => {
  846. const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;
  847. if (window && isSVG.value) {
  848. const $elem = unrefElement(target);
  849. if ($elem) {
  850. const rect = $elem.getBoundingClientRect();
  851. width.value = rect.width;
  852. height.value = rect.height;
  853. }
  854. } else if (boxSize) {
  855. const formatBoxSize = toArray(boxSize);
  856. width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);
  857. height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);
  858. } else {
  859. width.value = entry.contentRect.width;
  860. height.value = entry.contentRect.height;
  861. }
  862. }, options);
  863. tryOnMounted(() => {
  864. const ele = unrefElement(target);
  865. if (ele) {
  866. width.value = "offsetWidth" in ele ? ele.offsetWidth : initialSize.width;
  867. height.value = "offsetHeight" in ele ? ele.offsetHeight : initialSize.height;
  868. }
  869. });
  870. const stop2 = (0, vue.watch)(() => unrefElement(target), (ele) => {
  871. width.value = ele ? initialSize.width : 0;
  872. height.value = ele ? initialSize.height : 0;
  873. });
  874. function stop() {
  875. stop1();
  876. stop2();
  877. }
  878. return {
  879. width,
  880. height,
  881. stop
  882. };
  883. }
  884. function useIntersectionObserver(target, callback, options = {}) {
  885. const { root, rootMargin, threshold = 0, window = defaultWindow, immediate = true } = options;
  886. const isSupported = /* @__PURE__ */ useSupported(() => window && "IntersectionObserver" in window);
  887. const targets = (0, vue.computed)(() => {
  888. return toArray((0, vue.toValue)(target)).map(unrefElement).filter(notNullish);
  889. });
  890. let cleanup = noop$1;
  891. const isActive = (0, vue.shallowRef)(immediate);
  892. const stopWatch = isSupported.value ? (0, vue.watch)(() => [
  893. targets.value,
  894. unrefElement(root),
  895. (0, vue.toValue)(rootMargin),
  896. isActive.value
  897. ], ([targets, root, rootMargin]) => {
  898. cleanup();
  899. if (!isActive.value) return;
  900. if (!targets.length) return;
  901. const observer = new IntersectionObserver(callback, {
  902. root: unrefElement(root),
  903. rootMargin,
  904. threshold
  905. });
  906. targets.forEach((el) => el && observer.observe(el));
  907. cleanup = () => {
  908. observer.disconnect();
  909. cleanup = noop$1;
  910. };
  911. }, {
  912. immediate,
  913. flush: "post"
  914. }) : noop$1;
  915. const stop = () => {
  916. cleanup();
  917. stopWatch();
  918. isActive.value = false;
  919. };
  920. tryOnScopeDispose(stop);
  921. return {
  922. isSupported,
  923. isActive,
  924. pause() {
  925. cleanup();
  926. isActive.value = false;
  927. },
  928. resume() {
  929. isActive.value = true;
  930. },
  931. stop
  932. };
  933. }
  934. const DEFAULT_UNITS = [
  935. {
  936. max: 6e4,
  937. value: 1e3,
  938. name: "second"
  939. },
  940. {
  941. max: 276e4,
  942. value: 6e4,
  943. name: "minute"
  944. },
  945. {
  946. max: 72e6,
  947. value: 36e5,
  948. name: "hour"
  949. },
  950. {
  951. max: 5184e5,
  952. value: 864e5,
  953. name: "day"
  954. },
  955. {
  956. max: 24192e5,
  957. value: 6048e5,
  958. name: "week"
  959. },
  960. {
  961. max: 28512e6,
  962. value: 2592e6,
  963. name: "month"
  964. },
  965. {
  966. max: Number.POSITIVE_INFINITY,
  967. value: 31536e6,
  968. name: "year"
  969. }
  970. ];
  971. function useVModel(props, key, emit, options = {}) {
  972. var _vm$$emit, _vm$proxy;
  973. const { clone = false, passive = false, eventName, deep = false, defaultValue, shouldEmit } = options;
  974. const vm = (0, vue.getCurrentInstance)();
  975. const _emit = emit || (vm === null || vm === void 0 ? void 0 : vm.emit) || (vm === null || vm === void 0 || (_vm$$emit = vm.$emit) === null || _vm$$emit === void 0 ? void 0 : _vm$$emit.bind(vm)) || (vm === null || vm === void 0 || (_vm$proxy = vm.proxy) === null || _vm$proxy === void 0 || (_vm$proxy = _vm$proxy.$emit) === null || _vm$proxy === void 0 ? void 0 : _vm$proxy.bind(vm === null || vm === void 0 ? void 0 : vm.proxy));
  976. let event = eventName;
  977. if (!key) key = "modelValue";
  978. event = event || `update:${key.toString()}`;
  979. const cloneFn = (val) => !clone ? val : typeof clone === "function" ? clone(val) : cloneFnJSON(val);
  980. const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;
  981. const triggerEmit = (value) => {
  982. if (shouldEmit) {
  983. if (shouldEmit(value)) _emit(event, value);
  984. } else _emit(event, value);
  985. };
  986. if (passive) {
  987. const proxy = (0, vue.ref)(getValue());
  988. let isUpdating = false;
  989. (0, vue.watch)(() => props[key], (v) => {
  990. if (!isUpdating) {
  991. isUpdating = true;
  992. proxy.value = cloneFn(v);
  993. (0, vue.nextTick)(() => isUpdating = false);
  994. }
  995. });
  996. (0, vue.watch)(proxy, (v) => {
  997. if (!isUpdating && (v !== props[key] || deep)) triggerEmit(v);
  998. }, { deep });
  999. return proxy;
  1000. } else return (0, vue.computed)({
  1001. get() {
  1002. return getValue();
  1003. },
  1004. set(value) {
  1005. triggerEmit(value);
  1006. }
  1007. });
  1008. }
  1009. function useWindowFocus(options = {}) {
  1010. const { window = defaultWindow } = options;
  1011. if (!window) return (0, vue.shallowRef)(false);
  1012. const focused = (0, vue.shallowRef)(window.document.hasFocus());
  1013. const listenerOptions = { passive: true };
  1014. useEventListener(window, "blur", () => {
  1015. focused.value = false;
  1016. }, listenerOptions);
  1017. useEventListener(window, "focus", () => {
  1018. focused.value = true;
  1019. }, listenerOptions);
  1020. return focused;
  1021. }
  1022. function useWindowSize(options = {}) {
  1023. const { window = defaultWindow, initialWidth = Number.POSITIVE_INFINITY, initialHeight = Number.POSITIVE_INFINITY, listenOrientation = true, includeScrollbar = true, type = "inner" } = options;
  1024. const width = (0, vue.shallowRef)(initialWidth);
  1025. const height = (0, vue.shallowRef)(initialHeight);
  1026. const update = () => {
  1027. if (window) if (type === "outer") {
  1028. width.value = window.outerWidth;
  1029. height.value = window.outerHeight;
  1030. } else if (type === "visual" && window.visualViewport) {
  1031. const { width: visualViewportWidth, height: visualViewportHeight, scale } = window.visualViewport;
  1032. width.value = Math.round(visualViewportWidth * scale);
  1033. height.value = Math.round(visualViewportHeight * scale);
  1034. } else if (includeScrollbar) {
  1035. width.value = window.innerWidth;
  1036. height.value = window.innerHeight;
  1037. } else {
  1038. width.value = window.document.documentElement.clientWidth;
  1039. height.value = window.document.documentElement.clientHeight;
  1040. }
  1041. };
  1042. update();
  1043. tryOnMounted(update);
  1044. const listenerOptions = { passive: true };
  1045. useEventListener("resize", update, listenerOptions);
  1046. if (window && type === "visual" && window.visualViewport) useEventListener(window.visualViewport, "resize", update, listenerOptions);
  1047. if (listenOrientation) (0, vue.watch)(useMediaQuery("(orientation: portrait)"), () => update());
  1048. return {
  1049. width,
  1050. height
  1051. };
  1052. }
  1053. //#endregion
  1054. //#region ../../packages/utils/browser.ts
  1055. const isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent);
  1056. const isAndroid = () => isClient && /android/i.test(window.navigator.userAgent);
  1057. //#endregion
  1058. //#region ../../packages/utils/dom/event.ts
  1059. const composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => {
  1060. const handleEvent = (event) => {
  1061. const shouldPrevent = theirsHandler?.(event);
  1062. if (checkForDefaultPrevented === false || !shouldPrevent) return oursHandler?.(event);
  1063. };
  1064. return handleEvent;
  1065. };
  1066. const whenMouse = (handler) => {
  1067. return (e) => e.pointerType === "mouse" ? handler(e) : void 0;
  1068. };
  1069. const getEventCode = (event) => {
  1070. if (event.code && event.code !== "Unidentified") return event.code;
  1071. const key = getEventKey(event);
  1072. if (key) {
  1073. if (Object.values(EVENT_CODE).includes(key)) return key;
  1074. switch (key) {
  1075. case " ": return EVENT_CODE.space;
  1076. default: return "";
  1077. }
  1078. }
  1079. return "";
  1080. };
  1081. const getEventKey = (event) => {
  1082. let key = event.key && event.key !== "Unidentified" ? event.key : "";
  1083. if (!key && event.type === "keyup" && isAndroid()) {
  1084. const target = event.target;
  1085. key = target.value.charAt(target.selectionStart - 1);
  1086. }
  1087. return key;
  1088. };
  1089. //#endregion
  1090. //#region ../../packages/utils/dom/position.ts
  1091. const getOffsetTop = (el) => {
  1092. let offset = 0;
  1093. let parent = el;
  1094. while (parent) {
  1095. offset += parent.offsetTop;
  1096. parent = parent.offsetParent;
  1097. }
  1098. return offset;
  1099. };
  1100. const getOffsetTopDistance = (el, containerEl) => {
  1101. return Math.abs(getOffsetTop(el) - getOffsetTop(containerEl));
  1102. };
  1103. const getClientXY = (event) => {
  1104. let clientX;
  1105. let clientY;
  1106. if (event.type === "touchend") {
  1107. clientY = event.changedTouches[0].clientY;
  1108. clientX = event.changedTouches[0].clientX;
  1109. } else if (event.type.startsWith("touch")) {
  1110. clientY = event.touches[0].clientY;
  1111. clientX = event.touches[0].clientX;
  1112. } else {
  1113. clientY = event.clientY;
  1114. clientX = event.clientX;
  1115. }
  1116. return {
  1117. clientX,
  1118. clientY
  1119. };
  1120. };
  1121. //#endregion
  1122. //#region ../../packages/utils/easings.ts
  1123. function easeInOutCubic(t, b, c, d) {
  1124. const cc = c - b;
  1125. t /= d / 2;
  1126. if (t < 1) return cc / 2 * t * t * t + b;
  1127. return cc / 2 * ((t -= 2) * t * t + 2) + b;
  1128. }
  1129. //#endregion
  1130. //#region ../../node_modules/.pnpm/@vue+shared@3.5.25/node_modules/@vue/shared/dist/shared.esm-bundler.js
  1131. /**
  1132. * @vue/shared v3.5.25
  1133. * (c) 2018-present Yuxi (Evan) You and Vue contributors
  1134. * @license MIT
  1135. **/
  1136. /* @__NO_SIDE_EFFECTS__ */
  1137. function makeMap(str) {
  1138. const map = /* @__PURE__ */ Object.create(null);
  1139. for (const key of str.split(",")) map[key] = 1;
  1140. return (val) => val in map;
  1141. }
  1142. const NOOP = () => {};
  1143. const hasOwnProperty$14 = Object.prototype.hasOwnProperty;
  1144. const hasOwn = (val, key) => hasOwnProperty$14.call(val, key);
  1145. const isArray$1 = Array.isArray;
  1146. const isDate = (val) => toTypeString(val) === "[object Date]";
  1147. const isFunction$1 = (val) => typeof val === "function";
  1148. const isString = (val) => typeof val === "string";
  1149. const isObject$1 = (val) => val !== null && typeof val === "object";
  1150. const isPromise = (val) => {
  1151. return (isObject$1(val) || isFunction$1(val)) && isFunction$1(val.then) && isFunction$1(val.catch);
  1152. };
  1153. const objectToString$1 = Object.prototype.toString;
  1154. const toTypeString = (value) => objectToString$1.call(value);
  1155. const isPlainObject$1 = (val) => toTypeString(val) === "[object Object]";
  1156. const cacheStringFunction = (fn) => {
  1157. const cache = /* @__PURE__ */ Object.create(null);
  1158. return ((str) => {
  1159. return cache[str] || (cache[str] = fn(str));
  1160. });
  1161. };
  1162. const camelizeRE = /-\w/g;
  1163. const camelize = cacheStringFunction((str) => {
  1164. return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());
  1165. });
  1166. const hyphenateRE = /\B([A-Z])/g;
  1167. const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase());
  1168. const capitalize$1 = cacheStringFunction((str) => {
  1169. return str.charAt(0).toUpperCase() + str.slice(1);
  1170. });
  1171. const toHandlerKey = cacheStringFunction((str) => {
  1172. return str ? `on${capitalize$1(str)}` : ``;
  1173. });
  1174. const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
  1175. const isBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`);
  1176. //#endregion
  1177. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_freeGlobal.js
  1178. var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
  1179. //#endregion
  1180. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_root.js
  1181. var freeSelf = typeof self == "object" && self && self.Object === Object && self;
  1182. var root = freeGlobal || freeSelf || Function("return this")();
  1183. //#endregion
  1184. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Symbol.js
  1185. var Symbol$1 = root.Symbol;
  1186. //#endregion
  1187. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getRawTag.js
  1188. var objectProto$4 = Object.prototype;
  1189. var hasOwnProperty$13 = objectProto$4.hasOwnProperty;
  1190. var nativeObjectToString$1 = objectProto$4.toString;
  1191. var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0;
  1192. function getRawTag(value) {
  1193. var isOwn = hasOwnProperty$13.call(value, symToStringTag$1), tag = value[symToStringTag$1];
  1194. try {
  1195. value[symToStringTag$1] = void 0;
  1196. var unmasked = true;
  1197. } catch (e) {}
  1198. var result = nativeObjectToString$1.call(value);
  1199. if (unmasked) if (isOwn) value[symToStringTag$1] = tag;
  1200. else delete value[symToStringTag$1];
  1201. return result;
  1202. }
  1203. //#endregion
  1204. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_objectToString.js
  1205. var nativeObjectToString = Object.prototype.toString;
  1206. function objectToString(value) {
  1207. return nativeObjectToString.call(value);
  1208. }
  1209. //#endregion
  1210. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetTag.js
  1211. var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
  1212. var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
  1213. function baseGetTag(value) {
  1214. if (value == null) return value === void 0 ? undefinedTag : nullTag;
  1215. return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
  1216. }
  1217. //#endregion
  1218. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObjectLike.js
  1219. function isObjectLike(value) {
  1220. return value != null && typeof value == "object";
  1221. }
  1222. //#endregion
  1223. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSymbol.js
  1224. var symbolTag$3 = "[object Symbol]";
  1225. function isSymbol(value) {
  1226. return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3;
  1227. }
  1228. //#endregion
  1229. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayMap.js
  1230. function arrayMap(array, iteratee) {
  1231. var index = -1, length = array == null ? 0 : array.length, result = Array(length);
  1232. while (++index < length) result[index] = iteratee(array[index], index, array);
  1233. return result;
  1234. }
  1235. //#endregion
  1236. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArray.js
  1237. var isArray = Array.isArray;
  1238. //#endregion
  1239. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseToString.js
  1240. var INFINITY$3 = Infinity;
  1241. var symbolProto$2 = Symbol$1 ? Symbol$1.prototype : void 0, symbolToString = symbolProto$2 ? symbolProto$2.toString : void 0;
  1242. function baseToString(value) {
  1243. if (typeof value == "string") return value;
  1244. if (isArray(value)) return arrayMap(value, baseToString) + "";
  1245. if (isSymbol(value)) return symbolToString ? symbolToString.call(value) : "";
  1246. var result = value + "";
  1247. return result == "0" && 1 / value == -INFINITY$3 ? "-0" : result;
  1248. }
  1249. //#endregion
  1250. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_trimmedEndIndex.js
  1251. var reWhitespace = /\s/;
  1252. function trimmedEndIndex(string) {
  1253. var index = string.length;
  1254. while (index-- && reWhitespace.test(string.charAt(index)));
  1255. return index;
  1256. }
  1257. //#endregion
  1258. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTrim.js
  1259. var reTrimStart = /^\s+/;
  1260. function baseTrim(string) {
  1261. return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
  1262. }
  1263. //#endregion
  1264. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isObject.js
  1265. function isObject(value) {
  1266. var type = typeof value;
  1267. return value != null && (type == "object" || type == "function");
  1268. }
  1269. //#endregion
  1270. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toNumber.js
  1271. var NAN = NaN;
  1272. var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
  1273. var reIsBinary = /^0b[01]+$/i;
  1274. var reIsOctal = /^0o[0-7]+$/i;
  1275. var freeParseInt = parseInt;
  1276. function toNumber(value) {
  1277. if (typeof value == "number") return value;
  1278. if (isSymbol(value)) return NAN;
  1279. if (isObject(value)) {
  1280. var other = typeof value.valueOf == "function" ? value.valueOf() : value;
  1281. value = isObject(other) ? other + "" : other;
  1282. }
  1283. if (typeof value != "string") return value === 0 ? value : +value;
  1284. value = baseTrim(value);
  1285. var isBinary = reIsBinary.test(value);
  1286. return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
  1287. }
  1288. //#endregion
  1289. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toFinite.js
  1290. var INFINITY$2 = Infinity, MAX_INTEGER = 17976931348623157e292;
  1291. function toFinite(value) {
  1292. if (!value) return value === 0 ? value : 0;
  1293. value = toNumber(value);
  1294. if (value === INFINITY$2 || value === -INFINITY$2) return (value < 0 ? -1 : 1) * MAX_INTEGER;
  1295. return value === value ? value : 0;
  1296. }
  1297. //#endregion
  1298. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toInteger.js
  1299. function toInteger(value) {
  1300. var result = toFinite(value), remainder = result % 1;
  1301. return result === result ? remainder ? result - remainder : result : 0;
  1302. }
  1303. //#endregion
  1304. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/identity.js
  1305. function identity(value) {
  1306. return value;
  1307. }
  1308. //#endregion
  1309. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isFunction.js
  1310. var asyncTag = "[object AsyncFunction]", funcTag$2 = "[object Function]", genTag$1 = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
  1311. function isFunction(value) {
  1312. if (!isObject(value)) return false;
  1313. var tag = baseGetTag(value);
  1314. return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag;
  1315. }
  1316. //#endregion
  1317. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_coreJsData.js
  1318. var coreJsData = root["__core-js_shared__"];
  1319. //#endregion
  1320. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isMasked.js
  1321. var maskSrcKey = function() {
  1322. var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
  1323. return uid ? "Symbol(src)_1." + uid : "";
  1324. }();
  1325. function isMasked(func) {
  1326. return !!maskSrcKey && maskSrcKey in func;
  1327. }
  1328. //#endregion
  1329. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toSource.js
  1330. var funcToString$2 = Function.prototype.toString;
  1331. function toSource(func) {
  1332. if (func != null) {
  1333. try {
  1334. return funcToString$2.call(func);
  1335. } catch (e) {}
  1336. try {
  1337. return func + "";
  1338. } catch (e) {}
  1339. }
  1340. return "";
  1341. }
  1342. //#endregion
  1343. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNative.js
  1344. var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
  1345. var reIsHostCtor = /^\[object .+?Constructor\]$/;
  1346. var funcProto$1 = Function.prototype, objectProto$3 = Object.prototype;
  1347. var funcToString$1 = funcProto$1.toString;
  1348. var hasOwnProperty$12 = objectProto$3.hasOwnProperty;
  1349. var reIsNative = RegExp("^" + funcToString$1.call(hasOwnProperty$12).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$");
  1350. function baseIsNative(value) {
  1351. if (!isObject(value) || isMasked(value)) return false;
  1352. return (isFunction(value) ? reIsNative : reIsHostCtor).test(toSource(value));
  1353. }
  1354. //#endregion
  1355. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getValue.js
  1356. function getValue$1(object, key) {
  1357. return object == null ? void 0 : object[key];
  1358. }
  1359. //#endregion
  1360. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getNative.js
  1361. function getNative(object, key) {
  1362. var value = getValue$1(object, key);
  1363. return baseIsNative(value) ? value : void 0;
  1364. }
  1365. //#endregion
  1366. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_WeakMap.js
  1367. var WeakMap$1 = getNative(root, "WeakMap");
  1368. //#endregion
  1369. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseCreate.js
  1370. var objectCreate = Object.create;
  1371. var baseCreate = function() {
  1372. function object() {}
  1373. return function(proto) {
  1374. if (!isObject(proto)) return {};
  1375. if (objectCreate) return objectCreate(proto);
  1376. object.prototype = proto;
  1377. var result = new object();
  1378. object.prototype = void 0;
  1379. return result;
  1380. };
  1381. }();
  1382. //#endregion
  1383. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_apply.js
  1384. function apply(func, thisArg, args) {
  1385. switch (args.length) {
  1386. case 0: return func.call(thisArg);
  1387. case 1: return func.call(thisArg, args[0]);
  1388. case 2: return func.call(thisArg, args[0], args[1]);
  1389. case 3: return func.call(thisArg, args[0], args[1], args[2]);
  1390. }
  1391. return func.apply(thisArg, args);
  1392. }
  1393. //#endregion
  1394. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/noop.js
  1395. function noop() {}
  1396. //#endregion
  1397. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyArray.js
  1398. function copyArray(source, array) {
  1399. var index = -1, length = source.length;
  1400. array || (array = Array(length));
  1401. while (++index < length) array[index] = source[index];
  1402. return array;
  1403. }
  1404. //#endregion
  1405. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_shortOut.js
  1406. var HOT_COUNT = 800, HOT_SPAN = 16;
  1407. var nativeNow = Date.now;
  1408. function shortOut(func) {
  1409. var count = 0, lastCalled = 0;
  1410. return function() {
  1411. var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
  1412. lastCalled = stamp;
  1413. if (remaining > 0) {
  1414. if (++count >= HOT_COUNT) return arguments[0];
  1415. } else count = 0;
  1416. return func.apply(void 0, arguments);
  1417. };
  1418. }
  1419. //#endregion
  1420. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/constant.js
  1421. function constant(value) {
  1422. return function() {
  1423. return value;
  1424. };
  1425. }
  1426. //#endregion
  1427. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_defineProperty.js
  1428. var defineProperty = function() {
  1429. try {
  1430. var func = getNative(Object, "defineProperty");
  1431. func({}, "", {});
  1432. return func;
  1433. } catch (e) {}
  1434. }();
  1435. //#endregion
  1436. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSetToString.js
  1437. var baseSetToString = !defineProperty ? identity : function(func, string) {
  1438. return defineProperty(func, "toString", {
  1439. "configurable": true,
  1440. "enumerable": false,
  1441. "value": constant(string),
  1442. "writable": true
  1443. });
  1444. };
  1445. //#endregion
  1446. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToString.js
  1447. var setToString = shortOut(baseSetToString);
  1448. //#endregion
  1449. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayEach.js
  1450. function arrayEach(array, iteratee) {
  1451. var index = -1, length = array == null ? 0 : array.length;
  1452. while (++index < length) if (iteratee(array[index], index, array) === false) break;
  1453. return array;
  1454. }
  1455. //#endregion
  1456. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFindIndex.js
  1457. function baseFindIndex(array, predicate, fromIndex, fromRight) {
  1458. var length = array.length, index = fromIndex + (fromRight ? 1 : -1);
  1459. while (fromRight ? index-- : ++index < length) if (predicate(array[index], index, array)) return index;
  1460. return -1;
  1461. }
  1462. //#endregion
  1463. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsNaN.js
  1464. function baseIsNaN(value) {
  1465. return value !== value;
  1466. }
  1467. //#endregion
  1468. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_strictIndexOf.js
  1469. function strictIndexOf(array, value, fromIndex) {
  1470. var index = fromIndex - 1, length = array.length;
  1471. while (++index < length) if (array[index] === value) return index;
  1472. return -1;
  1473. }
  1474. //#endregion
  1475. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIndexOf.js
  1476. function baseIndexOf(array, value, fromIndex) {
  1477. return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);
  1478. }
  1479. //#endregion
  1480. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayIncludes.js
  1481. function arrayIncludes(array, value) {
  1482. return !!(array == null ? 0 : array.length) && baseIndexOf(array, value, 0) > -1;
  1483. }
  1484. //#endregion
  1485. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIndex.js
  1486. var MAX_SAFE_INTEGER$1 = 9007199254740991;
  1487. var reIsUint = /^(?:0|[1-9]\d*)$/;
  1488. function isIndex(value, length) {
  1489. var type = typeof value;
  1490. length = length == null ? MAX_SAFE_INTEGER$1 : length;
  1491. return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
  1492. }
  1493. //#endregion
  1494. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignValue.js
  1495. function baseAssignValue(object, key, value) {
  1496. if (key == "__proto__" && defineProperty) defineProperty(object, key, {
  1497. "configurable": true,
  1498. "enumerable": true,
  1499. "value": value,
  1500. "writable": true
  1501. });
  1502. else object[key] = value;
  1503. }
  1504. //#endregion
  1505. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/eq.js
  1506. function eq(value, other) {
  1507. return value === other || value !== value && other !== other;
  1508. }
  1509. //#endregion
  1510. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignValue.js
  1511. var hasOwnProperty$11 = Object.prototype.hasOwnProperty;
  1512. function assignValue(object, key, value) {
  1513. var objValue = object[key];
  1514. if (!(hasOwnProperty$11.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) baseAssignValue(object, key, value);
  1515. }
  1516. //#endregion
  1517. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copyObject.js
  1518. function copyObject(source, props, object, customizer) {
  1519. var isNew = !object;
  1520. object || (object = {});
  1521. var index = -1, length = props.length;
  1522. while (++index < length) {
  1523. var key = props[index];
  1524. var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
  1525. if (newValue === void 0) newValue = source[key];
  1526. if (isNew) baseAssignValue(object, key, newValue);
  1527. else assignValue(object, key, newValue);
  1528. }
  1529. return object;
  1530. }
  1531. //#endregion
  1532. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overRest.js
  1533. var nativeMax$2 = Math.max;
  1534. function overRest(func, start, transform) {
  1535. start = nativeMax$2(start === void 0 ? func.length - 1 : start, 0);
  1536. return function() {
  1537. var args = arguments, index = -1, length = nativeMax$2(args.length - start, 0), array = Array(length);
  1538. while (++index < length) array[index] = args[start + index];
  1539. index = -1;
  1540. var otherArgs = Array(start + 1);
  1541. while (++index < start) otherArgs[index] = args[index];
  1542. otherArgs[start] = transform(array);
  1543. return apply(func, this, otherArgs);
  1544. };
  1545. }
  1546. //#endregion
  1547. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseRest.js
  1548. function baseRest(func, start) {
  1549. return setToString(overRest(func, start, identity), func + "");
  1550. }
  1551. //#endregion
  1552. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isLength.js
  1553. var MAX_SAFE_INTEGER = 9007199254740991;
  1554. function isLength(value) {
  1555. return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
  1556. }
  1557. //#endregion
  1558. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLike.js
  1559. function isArrayLike(value) {
  1560. return value != null && isLength(value.length) && !isFunction(value);
  1561. }
  1562. //#endregion
  1563. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIterateeCall.js
  1564. function isIterateeCall(value, index, object) {
  1565. if (!isObject(object)) return false;
  1566. var type = typeof index;
  1567. if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) return eq(object[index], value);
  1568. return false;
  1569. }
  1570. //#endregion
  1571. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createAssigner.js
  1572. function createAssigner(assigner) {
  1573. return baseRest(function(object, sources) {
  1574. var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
  1575. customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
  1576. if (guard && isIterateeCall(sources[0], sources[1], guard)) {
  1577. customizer = length < 3 ? void 0 : customizer;
  1578. length = 1;
  1579. }
  1580. object = Object(object);
  1581. while (++index < length) {
  1582. var source = sources[index];
  1583. if (source) assigner(object, source, index, customizer);
  1584. }
  1585. return object;
  1586. });
  1587. }
  1588. //#endregion
  1589. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isPrototype.js
  1590. var objectProto$2 = Object.prototype;
  1591. function isPrototype(value) {
  1592. var Ctor = value && value.constructor;
  1593. return value === (typeof Ctor == "function" && Ctor.prototype || objectProto$2);
  1594. }
  1595. //#endregion
  1596. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseTimes.js
  1597. function baseTimes(n, iteratee) {
  1598. var index = -1, result = Array(n);
  1599. while (++index < n) result[index] = iteratee(index);
  1600. return result;
  1601. }
  1602. //#endregion
  1603. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsArguments.js
  1604. var argsTag$3 = "[object Arguments]";
  1605. function baseIsArguments(value) {
  1606. return isObjectLike(value) && baseGetTag(value) == argsTag$3;
  1607. }
  1608. //#endregion
  1609. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArguments.js
  1610. var objectProto$1 = Object.prototype;
  1611. var hasOwnProperty$10 = objectProto$1.hasOwnProperty;
  1612. var propertyIsEnumerable$1 = objectProto$1.propertyIsEnumerable;
  1613. var isArguments = baseIsArguments(function() {
  1614. return arguments;
  1615. }()) ? baseIsArguments : function(value) {
  1616. return isObjectLike(value) && hasOwnProperty$10.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
  1617. };
  1618. //#endregion
  1619. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubFalse.js
  1620. function stubFalse() {
  1621. return false;
  1622. }
  1623. //#endregion
  1624. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isBuffer.js
  1625. var freeExports$2 = typeof exports == "object" && exports && !exports.nodeType && exports;
  1626. var freeModule$2 = freeExports$2 && typeof module == "object" && module && !module.nodeType && module;
  1627. var Buffer$2 = freeModule$2 && freeModule$2.exports === freeExports$2 ? root.Buffer : void 0;
  1628. var isBuffer = (Buffer$2 ? Buffer$2.isBuffer : void 0) || stubFalse;
  1629. //#endregion
  1630. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsTypedArray.js
  1631. var argsTag$2 = "[object Arguments]", arrayTag$2 = "[object Array]", boolTag$3 = "[object Boolean]", dateTag$3 = "[object Date]", errorTag$2 = "[object Error]", funcTag$1 = "[object Function]", mapTag$5 = "[object Map]", numberTag$3 = "[object Number]", objectTag$4 = "[object Object]", regexpTag$3 = "[object RegExp]", setTag$5 = "[object Set]", stringTag$3 = "[object String]", weakMapTag$2 = "[object WeakMap]";
  1632. var arrayBufferTag$3 = "[object ArrayBuffer]", dataViewTag$4 = "[object DataView]", float32Tag$2 = "[object Float32Array]", float64Tag$2 = "[object Float64Array]", int8Tag$2 = "[object Int8Array]", int16Tag$2 = "[object Int16Array]", int32Tag$2 = "[object Int32Array]", uint8Tag$2 = "[object Uint8Array]", uint8ClampedTag$2 = "[object Uint8ClampedArray]", uint16Tag$2 = "[object Uint16Array]", uint32Tag$2 = "[object Uint32Array]";
  1633. var typedArrayTags = {};
  1634. typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true;
  1635. typedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$3] = typedArrayTags[boolTag$3] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$2] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$5] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$4] = typedArrayTags[regexpTag$3] = typedArrayTags[setTag$5] = typedArrayTags[stringTag$3] = typedArrayTags[weakMapTag$2] = false;
  1636. function baseIsTypedArray(value) {
  1637. return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
  1638. }
  1639. //#endregion
  1640. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnary.js
  1641. function baseUnary(func) {
  1642. return function(value) {
  1643. return func(value);
  1644. };
  1645. }
  1646. //#endregion
  1647. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nodeUtil.js
  1648. var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports;
  1649. var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module;
  1650. var freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && freeGlobal.process;
  1651. var nodeUtil = function() {
  1652. try {
  1653. var types = freeModule$1 && freeModule$1.require && freeModule$1.require("util").types;
  1654. if (types) return types;
  1655. return freeProcess && freeProcess.binding && freeProcess.binding("util");
  1656. } catch (e) {}
  1657. }();
  1658. //#endregion
  1659. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isTypedArray.js
  1660. var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
  1661. var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
  1662. //#endregion
  1663. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayLikeKeys.js
  1664. var hasOwnProperty$9 = Object.prototype.hasOwnProperty;
  1665. function arrayLikeKeys(value, inherited) {
  1666. var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
  1667. for (var key in value) if ((inherited || hasOwnProperty$9.call(value, key)) && !(skipIndexes && (key == "length" || isBuff && (key == "offset" || key == "parent") || isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || isIndex(key, length)))) result.push(key);
  1668. return result;
  1669. }
  1670. //#endregion
  1671. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_overArg.js
  1672. function overArg(func, transform) {
  1673. return function(arg) {
  1674. return func(transform(arg));
  1675. };
  1676. }
  1677. //#endregion
  1678. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeys.js
  1679. var nativeKeys = overArg(Object.keys, Object);
  1680. //#endregion
  1681. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeys.js
  1682. var hasOwnProperty$8 = Object.prototype.hasOwnProperty;
  1683. function baseKeys(object) {
  1684. if (!isPrototype(object)) return nativeKeys(object);
  1685. var result = [];
  1686. for (var key in Object(object)) if (hasOwnProperty$8.call(object, key) && key != "constructor") result.push(key);
  1687. return result;
  1688. }
  1689. //#endregion
  1690. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keys.js
  1691. function keys(object) {
  1692. return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
  1693. }
  1694. //#endregion
  1695. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeKeysIn.js
  1696. function nativeKeysIn(object) {
  1697. var result = [];
  1698. if (object != null) for (var key in Object(object)) result.push(key);
  1699. return result;
  1700. }
  1701. //#endregion
  1702. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseKeysIn.js
  1703. var hasOwnProperty$7 = Object.prototype.hasOwnProperty;
  1704. function baseKeysIn(object) {
  1705. if (!isObject(object)) return nativeKeysIn(object);
  1706. var isProto = isPrototype(object), result = [];
  1707. for (var key in object) if (!(key == "constructor" && (isProto || !hasOwnProperty$7.call(object, key)))) result.push(key);
  1708. return result;
  1709. }
  1710. //#endregion
  1711. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/keysIn.js
  1712. function keysIn(object) {
  1713. return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
  1714. }
  1715. //#endregion
  1716. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKey.js
  1717. var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/;
  1718. function isKey(value, object) {
  1719. if (isArray(value)) return false;
  1720. var type = typeof value;
  1721. if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) return true;
  1722. return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
  1723. }
  1724. //#endregion
  1725. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_nativeCreate.js
  1726. var nativeCreate = getNative(Object, "create");
  1727. //#endregion
  1728. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashClear.js
  1729. function hashClear() {
  1730. this.__data__ = nativeCreate ? nativeCreate(null) : {};
  1731. this.size = 0;
  1732. }
  1733. //#endregion
  1734. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashDelete.js
  1735. function hashDelete(key) {
  1736. var result = this.has(key) && delete this.__data__[key];
  1737. this.size -= result ? 1 : 0;
  1738. return result;
  1739. }
  1740. //#endregion
  1741. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashGet.js
  1742. var HASH_UNDEFINED$2 = "__lodash_hash_undefined__";
  1743. var hasOwnProperty$6 = Object.prototype.hasOwnProperty;
  1744. function hashGet(key) {
  1745. var data = this.__data__;
  1746. if (nativeCreate) {
  1747. var result = data[key];
  1748. return result === HASH_UNDEFINED$2 ? void 0 : result;
  1749. }
  1750. return hasOwnProperty$6.call(data, key) ? data[key] : void 0;
  1751. }
  1752. //#endregion
  1753. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashHas.js
  1754. var hasOwnProperty$5 = Object.prototype.hasOwnProperty;
  1755. function hashHas(key) {
  1756. var data = this.__data__;
  1757. return nativeCreate ? data[key] !== void 0 : hasOwnProperty$5.call(data, key);
  1758. }
  1759. //#endregion
  1760. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hashSet.js
  1761. var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
  1762. function hashSet(key, value) {
  1763. var data = this.__data__;
  1764. this.size += this.has(key) ? 0 : 1;
  1765. data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED$1 : value;
  1766. return this;
  1767. }
  1768. //#endregion
  1769. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Hash.js
  1770. function Hash(entries) {
  1771. var index = -1, length = entries == null ? 0 : entries.length;
  1772. this.clear();
  1773. while (++index < length) {
  1774. var entry = entries[index];
  1775. this.set(entry[0], entry[1]);
  1776. }
  1777. }
  1778. Hash.prototype.clear = hashClear;
  1779. Hash.prototype["delete"] = hashDelete;
  1780. Hash.prototype.get = hashGet;
  1781. Hash.prototype.has = hashHas;
  1782. Hash.prototype.set = hashSet;
  1783. //#endregion
  1784. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheClear.js
  1785. function listCacheClear() {
  1786. this.__data__ = [];
  1787. this.size = 0;
  1788. }
  1789. //#endregion
  1790. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assocIndexOf.js
  1791. function assocIndexOf(array, key) {
  1792. var length = array.length;
  1793. while (length--) if (eq(array[length][0], key)) return length;
  1794. return -1;
  1795. }
  1796. //#endregion
  1797. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheDelete.js
  1798. var splice = Array.prototype.splice;
  1799. function listCacheDelete(key) {
  1800. var data = this.__data__, index = assocIndexOf(data, key);
  1801. if (index < 0) return false;
  1802. if (index == data.length - 1) data.pop();
  1803. else splice.call(data, index, 1);
  1804. --this.size;
  1805. return true;
  1806. }
  1807. //#endregion
  1808. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheGet.js
  1809. function listCacheGet(key) {
  1810. var data = this.__data__, index = assocIndexOf(data, key);
  1811. return index < 0 ? void 0 : data[index][1];
  1812. }
  1813. //#endregion
  1814. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheHas.js
  1815. function listCacheHas(key) {
  1816. return assocIndexOf(this.__data__, key) > -1;
  1817. }
  1818. //#endregion
  1819. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_listCacheSet.js
  1820. function listCacheSet(key, value) {
  1821. var data = this.__data__, index = assocIndexOf(data, key);
  1822. if (index < 0) {
  1823. ++this.size;
  1824. data.push([key, value]);
  1825. } else data[index][1] = value;
  1826. return this;
  1827. }
  1828. //#endregion
  1829. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_ListCache.js
  1830. function ListCache(entries) {
  1831. var index = -1, length = entries == null ? 0 : entries.length;
  1832. this.clear();
  1833. while (++index < length) {
  1834. var entry = entries[index];
  1835. this.set(entry[0], entry[1]);
  1836. }
  1837. }
  1838. ListCache.prototype.clear = listCacheClear;
  1839. ListCache.prototype["delete"] = listCacheDelete;
  1840. ListCache.prototype.get = listCacheGet;
  1841. ListCache.prototype.has = listCacheHas;
  1842. ListCache.prototype.set = listCacheSet;
  1843. //#endregion
  1844. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Map.js
  1845. var Map$1 = getNative(root, "Map");
  1846. //#endregion
  1847. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheClear.js
  1848. function mapCacheClear() {
  1849. this.size = 0;
  1850. this.__data__ = {
  1851. "hash": new Hash(),
  1852. "map": new (Map$1 || ListCache)(),
  1853. "string": new Hash()
  1854. };
  1855. }
  1856. //#endregion
  1857. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isKeyable.js
  1858. function isKeyable(value) {
  1859. var type = typeof value;
  1860. return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
  1861. }
  1862. //#endregion
  1863. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMapData.js
  1864. function getMapData(map, key) {
  1865. var data = map.__data__;
  1866. return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
  1867. }
  1868. //#endregion
  1869. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheDelete.js
  1870. function mapCacheDelete(key) {
  1871. var result = getMapData(this, key)["delete"](key);
  1872. this.size -= result ? 1 : 0;
  1873. return result;
  1874. }
  1875. //#endregion
  1876. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheGet.js
  1877. function mapCacheGet(key) {
  1878. return getMapData(this, key).get(key);
  1879. }
  1880. //#endregion
  1881. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheHas.js
  1882. function mapCacheHas(key) {
  1883. return getMapData(this, key).has(key);
  1884. }
  1885. //#endregion
  1886. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapCacheSet.js
  1887. function mapCacheSet(key, value) {
  1888. var data = getMapData(this, key), size = data.size;
  1889. data.set(key, value);
  1890. this.size += data.size == size ? 0 : 1;
  1891. return this;
  1892. }
  1893. //#endregion
  1894. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_MapCache.js
  1895. function MapCache(entries) {
  1896. var index = -1, length = entries == null ? 0 : entries.length;
  1897. this.clear();
  1898. while (++index < length) {
  1899. var entry = entries[index];
  1900. this.set(entry[0], entry[1]);
  1901. }
  1902. }
  1903. MapCache.prototype.clear = mapCacheClear;
  1904. MapCache.prototype["delete"] = mapCacheDelete;
  1905. MapCache.prototype.get = mapCacheGet;
  1906. MapCache.prototype.has = mapCacheHas;
  1907. MapCache.prototype.set = mapCacheSet;
  1908. //#endregion
  1909. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/memoize.js
  1910. var FUNC_ERROR_TEXT$2 = "Expected a function";
  1911. function memoize(func, resolver) {
  1912. if (typeof func != "function" || resolver != null && typeof resolver != "function") throw new TypeError(FUNC_ERROR_TEXT$2);
  1913. var memoized = function() {
  1914. var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
  1915. if (cache.has(key)) return cache.get(key);
  1916. var result = func.apply(this, args);
  1917. memoized.cache = cache.set(key, result) || cache;
  1918. return result;
  1919. };
  1920. memoized.cache = new (memoize.Cache || MapCache)();
  1921. return memoized;
  1922. }
  1923. memoize.Cache = MapCache;
  1924. //#endregion
  1925. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_memoizeCapped.js
  1926. var MAX_MEMOIZE_SIZE = 500;
  1927. function memoizeCapped(func) {
  1928. var result = memoize(func, function(key) {
  1929. if (cache.size === MAX_MEMOIZE_SIZE) cache.clear();
  1930. return key;
  1931. });
  1932. var cache = result.cache;
  1933. return result;
  1934. }
  1935. //#endregion
  1936. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stringToPath.js
  1937. var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
  1938. var reEscapeChar = /\\(\\)?/g;
  1939. var stringToPath = memoizeCapped(function(string) {
  1940. var result = [];
  1941. if (string.charCodeAt(0) === 46) result.push("");
  1942. string.replace(rePropName, function(match, number, quote, subString) {
  1943. result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match);
  1944. });
  1945. return result;
  1946. });
  1947. //#endregion
  1948. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toString.js
  1949. function toString(value) {
  1950. return value == null ? "" : baseToString(value);
  1951. }
  1952. //#endregion
  1953. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_castPath.js
  1954. function castPath(value, object) {
  1955. if (isArray(value)) return value;
  1956. return isKey(value, object) ? [value] : stringToPath(toString(value));
  1957. }
  1958. //#endregion
  1959. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_toKey.js
  1960. var INFINITY$1 = Infinity;
  1961. function toKey(value) {
  1962. if (typeof value == "string" || isSymbol(value)) return value;
  1963. var result = value + "";
  1964. return result == "0" && 1 / value == -INFINITY$1 ? "-0" : result;
  1965. }
  1966. //#endregion
  1967. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGet.js
  1968. function baseGet(object, path) {
  1969. path = castPath(path, object);
  1970. var index = 0, length = path.length;
  1971. while (object != null && index < length) object = object[toKey(path[index++])];
  1972. return index && index == length ? object : void 0;
  1973. }
  1974. //#endregion
  1975. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/get.js
  1976. function get(object, path, defaultValue) {
  1977. var result = object == null ? void 0 : baseGet(object, path);
  1978. return result === void 0 ? defaultValue : result;
  1979. }
  1980. //#endregion
  1981. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayPush.js
  1982. function arrayPush(array, values) {
  1983. var index = -1, length = values.length, offset = array.length;
  1984. while (++index < length) array[offset + index] = values[index];
  1985. return array;
  1986. }
  1987. //#endregion
  1988. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isFlattenable.js
  1989. var spreadableSymbol = Symbol$1 ? Symbol$1.isConcatSpreadable : void 0;
  1990. function isFlattenable(value) {
  1991. return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);
  1992. }
  1993. //#endregion
  1994. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFlatten.js
  1995. function baseFlatten(array, depth, predicate, isStrict, result) {
  1996. var index = -1, length = array.length;
  1997. predicate || (predicate = isFlattenable);
  1998. result || (result = []);
  1999. while (++index < length) {
  2000. var value = array[index];
  2001. if (depth > 0 && predicate(value)) if (depth > 1) baseFlatten(value, depth - 1, predicate, isStrict, result);
  2002. else arrayPush(result, value);
  2003. else if (!isStrict) result[result.length] = value;
  2004. }
  2005. return result;
  2006. }
  2007. //#endregion
  2008. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flatten.js
  2009. function flatten(array) {
  2010. return (array == null ? 0 : array.length) ? baseFlatten(array, 1) : [];
  2011. }
  2012. //#endregion
  2013. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_flatRest.js
  2014. function flatRest(func) {
  2015. return setToString(overRest(func, void 0, flatten), func + "");
  2016. }
  2017. //#endregion
  2018. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getPrototype.js
  2019. var getPrototype = overArg(Object.getPrototypeOf, Object);
  2020. //#endregion
  2021. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.js
  2022. var objectTag$3 = "[object Object]";
  2023. var funcProto = Function.prototype, objectProto = Object.prototype;
  2024. var funcToString = funcProto.toString;
  2025. var hasOwnProperty$4 = objectProto.hasOwnProperty;
  2026. var objectCtorString = funcToString.call(Object);
  2027. function isPlainObject(value) {
  2028. if (!isObjectLike(value) || baseGetTag(value) != objectTag$3) return false;
  2029. var proto = getPrototype(value);
  2030. if (proto === null) return true;
  2031. var Ctor = hasOwnProperty$4.call(proto, "constructor") && proto.constructor;
  2032. return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
  2033. }
  2034. //#endregion
  2035. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSlice.js
  2036. function baseSlice(array, start, end) {
  2037. var index = -1, length = array.length;
  2038. if (start < 0) start = -start > length ? 0 : length + start;
  2039. end = end > length ? length : end;
  2040. if (end < 0) end += length;
  2041. length = start > end ? 0 : end - start >>> 0;
  2042. start >>>= 0;
  2043. var result = Array(length);
  2044. while (++index < length) result[index] = array[index + start];
  2045. return result;
  2046. }
  2047. //#endregion
  2048. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/castArray.js
  2049. function castArray$1() {
  2050. if (!arguments.length) return [];
  2051. var value = arguments[0];
  2052. return isArray(value) ? value : [value];
  2053. }
  2054. //#endregion
  2055. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseClamp.js
  2056. function baseClamp(number, lower, upper) {
  2057. if (number === number) {
  2058. if (upper !== void 0) number = number <= upper ? number : upper;
  2059. if (lower !== void 0) number = number >= lower ? number : lower;
  2060. }
  2061. return number;
  2062. }
  2063. //#endregion
  2064. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/clamp.js
  2065. function clamp$1(number, lower, upper) {
  2066. if (upper === void 0) {
  2067. upper = lower;
  2068. lower = void 0;
  2069. }
  2070. if (upper !== void 0) {
  2071. upper = toNumber(upper);
  2072. upper = upper === upper ? upper : 0;
  2073. }
  2074. if (lower !== void 0) {
  2075. lower = toNumber(lower);
  2076. lower = lower === lower ? lower : 0;
  2077. }
  2078. return baseClamp(toNumber(number), lower, upper);
  2079. }
  2080. //#endregion
  2081. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackClear.js
  2082. function stackClear() {
  2083. this.__data__ = new ListCache();
  2084. this.size = 0;
  2085. }
  2086. //#endregion
  2087. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackDelete.js
  2088. function stackDelete(key) {
  2089. var data = this.__data__, result = data["delete"](key);
  2090. this.size = data.size;
  2091. return result;
  2092. }
  2093. //#endregion
  2094. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackGet.js
  2095. function stackGet(key) {
  2096. return this.__data__.get(key);
  2097. }
  2098. //#endregion
  2099. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackHas.js
  2100. function stackHas(key) {
  2101. return this.__data__.has(key);
  2102. }
  2103. //#endregion
  2104. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_stackSet.js
  2105. var LARGE_ARRAY_SIZE$1 = 200;
  2106. function stackSet(key, value) {
  2107. var data = this.__data__;
  2108. if (data instanceof ListCache) {
  2109. var pairs = data.__data__;
  2110. if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE$1 - 1) {
  2111. pairs.push([key, value]);
  2112. this.size = ++data.size;
  2113. return this;
  2114. }
  2115. data = this.__data__ = new MapCache(pairs);
  2116. }
  2117. data.set(key, value);
  2118. this.size = data.size;
  2119. return this;
  2120. }
  2121. //#endregion
  2122. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Stack.js
  2123. function Stack(entries) {
  2124. var data = this.__data__ = new ListCache(entries);
  2125. this.size = data.size;
  2126. }
  2127. Stack.prototype.clear = stackClear;
  2128. Stack.prototype["delete"] = stackDelete;
  2129. Stack.prototype.get = stackGet;
  2130. Stack.prototype.has = stackHas;
  2131. Stack.prototype.set = stackSet;
  2132. //#endregion
  2133. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssign.js
  2134. function baseAssign(object, source) {
  2135. return object && copyObject(source, keys(source), object);
  2136. }
  2137. //#endregion
  2138. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseAssignIn.js
  2139. function baseAssignIn(object, source) {
  2140. return object && copyObject(source, keysIn(source), object);
  2141. }
  2142. //#endregion
  2143. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneBuffer.js
  2144. var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
  2145. var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
  2146. var Buffer$1 = freeModule && freeModule.exports === freeExports ? root.Buffer : void 0, allocUnsafe = Buffer$1 ? Buffer$1.allocUnsafe : void 0;
  2147. function cloneBuffer(buffer, isDeep) {
  2148. if (isDeep) return buffer.slice();
  2149. var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
  2150. buffer.copy(result);
  2151. return result;
  2152. }
  2153. //#endregion
  2154. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayFilter.js
  2155. function arrayFilter(array, predicate) {
  2156. var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];
  2157. while (++index < length) {
  2158. var value = array[index];
  2159. if (predicate(value, index, array)) result[resIndex++] = value;
  2160. }
  2161. return result;
  2162. }
  2163. //#endregion
  2164. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/stubArray.js
  2165. function stubArray() {
  2166. return [];
  2167. }
  2168. //#endregion
  2169. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbols.js
  2170. var propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
  2171. var nativeGetSymbols = Object.getOwnPropertySymbols;
  2172. var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
  2173. if (object == null) return [];
  2174. object = Object(object);
  2175. return arrayFilter(nativeGetSymbols(object), function(symbol) {
  2176. return propertyIsEnumerable.call(object, symbol);
  2177. });
  2178. };
  2179. //#endregion
  2180. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbols.js
  2181. function copySymbols(source, object) {
  2182. return copyObject(source, getSymbols(source), object);
  2183. }
  2184. //#endregion
  2185. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getSymbolsIn.js
  2186. var getSymbolsIn = !Object.getOwnPropertySymbols ? stubArray : function(object) {
  2187. var result = [];
  2188. while (object) {
  2189. arrayPush(result, getSymbols(object));
  2190. object = getPrototype(object);
  2191. }
  2192. return result;
  2193. };
  2194. //#endregion
  2195. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_copySymbolsIn.js
  2196. function copySymbolsIn(source, object) {
  2197. return copyObject(source, getSymbolsIn(source), object);
  2198. }
  2199. //#endregion
  2200. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseGetAllKeys.js
  2201. function baseGetAllKeys(object, keysFunc, symbolsFunc) {
  2202. var result = keysFunc(object);
  2203. return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
  2204. }
  2205. //#endregion
  2206. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeys.js
  2207. function getAllKeys(object) {
  2208. return baseGetAllKeys(object, keys, getSymbols);
  2209. }
  2210. //#endregion
  2211. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getAllKeysIn.js
  2212. function getAllKeysIn(object) {
  2213. return baseGetAllKeys(object, keysIn, getSymbolsIn);
  2214. }
  2215. //#endregion
  2216. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_DataView.js
  2217. var DataView = getNative(root, "DataView");
  2218. //#endregion
  2219. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Promise.js
  2220. var Promise$1 = getNative(root, "Promise");
  2221. //#endregion
  2222. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Set.js
  2223. var Set$1 = getNative(root, "Set");
  2224. //#endregion
  2225. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getTag.js
  2226. var mapTag$4 = "[object Map]", objectTag$2 = "[object Object]", promiseTag = "[object Promise]", setTag$4 = "[object Set]", weakMapTag$1 = "[object WeakMap]";
  2227. var dataViewTag$3 = "[object DataView]";
  2228. var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1);
  2229. var getTag = baseGetTag;
  2230. if (DataView && getTag(new DataView(/* @__PURE__ */ new ArrayBuffer(1))) != dataViewTag$3 || Map$1 && getTag(new Map$1()) != mapTag$4 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$4 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1) getTag = function(value) {
  2231. var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
  2232. if (ctorString) switch (ctorString) {
  2233. case dataViewCtorString: return dataViewTag$3;
  2234. case mapCtorString: return mapTag$4;
  2235. case promiseCtorString: return promiseTag;
  2236. case setCtorString: return setTag$4;
  2237. case weakMapCtorString: return weakMapTag$1;
  2238. }
  2239. return result;
  2240. };
  2241. var _getTag_default = getTag;
  2242. //#endregion
  2243. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneArray.js
  2244. var hasOwnProperty$3 = Object.prototype.hasOwnProperty;
  2245. function initCloneArray(array) {
  2246. var length = array.length, result = new array.constructor(length);
  2247. if (length && typeof array[0] == "string" && hasOwnProperty$3.call(array, "index")) {
  2248. result.index = array.index;
  2249. result.input = array.input;
  2250. }
  2251. return result;
  2252. }
  2253. //#endregion
  2254. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_Uint8Array.js
  2255. var Uint8Array$1 = root.Uint8Array;
  2256. //#endregion
  2257. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneArrayBuffer.js
  2258. function cloneArrayBuffer(arrayBuffer) {
  2259. var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
  2260. new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer));
  2261. return result;
  2262. }
  2263. //#endregion
  2264. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneDataView.js
  2265. function cloneDataView(dataView, isDeep) {
  2266. var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
  2267. return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
  2268. }
  2269. //#endregion
  2270. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneRegExp.js
  2271. var reFlags = /\w*$/;
  2272. function cloneRegExp(regexp) {
  2273. var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
  2274. result.lastIndex = regexp.lastIndex;
  2275. return result;
  2276. }
  2277. //#endregion
  2278. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneSymbol.js
  2279. var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : void 0;
  2280. function cloneSymbol(symbol) {
  2281. return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {};
  2282. }
  2283. //#endregion
  2284. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cloneTypedArray.js
  2285. function cloneTypedArray(typedArray, isDeep) {
  2286. var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
  2287. return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
  2288. }
  2289. //#endregion
  2290. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneByTag.js
  2291. var boolTag$2 = "[object Boolean]", dateTag$2 = "[object Date]", mapTag$3 = "[object Map]", numberTag$2 = "[object Number]", regexpTag$2 = "[object RegExp]", setTag$3 = "[object Set]", stringTag$2 = "[object String]", symbolTag$2 = "[object Symbol]";
  2292. var arrayBufferTag$2 = "[object ArrayBuffer]", dataViewTag$2 = "[object DataView]", float32Tag$1 = "[object Float32Array]", float64Tag$1 = "[object Float64Array]", int8Tag$1 = "[object Int8Array]", int16Tag$1 = "[object Int16Array]", int32Tag$1 = "[object Int32Array]", uint8Tag$1 = "[object Uint8Array]", uint8ClampedTag$1 = "[object Uint8ClampedArray]", uint16Tag$1 = "[object Uint16Array]", uint32Tag$1 = "[object Uint32Array]";
  2293. function initCloneByTag(object, tag, isDeep) {
  2294. var Ctor = object.constructor;
  2295. switch (tag) {
  2296. case arrayBufferTag$2: return cloneArrayBuffer(object);
  2297. case boolTag$2:
  2298. case dateTag$2: return new Ctor(+object);
  2299. case dataViewTag$2: return cloneDataView(object, isDeep);
  2300. case float32Tag$1:
  2301. case float64Tag$1:
  2302. case int8Tag$1:
  2303. case int16Tag$1:
  2304. case int32Tag$1:
  2305. case uint8Tag$1:
  2306. case uint8ClampedTag$1:
  2307. case uint16Tag$1:
  2308. case uint32Tag$1: return cloneTypedArray(object, isDeep);
  2309. case mapTag$3: return new Ctor();
  2310. case numberTag$2:
  2311. case stringTag$2: return new Ctor(object);
  2312. case regexpTag$2: return cloneRegExp(object);
  2313. case setTag$3: return new Ctor();
  2314. case symbolTag$2: return cloneSymbol(object);
  2315. }
  2316. }
  2317. //#endregion
  2318. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_initCloneObject.js
  2319. function initCloneObject(object) {
  2320. return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};
  2321. }
  2322. //#endregion
  2323. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMap.js
  2324. var mapTag$2 = "[object Map]";
  2325. function baseIsMap(value) {
  2326. return isObjectLike(value) && _getTag_default(value) == mapTag$2;
  2327. }
  2328. //#endregion
  2329. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isMap.js
  2330. var nodeIsMap = nodeUtil && nodeUtil.isMap;
  2331. var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
  2332. //#endregion
  2333. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsSet.js
  2334. var setTag$2 = "[object Set]";
  2335. function baseIsSet(value) {
  2336. return isObjectLike(value) && _getTag_default(value) == setTag$2;
  2337. }
  2338. //#endregion
  2339. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isSet.js
  2340. var nodeIsSet = nodeUtil && nodeUtil.isSet;
  2341. var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
  2342. //#endregion
  2343. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseClone.js
  2344. var CLONE_DEEP_FLAG$2 = 1, CLONE_FLAT_FLAG$1 = 2, CLONE_SYMBOLS_FLAG$2 = 4;
  2345. var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", errorTag$1 = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag$1 = "[object Map]", numberTag$1 = "[object Number]", objectTag$1 = "[object Object]", regexpTag$1 = "[object RegExp]", setTag$1 = "[object Set]", stringTag$1 = "[object String]", symbolTag$1 = "[object Symbol]", weakMapTag = "[object WeakMap]";
  2346. var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$1 = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
  2347. var cloneableTags = {};
  2348. cloneableTags[argsTag$1] = cloneableTags[arrayTag$1] = cloneableTags[arrayBufferTag$1] = cloneableTags[dataViewTag$1] = cloneableTags[boolTag$1] = cloneableTags[dateTag$1] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag$1] = cloneableTags[numberTag$1] = cloneableTags[objectTag$1] = cloneableTags[regexpTag$1] = cloneableTags[setTag$1] = cloneableTags[stringTag$1] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  2349. cloneableTags[errorTag$1] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
  2350. function baseClone(value, bitmask, customizer, key, object, stack) {
  2351. var result, isDeep = bitmask & CLONE_DEEP_FLAG$2, isFlat = bitmask & CLONE_FLAT_FLAG$1, isFull = bitmask & CLONE_SYMBOLS_FLAG$2;
  2352. if (customizer) result = object ? customizer(value, key, object, stack) : customizer(value);
  2353. if (result !== void 0) return result;
  2354. if (!isObject(value)) return value;
  2355. var isArr = isArray(value);
  2356. if (isArr) {
  2357. result = initCloneArray(value);
  2358. if (!isDeep) return copyArray(value, result);
  2359. } else {
  2360. var tag = _getTag_default(value), isFunc = tag == funcTag || tag == genTag;
  2361. if (isBuffer(value)) return cloneBuffer(value, isDeep);
  2362. if (tag == objectTag$1 || tag == argsTag$1 || isFunc && !object) {
  2363. result = isFlat || isFunc ? {} : initCloneObject(value);
  2364. if (!isDeep) return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));
  2365. } else {
  2366. if (!cloneableTags[tag]) return object ? value : {};
  2367. result = initCloneByTag(value, tag, isDeep);
  2368. }
  2369. }
  2370. stack || (stack = new Stack());
  2371. var stacked = stack.get(value);
  2372. if (stacked) return stacked;
  2373. stack.set(value, result);
  2374. if (isSet(value)) value.forEach(function(subValue) {
  2375. result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
  2376. });
  2377. else if (isMap(value)) value.forEach(function(subValue, key) {
  2378. result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
  2379. });
  2380. var props = isArr ? void 0 : (isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys)(value);
  2381. arrayEach(props || value, function(subValue, key) {
  2382. if (props) {
  2383. key = subValue;
  2384. subValue = value[key];
  2385. }
  2386. assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
  2387. });
  2388. return result;
  2389. }
  2390. //#endregion
  2391. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/cloneDeep.js
  2392. var CLONE_DEEP_FLAG$1 = 1, CLONE_SYMBOLS_FLAG$1 = 4;
  2393. function cloneDeep(value) {
  2394. return baseClone(value, CLONE_DEEP_FLAG$1 | CLONE_SYMBOLS_FLAG$1);
  2395. }
  2396. //#endregion
  2397. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheAdd.js
  2398. var HASH_UNDEFINED = "__lodash_hash_undefined__";
  2399. function setCacheAdd(value) {
  2400. this.__data__.set(value, HASH_UNDEFINED);
  2401. return this;
  2402. }
  2403. //#endregion
  2404. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setCacheHas.js
  2405. function setCacheHas(value) {
  2406. return this.__data__.has(value);
  2407. }
  2408. //#endregion
  2409. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_SetCache.js
  2410. function SetCache(values) {
  2411. var index = -1, length = values == null ? 0 : values.length;
  2412. this.__data__ = new MapCache();
  2413. while (++index < length) this.add(values[index]);
  2414. }
  2415. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
  2416. SetCache.prototype.has = setCacheHas;
  2417. //#endregion
  2418. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arraySome.js
  2419. function arraySome(array, predicate) {
  2420. var index = -1, length = array == null ? 0 : array.length;
  2421. while (++index < length) if (predicate(array[index], index, array)) return true;
  2422. return false;
  2423. }
  2424. //#endregion
  2425. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_cacheHas.js
  2426. function cacheHas(cache, key) {
  2427. return cache.has(key);
  2428. }
  2429. //#endregion
  2430. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalArrays.js
  2431. var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2;
  2432. function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
  2433. var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length;
  2434. if (arrLength != othLength && !(isPartial && othLength > arrLength)) return false;
  2435. var arrStacked = stack.get(array);
  2436. var othStacked = stack.get(other);
  2437. if (arrStacked && othStacked) return arrStacked == other && othStacked == array;
  2438. var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0;
  2439. stack.set(array, other);
  2440. stack.set(other, array);
  2441. while (++index < arrLength) {
  2442. var arrValue = array[index], othValue = other[index];
  2443. if (customizer) var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
  2444. if (compared !== void 0) {
  2445. if (compared) continue;
  2446. result = false;
  2447. break;
  2448. }
  2449. if (seen) {
  2450. if (!arraySome(other, function(othValue, othIndex) {
  2451. if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) return seen.push(othIndex);
  2452. })) {
  2453. result = false;
  2454. break;
  2455. }
  2456. } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
  2457. result = false;
  2458. break;
  2459. }
  2460. }
  2461. stack["delete"](array);
  2462. stack["delete"](other);
  2463. return result;
  2464. }
  2465. //#endregion
  2466. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_mapToArray.js
  2467. function mapToArray(map) {
  2468. var index = -1, result = Array(map.size);
  2469. map.forEach(function(value, key) {
  2470. result[++index] = [key, value];
  2471. });
  2472. return result;
  2473. }
  2474. //#endregion
  2475. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_setToArray.js
  2476. function setToArray(set) {
  2477. var index = -1, result = Array(set.size);
  2478. set.forEach(function(value) {
  2479. result[++index] = value;
  2480. });
  2481. return result;
  2482. }
  2483. //#endregion
  2484. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalByTag.js
  2485. var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2;
  2486. var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag = "[object Map]", numberTag = "[object Number]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]";
  2487. var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]";
  2488. var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
  2489. function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
  2490. switch (tag) {
  2491. case dataViewTag:
  2492. if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) return false;
  2493. object = object.buffer;
  2494. other = other.buffer;
  2495. case arrayBufferTag:
  2496. if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) return false;
  2497. return true;
  2498. case boolTag:
  2499. case dateTag:
  2500. case numberTag: return eq(+object, +other);
  2501. case errorTag: return object.name == other.name && object.message == other.message;
  2502. case regexpTag:
  2503. case stringTag: return object == other + "";
  2504. case mapTag: var convert = mapToArray;
  2505. case setTag:
  2506. var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4;
  2507. convert || (convert = setToArray);
  2508. if (object.size != other.size && !isPartial) return false;
  2509. var stacked = stack.get(object);
  2510. if (stacked) return stacked == other;
  2511. bitmask |= COMPARE_UNORDERED_FLAG$2;
  2512. stack.set(object, other);
  2513. var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
  2514. stack["delete"](object);
  2515. return result;
  2516. case symbolTag: if (symbolValueOf) return symbolValueOf.call(object) == symbolValueOf.call(other);
  2517. }
  2518. return false;
  2519. }
  2520. //#endregion
  2521. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_equalObjects.js
  2522. var COMPARE_PARTIAL_FLAG$3 = 1;
  2523. var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
  2524. function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
  2525. var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length;
  2526. if (objLength != getAllKeys(other).length && !isPartial) return false;
  2527. var index = objLength;
  2528. while (index--) {
  2529. var key = objProps[index];
  2530. if (!(isPartial ? key in other : hasOwnProperty$2.call(other, key))) return false;
  2531. }
  2532. var objStacked = stack.get(object);
  2533. var othStacked = stack.get(other);
  2534. if (objStacked && othStacked) return objStacked == other && othStacked == object;
  2535. var result = true;
  2536. stack.set(object, other);
  2537. stack.set(other, object);
  2538. var skipCtor = isPartial;
  2539. while (++index < objLength) {
  2540. key = objProps[index];
  2541. var objValue = object[key], othValue = other[key];
  2542. if (customizer) var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
  2543. if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
  2544. result = false;
  2545. break;
  2546. }
  2547. skipCtor || (skipCtor = key == "constructor");
  2548. }
  2549. if (result && !skipCtor) {
  2550. var objCtor = object.constructor, othCtor = other.constructor;
  2551. if (objCtor != othCtor && "constructor" in object && "constructor" in other && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) result = false;
  2552. }
  2553. stack["delete"](object);
  2554. stack["delete"](other);
  2555. return result;
  2556. }
  2557. //#endregion
  2558. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqualDeep.js
  2559. var COMPARE_PARTIAL_FLAG$2 = 1;
  2560. var argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]";
  2561. var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
  2562. function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
  2563. var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : _getTag_default(object), othTag = othIsArr ? arrayTag : _getTag_default(other);
  2564. objTag = objTag == argsTag ? objectTag : objTag;
  2565. othTag = othTag == argsTag ? objectTag : othTag;
  2566. var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
  2567. if (isSameTag && isBuffer(object)) {
  2568. if (!isBuffer(other)) return false;
  2569. objIsArr = true;
  2570. objIsObj = false;
  2571. }
  2572. if (isSameTag && !objIsObj) {
  2573. stack || (stack = new Stack());
  2574. return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
  2575. }
  2576. if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) {
  2577. var objIsWrapped = objIsObj && hasOwnProperty$1.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty$1.call(other, "__wrapped__");
  2578. if (objIsWrapped || othIsWrapped) {
  2579. var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
  2580. stack || (stack = new Stack());
  2581. return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
  2582. }
  2583. }
  2584. if (!isSameTag) return false;
  2585. stack || (stack = new Stack());
  2586. return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
  2587. }
  2588. //#endregion
  2589. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsEqual.js
  2590. function baseIsEqual(value, other, bitmask, customizer, stack) {
  2591. if (value === other) return true;
  2592. if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) return value !== value && other !== other;
  2593. return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
  2594. }
  2595. //#endregion
  2596. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIsMatch.js
  2597. var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2;
  2598. function baseIsMatch(object, source, matchData, customizer) {
  2599. var index = matchData.length, length = index, noCustomizer = !customizer;
  2600. if (object == null) return !length;
  2601. object = Object(object);
  2602. while (index--) {
  2603. var data = matchData[index];
  2604. if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) return false;
  2605. }
  2606. while (++index < length) {
  2607. data = matchData[index];
  2608. var key = data[0], objValue = object[key], srcValue = data[1];
  2609. if (noCustomizer && data[2]) {
  2610. if (objValue === void 0 && !(key in object)) return false;
  2611. } else {
  2612. var stack = new Stack();
  2613. if (customizer) var result = customizer(objValue, srcValue, key, object, source, stack);
  2614. if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) return false;
  2615. }
  2616. }
  2617. return true;
  2618. }
  2619. //#endregion
  2620. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isStrictComparable.js
  2621. function isStrictComparable(value) {
  2622. return value === value && !isObject(value);
  2623. }
  2624. //#endregion
  2625. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_getMatchData.js
  2626. function getMatchData(object) {
  2627. var result = keys(object), length = result.length;
  2628. while (length--) {
  2629. var key = result[length], value = object[key];
  2630. result[length] = [
  2631. key,
  2632. value,
  2633. isStrictComparable(value)
  2634. ];
  2635. }
  2636. return result;
  2637. }
  2638. //#endregion
  2639. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_matchesStrictComparable.js
  2640. function matchesStrictComparable(key, srcValue) {
  2641. return function(object) {
  2642. if (object == null) return false;
  2643. return object[key] === srcValue && (srcValue !== void 0 || key in Object(object));
  2644. };
  2645. }
  2646. //#endregion
  2647. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMatches.js
  2648. function baseMatches(source) {
  2649. var matchData = getMatchData(source);
  2650. if (matchData.length == 1 && matchData[0][2]) return matchesStrictComparable(matchData[0][0], matchData[0][1]);
  2651. return function(object) {
  2652. return object === source || baseIsMatch(object, source, matchData);
  2653. };
  2654. }
  2655. //#endregion
  2656. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseHasIn.js
  2657. function baseHasIn(object, key) {
  2658. return object != null && key in Object(object);
  2659. }
  2660. //#endregion
  2661. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_hasPath.js
  2662. function hasPath(object, path, hasFunc) {
  2663. path = castPath(path, object);
  2664. var index = -1, length = path.length, result = false;
  2665. while (++index < length) {
  2666. var key = toKey(path[index]);
  2667. if (!(result = object != null && hasFunc(object, key))) break;
  2668. object = object[key];
  2669. }
  2670. if (result || ++index != length) return result;
  2671. length = object == null ? 0 : object.length;
  2672. return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));
  2673. }
  2674. //#endregion
  2675. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/hasIn.js
  2676. function hasIn(object, path) {
  2677. return object != null && hasPath(object, path, baseHasIn);
  2678. }
  2679. //#endregion
  2680. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMatchesProperty.js
  2681. var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;
  2682. function baseMatchesProperty(path, srcValue) {
  2683. if (isKey(path) && isStrictComparable(srcValue)) return matchesStrictComparable(toKey(path), srcValue);
  2684. return function(object) {
  2685. var objValue = get(object, path);
  2686. return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
  2687. };
  2688. }
  2689. //#endregion
  2690. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseProperty.js
  2691. function baseProperty(key) {
  2692. return function(object) {
  2693. return object == null ? void 0 : object[key];
  2694. };
  2695. }
  2696. //#endregion
  2697. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePropertyDeep.js
  2698. function basePropertyDeep(path) {
  2699. return function(object) {
  2700. return baseGet(object, path);
  2701. };
  2702. }
  2703. //#endregion
  2704. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/property.js
  2705. function property(path) {
  2706. return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
  2707. }
  2708. //#endregion
  2709. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseIteratee.js
  2710. function baseIteratee(value) {
  2711. if (typeof value == "function") return value;
  2712. if (value == null) return identity;
  2713. if (typeof value == "object") return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
  2714. return property(value);
  2715. }
  2716. //#endregion
  2717. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createBaseFor.js
  2718. function createBaseFor(fromRight) {
  2719. return function(object, iteratee, keysFunc) {
  2720. var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
  2721. while (length--) {
  2722. var key = props[fromRight ? length : ++index];
  2723. if (iteratee(iterable[key], key, iterable) === false) break;
  2724. }
  2725. return object;
  2726. };
  2727. }
  2728. //#endregion
  2729. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseFor.js
  2730. var baseFor = createBaseFor();
  2731. //#endregion
  2732. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseForOwn.js
  2733. function baseForOwn(object, iteratee) {
  2734. return object && baseFor(object, iteratee, keys);
  2735. }
  2736. //#endregion
  2737. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createBaseEach.js
  2738. function createBaseEach(eachFunc, fromRight) {
  2739. return function(collection, iteratee) {
  2740. if (collection == null) return collection;
  2741. if (!isArrayLike(collection)) return eachFunc(collection, iteratee);
  2742. var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection);
  2743. while (fromRight ? index-- : ++index < length) if (iteratee(iterable[index], index, iterable) === false) break;
  2744. return collection;
  2745. };
  2746. }
  2747. //#endregion
  2748. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseEach.js
  2749. var baseEach = createBaseEach(baseForOwn);
  2750. //#endregion
  2751. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/now.js
  2752. var now = function() {
  2753. return root.Date.now();
  2754. };
  2755. //#endregion
  2756. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/debounce.js
  2757. var FUNC_ERROR_TEXT$1 = "Expected a function";
  2758. var nativeMax$1 = Math.max, nativeMin$1 = Math.min;
  2759. function debounce(func, wait, options) {
  2760. var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
  2761. if (typeof func != "function") throw new TypeError(FUNC_ERROR_TEXT$1);
  2762. wait = toNumber(wait) || 0;
  2763. if (isObject(options)) {
  2764. leading = !!options.leading;
  2765. maxing = "maxWait" in options;
  2766. maxWait = maxing ? nativeMax$1(toNumber(options.maxWait) || 0, wait) : maxWait;
  2767. trailing = "trailing" in options ? !!options.trailing : trailing;
  2768. }
  2769. function invokeFunc(time) {
  2770. var args = lastArgs, thisArg = lastThis;
  2771. lastArgs = lastThis = void 0;
  2772. lastInvokeTime = time;
  2773. result = func.apply(thisArg, args);
  2774. return result;
  2775. }
  2776. function leadingEdge(time) {
  2777. lastInvokeTime = time;
  2778. timerId = setTimeout(timerExpired, wait);
  2779. return leading ? invokeFunc(time) : result;
  2780. }
  2781. function remainingWait(time) {
  2782. var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
  2783. return maxing ? nativeMin$1(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
  2784. }
  2785. function shouldInvoke(time) {
  2786. var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
  2787. return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
  2788. }
  2789. function timerExpired() {
  2790. var time = now();
  2791. if (shouldInvoke(time)) return trailingEdge(time);
  2792. timerId = setTimeout(timerExpired, remainingWait(time));
  2793. }
  2794. function trailingEdge(time) {
  2795. timerId = void 0;
  2796. if (trailing && lastArgs) return invokeFunc(time);
  2797. lastArgs = lastThis = void 0;
  2798. return result;
  2799. }
  2800. function cancel() {
  2801. if (timerId !== void 0) clearTimeout(timerId);
  2802. lastInvokeTime = 0;
  2803. lastArgs = lastCallTime = lastThis = timerId = void 0;
  2804. }
  2805. function flush() {
  2806. return timerId === void 0 ? result : trailingEdge(now());
  2807. }
  2808. function debounced() {
  2809. var time = now(), isInvoking = shouldInvoke(time);
  2810. lastArgs = arguments;
  2811. lastThis = this;
  2812. lastCallTime = time;
  2813. if (isInvoking) {
  2814. if (timerId === void 0) return leadingEdge(lastCallTime);
  2815. if (maxing) {
  2816. clearTimeout(timerId);
  2817. timerId = setTimeout(timerExpired, wait);
  2818. return invokeFunc(lastCallTime);
  2819. }
  2820. }
  2821. if (timerId === void 0) timerId = setTimeout(timerExpired, wait);
  2822. return result;
  2823. }
  2824. debounced.cancel = cancel;
  2825. debounced.flush = flush;
  2826. return debounced;
  2827. }
  2828. //#endregion
  2829. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignMergeValue.js
  2830. function assignMergeValue(object, key, value) {
  2831. if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) baseAssignValue(object, key, value);
  2832. }
  2833. //#endregion
  2834. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isArrayLikeObject.js
  2835. function isArrayLikeObject(value) {
  2836. return isObjectLike(value) && isArrayLike(value);
  2837. }
  2838. //#endregion
  2839. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_safeGet.js
  2840. function safeGet(object, key) {
  2841. if (key === "constructor" && typeof object[key] === "function") return;
  2842. if (key == "__proto__") return;
  2843. return object[key];
  2844. }
  2845. //#endregion
  2846. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toPlainObject.js
  2847. function toPlainObject(value) {
  2848. return copyObject(value, keysIn(value));
  2849. }
  2850. //#endregion
  2851. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMergeDeep.js
  2852. function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
  2853. var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);
  2854. if (stacked) {
  2855. assignMergeValue(object, key, stacked);
  2856. return;
  2857. }
  2858. var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
  2859. var isCommon = newValue === void 0;
  2860. if (isCommon) {
  2861. var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
  2862. newValue = srcValue;
  2863. if (isArr || isBuff || isTyped) if (isArray(objValue)) newValue = objValue;
  2864. else if (isArrayLikeObject(objValue)) newValue = copyArray(objValue);
  2865. else if (isBuff) {
  2866. isCommon = false;
  2867. newValue = cloneBuffer(srcValue, true);
  2868. } else if (isTyped) {
  2869. isCommon = false;
  2870. newValue = cloneTypedArray(srcValue, true);
  2871. } else newValue = [];
  2872. else if (isPlainObject(srcValue) || isArguments(srcValue)) {
  2873. newValue = objValue;
  2874. if (isArguments(objValue)) newValue = toPlainObject(objValue);
  2875. else if (!isObject(objValue) || isFunction(objValue)) newValue = initCloneObject(srcValue);
  2876. } else isCommon = false;
  2877. }
  2878. if (isCommon) {
  2879. stack.set(srcValue, newValue);
  2880. mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
  2881. stack["delete"](srcValue);
  2882. }
  2883. assignMergeValue(object, key, newValue);
  2884. }
  2885. //#endregion
  2886. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMerge.js
  2887. function baseMerge(object, source, srcIndex, customizer, stack) {
  2888. if (object === source) return;
  2889. baseFor(source, function(srcValue, key) {
  2890. stack || (stack = new Stack());
  2891. if (isObject(srcValue)) baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
  2892. else {
  2893. var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
  2894. if (newValue === void 0) newValue = srcValue;
  2895. assignMergeValue(object, key, newValue);
  2896. }
  2897. }, keysIn);
  2898. }
  2899. //#endregion
  2900. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_arrayIncludesWith.js
  2901. function arrayIncludesWith(array, value, comparator) {
  2902. var index = -1, length = array == null ? 0 : array.length;
  2903. while (++index < length) if (comparator(value, array[index])) return true;
  2904. return false;
  2905. }
  2906. //#endregion
  2907. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/last.js
  2908. function last(array) {
  2909. var length = array == null ? 0 : array.length;
  2910. return length ? array[length - 1] : void 0;
  2911. }
  2912. //#endregion
  2913. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/findLastIndex.js
  2914. var nativeMax = Math.max, nativeMin = Math.min;
  2915. function findLastIndex(array, predicate, fromIndex) {
  2916. var length = array == null ? 0 : array.length;
  2917. if (!length) return -1;
  2918. var index = length - 1;
  2919. if (fromIndex !== void 0) {
  2920. index = toInteger(fromIndex);
  2921. index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
  2922. }
  2923. return baseFindIndex(array, baseIteratee(predicate, 3), index, true);
  2924. }
  2925. //#endregion
  2926. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMap.js
  2927. function baseMap(collection, iteratee) {
  2928. var index = -1, result = isArrayLike(collection) ? Array(collection.length) : [];
  2929. baseEach(collection, function(value, key, collection) {
  2930. result[++index] = iteratee(value, key, collection);
  2931. });
  2932. return result;
  2933. }
  2934. //#endregion
  2935. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/map.js
  2936. function map(collection, iteratee) {
  2937. return (isArray(collection) ? arrayMap : baseMap)(collection, baseIteratee(iteratee, 3));
  2938. }
  2939. //#endregion
  2940. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flatMap.js
  2941. function flatMap(collection, iteratee) {
  2942. return baseFlatten(map(collection, iteratee), 1);
  2943. }
  2944. //#endregion
  2945. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/flattenDeep.js
  2946. var INFINITY = Infinity;
  2947. function flattenDeep(array) {
  2948. return (array == null ? 0 : array.length) ? baseFlatten(array, INFINITY) : [];
  2949. }
  2950. //#endregion
  2951. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/fromPairs.js
  2952. function fromPairs(pairs) {
  2953. var index = -1, length = pairs == null ? 0 : pairs.length, result = {};
  2954. while (++index < length) {
  2955. var pair = pairs[index];
  2956. baseAssignValue(result, pair[0], pair[1]);
  2957. }
  2958. return result;
  2959. }
  2960. //#endregion
  2961. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_parent.js
  2962. function parent(object, path) {
  2963. return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
  2964. }
  2965. //#endregion
  2966. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isEqual.js
  2967. function isEqual$1(value, other) {
  2968. return baseIsEqual(value, other);
  2969. }
  2970. //#endregion
  2971. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNil.js
  2972. function isNil(value) {
  2973. return value == null;
  2974. }
  2975. //#endregion
  2976. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isNull.js
  2977. function isNull(value) {
  2978. return value === null;
  2979. }
  2980. //#endregion
  2981. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isUndefined.js
  2982. function isUndefined$1(value) {
  2983. return value === void 0;
  2984. }
  2985. //#endregion
  2986. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/merge.js
  2987. var merge = createAssigner(function(object, source, srcIndex) {
  2988. baseMerge(object, source, srcIndex);
  2989. });
  2990. //#endregion
  2991. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUnset.js
  2992. var hasOwnProperty = Object.prototype.hasOwnProperty;
  2993. function baseUnset(object, path) {
  2994. path = castPath(path, object);
  2995. var index = -1, length = path.length;
  2996. if (!length) return true;
  2997. while (++index < length) {
  2998. var key = toKey(path[index]);
  2999. if (key === "__proto__" && !hasOwnProperty.call(object, "__proto__")) return false;
  3000. if ((key === "constructor" || key === "prototype") && index < length - 1) return false;
  3001. }
  3002. var obj = parent(object, path);
  3003. return obj == null || delete obj[toKey(last(path))];
  3004. }
  3005. //#endregion
  3006. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_customOmitClone.js
  3007. function customOmitClone(value) {
  3008. return isPlainObject(value) ? void 0 : value;
  3009. }
  3010. //#endregion
  3011. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/omit.js
  3012. var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
  3013. var omit = flatRest(function(object, paths) {
  3014. var result = {};
  3015. if (object == null) return result;
  3016. var isDeep = false;
  3017. paths = arrayMap(paths, function(path) {
  3018. path = castPath(path, object);
  3019. isDeep || (isDeep = path.length > 1);
  3020. return path;
  3021. });
  3022. copyObject(object, getAllKeysIn(object), result);
  3023. if (isDeep) result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
  3024. var length = paths.length;
  3025. while (length--) baseUnset(result, paths[length]);
  3026. return result;
  3027. });
  3028. //#endregion
  3029. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseSet.js
  3030. function baseSet(object, path, value, customizer) {
  3031. if (!isObject(object)) return object;
  3032. path = castPath(path, object);
  3033. var index = -1, length = path.length, lastIndex = length - 1, nested = object;
  3034. while (nested != null && ++index < length) {
  3035. var key = toKey(path[index]), newValue = value;
  3036. if (key === "__proto__" || key === "constructor" || key === "prototype") return object;
  3037. if (index != lastIndex) {
  3038. var objValue = nested[key];
  3039. newValue = customizer ? customizer(objValue, key, nested) : void 0;
  3040. if (newValue === void 0) newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};
  3041. }
  3042. assignValue(nested, key, newValue);
  3043. nested = nested[key];
  3044. }
  3045. return object;
  3046. }
  3047. //#endregion
  3048. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePickBy.js
  3049. function basePickBy(object, paths, predicate) {
  3050. var index = -1, length = paths.length, result = {};
  3051. while (++index < length) {
  3052. var path = paths[index], value = baseGet(object, path);
  3053. if (predicate(value, path)) baseSet(result, castPath(path, object), value);
  3054. }
  3055. return result;
  3056. }
  3057. //#endregion
  3058. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_basePick.js
  3059. function basePick(object, paths) {
  3060. return basePickBy(object, paths, function(value, path) {
  3061. return hasIn(object, path);
  3062. });
  3063. }
  3064. //#endregion
  3065. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/pick.js
  3066. var pick = flatRest(function(object, paths) {
  3067. return object == null ? {} : basePick(object, paths);
  3068. });
  3069. //#endregion
  3070. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/set.js
  3071. function set(object, path, value) {
  3072. return object == null ? object : baseSet(object, path, value);
  3073. }
  3074. //#endregion
  3075. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/throttle.js
  3076. var FUNC_ERROR_TEXT = "Expected a function";
  3077. function throttle(func, wait, options) {
  3078. var leading = true, trailing = true;
  3079. if (typeof func != "function") throw new TypeError(FUNC_ERROR_TEXT);
  3080. if (isObject(options)) {
  3081. leading = "leading" in options ? !!options.leading : leading;
  3082. trailing = "trailing" in options ? !!options.trailing : trailing;
  3083. }
  3084. return debounce(func, wait, {
  3085. "leading": leading,
  3086. "maxWait": wait,
  3087. "trailing": trailing
  3088. });
  3089. }
  3090. //#endregion
  3091. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createSet.js
  3092. var createSet = !(Set$1 && 1 / setToArray(new Set$1([, -0]))[1] == Infinity) ? noop : function(values) {
  3093. return new Set$1(values);
  3094. };
  3095. //#endregion
  3096. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseUniq.js
  3097. var LARGE_ARRAY_SIZE = 200;
  3098. function baseUniq(array, iteratee, comparator) {
  3099. var index = -1, includes = arrayIncludes, length = array.length, isCommon = true, result = [], seen = result;
  3100. if (comparator) {
  3101. isCommon = false;
  3102. includes = arrayIncludesWith;
  3103. } else if (length >= LARGE_ARRAY_SIZE) {
  3104. var set = iteratee ? null : createSet(array);
  3105. if (set) return setToArray(set);
  3106. isCommon = false;
  3107. includes = cacheHas;
  3108. seen = new SetCache();
  3109. } else seen = iteratee ? [] : result;
  3110. outer: while (++index < length) {
  3111. var value = array[index], computed = iteratee ? iteratee(value) : value;
  3112. value = comparator || value !== 0 ? value : 0;
  3113. if (isCommon && computed === computed) {
  3114. var seenIndex = seen.length;
  3115. while (seenIndex--) if (seen[seenIndex] === computed) continue outer;
  3116. if (iteratee) seen.push(computed);
  3117. result.push(value);
  3118. } else if (!includes(seen, computed, comparator)) {
  3119. if (seen !== result) seen.push(computed);
  3120. result.push(value);
  3121. }
  3122. }
  3123. return result;
  3124. }
  3125. //#endregion
  3126. //#region ../../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/union.js
  3127. var union = baseRest(function(arrays) {
  3128. return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
  3129. });
  3130. //#endregion
  3131. //#region ../../packages/utils/types.ts
  3132. const isUndefined = (val) => val === void 0;
  3133. const isBoolean = (val) => typeof val === "boolean";
  3134. const isNumber = (val) => typeof val === "number";
  3135. const isEmpty = (val) => !val && val !== 0 || isArray$1(val) && val.length === 0 || isObject$1(val) && !Object.keys(val).length;
  3136. const isElement$1 = (e) => {
  3137. if (typeof Element === "undefined") return false;
  3138. return e instanceof Element;
  3139. };
  3140. const isPropAbsent = (prop) => isNil(prop);
  3141. const isStringNumber = (val) => {
  3142. if (!isString(val)) return false;
  3143. return !Number.isNaN(Number(val));
  3144. };
  3145. const isWindow = (val) => val === window;
  3146. //#endregion
  3147. //#region ../../packages/utils/raf.ts
  3148. const rAF = (fn) => isClient ? window.requestAnimationFrame(fn) : setTimeout(fn, 16);
  3149. const cAF = (handle) => isClient ? window.cancelAnimationFrame(handle) : clearTimeout(handle);
  3150. //#endregion
  3151. //#region ../../packages/utils/strings.ts
  3152. const escapeStringRegexp = (string = "") => string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
  3153. const capitalize = (str) => capitalize$1(str);
  3154. //#endregion
  3155. //#region ../../packages/utils/objects.ts
  3156. const keysOf = (arr) => Object.keys(arr);
  3157. const entriesOf = (arr) => Object.entries(arr);
  3158. const getProp = (obj, path, defaultValue) => {
  3159. return {
  3160. get value() {
  3161. return get(obj, path, defaultValue);
  3162. },
  3163. set value(val) {
  3164. set(obj, path, val);
  3165. }
  3166. };
  3167. };
  3168. //#endregion
  3169. //#region ../../packages/utils/error.ts
  3170. var ElementPlusError = class extends Error {
  3171. constructor(m) {
  3172. super(m);
  3173. this.name = "ElementPlusError";
  3174. }
  3175. };
  3176. function throwError(scope, m) {
  3177. throw new ElementPlusError(`[${scope}] ${m}`);
  3178. }
  3179. function debugWarn(scope, message) {}
  3180. //#endregion
  3181. //#region ../../packages/utils/dom/style.ts
  3182. const SCOPE$9 = "utils/dom/style";
  3183. const classNameToArray = (cls = "") => cls.split(" ").filter((item) => !!item.trim());
  3184. const hasClass = (el, cls) => {
  3185. if (!el || !cls) return false;
  3186. if (cls.includes(" ")) throw new Error("className should not contain space.");
  3187. return el.classList.contains(cls);
  3188. };
  3189. const addClass = (el, cls) => {
  3190. if (!el || !cls.trim()) return;
  3191. el.classList.add(...classNameToArray(cls));
  3192. };
  3193. const removeClass = (el, cls) => {
  3194. if (!el || !cls.trim()) return;
  3195. el.classList.remove(...classNameToArray(cls));
  3196. };
  3197. const getStyle = (element, styleName) => {
  3198. if (!isClient || !element || !styleName || isShadowRoot$1(element)) return "";
  3199. let key = camelize(styleName);
  3200. if (key === "float") key = "cssFloat";
  3201. try {
  3202. const style = element.style[key];
  3203. if (style) return style;
  3204. const computed = document.defaultView?.getComputedStyle(element, "");
  3205. return computed ? computed[key] : "";
  3206. } catch {
  3207. return element.style[key];
  3208. }
  3209. };
  3210. const setStyle = (element, styleName, value) => {
  3211. if (!element || !styleName) return;
  3212. if (isObject$1(styleName)) entriesOf(styleName).forEach(([prop, value]) => setStyle(element, prop, value));
  3213. else {
  3214. const key = camelize(styleName);
  3215. element.style[key] = value;
  3216. }
  3217. };
  3218. function addUnit(value, defaultUnit = "px") {
  3219. if (!value && value !== 0) return "";
  3220. if (isNumber(value) || isStringNumber(value)) return `${value}${defaultUnit}`;
  3221. else if (isString(value)) return value;
  3222. /* @__PURE__ */ debugWarn(SCOPE$9, "binding value must be a string or number");
  3223. }
  3224. //#endregion
  3225. //#region ../../packages/utils/dom/scroll.ts
  3226. const isScroll = (el, isVertical) => {
  3227. if (!isClient) return false;
  3228. const key = {
  3229. undefined: "overflow",
  3230. true: "overflow-y",
  3231. false: "overflow-x"
  3232. }[String(isVertical)];
  3233. const overflow = getStyle(el, key);
  3234. return [
  3235. "scroll",
  3236. "auto",
  3237. "overlay"
  3238. ].some((s) => overflow.includes(s));
  3239. };
  3240. const getScrollContainer = (el, isVertical) => {
  3241. if (!isClient) return;
  3242. let parent = el;
  3243. while (parent) {
  3244. if ([
  3245. window,
  3246. document,
  3247. document.documentElement
  3248. ].includes(parent)) return window;
  3249. if (isScroll(parent, isVertical)) return parent;
  3250. if (isShadowRoot$1(parent)) parent = parent.host;
  3251. else parent = parent.parentNode;
  3252. }
  3253. return parent;
  3254. };
  3255. let scrollBarWidth;
  3256. const getScrollBarWidth = (namespace) => {
  3257. if (!isClient) return 0;
  3258. if (scrollBarWidth !== void 0) return scrollBarWidth;
  3259. const outer = document.createElement("div");
  3260. outer.className = `${namespace}-scrollbar__wrap`;
  3261. outer.style.visibility = "hidden";
  3262. outer.style.width = "100px";
  3263. outer.style.position = "absolute";
  3264. outer.style.top = "-9999px";
  3265. document.body.appendChild(outer);
  3266. const widthNoScroll = outer.offsetWidth;
  3267. outer.style.overflow = "scroll";
  3268. const inner = document.createElement("div");
  3269. inner.style.width = "100%";
  3270. outer.appendChild(inner);
  3271. const widthWithScroll = inner.offsetWidth;
  3272. outer.parentNode?.removeChild(outer);
  3273. scrollBarWidth = widthNoScroll - widthWithScroll;
  3274. return scrollBarWidth;
  3275. };
  3276. function scrollIntoView(container, selected) {
  3277. if (!isClient) return;
  3278. if (!selected) {
  3279. container.scrollTop = 0;
  3280. return;
  3281. }
  3282. const offsetParents = [];
  3283. let pointer = selected.offsetParent;
  3284. while (pointer !== null && container !== pointer && container.contains(pointer)) {
  3285. offsetParents.push(pointer);
  3286. pointer = pointer.offsetParent;
  3287. }
  3288. const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0);
  3289. const bottom = top + selected.offsetHeight;
  3290. const viewRectTop = container.scrollTop;
  3291. const viewRectBottom = viewRectTop + container.clientHeight;
  3292. if (top < viewRectTop) container.scrollTop = top;
  3293. else if (bottom > viewRectBottom) container.scrollTop = bottom - container.clientHeight;
  3294. }
  3295. function animateScrollTo(container, from, to, duration, callback) {
  3296. const startTime = Date.now();
  3297. let handle;
  3298. const scroll = () => {
  3299. const time = Date.now() - startTime;
  3300. const nextScrollTop = easeInOutCubic(time > duration ? duration : time, from, to, duration);
  3301. if (isWindow(container)) container.scrollTo(window.pageXOffset, nextScrollTop);
  3302. else container.scrollTop = nextScrollTop;
  3303. if (time < duration) handle = rAF(scroll);
  3304. else if (isFunction$1(callback)) callback();
  3305. };
  3306. scroll();
  3307. return () => {
  3308. handle && cAF(handle);
  3309. };
  3310. }
  3311. const getScrollElement = (target, container) => {
  3312. if (isWindow(container)) return target.ownerDocument.documentElement;
  3313. return container;
  3314. };
  3315. const getScrollTop = (container) => {
  3316. if (isWindow(container)) return window.scrollY;
  3317. return container.scrollTop;
  3318. };
  3319. //#endregion
  3320. //#region ../../packages/utils/dom/element.ts
  3321. const getElement = ((target) => {
  3322. if (!isClient || target === "") return null;
  3323. if (isString(target)) try {
  3324. return document.querySelector(target);
  3325. } catch {
  3326. return null;
  3327. }
  3328. return target;
  3329. });
  3330. //#endregion
  3331. //#region ../../packages/utils/vue/global-node.ts
  3332. const globalNodes = [];
  3333. let target = !isClient ? void 0 : document.body;
  3334. function createGlobalNode(id) {
  3335. const el = document.createElement("div");
  3336. if (id !== void 0) el.setAttribute("id", id);
  3337. if (target) {
  3338. target.appendChild(el);
  3339. globalNodes.push(el);
  3340. }
  3341. return el;
  3342. }
  3343. function removeGlobalNode(el) {
  3344. globalNodes.splice(globalNodes.indexOf(el), 1);
  3345. el.remove();
  3346. }
  3347. //#endregion
  3348. //#region ../../node_modules/.pnpm/@element-plus+icons-vue@2.3.2_vue@3.5.25/node_modules/@element-plus/icons-vue/dist/index.js
  3349. /*! Element Plus Icons Vue v2.3.2 */
  3350. var arrow_down_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3351. name: "ArrowDown",
  3352. __name: "arrow-down",
  3353. setup(__props) {
  3354. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3355. xmlns: "http://www.w3.org/2000/svg",
  3356. viewBox: "0 0 1024 1024"
  3357. }, [(0, vue.createElementVNode)("path", {
  3358. fill: "currentColor",
  3359. d: "M831.872 340.864 512 652.672 192.128 340.864a30.59 30.59 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.59 30.59 0 0 0-42.752 0z"
  3360. })]));
  3361. }
  3362. });
  3363. var arrow_left_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3364. name: "ArrowLeft",
  3365. __name: "arrow-left",
  3366. setup(__props) {
  3367. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3368. xmlns: "http://www.w3.org/2000/svg",
  3369. viewBox: "0 0 1024 1024"
  3370. }, [(0, vue.createElementVNode)("path", {
  3371. fill: "currentColor",
  3372. d: "M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.59 30.59 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.59 30.59 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0"
  3373. })]));
  3374. }
  3375. });
  3376. var arrow_right_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3377. name: "ArrowRight",
  3378. __name: "arrow-right",
  3379. setup(__props) {
  3380. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3381. xmlns: "http://www.w3.org/2000/svg",
  3382. viewBox: "0 0 1024 1024"
  3383. }, [(0, vue.createElementVNode)("path", {
  3384. fill: "currentColor",
  3385. d: "M340.864 149.312a30.59 30.59 0 0 0 0 42.752L652.736 512 340.864 831.872a30.59 30.59 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"
  3386. })]));
  3387. }
  3388. });
  3389. var arrow_up_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3390. name: "ArrowUp",
  3391. __name: "arrow-up",
  3392. setup(__props) {
  3393. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3394. xmlns: "http://www.w3.org/2000/svg",
  3395. viewBox: "0 0 1024 1024"
  3396. }, [(0, vue.createElementVNode)("path", {
  3397. fill: "currentColor",
  3398. d: "m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"
  3399. })]));
  3400. }
  3401. });
  3402. var back_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3403. name: "Back",
  3404. __name: "back",
  3405. setup(__props) {
  3406. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3407. xmlns: "http://www.w3.org/2000/svg",
  3408. viewBox: "0 0 1024 1024"
  3409. }, [(0, vue.createElementVNode)("path", {
  3410. fill: "currentColor",
  3411. d: "M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"
  3412. }), (0, vue.createElementVNode)("path", {
  3413. fill: "currentColor",
  3414. d: "m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"
  3415. })]));
  3416. }
  3417. });
  3418. var calendar_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
  3419. name: "Calendar",
  3420. __name: "calendar",
  3421. setup(__props) {
  3422. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3423. xmlns: "http://www.w3.org/2000/svg",
  3424. viewBox: "0 0 1024 1024"
  3425. }, [(0, vue.createElementVNode)("path", {
  3426. fill: "currentColor",
  3427. d: "M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"
  3428. })]));
  3429. }
  3430. });
  3431. var caret_right_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3432. name: "CaretRight",
  3433. __name: "caret-right",
  3434. setup(__props) {
  3435. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3436. xmlns: "http://www.w3.org/2000/svg",
  3437. viewBox: "0 0 1024 1024"
  3438. }, [(0, vue.createElementVNode)("path", {
  3439. fill: "currentColor",
  3440. d: "M384 192v640l384-320.064z"
  3441. })]));
  3442. }
  3443. });
  3444. var caret_top_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3445. name: "CaretTop",
  3446. __name: "caret-top",
  3447. setup(__props) {
  3448. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3449. xmlns: "http://www.w3.org/2000/svg",
  3450. viewBox: "0 0 1024 1024"
  3451. }, [(0, vue.createElementVNode)("path", {
  3452. fill: "currentColor",
  3453. d: "M512 320 192 704h639.936z"
  3454. })]));
  3455. }
  3456. });
  3457. var check_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3458. name: "Check",
  3459. __name: "check",
  3460. setup(__props) {
  3461. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3462. xmlns: "http://www.w3.org/2000/svg",
  3463. viewBox: "0 0 1024 1024"
  3464. }, [(0, vue.createElementVNode)("path", {
  3465. fill: "currentColor",
  3466. d: "M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"
  3467. })]));
  3468. }
  3469. });
  3470. var circle_check_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3471. name: "CircleCheckFilled",
  3472. __name: "circle-check-filled",
  3473. setup(__props) {
  3474. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3475. xmlns: "http://www.w3.org/2000/svg",
  3476. viewBox: "0 0 1024 1024"
  3477. }, [(0, vue.createElementVNode)("path", {
  3478. fill: "currentColor",
  3479. d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"
  3480. })]));
  3481. }
  3482. });
  3483. var circle_check_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3484. name: "CircleCheck",
  3485. __name: "circle-check",
  3486. setup(__props) {
  3487. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3488. xmlns: "http://www.w3.org/2000/svg",
  3489. viewBox: "0 0 1024 1024"
  3490. }, [(0, vue.createElementVNode)("path", {
  3491. fill: "currentColor",
  3492. d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"
  3493. }), (0, vue.createElementVNode)("path", {
  3494. fill: "currentColor",
  3495. d: "M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752z"
  3496. })]));
  3497. }
  3498. });
  3499. var circle_close_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3500. name: "CircleCloseFilled",
  3501. __name: "circle-close-filled",
  3502. setup(__props) {
  3503. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3504. xmlns: "http://www.w3.org/2000/svg",
  3505. viewBox: "0 0 1024 1024"
  3506. }, [(0, vue.createElementVNode)("path", {
  3507. fill: "currentColor",
  3508. d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"
  3509. })]));
  3510. }
  3511. });
  3512. var circle_close_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3513. name: "CircleClose",
  3514. __name: "circle-close",
  3515. setup(__props) {
  3516. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3517. xmlns: "http://www.w3.org/2000/svg",
  3518. viewBox: "0 0 1024 1024"
  3519. }, [(0, vue.createElementVNode)("path", {
  3520. fill: "currentColor",
  3521. d: "m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"
  3522. }), (0, vue.createElementVNode)("path", {
  3523. fill: "currentColor",
  3524. d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"
  3525. })]));
  3526. }
  3527. });
  3528. var clock_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3529. name: "Clock",
  3530. __name: "clock",
  3531. setup(__props) {
  3532. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3533. xmlns: "http://www.w3.org/2000/svg",
  3534. viewBox: "0 0 1024 1024"
  3535. }, [
  3536. (0, vue.createElementVNode)("path", {
  3537. fill: "currentColor",
  3538. d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"
  3539. }),
  3540. (0, vue.createElementVNode)("path", {
  3541. fill: "currentColor",
  3542. d: "M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"
  3543. }),
  3544. (0, vue.createElementVNode)("path", {
  3545. fill: "currentColor",
  3546. d: "M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"
  3547. })
  3548. ]));
  3549. }
  3550. });
  3551. var close_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3552. name: "Close",
  3553. __name: "close",
  3554. setup(__props) {
  3555. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3556. xmlns: "http://www.w3.org/2000/svg",
  3557. viewBox: "0 0 1024 1024"
  3558. }, [(0, vue.createElementVNode)("path", {
  3559. fill: "currentColor",
  3560. d: "M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"
  3561. })]));
  3562. }
  3563. });
  3564. var d_arrow_left_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3565. name: "DArrowLeft",
  3566. __name: "d-arrow-left",
  3567. setup(__props) {
  3568. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3569. xmlns: "http://www.w3.org/2000/svg",
  3570. viewBox: "0 0 1024 1024"
  3571. }, [(0, vue.createElementVNode)("path", {
  3572. fill: "currentColor",
  3573. d: "M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672zm256 0a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.59 30.59 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672z"
  3574. })]));
  3575. }
  3576. });
  3577. var d_arrow_right_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3578. name: "DArrowRight",
  3579. __name: "d-arrow-right",
  3580. setup(__props) {
  3581. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3582. xmlns: "http://www.w3.org/2000/svg",
  3583. viewBox: "0 0 1024 1024"
  3584. }, [(0, vue.createElementVNode)("path", {
  3585. fill: "currentColor",
  3586. d: "M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.59 30.59 0 0 1 0-42.752L764.736 512 452.864 192a30.59 30.59 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.59 30.59 0 0 1 0-42.752L508.736 512 196.864 192a30.59 30.59 0 0 1 0-42.688"
  3587. })]));
  3588. }
  3589. });
  3590. var delete_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3591. name: "Delete",
  3592. __name: "delete",
  3593. setup(__props) {
  3594. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3595. xmlns: "http://www.w3.org/2000/svg",
  3596. viewBox: "0 0 1024 1024"
  3597. }, [(0, vue.createElementVNode)("path", {
  3598. fill: "currentColor",
  3599. d: "M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"
  3600. })]));
  3601. }
  3602. });
  3603. var document_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3604. name: "Document",
  3605. __name: "document",
  3606. setup(__props) {
  3607. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3608. xmlns: "http://www.w3.org/2000/svg",
  3609. viewBox: "0 0 1024 1024"
  3610. }, [(0, vue.createElementVNode)("path", {
  3611. fill: "currentColor",
  3612. d: "M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"
  3613. })]));
  3614. }
  3615. });
  3616. var full_screen_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3617. name: "FullScreen",
  3618. __name: "full-screen",
  3619. setup(__props) {
  3620. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3621. xmlns: "http://www.w3.org/2000/svg",
  3622. viewBox: "0 0 1024 1024"
  3623. }, [(0, vue.createElementVNode)("path", {
  3624. fill: "currentColor",
  3625. d: "m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"
  3626. })]));
  3627. }
  3628. });
  3629. var hide_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3630. name: "Hide",
  3631. __name: "hide",
  3632. setup(__props) {
  3633. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3634. xmlns: "http://www.w3.org/2000/svg",
  3635. viewBox: "0 0 1024 1024"
  3636. }, [(0, vue.createElementVNode)("path", {
  3637. fill: "currentColor",
  3638. d: "M876.8 156.8c0-9.6-3.2-16-9.6-22.4s-12.8-9.6-22.4-9.6-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176S0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4s3.2 16 9.6 22.4 12.8 9.6 22.4 9.6 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4m-646.4 528Q115.2 579.2 76.8 512q43.2-72 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4m140.8-96Q352 555.2 352 512c0-44.8 16-83.2 48-112s67.2-48 112-48c28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6q-43.2 72-153.6 172.8c-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176S1024 528 1024 512s-48.001-73.6-134.401-176"
  3639. }), (0, vue.createElementVNode)("path", {
  3640. fill: "currentColor",
  3641. d: "M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112s-67.2 48-112 48"
  3642. })]));
  3643. }
  3644. });
  3645. var info_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3646. name: "InfoFilled",
  3647. __name: "info-filled",
  3648. setup(__props) {
  3649. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3650. xmlns: "http://www.w3.org/2000/svg",
  3651. viewBox: "0 0 1024 1024"
  3652. }, [(0, vue.createElementVNode)("path", {
  3653. fill: "currentColor",
  3654. d: "M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.99 12.99 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"
  3655. })]));
  3656. }
  3657. });
  3658. var loading_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3659. name: "Loading",
  3660. __name: "loading",
  3661. setup(__props) {
  3662. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3663. xmlns: "http://www.w3.org/2000/svg",
  3664. viewBox: "0 0 1024 1024"
  3665. }, [(0, vue.createElementVNode)("path", {
  3666. fill: "currentColor",
  3667. d: "M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248m452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248M828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0"
  3668. })]));
  3669. }
  3670. });
  3671. var minus_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3672. name: "Minus",
  3673. __name: "minus",
  3674. setup(__props) {
  3675. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3676. xmlns: "http://www.w3.org/2000/svg",
  3677. viewBox: "0 0 1024 1024"
  3678. }, [(0, vue.createElementVNode)("path", {
  3679. fill: "currentColor",
  3680. d: "M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"
  3681. })]));
  3682. }
  3683. });
  3684. var more_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3685. name: "MoreFilled",
  3686. __name: "more-filled",
  3687. setup(__props) {
  3688. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3689. xmlns: "http://www.w3.org/2000/svg",
  3690. viewBox: "0 0 1024 1024"
  3691. }, [(0, vue.createElementVNode)("path", {
  3692. fill: "currentColor",
  3693. d: "M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"
  3694. })]));
  3695. }
  3696. });
  3697. var more_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3698. name: "More",
  3699. __name: "more",
  3700. setup(__props) {
  3701. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3702. xmlns: "http://www.w3.org/2000/svg",
  3703. viewBox: "0 0 1024 1024"
  3704. }, [(0, vue.createElementVNode)("path", {
  3705. fill: "currentColor",
  3706. d: "M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"
  3707. })]));
  3708. }
  3709. });
  3710. var picture_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3711. name: "PictureFilled",
  3712. __name: "picture-filled",
  3713. setup(__props) {
  3714. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3715. xmlns: "http://www.w3.org/2000/svg",
  3716. viewBox: "0 0 1024 1024"
  3717. }, [(0, vue.createElementVNode)("path", {
  3718. fill: "currentColor",
  3719. d: "M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"
  3720. })]));
  3721. }
  3722. });
  3723. var plus_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3724. name: "Plus",
  3725. __name: "plus",
  3726. setup(__props) {
  3727. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3728. xmlns: "http://www.w3.org/2000/svg",
  3729. viewBox: "0 0 1024 1024"
  3730. }, [(0, vue.createElementVNode)("path", {
  3731. fill: "currentColor",
  3732. d: "M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"
  3733. })]));
  3734. }
  3735. });
  3736. var question_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3737. name: "QuestionFilled",
  3738. __name: "question-filled",
  3739. setup(__props) {
  3740. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3741. xmlns: "http://www.w3.org/2000/svg",
  3742. viewBox: "0 0 1024 1024"
  3743. }, [(0, vue.createElementVNode)("path", {
  3744. fill: "currentColor",
  3745. d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592q0-64.416-42.24-101.376c-28.16-25.344-65.472-37.312-111.232-37.312m-12.672 406.208a54.27 54.27 0 0 0-38.72 14.784 49.4 49.4 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.85 54.85 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.97 51.97 0 0 0-15.488-38.016 55.94 55.94 0 0 0-39.424-14.784"
  3746. })]));
  3747. }
  3748. });
  3749. var refresh_left_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3750. name: "RefreshLeft",
  3751. __name: "refresh-left",
  3752. setup(__props) {
  3753. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3754. xmlns: "http://www.w3.org/2000/svg",
  3755. viewBox: "0 0 1024 1024"
  3756. }, [(0, vue.createElementVNode)("path", {
  3757. fill: "currentColor",
  3758. d: "M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"
  3759. })]));
  3760. }
  3761. });
  3762. var refresh_right_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3763. name: "RefreshRight",
  3764. __name: "refresh-right",
  3765. setup(__props) {
  3766. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3767. xmlns: "http://www.w3.org/2000/svg",
  3768. viewBox: "0 0 1024 1024"
  3769. }, [(0, vue.createElementVNode)("path", {
  3770. fill: "currentColor",
  3771. d: "M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88"
  3772. })]));
  3773. }
  3774. });
  3775. var scale_to_original_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3776. name: "ScaleToOriginal",
  3777. __name: "scale-to-original",
  3778. setup(__props) {
  3779. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3780. xmlns: "http://www.w3.org/2000/svg",
  3781. viewBox: "0 0 1024 1024"
  3782. }, [(0, vue.createElementVNode)("path", {
  3783. fill: "currentColor",
  3784. d: "M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118m-361.412 0a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118M512 361.412a30.12 30.12 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.12 30.12 0 0 0 512 361.412M512 512a30.12 30.12 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.12 30.12 0 0 0 512 512"
  3785. })]));
  3786. }
  3787. });
  3788. var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3789. name: "Search",
  3790. __name: "search",
  3791. setup(__props) {
  3792. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3793. xmlns: "http://www.w3.org/2000/svg",
  3794. viewBox: "0 0 1024 1024"
  3795. }, [(0, vue.createElementVNode)("path", {
  3796. fill: "currentColor",
  3797. d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"
  3798. })]));
  3799. }
  3800. });
  3801. var sort_down_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3802. name: "SortDown",
  3803. __name: "sort-down",
  3804. setup(__props) {
  3805. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3806. xmlns: "http://www.w3.org/2000/svg",
  3807. viewBox: "0 0 1024 1024"
  3808. }, [(0, vue.createElementVNode)("path", {
  3809. fill: "currentColor",
  3810. d: "M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"
  3811. })]));
  3812. }
  3813. });
  3814. var sort_up_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3815. name: "SortUp",
  3816. __name: "sort-up",
  3817. setup(__props) {
  3818. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3819. xmlns: "http://www.w3.org/2000/svg",
  3820. viewBox: "0 0 1024 1024"
  3821. }, [(0, vue.createElementVNode)("path", {
  3822. fill: "currentColor",
  3823. d: "M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"
  3824. })]));
  3825. }
  3826. });
  3827. var star_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3828. name: "StarFilled",
  3829. __name: "star-filled",
  3830. setup(__props) {
  3831. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3832. xmlns: "http://www.w3.org/2000/svg",
  3833. viewBox: "0 0 1024 1024"
  3834. }, [(0, vue.createElementVNode)("path", {
  3835. fill: "currentColor",
  3836. d: "M313.6 924.48a70.4 70.4 0 0 1-74.152-5.365 70.4 70.4 0 0 1-27.992-68.875l37.888-220.928L88.96 472.96a70.4 70.4 0 0 1 3.788-104.225A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 100.246-28.595 70.4 70.4 0 0 1 25.962 28.595l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"
  3837. })]));
  3838. }
  3839. });
  3840. var star_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3841. name: "Star",
  3842. __name: "star",
  3843. setup(__props) {
  3844. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3845. xmlns: "http://www.w3.org/2000/svg",
  3846. viewBox: "0 0 1024 1024"
  3847. }, [(0, vue.createElementVNode)("path", {
  3848. fill: "currentColor",
  3849. d: "m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"
  3850. })]));
  3851. }
  3852. });
  3853. var success_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3854. name: "SuccessFilled",
  3855. __name: "success-filled",
  3856. setup(__props) {
  3857. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3858. xmlns: "http://www.w3.org/2000/svg",
  3859. viewBox: "0 0 1024 1024"
  3860. }, [(0, vue.createElementVNode)("path", {
  3861. fill: "currentColor",
  3862. d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"
  3863. })]));
  3864. }
  3865. });
  3866. var view_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3867. name: "View",
  3868. __name: "view",
  3869. setup(__props) {
  3870. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3871. xmlns: "http://www.w3.org/2000/svg",
  3872. viewBox: "0 0 1024 1024"
  3873. }, [(0, vue.createElementVNode)("path", {
  3874. fill: "currentColor",
  3875. d: "M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288m0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.19 160.19 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"
  3876. })]));
  3877. }
  3878. });
  3879. var warning_filled_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3880. name: "WarningFilled",
  3881. __name: "warning-filled",
  3882. setup(__props) {
  3883. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3884. xmlns: "http://www.w3.org/2000/svg",
  3885. viewBox: "0 0 1024 1024"
  3886. }, [(0, vue.createElementVNode)("path", {
  3887. fill: "currentColor",
  3888. d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"
  3889. })]));
  3890. }
  3891. });
  3892. var zoom_in_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3893. name: "ZoomIn",
  3894. __name: "zoom-in",
  3895. setup(__props) {
  3896. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3897. xmlns: "http://www.w3.org/2000/svg",
  3898. viewBox: "0 0 1024 1024"
  3899. }, [(0, vue.createElementVNode)("path", {
  3900. fill: "currentColor",
  3901. d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"
  3902. })]));
  3903. }
  3904. });
  3905. var zoom_out_default = /* @__PURE__ */ (0, vue.defineComponent)({
  3906. name: "ZoomOut",
  3907. __name: "zoom-out",
  3908. setup(__props) {
  3909. return (_ctx, _cache) => ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  3910. xmlns: "http://www.w3.org/2000/svg",
  3911. viewBox: "0 0 1024 1024"
  3912. }, [(0, vue.createElementVNode)("path", {
  3913. fill: "currentColor",
  3914. d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"
  3915. })]));
  3916. }
  3917. });
  3918. //#endregion
  3919. //#region ../../packages/utils/vue/props/runtime.ts
  3920. const epPropKey = "__epPropKey";
  3921. const definePropType = (val) => val;
  3922. const isEpProp = (val) => isObject$1(val) && !!val["__epPropKey"];
  3923. const buildProp = (prop, key) => {
  3924. if (!isObject$1(prop) || isEpProp(prop)) return prop;
  3925. const { values, required, default: defaultValue, type, validator } = prop;
  3926. const epProp = {
  3927. type,
  3928. required: !!required,
  3929. validator: values || validator ? (val) => {
  3930. let valid = false;
  3931. let allowedValues = [];
  3932. if (values) {
  3933. allowedValues = Array.from(values);
  3934. if (hasOwn(prop, "default")) allowedValues.push(defaultValue);
  3935. valid ||= allowedValues.includes(val);
  3936. }
  3937. if (validator) valid ||= validator(val);
  3938. if (!valid && allowedValues.length > 0) {
  3939. const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(", ");
  3940. (0, vue.warn)(`Invalid prop: validation failed${key ? ` for prop "${key}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`);
  3941. }
  3942. return valid;
  3943. } : void 0,
  3944. [epPropKey]: true
  3945. };
  3946. if (hasOwn(prop, "default")) epProp.default = defaultValue;
  3947. return epProp;
  3948. };
  3949. const buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [key, buildProp(option, key)]));
  3950. //#endregion
  3951. //#region ../../packages/utils/vue/icon.ts
  3952. const iconPropType = definePropType([
  3953. String,
  3954. Object,
  3955. Function
  3956. ]);
  3957. const CloseComponents = { Close: close_default };
  3958. const TypeComponents = {
  3959. Close: close_default,
  3960. SuccessFilled: success_filled_default,
  3961. InfoFilled: info_filled_default,
  3962. WarningFilled: warning_filled_default,
  3963. CircleCloseFilled: circle_close_filled_default
  3964. };
  3965. const TypeComponentsMap = {
  3966. primary: info_filled_default,
  3967. success: success_filled_default,
  3968. warning: warning_filled_default,
  3969. error: circle_close_filled_default,
  3970. info: info_filled_default
  3971. };
  3972. const ValidateComponentsMap = {
  3973. validating: loading_default,
  3974. success: circle_check_default,
  3975. error: circle_close_default
  3976. };
  3977. //#endregion
  3978. //#region ../../packages/utils/vue/install.ts
  3979. const withPropsDefaultsSetter = (target) => {
  3980. const _p = target.props;
  3981. const props = isArray$1(_p) ? fromPairs(_p.map((key) => [key, {}])) : _p;
  3982. target.setPropsDefaults = (defaults) => {
  3983. if (!props) return;
  3984. for (const [key, value] of Object.entries(defaults)) {
  3985. const prop = props[key];
  3986. if (!hasOwn(props, key)) continue;
  3987. if (isPlainObject(prop)) {
  3988. props[key] = {
  3989. ...prop,
  3990. default: value
  3991. };
  3992. continue;
  3993. }
  3994. props[key] = {
  3995. type: prop,
  3996. default: value
  3997. };
  3998. }
  3999. target.props = props;
  4000. };
  4001. };
  4002. const withInstall = (main, extra) => {
  4003. main.install = (app) => {
  4004. for (const comp of [main, ...Object.values(extra ?? {})]) app.component(comp.name, comp);
  4005. };
  4006. if (extra) for (const [key, comp] of Object.entries(extra)) main[key] = comp;
  4007. withPropsDefaultsSetter(main);
  4008. return main;
  4009. };
  4010. const withInstallFunction = (fn, name) => {
  4011. fn.install = (app) => {
  4012. fn._context = app._context;
  4013. app.config.globalProperties[name] = fn;
  4014. };
  4015. return fn;
  4016. };
  4017. const withInstallDirective = (directive, name) => {
  4018. directive.install = (app) => {
  4019. app.directive(name, directive);
  4020. };
  4021. return directive;
  4022. };
  4023. const withNoopInstall = (component) => {
  4024. component.install = NOOP;
  4025. withPropsDefaultsSetter(component);
  4026. return component;
  4027. };
  4028. //#endregion
  4029. //#region ../../packages/utils/vue/refs.ts
  4030. const composeRefs = (...refs) => {
  4031. return (el) => {
  4032. refs.forEach((ref) => {
  4033. ref.value = el;
  4034. });
  4035. };
  4036. };
  4037. //#endregion
  4038. //#region ../../packages/utils/vue/validator.ts
  4039. const isValidComponentSize = (val) => ["", ...componentSizes].includes(val);
  4040. //#endregion
  4041. //#region ../../packages/utils/vue/vnode.ts
  4042. const SCOPE$8 = "utils/vue/vnode";
  4043. function isFragment(node) {
  4044. return (0, vue.isVNode)(node) && node.type === vue.Fragment;
  4045. }
  4046. function isComment(node) {
  4047. return (0, vue.isVNode)(node) && node.type === vue.Comment;
  4048. }
  4049. function isValidElementNode(node) {
  4050. return (0, vue.isVNode)(node) && !isFragment(node) && !isComment(node);
  4051. }
  4052. const getNormalizedProps = (node) => {
  4053. if (!(0, vue.isVNode)(node)) {
  4054. /* @__PURE__ */ debugWarn(SCOPE$8, "[getNormalizedProps] must be a VNode");
  4055. return {};
  4056. }
  4057. const raw = node.props || {};
  4058. const type = ((0, vue.isVNode)(node.type) ? node.type.props : void 0) || {};
  4059. const props = {};
  4060. Object.keys(type).forEach((key) => {
  4061. if (hasOwn(type[key], "default")) props[key] = type[key].default;
  4062. });
  4063. Object.keys(raw).forEach((key) => {
  4064. props[camelize(key)] = raw[key];
  4065. });
  4066. return props;
  4067. };
  4068. const flattedChildren = (children) => {
  4069. const vNodes = isArray$1(children) ? children : [children];
  4070. const result = [];
  4071. vNodes.forEach((child) => {
  4072. if (isArray$1(child)) result.push(...flattedChildren(child));
  4073. else if ((0, vue.isVNode)(child) && child.component?.subTree) result.push(child, ...flattedChildren(child.component.subTree));
  4074. else if ((0, vue.isVNode)(child) && isArray$1(child.children)) result.push(...flattedChildren(child.children));
  4075. else if ((0, vue.isVNode)(child) && child.shapeFlag === 2) result.push(...flattedChildren(child.type()));
  4076. else result.push(child);
  4077. });
  4078. return result;
  4079. };
  4080. //#endregion
  4081. //#region ../../packages/utils/arrays.ts
  4082. const unique = (arr) => [...new Set(arr)];
  4083. const extractFirst = (arr) => {
  4084. return isArray$1(arr) ? arr[0] : arr;
  4085. };
  4086. const castArray = (arr) => {
  4087. if (!arr && arr !== 0) return [];
  4088. return isArray$1(arr) ? arr : [arr];
  4089. };
  4090. //#endregion
  4091. //#region ../../packages/utils/typescript.ts
  4092. const mutable = (val) => val;
  4093. //#endregion
  4094. //#region ../../packages/utils/throttleByRaf.ts
  4095. function throttleByRaf(cb) {
  4096. let timer = 0;
  4097. const throttle = (...args) => {
  4098. if (timer) cAF(timer);
  4099. timer = rAF(() => {
  4100. cb(...args);
  4101. timer = 0;
  4102. });
  4103. };
  4104. throttle.cancel = () => {
  4105. cAF(timer);
  4106. timer = 0;
  4107. };
  4108. return throttle;
  4109. }
  4110. //#endregion
  4111. //#region ../../packages/utils/numbers.ts
  4112. function isGreaterThan(a, b, epsilon = .03) {
  4113. return a - b > epsilon;
  4114. }
  4115. //#endregion
  4116. //#region ../../packages/hooks/use-attrs/index.ts
  4117. const DEFAULT_EXCLUDE_KEYS = ["class", "style"];
  4118. const LISTENER_PREFIX = /^on[A-Z]/;
  4119. const useAttrs = (params = {}) => {
  4120. const { excludeListeners = false, excludeKeys } = params;
  4121. const allExcludeKeys = (0, vue.computed)(() => {
  4122. return (excludeKeys?.value || []).concat(DEFAULT_EXCLUDE_KEYS);
  4123. });
  4124. const instance = (0, vue.getCurrentInstance)();
  4125. if (!instance) {
  4126. /* @__PURE__ */ debugWarn("use-attrs", "getCurrentInstance() returned null. useAttrs() must be called at the top of a setup function");
  4127. return (0, vue.computed)(() => ({}));
  4128. }
  4129. return (0, vue.computed)(() => fromPairs(Object.entries(instance.proxy?.$attrs).filter(([key]) => !allExcludeKeys.value.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key)))));
  4130. };
  4131. //#endregion
  4132. //#region ../../packages/hooks/use-calc-input-width/index.ts
  4133. function useCalcInputWidth() {
  4134. const calculatorRef = (0, vue.shallowRef)();
  4135. const calculatorWidth = (0, vue.ref)(0);
  4136. const inputStyle = (0, vue.computed)(() => ({ minWidth: `${Math.max(calculatorWidth.value, 11)}px` }));
  4137. const resetCalculatorWidth = () => {
  4138. calculatorWidth.value = calculatorRef.value?.getBoundingClientRect().width ?? 0;
  4139. };
  4140. useResizeObserver(calculatorRef, resetCalculatorWidth);
  4141. return {
  4142. calculatorRef,
  4143. calculatorWidth,
  4144. inputStyle
  4145. };
  4146. }
  4147. //#endregion
  4148. //#region ../../packages/hooks/use-deprecated/index.ts
  4149. const useDeprecated = ({ from, replacement, scope, version, ref, type = "API" }, condition) => {
  4150. (0, vue.watch)(() => (0, vue.unref)(condition), (val) => {
  4151. if (val) /* @__PURE__ */ debugWarn(scope, `[${type}] ${from} is about to be deprecated in version ${version}, please use ${replacement} instead.
  4152. For more detail, please visit: ${ref}
  4153. `);
  4154. }, { immediate: true });
  4155. };
  4156. //#endregion
  4157. //#region ../../packages/hooks/use-draggable/index.ts
  4158. const useDraggable = (targetRef, dragRef, draggable, overflow) => {
  4159. const transform = {
  4160. offsetX: 0,
  4161. offsetY: 0
  4162. };
  4163. const isDragging = (0, vue.ref)(false);
  4164. const adjustPosition = (moveX, moveY) => {
  4165. if (targetRef.value) {
  4166. const { offsetX, offsetY } = transform;
  4167. const targetRect = targetRef.value.getBoundingClientRect();
  4168. const targetLeft = Math.max(targetRect.left, 0);
  4169. const targetTop = Math.max(targetRect.top, 0);
  4170. const targetWidth = targetRect.width;
  4171. const targetHeight = targetRect.height;
  4172. const clientWidth = document.documentElement.clientWidth;
  4173. const clientHeight = document.documentElement.clientHeight;
  4174. const minLeft = -targetLeft + offsetX;
  4175. const minTop = -targetTop + offsetY;
  4176. const maxLeft = clientWidth - targetLeft - targetWidth + offsetX;
  4177. const maxTop = clientHeight - targetTop - (targetHeight < clientHeight ? targetHeight : 0) + offsetY;
  4178. if (!overflow?.value) {
  4179. moveX = clamp$1(moveX, minLeft, maxLeft);
  4180. moveY = clamp$1(moveY, minTop, maxTop);
  4181. }
  4182. transform.offsetX = moveX;
  4183. transform.offsetY = moveY;
  4184. targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(moveY)})`;
  4185. }
  4186. };
  4187. const onMousedown = (e) => {
  4188. const downX = e.clientX;
  4189. const downY = e.clientY;
  4190. const { offsetX, offsetY } = transform;
  4191. const onMousemove = (e) => {
  4192. if (!isDragging.value) isDragging.value = true;
  4193. adjustPosition(offsetX + e.clientX - downX, offsetY + e.clientY - downY);
  4194. };
  4195. const onMouseup = () => {
  4196. isDragging.value = false;
  4197. document.removeEventListener("mousemove", onMousemove);
  4198. document.removeEventListener("mouseup", onMouseup);
  4199. };
  4200. document.addEventListener("mousemove", onMousemove);
  4201. document.addEventListener("mouseup", onMouseup);
  4202. };
  4203. const onDraggable = () => {
  4204. if (dragRef.value && targetRef.value) {
  4205. dragRef.value.addEventListener("mousedown", onMousedown);
  4206. window.addEventListener("resize", updatePosition);
  4207. }
  4208. };
  4209. const offDraggable = () => {
  4210. if (dragRef.value && targetRef.value) {
  4211. dragRef.value.removeEventListener("mousedown", onMousedown);
  4212. window.removeEventListener("resize", updatePosition);
  4213. }
  4214. };
  4215. const resetPosition = () => {
  4216. transform.offsetX = 0;
  4217. transform.offsetY = 0;
  4218. if (targetRef.value) targetRef.value.style.transform = "";
  4219. };
  4220. const updatePosition = () => {
  4221. const { offsetX, offsetY } = transform;
  4222. adjustPosition(offsetX, offsetY);
  4223. };
  4224. (0, vue.onMounted)(() => {
  4225. (0, vue.watchEffect)(() => {
  4226. if (draggable.value) onDraggable();
  4227. else offDraggable();
  4228. });
  4229. });
  4230. (0, vue.onBeforeUnmount)(() => {
  4231. offDraggable();
  4232. });
  4233. return {
  4234. isDragging,
  4235. resetPosition,
  4236. updatePosition
  4237. };
  4238. };
  4239. //#endregion
  4240. //#region ../../packages/hooks/use-focus/index.ts
  4241. const useFocus = (el) => {
  4242. return { focus: () => {
  4243. el.value?.focus?.();
  4244. } };
  4245. };
  4246. //#endregion
  4247. //#region ../../packages/locale/lang/en.ts
  4248. var en_default = {
  4249. name: "en",
  4250. el: {
  4251. breadcrumb: { label: "Breadcrumb" },
  4252. colorpicker: {
  4253. confirm: "OK",
  4254. clear: "Clear",
  4255. defaultLabel: "color picker",
  4256. description: "current color is {color}. press enter to select a new color.",
  4257. alphaLabel: "pick alpha value",
  4258. alphaDescription: "alpha {alpha}, current color is {color}",
  4259. hueLabel: "pick hue value",
  4260. hueDescription: "hue {hue}, current color is {color}",
  4261. svLabel: "pick saturation and brightness value",
  4262. svDescription: "saturation {saturation}, brightness {brightness}, current color is {color}",
  4263. predefineDescription: "select {value} as the color"
  4264. },
  4265. datepicker: {
  4266. now: "Now",
  4267. today: "Today",
  4268. cancel: "Cancel",
  4269. clear: "Clear",
  4270. confirm: "OK",
  4271. dateTablePrompt: "Use the arrow keys and enter to select the day of the month",
  4272. monthTablePrompt: "Use the arrow keys and enter to select the month",
  4273. yearTablePrompt: "Use the arrow keys and enter to select the year",
  4274. selectedDate: "Selected date",
  4275. selectDate: "Select date",
  4276. selectTime: "Select time",
  4277. startDate: "Start Date",
  4278. startTime: "Start Time",
  4279. endDate: "End Date",
  4280. endTime: "End Time",
  4281. prevYear: "Previous Year",
  4282. nextYear: "Next Year",
  4283. prevMonth: "Previous Month",
  4284. nextMonth: "Next Month",
  4285. year: "",
  4286. month1: "January",
  4287. month2: "February",
  4288. month3: "March",
  4289. month4: "April",
  4290. month5: "May",
  4291. month6: "June",
  4292. month7: "July",
  4293. month8: "August",
  4294. month9: "September",
  4295. month10: "October",
  4296. month11: "November",
  4297. month12: "December",
  4298. weeks: {
  4299. sun: "Sun",
  4300. mon: "Mon",
  4301. tue: "Tue",
  4302. wed: "Wed",
  4303. thu: "Thu",
  4304. fri: "Fri",
  4305. sat: "Sat"
  4306. },
  4307. weeksFull: {
  4308. sun: "Sunday",
  4309. mon: "Monday",
  4310. tue: "Tuesday",
  4311. wed: "Wednesday",
  4312. thu: "Thursday",
  4313. fri: "Friday",
  4314. sat: "Saturday"
  4315. },
  4316. months: {
  4317. jan: "Jan",
  4318. feb: "Feb",
  4319. mar: "Mar",
  4320. apr: "Apr",
  4321. may: "May",
  4322. jun: "Jun",
  4323. jul: "Jul",
  4324. aug: "Aug",
  4325. sep: "Sep",
  4326. oct: "Oct",
  4327. nov: "Nov",
  4328. dec: "Dec"
  4329. }
  4330. },
  4331. inputNumber: {
  4332. decrease: "decrease number",
  4333. increase: "increase number"
  4334. },
  4335. select: {
  4336. loading: "Loading",
  4337. noMatch: "No matching data",
  4338. noData: "No data",
  4339. placeholder: "Select"
  4340. },
  4341. mention: { loading: "Loading" },
  4342. dropdown: { toggleDropdown: "Toggle Dropdown" },
  4343. cascader: {
  4344. noMatch: "No matching data",
  4345. loading: "Loading",
  4346. placeholder: "Select",
  4347. noData: "No data"
  4348. },
  4349. pagination: {
  4350. goto: "Go to",
  4351. pagesize: "/page",
  4352. total: "Total {total}",
  4353. pageClassifier: "",
  4354. page: "Page",
  4355. prev: "Go to previous page",
  4356. next: "Go to next page",
  4357. currentPage: "page {pager}",
  4358. prevPages: "Previous {pager} pages",
  4359. nextPages: "Next {pager} pages",
  4360. deprecationWarning: "Deprecated usages detected, please refer to the el-pagination documentation for more details"
  4361. },
  4362. dialog: { close: "Close this dialog" },
  4363. drawer: { close: "Close this dialog" },
  4364. messagebox: {
  4365. title: "Message",
  4366. confirm: "OK",
  4367. cancel: "Cancel",
  4368. error: "Illegal input",
  4369. close: "Close this dialog"
  4370. },
  4371. upload: {
  4372. deleteTip: "press delete to remove",
  4373. delete: "Delete",
  4374. preview: "Preview",
  4375. continue: "Continue"
  4376. },
  4377. slider: {
  4378. defaultLabel: "slider between {min} and {max}",
  4379. defaultRangeStartLabel: "pick start value",
  4380. defaultRangeEndLabel: "pick end value"
  4381. },
  4382. table: {
  4383. emptyText: "No Data",
  4384. confirmFilter: "Confirm",
  4385. resetFilter: "Reset",
  4386. clearFilter: "All",
  4387. sumText: "Sum",
  4388. selectAllLabel: "Select all rows",
  4389. selectRowLabel: "Select this row",
  4390. expandRowLabel: "Expand this row",
  4391. collapseRowLabel: "Collapse this row",
  4392. sortLabel: "Sort by {column}",
  4393. filterLabel: "Filter by {column}"
  4394. },
  4395. tag: { close: "Close this tag" },
  4396. tour: {
  4397. next: "Next",
  4398. previous: "Previous",
  4399. finish: "Finish",
  4400. close: "Close this dialog"
  4401. },
  4402. tree: { emptyText: "No Data" },
  4403. transfer: {
  4404. noMatch: "No matching data",
  4405. noData: "No data",
  4406. titles: ["List 1", "List 2"],
  4407. filterPlaceholder: "Enter keyword",
  4408. noCheckedFormat: "{total} items",
  4409. hasCheckedFormat: "{checked}/{total} checked"
  4410. },
  4411. image: { error: "FAILED" },
  4412. pageHeader: { title: "Back" },
  4413. popconfirm: {
  4414. confirmButtonText: "Yes",
  4415. cancelButtonText: "No"
  4416. },
  4417. carousel: {
  4418. leftArrow: "Carousel arrow left",
  4419. rightArrow: "Carousel arrow right",
  4420. indicator: "Carousel switch to index {index}"
  4421. },
  4422. inputOTP: {
  4423. groupLabel: "OTP Input",
  4424. defaultLabel: "Please enter OTP character {index}"
  4425. }
  4426. }
  4427. };
  4428. //#endregion
  4429. //#region ../../packages/hooks/use-locale/index.ts
  4430. const buildTranslator = (locale) => (path, option) => translate(path, option, (0, vue.unref)(locale));
  4431. const translate = (path, option, locale) => get(locale, path, path).replace(/\{(\w+)\}/g, (_, key) => `${option?.[key] ?? `{${key}}`}`);
  4432. const buildLocaleContext = (locale) => {
  4433. return {
  4434. lang: (0, vue.computed)(() => (0, vue.unref)(locale).name),
  4435. locale: (0, vue.isRef)(locale) ? locale : (0, vue.ref)(locale),
  4436. t: buildTranslator(locale)
  4437. };
  4438. };
  4439. const localeContextKey = Symbol("localeContextKey");
  4440. const useLocale = (localeOverrides) => {
  4441. const locale = localeOverrides || (0, vue.inject)(localeContextKey, (0, vue.ref)());
  4442. return buildLocaleContext((0, vue.computed)(() => locale.value || en_default));
  4443. };
  4444. //#endregion
  4445. //#region ../../packages/hooks/use-namespace/index.ts
  4446. const defaultNamespace = "el";
  4447. const statePrefix = "is-";
  4448. const _bem = (namespace, block, blockSuffix, element, modifier) => {
  4449. let cls = `${namespace}-${block}`;
  4450. if (blockSuffix) cls += `-${blockSuffix}`;
  4451. if (element) cls += `__${element}`;
  4452. if (modifier) cls += `--${modifier}`;
  4453. return cls;
  4454. };
  4455. const namespaceContextKey = Symbol("namespaceContextKey");
  4456. const useGetDerivedNamespace = (namespaceOverrides) => {
  4457. const derivedNamespace = namespaceOverrides || ((0, vue.getCurrentInstance)() ? (0, vue.inject)(namespaceContextKey, (0, vue.ref)("el")) : (0, vue.ref)("el"));
  4458. return (0, vue.computed)(() => {
  4459. return (0, vue.unref)(derivedNamespace) || "el";
  4460. });
  4461. };
  4462. const useNamespace = (block, namespaceOverrides) => {
  4463. const namespace = useGetDerivedNamespace(namespaceOverrides);
  4464. const b = (blockSuffix = "") => _bem(namespace.value, block, blockSuffix, "", "");
  4465. const e = (element) => element ? _bem(namespace.value, block, "", element, "") : "";
  4466. const m = (modifier) => modifier ? _bem(namespace.value, block, "", "", modifier) : "";
  4467. const be = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, "") : "";
  4468. const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, "", element, modifier) : "";
  4469. const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, "", modifier) : "";
  4470. const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : "";
  4471. const is = (name, ...args) => {
  4472. const state = args.length >= 1 ? args[0] : true;
  4473. return name && state ? `${statePrefix}${name}` : "";
  4474. };
  4475. const cssVar = (object) => {
  4476. const styles = {};
  4477. for (const key in object) if (object[key]) styles[`--${namespace.value}-${key}`] = object[key];
  4478. return styles;
  4479. };
  4480. const cssVarBlock = (object) => {
  4481. const styles = {};
  4482. for (const key in object) if (object[key]) styles[`--${namespace.value}-${block}-${key}`] = object[key];
  4483. return styles;
  4484. };
  4485. const cssVarName = (name) => `--${namespace.value}-${name}`;
  4486. const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`;
  4487. return {
  4488. namespace,
  4489. b,
  4490. e,
  4491. m,
  4492. be,
  4493. em,
  4494. bm,
  4495. bem,
  4496. is,
  4497. cssVar,
  4498. cssVarName,
  4499. cssVarBlock,
  4500. cssVarBlockName
  4501. };
  4502. };
  4503. //#endregion
  4504. //#region ../../packages/hooks/use-lockscreen/index.ts
  4505. const useLockscreen = (trigger, options = {}) => {
  4506. if (!(0, vue.isRef)(trigger)) throwError("[useLockscreen]", "You need to pass a ref param to this function");
  4507. const ns = options.ns || useNamespace("popup");
  4508. const hiddenCls = (0, vue.computed)(() => ns.bm("parent", "hidden"));
  4509. let scrollBarWidth = 0;
  4510. let withoutHiddenClass = false;
  4511. let bodyWidth = "0";
  4512. let cleaned = false;
  4513. const cleanup = () => {
  4514. if (cleaned) return;
  4515. cleaned = true;
  4516. setTimeout(() => {
  4517. if (typeof document === "undefined") return;
  4518. if (withoutHiddenClass && document) {
  4519. document.body.style.width = bodyWidth;
  4520. removeClass(document.body, hiddenCls.value);
  4521. }
  4522. }, 200);
  4523. };
  4524. (0, vue.watch)(trigger, (val) => {
  4525. if (!val) {
  4526. cleanup();
  4527. return;
  4528. }
  4529. cleaned = false;
  4530. withoutHiddenClass = !hasClass(document.body, hiddenCls.value);
  4531. if (withoutHiddenClass) {
  4532. bodyWidth = document.body.style.width;
  4533. addClass(document.body, hiddenCls.value);
  4534. }
  4535. scrollBarWidth = getScrollBarWidth(ns.namespace.value);
  4536. const bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;
  4537. const bodyOverflowY = getStyle(document.body, "overflowY");
  4538. if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === "scroll") && withoutHiddenClass) document.body.style.width = `calc(100% - ${scrollBarWidth}px)`;
  4539. });
  4540. (0, vue.onScopeDispose)(() => cleanup());
  4541. };
  4542. //#endregion
  4543. //#region ../../packages/hooks/use-modal/index.ts
  4544. const modalStack = [];
  4545. const closeModal = (e) => {
  4546. if (modalStack.length === 0) return;
  4547. if (getEventCode(e) === EVENT_CODE.esc) {
  4548. e.stopPropagation();
  4549. modalStack[modalStack.length - 1].handleClose();
  4550. }
  4551. };
  4552. const useModal = (instance, visibleRef) => {
  4553. (0, vue.watch)(visibleRef, (val) => {
  4554. if (val) modalStack.push(instance);
  4555. else modalStack.splice(modalStack.indexOf(instance), 1);
  4556. });
  4557. };
  4558. if (isClient) useEventListener(document, "keydown", closeModal);
  4559. //#endregion
  4560. //#region ../../packages/hooks/use-model-toggle/index.ts
  4561. const _prop = buildProp({
  4562. type: definePropType(Boolean),
  4563. default: null
  4564. });
  4565. const _event = buildProp({ type: definePropType(Function) });
  4566. const createModelToggleComposable = (name) => {
  4567. const updateEventKey = `update:${name}`;
  4568. const updateEventKeyRaw = `onUpdate:${name}`;
  4569. const useModelToggleEmits = [updateEventKey];
  4570. const useModelToggleProps = {
  4571. [name]: _prop,
  4572. [updateEventKeyRaw]: _event
  4573. };
  4574. const useModelToggle = ({ indicator, toggleReason, shouldHideWhenRouteChanges, shouldProceed, onShow, onHide }) => {
  4575. const instance = (0, vue.getCurrentInstance)();
  4576. const { emit } = instance;
  4577. const props = instance.props;
  4578. const hasUpdateHandler = (0, vue.computed)(() => isFunction$1(props[updateEventKeyRaw]));
  4579. const isModelBindingAbsent = (0, vue.computed)(() => props[name] === null);
  4580. const doShow = (event) => {
  4581. if (indicator.value === true) return;
  4582. indicator.value = true;
  4583. if (toggleReason) toggleReason.value = event;
  4584. if (isFunction$1(onShow)) onShow(event);
  4585. };
  4586. const doHide = (event) => {
  4587. if (indicator.value === false) return;
  4588. indicator.value = false;
  4589. if (toggleReason) toggleReason.value = event;
  4590. if (isFunction$1(onHide)) onHide(event);
  4591. };
  4592. const show = (event) => {
  4593. if (props.disabled === true || isFunction$1(shouldProceed) && !shouldProceed()) return;
  4594. const shouldEmit = hasUpdateHandler.value && isClient;
  4595. if (shouldEmit) emit(updateEventKey, true);
  4596. if (isModelBindingAbsent.value || !shouldEmit) doShow(event);
  4597. };
  4598. const hide = (event) => {
  4599. if (props.disabled === true || !isClient) return;
  4600. const shouldEmit = hasUpdateHandler.value && isClient;
  4601. if (shouldEmit) emit(updateEventKey, false);
  4602. if (isModelBindingAbsent.value || !shouldEmit) doHide(event);
  4603. };
  4604. const onChange = (val) => {
  4605. if (!isBoolean(val)) return;
  4606. if (props.disabled && val) {
  4607. if (hasUpdateHandler.value) emit(updateEventKey, false);
  4608. } else if (indicator.value !== val) if (val) doShow();
  4609. else doHide();
  4610. };
  4611. const toggle = () => {
  4612. if (indicator.value) hide();
  4613. else show();
  4614. };
  4615. (0, vue.watch)(() => props[name], onChange);
  4616. if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) (0, vue.watch)(() => ({ ...instance.proxy.$route }), () => {
  4617. if (shouldHideWhenRouteChanges.value && indicator.value) hide();
  4618. });
  4619. (0, vue.onMounted)(() => {
  4620. onChange(props[name]);
  4621. });
  4622. return {
  4623. hide,
  4624. show,
  4625. toggle,
  4626. hasUpdateHandler
  4627. };
  4628. };
  4629. return {
  4630. useModelToggle,
  4631. useModelToggleProps,
  4632. useModelToggleEmits
  4633. };
  4634. };
  4635. const { useModelToggle, useModelToggleProps, useModelToggleEmits } = createModelToggleComposable("modelValue");
  4636. //#endregion
  4637. //#region ../../packages/hooks/use-prevent-global/index.ts
  4638. const usePreventGlobal = (indicator, evt, cb) => {
  4639. const prevent = (e) => {
  4640. if (cb(e)) e.stopImmediatePropagation();
  4641. };
  4642. let stop = void 0;
  4643. (0, vue.watch)(() => indicator.value, (val) => {
  4644. if (val) stop = useEventListener(document, evt, prevent, true);
  4645. else stop?.();
  4646. }, { immediate: true });
  4647. };
  4648. //#endregion
  4649. //#region ../../packages/hooks/use-prop/index.ts
  4650. const useProp = (name) => {
  4651. const vm = (0, vue.getCurrentInstance)();
  4652. return (0, vue.computed)(() => (vm?.proxy?.$props)?.[name]);
  4653. };
  4654. //#endregion
  4655. //#region ../../node_modules/.pnpm/@sxzz+popperjs-es@2.11.8/node_modules/@sxzz/popperjs-es/dist/index.mjs
  4656. var L = "top", W = "bottom", T$1 = "right", P$1 = "left", me = "auto", Q = [
  4657. "top",
  4658. W,
  4659. T$1,
  4660. P$1
  4661. ], Y$1 = "start", Z = "end", Ye = "clippingParents", je = "viewport", ee = "popper", Ge = "reference", De = Q.reduce(function(e, t) {
  4662. return e.concat([t + "-" + Y$1, t + "-" + "end"]);
  4663. }, []), Ee = [].concat(Q, [me]).reduce(function(e, t) {
  4664. return e.concat([
  4665. t,
  4666. t + "-" + Y$1,
  4667. t + "-" + "end"
  4668. ]);
  4669. }, []), Je = "beforeRead", Ke = "read", Qe = "afterRead", Ze = "beforeMain", et = "main", tt = "afterMain", nt = "beforeWrite", rt = "write", ot = "afterWrite", it = [
  4670. Je,
  4671. Ke,
  4672. Qe,
  4673. Ze,
  4674. et,
  4675. tt,
  4676. nt,
  4677. rt,
  4678. ot
  4679. ];
  4680. function V(e) {
  4681. return e ? (e.nodeName || "").toLowerCase() : null;
  4682. }
  4683. function B(e) {
  4684. if (e == null) return window;
  4685. if (e.toString() !== "[object Window]") {
  4686. var t = e.ownerDocument;
  4687. return t && t.defaultView || window;
  4688. }
  4689. return e;
  4690. }
  4691. function G(e) {
  4692. return e instanceof B(e).Element || e instanceof Element;
  4693. }
  4694. function R(e) {
  4695. return e instanceof B(e).HTMLElement || e instanceof HTMLElement;
  4696. }
  4697. function Ae(e) {
  4698. if (typeof ShadowRoot == "undefined") return !1;
  4699. return e instanceof B(e).ShadowRoot || e instanceof ShadowRoot;
  4700. }
  4701. function Tt(e) {
  4702. var t = e.state;
  4703. Object.keys(t.elements).forEach(function(n) {
  4704. var r = t.styles[n] || {}, o = t.attributes[n] || {}, a = t.elements[n];
  4705. !R(a) || !V(a) || (Object.assign(a.style, r), Object.keys(o).forEach(function(c) {
  4706. var s = o[c];
  4707. s === !1 ? a.removeAttribute(c) : a.setAttribute(c, s === !0 ? "" : s);
  4708. }));
  4709. });
  4710. }
  4711. function Bt(e) {
  4712. var t = e.state, n = {
  4713. popper: {
  4714. position: t.options.strategy,
  4715. left: "0",
  4716. top: "0",
  4717. margin: "0"
  4718. },
  4719. arrow: { position: "absolute" },
  4720. reference: {}
  4721. };
  4722. return Object.assign(t.elements.popper.style, n.popper), t.styles = n, t.elements.arrow && Object.assign(t.elements.arrow.style, n.arrow), function() {
  4723. Object.keys(t.elements).forEach(function(r) {
  4724. var o = t.elements[r], a = t.attributes[r] || {}, s = Object.keys(t.styles.hasOwnProperty(r) ? t.styles[r] : n[r]).reduce(function(i, f) {
  4725. return i[f] = "", i;
  4726. }, {});
  4727. !R(o) || !V(o) || (Object.assign(o.style, s), Object.keys(a).forEach(function(i) {
  4728. o.removeAttribute(i);
  4729. }));
  4730. });
  4731. };
  4732. }
  4733. var ke = {
  4734. name: "applyStyles",
  4735. enabled: !0,
  4736. phase: "write",
  4737. fn: Tt,
  4738. effect: Bt,
  4739. requires: ["computeStyles"]
  4740. };
  4741. function C(e) {
  4742. return e.split("-")[0];
  4743. }
  4744. var J = Math.max, ve = Math.min, te = Math.round;
  4745. function Le() {
  4746. var e = navigator.userAgentData;
  4747. return e != null && e.brands && Array.isArray(e.brands) ? e.brands.map(function(t) {
  4748. return t.brand + "/" + t.version;
  4749. }).join(" ") : navigator.userAgent;
  4750. }
  4751. function at() {
  4752. return !/^((?!chrome|android).)*safari/i.test(Le());
  4753. }
  4754. function ne(e, t, n) {
  4755. t === void 0 && (t = !1), n === void 0 && (n = !1);
  4756. var r = e.getBoundingClientRect(), o = 1, a = 1;
  4757. t && R(e) && (o = e.offsetWidth > 0 && te(r.width) / e.offsetWidth || 1, a = e.offsetHeight > 0 && te(r.height) / e.offsetHeight || 1);
  4758. var s = (G(e) ? B(e) : window).visualViewport, i = !at() && n, f = (r.left + (i && s ? s.offsetLeft : 0)) / o, u = (r.top + (i && s ? s.offsetTop : 0)) / a, m = r.width / o, h = r.height / a;
  4759. return {
  4760. width: m,
  4761. height: h,
  4762. top: u,
  4763. right: f + m,
  4764. bottom: u + h,
  4765. left: f,
  4766. x: f,
  4767. y: u
  4768. };
  4769. }
  4770. function Pe(e) {
  4771. var t = ne(e), n = e.offsetWidth, r = e.offsetHeight;
  4772. return Math.abs(t.width - n) <= 1 && (n = t.width), Math.abs(t.height - r) <= 1 && (r = t.height), {
  4773. x: e.offsetLeft,
  4774. y: e.offsetTop,
  4775. width: n,
  4776. height: r
  4777. };
  4778. }
  4779. function st(e, t) {
  4780. var n = t.getRootNode && t.getRootNode();
  4781. if (e.contains(t)) return !0;
  4782. if (n && Ae(n)) {
  4783. var r = t;
  4784. do {
  4785. if (r && e.isSameNode(r)) return !0;
  4786. r = r.parentNode || r.host;
  4787. } while (r);
  4788. }
  4789. return !1;
  4790. }
  4791. function I$1(e) {
  4792. return B(e).getComputedStyle(e);
  4793. }
  4794. function Rt(e) {
  4795. return [
  4796. "table",
  4797. "td",
  4798. "th"
  4799. ].indexOf(V(e)) >= 0;
  4800. }
  4801. function N$1(e) {
  4802. return ((G(e) ? e.ownerDocument : e.document) || window.document).documentElement;
  4803. }
  4804. function ye(e) {
  4805. return V(e) === "html" ? e : e.assignedSlot || e.parentNode || (Ae(e) ? e.host : null) || N$1(e);
  4806. }
  4807. function ft(e) {
  4808. return !R(e) || I$1(e).position === "fixed" ? null : e.offsetParent;
  4809. }
  4810. function Ht(e) {
  4811. var t = /firefox/i.test(Le());
  4812. if (/Trident/i.test(Le()) && R(e)) {
  4813. if (I$1(e).position === "fixed") return null;
  4814. }
  4815. var o = ye(e);
  4816. for (Ae(o) && (o = o.host); R(o) && ["html", "body"].indexOf(V(o)) < 0;) {
  4817. var a = I$1(o);
  4818. if (a.transform !== "none" || a.perspective !== "none" || a.contain === "paint" || ["transform", "perspective"].indexOf(a.willChange) !== -1 || t && a.willChange === "filter" || t && a.filter && a.filter !== "none") return o;
  4819. o = o.parentNode;
  4820. }
  4821. return null;
  4822. }
  4823. function se(e) {
  4824. for (var t = B(e), n = ft(e); n && Rt(n) && I$1(n).position === "static";) n = ft(n);
  4825. return n && (V(n) === "html" || V(n) === "body" && I$1(n).position === "static") ? t : n || Ht(e) || t;
  4826. }
  4827. function Me(e) {
  4828. return ["top", "bottom"].indexOf(e) >= 0 ? "x" : "y";
  4829. }
  4830. function fe(e, t, n) {
  4831. return J(e, ve(t, n));
  4832. }
  4833. function St(e, t, n) {
  4834. var r = fe(e, t, n);
  4835. return r > n ? n : r;
  4836. }
  4837. function ct() {
  4838. return {
  4839. top: 0,
  4840. right: 0,
  4841. bottom: 0,
  4842. left: 0
  4843. };
  4844. }
  4845. function ut(e) {
  4846. return Object.assign({}, ct(), e);
  4847. }
  4848. function pt(e, t) {
  4849. return t.reduce(function(n, r) {
  4850. return n[r] = e, n;
  4851. }, {});
  4852. }
  4853. var Vt = function(e, t) {
  4854. return e = typeof e == "function" ? e(Object.assign({}, t.rects, { placement: t.placement })) : e, ut(typeof e != "number" ? e : pt(e, Q));
  4855. };
  4856. function Ct(e) {
  4857. var t, n = e.state, r = e.name, o = e.options, a = n.elements.arrow, c = n.modifiersData.popperOffsets, s = C(n.placement), i = Me(s), u = ["left", "right"].indexOf(s) >= 0 ? "height" : "width";
  4858. if (!(!a || !c)) {
  4859. var m = Vt(o.padding, n), h = Pe(a), l = i === "y" ? "top" : P$1, g = i === "y" ? W : T$1, p = n.rects.reference[u] + n.rects.reference[i] - c[i] - n.rects.popper[u], y = c[i] - n.rects.reference[i], b = se(a), x = b ? i === "y" ? b.clientHeight || 0 : b.clientWidth || 0 : 0, O = p / 2 - y / 2, d = m[l], v = x - h[u] - m[g], w = x / 2 - h[u] / 2 + O, $ = fe(d, w, v), j = i;
  4860. n.modifiersData[r] = (t = {}, t[j] = $, t.centerOffset = $ - w, t);
  4861. }
  4862. }
  4863. function qt(e) {
  4864. var t = e.state, r = e.options.element, o = r === void 0 ? "[data-popper-arrow]" : r;
  4865. o != null && (typeof o == "string" && (o = t.elements.popper.querySelector(o), !o) || st(t.elements.popper, o) && (t.elements.arrow = o));
  4866. }
  4867. var lt = {
  4868. name: "arrow",
  4869. enabled: !0,
  4870. phase: "main",
  4871. fn: Ct,
  4872. effect: qt,
  4873. requires: ["popperOffsets"],
  4874. requiresIfExists: ["preventOverflow"]
  4875. };
  4876. function re(e) {
  4877. return e.split("-")[1];
  4878. }
  4879. var It = {
  4880. top: "auto",
  4881. right: "auto",
  4882. bottom: "auto",
  4883. left: "auto"
  4884. };
  4885. function Nt(e, t) {
  4886. var n = e.x, r = e.y, o = t.devicePixelRatio || 1;
  4887. return {
  4888. x: te(n * o) / o || 0,
  4889. y: te(r * o) / o || 0
  4890. };
  4891. }
  4892. function dt(e) {
  4893. var t, n = e.popper, r = e.popperRect, o = e.placement, a = e.variation, c = e.offsets, s = e.position, i = e.gpuAcceleration, f = e.adaptive, u = e.roundOffsets, m = e.isFixed, h = c.x, l = h === void 0 ? 0 : h, g = c.y, p = g === void 0 ? 0 : g, y = typeof u == "function" ? u({
  4894. x: l,
  4895. y: p
  4896. }) : {
  4897. x: l,
  4898. y: p
  4899. };
  4900. l = y.x, p = y.y;
  4901. var b = c.hasOwnProperty("x"), x = c.hasOwnProperty("y"), O = P$1, d = "top", v = window;
  4902. if (f) {
  4903. var w = se(n), $ = "clientHeight", j = "clientWidth";
  4904. if (w === B(n) && (w = N$1(n), I$1(w).position !== "static" && s === "absolute" && ($ = "scrollHeight", j = "scrollWidth")), w = w, o === "top" || (o === "left" || o === "right") && a === "end") {
  4905. d = W;
  4906. var D = m && w === v && v.visualViewport ? v.visualViewport.height : w[$];
  4907. p -= D - r.height, p *= i ? 1 : -1;
  4908. }
  4909. if (o === "left" || (o === "top" || o === "bottom") && a === "end") {
  4910. O = T$1;
  4911. var E = m && w === v && v.visualViewport ? v.visualViewport.width : w[j];
  4912. l -= E - r.width, l *= i ? 1 : -1;
  4913. }
  4914. }
  4915. var A = Object.assign({ position: s }, f && It), H = u === !0 ? Nt({
  4916. x: l,
  4917. y: p
  4918. }, B(n)) : {
  4919. x: l,
  4920. y: p
  4921. };
  4922. if (l = H.x, p = H.y, i) {
  4923. var k;
  4924. return Object.assign({}, A, (k = {}, k[d] = x ? "0" : "", k[O] = b ? "0" : "", k.transform = (v.devicePixelRatio || 1) <= 1 ? "translate(" + l + "px, " + p + "px)" : "translate3d(" + l + "px, " + p + "px, 0)", k));
  4925. }
  4926. return Object.assign({}, A, (t = {}, t[d] = x ? p + "px" : "", t[O] = b ? l + "px" : "", t.transform = "", t));
  4927. }
  4928. function Ft(e) {
  4929. var t = e.state, n = e.options, r = n.gpuAcceleration, o = r === void 0 ? !0 : r, a = n.adaptive, c = a === void 0 ? !0 : a, s = n.roundOffsets, i = s === void 0 ? !0 : s, f = {
  4930. placement: C(t.placement),
  4931. variation: re(t.placement),
  4932. popper: t.elements.popper,
  4933. popperRect: t.rects.popper,
  4934. gpuAcceleration: o,
  4935. isFixed: t.options.strategy === "fixed"
  4936. };
  4937. t.modifiersData.popperOffsets != null && (t.styles.popper = Object.assign({}, t.styles.popper, dt(Object.assign({}, f, {
  4938. offsets: t.modifiersData.popperOffsets,
  4939. position: t.options.strategy,
  4940. adaptive: c,
  4941. roundOffsets: i
  4942. })))), t.modifiersData.arrow != null && (t.styles.arrow = Object.assign({}, t.styles.arrow, dt(Object.assign({}, f, {
  4943. offsets: t.modifiersData.arrow,
  4944. position: "absolute",
  4945. adaptive: !1,
  4946. roundOffsets: i
  4947. })))), t.attributes.popper = Object.assign({}, t.attributes.popper, { "data-popper-placement": t.placement });
  4948. }
  4949. var We = {
  4950. name: "computeStyles",
  4951. enabled: !0,
  4952. phase: "beforeWrite",
  4953. fn: Ft,
  4954. data: {}
  4955. }, ge = { passive: !0 };
  4956. function Ut(e) {
  4957. var t = e.state, n = e.instance, r = e.options, o = r.scroll, a = o === void 0 ? !0 : o, c = r.resize, s = c === void 0 ? !0 : c, i = B(t.elements.popper), f = [].concat(t.scrollParents.reference, t.scrollParents.popper);
  4958. return a && f.forEach(function(u) {
  4959. u.addEventListener("scroll", n.update, ge);
  4960. }), s && i.addEventListener("resize", n.update, ge), function() {
  4961. a && f.forEach(function(u) {
  4962. u.removeEventListener("scroll", n.update, ge);
  4963. }), s && i.removeEventListener("resize", n.update, ge);
  4964. };
  4965. }
  4966. var Te = {
  4967. name: "eventListeners",
  4968. enabled: !0,
  4969. phase: "write",
  4970. fn: function() {},
  4971. effect: Ut,
  4972. data: {}
  4973. }, _t = {
  4974. left: "right",
  4975. right: "left",
  4976. bottom: "top",
  4977. top: "bottom"
  4978. };
  4979. function be(e) {
  4980. return e.replace(/left|right|bottom|top/g, function(t) {
  4981. return _t[t];
  4982. });
  4983. }
  4984. var zt = {
  4985. start: "end",
  4986. end: "start"
  4987. };
  4988. function ht(e) {
  4989. return e.replace(/start|end/g, function(t) {
  4990. return zt[t];
  4991. });
  4992. }
  4993. function Be(e) {
  4994. var t = B(e);
  4995. return {
  4996. scrollLeft: t.pageXOffset,
  4997. scrollTop: t.pageYOffset
  4998. };
  4999. }
  5000. function Re(e) {
  5001. return ne(N$1(e)).left + Be(e).scrollLeft;
  5002. }
  5003. function Xt(e, t) {
  5004. var n = B(e), r = N$1(e), o = n.visualViewport, a = r.clientWidth, c = r.clientHeight, s = 0, i = 0;
  5005. if (o) {
  5006. a = o.width, c = o.height;
  5007. var f = at();
  5008. (f || !f && t === "fixed") && (s = o.offsetLeft, i = o.offsetTop);
  5009. }
  5010. return {
  5011. width: a,
  5012. height: c,
  5013. x: s + Re(e),
  5014. y: i
  5015. };
  5016. }
  5017. function Yt(e) {
  5018. var t, n = N$1(e), r = Be(e), o = (t = e.ownerDocument) == null ? void 0 : t.body, a = J(n.scrollWidth, n.clientWidth, o ? o.scrollWidth : 0, o ? o.clientWidth : 0), c = J(n.scrollHeight, n.clientHeight, o ? o.scrollHeight : 0, o ? o.clientHeight : 0), s = -r.scrollLeft + Re(e), i = -r.scrollTop;
  5019. return I$1(o || n).direction === "rtl" && (s += J(n.clientWidth, o ? o.clientWidth : 0) - a), {
  5020. width: a,
  5021. height: c,
  5022. x: s,
  5023. y: i
  5024. };
  5025. }
  5026. function He(e) {
  5027. var t = I$1(e), n = t.overflow, r = t.overflowX, o = t.overflowY;
  5028. return /auto|scroll|overlay|hidden/.test(n + o + r);
  5029. }
  5030. function mt(e) {
  5031. return [
  5032. "html",
  5033. "body",
  5034. "#document"
  5035. ].indexOf(V(e)) >= 0 ? e.ownerDocument.body : R(e) && He(e) ? e : mt(ye(e));
  5036. }
  5037. function ce(e, t) {
  5038. var n;
  5039. t === void 0 && (t = []);
  5040. var r = mt(e), o = r === ((n = e.ownerDocument) == null ? void 0 : n.body), a = B(r), c = o ? [a].concat(a.visualViewport || [], He(r) ? r : []) : r, s = t.concat(c);
  5041. return o ? s : s.concat(ce(ye(c)));
  5042. }
  5043. function Se(e) {
  5044. return Object.assign({}, e, {
  5045. left: e.x,
  5046. top: e.y,
  5047. right: e.x + e.width,
  5048. bottom: e.y + e.height
  5049. });
  5050. }
  5051. function Gt(e, t) {
  5052. var n = ne(e, !1, t === "fixed");
  5053. return n.top = n.top + e.clientTop, n.left = n.left + e.clientLeft, n.bottom = n.top + e.clientHeight, n.right = n.left + e.clientWidth, n.width = e.clientWidth, n.height = e.clientHeight, n.x = n.left, n.y = n.top, n;
  5054. }
  5055. function vt(e, t, n) {
  5056. return t === "viewport" ? Se(Xt(e, n)) : G(t) ? Gt(t, n) : Se(Yt(N$1(e)));
  5057. }
  5058. function Jt(e) {
  5059. var t = ce(ye(e)), r = ["absolute", "fixed"].indexOf(I$1(e).position) >= 0 && R(e) ? se(e) : e;
  5060. return G(r) ? t.filter(function(o) {
  5061. return G(o) && st(o, r) && V(o) !== "body";
  5062. }) : [];
  5063. }
  5064. function Kt(e, t, n, r) {
  5065. var o = t === "clippingParents" ? Jt(e) : [].concat(t), a = [].concat(o, [n]), c = a[0], s = a.reduce(function(i, f) {
  5066. var u = vt(e, f, r);
  5067. return i.top = J(u.top, i.top), i.right = ve(u.right, i.right), i.bottom = ve(u.bottom, i.bottom), i.left = J(u.left, i.left), i;
  5068. }, vt(e, c, r));
  5069. return s.width = s.right - s.left, s.height = s.bottom - s.top, s.x = s.left, s.y = s.top, s;
  5070. }
  5071. function yt(e) {
  5072. var t = e.reference, n = e.element, r = e.placement, o = r ? C(r) : null, a = r ? re(r) : null, c = t.x + t.width / 2 - n.width / 2, s = t.y + t.height / 2 - n.height / 2, i;
  5073. switch (o) {
  5074. case "top":
  5075. i = {
  5076. x: c,
  5077. y: t.y - n.height
  5078. };
  5079. break;
  5080. case W:
  5081. i = {
  5082. x: c,
  5083. y: t.y + t.height
  5084. };
  5085. break;
  5086. case T$1:
  5087. i = {
  5088. x: t.x + t.width,
  5089. y: s
  5090. };
  5091. break;
  5092. case P$1:
  5093. i = {
  5094. x: t.x - n.width,
  5095. y: s
  5096. };
  5097. break;
  5098. default: i = {
  5099. x: t.x,
  5100. y: t.y
  5101. };
  5102. }
  5103. var f = o ? Me(o) : null;
  5104. if (f != null) {
  5105. var u = f === "y" ? "height" : "width";
  5106. switch (a) {
  5107. case Y$1:
  5108. i[f] = i[f] - (t[u] / 2 - n[u] / 2);
  5109. break;
  5110. case "end":
  5111. i[f] = i[f] + (t[u] / 2 - n[u] / 2);
  5112. break;
  5113. }
  5114. }
  5115. return i;
  5116. }
  5117. function oe(e, t) {
  5118. t === void 0 && (t = {});
  5119. var n = t, r = n.placement, o = r === void 0 ? e.placement : r, a = n.strategy, c = a === void 0 ? e.strategy : a, s = n.boundary, i = s === void 0 ? Ye : s, f = n.rootBoundary, u = f === void 0 ? je : f, m = n.elementContext, h = m === void 0 ? ee : m, l = n.altBoundary, g = l === void 0 ? !1 : l, p = n.padding, y = p === void 0 ? 0 : p, b = ut(typeof y != "number" ? y : pt(y, Q)), x = h === "popper" ? Ge : ee, O = e.rects.popper, d = e.elements[g ? x : h], v = Kt(G(d) ? d : d.contextElement || N$1(e.elements.popper), i, u, c), w = ne(e.elements.reference), $ = yt({
  5120. reference: w,
  5121. element: O,
  5122. placement: o
  5123. }), j = Se(Object.assign({}, O, $)), D = h === "popper" ? j : w, E = {
  5124. top: v.top - D.top + b.top,
  5125. bottom: D.bottom - v.bottom + b.bottom,
  5126. left: v.left - D.left + b.left,
  5127. right: D.right - v.right + b.right
  5128. }, A = e.modifiersData.offset;
  5129. if (h === "popper" && A) {
  5130. var H = A[o];
  5131. Object.keys(E).forEach(function(k) {
  5132. var F = ["right", "bottom"].indexOf(k) >= 0 ? 1 : -1, U = ["top", "bottom"].indexOf(k) >= 0 ? "y" : "x";
  5133. E[k] += H[U] * F;
  5134. });
  5135. }
  5136. return E;
  5137. }
  5138. function Qt(e, t) {
  5139. t === void 0 && (t = {});
  5140. var n = t, r = n.placement, o = n.boundary, a = n.rootBoundary, c = n.padding, s = n.flipVariations, i = n.allowedAutoPlacements, f = i === void 0 ? Ee : i, u = re(r), m = u ? s ? De : De.filter(function(g) {
  5141. return re(g) === u;
  5142. }) : Q, h = m.filter(function(g) {
  5143. return f.indexOf(g) >= 0;
  5144. });
  5145. h.length === 0 && (h = m);
  5146. var l = h.reduce(function(g, p) {
  5147. return g[p] = oe(e, {
  5148. placement: p,
  5149. boundary: o,
  5150. rootBoundary: a,
  5151. padding: c
  5152. })[C(p)], g;
  5153. }, {});
  5154. return Object.keys(l).sort(function(g, p) {
  5155. return l[g] - l[p];
  5156. });
  5157. }
  5158. function Zt(e) {
  5159. if (C(e) === "auto") return [];
  5160. var t = be(e);
  5161. return [
  5162. ht(e),
  5163. t,
  5164. ht(t)
  5165. ];
  5166. }
  5167. function en(e) {
  5168. var t = e.state, n = e.options, r = e.name;
  5169. if (!t.modifiersData[r]._skip) {
  5170. for (var o = n.mainAxis, a = o === void 0 ? !0 : o, c = n.altAxis, s = c === void 0 ? !0 : c, i = n.fallbackPlacements, f = n.padding, u = n.boundary, m = n.rootBoundary, h = n.altBoundary, l = n.flipVariations, g = l === void 0 ? !0 : l, p = n.allowedAutoPlacements, y = t.options.placement, x = C(y) === y, O = i || (x || !g ? [be(y)] : Zt(y)), d = [y].concat(O).reduce(function(z, q) {
  5171. return z.concat(C(q) === "auto" ? Qt(t, {
  5172. placement: q,
  5173. boundary: u,
  5174. rootBoundary: m,
  5175. padding: f,
  5176. flipVariations: g,
  5177. allowedAutoPlacements: p
  5178. }) : q);
  5179. }, []), v = t.rects.reference, w = t.rects.popper, $ = /* @__PURE__ */ new Map(), j = !0, D = d[0], E = 0; E < d.length; E++) {
  5180. var A = d[E], H = C(A), k = re(A) === Y$1, F = ["top", W].indexOf(H) >= 0, U = F ? "width" : "height", M = oe(t, {
  5181. placement: A,
  5182. boundary: u,
  5183. rootBoundary: m,
  5184. altBoundary: h,
  5185. padding: f
  5186. }), S = F ? k ? T$1 : P$1 : k ? W : "top";
  5187. v[U] > w[U] && (S = be(S));
  5188. var ue = be(S), _ = [];
  5189. if (a && _.push(M[H] <= 0), s && _.push(M[S] <= 0, M[ue] <= 0), _.every(function(z) {
  5190. return z;
  5191. })) {
  5192. D = A, j = !1;
  5193. break;
  5194. }
  5195. $.set(A, _);
  5196. }
  5197. if (j) {
  5198. for (var pe = g ? 3 : 1, xe = function(z) {
  5199. var q = d.find(function(de) {
  5200. var ae = $.get(de);
  5201. if (ae) return ae.slice(0, z).every(function(K) {
  5202. return K;
  5203. });
  5204. });
  5205. if (q) return D = q, "break";
  5206. }, ie = pe; ie > 0; ie--) if (xe(ie) === "break") break;
  5207. }
  5208. t.placement !== D && (t.modifiersData[r]._skip = !0, t.placement = D, t.reset = !0);
  5209. }
  5210. }
  5211. var gt = {
  5212. name: "flip",
  5213. enabled: !0,
  5214. phase: "main",
  5215. fn: en,
  5216. requiresIfExists: ["offset"],
  5217. data: { _skip: !1 }
  5218. };
  5219. function bt(e, t, n) {
  5220. return n === void 0 && (n = {
  5221. x: 0,
  5222. y: 0
  5223. }), {
  5224. top: e.top - t.height - n.y,
  5225. right: e.right - t.width + n.x,
  5226. bottom: e.bottom - t.height + n.y,
  5227. left: e.left - t.width - n.x
  5228. };
  5229. }
  5230. function wt(e) {
  5231. return [
  5232. "top",
  5233. T$1,
  5234. W,
  5235. P$1
  5236. ].some(function(t) {
  5237. return e[t] >= 0;
  5238. });
  5239. }
  5240. function tn(e) {
  5241. var t = e.state, n = e.name, r = t.rects.reference, o = t.rects.popper, a = t.modifiersData.preventOverflow, c = oe(t, { elementContext: "reference" }), s = oe(t, { altBoundary: !0 }), i = bt(c, r), f = bt(s, o, a), u = wt(i), m = wt(f);
  5242. t.modifiersData[n] = {
  5243. referenceClippingOffsets: i,
  5244. popperEscapeOffsets: f,
  5245. isReferenceHidden: u,
  5246. hasPopperEscaped: m
  5247. }, t.attributes.popper = Object.assign({}, t.attributes.popper, {
  5248. "data-popper-reference-hidden": u,
  5249. "data-popper-escaped": m
  5250. });
  5251. }
  5252. var xt = {
  5253. name: "hide",
  5254. enabled: !0,
  5255. phase: "main",
  5256. requiresIfExists: ["preventOverflow"],
  5257. fn: tn
  5258. };
  5259. function nn(e, t, n) {
  5260. var r = C(e), o = ["left", "top"].indexOf(r) >= 0 ? -1 : 1, a = typeof n == "function" ? n(Object.assign({}, t, { placement: e })) : n, c = a[0], s = a[1];
  5261. return c = c || 0, s = (s || 0) * o, ["left", "right"].indexOf(r) >= 0 ? {
  5262. x: s,
  5263. y: c
  5264. } : {
  5265. x: c,
  5266. y: s
  5267. };
  5268. }
  5269. function rn(e) {
  5270. var t = e.state, n = e.options, r = e.name, o = n.offset, a = o === void 0 ? [0, 0] : o, c = Ee.reduce(function(u, m) {
  5271. return u[m] = nn(m, t.rects, a), u;
  5272. }, {}), s = c[t.placement], i = s.x, f = s.y;
  5273. t.modifiersData.popperOffsets != null && (t.modifiersData.popperOffsets.x += i, t.modifiersData.popperOffsets.y += f), t.modifiersData[r] = c;
  5274. }
  5275. var Ot = {
  5276. name: "offset",
  5277. enabled: !0,
  5278. phase: "main",
  5279. requires: ["popperOffsets"],
  5280. fn: rn
  5281. };
  5282. function on(e) {
  5283. var t = e.state, n = e.name;
  5284. t.modifiersData[n] = yt({
  5285. reference: t.rects.reference,
  5286. element: t.rects.popper,
  5287. placement: t.placement
  5288. });
  5289. }
  5290. var Ve = {
  5291. name: "popperOffsets",
  5292. enabled: !0,
  5293. phase: "read",
  5294. fn: on,
  5295. data: {}
  5296. };
  5297. function an(e) {
  5298. return e === "x" ? "y" : "x";
  5299. }
  5300. function sn(e) {
  5301. var t = e.state, n = e.options, r = e.name, o = n.mainAxis, a = o === void 0 ? !0 : o, c = n.altAxis, s = c === void 0 ? !1 : c, i = n.boundary, f = n.rootBoundary, u = n.altBoundary, m = n.padding, h = n.tether, l = h === void 0 ? !0 : h, g = n.tetherOffset, p = g === void 0 ? 0 : g, y = oe(t, {
  5302. boundary: i,
  5303. rootBoundary: f,
  5304. padding: m,
  5305. altBoundary: u
  5306. }), b = C(t.placement), x = re(t.placement), O = !x, d = Me(b), v = an(d), w = t.modifiersData.popperOffsets, $ = t.rects.reference, j = t.rects.popper, D = typeof p == "function" ? p(Object.assign({}, t.rects, { placement: t.placement })) : p, E = typeof D == "number" ? {
  5307. mainAxis: D,
  5308. altAxis: D
  5309. } : Object.assign({
  5310. mainAxis: 0,
  5311. altAxis: 0
  5312. }, D), A = t.modifiersData.offset ? t.modifiersData.offset[t.placement] : null, H = {
  5313. x: 0,
  5314. y: 0
  5315. };
  5316. if (w) {
  5317. if (a) {
  5318. var k, F = d === "y" ? "top" : P$1, U = d === "y" ? W : T$1, M = d === "y" ? "height" : "width", S = w[d], ue = S + y[F], _ = S - y[U], pe = l ? -j[M] / 2 : 0, xe = x === "start" ? $[M] : j[M], ie = x === "start" ? -j[M] : -$[M], le = t.elements.arrow, z = l && le ? Pe(le) : {
  5319. width: 0,
  5320. height: 0
  5321. }, q = t.modifiersData["arrow#persistent"] ? t.modifiersData["arrow#persistent"].padding : ct(), de = q[F], ae = q[U], K = fe(0, $[M], z[M]), Et = O ? $[M] / 2 - pe - K - de - E.mainAxis : xe - K - de - E.mainAxis, At = O ? -$[M] / 2 + pe + K + ae + E.mainAxis : ie + K + ae + E.mainAxis, Oe = t.elements.arrow && se(t.elements.arrow), kt = Oe ? d === "y" ? Oe.clientTop || 0 : Oe.clientLeft || 0 : 0, Ce = (k = A == null ? void 0 : A[d]) != null ? k : 0, Lt = S + Et - Ce - kt, Pt = S + At - Ce, qe = fe(l ? ve(ue, Lt) : ue, S, l ? J(_, Pt) : _);
  5322. w[d] = qe, H[d] = qe - S;
  5323. }
  5324. if (s) {
  5325. var Ie, Mt = d === "x" ? "top" : P$1, Wt = d === "x" ? W : T$1, X = w[v], he = v === "y" ? "height" : "width", Ne = X + y[Mt], Fe = X - y[Wt], $e = ["top", P$1].indexOf(b) !== -1, Ue = (Ie = A == null ? void 0 : A[v]) != null ? Ie : 0, _e = $e ? Ne : X - $[he] - j[he] - Ue + E.altAxis, ze = $e ? X + $[he] + j[he] - Ue - E.altAxis : Fe, Xe = l && $e ? St(_e, X, ze) : fe(l ? _e : Ne, X, l ? ze : Fe);
  5326. w[v] = Xe, H[v] = Xe - X;
  5327. }
  5328. t.modifiersData[r] = H;
  5329. }
  5330. }
  5331. var $t = {
  5332. name: "preventOverflow",
  5333. enabled: !0,
  5334. phase: "main",
  5335. fn: sn,
  5336. requiresIfExists: ["offset"]
  5337. };
  5338. function fn(e) {
  5339. return {
  5340. scrollLeft: e.scrollLeft,
  5341. scrollTop: e.scrollTop
  5342. };
  5343. }
  5344. function cn(e) {
  5345. return e === B(e) || !R(e) ? Be(e) : fn(e);
  5346. }
  5347. function un(e) {
  5348. var t = e.getBoundingClientRect(), n = te(t.width) / e.offsetWidth || 1, r = te(t.height) / e.offsetHeight || 1;
  5349. return n !== 1 || r !== 1;
  5350. }
  5351. function pn(e, t, n) {
  5352. n === void 0 && (n = !1);
  5353. var r = R(t), o = R(t) && un(t), a = N$1(t), c = ne(e, o, n), s = {
  5354. scrollLeft: 0,
  5355. scrollTop: 0
  5356. }, i = {
  5357. x: 0,
  5358. y: 0
  5359. };
  5360. return (r || !r && !n) && ((V(t) !== "body" || He(a)) && (s = cn(t)), R(t) ? (i = ne(t, !0), i.x += t.clientLeft, i.y += t.clientTop) : a && (i.x = Re(a))), {
  5361. x: c.left + s.scrollLeft - i.x,
  5362. y: c.top + s.scrollTop - i.y,
  5363. width: c.width,
  5364. height: c.height
  5365. };
  5366. }
  5367. function ln(e) {
  5368. var t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Set(), r = [];
  5369. e.forEach(function(a) {
  5370. t.set(a.name, a);
  5371. });
  5372. function o(a) {
  5373. n.add(a.name);
  5374. [].concat(a.requires || [], a.requiresIfExists || []).forEach(function(s) {
  5375. if (!n.has(s)) {
  5376. var i = t.get(s);
  5377. i && o(i);
  5378. }
  5379. }), r.push(a);
  5380. }
  5381. return e.forEach(function(a) {
  5382. n.has(a.name) || o(a);
  5383. }), r;
  5384. }
  5385. function dn(e) {
  5386. var t = ln(e);
  5387. return it.reduce(function(n, r) {
  5388. return n.concat(t.filter(function(o) {
  5389. return o.phase === r;
  5390. }));
  5391. }, []);
  5392. }
  5393. function hn(e) {
  5394. var t;
  5395. return function() {
  5396. return t || (t = new Promise(function(n) {
  5397. Promise.resolve().then(function() {
  5398. t = void 0, n(e());
  5399. });
  5400. })), t;
  5401. };
  5402. }
  5403. function mn(e) {
  5404. var t = e.reduce(function(n, r) {
  5405. var o = n[r.name];
  5406. return n[r.name] = o ? Object.assign({}, o, r, {
  5407. options: Object.assign({}, o.options, r.options),
  5408. data: Object.assign({}, o.data, r.data)
  5409. }) : r, n;
  5410. }, {});
  5411. return Object.keys(t).map(function(n) {
  5412. return t[n];
  5413. });
  5414. }
  5415. var jt = {
  5416. placement: "bottom",
  5417. modifiers: [],
  5418. strategy: "absolute"
  5419. };
  5420. function Dt() {
  5421. for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];
  5422. return !t.some(function(r) {
  5423. return !(r && typeof r.getBoundingClientRect == "function");
  5424. });
  5425. }
  5426. function we(e) {
  5427. e === void 0 && (e = {});
  5428. var t = e, n = t.defaultModifiers, r = n === void 0 ? [] : n, o = t.defaultOptions, a = o === void 0 ? jt : o;
  5429. return function(c, s, i) {
  5430. i === void 0 && (i = a);
  5431. var f = {
  5432. placement: "bottom",
  5433. orderedModifiers: [],
  5434. options: Object.assign({}, jt, a),
  5435. modifiersData: {},
  5436. elements: {
  5437. reference: c,
  5438. popper: s
  5439. },
  5440. attributes: {},
  5441. styles: {}
  5442. }, u = [], m = !1, h = {
  5443. state: f,
  5444. setOptions: function(p) {
  5445. var y = typeof p == "function" ? p(f.options) : p;
  5446. g(), f.options = Object.assign({}, a, f.options, y), f.scrollParents = {
  5447. reference: G(c) ? ce(c) : c.contextElement ? ce(c.contextElement) : [],
  5448. popper: ce(s)
  5449. };
  5450. var b = dn(mn([].concat(r, f.options.modifiers)));
  5451. return f.orderedModifiers = b.filter(function(x) {
  5452. return x.enabled;
  5453. }), l(), h.update();
  5454. },
  5455. forceUpdate: function() {
  5456. if (!m) {
  5457. var p = f.elements, y = p.reference, b = p.popper;
  5458. if (Dt(y, b)) {
  5459. f.rects = {
  5460. reference: pn(y, se(b), f.options.strategy === "fixed"),
  5461. popper: Pe(b)
  5462. }, f.reset = !1, f.placement = f.options.placement, f.orderedModifiers.forEach(function(j) {
  5463. return f.modifiersData[j.name] = Object.assign({}, j.data);
  5464. });
  5465. for (var x = 0; x < f.orderedModifiers.length; x++) {
  5466. if (f.reset === !0) {
  5467. f.reset = !1, x = -1;
  5468. continue;
  5469. }
  5470. var O = f.orderedModifiers[x], d = O.fn, v = O.options, w = v === void 0 ? {} : v, $ = O.name;
  5471. typeof d == "function" && (f = d({
  5472. state: f,
  5473. options: w,
  5474. name: $,
  5475. instance: h
  5476. }) || f);
  5477. }
  5478. }
  5479. }
  5480. },
  5481. update: hn(function() {
  5482. return new Promise(function(p) {
  5483. h.forceUpdate(), p(f);
  5484. });
  5485. }),
  5486. destroy: function() {
  5487. g(), m = !0;
  5488. }
  5489. };
  5490. if (!Dt(c, s)) return h;
  5491. h.setOptions(i).then(function(p) {
  5492. !m && i.onFirstUpdate && i.onFirstUpdate(p);
  5493. });
  5494. function l() {
  5495. f.orderedModifiers.forEach(function(p) {
  5496. var y = p.name, b = p.options, x = b === void 0 ? {} : b, O = p.effect;
  5497. if (typeof O == "function") {
  5498. var d = O({
  5499. state: f,
  5500. name: y,
  5501. instance: h,
  5502. options: x
  5503. }), v = function() {};
  5504. u.push(d || v);
  5505. }
  5506. });
  5507. }
  5508. function g() {
  5509. u.forEach(function(p) {
  5510. return p();
  5511. }), u = [];
  5512. }
  5513. return h;
  5514. };
  5515. }
  5516. var vn = we(), gn = we({ defaultModifiers: [
  5517. Te,
  5518. Ve,
  5519. We,
  5520. ke
  5521. ] }), wn = we({ defaultModifiers: [
  5522. Te,
  5523. Ve,
  5524. We,
  5525. ke,
  5526. Ot,
  5527. gt,
  5528. $t,
  5529. lt,
  5530. xt
  5531. ] });
  5532. //#endregion
  5533. //#region ../../packages/hooks/use-popper/index.ts
  5534. const usePopper = (referenceElementRef, popperElementRef, opts = {}) => {
  5535. const stateUpdater = {
  5536. name: "updateState",
  5537. enabled: true,
  5538. phase: "write",
  5539. fn: ({ state }) => {
  5540. const derivedState = deriveState(state);
  5541. Object.assign(states.value, derivedState);
  5542. },
  5543. requires: ["computeStyles"]
  5544. };
  5545. const options = (0, vue.computed)(() => {
  5546. const { onFirstUpdate, placement, strategy, modifiers } = (0, vue.unref)(opts);
  5547. return {
  5548. onFirstUpdate,
  5549. placement: placement || "bottom",
  5550. strategy: strategy || "absolute",
  5551. modifiers: [
  5552. ...modifiers || [],
  5553. stateUpdater,
  5554. {
  5555. name: "applyStyles",
  5556. enabled: false
  5557. }
  5558. ]
  5559. };
  5560. });
  5561. const instanceRef = (0, vue.shallowRef)();
  5562. const states = (0, vue.ref)({
  5563. styles: {
  5564. popper: {
  5565. position: (0, vue.unref)(options).strategy,
  5566. left: "0",
  5567. top: "0"
  5568. },
  5569. arrow: { position: "absolute" }
  5570. },
  5571. attributes: {}
  5572. });
  5573. const destroy = () => {
  5574. if (!instanceRef.value) return;
  5575. instanceRef.value.destroy();
  5576. instanceRef.value = void 0;
  5577. };
  5578. (0, vue.watch)(options, (newOptions) => {
  5579. const instance = (0, vue.unref)(instanceRef);
  5580. if (instance) instance.setOptions(newOptions);
  5581. }, { deep: true });
  5582. (0, vue.watch)([referenceElementRef, popperElementRef], ([referenceElement, popperElement]) => {
  5583. destroy();
  5584. if (!referenceElement || !popperElement) return;
  5585. instanceRef.value = wn(referenceElement, popperElement, (0, vue.unref)(options));
  5586. });
  5587. (0, vue.onBeforeUnmount)(() => {
  5588. destroy();
  5589. });
  5590. return {
  5591. state: (0, vue.computed)(() => ({ ...(0, vue.unref)(instanceRef)?.state || {} })),
  5592. styles: (0, vue.computed)(() => (0, vue.unref)(states).styles),
  5593. attributes: (0, vue.computed)(() => (0, vue.unref)(states).attributes),
  5594. update: () => (0, vue.unref)(instanceRef)?.update(),
  5595. forceUpdate: () => (0, vue.unref)(instanceRef)?.forceUpdate(),
  5596. instanceRef: (0, vue.computed)(() => (0, vue.unref)(instanceRef))
  5597. };
  5598. };
  5599. function deriveState(state) {
  5600. const elements = Object.keys(state.elements);
  5601. return {
  5602. styles: fromPairs(elements.map((element) => [element, state.styles[element] || {}])),
  5603. attributes: fromPairs(elements.map((element) => [element, state.attributes[element]]))
  5604. };
  5605. }
  5606. //#endregion
  5607. //#region ../../packages/hooks/use-same-target/index.ts
  5608. const useSameTarget = (handleClick) => {
  5609. if (!handleClick) return {
  5610. onClick: NOOP,
  5611. onMousedown: NOOP,
  5612. onMouseup: NOOP
  5613. };
  5614. let mousedownTarget = false;
  5615. let mouseupTarget = false;
  5616. const onClick = (e) => {
  5617. if (mousedownTarget && mouseupTarget) handleClick(e);
  5618. mousedownTarget = mouseupTarget = false;
  5619. };
  5620. const onMousedown = (e) => {
  5621. mousedownTarget = e.target === e.currentTarget;
  5622. };
  5623. const onMouseup = (e) => {
  5624. mouseupTarget = e.target === e.currentTarget;
  5625. };
  5626. return {
  5627. onClick,
  5628. onMousedown,
  5629. onMouseup
  5630. };
  5631. };
  5632. //#endregion
  5633. //#region ../../packages/hooks/use-teleport/index.ts
  5634. const useTeleport = (contentRenderer, appendToBody) => {
  5635. const isTeleportVisible = (0, vue.ref)(false);
  5636. if (!isClient) return {
  5637. isTeleportVisible,
  5638. showTeleport: NOOP,
  5639. hideTeleport: NOOP,
  5640. renderTeleport: NOOP
  5641. };
  5642. let $el = null;
  5643. const showTeleport = () => {
  5644. isTeleportVisible.value = true;
  5645. if ($el !== null) return;
  5646. $el = createGlobalNode();
  5647. };
  5648. const hideTeleport = () => {
  5649. isTeleportVisible.value = false;
  5650. if ($el !== null) {
  5651. removeGlobalNode($el);
  5652. $el = null;
  5653. }
  5654. };
  5655. const renderTeleport = () => {
  5656. return appendToBody.value !== true ? contentRenderer() : isTeleportVisible.value ? [(0, vue.h)(vue.Teleport, { to: $el }, contentRenderer())] : void 0;
  5657. };
  5658. (0, vue.onUnmounted)(hideTeleport);
  5659. return {
  5660. isTeleportVisible,
  5661. showTeleport,
  5662. hideTeleport,
  5663. renderTeleport
  5664. };
  5665. };
  5666. //#endregion
  5667. //#region ../../packages/hooks/use-throttle-render/index.ts
  5668. const useThrottleRender = (loading, throttle = 0) => {
  5669. if (throttle === 0) return loading;
  5670. const throttled = (0, vue.ref)(isObject$1(throttle) && Boolean(throttle.initVal));
  5671. let timeoutHandle = null;
  5672. const dispatchThrottling = (timer) => {
  5673. if (isUndefined(timer)) {
  5674. throttled.value = loading.value;
  5675. return;
  5676. }
  5677. if (timeoutHandle) clearTimeout(timeoutHandle);
  5678. timeoutHandle = setTimeout(() => {
  5679. throttled.value = loading.value;
  5680. }, timer);
  5681. };
  5682. const dispatcher = (type) => {
  5683. if (type === "leading") if (isNumber(throttle)) dispatchThrottling(throttle);
  5684. else dispatchThrottling(throttle.leading);
  5685. else if (isObject$1(throttle)) dispatchThrottling(throttle.trailing);
  5686. else throttled.value = false;
  5687. };
  5688. (0, vue.onMounted)(() => dispatcher("leading"));
  5689. (0, vue.watch)(() => loading.value, (val) => {
  5690. dispatcher(val ? "leading" : "trailing");
  5691. });
  5692. return throttled;
  5693. };
  5694. //#endregion
  5695. //#region ../../packages/hooks/use-timeout/index.ts
  5696. function useTimeout() {
  5697. let timeoutHandle;
  5698. const registerTimeout = (fn, delay) => {
  5699. cancelTimeout();
  5700. timeoutHandle = globalThis.setTimeout(fn, delay);
  5701. };
  5702. const cancelTimeout = () => {
  5703. if (timeoutHandle === void 0) return;
  5704. globalThis.clearTimeout(timeoutHandle);
  5705. timeoutHandle = void 0;
  5706. };
  5707. tryOnScopeDispose(() => cancelTimeout());
  5708. return {
  5709. registerTimeout,
  5710. cancelTimeout
  5711. };
  5712. }
  5713. //#endregion
  5714. //#region ../../packages/hooks/use-transition-fallthrough/index.ts
  5715. /* istanbul ignore file */
  5716. const AFTER_APPEAR = "after-appear";
  5717. const AFTER_ENTER = "after-enter";
  5718. const AFTER_LEAVE = "after-leave";
  5719. const APPEAR = "appear";
  5720. const APPEAR_CANCELLED = "appear-cancelled";
  5721. const BEFORE_ENTER = "before-enter";
  5722. const BEFORE_LEAVE = "before-leave";
  5723. const ENTER = "enter";
  5724. const ENTER_CANCELLED = "enter-cancelled";
  5725. const LEAVE = "leave";
  5726. const LEAVE_CANCELLED = "leave-cancelled";
  5727. const useTransitionFallthroughEmits = [
  5728. AFTER_APPEAR,
  5729. AFTER_ENTER,
  5730. AFTER_LEAVE,
  5731. APPEAR,
  5732. APPEAR_CANCELLED,
  5733. BEFORE_ENTER,
  5734. BEFORE_LEAVE,
  5735. ENTER,
  5736. ENTER_CANCELLED,
  5737. LEAVE,
  5738. LEAVE_CANCELLED
  5739. ];
  5740. const useTransitionFallthrough = () => {
  5741. const { emit } = (0, vue.getCurrentInstance)();
  5742. return {
  5743. onAfterAppear: () => {
  5744. emit(AFTER_APPEAR);
  5745. },
  5746. onAfterEnter: () => {
  5747. emit(AFTER_ENTER);
  5748. },
  5749. onAfterLeave: () => {
  5750. emit(AFTER_LEAVE);
  5751. },
  5752. onAppearCancelled: () => {
  5753. emit(APPEAR_CANCELLED);
  5754. },
  5755. onBeforeEnter: () => {
  5756. emit(BEFORE_ENTER);
  5757. },
  5758. onBeforeLeave: () => {
  5759. emit(BEFORE_LEAVE);
  5760. },
  5761. onEnter: () => {
  5762. emit(ENTER);
  5763. },
  5764. onEnterCancelled: () => {
  5765. emit(ENTER_CANCELLED);
  5766. },
  5767. onLeave: () => {
  5768. emit(LEAVE);
  5769. },
  5770. onLeaveCancelled: () => {
  5771. emit(LEAVE_CANCELLED);
  5772. }
  5773. };
  5774. };
  5775. //#endregion
  5776. //#region ../../packages/hooks/use-id/index.ts
  5777. const defaultIdInjection = {
  5778. prefix: Math.floor(Math.random() * 1e4),
  5779. current: 0
  5780. };
  5781. const ID_INJECTION_KEY = Symbol("elIdInjection");
  5782. const useIdInjection = () => {
  5783. return (0, vue.getCurrentInstance)() ? (0, vue.inject)(ID_INJECTION_KEY, defaultIdInjection) : defaultIdInjection;
  5784. };
  5785. const useId = (deterministicId) => {
  5786. const idInjection = useIdInjection();
  5787. if (!isClient && idInjection === defaultIdInjection) /* @__PURE__ */ debugWarn("IdInjection", `Looks like you are using server rendering, you must provide a id provider to ensure the hydration process to be succeed
  5788. usage: app.provide(ID_INJECTION_KEY, {
  5789. prefix: number,
  5790. current: number,
  5791. })`);
  5792. const namespace = useGetDerivedNamespace();
  5793. return computedEager(() => (0, vue.unref)(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`);
  5794. };
  5795. //#endregion
  5796. //#region ../../packages/hooks/use-escape-keydown/index.ts
  5797. let registeredEscapeHandlers = [];
  5798. const cachedHandler = (event) => {
  5799. if (getEventCode(event) === EVENT_CODE.esc) registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event));
  5800. };
  5801. const useEscapeKeydown = (handler) => {
  5802. (0, vue.onMounted)(() => {
  5803. if (registeredEscapeHandlers.length === 0) document.addEventListener("keydown", cachedHandler);
  5804. if (isClient) registeredEscapeHandlers.push(handler);
  5805. });
  5806. (0, vue.onBeforeUnmount)(() => {
  5807. registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler);
  5808. if (registeredEscapeHandlers.length === 0) {
  5809. if (isClient) document.removeEventListener("keydown", cachedHandler);
  5810. }
  5811. });
  5812. };
  5813. //#endregion
  5814. //#region ../../packages/hooks/use-popper-container/index.ts
  5815. const usePopperContainerId = () => {
  5816. const namespace = useGetDerivedNamespace();
  5817. const idInjection = useIdInjection();
  5818. const id = (0, vue.computed)(() => {
  5819. return `${namespace.value}-popper-container-${idInjection.prefix}`;
  5820. });
  5821. return {
  5822. id,
  5823. selector: (0, vue.computed)(() => `#${id.value}`)
  5824. };
  5825. };
  5826. const createContainer = (id) => {
  5827. const container = document.createElement("div");
  5828. container.id = id;
  5829. document.body.appendChild(container);
  5830. return container;
  5831. };
  5832. const usePopperContainer = () => {
  5833. const { id, selector } = usePopperContainerId();
  5834. (0, vue.onBeforeMount)(() => {
  5835. if (!isClient) return;
  5836. if (!document.body.querySelector(selector.value)) createContainer(id.value);
  5837. });
  5838. return {
  5839. id,
  5840. selector
  5841. };
  5842. };
  5843. //#endregion
  5844. //#region ../../packages/hooks/use-intermediate-render/index.ts
  5845. const useDelayedRender = ({ indicator, intermediateIndicator, shouldSetIntermediate = () => true, beforeShow, afterShow, afterHide, beforeHide }) => {
  5846. (0, vue.watch)(() => (0, vue.unref)(indicator), (val) => {
  5847. if (val) {
  5848. beforeShow?.();
  5849. (0, vue.nextTick)(() => {
  5850. if (!(0, vue.unref)(indicator)) return;
  5851. if (shouldSetIntermediate("show")) intermediateIndicator.value = true;
  5852. });
  5853. } else {
  5854. beforeHide?.();
  5855. (0, vue.nextTick)(() => {
  5856. if ((0, vue.unref)(indicator)) return;
  5857. if (shouldSetIntermediate("hide")) intermediateIndicator.value = false;
  5858. });
  5859. }
  5860. });
  5861. (0, vue.watch)(() => intermediateIndicator.value, (val) => {
  5862. if (val) afterShow?.();
  5863. else afterHide?.();
  5864. });
  5865. };
  5866. //#endregion
  5867. //#region ../../packages/hooks/use-delayed-toggle/index.ts
  5868. const useDelayedToggleProps = buildProps({
  5869. showAfter: {
  5870. type: Number,
  5871. default: 0
  5872. },
  5873. hideAfter: {
  5874. type: Number,
  5875. default: 200
  5876. },
  5877. autoClose: {
  5878. type: Number,
  5879. default: 0
  5880. }
  5881. });
  5882. const useDelayedTogglePropsDefaults = {
  5883. showAfter: 0,
  5884. hideAfter: 200,
  5885. autoClose: 0
  5886. };
  5887. const useDelayedToggle = ({ showAfter, hideAfter, autoClose, open, close }) => {
  5888. const { registerTimeout } = useTimeout();
  5889. const { registerTimeout: registerTimeoutForAutoClose, cancelTimeout: cancelTimeoutForAutoClose } = useTimeout();
  5890. const onOpen = (event, delay = (0, vue.unref)(showAfter)) => {
  5891. registerTimeout(() => {
  5892. open(event);
  5893. const _autoClose = (0, vue.unref)(autoClose);
  5894. if (isNumber(_autoClose) && _autoClose > 0) registerTimeoutForAutoClose(() => {
  5895. close(event);
  5896. }, _autoClose);
  5897. }, delay);
  5898. };
  5899. const onClose = (event, delay = (0, vue.unref)(hideAfter)) => {
  5900. cancelTimeoutForAutoClose();
  5901. registerTimeout(() => {
  5902. close(event);
  5903. }, delay);
  5904. };
  5905. return {
  5906. onOpen,
  5907. onClose
  5908. };
  5909. };
  5910. //#endregion
  5911. //#region ../../packages/hooks/use-forward-ref/index.ts
  5912. const FORWARD_REF_INJECTION_KEY = Symbol("elForwardRef");
  5913. const useForwardRef = (forwardRef) => {
  5914. const setForwardRef = ((el) => {
  5915. forwardRef.value = el;
  5916. });
  5917. (0, vue.provide)(FORWARD_REF_INJECTION_KEY, { setForwardRef });
  5918. };
  5919. const useForwardRefDirective = (setForwardRef) => {
  5920. return {
  5921. mounted(el) {
  5922. setForwardRef(el);
  5923. },
  5924. updated(el) {
  5925. setForwardRef(el);
  5926. },
  5927. unmounted() {
  5928. setForwardRef(null);
  5929. }
  5930. };
  5931. };
  5932. //#endregion
  5933. //#region ../../packages/hooks/use-z-index/index.ts
  5934. const initial = { current: 0 };
  5935. const zIndex = (0, vue.ref)(0);
  5936. const defaultInitialZIndex = 2e3;
  5937. const ZINDEX_INJECTION_KEY = Symbol("elZIndexContextKey");
  5938. const zIndexContextKey = Symbol("zIndexContextKey");
  5939. const useZIndex = (zIndexOverrides) => {
  5940. const increasingInjection = (0, vue.getCurrentInstance)() ? (0, vue.inject)(ZINDEX_INJECTION_KEY, initial) : initial;
  5941. const zIndexInjection = zIndexOverrides || ((0, vue.getCurrentInstance)() ? (0, vue.inject)(zIndexContextKey, void 0) : void 0);
  5942. const initialZIndex = (0, vue.computed)(() => {
  5943. const zIndexFromInjection = (0, vue.unref)(zIndexInjection);
  5944. return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex;
  5945. });
  5946. const currentZIndex = (0, vue.computed)(() => initialZIndex.value + zIndex.value);
  5947. const nextZIndex = () => {
  5948. increasingInjection.current++;
  5949. zIndex.value = increasingInjection.current;
  5950. return currentZIndex.value;
  5951. };
  5952. if (!isClient && !(0, vue.inject)(ZINDEX_INJECTION_KEY)) /* @__PURE__ */ debugWarn("ZIndexInjection", `Looks like you are using server rendering, you must provide a z-index provider to ensure the hydration process to be succeed
  5953. usage: app.provide(ZINDEX_INJECTION_KEY, { current: 0 })`);
  5954. return {
  5955. initialZIndex,
  5956. currentZIndex,
  5957. nextZIndex
  5958. };
  5959. };
  5960. //#endregion
  5961. //#region ../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
  5962. const min$1 = Math.min;
  5963. const max$1 = Math.max;
  5964. const round = Math.round;
  5965. const floor$1 = Math.floor;
  5966. const createCoords = (v) => ({
  5967. x: v,
  5968. y: v
  5969. });
  5970. const oppositeSideMap = {
  5971. left: "right",
  5972. right: "left",
  5973. bottom: "top",
  5974. top: "bottom"
  5975. };
  5976. function clamp(start, value, end) {
  5977. return max$1(start, min$1(value, end));
  5978. }
  5979. function evaluate(value, param) {
  5980. return typeof value === "function" ? value(param) : value;
  5981. }
  5982. function getSide(placement) {
  5983. return placement.split("-")[0];
  5984. }
  5985. function getAlignment(placement) {
  5986. return placement.split("-")[1];
  5987. }
  5988. function getOppositeAxis(axis) {
  5989. return axis === "x" ? "y" : "x";
  5990. }
  5991. function getAxisLength(axis) {
  5992. return axis === "y" ? "height" : "width";
  5993. }
  5994. function getSideAxis(placement) {
  5995. const firstChar = placement[0];
  5996. return firstChar === "t" || firstChar === "b" ? "y" : "x";
  5997. }
  5998. function getAlignmentAxis(placement) {
  5999. return getOppositeAxis(getSideAxis(placement));
  6000. }
  6001. function getAlignmentSides(placement, rects, rtl) {
  6002. if (rtl === void 0) rtl = false;
  6003. const alignment = getAlignment(placement);
  6004. const alignmentAxis = getAlignmentAxis(placement);
  6005. const length = getAxisLength(alignmentAxis);
  6006. let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
  6007. if (rects.reference[length] > rects.floating[length]) mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
  6008. return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
  6009. }
  6010. function getExpandedPlacements(placement) {
  6011. const oppositePlacement = getOppositePlacement(placement);
  6012. return [
  6013. getOppositeAlignmentPlacement(placement),
  6014. oppositePlacement,
  6015. getOppositeAlignmentPlacement(oppositePlacement)
  6016. ];
  6017. }
  6018. function getOppositeAlignmentPlacement(placement) {
  6019. return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start");
  6020. }
  6021. const lrPlacement = ["left", "right"];
  6022. const rlPlacement = ["right", "left"];
  6023. const tbPlacement = ["top", "bottom"];
  6024. const btPlacement = ["bottom", "top"];
  6025. function getSideList(side, isStart, rtl) {
  6026. switch (side) {
  6027. case "top":
  6028. case "bottom":
  6029. if (rtl) return isStart ? rlPlacement : lrPlacement;
  6030. return isStart ? lrPlacement : rlPlacement;
  6031. case "left":
  6032. case "right": return isStart ? tbPlacement : btPlacement;
  6033. default: return [];
  6034. }
  6035. }
  6036. function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
  6037. const alignment = getAlignment(placement);
  6038. let list = getSideList(getSide(placement), direction === "start", rtl);
  6039. if (alignment) {
  6040. list = list.map((side) => side + "-" + alignment);
  6041. if (flipAlignment) list = list.concat(list.map(getOppositeAlignmentPlacement));
  6042. }
  6043. return list;
  6044. }
  6045. function getOppositePlacement(placement) {
  6046. const side = getSide(placement);
  6047. return oppositeSideMap[side] + placement.slice(side.length);
  6048. }
  6049. function expandPaddingObject(padding) {
  6050. return {
  6051. top: 0,
  6052. right: 0,
  6053. bottom: 0,
  6054. left: 0,
  6055. ...padding
  6056. };
  6057. }
  6058. function getPaddingObject(padding) {
  6059. return typeof padding !== "number" ? expandPaddingObject(padding) : {
  6060. top: padding,
  6061. right: padding,
  6062. bottom: padding,
  6063. left: padding
  6064. };
  6065. }
  6066. function rectToClientRect(rect) {
  6067. const { x, y, width, height } = rect;
  6068. return {
  6069. width,
  6070. height,
  6071. top: y,
  6072. left: x,
  6073. right: x + width,
  6074. bottom: y + height,
  6075. x,
  6076. y
  6077. };
  6078. }
  6079. //#endregion
  6080. //#region ../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs
  6081. function computeCoordsFromPlacement(_ref, placement, rtl) {
  6082. let { reference, floating } = _ref;
  6083. const sideAxis = getSideAxis(placement);
  6084. const alignmentAxis = getAlignmentAxis(placement);
  6085. const alignLength = getAxisLength(alignmentAxis);
  6086. const side = getSide(placement);
  6087. const isVertical = sideAxis === "y";
  6088. const commonX = reference.x + reference.width / 2 - floating.width / 2;
  6089. const commonY = reference.y + reference.height / 2 - floating.height / 2;
  6090. const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
  6091. let coords;
  6092. switch (side) {
  6093. case "top":
  6094. coords = {
  6095. x: commonX,
  6096. y: reference.y - floating.height
  6097. };
  6098. break;
  6099. case "bottom":
  6100. coords = {
  6101. x: commonX,
  6102. y: reference.y + reference.height
  6103. };
  6104. break;
  6105. case "right":
  6106. coords = {
  6107. x: reference.x + reference.width,
  6108. y: commonY
  6109. };
  6110. break;
  6111. case "left":
  6112. coords = {
  6113. x: reference.x - floating.width,
  6114. y: commonY
  6115. };
  6116. break;
  6117. default: coords = {
  6118. x: reference.x,
  6119. y: reference.y
  6120. };
  6121. }
  6122. switch (getAlignment(placement)) {
  6123. case "start":
  6124. coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
  6125. break;
  6126. case "end":
  6127. coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
  6128. break;
  6129. }
  6130. return coords;
  6131. }
  6132. async function detectOverflow$1(state, options) {
  6133. var _await$platform$isEle;
  6134. if (options === void 0) options = {};
  6135. const { x, y, platform, rects, elements, strategy } = state;
  6136. const { boundary = "clippingAncestors", rootBoundary = "viewport", elementContext = "floating", altBoundary = false, padding = 0 } = evaluate(options, state);
  6137. const paddingObject = getPaddingObject(padding);
  6138. const element = elements[altBoundary ? elementContext === "floating" ? "reference" : "floating" : elementContext];
  6139. const clippingClientRect = rectToClientRect(await platform.getClippingRect({
  6140. element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating)),
  6141. boundary,
  6142. rootBoundary,
  6143. strategy
  6144. }));
  6145. const rect = elementContext === "floating" ? {
  6146. x,
  6147. y,
  6148. width: rects.floating.width,
  6149. height: rects.floating.height
  6150. } : rects.reference;
  6151. const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
  6152. const offsetScale = await (platform.isElement == null ? void 0 : platform.isElement(offsetParent)) ? await (platform.getScale == null ? void 0 : platform.getScale(offsetParent)) || {
  6153. x: 1,
  6154. y: 1
  6155. } : {
  6156. x: 1,
  6157. y: 1
  6158. };
  6159. const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
  6160. elements,
  6161. rect,
  6162. offsetParent,
  6163. strategy
  6164. }) : rect);
  6165. return {
  6166. top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
  6167. bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
  6168. left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
  6169. right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
  6170. };
  6171. }
  6172. const MAX_RESET_COUNT = 50;
  6173. const computePosition$1 = async (reference, floating, config) => {
  6174. const { placement = "bottom", strategy = "absolute", middleware = [], platform } = config;
  6175. const platformWithDetectOverflow = platform.detectOverflow ? platform : {
  6176. ...platform,
  6177. detectOverflow: detectOverflow$1
  6178. };
  6179. const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));
  6180. let rects = await platform.getElementRects({
  6181. reference,
  6182. floating,
  6183. strategy
  6184. });
  6185. let { x, y } = computeCoordsFromPlacement(rects, placement, rtl);
  6186. let statefulPlacement = placement;
  6187. let resetCount = 0;
  6188. const middlewareData = {};
  6189. for (let i = 0; i < middleware.length; i++) {
  6190. const currentMiddleware = middleware[i];
  6191. if (!currentMiddleware) continue;
  6192. const { name, fn } = currentMiddleware;
  6193. const { x: nextX, y: nextY, data, reset } = await fn({
  6194. x,
  6195. y,
  6196. initialPlacement: placement,
  6197. placement: statefulPlacement,
  6198. strategy,
  6199. middlewareData,
  6200. rects,
  6201. platform: platformWithDetectOverflow,
  6202. elements: {
  6203. reference,
  6204. floating
  6205. }
  6206. });
  6207. x = nextX != null ? nextX : x;
  6208. y = nextY != null ? nextY : y;
  6209. middlewareData[name] = {
  6210. ...middlewareData[name],
  6211. ...data
  6212. };
  6213. if (reset && resetCount < MAX_RESET_COUNT) {
  6214. resetCount++;
  6215. if (typeof reset === "object") {
  6216. if (reset.placement) statefulPlacement = reset.placement;
  6217. if (reset.rects) rects = reset.rects === true ? await platform.getElementRects({
  6218. reference,
  6219. floating,
  6220. strategy
  6221. }) : reset.rects;
  6222. ({x, y} = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
  6223. }
  6224. i = -1;
  6225. }
  6226. }
  6227. return {
  6228. x,
  6229. y,
  6230. placement: statefulPlacement,
  6231. strategy,
  6232. middlewareData
  6233. };
  6234. };
  6235. const arrow$1 = (options) => ({
  6236. name: "arrow",
  6237. options,
  6238. async fn(state) {
  6239. const { x, y, placement, rects, platform, elements, middlewareData } = state;
  6240. const { element, padding = 0 } = evaluate(options, state) || {};
  6241. if (element == null) return {};
  6242. const paddingObject = getPaddingObject(padding);
  6243. const coords = {
  6244. x,
  6245. y
  6246. };
  6247. const axis = getAlignmentAxis(placement);
  6248. const length = getAxisLength(axis);
  6249. const arrowDimensions = await platform.getDimensions(element);
  6250. const isYAxis = axis === "y";
  6251. const minProp = isYAxis ? "top" : "left";
  6252. const maxProp = isYAxis ? "bottom" : "right";
  6253. const clientProp = isYAxis ? "clientHeight" : "clientWidth";
  6254. const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
  6255. const startDiff = coords[axis] - rects.reference[axis];
  6256. const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));
  6257. let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;
  6258. if (!clientSize || !await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent))) clientSize = elements.floating[clientProp] || rects.floating[length];
  6259. const centerToReference = endDiff / 2 - startDiff / 2;
  6260. const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
  6261. const minPadding = min$1(paddingObject[minProp], largestPossiblePadding);
  6262. const maxPadding = min$1(paddingObject[maxProp], largestPossiblePadding);
  6263. const min$1$1 = minPadding;
  6264. const max = clientSize - arrowDimensions[length] - maxPadding;
  6265. const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
  6266. const offset = clamp(min$1$1, center, max);
  6267. const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
  6268. const alignmentOffset = shouldAddOffset ? center < min$1$1 ? center - min$1$1 : center - max : 0;
  6269. return {
  6270. [axis]: coords[axis] + alignmentOffset,
  6271. data: {
  6272. [axis]: offset,
  6273. centerOffset: center - offset - alignmentOffset,
  6274. ...shouldAddOffset && { alignmentOffset }
  6275. },
  6276. reset: shouldAddOffset
  6277. };
  6278. }
  6279. });
  6280. const flip$1 = function(options) {
  6281. if (options === void 0) options = {};
  6282. return {
  6283. name: "flip",
  6284. options,
  6285. async fn(state) {
  6286. var _middlewareData$arrow, _middlewareData$flip;
  6287. const { placement, middlewareData, rects, initialPlacement, platform, elements } = state;
  6288. const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true, fallbackPlacements: specifiedFallbackPlacements, fallbackStrategy = "bestFit", fallbackAxisSideDirection = "none", flipAlignment = true, ...detectOverflowOptions } = evaluate(options, state);
  6289. if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) return {};
  6290. const side = getSide(placement);
  6291. const initialSideAxis = getSideAxis(initialPlacement);
  6292. const isBasePlacement = getSide(initialPlacement) === initialPlacement;
  6293. const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
  6294. const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
  6295. const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none";
  6296. if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
  6297. const placements = [initialPlacement, ...fallbackPlacements];
  6298. const overflow = await platform.detectOverflow(state, detectOverflowOptions);
  6299. const overflows = [];
  6300. let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
  6301. if (checkMainAxis) overflows.push(overflow[side]);
  6302. if (checkCrossAxis) {
  6303. const sides = getAlignmentSides(placement, rects, rtl);
  6304. overflows.push(overflow[sides[0]], overflow[sides[1]]);
  6305. }
  6306. overflowsData = [...overflowsData, {
  6307. placement,
  6308. overflows
  6309. }];
  6310. if (!overflows.every((side) => side <= 0)) {
  6311. var _middlewareData$flip2, _overflowsData$filter;
  6312. const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
  6313. const nextPlacement = placements[nextIndex];
  6314. if (nextPlacement) {
  6315. if (!(checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false) || overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) return {
  6316. data: {
  6317. index: nextIndex,
  6318. overflows: overflowsData
  6319. },
  6320. reset: { placement: nextPlacement }
  6321. };
  6322. }
  6323. let resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;
  6324. if (!resetPlacement) switch (fallbackStrategy) {
  6325. case "bestFit": {
  6326. var _overflowsData$filter2;
  6327. const placement = (_overflowsData$filter2 = overflowsData.filter((d) => {
  6328. if (hasFallbackAxisSideDirection) {
  6329. const currentSideAxis = getSideAxis(d.placement);
  6330. return currentSideAxis === initialSideAxis || currentSideAxis === "y";
  6331. }
  6332. return true;
  6333. }).map((d) => [d.placement, d.overflows.filter((overflow) => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];
  6334. if (placement) resetPlacement = placement;
  6335. break;
  6336. }
  6337. case "initialPlacement":
  6338. resetPlacement = initialPlacement;
  6339. break;
  6340. }
  6341. if (placement !== resetPlacement) return { reset: { placement: resetPlacement } };
  6342. }
  6343. return {};
  6344. }
  6345. };
  6346. };
  6347. const originSides = /* @__PURE__ */ new Set(["left", "top"]);
  6348. async function convertValueToCoords(state, options) {
  6349. const { placement, platform, elements } = state;
  6350. const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
  6351. const side = getSide(placement);
  6352. const alignment = getAlignment(placement);
  6353. const isVertical = getSideAxis(placement) === "y";
  6354. const mainAxisMulti = originSides.has(side) ? -1 : 1;
  6355. const crossAxisMulti = rtl && isVertical ? -1 : 1;
  6356. const rawValue = evaluate(options, state);
  6357. let { mainAxis, crossAxis, alignmentAxis } = typeof rawValue === "number" ? {
  6358. mainAxis: rawValue,
  6359. crossAxis: 0,
  6360. alignmentAxis: null
  6361. } : {
  6362. mainAxis: rawValue.mainAxis || 0,
  6363. crossAxis: rawValue.crossAxis || 0,
  6364. alignmentAxis: rawValue.alignmentAxis
  6365. };
  6366. if (alignment && typeof alignmentAxis === "number") crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
  6367. return isVertical ? {
  6368. x: crossAxis * crossAxisMulti,
  6369. y: mainAxis * mainAxisMulti
  6370. } : {
  6371. x: mainAxis * mainAxisMulti,
  6372. y: crossAxis * crossAxisMulti
  6373. };
  6374. }
  6375. const offset$1 = function(options) {
  6376. if (options === void 0) options = 0;
  6377. return {
  6378. name: "offset",
  6379. options,
  6380. async fn(state) {
  6381. var _middlewareData$offse, _middlewareData$arrow;
  6382. const { x, y, placement, middlewareData } = state;
  6383. const diffCoords = await convertValueToCoords(state, options);
  6384. if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) return {};
  6385. return {
  6386. x: x + diffCoords.x,
  6387. y: y + diffCoords.y,
  6388. data: {
  6389. ...diffCoords,
  6390. placement
  6391. }
  6392. };
  6393. }
  6394. };
  6395. };
  6396. const shift$1 = function(options) {
  6397. if (options === void 0) options = {};
  6398. return {
  6399. name: "shift",
  6400. options,
  6401. async fn(state) {
  6402. const { x, y, placement, platform } = state;
  6403. const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = false, limiter = { fn: (_ref) => {
  6404. let { x, y } = _ref;
  6405. return {
  6406. x,
  6407. y
  6408. };
  6409. } }, ...detectOverflowOptions } = evaluate(options, state);
  6410. const coords = {
  6411. x,
  6412. y
  6413. };
  6414. const overflow = await platform.detectOverflow(state, detectOverflowOptions);
  6415. const crossAxis = getSideAxis(getSide(placement));
  6416. const mainAxis = getOppositeAxis(crossAxis);
  6417. let mainAxisCoord = coords[mainAxis];
  6418. let crossAxisCoord = coords[crossAxis];
  6419. if (checkMainAxis) {
  6420. const minSide = mainAxis === "y" ? "top" : "left";
  6421. const maxSide = mainAxis === "y" ? "bottom" : "right";
  6422. const min = mainAxisCoord + overflow[minSide];
  6423. const max = mainAxisCoord - overflow[maxSide];
  6424. mainAxisCoord = clamp(min, mainAxisCoord, max);
  6425. }
  6426. if (checkCrossAxis) {
  6427. const minSide = crossAxis === "y" ? "top" : "left";
  6428. const maxSide = crossAxis === "y" ? "bottom" : "right";
  6429. const min = crossAxisCoord + overflow[minSide];
  6430. const max = crossAxisCoord - overflow[maxSide];
  6431. crossAxisCoord = clamp(min, crossAxisCoord, max);
  6432. }
  6433. const limitedCoords = limiter.fn({
  6434. ...state,
  6435. [mainAxis]: mainAxisCoord,
  6436. [crossAxis]: crossAxisCoord
  6437. });
  6438. return {
  6439. ...limitedCoords,
  6440. data: {
  6441. x: limitedCoords.x - x,
  6442. y: limitedCoords.y - y,
  6443. enabled: {
  6444. [mainAxis]: checkMainAxis,
  6445. [crossAxis]: checkCrossAxis
  6446. }
  6447. }
  6448. };
  6449. }
  6450. };
  6451. };
  6452. //#endregion
  6453. //#region ../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
  6454. function hasWindow() {
  6455. return typeof window !== "undefined";
  6456. }
  6457. function getNodeName(node) {
  6458. if (isNode(node)) return (node.nodeName || "").toLowerCase();
  6459. return "#document";
  6460. }
  6461. function getWindow(node) {
  6462. var _node$ownerDocument;
  6463. return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
  6464. }
  6465. function getDocumentElement(node) {
  6466. var _ref;
  6467. return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
  6468. }
  6469. function isNode(value) {
  6470. if (!hasWindow()) return false;
  6471. return value instanceof Node || value instanceof getWindow(value).Node;
  6472. }
  6473. function isElement(value) {
  6474. if (!hasWindow()) return false;
  6475. return value instanceof Element || value instanceof getWindow(value).Element;
  6476. }
  6477. function isHTMLElement(value) {
  6478. if (!hasWindow()) return false;
  6479. return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
  6480. }
  6481. function isShadowRoot(value) {
  6482. if (!hasWindow() || typeof ShadowRoot === "undefined") return false;
  6483. return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
  6484. }
  6485. function isOverflowElement(element) {
  6486. const { overflow, overflowX, overflowY, display } = getComputedStyle$1(element);
  6487. return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents";
  6488. }
  6489. function isTableElement(element) {
  6490. return /^(table|td|th)$/.test(getNodeName(element));
  6491. }
  6492. function isTopLayer(element) {
  6493. try {
  6494. if (element.matches(":popover-open")) return true;
  6495. } catch (_e) {}
  6496. try {
  6497. return element.matches(":modal");
  6498. } catch (_e) {
  6499. return false;
  6500. }
  6501. }
  6502. const willChangeRe = /transform|translate|scale|rotate|perspective|filter/;
  6503. const containRe = /paint|layout|strict|content/;
  6504. const isNotNone = (value) => !!value && value !== "none";
  6505. let isWebKitValue;
  6506. function isContainingBlock(elementOrCss) {
  6507. const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
  6508. return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || "") || containRe.test(css.contain || "");
  6509. }
  6510. function getContainingBlock(element) {
  6511. let currentNode = getParentNode(element);
  6512. while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
  6513. if (isContainingBlock(currentNode)) return currentNode;
  6514. else if (isTopLayer(currentNode)) return null;
  6515. currentNode = getParentNode(currentNode);
  6516. }
  6517. return null;
  6518. }
  6519. function isWebKit() {
  6520. if (isWebKitValue == null) isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none");
  6521. return isWebKitValue;
  6522. }
  6523. function isLastTraversableNode(node) {
  6524. return /^(html|body|#document)$/.test(getNodeName(node));
  6525. }
  6526. function getComputedStyle$1(element) {
  6527. return getWindow(element).getComputedStyle(element);
  6528. }
  6529. function getNodeScroll(element) {
  6530. if (isElement(element)) return {
  6531. scrollLeft: element.scrollLeft,
  6532. scrollTop: element.scrollTop
  6533. };
  6534. return {
  6535. scrollLeft: element.scrollX,
  6536. scrollTop: element.scrollY
  6537. };
  6538. }
  6539. function getParentNode(node) {
  6540. if (getNodeName(node) === "html") return node;
  6541. const result = node.assignedSlot || node.parentNode || isShadowRoot(node) && node.host || getDocumentElement(node);
  6542. return isShadowRoot(result) ? result.host : result;
  6543. }
  6544. function getNearestOverflowAncestor(node) {
  6545. const parentNode = getParentNode(node);
  6546. if (isLastTraversableNode(parentNode)) return node.ownerDocument ? node.ownerDocument.body : node.body;
  6547. if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) return parentNode;
  6548. return getNearestOverflowAncestor(parentNode);
  6549. }
  6550. function getOverflowAncestors(node, list, traverseIframes) {
  6551. var _node$ownerDocument2;
  6552. if (list === void 0) list = [];
  6553. if (traverseIframes === void 0) traverseIframes = true;
  6554. const scrollableAncestor = getNearestOverflowAncestor(node);
  6555. const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
  6556. const win = getWindow(scrollableAncestor);
  6557. if (isBody) {
  6558. const frameElement = getFrameElement(win);
  6559. return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
  6560. } else return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
  6561. }
  6562. function getFrameElement(win) {
  6563. return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
  6564. }
  6565. //#endregion
  6566. //#region ../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
  6567. function getCssDimensions(element) {
  6568. const css = getComputedStyle$1(element);
  6569. let width = parseFloat(css.width) || 0;
  6570. let height = parseFloat(css.height) || 0;
  6571. const hasOffset = isHTMLElement(element);
  6572. const offsetWidth = hasOffset ? element.offsetWidth : width;
  6573. const offsetHeight = hasOffset ? element.offsetHeight : height;
  6574. const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
  6575. if (shouldFallback) {
  6576. width = offsetWidth;
  6577. height = offsetHeight;
  6578. }
  6579. return {
  6580. width,
  6581. height,
  6582. $: shouldFallback
  6583. };
  6584. }
  6585. function unwrapElement(element) {
  6586. return !isElement(element) ? element.contextElement : element;
  6587. }
  6588. function getScale(element) {
  6589. const domElement = unwrapElement(element);
  6590. if (!isHTMLElement(domElement)) return createCoords(1);
  6591. const rect = domElement.getBoundingClientRect();
  6592. const { width, height, $ } = getCssDimensions(domElement);
  6593. let x = ($ ? round(rect.width) : rect.width) / width;
  6594. let y = ($ ? round(rect.height) : rect.height) / height;
  6595. if (!x || !Number.isFinite(x)) x = 1;
  6596. if (!y || !Number.isFinite(y)) y = 1;
  6597. return {
  6598. x,
  6599. y
  6600. };
  6601. }
  6602. const noOffsets = /* @__PURE__ */ createCoords(0);
  6603. function getVisualOffsets(element) {
  6604. const win = getWindow(element);
  6605. if (!isWebKit() || !win.visualViewport) return noOffsets;
  6606. return {
  6607. x: win.visualViewport.offsetLeft,
  6608. y: win.visualViewport.offsetTop
  6609. };
  6610. }
  6611. function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
  6612. if (isFixed === void 0) isFixed = false;
  6613. if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) return false;
  6614. return isFixed;
  6615. }
  6616. function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
  6617. if (includeScale === void 0) includeScale = false;
  6618. if (isFixedStrategy === void 0) isFixedStrategy = false;
  6619. const clientRect = element.getBoundingClientRect();
  6620. const domElement = unwrapElement(element);
  6621. let scale = createCoords(1);
  6622. if (includeScale) if (offsetParent) {
  6623. if (isElement(offsetParent)) scale = getScale(offsetParent);
  6624. } else scale = getScale(element);
  6625. const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
  6626. let x = (clientRect.left + visualOffsets.x) / scale.x;
  6627. let y = (clientRect.top + visualOffsets.y) / scale.y;
  6628. let width = clientRect.width / scale.x;
  6629. let height = clientRect.height / scale.y;
  6630. if (domElement) {
  6631. const win = getWindow(domElement);
  6632. const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
  6633. let currentWin = win;
  6634. let currentIFrame = getFrameElement(currentWin);
  6635. while (currentIFrame && offsetParent && offsetWin !== currentWin) {
  6636. const iframeScale = getScale(currentIFrame);
  6637. const iframeRect = currentIFrame.getBoundingClientRect();
  6638. const css = getComputedStyle$1(currentIFrame);
  6639. const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
  6640. const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
  6641. x *= iframeScale.x;
  6642. y *= iframeScale.y;
  6643. width *= iframeScale.x;
  6644. height *= iframeScale.y;
  6645. x += left;
  6646. y += top;
  6647. currentWin = getWindow(currentIFrame);
  6648. currentIFrame = getFrameElement(currentWin);
  6649. }
  6650. }
  6651. return rectToClientRect({
  6652. width,
  6653. height,
  6654. x,
  6655. y
  6656. });
  6657. }
  6658. function getWindowScrollBarX(element, rect) {
  6659. const leftScroll = getNodeScroll(element).scrollLeft;
  6660. if (!rect) return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
  6661. return rect.left + leftScroll;
  6662. }
  6663. function getHTMLOffset(documentElement, scroll) {
  6664. const htmlRect = documentElement.getBoundingClientRect();
  6665. return {
  6666. x: htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect),
  6667. y: htmlRect.top + scroll.scrollTop
  6668. };
  6669. }
  6670. function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
  6671. let { elements, rect, offsetParent, strategy } = _ref;
  6672. const isFixed = strategy === "fixed";
  6673. const documentElement = getDocumentElement(offsetParent);
  6674. const topLayer = elements ? isTopLayer(elements.floating) : false;
  6675. if (offsetParent === documentElement || topLayer && isFixed) return rect;
  6676. let scroll = {
  6677. scrollLeft: 0,
  6678. scrollTop: 0
  6679. };
  6680. let scale = createCoords(1);
  6681. const offsets = createCoords(0);
  6682. const isOffsetParentAnElement = isHTMLElement(offsetParent);
  6683. if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
  6684. if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) scroll = getNodeScroll(offsetParent);
  6685. if (isOffsetParentAnElement) {
  6686. const offsetRect = getBoundingClientRect(offsetParent);
  6687. scale = getScale(offsetParent);
  6688. offsets.x = offsetRect.x + offsetParent.clientLeft;
  6689. offsets.y = offsetRect.y + offsetParent.clientTop;
  6690. }
  6691. }
  6692. const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
  6693. return {
  6694. width: rect.width * scale.x,
  6695. height: rect.height * scale.y,
  6696. x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
  6697. y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
  6698. };
  6699. }
  6700. function getClientRects(element) {
  6701. return Array.from(element.getClientRects());
  6702. }
  6703. function getDocumentRect(element) {
  6704. const html = getDocumentElement(element);
  6705. const scroll = getNodeScroll(element);
  6706. const body = element.ownerDocument.body;
  6707. const width = max$1(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
  6708. const height = max$1(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
  6709. let x = -scroll.scrollLeft + getWindowScrollBarX(element);
  6710. const y = -scroll.scrollTop;
  6711. if (getComputedStyle$1(body).direction === "rtl") x += max$1(html.clientWidth, body.clientWidth) - width;
  6712. return {
  6713. width,
  6714. height,
  6715. x,
  6716. y
  6717. };
  6718. }
  6719. const SCROLLBAR_MAX = 25;
  6720. function getViewportRect(element, strategy) {
  6721. const win = getWindow(element);
  6722. const html = getDocumentElement(element);
  6723. const visualViewport = win.visualViewport;
  6724. let width = html.clientWidth;
  6725. let height = html.clientHeight;
  6726. let x = 0;
  6727. let y = 0;
  6728. if (visualViewport) {
  6729. width = visualViewport.width;
  6730. height = visualViewport.height;
  6731. const visualViewportBased = isWebKit();
  6732. if (!visualViewportBased || visualViewportBased && strategy === "fixed") {
  6733. x = visualViewport.offsetLeft;
  6734. y = visualViewport.offsetTop;
  6735. }
  6736. }
  6737. const windowScrollbarX = getWindowScrollBarX(html);
  6738. if (windowScrollbarX <= 0) {
  6739. const doc = html.ownerDocument;
  6740. const body = doc.body;
  6741. const bodyStyles = getComputedStyle(body);
  6742. const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
  6743. const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
  6744. if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) width -= clippingStableScrollbarWidth;
  6745. } else if (windowScrollbarX <= SCROLLBAR_MAX) width += windowScrollbarX;
  6746. return {
  6747. width,
  6748. height,
  6749. x,
  6750. y
  6751. };
  6752. }
  6753. function getInnerBoundingClientRect(element, strategy) {
  6754. const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
  6755. const top = clientRect.top + element.clientTop;
  6756. const left = clientRect.left + element.clientLeft;
  6757. const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
  6758. return {
  6759. width: element.clientWidth * scale.x,
  6760. height: element.clientHeight * scale.y,
  6761. x: left * scale.x,
  6762. y: top * scale.y
  6763. };
  6764. }
  6765. function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
  6766. let rect;
  6767. if (clippingAncestor === "viewport") rect = getViewportRect(element, strategy);
  6768. else if (clippingAncestor === "document") rect = getDocumentRect(getDocumentElement(element));
  6769. else if (isElement(clippingAncestor)) rect = getInnerBoundingClientRect(clippingAncestor, strategy);
  6770. else {
  6771. const visualOffsets = getVisualOffsets(element);
  6772. rect = {
  6773. x: clippingAncestor.x - visualOffsets.x,
  6774. y: clippingAncestor.y - visualOffsets.y,
  6775. width: clippingAncestor.width,
  6776. height: clippingAncestor.height
  6777. };
  6778. }
  6779. return rectToClientRect(rect);
  6780. }
  6781. function hasFixedPositionAncestor(element, stopNode) {
  6782. const parentNode = getParentNode(element);
  6783. if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) return false;
  6784. return getComputedStyle$1(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode);
  6785. }
  6786. function getClippingElementAncestors(element, cache) {
  6787. const cachedResult = cache.get(element);
  6788. if (cachedResult) return cachedResult;
  6789. let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body");
  6790. let currentContainingBlockComputedStyle = null;
  6791. const elementIsFixed = getComputedStyle$1(element).position === "fixed";
  6792. let currentNode = elementIsFixed ? getParentNode(element) : element;
  6793. while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
  6794. const computedStyle = getComputedStyle$1(currentNode);
  6795. const currentNodeIsContaining = isContainingBlock(currentNode);
  6796. if (!currentNodeIsContaining && computedStyle.position === "fixed") currentContainingBlockComputedStyle = null;
  6797. if (elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === "absolute" || currentContainingBlockComputedStyle.position === "fixed") || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode)) result = result.filter((ancestor) => ancestor !== currentNode);
  6798. else currentContainingBlockComputedStyle = computedStyle;
  6799. currentNode = getParentNode(currentNode);
  6800. }
  6801. cache.set(element, result);
  6802. return result;
  6803. }
  6804. function getClippingRect(_ref) {
  6805. let { element, boundary, rootBoundary, strategy } = _ref;
  6806. const clippingAncestors = [...boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary), rootBoundary];
  6807. const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);
  6808. let top = firstRect.top;
  6809. let right = firstRect.right;
  6810. let bottom = firstRect.bottom;
  6811. let left = firstRect.left;
  6812. for (let i = 1; i < clippingAncestors.length; i++) {
  6813. const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);
  6814. top = max$1(rect.top, top);
  6815. right = min$1(rect.right, right);
  6816. bottom = min$1(rect.bottom, bottom);
  6817. left = max$1(rect.left, left);
  6818. }
  6819. return {
  6820. width: right - left,
  6821. height: bottom - top,
  6822. x: left,
  6823. y: top
  6824. };
  6825. }
  6826. function getDimensions(element) {
  6827. const { width, height } = getCssDimensions(element);
  6828. return {
  6829. width,
  6830. height
  6831. };
  6832. }
  6833. function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
  6834. const isOffsetParentAnElement = isHTMLElement(offsetParent);
  6835. const documentElement = getDocumentElement(offsetParent);
  6836. const isFixed = strategy === "fixed";
  6837. const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
  6838. let scroll = {
  6839. scrollLeft: 0,
  6840. scrollTop: 0
  6841. };
  6842. const offsets = createCoords(0);
  6843. function setLeftRTLScrollbarOffset() {
  6844. offsets.x = getWindowScrollBarX(documentElement);
  6845. }
  6846. if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
  6847. if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) scroll = getNodeScroll(offsetParent);
  6848. if (isOffsetParentAnElement) {
  6849. const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
  6850. offsets.x = offsetRect.x + offsetParent.clientLeft;
  6851. offsets.y = offsetRect.y + offsetParent.clientTop;
  6852. } else if (documentElement) setLeftRTLScrollbarOffset();
  6853. }
  6854. if (isFixed && !isOffsetParentAnElement && documentElement) setLeftRTLScrollbarOffset();
  6855. const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
  6856. return {
  6857. x: rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x,
  6858. y: rect.top + scroll.scrollTop - offsets.y - htmlOffset.y,
  6859. width: rect.width,
  6860. height: rect.height
  6861. };
  6862. }
  6863. function isStaticPositioned(element) {
  6864. return getComputedStyle$1(element).position === "static";
  6865. }
  6866. function getTrueOffsetParent(element, polyfill) {
  6867. if (!isHTMLElement(element) || getComputedStyle$1(element).position === "fixed") return null;
  6868. if (polyfill) return polyfill(element);
  6869. let rawOffsetParent = element.offsetParent;
  6870. if (getDocumentElement(element) === rawOffsetParent) rawOffsetParent = rawOffsetParent.ownerDocument.body;
  6871. return rawOffsetParent;
  6872. }
  6873. function getOffsetParent(element, polyfill) {
  6874. const win = getWindow(element);
  6875. if (isTopLayer(element)) return win;
  6876. if (!isHTMLElement(element)) {
  6877. let svgOffsetParent = getParentNode(element);
  6878. while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
  6879. if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) return svgOffsetParent;
  6880. svgOffsetParent = getParentNode(svgOffsetParent);
  6881. }
  6882. return win;
  6883. }
  6884. let offsetParent = getTrueOffsetParent(element, polyfill);
  6885. while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) offsetParent = getTrueOffsetParent(offsetParent, polyfill);
  6886. if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) return win;
  6887. return offsetParent || getContainingBlock(element) || win;
  6888. }
  6889. const getElementRects = async function(data) {
  6890. const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
  6891. const getDimensionsFn = this.getDimensions;
  6892. const floatingDimensions = await getDimensionsFn(data.floating);
  6893. return {
  6894. reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
  6895. floating: {
  6896. x: 0,
  6897. y: 0,
  6898. width: floatingDimensions.width,
  6899. height: floatingDimensions.height
  6900. }
  6901. };
  6902. };
  6903. function isRTL$1(element) {
  6904. return getComputedStyle$1(element).direction === "rtl";
  6905. }
  6906. const platform = {
  6907. convertOffsetParentRelativeRectToViewportRelativeRect,
  6908. getDocumentElement,
  6909. getClippingRect,
  6910. getOffsetParent,
  6911. getElementRects,
  6912. getClientRects,
  6913. getDimensions,
  6914. getScale,
  6915. isElement,
  6916. isRTL: isRTL$1
  6917. };
  6918. function rectsAreEqual(a, b) {
  6919. return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
  6920. }
  6921. function observeMove(element, onMove) {
  6922. let io = null;
  6923. let timeoutId;
  6924. const root = getDocumentElement(element);
  6925. function cleanup() {
  6926. var _io;
  6927. clearTimeout(timeoutId);
  6928. (_io = io) == null || _io.disconnect();
  6929. io = null;
  6930. }
  6931. function refresh(skip, threshold) {
  6932. if (skip === void 0) skip = false;
  6933. if (threshold === void 0) threshold = 1;
  6934. cleanup();
  6935. const elementRectForRootMargin = element.getBoundingClientRect();
  6936. const { left, top, width, height } = elementRectForRootMargin;
  6937. if (!skip) onMove();
  6938. if (!width || !height) return;
  6939. const insetTop = floor$1(top);
  6940. const insetRight = floor$1(root.clientWidth - (left + width));
  6941. const insetBottom = floor$1(root.clientHeight - (top + height));
  6942. const insetLeft = floor$1(left);
  6943. const options = {
  6944. rootMargin: -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px",
  6945. threshold: max$1(0, min$1(1, threshold)) || 1
  6946. };
  6947. let isFirstUpdate = true;
  6948. function handleObserve(entries) {
  6949. const ratio = entries[0].intersectionRatio;
  6950. if (ratio !== threshold) {
  6951. if (!isFirstUpdate) return refresh();
  6952. if (!ratio) timeoutId = setTimeout(() => {
  6953. refresh(false, 1e-7);
  6954. }, 1e3);
  6955. else refresh(false, ratio);
  6956. }
  6957. if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) refresh();
  6958. isFirstUpdate = false;
  6959. }
  6960. try {
  6961. io = new IntersectionObserver(handleObserve, {
  6962. ...options,
  6963. root: root.ownerDocument
  6964. });
  6965. } catch (_e) {
  6966. io = new IntersectionObserver(handleObserve, options);
  6967. }
  6968. io.observe(element);
  6969. }
  6970. refresh(true);
  6971. return cleanup;
  6972. }
  6973. function autoUpdate(reference, floating, update, options) {
  6974. if (options === void 0) options = {};
  6975. const { ancestorScroll = true, ancestorResize = true, elementResize = typeof ResizeObserver === "function", layoutShift = typeof IntersectionObserver === "function", animationFrame = false } = options;
  6976. const referenceEl = unwrapElement(reference);
  6977. const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : [];
  6978. ancestors.forEach((ancestor) => {
  6979. ancestorScroll && ancestor.addEventListener("scroll", update, { passive: true });
  6980. ancestorResize && ancestor.addEventListener("resize", update);
  6981. });
  6982. const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;
  6983. let reobserveFrame = -1;
  6984. let resizeObserver = null;
  6985. if (elementResize) {
  6986. resizeObserver = new ResizeObserver((_ref) => {
  6987. let [firstEntry] = _ref;
  6988. if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {
  6989. resizeObserver.unobserve(floating);
  6990. cancelAnimationFrame(reobserveFrame);
  6991. reobserveFrame = requestAnimationFrame(() => {
  6992. var _resizeObserver;
  6993. (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
  6994. });
  6995. }
  6996. update();
  6997. });
  6998. if (referenceEl && !animationFrame) resizeObserver.observe(referenceEl);
  6999. if (floating) resizeObserver.observe(floating);
  7000. }
  7001. let frameId;
  7002. let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
  7003. if (animationFrame) frameLoop();
  7004. function frameLoop() {
  7005. const nextRefRect = getBoundingClientRect(reference);
  7006. if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) update();
  7007. prevRefRect = nextRefRect;
  7008. frameId = requestAnimationFrame(frameLoop);
  7009. }
  7010. update();
  7011. return () => {
  7012. var _resizeObserver2;
  7013. ancestors.forEach((ancestor) => {
  7014. ancestorScroll && ancestor.removeEventListener("scroll", update);
  7015. ancestorResize && ancestor.removeEventListener("resize", update);
  7016. });
  7017. cleanupIo?.();
  7018. (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
  7019. resizeObserver = null;
  7020. if (animationFrame) cancelAnimationFrame(frameId);
  7021. };
  7022. }
  7023. const detectOverflow = detectOverflow$1;
  7024. const offset = offset$1;
  7025. const shift = shift$1;
  7026. const flip = flip$1;
  7027. const arrow = arrow$1;
  7028. const computePosition = (reference, floating, options) => {
  7029. const cache = /* @__PURE__ */ new Map();
  7030. const mergedOptions = {
  7031. platform,
  7032. ...options
  7033. };
  7034. const platformWithCache = {
  7035. ...mergedOptions.platform,
  7036. _c: cache
  7037. };
  7038. return computePosition$1(reference, floating, {
  7039. ...mergedOptions,
  7040. platform: platformWithCache
  7041. });
  7042. };
  7043. //#endregion
  7044. //#region ../../packages/hooks/use-floating/index.ts
  7045. const useFloatingProps = buildProps({});
  7046. const unrefReference = (elRef) => {
  7047. if (!isClient) return;
  7048. if (!elRef) return elRef;
  7049. const unrefEl = unrefElement(elRef);
  7050. if (unrefEl) return unrefEl;
  7051. return (0, vue.isRef)(elRef) ? unrefEl : elRef;
  7052. };
  7053. const getPositionDataWithUnit = (record, key) => {
  7054. const value = record?.[key];
  7055. return isNil(value) ? "" : `${value}px`;
  7056. };
  7057. const useFloating = ({ middleware, placement, strategy }) => {
  7058. const referenceRef = (0, vue.ref)();
  7059. const contentRef = (0, vue.ref)();
  7060. const states = {
  7061. x: (0, vue.ref)(),
  7062. y: (0, vue.ref)(),
  7063. placement,
  7064. strategy,
  7065. middlewareData: (0, vue.ref)({})
  7066. };
  7067. const update = async () => {
  7068. if (!isClient) return;
  7069. const referenceEl = unrefReference(referenceRef);
  7070. const contentEl = unrefElement(contentRef);
  7071. if (!referenceEl || !contentEl) return;
  7072. const data = await computePosition(referenceEl, contentEl, {
  7073. placement: (0, vue.unref)(placement),
  7074. strategy: (0, vue.unref)(strategy),
  7075. middleware: (0, vue.unref)(middleware)
  7076. });
  7077. keysOf(states).forEach((key) => {
  7078. states[key].value = data[key];
  7079. });
  7080. };
  7081. (0, vue.onMounted)(() => {
  7082. (0, vue.watchEffect)(() => {
  7083. update();
  7084. });
  7085. });
  7086. return {
  7087. ...states,
  7088. update,
  7089. referenceRef,
  7090. contentRef
  7091. };
  7092. };
  7093. const arrowMiddleware = ({ arrowRef, padding }) => {
  7094. return {
  7095. name: "arrow",
  7096. options: {
  7097. element: arrowRef,
  7098. padding
  7099. },
  7100. fn(args) {
  7101. const arrowEl = (0, vue.unref)(arrowRef);
  7102. if (!arrowEl) return {};
  7103. return arrow({
  7104. element: arrowEl,
  7105. padding
  7106. }).fn(args);
  7107. }
  7108. };
  7109. };
  7110. //#endregion
  7111. //#region ../../packages/hooks/use-cursor/index.ts
  7112. function useCursor(input) {
  7113. let selectionInfo;
  7114. function recordCursor() {
  7115. if (input.value == void 0) return;
  7116. const { selectionStart, selectionEnd, value } = input.value;
  7117. if (selectionStart == null || selectionEnd == null) return;
  7118. selectionInfo = {
  7119. selectionStart,
  7120. selectionEnd,
  7121. value,
  7122. beforeTxt: value.slice(0, Math.max(0, selectionStart)),
  7123. afterTxt: value.slice(Math.max(0, selectionEnd))
  7124. };
  7125. }
  7126. function setCursor() {
  7127. if (input.value == void 0 || selectionInfo == void 0) return;
  7128. const { value } = input.value;
  7129. const { beforeTxt, afterTxt, selectionStart } = selectionInfo;
  7130. if (beforeTxt == void 0 || afterTxt == void 0 || selectionStart == void 0) return;
  7131. let startPos = value.length;
  7132. if (value.endsWith(afterTxt)) startPos = value.length - afterTxt.length;
  7133. else if (value.startsWith(beforeTxt)) startPos = beforeTxt.length;
  7134. else {
  7135. const beforeLastChar = beforeTxt[selectionStart - 1];
  7136. const newIndex = value.indexOf(beforeLastChar, selectionStart - 1);
  7137. if (newIndex !== -1) startPos = newIndex + 1;
  7138. }
  7139. input.value.setSelectionRange(startPos, startPos);
  7140. }
  7141. return [recordCursor, setCursor];
  7142. }
  7143. //#endregion
  7144. //#region ../../packages/hooks/use-ordered-children/index.ts
  7145. const getOrderedChildren = (vm, childComponentName, children) => {
  7146. return flattedChildren(vm.subTree).filter((n) => (0, vue.isVNode)(n) && n.type?.name === childComponentName && !!n.component).map((n) => n.component.uid).map((uid) => children[uid]).filter((p) => !!p);
  7147. };
  7148. const useOrderedChildren = (vm, childComponentName) => {
  7149. const children = (0, vue.shallowRef)({});
  7150. const orderedChildren = (0, vue.shallowRef)([]);
  7151. const nodesMap = /* @__PURE__ */ new WeakMap();
  7152. const addChild = (child) => {
  7153. children.value[child.uid] = child;
  7154. (0, vue.triggerRef)(children);
  7155. (0, vue.onMounted)(() => {
  7156. const childNode = child.getVnode().el;
  7157. const parentNode = childNode.parentNode;
  7158. if (!nodesMap.has(parentNode)) {
  7159. nodesMap.set(parentNode, []);
  7160. const originalFn = parentNode.insertBefore.bind(parentNode);
  7161. parentNode.insertBefore = (node, anchor) => {
  7162. if (nodesMap.get(parentNode).some((el) => node === el || anchor === el)) (0, vue.triggerRef)(children);
  7163. return originalFn(node, anchor);
  7164. };
  7165. }
  7166. nodesMap.get(parentNode).push(childNode);
  7167. });
  7168. };
  7169. const removeChild = (child) => {
  7170. delete children.value[child.uid];
  7171. (0, vue.triggerRef)(children);
  7172. const childNode = child.getVnode().el;
  7173. const parentNode = childNode.parentNode;
  7174. const childNodes = nodesMap.get(parentNode);
  7175. const index = childNodes.indexOf(childNode);
  7176. childNodes.splice(index, 1);
  7177. };
  7178. const sortChildren = () => {
  7179. orderedChildren.value = getOrderedChildren(vm, childComponentName, children.value);
  7180. };
  7181. const IsolatedRenderer = (props) => {
  7182. return props.render();
  7183. };
  7184. return {
  7185. children: orderedChildren,
  7186. addChild,
  7187. removeChild,
  7188. ChildrenSorter: (0, vue.defineComponent)({ setup(_, { slots }) {
  7189. return () => {
  7190. sortChildren();
  7191. return slots.default ? (0, vue.h)(IsolatedRenderer, { render: slots.default }) : null;
  7192. };
  7193. } })
  7194. };
  7195. };
  7196. //#endregion
  7197. //#region ../../packages/hooks/use-size/index.ts
  7198. const useSizeProp = buildProp({
  7199. type: String,
  7200. values: componentSizes,
  7201. required: false
  7202. });
  7203. const useSizeProps = { size: useSizeProp };
  7204. const SIZE_INJECTION_KEY = Symbol("size");
  7205. const useGlobalSize = () => {
  7206. const injectedSize = (0, vue.inject)(SIZE_INJECTION_KEY, {});
  7207. return (0, vue.computed)(() => {
  7208. return (0, vue.unref)(injectedSize.size) || "";
  7209. });
  7210. };
  7211. //#endregion
  7212. //#region ../../packages/hooks/use-focus-controller/index.ts
  7213. function useFocusController(target, { disabled, beforeFocus, afterFocus, beforeBlur, afterBlur } = {}) {
  7214. const { emit } = (0, vue.getCurrentInstance)();
  7215. const wrapperRef = (0, vue.shallowRef)();
  7216. const isFocused = (0, vue.ref)(false);
  7217. const handleFocus = (event) => {
  7218. const cancelFocus = isFunction$1(beforeFocus) ? beforeFocus(event) : false;
  7219. if ((0, vue.unref)(disabled) || isFocused.value || cancelFocus) return;
  7220. isFocused.value = true;
  7221. emit("focus", event);
  7222. afterFocus?.();
  7223. };
  7224. const handleBlur = (event) => {
  7225. const cancelBlur = isFunction$1(beforeBlur) ? beforeBlur(event) : false;
  7226. if ((0, vue.unref)(disabled) || event.relatedTarget && wrapperRef.value?.contains(event.relatedTarget) || cancelBlur) return;
  7227. isFocused.value = false;
  7228. emit("blur", event);
  7229. afterBlur?.();
  7230. };
  7231. const handleClick = (event) => {
  7232. if ((0, vue.unref)(disabled) || isFocusable(event.target) || wrapperRef.value?.contains(document.activeElement) && wrapperRef.value !== document.activeElement) return;
  7233. target.value?.focus();
  7234. };
  7235. (0, vue.watch)([wrapperRef, () => (0, vue.unref)(disabled)], ([el, disabled]) => {
  7236. if (!el) return;
  7237. if (disabled) el.removeAttribute("tabindex");
  7238. else el.setAttribute("tabindex", "-1");
  7239. });
  7240. useEventListener(wrapperRef, "focus", handleFocus, true);
  7241. useEventListener(wrapperRef, "blur", handleBlur, true);
  7242. useEventListener(wrapperRef, "click", handleClick, true);
  7243. return {
  7244. isFocused,
  7245. wrapperRef,
  7246. handleFocus,
  7247. handleBlur
  7248. };
  7249. }
  7250. //#endregion
  7251. //#region ../../packages/hooks/use-composition/index.ts
  7252. function useComposition({ afterComposition, emit }) {
  7253. const isComposing = (0, vue.ref)(false);
  7254. const handleCompositionStart = (event) => {
  7255. emit?.("compositionstart", event);
  7256. isComposing.value = true;
  7257. };
  7258. const handleCompositionUpdate = (event) => {
  7259. emit?.("compositionupdate", event);
  7260. isComposing.value = true;
  7261. };
  7262. const handleCompositionEnd = (event) => {
  7263. emit?.("compositionend", event);
  7264. if (isComposing.value) {
  7265. isComposing.value = false;
  7266. (0, vue.nextTick)(() => afterComposition(event));
  7267. }
  7268. };
  7269. const handleComposition = (event) => {
  7270. event.type === "compositionend" ? handleCompositionEnd(event) : handleCompositionUpdate(event);
  7271. };
  7272. return {
  7273. isComposing,
  7274. handleComposition,
  7275. handleCompositionStart,
  7276. handleCompositionUpdate,
  7277. handleCompositionEnd
  7278. };
  7279. }
  7280. //#endregion
  7281. //#region ../../packages/hooks/use-empty-values/index.ts
  7282. const emptyValuesContextKey = Symbol("emptyValuesContextKey");
  7283. const SCOPE = "use-empty-values";
  7284. const DEFAULT_EMPTY_VALUES = [
  7285. "",
  7286. void 0,
  7287. null
  7288. ];
  7289. const DEFAULT_VALUE_ON_CLEAR = void 0;
  7290. const useEmptyValuesProps = buildProps({
  7291. emptyValues: Array,
  7292. valueOnClear: {
  7293. type: definePropType([
  7294. String,
  7295. Number,
  7296. Boolean,
  7297. Function
  7298. ]),
  7299. default: void 0,
  7300. validator: (val) => {
  7301. val = isFunction$1(val) ? val() : val;
  7302. if (isArray$1(val)) return val.every((item) => !item);
  7303. return !val;
  7304. }
  7305. }
  7306. });
  7307. const useEmptyValues = (props, defaultValue) => {
  7308. const config = (0, vue.getCurrentInstance)() ? (0, vue.inject)(emptyValuesContextKey, (0, vue.ref)({})) : (0, vue.ref)({});
  7309. const emptyValues = (0, vue.computed)(() => props.emptyValues || config.value.emptyValues || DEFAULT_EMPTY_VALUES);
  7310. const valueOnClear = (0, vue.computed)(() => {
  7311. if (isFunction$1(props.valueOnClear)) return props.valueOnClear();
  7312. else if (props.valueOnClear !== void 0) return props.valueOnClear;
  7313. else if (isFunction$1(config.value.valueOnClear)) return config.value.valueOnClear();
  7314. else if (config.value.valueOnClear !== void 0) return config.value.valueOnClear;
  7315. return defaultValue !== void 0 ? defaultValue : void 0;
  7316. });
  7317. const isEmptyValue = (value) => {
  7318. let result = true;
  7319. if (isArray$1(value)) result = emptyValues.value.some((emptyValue) => {
  7320. return isEqual$1(value, emptyValue);
  7321. });
  7322. else result = emptyValues.value.includes(value);
  7323. return result;
  7324. };
  7325. if (!isEmptyValue(valueOnClear.value)) /* @__PURE__ */ debugWarn(SCOPE, "value-on-clear should be a value of empty-values");
  7326. return {
  7327. emptyValues,
  7328. valueOnClear,
  7329. isEmptyValue
  7330. };
  7331. };
  7332. //#endregion
  7333. //#region ../../packages/hooks/use-aria/index.ts
  7334. const ariaProps = buildProps({
  7335. ariaLabel: String,
  7336. ariaOrientation: {
  7337. type: String,
  7338. values: [
  7339. "horizontal",
  7340. "vertical",
  7341. "undefined"
  7342. ]
  7343. },
  7344. ariaControls: String
  7345. });
  7346. const useAriaProps = (arias) => {
  7347. return pick(ariaProps, arias);
  7348. };
  7349. //#endregion
  7350. //#region ../../packages/components/config-provider/src/constants.ts
  7351. const configProviderContextKey = Symbol();
  7352. //#endregion
  7353. //#region ../../packages/components/config-provider/src/hooks/use-global-config.ts
  7354. const globalConfig = (0, vue.ref)();
  7355. function useGlobalConfig(key, defaultValue = void 0) {
  7356. const config = (0, vue.getCurrentInstance)() ? (0, vue.inject)(configProviderContextKey, globalConfig) : globalConfig;
  7357. if (key) return (0, vue.computed)(() => config.value?.[key] ?? defaultValue);
  7358. else return config;
  7359. }
  7360. function useGlobalComponentSettings(block, sizeFallback) {
  7361. const config = useGlobalConfig();
  7362. const ns = useNamespace(block, (0, vue.computed)(() => config.value?.namespace || "el"));
  7363. const locale = useLocale((0, vue.computed)(() => config.value?.locale));
  7364. const zIndex = useZIndex((0, vue.computed)(() => {
  7365. const zIndex = config.value?.zIndex;
  7366. return isNil(zIndex) || Number.isNaN(zIndex) ? defaultInitialZIndex : zIndex;
  7367. }));
  7368. const size = (0, vue.computed)(() => (0, vue.unref)(sizeFallback) || config.value?.size || "");
  7369. provideGlobalConfig((0, vue.computed)(() => (0, vue.unref)(config) || {}));
  7370. return {
  7371. ns,
  7372. locale,
  7373. zIndex,
  7374. size
  7375. };
  7376. }
  7377. const provideGlobalConfig = (config, app, global = false) => {
  7378. const inSetup = !!(0, vue.getCurrentInstance)();
  7379. const oldConfig = inSetup ? useGlobalConfig() : void 0;
  7380. const provideFn = app?.provide ?? (inSetup ? vue.provide : void 0);
  7381. if (!provideFn) {
  7382. /* @__PURE__ */ debugWarn("provideGlobalConfig", "provideGlobalConfig() can only be used inside setup().");
  7383. return;
  7384. }
  7385. const context = (0, vue.computed)(() => {
  7386. const cfg = (0, vue.unref)(config);
  7387. if (!oldConfig?.value) return cfg;
  7388. return mergeConfig(oldConfig.value, cfg);
  7389. });
  7390. provideFn(configProviderContextKey, context);
  7391. provideFn(localeContextKey, (0, vue.computed)(() => context.value.locale));
  7392. provideFn(namespaceContextKey, (0, vue.computed)(() => context.value.namespace));
  7393. provideFn(zIndexContextKey, (0, vue.computed)(() => context.value.zIndex));
  7394. provideFn(SIZE_INJECTION_KEY, { size: (0, vue.computed)(() => context.value.size || "") });
  7395. provideFn(emptyValuesContextKey, (0, vue.computed)(() => ({
  7396. emptyValues: context.value.emptyValues,
  7397. valueOnClear: context.value.valueOnClear
  7398. })));
  7399. if (global || !globalConfig.value) globalConfig.value = context.value;
  7400. return context;
  7401. };
  7402. const mergeConfig = (a, b) => {
  7403. const keys = [...new Set([...keysOf(a), ...keysOf(b)])];
  7404. const obj = {};
  7405. for (const key of keys) obj[key] = b[key] !== void 0 ? b[key] : a[key];
  7406. return obj;
  7407. };
  7408. //#endregion
  7409. //#region ../../packages/components/config-provider/src/config-provider-props.ts
  7410. const configProviderProps = buildProps({
  7411. a11y: {
  7412. type: Boolean,
  7413. default: true
  7414. },
  7415. locale: { type: definePropType(Object) },
  7416. size: useSizeProp,
  7417. button: { type: definePropType(Object) },
  7418. card: { type: definePropType(Object) },
  7419. dialog: { type: definePropType(Object) },
  7420. link: { type: definePropType(Object) },
  7421. experimentalFeatures: { type: definePropType(Object) },
  7422. keyboardNavigation: {
  7423. type: Boolean,
  7424. default: true
  7425. },
  7426. message: { type: definePropType(Object) },
  7427. zIndex: Number,
  7428. namespace: {
  7429. type: String,
  7430. default: "el"
  7431. },
  7432. table: { type: definePropType(Object) },
  7433. ...useEmptyValuesProps
  7434. });
  7435. //#endregion
  7436. //#region ../../packages/components/config-provider/src/config-provider.ts
  7437. const messageConfig = { placement: "top" };
  7438. const ConfigProvider = (0, vue.defineComponent)({
  7439. name: "ElConfigProvider",
  7440. props: configProviderProps,
  7441. setup(props, { slots }) {
  7442. const config = provideGlobalConfig(props);
  7443. (0, vue.watch)(() => props.message, (val) => {
  7444. Object.assign(messageConfig, config?.value?.message ?? {}, val ?? {});
  7445. }, {
  7446. immediate: true,
  7447. deep: true
  7448. });
  7449. return () => (0, vue.renderSlot)(slots, "default", { config: config?.value });
  7450. }
  7451. });
  7452. //#endregion
  7453. //#region ../../packages/components/config-provider/index.ts
  7454. const ElConfigProvider = withInstall(ConfigProvider);
  7455. //#endregion
  7456. //#region ../../packages/element-plus/version.ts
  7457. const version$1 = "2.14.2";
  7458. //#endregion
  7459. //#region ../../packages/element-plus/make-installer.ts
  7460. const makeInstaller = (components = []) => {
  7461. const install = (app, options) => {
  7462. if (app[INSTALLED_KEY]) return;
  7463. app[INSTALLED_KEY] = true;
  7464. components.forEach((c) => app.use(c));
  7465. if (options) provideGlobalConfig(options, app, true);
  7466. };
  7467. return {
  7468. version: version$1,
  7469. install
  7470. };
  7471. };
  7472. //#endregion
  7473. //#region ../../packages/components/affix/src/affix.ts
  7474. const affixProps = buildProps({
  7475. zIndex: {
  7476. type: definePropType([Number, String]),
  7477. default: 100
  7478. },
  7479. target: {
  7480. type: String,
  7481. default: ""
  7482. },
  7483. offset: {
  7484. type: Number,
  7485. default: 0
  7486. },
  7487. position: {
  7488. type: String,
  7489. values: ["top", "bottom"],
  7490. default: "top"
  7491. },
  7492. teleported: Boolean,
  7493. appendTo: {
  7494. type: definePropType([String, Object]),
  7495. default: "body"
  7496. }
  7497. });
  7498. const affixEmits = {
  7499. scroll: ({ scrollTop, fixed }) => isNumber(scrollTop) && isBoolean(fixed),
  7500. [CHANGE_EVENT]: (fixed) => isBoolean(fixed)
  7501. };
  7502. //#endregion
  7503. //#region ../../packages/components/affix/src/affix.vue?vue&type=script&setup=true&lang.ts
  7504. const COMPONENT_NAME$22 = "ElAffix";
  7505. var affix_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  7506. name: COMPONENT_NAME$22,
  7507. __name: "affix",
  7508. props: affixProps,
  7509. emits: affixEmits,
  7510. setup(__props, { expose: __expose, emit: __emit }) {
  7511. const props = __props;
  7512. const emit = __emit;
  7513. const ns = useNamespace("affix");
  7514. const target = (0, vue.shallowRef)();
  7515. const root = (0, vue.shallowRef)();
  7516. const scrollContainer = (0, vue.shallowRef)();
  7517. const { height: windowHeight } = useWindowSize();
  7518. const { height: rootHeight, width: rootWidth, top: rootTop, bottom: rootBottom, left: rootLeft, update: updateRoot } = useElementBounding(root, { windowScroll: false });
  7519. const targetRect = useElementBounding(target);
  7520. const fixed = (0, vue.ref)(false);
  7521. const scrollTop = (0, vue.ref)(0);
  7522. const transform = (0, vue.ref)(0);
  7523. const teleportDisabled = (0, vue.computed)(() => {
  7524. return !props.teleported || !fixed.value;
  7525. });
  7526. const rootStyle = (0, vue.computed)(() => {
  7527. return {
  7528. display: "flow-root",
  7529. height: fixed.value ? `${rootHeight.value}px` : "",
  7530. width: fixed.value ? `${rootWidth.value}px` : ""
  7531. };
  7532. });
  7533. const affixStyle = (0, vue.computed)(() => {
  7534. if (!fixed.value) return {};
  7535. const offset = addUnit(props.offset);
  7536. return {
  7537. height: `${rootHeight.value}px`,
  7538. width: `${rootWidth.value}px`,
  7539. top: props.position === "top" ? offset : "",
  7540. bottom: props.position === "bottom" ? offset : "",
  7541. left: props.teleported ? `${rootLeft.value}px` : "",
  7542. transform: transform.value ? `translateY(${transform.value}px)` : "",
  7543. zIndex: props.zIndex
  7544. };
  7545. });
  7546. const update = () => {
  7547. if (!scrollContainer.value) return;
  7548. scrollTop.value = scrollContainer.value instanceof Window ? document.documentElement.scrollTop : scrollContainer.value.scrollTop || 0;
  7549. const { position, target, offset } = props;
  7550. const rootHeightOffset = offset + rootHeight.value;
  7551. if (position === "top") if (target) {
  7552. const difference = targetRect.bottom.value - rootHeightOffset;
  7553. fixed.value = offset > rootTop.value && targetRect.bottom.value > 0;
  7554. transform.value = difference < 0 ? difference : 0;
  7555. } else fixed.value = offset > rootTop.value;
  7556. else if (target) {
  7557. const difference = windowHeight.value - targetRect.top.value - rootHeightOffset;
  7558. fixed.value = windowHeight.value - offset < rootBottom.value && windowHeight.value > targetRect.top.value;
  7559. transform.value = difference < 0 ? -difference : 0;
  7560. } else fixed.value = windowHeight.value - offset < rootBottom.value;
  7561. };
  7562. const updateRootRect = async () => {
  7563. if (!fixed.value) {
  7564. updateRoot();
  7565. return;
  7566. }
  7567. fixed.value = false;
  7568. await (0, vue.nextTick)();
  7569. updateRoot();
  7570. fixed.value = true;
  7571. };
  7572. const handleScroll = async () => {
  7573. updateRoot();
  7574. await (0, vue.nextTick)();
  7575. emit("scroll", {
  7576. scrollTop: scrollTop.value,
  7577. fixed: fixed.value
  7578. });
  7579. };
  7580. (0, vue.watch)(fixed, (val) => emit(CHANGE_EVENT, val));
  7581. (0, vue.onMounted)(() => {
  7582. if (props.target) {
  7583. target.value = document.querySelector(props.target) ?? void 0;
  7584. if (!target.value) throwError(COMPONENT_NAME$22, `Target does not exist: ${props.target}`);
  7585. } else target.value = document.documentElement;
  7586. scrollContainer.value = getScrollContainer(root.value, true);
  7587. updateRoot();
  7588. });
  7589. (0, vue.onActivated)(() => {
  7590. (0, vue.nextTick)(updateRootRect);
  7591. });
  7592. (0, vue.onDeactivated)(() => {
  7593. fixed.value = false;
  7594. });
  7595. useEventListener(scrollContainer, "scroll", handleScroll);
  7596. (0, vue.watchEffect)(update);
  7597. __expose({
  7598. update,
  7599. updateRoot: updateRootRect
  7600. });
  7601. return (_ctx, _cache) => {
  7602. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  7603. ref_key: "root",
  7604. ref: root,
  7605. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  7606. style: (0, vue.normalizeStyle)(rootStyle.value)
  7607. }, [((0, vue.openBlock)(), (0, vue.createBlock)(vue.Teleport, {
  7608. disabled: teleportDisabled.value,
  7609. to: __props.appendTo
  7610. }, [(0, vue.createElementVNode)("div", {
  7611. class: (0, vue.normalizeClass)({ [(0, vue.unref)(ns).m("fixed")]: fixed.value }),
  7612. style: (0, vue.normalizeStyle)(affixStyle.value)
  7613. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6)], 8, ["disabled", "to"]))], 6);
  7614. };
  7615. }
  7616. });
  7617. //#endregion
  7618. //#region ../../packages/components/affix/src/affix.vue
  7619. var affix_default = affix_vue_vue_type_script_setup_true_lang_default;
  7620. //#endregion
  7621. //#region ../../packages/components/affix/index.ts
  7622. const ElAffix = withInstall(affix_default);
  7623. //#endregion
  7624. //#region ../../packages/components/alert/src/alert.ts
  7625. const alertEffects = ["light", "dark"];
  7626. const alertProps = buildProps({
  7627. title: {
  7628. type: String,
  7629. default: ""
  7630. },
  7631. description: {
  7632. type: String,
  7633. default: ""
  7634. },
  7635. type: {
  7636. type: String,
  7637. values: keysOf(TypeComponentsMap),
  7638. default: "info"
  7639. },
  7640. closable: {
  7641. type: Boolean,
  7642. default: true
  7643. },
  7644. closeText: {
  7645. type: String,
  7646. default: ""
  7647. },
  7648. showIcon: Boolean,
  7649. center: Boolean,
  7650. effect: {
  7651. type: String,
  7652. values: alertEffects,
  7653. default: "light"
  7654. }
  7655. });
  7656. const alertEmits = { close: (evt) => evt instanceof MouseEvent };
  7657. //#endregion
  7658. //#region ../../packages/components/icon/src/icon.ts
  7659. const iconProps = buildProps({
  7660. size: { type: definePropType([Number, String]) },
  7661. color: { type: String }
  7662. });
  7663. //#endregion
  7664. //#region ../../packages/components/icon/src/icon.vue?vue&type=script&setup=true&lang.ts
  7665. var icon_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  7666. name: "ElIcon",
  7667. inheritAttrs: false,
  7668. __name: "icon",
  7669. props: iconProps,
  7670. setup(__props) {
  7671. const props = __props;
  7672. const ns = useNamespace("icon");
  7673. const style = (0, vue.computed)(() => {
  7674. const { size, color } = props;
  7675. const fontSize = addUnit(size);
  7676. if (!fontSize && !color) return {};
  7677. return {
  7678. fontSize,
  7679. "--color": color
  7680. };
  7681. });
  7682. return (_ctx, _cache) => {
  7683. return (0, vue.openBlock)(), (0, vue.createElementBlock)("i", (0, vue.mergeProps)({
  7684. class: (0, vue.unref)(ns).b(),
  7685. style: style.value
  7686. }, _ctx.$attrs), [(0, vue.renderSlot)(_ctx.$slots, "default")], 16);
  7687. };
  7688. }
  7689. });
  7690. //#endregion
  7691. //#region ../../packages/components/icon/src/icon.vue
  7692. var icon_default = icon_vue_vue_type_script_setup_true_lang_default;
  7693. //#endregion
  7694. //#region ../../packages/components/icon/index.ts
  7695. const ElIcon = withInstall(icon_default);
  7696. //#endregion
  7697. //#region ../../packages/components/alert/src/alert.vue?vue&type=script&setup=true&lang.ts
  7698. var alert_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  7699. name: "ElAlert",
  7700. __name: "alert",
  7701. props: alertProps,
  7702. emits: alertEmits,
  7703. setup(__props, { emit: __emit }) {
  7704. const { Close } = TypeComponents;
  7705. const props = __props;
  7706. const emit = __emit;
  7707. const slots = (0, vue.useSlots)();
  7708. const ns = useNamespace("alert");
  7709. const visible = (0, vue.ref)(true);
  7710. const iconComponent = (0, vue.computed)(() => TypeComponentsMap[props.type]);
  7711. const hasDesc = (0, vue.computed)(() => {
  7712. if (props.description) return true;
  7713. const slotContent = slots.default?.();
  7714. if (!slotContent) return false;
  7715. return flattedChildren(slotContent).some((child) => !isComment(child));
  7716. });
  7717. const close = (evt) => {
  7718. visible.value = false;
  7719. emit("close", evt);
  7720. };
  7721. return (_ctx, _cache) => {
  7722. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
  7723. name: (0, vue.unref)(ns).b("fade"),
  7724. persisted: ""
  7725. }, {
  7726. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
  7727. class: (0, vue.normalizeClass)([
  7728. (0, vue.unref)(ns).b(),
  7729. (0, vue.unref)(ns).m(__props.type),
  7730. (0, vue.unref)(ns).is("center", __props.center),
  7731. (0, vue.unref)(ns).is(__props.effect)
  7732. ]),
  7733. role: "alert"
  7734. }, [__props.showIcon && (_ctx.$slots.icon || iconComponent.value) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  7735. key: 0,
  7736. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), (0, vue.unref)(ns).is("big", hasDesc.value)])
  7737. }, {
  7738. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(iconComponent.value)))])]),
  7739. _: 3
  7740. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [
  7741. __props.title || _ctx.$slots.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  7742. key: 0,
  7743. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("title"), { "with-description": hasDesc.value }])
  7744. }, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  7745. hasDesc.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", {
  7746. key: 1,
  7747. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("description"))
  7748. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.description), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  7749. __props.closable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [__props.closeText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  7750. key: 0,
  7751. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("close-btn"), (0, vue.unref)(ns).is("customed")]),
  7752. onClick: close
  7753. }, (0, vue.toDisplayString)(__props.closeText), 3)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  7754. key: 1,
  7755. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close-btn")),
  7756. onClick: close
  7757. }, {
  7758. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(Close))]),
  7759. _: 1
  7760. }, 8, ["class"]))], 64)) : (0, vue.createCommentVNode)("v-if", true)
  7761. ], 2)], 2), [[vue.vShow, visible.value]])]),
  7762. _: 3
  7763. }, 8, ["name"]);
  7764. };
  7765. }
  7766. });
  7767. //#endregion
  7768. //#region ../../packages/components/alert/src/alert.vue
  7769. var alert_default = alert_vue_vue_type_script_setup_true_lang_default;
  7770. //#endregion
  7771. //#region ../../packages/components/alert/index.ts
  7772. const ElAlert = withInstall(alert_default);
  7773. //#endregion
  7774. //#region ../../packages/components/popper/src/popper.ts
  7775. const Effect = {
  7776. LIGHT: "light",
  7777. DARK: "dark"
  7778. };
  7779. const roleTypes = [
  7780. "dialog",
  7781. "grid",
  7782. "group",
  7783. "listbox",
  7784. "menu",
  7785. "navigation",
  7786. "tooltip",
  7787. "tree"
  7788. ];
  7789. const popperProps = buildProps({ role: {
  7790. type: String,
  7791. values: roleTypes,
  7792. default: "tooltip"
  7793. } });
  7794. const usePopperProps = popperProps;
  7795. //#endregion
  7796. //#region ../../packages/components/popper/src/constants.ts
  7797. const POPPER_INJECTION_KEY = Symbol("popper");
  7798. const POPPER_CONTENT_INJECTION_KEY = Symbol("popperContent");
  7799. //#endregion
  7800. //#region ../../packages/components/popper/src/popper.vue?vue&type=script&setup=true&lang.ts
  7801. var popper_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  7802. name: "ElPopper",
  7803. inheritAttrs: false,
  7804. __name: "popper",
  7805. props: popperProps,
  7806. setup(__props, { expose: __expose }) {
  7807. const props = __props;
  7808. const popperProvides = {
  7809. triggerRef: (0, vue.ref)(),
  7810. popperInstanceRef: (0, vue.ref)(),
  7811. contentRef: (0, vue.ref)(),
  7812. referenceRef: (0, vue.ref)(),
  7813. role: (0, vue.computed)(() => props.role)
  7814. };
  7815. __expose(popperProvides);
  7816. (0, vue.provide)(POPPER_INJECTION_KEY, popperProvides);
  7817. return (_ctx, _cache) => {
  7818. return (0, vue.renderSlot)(_ctx.$slots, "default");
  7819. };
  7820. }
  7821. });
  7822. //#endregion
  7823. //#region ../../packages/components/popper/src/popper.vue
  7824. var popper_default = popper_vue_vue_type_script_setup_true_lang_default;
  7825. //#endregion
  7826. //#region ../../packages/components/popper/src/arrow.vue?vue&type=script&setup=true&lang.ts
  7827. var arrow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  7828. name: "ElPopperArrow",
  7829. inheritAttrs: false,
  7830. __name: "arrow",
  7831. setup(__props, { expose: __expose }) {
  7832. const ns = useNamespace("popper");
  7833. const { arrowRef, arrowStyle } = (0, vue.inject)(POPPER_CONTENT_INJECTION_KEY, void 0);
  7834. (0, vue.onBeforeUnmount)(() => {
  7835. arrowRef.value = void 0;
  7836. });
  7837. __expose({ arrowRef });
  7838. return (_ctx, _cache) => {
  7839. return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  7840. ref_key: "arrowRef",
  7841. ref: arrowRef,
  7842. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("arrow")),
  7843. style: (0, vue.normalizeStyle)((0, vue.unref)(arrowStyle)),
  7844. "data-popper-arrow": ""
  7845. }, null, 6);
  7846. };
  7847. }
  7848. });
  7849. //#endregion
  7850. //#region ../../packages/components/popper/src/arrow.vue
  7851. var arrow_default = arrow_vue_vue_type_script_setup_true_lang_default;
  7852. //#endregion
  7853. //#region ../../packages/components/popper/src/trigger.ts
  7854. const popperTriggerProps = buildProps({
  7855. virtualRef: { type: definePropType(Object) },
  7856. virtualTriggering: Boolean,
  7857. onMouseenter: { type: definePropType(Function) },
  7858. onMouseleave: { type: definePropType(Function) },
  7859. onClick: { type: definePropType(Function) },
  7860. onKeydown: { type: definePropType(Function) },
  7861. onFocus: { type: definePropType(Function) },
  7862. onBlur: { type: definePropType(Function) },
  7863. onContextmenu: { type: definePropType(Function) },
  7864. id: String,
  7865. open: Boolean
  7866. });
  7867. const usePopperTriggerProps = popperTriggerProps;
  7868. //#endregion
  7869. //#region ../../packages/components/slot/src/only-child.tsx
  7870. const NAME = "ElOnlyChild";
  7871. const OnlyChild = /* @__PURE__ */ (0, vue.defineComponent)({
  7872. name: NAME,
  7873. setup(_, { slots, attrs }) {
  7874. const forwardRefDirective = useForwardRefDirective((0, vue.inject)(FORWARD_REF_INJECTION_KEY)?.setForwardRef ?? NOOP);
  7875. return () => {
  7876. const defaultSlot = slots.default?.(attrs);
  7877. if (!defaultSlot) return null;
  7878. const [firstLegitNode, length] = findFirstLegitChild(defaultSlot);
  7879. if (!firstLegitNode) {
  7880. /* @__PURE__ */ debugWarn(NAME, "no valid child node found");
  7881. return null;
  7882. }
  7883. if (length > 1) /* @__PURE__ */ debugWarn(NAME, "requires exact only one valid child.");
  7884. return (0, vue.withDirectives)((0, vue.cloneVNode)(firstLegitNode, attrs), [[forwardRefDirective]]);
  7885. };
  7886. }
  7887. });
  7888. function findFirstLegitChild(node) {
  7889. if (!node) return [null, 0];
  7890. const children = node;
  7891. const len = children.filter((c) => c.type !== vue.Comment).length;
  7892. for (const child of children) {
  7893. if (isObject$1(child)) switch (child.type) {
  7894. case vue.Comment: continue;
  7895. case vue.Text:
  7896. case "svg": return [wrapTextContent(child), len];
  7897. case vue.Fragment: return findFirstLegitChild(child.children);
  7898. default: return [child, len];
  7899. }
  7900. return [wrapTextContent(child), len];
  7901. }
  7902. return [null, 0];
  7903. }
  7904. function wrapTextContent(s) {
  7905. return (0, vue.createVNode)("span", { "class": useNamespace("only-child").e("content") }, [s]);
  7906. }
  7907. //#endregion
  7908. //#region ../../packages/components/popper/src/trigger.vue?vue&type=script&setup=true&lang.ts
  7909. var trigger_vue_vue_type_script_setup_true_lang_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
  7910. name: "ElPopperTrigger",
  7911. inheritAttrs: false,
  7912. __name: "trigger",
  7913. props: popperTriggerProps,
  7914. setup(__props, { expose: __expose }) {
  7915. const props = __props;
  7916. const { role, triggerRef } = (0, vue.inject)(POPPER_INJECTION_KEY, void 0);
  7917. useForwardRef(triggerRef);
  7918. const ariaControls = (0, vue.computed)(() => {
  7919. return ariaHaspopup.value ? props.id : void 0;
  7920. });
  7921. const ariaDescribedby = (0, vue.computed)(() => {
  7922. if (role && role.value === "tooltip") return props.open && props.id ? props.id : void 0;
  7923. });
  7924. const ariaHaspopup = (0, vue.computed)(() => {
  7925. if (role && role.value !== "tooltip") return role.value;
  7926. });
  7927. const ariaExpanded = (0, vue.computed)(() => {
  7928. return ariaHaspopup.value ? `${props.open}` : void 0;
  7929. });
  7930. let virtualTriggerAriaStopWatch = void 0;
  7931. const TRIGGER_ELE_EVENTS = [
  7932. "onMouseenter",
  7933. "onMouseleave",
  7934. "onClick",
  7935. "onKeydown",
  7936. "onFocus",
  7937. "onBlur",
  7938. "onContextmenu"
  7939. ];
  7940. (0, vue.onMounted)(() => {
  7941. (0, vue.watch)(() => props.virtualRef, (virtualEl) => {
  7942. if (virtualEl) triggerRef.value = unrefElement(virtualEl);
  7943. }, { immediate: true });
  7944. (0, vue.watch)(triggerRef, (el, prevEl) => {
  7945. virtualTriggerAriaStopWatch?.();
  7946. virtualTriggerAriaStopWatch = void 0;
  7947. if (isElement$1(prevEl)) TRIGGER_ELE_EVENTS.forEach((eventName) => {
  7948. const handler = props[eventName];
  7949. if (handler) prevEl.removeEventListener(eventName.slice(2).toLowerCase(), handler, ["onFocus", "onBlur"].includes(eventName));
  7950. });
  7951. if (isElement$1(el)) {
  7952. TRIGGER_ELE_EVENTS.forEach((eventName) => {
  7953. const handler = props[eventName];
  7954. if (handler) el.addEventListener(eventName.slice(2).toLowerCase(), handler, ["onFocus", "onBlur"].includes(eventName));
  7955. });
  7956. if (isFocusable(el)) virtualTriggerAriaStopWatch = (0, vue.watch)([
  7957. ariaControls,
  7958. ariaDescribedby,
  7959. ariaHaspopup,
  7960. ariaExpanded
  7961. ], (watches) => {
  7962. [
  7963. "aria-controls",
  7964. "aria-describedby",
  7965. "aria-haspopup",
  7966. "aria-expanded"
  7967. ].forEach((key, idx) => {
  7968. isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]);
  7969. });
  7970. }, { immediate: true });
  7971. }
  7972. if (isElement$1(prevEl) && isFocusable(prevEl)) [
  7973. "aria-controls",
  7974. "aria-describedby",
  7975. "aria-haspopup",
  7976. "aria-expanded"
  7977. ].forEach((key) => prevEl.removeAttribute(key));
  7978. }, { immediate: true });
  7979. });
  7980. (0, vue.onBeforeUnmount)(() => {
  7981. virtualTriggerAriaStopWatch?.();
  7982. virtualTriggerAriaStopWatch = void 0;
  7983. if (triggerRef.value && isElement$1(triggerRef.value)) {
  7984. const el = triggerRef.value;
  7985. TRIGGER_ELE_EVENTS.forEach((eventName) => {
  7986. const handler = props[eventName];
  7987. if (handler) el.removeEventListener(eventName.slice(2).toLowerCase(), handler, ["onFocus", "onBlur"].includes(eventName));
  7988. });
  7989. triggerRef.value = void 0;
  7990. }
  7991. });
  7992. __expose({ triggerRef });
  7993. return (_ctx, _cache) => {
  7994. return !__props.virtualTriggering ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(OnlyChild), (0, vue.mergeProps)({ key: 0 }, _ctx.$attrs, {
  7995. "aria-controls": ariaControls.value,
  7996. "aria-describedby": ariaDescribedby.value,
  7997. "aria-expanded": ariaExpanded.value,
  7998. "aria-haspopup": ariaHaspopup.value
  7999. }), {
  8000. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  8001. _: 3
  8002. }, 16, [
  8003. "aria-controls",
  8004. "aria-describedby",
  8005. "aria-expanded",
  8006. "aria-haspopup"
  8007. ])) : (0, vue.createCommentVNode)("v-if", true);
  8008. };
  8009. }
  8010. });
  8011. //#endregion
  8012. //#region ../../packages/components/popper/src/trigger.vue
  8013. var trigger_default = trigger_vue_vue_type_script_setup_true_lang_default$1;
  8014. //#endregion
  8015. //#region ../../packages/components/popper/src/arrow.ts
  8016. const popperArrowProps = buildProps({ arrowOffset: {
  8017. type: Number,
  8018. default: 5
  8019. } });
  8020. const popperArrowPropsDefaults = { arrowOffset: 5 };
  8021. const usePopperArrowProps = popperArrowProps;
  8022. //#endregion
  8023. //#region ../../packages/components/popper/src/content.ts
  8024. const POSITIONING_STRATEGIES = ["fixed", "absolute"];
  8025. const popperCoreConfigProps = buildProps({
  8026. boundariesPadding: {
  8027. type: Number,
  8028. default: 0
  8029. },
  8030. fallbackPlacements: {
  8031. type: definePropType(Array),
  8032. default: void 0
  8033. },
  8034. gpuAcceleration: {
  8035. type: Boolean,
  8036. default: true
  8037. },
  8038. offset: {
  8039. type: Number,
  8040. default: 12
  8041. },
  8042. placement: {
  8043. type: String,
  8044. values: Ee,
  8045. default: "bottom"
  8046. },
  8047. popperOptions: {
  8048. type: definePropType(Object),
  8049. default: () => ({})
  8050. },
  8051. strategy: {
  8052. type: String,
  8053. values: POSITIONING_STRATEGIES,
  8054. default: "absolute"
  8055. }
  8056. });
  8057. const popperContentProps = buildProps({
  8058. ...popperCoreConfigProps,
  8059. ...popperArrowProps,
  8060. id: String,
  8061. style: {
  8062. type: definePropType([
  8063. String,
  8064. Array,
  8065. Object,
  8066. Boolean
  8067. ]),
  8068. default: void 0
  8069. },
  8070. className: { type: definePropType([
  8071. String,
  8072. Array,
  8073. Object
  8074. ]) },
  8075. effect: {
  8076. type: definePropType(String),
  8077. default: "dark"
  8078. },
  8079. visible: Boolean,
  8080. enterable: {
  8081. type: Boolean,
  8082. default: true
  8083. },
  8084. pure: Boolean,
  8085. focusOnShow: Boolean,
  8086. trapping: Boolean,
  8087. popperClass: { type: definePropType([
  8088. String,
  8089. Array,
  8090. Object
  8091. ]) },
  8092. popperStyle: {
  8093. type: definePropType([
  8094. String,
  8095. Array,
  8096. Object,
  8097. Boolean
  8098. ]),
  8099. default: void 0
  8100. },
  8101. referenceEl: { type: definePropType(Object) },
  8102. triggerTargetEl: { type: definePropType(Object) },
  8103. stopPopperMouseEvent: {
  8104. type: Boolean,
  8105. default: true
  8106. },
  8107. virtualTriggering: Boolean,
  8108. zIndex: Number,
  8109. ...useAriaProps(["ariaLabel"]),
  8110. loop: Boolean
  8111. });
  8112. const popperCoreConfigPropsDefaults = {
  8113. boundariesPadding: 0,
  8114. gpuAcceleration: true,
  8115. offset: 12,
  8116. placement: "bottom",
  8117. popperOptions: () => ({}),
  8118. strategy: "absolute"
  8119. };
  8120. const popperContentPropsDefaults = {
  8121. ...popperCoreConfigPropsDefaults,
  8122. ...popperArrowPropsDefaults,
  8123. effect: "dark",
  8124. enterable: true,
  8125. stopPopperMouseEvent: true,
  8126. visible: false,
  8127. pure: false,
  8128. focusOnShow: false,
  8129. trapping: false,
  8130. virtualTriggering: false,
  8131. loop: false,
  8132. style: void 0,
  8133. popperStyle: void 0
  8134. };
  8135. const popperContentEmits = {
  8136. mouseenter: (evt) => evt instanceof MouseEvent,
  8137. mouseleave: (evt) => evt instanceof MouseEvent,
  8138. focus: () => true,
  8139. blur: () => true,
  8140. close: () => true
  8141. };
  8142. const usePopperCoreConfigProps = popperCoreConfigProps;
  8143. const usePopperContentProps = popperContentProps;
  8144. const usePopperContentEmits = popperContentEmits;
  8145. //#endregion
  8146. //#region ../../packages/components/focus-trap/src/tokens.ts
  8147. const FOCUS_AFTER_TRAPPED = "focus-trap.focus-after-trapped";
  8148. const FOCUS_AFTER_RELEASED = "focus-trap.focus-after-released";
  8149. const FOCUSOUT_PREVENTED = "focus-trap.focusout-prevented";
  8150. const FOCUS_AFTER_TRAPPED_OPTS = {
  8151. cancelable: true,
  8152. bubbles: false
  8153. };
  8154. const FOCUSOUT_PREVENTED_OPTS = {
  8155. cancelable: true,
  8156. bubbles: false
  8157. };
  8158. const ON_TRAP_FOCUS_EVT = "focusAfterTrapped";
  8159. const ON_RELEASE_FOCUS_EVT = "focusAfterReleased";
  8160. const FOCUS_TRAP_INJECTION_KEY = Symbol("elFocusTrap");
  8161. //#endregion
  8162. //#region ../../packages/components/focus-trap/src/utils.ts
  8163. const focusReason = (0, vue.ref)();
  8164. const lastUserFocusTimestamp = (0, vue.ref)(0);
  8165. const lastAutomatedFocusTimestamp = (0, vue.ref)(0);
  8166. let focusReasonUserCount = 0;
  8167. const obtainAllFocusableElements = (element) => {
  8168. const nodes = [];
  8169. const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, { acceptNode: (node) => {
  8170. const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
  8171. if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;
  8172. return node.tabIndex >= 0 || node === document.activeElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
  8173. } });
  8174. while (walker.nextNode()) nodes.push(walker.currentNode);
  8175. return nodes;
  8176. };
  8177. const getVisibleElement = (elements, container) => {
  8178. for (const element of elements) if (!isHidden(element, container)) return element;
  8179. };
  8180. const isHidden = (element, container) => {
  8181. if (getComputedStyle(element).visibility === "hidden") return true;
  8182. while (element) {
  8183. if (container && element === container) return false;
  8184. if (getComputedStyle(element).display === "none") return true;
  8185. element = element.parentElement;
  8186. }
  8187. return false;
  8188. };
  8189. const getEdges = (container) => {
  8190. const focusable = obtainAllFocusableElements(container);
  8191. return [getVisibleElement(focusable, container), getVisibleElement(focusable.reverse(), container)];
  8192. };
  8193. const isSelectable = (element) => {
  8194. return element instanceof HTMLInputElement && "select" in element;
  8195. };
  8196. const tryFocus = (element, shouldSelect) => {
  8197. if (element) {
  8198. const prevFocusedElement = document.activeElement;
  8199. focusElement(element, { preventScroll: true });
  8200. lastAutomatedFocusTimestamp.value = window.performance.now();
  8201. if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) element.select();
  8202. }
  8203. };
  8204. function removeFromStack(list, item) {
  8205. const copy = [...list];
  8206. const idx = list.indexOf(item);
  8207. if (idx !== -1) copy.splice(idx, 1);
  8208. return copy;
  8209. }
  8210. const createFocusableStack = () => {
  8211. let stack = [];
  8212. const push = (layer) => {
  8213. const currentLayer = stack[0];
  8214. if (currentLayer && layer !== currentLayer) currentLayer.pause();
  8215. stack = removeFromStack(stack, layer);
  8216. stack.unshift(layer);
  8217. };
  8218. const remove = (layer) => {
  8219. stack = removeFromStack(stack, layer);
  8220. stack[0]?.resume?.();
  8221. };
  8222. return {
  8223. push,
  8224. remove
  8225. };
  8226. };
  8227. const focusFirstDescendant = (elements, shouldSelect = false) => {
  8228. const prevFocusedElement = document.activeElement;
  8229. for (const element of elements) {
  8230. tryFocus(element, shouldSelect);
  8231. if (document.activeElement !== prevFocusedElement) return;
  8232. }
  8233. };
  8234. const focusableStack = createFocusableStack();
  8235. const isFocusCausedByUserEvent = () => {
  8236. return lastUserFocusTimestamp.value > lastAutomatedFocusTimestamp.value;
  8237. };
  8238. const notifyFocusReasonPointer = () => {
  8239. focusReason.value = "pointer";
  8240. lastUserFocusTimestamp.value = window.performance.now();
  8241. };
  8242. const notifyFocusReasonKeydown = () => {
  8243. focusReason.value = "keyboard";
  8244. lastUserFocusTimestamp.value = window.performance.now();
  8245. };
  8246. const useFocusReason = () => {
  8247. (0, vue.onMounted)(() => {
  8248. if (focusReasonUserCount === 0) {
  8249. document.addEventListener("mousedown", notifyFocusReasonPointer);
  8250. document.addEventListener("touchstart", notifyFocusReasonPointer);
  8251. document.addEventListener("keydown", notifyFocusReasonKeydown);
  8252. }
  8253. focusReasonUserCount++;
  8254. });
  8255. (0, vue.onBeforeUnmount)(() => {
  8256. focusReasonUserCount--;
  8257. if (focusReasonUserCount <= 0) {
  8258. document.removeEventListener("mousedown", notifyFocusReasonPointer);
  8259. document.removeEventListener("touchstart", notifyFocusReasonPointer);
  8260. document.removeEventListener("keydown", notifyFocusReasonKeydown);
  8261. }
  8262. });
  8263. return {
  8264. focusReason,
  8265. lastUserFocusTimestamp,
  8266. lastAutomatedFocusTimestamp
  8267. };
  8268. };
  8269. const createFocusOutPreventedEvent = (detail) => {
  8270. return new CustomEvent(FOCUSOUT_PREVENTED, {
  8271. ...FOCUSOUT_PREVENTED_OPTS,
  8272. detail
  8273. });
  8274. };
  8275. //#endregion
  8276. //#region ../../packages/components/focus-trap/src/focus-trap.vue?vue&type=script&lang.ts
  8277. var focus_trap_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  8278. name: "ElFocusTrap",
  8279. inheritAttrs: false,
  8280. props: {
  8281. loop: Boolean,
  8282. trapped: Boolean,
  8283. focusTrapEl: Object,
  8284. focusStartEl: {
  8285. type: [Object, String],
  8286. default: "first"
  8287. }
  8288. },
  8289. emits: [
  8290. ON_TRAP_FOCUS_EVT,
  8291. ON_RELEASE_FOCUS_EVT,
  8292. "focusin",
  8293. "focusout",
  8294. "focusout-prevented",
  8295. "release-requested"
  8296. ],
  8297. setup(props, { emit }) {
  8298. const forwardRef = (0, vue.ref)();
  8299. let lastFocusBeforeTrapped;
  8300. let lastFocusAfterTrapped;
  8301. const { focusReason } = useFocusReason();
  8302. useEscapeKeydown((event) => {
  8303. if (props.trapped && !focusLayer.paused) emit("release-requested", event);
  8304. });
  8305. const focusLayer = {
  8306. paused: false,
  8307. pause() {
  8308. this.paused = true;
  8309. },
  8310. resume() {
  8311. this.paused = false;
  8312. }
  8313. };
  8314. const onKeydown = (e) => {
  8315. if (!props.loop && !props.trapped) return;
  8316. if (focusLayer.paused) return;
  8317. const { altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e;
  8318. const { loop } = props;
  8319. const isTabbing = getEventCode(e) === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey;
  8320. const currentFocusingEl = document.activeElement;
  8321. if (isTabbing && currentFocusingEl) {
  8322. const container = currentTarget;
  8323. const [first, last] = getEdges(container);
  8324. if (!(first && last)) {
  8325. if (currentFocusingEl === container) {
  8326. const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason.value });
  8327. emit("focusout-prevented", focusoutPreventedEvent);
  8328. if (!focusoutPreventedEvent.defaultPrevented) e.preventDefault();
  8329. }
  8330. } else if (!shiftKey && currentFocusingEl === last) {
  8331. const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason.value });
  8332. emit("focusout-prevented", focusoutPreventedEvent);
  8333. if (!focusoutPreventedEvent.defaultPrevented) {
  8334. e.preventDefault();
  8335. if (loop) tryFocus(first, true);
  8336. }
  8337. } else if (shiftKey && [first, container].includes(currentFocusingEl)) {
  8338. const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason.value });
  8339. emit("focusout-prevented", focusoutPreventedEvent);
  8340. if (!focusoutPreventedEvent.defaultPrevented) {
  8341. e.preventDefault();
  8342. if (loop) tryFocus(last, true);
  8343. }
  8344. }
  8345. }
  8346. };
  8347. (0, vue.provide)(FOCUS_TRAP_INJECTION_KEY, {
  8348. focusTrapRef: forwardRef,
  8349. onKeydown
  8350. });
  8351. (0, vue.watch)(() => props.focusTrapEl, (focusTrapEl) => {
  8352. if (focusTrapEl) forwardRef.value = focusTrapEl;
  8353. }, { immediate: true });
  8354. (0, vue.watch)([forwardRef], ([forwardRef], [oldForwardRef]) => {
  8355. if (forwardRef) {
  8356. forwardRef.addEventListener("keydown", onKeydown);
  8357. forwardRef.addEventListener("focusin", onFocusIn);
  8358. forwardRef.addEventListener("focusout", onFocusOut);
  8359. }
  8360. if (oldForwardRef) {
  8361. oldForwardRef.removeEventListener("keydown", onKeydown);
  8362. oldForwardRef.removeEventListener("focusin", onFocusIn);
  8363. oldForwardRef.removeEventListener("focusout", onFocusOut);
  8364. }
  8365. });
  8366. const trapOnFocus = (e) => {
  8367. emit(ON_TRAP_FOCUS_EVT, e);
  8368. };
  8369. const releaseOnFocus = (e) => emit(ON_RELEASE_FOCUS_EVT, e);
  8370. const onFocusIn = (e) => {
  8371. const trapContainer = (0, vue.unref)(forwardRef);
  8372. if (!trapContainer) return;
  8373. const target = e.target;
  8374. const relatedTarget = e.relatedTarget;
  8375. const isFocusedInTrap = target && trapContainer.contains(target);
  8376. if (!props.trapped) {
  8377. if (!(relatedTarget && trapContainer.contains(relatedTarget))) lastFocusBeforeTrapped = relatedTarget;
  8378. }
  8379. if (isFocusedInTrap) emit("focusin", e);
  8380. if (focusLayer.paused) return;
  8381. if (props.trapped) if (isFocusedInTrap) lastFocusAfterTrapped = target;
  8382. else tryFocus(lastFocusAfterTrapped, true);
  8383. };
  8384. const onFocusOut = (e) => {
  8385. const trapContainer = (0, vue.unref)(forwardRef);
  8386. if (focusLayer.paused || !trapContainer) return;
  8387. if (props.trapped) {
  8388. const relatedTarget = e.relatedTarget;
  8389. if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) setTimeout(() => {
  8390. if (!focusLayer.paused && props.trapped) {
  8391. const focusoutPreventedEvent = createFocusOutPreventedEvent({ focusReason: focusReason.value });
  8392. emit("focusout-prevented", focusoutPreventedEvent);
  8393. if (!focusoutPreventedEvent.defaultPrevented) tryFocus(lastFocusAfterTrapped, true);
  8394. }
  8395. }, 0);
  8396. } else {
  8397. const target = e.target;
  8398. if (!(target && trapContainer.contains(target))) emit("focusout", e);
  8399. }
  8400. };
  8401. async function startTrap() {
  8402. await (0, vue.nextTick)();
  8403. const trapContainer = (0, vue.unref)(forwardRef);
  8404. if (trapContainer) {
  8405. focusableStack.push(focusLayer);
  8406. const prevFocusedElement = trapContainer.contains(document.activeElement) ? lastFocusBeforeTrapped : document.activeElement;
  8407. lastFocusBeforeTrapped = prevFocusedElement;
  8408. if (!trapContainer.contains(prevFocusedElement)) {
  8409. const focusEvent = new Event(FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS);
  8410. trapContainer.addEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);
  8411. trapContainer.dispatchEvent(focusEvent);
  8412. if (!focusEvent.defaultPrevented) (0, vue.nextTick)(() => {
  8413. let focusStartEl = props.focusStartEl;
  8414. if (!isString(focusStartEl)) {
  8415. tryFocus(focusStartEl);
  8416. if (document.activeElement !== focusStartEl) focusStartEl = "first";
  8417. }
  8418. if (focusStartEl === "first") focusFirstDescendant(obtainAllFocusableElements(trapContainer), true);
  8419. if (document.activeElement === prevFocusedElement || focusStartEl === "container") tryFocus(trapContainer);
  8420. });
  8421. }
  8422. }
  8423. }
  8424. function stopTrap() {
  8425. const trapContainer = (0, vue.unref)(forwardRef);
  8426. if (trapContainer) {
  8427. trapContainer.removeEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);
  8428. const releasedEvent = new CustomEvent(FOCUS_AFTER_RELEASED, {
  8429. ...FOCUS_AFTER_TRAPPED_OPTS,
  8430. detail: { focusReason: focusReason.value }
  8431. });
  8432. trapContainer.addEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);
  8433. trapContainer.dispatchEvent(releasedEvent);
  8434. if (!releasedEvent.defaultPrevented && (focusReason.value == "keyboard" || !isFocusCausedByUserEvent() || trapContainer.contains(document.activeElement))) tryFocus(lastFocusBeforeTrapped ?? document.body);
  8435. trapContainer.removeEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);
  8436. focusableStack.remove(focusLayer);
  8437. lastFocusBeforeTrapped = null;
  8438. lastFocusAfterTrapped = null;
  8439. }
  8440. }
  8441. (0, vue.onMounted)(() => {
  8442. if (props.trapped) startTrap();
  8443. (0, vue.watch)(() => props.trapped, (trapped) => {
  8444. if (trapped) startTrap();
  8445. else stopTrap();
  8446. });
  8447. });
  8448. (0, vue.onBeforeUnmount)(() => {
  8449. if (props.trapped) stopTrap();
  8450. if (forwardRef.value) {
  8451. forwardRef.value.removeEventListener("keydown", onKeydown);
  8452. forwardRef.value.removeEventListener("focusin", onFocusIn);
  8453. forwardRef.value.removeEventListener("focusout", onFocusOut);
  8454. forwardRef.value = void 0;
  8455. }
  8456. lastFocusBeforeTrapped = null;
  8457. lastFocusAfterTrapped = null;
  8458. });
  8459. return { onKeydown };
  8460. }
  8461. });
  8462. //#endregion
  8463. //#region \0plugin-vue:export-helper
  8464. var _plugin_vue_export_helper_default = (sfc, props) => {
  8465. const target = sfc.__vccOpts || sfc;
  8466. for (const [key, val] of props) target[key] = val;
  8467. return target;
  8468. };
  8469. //#endregion
  8470. //#region ../../packages/components/focus-trap/src/focus-trap.vue
  8471. function _sfc_render$20(_ctx, _cache, $props, $setup, $data, $options) {
  8472. return (0, vue.renderSlot)(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown });
  8473. }
  8474. var focus_trap_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(focus_trap_vue_vue_type_script_lang_default, [["render", _sfc_render$20]]);
  8475. //#endregion
  8476. //#region ../../packages/components/focus-trap/index.ts
  8477. var focus_trap_default = focus_trap_default$1;
  8478. //#endregion
  8479. //#region ../../packages/components/form/src/form.ts
  8480. const formMetaProps = buildProps({
  8481. size: {
  8482. type: String,
  8483. values: componentSizes
  8484. },
  8485. disabled: Boolean
  8486. });
  8487. const formProps = buildProps({
  8488. ...formMetaProps,
  8489. model: Object,
  8490. rules: { type: definePropType(Object) },
  8491. labelPosition: {
  8492. type: String,
  8493. values: [
  8494. "left",
  8495. "right",
  8496. "top"
  8497. ],
  8498. default: "right"
  8499. },
  8500. requireAsteriskPosition: {
  8501. type: String,
  8502. values: ["left", "right"],
  8503. default: "left"
  8504. },
  8505. labelWidth: {
  8506. type: [String, Number],
  8507. default: ""
  8508. },
  8509. labelSuffix: {
  8510. type: String,
  8511. default: ""
  8512. },
  8513. inline: Boolean,
  8514. inlineMessage: Boolean,
  8515. statusIcon: Boolean,
  8516. showMessage: {
  8517. type: Boolean,
  8518. default: true
  8519. },
  8520. validateOnRuleChange: {
  8521. type: Boolean,
  8522. default: true
  8523. },
  8524. hideRequiredAsterisk: Boolean,
  8525. scrollToError: Boolean,
  8526. scrollIntoViewOptions: {
  8527. type: definePropType([Object, Boolean]),
  8528. default: true
  8529. }
  8530. });
  8531. const formEmits = { validate: (prop, isValid, message) => (isArray$1(prop) || isString(prop)) && isBoolean(isValid) && isString(message) };
  8532. //#endregion
  8533. //#region ../../packages/components/form/src/constants.ts
  8534. const formContextKey = Symbol("formContextKey");
  8535. const formItemContextKey = Symbol("formItemContextKey");
  8536. //#endregion
  8537. //#region ../../packages/components/form/src/hooks/use-form-common-props.ts
  8538. const useFormSize = (fallback, ignore = {}) => {
  8539. const emptyRef = (0, vue.ref)(void 0);
  8540. const size = ignore.prop ? emptyRef : useProp("size");
  8541. const globalConfig = ignore.global ? emptyRef : useGlobalSize();
  8542. const form = ignore.form ? { size: void 0 } : (0, vue.inject)(formContextKey, void 0);
  8543. const formItem = ignore.formItem ? { size: void 0 } : (0, vue.inject)(formItemContextKey, void 0);
  8544. return (0, vue.computed)(() => size.value || (0, vue.unref)(fallback) || formItem?.size || form?.size || globalConfig.value || "");
  8545. };
  8546. const useFormDisabled = (fallback) => {
  8547. const disabled = useProp("disabled");
  8548. const form = (0, vue.inject)(formContextKey, void 0);
  8549. return (0, vue.computed)(() => {
  8550. return disabled.value ?? (0, vue.unref)(fallback) ?? form?.disabled ?? false;
  8551. });
  8552. };
  8553. const useSize = useFormSize;
  8554. const useDisabled = useFormDisabled;
  8555. //#endregion
  8556. //#region ../../packages/components/form/src/hooks/use-form-item.ts
  8557. const useFormItem = () => {
  8558. return {
  8559. form: (0, vue.inject)(formContextKey, void 0),
  8560. formItem: (0, vue.inject)(formItemContextKey, void 0)
  8561. };
  8562. };
  8563. const useFormItemInputId = (props, { formItemContext, disableIdGeneration, disableIdManagement }) => {
  8564. if (!disableIdGeneration) disableIdGeneration = (0, vue.ref)(false);
  8565. if (!disableIdManagement) disableIdManagement = (0, vue.ref)(false);
  8566. const instance = (0, vue.getCurrentInstance)();
  8567. const inLabel = () => {
  8568. let parent = instance?.parent;
  8569. while (parent) {
  8570. if (parent.type.name === "ElFormItem") return false;
  8571. if (parent.type.name === "ElLabelWrap") return true;
  8572. parent = parent.parent;
  8573. }
  8574. return false;
  8575. };
  8576. const inputId = (0, vue.ref)();
  8577. let idUnwatch = void 0;
  8578. const isLabeledByFormItem = (0, vue.computed)(() => {
  8579. return !!(!(props.label || props.ariaLabel) && formItemContext && formItemContext.inputIds && formItemContext.inputIds?.length <= 1);
  8580. });
  8581. (0, vue.onMounted)(() => {
  8582. idUnwatch = (0, vue.watch)([(0, vue.toRef)(props, "id"), disableIdGeneration], ([id, disableIdGeneration]) => {
  8583. const newId = id ?? (!disableIdGeneration ? useId().value : void 0);
  8584. if (newId !== inputId.value) {
  8585. if (formItemContext?.removeInputId && !inLabel()) {
  8586. inputId.value && formItemContext.removeInputId(inputId.value);
  8587. if (!disableIdManagement?.value && !disableIdGeneration && newId) formItemContext.addInputId(newId);
  8588. }
  8589. inputId.value = newId;
  8590. }
  8591. }, { immediate: true });
  8592. });
  8593. (0, vue.onUnmounted)(() => {
  8594. idUnwatch && idUnwatch();
  8595. if (formItemContext?.removeInputId) inputId.value && formItemContext.removeInputId(inputId.value);
  8596. });
  8597. return {
  8598. isLabeledByFormItem,
  8599. inputId
  8600. };
  8601. };
  8602. //#endregion
  8603. //#region ../../packages/components/form/src/utils.ts
  8604. const SCOPE$7 = "ElForm";
  8605. function useFormLabelWidth() {
  8606. const potentialLabelWidthArr = (0, vue.ref)([]);
  8607. const autoLabelWidth = (0, vue.computed)(() => {
  8608. if (!potentialLabelWidthArr.value.length) return "0";
  8609. const max = Math.max(...potentialLabelWidthArr.value);
  8610. return max ? `${max}px` : "";
  8611. });
  8612. function getLabelWidthIndex(width) {
  8613. const index = potentialLabelWidthArr.value.indexOf(width);
  8614. if (index === -1 && autoLabelWidth.value === "0") /* @__PURE__ */ debugWarn(SCOPE$7, `unexpected width ${width}`);
  8615. return index;
  8616. }
  8617. function registerLabelWidth(val, oldVal) {
  8618. if (val && oldVal) {
  8619. const index = getLabelWidthIndex(oldVal);
  8620. potentialLabelWidthArr.value.splice(index, 1, val);
  8621. } else if (val) potentialLabelWidthArr.value.push(val);
  8622. }
  8623. function deregisterLabelWidth(val) {
  8624. const index = getLabelWidthIndex(val);
  8625. if (index > -1) potentialLabelWidthArr.value.splice(index, 1);
  8626. }
  8627. return {
  8628. autoLabelWidth,
  8629. registerLabelWidth,
  8630. deregisterLabelWidth
  8631. };
  8632. }
  8633. const filterFields = (fields, props) => {
  8634. const normalized = castArray$1(props).map((prop) => isArray$1(prop) ? prop.join(".") : prop);
  8635. return normalized.length > 0 ? fields.filter((field) => field.propString && normalized.includes(field.propString)) : fields;
  8636. };
  8637. //#endregion
  8638. //#region ../../packages/components/form/src/form.vue?vue&type=script&setup=true&lang.ts
  8639. const COMPONENT_NAME$21 = "ElForm";
  8640. var form_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  8641. name: COMPONENT_NAME$21,
  8642. __name: "form",
  8643. props: formProps,
  8644. emits: formEmits,
  8645. setup(__props, { expose: __expose, emit: __emit }) {
  8646. const props = __props;
  8647. const emit = __emit;
  8648. const formRef = (0, vue.ref)();
  8649. const fields = (0, vue.reactive)([]);
  8650. const initialValues = /* @__PURE__ */ new Map();
  8651. const formSize = useFormSize();
  8652. const ns = useNamespace("form");
  8653. const formClasses = (0, vue.computed)(() => {
  8654. const { labelPosition, inline } = props;
  8655. return [
  8656. ns.b(),
  8657. ns.m(formSize.value || "default"),
  8658. {
  8659. [ns.m(`label-${labelPosition}`)]: labelPosition,
  8660. [ns.m("inline")]: inline
  8661. }
  8662. ];
  8663. });
  8664. const getField = (prop) => {
  8665. return filterFields(fields, [prop])[0];
  8666. };
  8667. const addField = (field) => {
  8668. if (!fields.includes(field)) fields.push(field);
  8669. if (field.propString) if (initialValues.has(field.propString)) field.setInitialValue(initialValues.get(field.propString));
  8670. else initialValues.set(field.propString, cloneDeep(field.fieldValue));
  8671. };
  8672. const removeField = (field, oldPropString) => {
  8673. if (oldPropString) {
  8674. initialValues.delete(oldPropString);
  8675. return;
  8676. }
  8677. const idx = fields.indexOf(field);
  8678. if (idx > -1) {
  8679. fields.splice(idx, 1);
  8680. if (field.propString) initialValues.set(field.propString, cloneDeep(field.getInitialValue()));
  8681. }
  8682. };
  8683. const setInitialValues = (initModel) => {
  8684. if (!props.model) {
  8685. /* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "model is required for setInitialValues to work.");
  8686. return;
  8687. }
  8688. if (!initModel) {
  8689. /* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "initModel is required for setInitialValues to work.");
  8690. return;
  8691. }
  8692. for (const key of initialValues.keys()) initialValues.set(key, cloneDeep(getProp(initModel, key).value));
  8693. fields.forEach((field) => {
  8694. if (field.prop) field.setInitialValue(getProp(initModel, field.prop).value);
  8695. });
  8696. };
  8697. const resetFields = (properties = []) => {
  8698. if (!props.model) {
  8699. /* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "model is required for resetFields to work.");
  8700. return;
  8701. }
  8702. filterFields(fields, properties).forEach((field) => field.resetField());
  8703. const activePropStrings = new Set(fields.map((f) => f.propString).filter(Boolean));
  8704. const propsToCheck = properties.length > 0 ? castArray$1(properties).map((p) => isArray$1(p) ? p.join(".") : p) : [...initialValues.keys()];
  8705. for (const propString of propsToCheck) if (!activePropStrings.has(propString) && initialValues.has(propString)) getProp(props.model, propString).value = cloneDeep(initialValues.get(propString));
  8706. };
  8707. const clearValidate = (props = []) => {
  8708. filterFields(fields, props).forEach((field) => field.clearValidate());
  8709. };
  8710. const isValidatable = (0, vue.computed)(() => {
  8711. const hasModel = !!props.model;
  8712. if (!hasModel) /* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "model is required for validate to work.");
  8713. return hasModel;
  8714. });
  8715. const obtainValidateFields = (props) => {
  8716. if (fields.length === 0) return [];
  8717. const filteredFields = filterFields(fields, props);
  8718. if (!filteredFields.length) {
  8719. /* @__PURE__ */ debugWarn(COMPONENT_NAME$21, "please pass correct props!");
  8720. return [];
  8721. }
  8722. return filteredFields;
  8723. };
  8724. const validate = async (callback) => validateField(void 0, callback);
  8725. const doValidateField = async (props = []) => {
  8726. if (!isValidatable.value) return false;
  8727. const fields = obtainValidateFields(props);
  8728. if (fields.length === 0) return true;
  8729. let validationErrors = {};
  8730. for (const field of fields) try {
  8731. await field.validate("");
  8732. if (field.validateState === "error" && !field.error) field.resetField();
  8733. } catch (fields) {
  8734. validationErrors = {
  8735. ...validationErrors,
  8736. ...fields
  8737. };
  8738. }
  8739. if (Object.keys(validationErrors).length === 0) return true;
  8740. return Promise.reject(validationErrors);
  8741. };
  8742. const validateField = async (modelProps = [], callback) => {
  8743. let result = false;
  8744. const shouldThrow = !isFunction$1(callback);
  8745. try {
  8746. result = await doValidateField(modelProps);
  8747. if (result === true) await callback?.(result);
  8748. return result;
  8749. } catch (e) {
  8750. if (e instanceof Error) throw e;
  8751. const invalidFields = e;
  8752. if (props.scrollToError) {
  8753. if (formRef.value) formRef.value.querySelector(`.${ns.b()}-item.is-error`)?.scrollIntoView(props.scrollIntoViewOptions);
  8754. }
  8755. !result && await callback?.(false, invalidFields);
  8756. return shouldThrow && Promise.reject(invalidFields);
  8757. }
  8758. };
  8759. const scrollToField = (prop) => {
  8760. const field = getField(prop);
  8761. if (field) field.$el?.scrollIntoView(props.scrollIntoViewOptions);
  8762. };
  8763. (0, vue.watch)(() => props.rules, () => {
  8764. if (props.validateOnRuleChange) validate().catch(NOOP);
  8765. }, {
  8766. deep: true,
  8767. flush: "post"
  8768. });
  8769. (0, vue.provide)(formContextKey, (0, vue.reactive)({
  8770. ...(0, vue.toRefs)(props),
  8771. emit,
  8772. resetFields,
  8773. clearValidate,
  8774. validateField,
  8775. getField,
  8776. addField,
  8777. removeField,
  8778. setInitialValues,
  8779. ...useFormLabelWidth()
  8780. }));
  8781. __expose({
  8782. validate,
  8783. validateField,
  8784. resetFields,
  8785. clearValidate,
  8786. scrollToField,
  8787. getField,
  8788. fields,
  8789. setInitialValues
  8790. });
  8791. return (_ctx, _cache) => {
  8792. return (0, vue.openBlock)(), (0, vue.createElementBlock)("form", {
  8793. ref_key: "formRef",
  8794. ref: formRef,
  8795. class: (0, vue.normalizeClass)(formClasses.value)
  8796. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
  8797. };
  8798. }
  8799. });
  8800. //#endregion
  8801. //#region ../../packages/components/form/src/form.vue
  8802. var form_default = form_vue_vue_type_script_setup_true_lang_default;
  8803. //#endregion
  8804. //#region ../../packages/components/form/src/form-item.ts
  8805. const formItemValidateStates = [
  8806. "",
  8807. "error",
  8808. "validating",
  8809. "success"
  8810. ];
  8811. const formItemProps = buildProps({
  8812. label: String,
  8813. labelWidth: { type: [String, Number] },
  8814. labelPosition: {
  8815. type: String,
  8816. values: [
  8817. "left",
  8818. "right",
  8819. "top",
  8820. ""
  8821. ],
  8822. default: ""
  8823. },
  8824. prop: { type: definePropType([String, Array]) },
  8825. required: {
  8826. type: Boolean,
  8827. default: void 0
  8828. },
  8829. rules: { type: definePropType([Object, Array]) },
  8830. error: String,
  8831. validateStatus: {
  8832. type: String,
  8833. values: formItemValidateStates
  8834. },
  8835. for: String,
  8836. inlineMessage: {
  8837. type: Boolean,
  8838. default: void 0
  8839. },
  8840. showMessage: {
  8841. type: Boolean,
  8842. default: true
  8843. },
  8844. size: {
  8845. type: String,
  8846. values: componentSizes
  8847. }
  8848. });
  8849. //#endregion
  8850. //#region ../../node_modules/.pnpm/async-validator@4.2.5_patch_hash=cc6d77b35ed2a1683012935ca9ed998d418912785fcf78c6497d3268ac596d23/node_modules/async-validator/dist-web/index.js
  8851. function _extends() {
  8852. _extends = Object.assign ? Object.assign.bind() : function(target) {
  8853. for (var i = 1; i < arguments.length; i++) {
  8854. var source = arguments[i];
  8855. for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
  8856. }
  8857. return target;
  8858. };
  8859. return _extends.apply(this, arguments);
  8860. }
  8861. function _inheritsLoose(subClass, superClass) {
  8862. subClass.prototype = Object.create(superClass.prototype);
  8863. subClass.prototype.constructor = subClass;
  8864. _setPrototypeOf(subClass, superClass);
  8865. }
  8866. function _getPrototypeOf(o) {
  8867. _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
  8868. return o.__proto__ || Object.getPrototypeOf(o);
  8869. };
  8870. return _getPrototypeOf(o);
  8871. }
  8872. function _setPrototypeOf(o, p) {
  8873. _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
  8874. o.__proto__ = p;
  8875. return o;
  8876. };
  8877. return _setPrototypeOf(o, p);
  8878. }
  8879. function _isNativeReflectConstruct() {
  8880. if (typeof Reflect === "undefined" || !Reflect.construct) return false;
  8881. if (Reflect.construct.sham) return false;
  8882. if (typeof Proxy === "function") return true;
  8883. try {
  8884. Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
  8885. return true;
  8886. } catch (e) {
  8887. return false;
  8888. }
  8889. }
  8890. function _construct(Parent, args, Class) {
  8891. if (_isNativeReflectConstruct()) _construct = Reflect.construct.bind();
  8892. else _construct = function _construct(Parent, args, Class) {
  8893. var a = [null];
  8894. a.push.apply(a, args);
  8895. var instance = new (Function.bind.apply(Parent, a))();
  8896. if (Class) _setPrototypeOf(instance, Class.prototype);
  8897. return instance;
  8898. };
  8899. return _construct.apply(null, arguments);
  8900. }
  8901. function _isNativeFunction(fn) {
  8902. return Function.toString.call(fn).indexOf("[native code]") !== -1;
  8903. }
  8904. function _wrapNativeSuper(Class) {
  8905. var _cache = typeof Map === "function" ? /* @__PURE__ */ new Map() : void 0;
  8906. _wrapNativeSuper = function _wrapNativeSuper(Class) {
  8907. if (Class === null || !_isNativeFunction(Class)) return Class;
  8908. if (typeof Class !== "function") throw new TypeError("Super expression must either be null or a function");
  8909. if (typeof _cache !== "undefined") {
  8910. if (_cache.has(Class)) return _cache.get(Class);
  8911. _cache.set(Class, Wrapper);
  8912. }
  8913. function Wrapper() {
  8914. return _construct(Class, arguments, _getPrototypeOf(this).constructor);
  8915. }
  8916. Wrapper.prototype = Object.create(Class.prototype, { constructor: {
  8917. value: Wrapper,
  8918. enumerable: false,
  8919. writable: true,
  8920. configurable: true
  8921. } });
  8922. return _setPrototypeOf(Wrapper, Class);
  8923. };
  8924. return _wrapNativeSuper(Class);
  8925. }
  8926. var formatRegExp = /%[sdj%]/g;
  8927. var warning = function warning() {};
  8928. if (typeof process !== "undefined" && process.env && false);
  8929. function convertFieldsError(errors) {
  8930. if (!errors || !errors.length) return null;
  8931. var fields = {};
  8932. errors.forEach(function(error) {
  8933. var field = error.field;
  8934. fields[field] = fields[field] || [];
  8935. fields[field].push(error);
  8936. });
  8937. return fields;
  8938. }
  8939. function format(template) {
  8940. for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) args[_key - 1] = arguments[_key];
  8941. var i = 0;
  8942. var len = args.length;
  8943. if (typeof template === "function") return template.apply(null, args);
  8944. if (typeof template === "string") return template.replace(formatRegExp, function(x) {
  8945. if (x === "%%") return "%";
  8946. if (i >= len) return x;
  8947. switch (x) {
  8948. case "%s": return String(args[i++]);
  8949. case "%d": return Number(args[i++]);
  8950. case "%j":
  8951. try {
  8952. return JSON.stringify(args[i++]);
  8953. } catch (_) {
  8954. return "[Circular]";
  8955. }
  8956. break;
  8957. default: return x;
  8958. }
  8959. });
  8960. return template;
  8961. }
  8962. function isNativeStringType(type) {
  8963. return type === "string" || type === "url" || type === "hex" || type === "email" || type === "date" || type === "pattern";
  8964. }
  8965. function isEmptyValue(value, type) {
  8966. if (value === void 0 || value === null) return true;
  8967. if (type === "array" && Array.isArray(value) && !value.length) return true;
  8968. if (isNativeStringType(type) && typeof value === "string" && !value) return true;
  8969. return false;
  8970. }
  8971. function asyncParallelArray(arr, func, callback) {
  8972. var results = [];
  8973. var total = 0;
  8974. var arrLength = arr.length;
  8975. function count(errors) {
  8976. results.push.apply(results, errors || []);
  8977. total++;
  8978. if (total === arrLength) callback(results);
  8979. }
  8980. arr.forEach(function(a) {
  8981. func(a, count);
  8982. });
  8983. }
  8984. function asyncSerialArray(arr, func, callback) {
  8985. var index = 0;
  8986. var arrLength = arr.length;
  8987. function next(errors) {
  8988. if (errors && errors.length) {
  8989. callback(errors);
  8990. return;
  8991. }
  8992. var original = index;
  8993. index = index + 1;
  8994. if (original < arrLength) func(arr[original], next);
  8995. else callback([]);
  8996. }
  8997. next([]);
  8998. }
  8999. function flattenObjArr(objArr) {
  9000. var ret = [];
  9001. Object.keys(objArr).forEach(function(k) {
  9002. ret.push.apply(ret, objArr[k] || []);
  9003. });
  9004. return ret;
  9005. }
  9006. var AsyncValidationError = /* @__PURE__ */ function(_Error) {
  9007. _inheritsLoose(AsyncValidationError, _Error);
  9008. function AsyncValidationError(errors, fields) {
  9009. var _this = _Error.call(this, "Async Validation Error") || this;
  9010. _this.errors = errors;
  9011. _this.fields = fields;
  9012. return _this;
  9013. }
  9014. return AsyncValidationError;
  9015. }(/* @__PURE__ */ _wrapNativeSuper(Error));
  9016. function asyncMap(objArr, option, func, callback, source) {
  9017. if (option.first) {
  9018. var _pending = new Promise(function(resolve, reject) {
  9019. asyncSerialArray(flattenObjArr(objArr), func, function next(errors) {
  9020. callback(errors);
  9021. return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source);
  9022. });
  9023. });
  9024. _pending["catch"](function(e) {
  9025. return e;
  9026. });
  9027. return _pending;
  9028. }
  9029. var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || [];
  9030. var objArrKeys = Object.keys(objArr);
  9031. var objArrLength = objArrKeys.length;
  9032. var total = 0;
  9033. var results = [];
  9034. var pending = new Promise(function(resolve, reject) {
  9035. var next = function next(errors) {
  9036. results.push.apply(results, errors);
  9037. total++;
  9038. if (total === objArrLength) {
  9039. callback(results);
  9040. return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source);
  9041. }
  9042. };
  9043. if (!objArrKeys.length) {
  9044. callback(results);
  9045. resolve(source);
  9046. }
  9047. objArrKeys.forEach(function(key) {
  9048. var arr = objArr[key];
  9049. if (firstFields.indexOf(key) !== -1) asyncSerialArray(arr, func, next);
  9050. else asyncParallelArray(arr, func, next);
  9051. });
  9052. });
  9053. pending["catch"](function(e) {
  9054. return e;
  9055. });
  9056. return pending;
  9057. }
  9058. function isErrorObj(obj) {
  9059. return !!(obj && obj.message !== void 0);
  9060. }
  9061. function getValue(value, path) {
  9062. var v = value;
  9063. for (var i = 0; i < path.length; i++) {
  9064. if (v == void 0) return v;
  9065. v = v[path[i]];
  9066. }
  9067. return v;
  9068. }
  9069. function complementError(rule, source) {
  9070. return function(oe) {
  9071. var fieldValue;
  9072. if (rule.fullFields) fieldValue = getValue(source, rule.fullFields);
  9073. else fieldValue = source[oe.field || rule.fullField];
  9074. if (isErrorObj(oe)) {
  9075. oe.field = oe.field || rule.fullField;
  9076. oe.fieldValue = fieldValue;
  9077. return oe;
  9078. }
  9079. return {
  9080. message: typeof oe === "function" ? oe() : oe,
  9081. fieldValue,
  9082. field: oe.field || rule.fullField
  9083. };
  9084. };
  9085. }
  9086. function deepMerge(target, source) {
  9087. if (source) {
  9088. for (var s in source) if (source.hasOwnProperty(s)) {
  9089. var value = source[s];
  9090. if (typeof value === "object" && typeof target[s] === "object") target[s] = _extends({}, target[s], value);
  9091. else target[s] = value;
  9092. }
  9093. }
  9094. return target;
  9095. }
  9096. var required$1 = function required(rule, value, source, errors, options, type) {
  9097. if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) errors.push(format(options.messages.required, rule.fullField));
  9098. };
  9099. var whitespace = function whitespace(rule, value, source, errors, options) {
  9100. if (/^\s+$/.test(value) || value === "") errors.push(format(options.messages.whitespace, rule.fullField));
  9101. };
  9102. var urlReg;
  9103. var getUrlRegex = (function() {
  9104. if (urlReg) return urlReg;
  9105. var word = "[a-fA-F\\d:]";
  9106. var b = function b(options) {
  9107. return options && options.includeBoundaries ? "(?:(?<=\\s|^)(?=" + word + ")|(?<=" + word + ")(?=\\s|$))" : "";
  9108. };
  9109. var v4 = "(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}";
  9110. var v6seg = "[a-fA-F\\d]{1,4}";
  9111. var v6 = ("\n(?:\n(?:" + v6seg + ":){7}(?:" + v6seg + "|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:" + v6seg + ":){6}(?:" + v4 + "|:" + v6seg + "|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:" + v6seg + ":){5}(?::" + v4 + "|(?::" + v6seg + "){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:" + v6seg + ":){4}(?:(?::" + v6seg + "){0,1}:" + v4 + "|(?::" + v6seg + "){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:" + v6seg + ":){3}(?:(?::" + v6seg + "){0,2}:" + v4 + "|(?::" + v6seg + "){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:" + v6seg + ":){2}(?:(?::" + v6seg + "){0,3}:" + v4 + "|(?::" + v6seg + "){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:" + v6seg + ":){1}(?:(?::" + v6seg + "){0,4}:" + v4 + "|(?::" + v6seg + "){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::" + v6seg + "){0,5}:" + v4 + "|(?::" + v6seg + "){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\n").replace(/\s*\/\/.*$/gm, "").replace(/\n/g, "").trim();
  9112. var v46Exact = new RegExp("(?:^" + v4 + "$)|(?:^" + v6 + "$)");
  9113. var v4exact = new RegExp("^" + v4 + "$");
  9114. var v6exact = new RegExp("^" + v6 + "$");
  9115. var ip = function ip(options) {
  9116. return options && options.exact ? v46Exact : new RegExp("(?:" + b(options) + v4 + b(options) + ")|(?:" + b(options) + v6 + b(options) + ")", "g");
  9117. };
  9118. ip.v4 = function(options) {
  9119. return options && options.exact ? v4exact : new RegExp("" + b(options) + v4 + b(options), "g");
  9120. };
  9121. ip.v6 = function(options) {
  9122. return options && options.exact ? v6exact : new RegExp("" + b(options) + v6 + b(options), "g");
  9123. };
  9124. var protocol = "(?:(?:[a-z]+:)?//)";
  9125. var auth = "(?:\\S+(?::\\S*)?@)?";
  9126. var ipv4 = ip.v4().source;
  9127. var ipv6 = ip.v6().source;
  9128. var regex = "(?:" + protocol + "|www\\.)" + auth + "(?:localhost|" + ipv4 + "|" + ipv6 + "|(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:[/?#][^\\s\"]*)?";
  9129. urlReg = new RegExp("(?:^" + regex + "$)", "i");
  9130. return urlReg;
  9131. });
  9132. var pattern$2 = {
  9133. email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,
  9134. hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
  9135. };
  9136. var types = {
  9137. integer: function integer(value) {
  9138. return types.number(value) && parseInt(value, 10) === value;
  9139. },
  9140. "float": function float(value) {
  9141. return types.number(value) && !types.integer(value);
  9142. },
  9143. array: function array(value) {
  9144. return Array.isArray(value);
  9145. },
  9146. regexp: function regexp(value) {
  9147. if (value instanceof RegExp) return true;
  9148. try {
  9149. return !!new RegExp(value);
  9150. } catch (e) {
  9151. return false;
  9152. }
  9153. },
  9154. date: function date(value) {
  9155. return typeof value.getTime === "function" && typeof value.getMonth === "function" && typeof value.getYear === "function" && !isNaN(value.getTime());
  9156. },
  9157. number: function number(value) {
  9158. if (isNaN(value)) return false;
  9159. return typeof value === "number";
  9160. },
  9161. object: function object(value) {
  9162. return typeof value === "object" && !types.array(value);
  9163. },
  9164. method: function method(value) {
  9165. return typeof value === "function";
  9166. },
  9167. email: function email(value) {
  9168. return typeof value === "string" && value.length <= 320 && !!value.match(pattern$2.email);
  9169. },
  9170. url: function url(value) {
  9171. return typeof value === "string" && value.length <= 2048 && !!value.match(getUrlRegex());
  9172. },
  9173. hex: function hex(value) {
  9174. return typeof value === "string" && !!value.match(pattern$2.hex);
  9175. }
  9176. };
  9177. var type$1 = function type(rule, value, source, errors, options) {
  9178. if (rule.required && value === void 0) {
  9179. required$1(rule, value, source, errors, options);
  9180. return;
  9181. }
  9182. var custom = [
  9183. "integer",
  9184. "float",
  9185. "array",
  9186. "regexp",
  9187. "object",
  9188. "method",
  9189. "email",
  9190. "number",
  9191. "date",
  9192. "url",
  9193. "hex"
  9194. ];
  9195. var ruleType = rule.type;
  9196. if (custom.indexOf(ruleType) > -1) {
  9197. if (!types[ruleType](value)) errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
  9198. } else if (ruleType && typeof value !== rule.type) errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
  9199. };
  9200. var range = function range(rule, value, source, errors, options) {
  9201. var len = typeof rule.len === "number";
  9202. var min = typeof rule.min === "number";
  9203. var max = typeof rule.max === "number";
  9204. var val = value;
  9205. var key = null;
  9206. var num = typeof value === "number";
  9207. var str = typeof value === "string";
  9208. var arr = Array.isArray(value);
  9209. if (num) key = "number";
  9210. else if (str) key = "string";
  9211. else if (arr) key = "array";
  9212. if (!key) return false;
  9213. if (arr) val = value.length;
  9214. if (str) val = value.length;
  9215. if (len) {
  9216. if (val !== rule.len) errors.push(format(options.messages[key].len, rule.fullField, rule.len));
  9217. } else if (min && !max && val < rule.min) errors.push(format(options.messages[key].min, rule.fullField, rule.min));
  9218. else if (max && !min && val > rule.max) errors.push(format(options.messages[key].max, rule.fullField, rule.max));
  9219. else if (min && max && (val < rule.min || val > rule.max)) errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
  9220. };
  9221. var ENUM$1 = "enum";
  9222. var rules = {
  9223. required: required$1,
  9224. whitespace,
  9225. type: type$1,
  9226. range,
  9227. "enum": function enumerable(rule, value, source, errors, options) {
  9228. rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : [];
  9229. if (rule[ENUM$1].indexOf(value) === -1) errors.push(format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(", ")));
  9230. },
  9231. pattern: function pattern(rule, value, source, errors, options) {
  9232. if (rule.pattern) {
  9233. if (rule.pattern instanceof RegExp) {
  9234. rule.pattern.lastIndex = 0;
  9235. if (!rule.pattern.test(value)) errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
  9236. } else if (typeof rule.pattern === "string") {
  9237. if (!new RegExp(rule.pattern).test(value)) errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
  9238. }
  9239. }
  9240. }
  9241. };
  9242. var string = function string(rule, value, callback, source, options) {
  9243. var errors = [];
  9244. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9245. if (isEmptyValue(value, "string") && !rule.required) return callback();
  9246. rules.required(rule, value, source, errors, options, "string");
  9247. if (!isEmptyValue(value, "string")) {
  9248. rules.type(rule, value, source, errors, options);
  9249. rules.range(rule, value, source, errors, options);
  9250. rules.pattern(rule, value, source, errors, options);
  9251. if (rule.whitespace === true) rules.whitespace(rule, value, source, errors, options);
  9252. }
  9253. }
  9254. callback(errors);
  9255. };
  9256. var method = function method(rule, value, callback, source, options) {
  9257. var errors = [];
  9258. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9259. if (isEmptyValue(value) && !rule.required) return callback();
  9260. rules.required(rule, value, source, errors, options);
  9261. if (value !== void 0) rules.type(rule, value, source, errors, options);
  9262. }
  9263. callback(errors);
  9264. };
  9265. var number = function number(rule, value, callback, source, options) {
  9266. var errors = [];
  9267. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9268. if (value === "") value = void 0;
  9269. if (isEmptyValue(value) && !rule.required) return callback();
  9270. rules.required(rule, value, source, errors, options);
  9271. if (value !== void 0) {
  9272. rules.type(rule, value, source, errors, options);
  9273. rules.range(rule, value, source, errors, options);
  9274. }
  9275. }
  9276. callback(errors);
  9277. };
  9278. var _boolean = function _boolean(rule, value, callback, source, options) {
  9279. var errors = [];
  9280. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9281. if (isEmptyValue(value) && !rule.required) return callback();
  9282. rules.required(rule, value, source, errors, options);
  9283. if (value !== void 0) rules.type(rule, value, source, errors, options);
  9284. }
  9285. callback(errors);
  9286. };
  9287. var regexp = function regexp(rule, value, callback, source, options) {
  9288. var errors = [];
  9289. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9290. if (isEmptyValue(value) && !rule.required) return callback();
  9291. rules.required(rule, value, source, errors, options);
  9292. if (!isEmptyValue(value)) rules.type(rule, value, source, errors, options);
  9293. }
  9294. callback(errors);
  9295. };
  9296. var integer = function integer(rule, value, callback, source, options) {
  9297. var errors = [];
  9298. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9299. if (isEmptyValue(value) && !rule.required) return callback();
  9300. rules.required(rule, value, source, errors, options);
  9301. if (value !== void 0) {
  9302. rules.type(rule, value, source, errors, options);
  9303. rules.range(rule, value, source, errors, options);
  9304. }
  9305. }
  9306. callback(errors);
  9307. };
  9308. var floatFn = function floatFn(rule, value, callback, source, options) {
  9309. var errors = [];
  9310. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9311. if (isEmptyValue(value) && !rule.required) return callback();
  9312. rules.required(rule, value, source, errors, options);
  9313. if (value !== void 0) {
  9314. rules.type(rule, value, source, errors, options);
  9315. rules.range(rule, value, source, errors, options);
  9316. }
  9317. }
  9318. callback(errors);
  9319. };
  9320. var array = function array(rule, value, callback, source, options) {
  9321. var errors = [];
  9322. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9323. if ((value === void 0 || value === null) && !rule.required) return callback();
  9324. rules.required(rule, value, source, errors, options, "array");
  9325. if (value !== void 0 && value !== null) {
  9326. rules.type(rule, value, source, errors, options);
  9327. rules.range(rule, value, source, errors, options);
  9328. }
  9329. }
  9330. callback(errors);
  9331. };
  9332. var object = function object(rule, value, callback, source, options) {
  9333. var errors = [];
  9334. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9335. if (isEmptyValue(value) && !rule.required) return callback();
  9336. rules.required(rule, value, source, errors, options);
  9337. if (value !== void 0) rules.type(rule, value, source, errors, options);
  9338. }
  9339. callback(errors);
  9340. };
  9341. var ENUM = "enum";
  9342. var enumerable = function enumerable(rule, value, callback, source, options) {
  9343. var errors = [];
  9344. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9345. if (isEmptyValue(value) && !rule.required) return callback();
  9346. rules.required(rule, value, source, errors, options);
  9347. if (value !== void 0) rules[ENUM](rule, value, source, errors, options);
  9348. }
  9349. callback(errors);
  9350. };
  9351. var pattern = function pattern(rule, value, callback, source, options) {
  9352. var errors = [];
  9353. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9354. if (isEmptyValue(value, "string") && !rule.required) return callback();
  9355. rules.required(rule, value, source, errors, options);
  9356. if (!isEmptyValue(value, "string")) rules.pattern(rule, value, source, errors, options);
  9357. }
  9358. callback(errors);
  9359. };
  9360. var date = function date(rule, value, callback, source, options) {
  9361. var errors = [];
  9362. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9363. if (isEmptyValue(value, "date") && !rule.required) return callback();
  9364. rules.required(rule, value, source, errors, options);
  9365. if (!isEmptyValue(value, "date")) {
  9366. var dateObject;
  9367. if (value instanceof Date) dateObject = value;
  9368. else dateObject = new Date(value);
  9369. rules.type(rule, dateObject, source, errors, options);
  9370. if (dateObject) rules.range(rule, dateObject.getTime(), source, errors, options);
  9371. }
  9372. }
  9373. callback(errors);
  9374. };
  9375. var required = function required(rule, value, callback, source, options) {
  9376. var errors = [];
  9377. var type = Array.isArray(value) ? "array" : typeof value;
  9378. rules.required(rule, value, source, errors, options, type);
  9379. callback(errors);
  9380. };
  9381. var type = function type(rule, value, callback, source, options) {
  9382. var ruleType = rule.type;
  9383. var errors = [];
  9384. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9385. if (isEmptyValue(value, ruleType) && !rule.required) return callback();
  9386. rules.required(rule, value, source, errors, options, ruleType);
  9387. if (!isEmptyValue(value, ruleType)) rules.type(rule, value, source, errors, options);
  9388. }
  9389. callback(errors);
  9390. };
  9391. var validators = {
  9392. string,
  9393. method,
  9394. number,
  9395. "boolean": _boolean,
  9396. regexp,
  9397. integer,
  9398. "float": floatFn,
  9399. array,
  9400. object,
  9401. "enum": enumerable,
  9402. pattern,
  9403. date,
  9404. url: type,
  9405. hex: type,
  9406. email: type,
  9407. required,
  9408. any: function any(rule, value, callback, source, options) {
  9409. var errors = [];
  9410. if (rule.required || !rule.required && source.hasOwnProperty(rule.field)) {
  9411. if (isEmptyValue(value) && !rule.required) return callback();
  9412. rules.required(rule, value, source, errors, options);
  9413. }
  9414. callback(errors);
  9415. }
  9416. };
  9417. function newMessages() {
  9418. return {
  9419. "default": "Validation error on field %s",
  9420. required: "%s is required",
  9421. "enum": "%s must be one of %s",
  9422. whitespace: "%s cannot be empty",
  9423. date: {
  9424. format: "%s date %s is invalid for format %s",
  9425. parse: "%s date could not be parsed, %s is invalid ",
  9426. invalid: "%s date %s is invalid"
  9427. },
  9428. types: {
  9429. string: "%s is not a %s",
  9430. method: "%s is not a %s (function)",
  9431. array: "%s is not an %s",
  9432. object: "%s is not an %s",
  9433. number: "%s is not a %s",
  9434. date: "%s is not a %s",
  9435. "boolean": "%s is not a %s",
  9436. integer: "%s is not an %s",
  9437. "float": "%s is not a %s",
  9438. regexp: "%s is not a valid %s",
  9439. email: "%s is not a valid %s",
  9440. url: "%s is not a valid %s",
  9441. hex: "%s is not a valid %s"
  9442. },
  9443. string: {
  9444. len: "%s must be exactly %s characters",
  9445. min: "%s must be at least %s characters",
  9446. max: "%s cannot be longer than %s characters",
  9447. range: "%s must be between %s and %s characters"
  9448. },
  9449. number: {
  9450. len: "%s must equal %s",
  9451. min: "%s cannot be less than %s",
  9452. max: "%s cannot be greater than %s",
  9453. range: "%s must be between %s and %s"
  9454. },
  9455. array: {
  9456. len: "%s must be exactly %s in length",
  9457. min: "%s cannot be less than %s in length",
  9458. max: "%s cannot be greater than %s in length",
  9459. range: "%s must be between %s and %s in length"
  9460. },
  9461. pattern: { mismatch: "%s value %s does not match pattern %s" },
  9462. clone: function clone() {
  9463. var cloned = JSON.parse(JSON.stringify(this));
  9464. cloned.clone = this.clone;
  9465. return cloned;
  9466. }
  9467. };
  9468. }
  9469. var messages = newMessages();
  9470. var Schema = /* @__PURE__ */ function() {
  9471. function Schema(descriptor) {
  9472. this.rules = null;
  9473. this._messages = messages;
  9474. this.define(descriptor);
  9475. }
  9476. var _proto = Schema.prototype;
  9477. _proto.define = function define(rules) {
  9478. var _this = this;
  9479. if (!rules) throw new Error("Cannot configure a schema with no rules");
  9480. if (typeof rules !== "object" || Array.isArray(rules)) throw new Error("Rules must be an object");
  9481. this.rules = {};
  9482. Object.keys(rules).forEach(function(name) {
  9483. var item = rules[name];
  9484. _this.rules[name] = Array.isArray(item) ? item : [item];
  9485. });
  9486. };
  9487. _proto.messages = function messages(_messages) {
  9488. if (_messages) this._messages = deepMerge(newMessages(), _messages);
  9489. return this._messages;
  9490. };
  9491. _proto.validate = function validate(source_, o, oc) {
  9492. var _this2 = this;
  9493. if (o === void 0) o = {};
  9494. if (oc === void 0) oc = function oc() {};
  9495. var source = source_;
  9496. var options = o;
  9497. var callback = oc;
  9498. if (typeof options === "function") {
  9499. callback = options;
  9500. options = {};
  9501. }
  9502. if (!this.rules || Object.keys(this.rules).length === 0) {
  9503. if (callback) callback(null, source);
  9504. return Promise.resolve(source);
  9505. }
  9506. function complete(results) {
  9507. var errors = [];
  9508. var fields = {};
  9509. function add(e) {
  9510. if (Array.isArray(e)) {
  9511. var _errors;
  9512. errors = (_errors = errors).concat.apply(_errors, e);
  9513. } else errors.push(e);
  9514. }
  9515. for (var i = 0; i < results.length; i++) add(results[i]);
  9516. if (!errors.length) callback(null, source);
  9517. else {
  9518. fields = convertFieldsError(errors);
  9519. callback(errors, fields);
  9520. }
  9521. }
  9522. if (options.messages) {
  9523. var messages$1 = this.messages();
  9524. if (messages$1 === messages) messages$1 = newMessages();
  9525. deepMerge(messages$1, options.messages);
  9526. options.messages = messages$1;
  9527. } else options.messages = this.messages();
  9528. var series = {};
  9529. (options.keys || Object.keys(this.rules)).forEach(function(z) {
  9530. var arr = _this2.rules[z];
  9531. var value = source[z];
  9532. arr.forEach(function(r) {
  9533. var rule = r;
  9534. if (typeof rule.transform === "function") {
  9535. if (source === source_) source = _extends({}, source);
  9536. value = source[z] = rule.transform(value);
  9537. }
  9538. if (typeof rule === "function") rule = { validator: rule };
  9539. else rule = _extends({}, rule);
  9540. rule.validator = _this2.getValidationMethod(rule);
  9541. if (!rule.validator) return;
  9542. rule.field = z;
  9543. rule.fullField = rule.fullField || z;
  9544. rule.type = _this2.getType(rule);
  9545. series[z] = series[z] || [];
  9546. series[z].push({
  9547. rule,
  9548. value,
  9549. source,
  9550. field: z
  9551. });
  9552. });
  9553. });
  9554. var errorFields = {};
  9555. return asyncMap(series, options, function(data, doIt) {
  9556. var rule = data.rule;
  9557. var deep = (rule.type === "object" || rule.type === "array") && (typeof rule.fields === "object" || typeof rule.defaultField === "object");
  9558. deep = deep && (rule.required || !rule.required && data.value);
  9559. rule.field = data.field;
  9560. function addFullField(key, schema) {
  9561. return _extends({}, schema, {
  9562. fullField: rule.fullField + "." + key,
  9563. fullFields: rule.fullFields ? [].concat(rule.fullFields, [key]) : [key]
  9564. });
  9565. }
  9566. function cb(e) {
  9567. if (e === void 0) e = [];
  9568. var errorList = Array.isArray(e) ? e : [e];
  9569. if (!options.suppressWarning && errorList.length) Schema.warning("async-validator:", errorList);
  9570. if (errorList.length && rule.message !== void 0) errorList = [].concat(rule.message);
  9571. var filledErrors = errorList.map(complementError(rule, source));
  9572. if (options.first && filledErrors.length) {
  9573. errorFields[rule.field] = 1;
  9574. return doIt(filledErrors);
  9575. }
  9576. if (!deep) doIt(filledErrors);
  9577. else {
  9578. if (rule.required && !data.value) {
  9579. if (rule.message !== void 0) filledErrors = [].concat(rule.message).map(complementError(rule, source));
  9580. else if (options.error) filledErrors = [options.error(rule, format(options.messages.required, rule.field))];
  9581. return doIt(filledErrors);
  9582. }
  9583. var fieldsSchema = {};
  9584. if (rule.defaultField) Object.keys(data.value).map(function(key) {
  9585. fieldsSchema[key] = rule.defaultField;
  9586. });
  9587. fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);
  9588. var paredFieldsSchema = {};
  9589. Object.keys(fieldsSchema).forEach(function(field) {
  9590. var fieldSchema = fieldsSchema[field];
  9591. paredFieldsSchema[field] = (Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema]).map(addFullField.bind(null, field));
  9592. });
  9593. var schema = new Schema(paredFieldsSchema);
  9594. schema.messages(options.messages);
  9595. if (data.rule.options) {
  9596. data.rule.options.messages = options.messages;
  9597. data.rule.options.error = options.error;
  9598. }
  9599. schema.validate(data.value, data.rule.options || options, function(errs) {
  9600. var finalErrors = [];
  9601. if (filledErrors && filledErrors.length) finalErrors.push.apply(finalErrors, filledErrors);
  9602. if (errs && errs.length) finalErrors.push.apply(finalErrors, errs);
  9603. doIt(finalErrors.length ? finalErrors : null);
  9604. });
  9605. }
  9606. }
  9607. var res;
  9608. if (rule.asyncValidator) res = rule.asyncValidator(rule, data.value, cb, data.source, options);
  9609. else if (rule.validator) {
  9610. try {
  9611. res = rule.validator(rule, data.value, cb, data.source, options);
  9612. } catch (error) {
  9613. console.error == null || console.error(error);
  9614. if (!options.suppressValidatorError) setTimeout(function() {
  9615. throw error;
  9616. }, 0);
  9617. cb(error.message);
  9618. }
  9619. if (res === true) cb();
  9620. else if (res === false) cb(typeof rule.message === "function" ? rule.message(rule.fullField || rule.field) : rule.message || (rule.fullField || rule.field) + " fails");
  9621. else if (res instanceof Array) cb(res);
  9622. else if (res instanceof Error) cb(res.message);
  9623. }
  9624. if (res && res.then) res.then(function() {
  9625. return cb();
  9626. }, function(e) {
  9627. return cb(e);
  9628. });
  9629. }, function(results) {
  9630. complete(results);
  9631. }, source);
  9632. };
  9633. _proto.getType = function getType(rule) {
  9634. if (rule.type === void 0 && rule.pattern instanceof RegExp) rule.type = "pattern";
  9635. if (typeof rule.validator !== "function" && rule.type && !validators.hasOwnProperty(rule.type)) throw new Error(format("Unknown rule type %s", rule.type));
  9636. return rule.type || "string";
  9637. };
  9638. _proto.getValidationMethod = function getValidationMethod(rule) {
  9639. if (typeof rule.validator === "function") return rule.validator;
  9640. var keys = Object.keys(rule);
  9641. var messageIndex = keys.indexOf("message");
  9642. if (messageIndex !== -1) keys.splice(messageIndex, 1);
  9643. if (keys.length === 1 && keys[0] === "required") return validators.required;
  9644. return validators[this.getType(rule)] || void 0;
  9645. };
  9646. return Schema;
  9647. }();
  9648. Schema.register = function register(type, validator) {
  9649. if (typeof validator !== "function") throw new Error("Cannot register a validator by type, validator is not a function");
  9650. validators[type] = validator;
  9651. };
  9652. Schema.warning = warning;
  9653. Schema.messages = messages;
  9654. Schema.validators = validators;
  9655. //#endregion
  9656. //#region ../../packages/components/form/src/form-label-wrap.tsx
  9657. const COMPONENT_NAME$20 = "ElLabelWrap";
  9658. var form_label_wrap_default = /* @__PURE__ */ (0, vue.defineComponent)({
  9659. name: COMPONENT_NAME$20,
  9660. props: {
  9661. isAutoWidth: Boolean,
  9662. updateAll: Boolean
  9663. },
  9664. setup(props, { slots }) {
  9665. const formContext = (0, vue.inject)(formContextKey, void 0);
  9666. const formItemContext = (0, vue.inject)(formItemContextKey);
  9667. if (!formItemContext) throwError(COMPONENT_NAME$20, "usage: <el-form-item><label-wrap /></el-form-item>");
  9668. const ns = useNamespace("form");
  9669. const el = (0, vue.ref)();
  9670. const computedWidth = (0, vue.ref)(0);
  9671. const getLabelWidth = () => {
  9672. if (el.value?.firstElementChild) {
  9673. const width = window.getComputedStyle(el.value.firstElementChild).width;
  9674. return Math.ceil(Number.parseFloat(width));
  9675. } else return 0;
  9676. };
  9677. const updateLabelWidth = (action = "update") => {
  9678. (0, vue.nextTick)(() => {
  9679. if (slots.default && props.isAutoWidth) {
  9680. if (action === "update") computedWidth.value = getLabelWidth();
  9681. else if (action === "remove") formContext?.deregisterLabelWidth(computedWidth.value);
  9682. }
  9683. });
  9684. };
  9685. const updateLabelWidthFn = () => updateLabelWidth("update");
  9686. (0, vue.onMounted)(() => {
  9687. updateLabelWidthFn();
  9688. });
  9689. (0, vue.onBeforeUnmount)(() => {
  9690. updateLabelWidth("remove");
  9691. });
  9692. (0, vue.onUpdated)(() => updateLabelWidthFn());
  9693. (0, vue.watch)(computedWidth, (val, oldVal) => {
  9694. if (props.updateAll) formContext?.registerLabelWidth(val, oldVal);
  9695. });
  9696. useResizeObserver((0, vue.computed)(() => el.value?.firstElementChild ?? null), updateLabelWidthFn);
  9697. return () => {
  9698. if (!slots) return null;
  9699. const { isAutoWidth } = props;
  9700. if (isAutoWidth) {
  9701. const autoLabelWidth = formContext?.autoLabelWidth;
  9702. const hasLabel = formItemContext?.hasLabel;
  9703. const style = {};
  9704. if (hasLabel && autoLabelWidth && autoLabelWidth !== "auto") {
  9705. const marginWidth = Math.max(0, Number.parseInt(autoLabelWidth, 10) - computedWidth.value);
  9706. const marginPosition = (formItemContext.labelPosition || formContext.labelPosition) === "left" ? "marginRight" : "marginLeft";
  9707. if (marginWidth) style[marginPosition] = `${marginWidth}px`;
  9708. }
  9709. return (0, vue.createVNode)("div", {
  9710. "ref": el,
  9711. "class": [ns.be("item", "label-wrap")],
  9712. "style": style
  9713. }, [slots.default?.()]);
  9714. } else return (0, vue.createVNode)(vue.Fragment, { "ref": el }, [slots.default?.()]);
  9715. };
  9716. }
  9717. });
  9718. //#endregion
  9719. //#region ../../packages/components/form/src/form-item.vue?vue&type=script&setup=true&lang.ts
  9720. const _hoisted_1$79 = ["role", "aria-labelledby"];
  9721. var form_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  9722. name: "ElFormItem",
  9723. __name: "form-item",
  9724. props: formItemProps,
  9725. setup(__props, { expose: __expose }) {
  9726. const props = __props;
  9727. const slots = (0, vue.useSlots)();
  9728. const formContext = (0, vue.inject)(formContextKey, void 0);
  9729. const parentFormItemContext = (0, vue.inject)(formItemContextKey, void 0);
  9730. const _size = useFormSize(void 0, { formItem: false });
  9731. const ns = useNamespace("form-item");
  9732. const labelId = useId().value;
  9733. const inputIds = (0, vue.ref)([]);
  9734. const validateState = (0, vue.ref)("");
  9735. const validateStateDebounced = refDebounced(validateState, 100);
  9736. const validateMessage = (0, vue.ref)("");
  9737. const formItemRef = (0, vue.ref)();
  9738. let initialValue = void 0;
  9739. let isResettingField = false;
  9740. const labelPosition = (0, vue.computed)(() => props.labelPosition || formContext?.labelPosition);
  9741. const labelStyle = (0, vue.computed)(() => {
  9742. if (labelPosition.value === "top") return {};
  9743. return { width: addUnit(props.labelWidth ?? formContext?.labelWidth) };
  9744. });
  9745. const contentStyle = (0, vue.computed)(() => {
  9746. if (labelPosition.value === "top" || formContext?.inline) return {};
  9747. if (!props.label && !props.labelWidth && isNested) return {};
  9748. const labelWidth = addUnit(props.labelWidth ?? formContext?.labelWidth);
  9749. if (!props.label && !slots.label) return { marginLeft: labelWidth };
  9750. return {};
  9751. });
  9752. const formItemClasses = (0, vue.computed)(() => [
  9753. ns.b(),
  9754. ns.m(_size.value),
  9755. ns.is("error", validateState.value === "error"),
  9756. ns.is("validating", validateState.value === "validating"),
  9757. ns.is("success", validateState.value === "success"),
  9758. ns.is("required", isRequired.value || props.required),
  9759. ns.is("no-asterisk", formContext?.hideRequiredAsterisk),
  9760. formContext?.requireAsteriskPosition === "right" ? "asterisk-right" : "asterisk-left",
  9761. {
  9762. [ns.m("feedback")]: formContext?.statusIcon,
  9763. [ns.m(`label-${labelPosition.value}`)]: labelPosition.value
  9764. }
  9765. ]);
  9766. const _inlineMessage = (0, vue.computed)(() => isBoolean(props.inlineMessage) ? props.inlineMessage : formContext?.inlineMessage || false);
  9767. const validateClasses = (0, vue.computed)(() => [ns.e("error"), { [ns.em("error", "inline")]: _inlineMessage.value }]);
  9768. const propString = (0, vue.computed)(() => {
  9769. if (!props.prop) return "";
  9770. return isArray$1(props.prop) ? props.prop.join(".") : props.prop;
  9771. });
  9772. const hasLabel = (0, vue.computed)(() => {
  9773. return !!(props.label || slots.label);
  9774. });
  9775. const labelFor = (0, vue.computed)(() => {
  9776. return props.for ?? (inputIds.value.length === 1 ? inputIds.value[0] : void 0);
  9777. });
  9778. const isGroup = (0, vue.computed)(() => {
  9779. return !labelFor.value && hasLabel.value;
  9780. });
  9781. const isNested = !!parentFormItemContext;
  9782. const fieldValue = (0, vue.computed)(() => {
  9783. const model = formContext?.model;
  9784. if (!model || !props.prop) return;
  9785. return getProp(model, props.prop).value;
  9786. });
  9787. const normalizedRules = (0, vue.computed)(() => {
  9788. const { required } = props;
  9789. const rules = [];
  9790. if (props.rules) rules.push(...castArray$1(props.rules));
  9791. const formRules = formContext?.rules;
  9792. if (formRules && props.prop) {
  9793. const _rules = getProp(formRules, props.prop).value;
  9794. if (_rules) rules.push(...castArray$1(_rules));
  9795. }
  9796. if (required !== void 0) {
  9797. const requiredRules = rules.map((rule, i) => [rule, i]).filter(([rule]) => "required" in rule);
  9798. if (requiredRules.length > 0) for (const [rule, i] of requiredRules) {
  9799. if (rule.required === required) continue;
  9800. rules[i] = {
  9801. ...rule,
  9802. required
  9803. };
  9804. }
  9805. else rules.push({ required });
  9806. }
  9807. return rules;
  9808. });
  9809. const validateEnabled = (0, vue.computed)(() => normalizedRules.value.length > 0);
  9810. const getFilteredRule = (trigger) => {
  9811. return normalizedRules.value.filter((rule) => {
  9812. if (!rule.trigger || !trigger) return true;
  9813. if (isArray$1(rule.trigger)) return rule.trigger.includes(trigger);
  9814. else return rule.trigger === trigger;
  9815. }).map(({ trigger, ...rule }) => rule);
  9816. };
  9817. const isRequired = (0, vue.computed)(() => normalizedRules.value.some((rule) => rule.required));
  9818. const shouldShowError = (0, vue.computed)(() => validateStateDebounced.value === "error" && props.showMessage && (formContext?.showMessage ?? true));
  9819. const currentLabel = (0, vue.computed)(() => `${props.label || ""}${formContext?.labelSuffix || ""}`);
  9820. const setValidationState = (state) => {
  9821. validateState.value = state;
  9822. };
  9823. const onValidationFailed = (error) => {
  9824. const { errors, fields } = error;
  9825. if (!errors || !fields) console.error(error);
  9826. setValidationState("error");
  9827. validateMessage.value = errors ? errors?.[0]?.message ?? `${props.prop} is required` : "";
  9828. formContext?.emit("validate", props.prop, false, validateMessage.value);
  9829. };
  9830. const onValidationSucceeded = () => {
  9831. setValidationState("success");
  9832. formContext?.emit("validate", props.prop, true, "");
  9833. };
  9834. const doValidate = async (rules) => {
  9835. const modelName = propString.value;
  9836. return new Schema({ [modelName]: rules }).validate({ [modelName]: fieldValue.value }, { firstFields: true }).then(() => {
  9837. onValidationSucceeded();
  9838. return true;
  9839. }).catch((err) => {
  9840. onValidationFailed(err);
  9841. return Promise.reject(err);
  9842. });
  9843. };
  9844. const validate = async (trigger, callback) => {
  9845. if (isResettingField || !props.prop) return false;
  9846. const hasCallback = isFunction$1(callback);
  9847. if (!validateEnabled.value) {
  9848. callback?.(false);
  9849. return false;
  9850. }
  9851. const rules = getFilteredRule(trigger);
  9852. if (rules.length === 0) {
  9853. callback?.(true);
  9854. return true;
  9855. }
  9856. setValidationState("validating");
  9857. return doValidate(rules).then(() => {
  9858. callback?.(true);
  9859. return true;
  9860. }).catch((err) => {
  9861. const { fields } = err;
  9862. callback?.(false, fields);
  9863. return hasCallback ? false : Promise.reject(fields);
  9864. });
  9865. };
  9866. const clearValidate = () => {
  9867. setValidationState("");
  9868. validateMessage.value = "";
  9869. isResettingField = false;
  9870. };
  9871. const resetField = async () => {
  9872. const model = formContext?.model;
  9873. if (!model || !props.prop) return;
  9874. const computedValue = getProp(model, props.prop);
  9875. isResettingField = true;
  9876. computedValue.value = cloneDeep(initialValue);
  9877. await (0, vue.nextTick)();
  9878. clearValidate();
  9879. isResettingField = false;
  9880. };
  9881. const addInputId = (id) => {
  9882. if (!inputIds.value.includes(id)) inputIds.value.push(id);
  9883. };
  9884. const removeInputId = (id) => {
  9885. inputIds.value = inputIds.value.filter((listId) => listId !== id);
  9886. };
  9887. const setInitialValue = (value) => {
  9888. initialValue = cloneDeep(value);
  9889. };
  9890. const getInitialValue = () => initialValue;
  9891. (0, vue.watch)(() => props.error, (val) => {
  9892. validateMessage.value = val || "";
  9893. setValidationState(val ? "error" : "");
  9894. }, { immediate: true });
  9895. (0, vue.watch)(() => props.validateStatus, (val) => setValidationState(val || ""));
  9896. const context = (0, vue.reactive)({
  9897. ...(0, vue.toRefs)(props),
  9898. $el: formItemRef,
  9899. size: _size,
  9900. validateMessage,
  9901. validateState,
  9902. labelId,
  9903. inputIds,
  9904. isGroup,
  9905. hasLabel,
  9906. fieldValue,
  9907. addInputId,
  9908. removeInputId,
  9909. resetField,
  9910. clearValidate,
  9911. validate,
  9912. propString,
  9913. setInitialValue,
  9914. getInitialValue
  9915. });
  9916. (0, vue.provide)(formItemContextKey, context);
  9917. (0, vue.watch)(propString, (newPropString, oldPropString) => {
  9918. if (!formContext || !oldPropString) return;
  9919. formContext.removeField(context, oldPropString);
  9920. if (newPropString) {
  9921. setInitialValue(fieldValue.value);
  9922. formContext.addField(context);
  9923. }
  9924. });
  9925. (0, vue.onMounted)(() => {
  9926. if (props.prop) {
  9927. setInitialValue(fieldValue.value);
  9928. formContext?.addField(context);
  9929. }
  9930. });
  9931. (0, vue.onBeforeUnmount)(() => {
  9932. formContext?.removeField(context);
  9933. });
  9934. __expose({
  9935. size: _size,
  9936. validateMessage,
  9937. validateState,
  9938. validate,
  9939. clearValidate,
  9940. resetField,
  9941. setInitialValue
  9942. });
  9943. return (_ctx, _cache) => {
  9944. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  9945. ref_key: "formItemRef",
  9946. ref: formItemRef,
  9947. class: (0, vue.normalizeClass)(formItemClasses.value),
  9948. role: isGroup.value ? "group" : void 0,
  9949. "aria-labelledby": isGroup.value ? (0, vue.unref)(labelId) : void 0
  9950. }, [(0, vue.createVNode)((0, vue.unref)(form_label_wrap_default), {
  9951. "is-auto-width": labelStyle.value.width === "auto",
  9952. "update-all": (0, vue.unref)(formContext)?.labelWidth === "auto"
  9953. }, {
  9954. default: (0, vue.withCtx)(() => [!!(__props.label || _ctx.$slots.label) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(labelFor.value ? "label" : "div"), {
  9955. key: 0,
  9956. id: (0, vue.unref)(labelId),
  9957. for: labelFor.value,
  9958. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("label")),
  9959. style: (0, vue.normalizeStyle)(labelStyle.value)
  9960. }, {
  9961. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "label", { label: currentLabel.value }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(currentLabel.value), 1)])]),
  9962. _: 3
  9963. }, 8, [
  9964. "id",
  9965. "for",
  9966. "class",
  9967. "style"
  9968. ])) : (0, vue.createCommentVNode)("v-if", true)]),
  9969. _: 3
  9970. }, 8, ["is-auto-width", "update-all"]), (0, vue.createElementVNode)("div", {
  9971. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")),
  9972. style: (0, vue.normalizeStyle)(contentStyle.value)
  9973. }, [(0, vue.renderSlot)(_ctx.$slots, "default"), (0, vue.createVNode)(vue.TransitionGroup, { name: `${(0, vue.unref)(ns).namespace.value}-zoom-in-top` }, {
  9974. default: (0, vue.withCtx)(() => [shouldShowError.value ? (0, vue.renderSlot)(_ctx.$slots, "error", {
  9975. key: 0,
  9976. error: validateMessage.value
  9977. }, () => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(validateClasses.value) }, (0, vue.toDisplayString)(validateMessage.value), 3)]) : (0, vue.createCommentVNode)("v-if", true)]),
  9978. _: 3
  9979. }, 8, ["name"])], 6)], 10, _hoisted_1$79);
  9980. };
  9981. }
  9982. });
  9983. //#endregion
  9984. //#region ../../packages/components/form/src/form-item.vue
  9985. var form_item_default = form_item_vue_vue_type_script_setup_true_lang_default;
  9986. //#endregion
  9987. //#region ../../packages/components/form/index.ts
  9988. const ElForm = withInstall(form_default, { FormItem: form_item_default });
  9989. const ElFormItem = withNoopInstall(form_item_default);
  9990. //#endregion
  9991. //#region ../../packages/components/popper/src/utils.ts
  9992. const buildPopperOptions = (props, modifiers = []) => {
  9993. const { placement, strategy, popperOptions } = props;
  9994. const options = {
  9995. placement,
  9996. strategy,
  9997. ...popperOptions,
  9998. modifiers: [...genModifiers(props), ...modifiers]
  9999. };
  10000. deriveExtraModifiers(options, popperOptions?.modifiers);
  10001. return options;
  10002. };
  10003. const unwrapMeasurableEl = ($el) => {
  10004. if (!isClient) return;
  10005. return unrefElement($el);
  10006. };
  10007. function genModifiers(options) {
  10008. const { offset, gpuAcceleration, fallbackPlacements } = options;
  10009. return [
  10010. {
  10011. name: "offset",
  10012. options: { offset: [0, offset ?? 12] }
  10013. },
  10014. {
  10015. name: "preventOverflow",
  10016. options: { padding: {
  10017. top: 0,
  10018. bottom: 0,
  10019. left: 0,
  10020. right: 0
  10021. } }
  10022. },
  10023. {
  10024. name: "flip",
  10025. options: {
  10026. padding: 5,
  10027. fallbackPlacements
  10028. }
  10029. },
  10030. {
  10031. name: "computeStyles",
  10032. options: { gpuAcceleration }
  10033. }
  10034. ];
  10035. }
  10036. function deriveExtraModifiers(options, modifiers) {
  10037. if (modifiers) options.modifiers = [...options.modifiers, ...modifiers ?? []];
  10038. }
  10039. //#endregion
  10040. //#region ../../packages/components/popper/src/composables/use-content.ts
  10041. const DEFAULT_ARROW_OFFSET = 0;
  10042. const usePopperContent = (props) => {
  10043. const { popperInstanceRef, contentRef, triggerRef, role } = (0, vue.inject)(POPPER_INJECTION_KEY, void 0);
  10044. const arrowRef = (0, vue.ref)();
  10045. const arrowOffset = (0, vue.computed)(() => props.arrowOffset);
  10046. const eventListenerModifier = (0, vue.computed)(() => {
  10047. return {
  10048. name: "eventListeners",
  10049. enabled: !!props.visible
  10050. };
  10051. });
  10052. const arrowModifier = (0, vue.computed)(() => {
  10053. const arrowEl = (0, vue.unref)(arrowRef);
  10054. const offset = (0, vue.unref)(arrowOffset) ?? DEFAULT_ARROW_OFFSET;
  10055. return {
  10056. name: "arrow",
  10057. enabled: !isUndefined$1(arrowEl),
  10058. options: {
  10059. element: arrowEl,
  10060. padding: offset
  10061. }
  10062. };
  10063. });
  10064. const options = (0, vue.computed)(() => {
  10065. return {
  10066. onFirstUpdate: () => {
  10067. update();
  10068. },
  10069. ...buildPopperOptions(props, [(0, vue.unref)(arrowModifier), (0, vue.unref)(eventListenerModifier)])
  10070. };
  10071. });
  10072. const computedReference = (0, vue.computed)(() => unwrapMeasurableEl(props.referenceEl) || (0, vue.unref)(triggerRef));
  10073. const { attributes, state, styles, update, forceUpdate, instanceRef } = usePopper(computedReference, contentRef, options);
  10074. (0, vue.watch)(instanceRef, (instance) => popperInstanceRef.value = instance, { flush: "sync" });
  10075. (0, vue.onMounted)(() => {
  10076. (0, vue.watch)(() => (0, vue.unref)(computedReference)?.getBoundingClientRect?.(), () => {
  10077. update();
  10078. });
  10079. });
  10080. let stopResizeObserver;
  10081. (0, vue.watch)(() => props.visible, (visible) => {
  10082. stopResizeObserver?.();
  10083. stopResizeObserver = void 0;
  10084. if (visible) stopResizeObserver = useResizeObserver(contentRef, update).stop;
  10085. });
  10086. (0, vue.onBeforeUnmount)(() => {
  10087. popperInstanceRef.value = void 0;
  10088. stopResizeObserver?.();
  10089. stopResizeObserver = void 0;
  10090. });
  10091. return {
  10092. attributes,
  10093. arrowRef,
  10094. contentRef,
  10095. instanceRef,
  10096. state,
  10097. styles,
  10098. role,
  10099. forceUpdate,
  10100. update
  10101. };
  10102. };
  10103. //#endregion
  10104. //#region ../../packages/components/popper/src/composables/use-content-dom.ts
  10105. const usePopperContentDOM = (props, { attributes, styles, role }) => {
  10106. const { nextZIndex } = useZIndex();
  10107. const ns = useNamespace("popper");
  10108. const contentAttrs = (0, vue.computed)(() => (0, vue.unref)(attributes).popper);
  10109. const contentZIndex = (0, vue.ref)(isNumber(props.zIndex) ? props.zIndex : nextZIndex());
  10110. const contentClass = (0, vue.computed)(() => [
  10111. ns.b(),
  10112. ns.is("pure", props.pure),
  10113. ns.is(props.effect),
  10114. props.popperClass
  10115. ]);
  10116. const contentStyle = (0, vue.computed)(() => {
  10117. return [
  10118. { zIndex: (0, vue.unref)(contentZIndex) },
  10119. (0, vue.unref)(styles).popper,
  10120. props.popperStyle || {}
  10121. ];
  10122. });
  10123. const ariaModal = (0, vue.computed)(() => role.value === "dialog" ? "false" : void 0);
  10124. const arrowStyle = (0, vue.computed)(() => (0, vue.unref)(styles).arrow || {});
  10125. const updateZIndex = () => {
  10126. contentZIndex.value = isNumber(props.zIndex) ? props.zIndex : nextZIndex();
  10127. };
  10128. return {
  10129. ariaModal,
  10130. arrowStyle,
  10131. contentAttrs,
  10132. contentClass,
  10133. contentStyle,
  10134. contentZIndex,
  10135. updateZIndex
  10136. };
  10137. };
  10138. //#endregion
  10139. //#region ../../packages/components/popper/src/composables/use-focus-trap.ts
  10140. const usePopperContentFocusTrap = (props, emit) => {
  10141. const trapped = (0, vue.ref)(false);
  10142. const focusStartRef = (0, vue.ref)();
  10143. const onFocusAfterTrapped = () => {
  10144. emit("focus");
  10145. };
  10146. const onFocusAfterReleased = (event) => {
  10147. if (event.detail?.focusReason !== "pointer") {
  10148. focusStartRef.value = "first";
  10149. emit("blur");
  10150. }
  10151. };
  10152. const onFocusInTrap = (event) => {
  10153. if (props.visible && !trapped.value) {
  10154. if (event.target) focusStartRef.value = event.target;
  10155. trapped.value = true;
  10156. }
  10157. };
  10158. const onFocusoutPrevented = (event) => {
  10159. if (!props.trapping) {
  10160. if (event.detail.focusReason === "pointer") event.preventDefault();
  10161. trapped.value = false;
  10162. }
  10163. };
  10164. const onReleaseRequested = () => {
  10165. trapped.value = false;
  10166. emit("close");
  10167. };
  10168. (0, vue.onBeforeUnmount)(() => {
  10169. focusStartRef.value = void 0;
  10170. });
  10171. return {
  10172. focusStartRef,
  10173. trapped,
  10174. onFocusAfterReleased,
  10175. onFocusAfterTrapped,
  10176. onFocusInTrap,
  10177. onFocusoutPrevented,
  10178. onReleaseRequested
  10179. };
  10180. };
  10181. //#endregion
  10182. //#region ../../packages/components/popper/src/content.vue?vue&type=script&setup=true&lang.ts
  10183. var content_vue_vue_type_script_setup_true_lang_default$2 = /* @__PURE__ */ (0, vue.defineComponent)({
  10184. name: "ElPopperContent",
  10185. __name: "content",
  10186. props: popperContentProps,
  10187. emits: popperContentEmits,
  10188. setup(__props, { expose: __expose, emit: __emit }) {
  10189. const emit = __emit;
  10190. const props = __props;
  10191. const { focusStartRef, trapped, onFocusAfterReleased, onFocusAfterTrapped, onFocusInTrap, onFocusoutPrevented, onReleaseRequested } = usePopperContentFocusTrap(props, emit);
  10192. const { attributes, arrowRef, contentRef, styles, instanceRef, role, update } = usePopperContent(props);
  10193. const { ariaModal, arrowStyle, contentAttrs, contentClass, contentStyle, updateZIndex } = usePopperContentDOM(props, {
  10194. styles,
  10195. attributes,
  10196. role
  10197. });
  10198. const formItemContext = (0, vue.inject)(formItemContextKey, void 0);
  10199. (0, vue.provide)(POPPER_CONTENT_INJECTION_KEY, {
  10200. arrowStyle,
  10201. arrowRef
  10202. });
  10203. if (formItemContext) (0, vue.provide)(formItemContextKey, {
  10204. ...formItemContext,
  10205. addInputId: NOOP,
  10206. removeInputId: NOOP
  10207. });
  10208. let triggerTargetAriaStopWatch = void 0;
  10209. const updatePopper = (shouldUpdateZIndex = true) => {
  10210. update();
  10211. shouldUpdateZIndex && updateZIndex();
  10212. };
  10213. const togglePopperAlive = () => {
  10214. updatePopper(false);
  10215. if (props.visible && props.focusOnShow) trapped.value = true;
  10216. else if (props.visible === false) trapped.value = false;
  10217. };
  10218. (0, vue.onMounted)(() => {
  10219. (0, vue.watch)(() => props.triggerTargetEl, (triggerTargetEl, prevTriggerTargetEl) => {
  10220. triggerTargetAriaStopWatch?.();
  10221. triggerTargetAriaStopWatch = void 0;
  10222. const el = (0, vue.unref)(triggerTargetEl || contentRef.value);
  10223. const prevEl = (0, vue.unref)(prevTriggerTargetEl || contentRef.value);
  10224. if (isElement$1(el)) triggerTargetAriaStopWatch = (0, vue.watch)([
  10225. role,
  10226. () => props.ariaLabel,
  10227. ariaModal,
  10228. () => props.id
  10229. ], (watches) => {
  10230. [
  10231. "role",
  10232. "aria-label",
  10233. "aria-modal",
  10234. "id"
  10235. ].forEach((key, idx) => {
  10236. isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]);
  10237. });
  10238. }, { immediate: true });
  10239. if (prevEl !== el && isElement$1(prevEl)) [
  10240. "role",
  10241. "aria-label",
  10242. "aria-modal",
  10243. "id"
  10244. ].forEach((key) => {
  10245. prevEl.removeAttribute(key);
  10246. });
  10247. }, { immediate: true });
  10248. (0, vue.watch)(() => props.visible, togglePopperAlive, { immediate: true });
  10249. });
  10250. (0, vue.onBeforeUnmount)(() => {
  10251. triggerTargetAriaStopWatch?.();
  10252. triggerTargetAriaStopWatch = void 0;
  10253. contentRef.value = void 0;
  10254. });
  10255. __expose({
  10256. popperContentRef: contentRef,
  10257. popperInstanceRef: instanceRef,
  10258. updatePopper,
  10259. contentStyle
  10260. });
  10261. return (_ctx, _cache) => {
  10262. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
  10263. ref_key: "contentRef",
  10264. ref: contentRef
  10265. }, (0, vue.unref)(contentAttrs), {
  10266. style: (0, vue.unref)(contentStyle),
  10267. class: (0, vue.unref)(contentClass),
  10268. tabindex: "-1",
  10269. onMouseenter: _cache[0] || (_cache[0] = (e) => _ctx.$emit("mouseenter", e)),
  10270. onMouseleave: _cache[1] || (_cache[1] = (e) => _ctx.$emit("mouseleave", e))
  10271. }), [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
  10272. loop: __props.loop,
  10273. trapped: (0, vue.unref)(trapped),
  10274. "trap-on-focus-in": true,
  10275. "focus-trap-el": (0, vue.unref)(contentRef),
  10276. "focus-start-el": (0, vue.unref)(focusStartRef),
  10277. onFocusAfterTrapped: (0, vue.unref)(onFocusAfterTrapped),
  10278. onFocusAfterReleased: (0, vue.unref)(onFocusAfterReleased),
  10279. onFocusin: (0, vue.unref)(onFocusInTrap),
  10280. onFocusoutPrevented: (0, vue.unref)(onFocusoutPrevented),
  10281. onReleaseRequested: (0, vue.unref)(onReleaseRequested)
  10282. }, {
  10283. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  10284. _: 3
  10285. }, 8, [
  10286. "loop",
  10287. "trapped",
  10288. "focus-trap-el",
  10289. "focus-start-el",
  10290. "onFocusAfterTrapped",
  10291. "onFocusAfterReleased",
  10292. "onFocusin",
  10293. "onFocusoutPrevented",
  10294. "onReleaseRequested"
  10295. ])], 16);
  10296. };
  10297. }
  10298. });
  10299. //#endregion
  10300. //#region ../../packages/components/popper/src/content.vue
  10301. var content_default = content_vue_vue_type_script_setup_true_lang_default$2;
  10302. //#endregion
  10303. //#region ../../packages/components/popper/index.ts
  10304. const ElPopper = withInstall(popper_default);
  10305. //#endregion
  10306. //#region ../../packages/components/tooltip/src/content.ts
  10307. const useTooltipContentPropsDefaults = {
  10308. ...useDelayedTogglePropsDefaults,
  10309. ...popperContentPropsDefaults,
  10310. content: "",
  10311. visible: null,
  10312. teleported: true
  10313. };
  10314. const useTooltipContentProps = buildProps({
  10315. ...useDelayedToggleProps,
  10316. ...popperContentProps,
  10317. appendTo: { type: definePropType([String, Object]) },
  10318. content: {
  10319. type: String,
  10320. default: ""
  10321. },
  10322. rawContent: Boolean,
  10323. persistent: Boolean,
  10324. visible: {
  10325. type: definePropType(Boolean),
  10326. default: null
  10327. },
  10328. transition: String,
  10329. teleported: {
  10330. type: Boolean,
  10331. default: true
  10332. },
  10333. disabled: Boolean,
  10334. ...useAriaProps(["ariaLabel"])
  10335. });
  10336. //#endregion
  10337. //#region ../../packages/components/tooltip/src/trigger.ts
  10338. const useTooltipTriggerPropsDefaults = {
  10339. trigger: "hover",
  10340. triggerKeys: () => [
  10341. EVENT_CODE.enter,
  10342. EVENT_CODE.numpadEnter,
  10343. EVENT_CODE.space
  10344. ]
  10345. };
  10346. const useTooltipTriggerProps = buildProps({
  10347. ...popperTriggerProps,
  10348. disabled: Boolean,
  10349. trigger: {
  10350. type: definePropType([String, Array]),
  10351. default: "hover"
  10352. },
  10353. triggerKeys: {
  10354. type: definePropType(Array),
  10355. default: () => [
  10356. EVENT_CODE.enter,
  10357. EVENT_CODE.numpadEnter,
  10358. EVENT_CODE.space
  10359. ]
  10360. },
  10361. focusOnTarget: Boolean
  10362. });
  10363. //#endregion
  10364. //#region ../../packages/components/tooltip/src/tooltip.ts
  10365. const { useModelToggleProps: useTooltipModelToggleProps, useModelToggleEmits: useTooltipModelToggleEmits, useModelToggle: useTooltipModelToggle } = createModelToggleComposable("visible");
  10366. const useTooltipProps = buildProps({
  10367. ...popperProps,
  10368. ...useTooltipModelToggleProps,
  10369. ...useTooltipContentProps,
  10370. ...useTooltipTriggerProps,
  10371. ...popperArrowProps,
  10372. showArrow: {
  10373. type: Boolean,
  10374. default: true
  10375. }
  10376. });
  10377. const tooltipEmits = [
  10378. ...useTooltipModelToggleEmits,
  10379. "before-show",
  10380. "before-hide",
  10381. "show",
  10382. "hide",
  10383. "open",
  10384. "close"
  10385. ];
  10386. //#endregion
  10387. //#region ../../packages/components/tooltip/src/constants.ts
  10388. const TOOLTIP_INJECTION_KEY = Symbol("elTooltip");
  10389. //#endregion
  10390. //#region ../../packages/components/tooltip/src/utils.ts
  10391. const isTriggerType = (trigger, type) => {
  10392. if (isArray$1(trigger)) return trigger.includes(type);
  10393. return trigger === type;
  10394. };
  10395. const whenTrigger = (trigger, type, handler) => {
  10396. return (e) => {
  10397. isTriggerType((0, vue.unref)(trigger), type) && handler(e);
  10398. };
  10399. };
  10400. //#endregion
  10401. //#region ../../packages/components/tooltip/src/trigger.vue?vue&type=script&setup=true&lang.ts
  10402. var trigger_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  10403. name: "ElTooltipTrigger",
  10404. __name: "trigger",
  10405. props: useTooltipTriggerProps,
  10406. setup(__props, { expose: __expose }) {
  10407. const props = __props;
  10408. const ns = useNamespace("tooltip");
  10409. const { controlled, id, open, onOpen, onClose, onToggle } = (0, vue.inject)(TOOLTIP_INJECTION_KEY, void 0);
  10410. const triggerRef = (0, vue.ref)(null);
  10411. const stopWhenControlledOrDisabled = () => {
  10412. if ((0, vue.unref)(controlled) || props.disabled) return true;
  10413. };
  10414. const trigger = (0, vue.toRef)(props, "trigger");
  10415. const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", (e) => {
  10416. onOpen(e);
  10417. if (props.focusOnTarget && e.target) (0, vue.nextTick)(() => {
  10418. focusElement(e.target, { preventScroll: true });
  10419. });
  10420. }));
  10421. const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onClose));
  10422. const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "click", (e) => {
  10423. if (e.button === 0) onToggle(e);
  10424. }));
  10425. const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onOpen));
  10426. const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onClose));
  10427. const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "contextmenu", (e) => {
  10428. e.preventDefault();
  10429. onToggle(e);
  10430. }));
  10431. const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => {
  10432. const code = getEventCode(e);
  10433. if (props.triggerKeys.includes(code)) {
  10434. e.preventDefault();
  10435. onToggle(e);
  10436. }
  10437. });
  10438. __expose({ triggerRef });
  10439. return (_ctx, _cache) => {
  10440. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(trigger_default), {
  10441. id: (0, vue.unref)(id),
  10442. "virtual-ref": __props.virtualRef,
  10443. open: (0, vue.unref)(open),
  10444. "virtual-triggering": __props.virtualTriggering,
  10445. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("trigger")),
  10446. onBlur: (0, vue.unref)(onBlur),
  10447. onClick: (0, vue.unref)(onClick),
  10448. onContextmenu: (0, vue.unref)(onContextMenu),
  10449. onFocus: (0, vue.unref)(onFocus),
  10450. onMouseenter: (0, vue.unref)(onMouseenter),
  10451. onMouseleave: (0, vue.unref)(onMouseleave),
  10452. onKeydown: (0, vue.unref)(onKeydown)
  10453. }, {
  10454. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  10455. _: 3
  10456. }, 8, [
  10457. "id",
  10458. "virtual-ref",
  10459. "open",
  10460. "virtual-triggering",
  10461. "class",
  10462. "onBlur",
  10463. "onClick",
  10464. "onContextmenu",
  10465. "onFocus",
  10466. "onMouseenter",
  10467. "onMouseleave",
  10468. "onKeydown"
  10469. ]);
  10470. };
  10471. }
  10472. });
  10473. //#endregion
  10474. //#region ../../packages/components/tooltip/src/trigger.vue
  10475. var trigger_default$1 = trigger_vue_vue_type_script_setup_true_lang_default;
  10476. //#endregion
  10477. //#region ../../packages/components/tooltip/src/content.vue?vue&type=script&setup=true&lang.ts
  10478. var content_vue_vue_type_script_setup_true_lang_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
  10479. name: "ElTooltipContent",
  10480. inheritAttrs: false,
  10481. __name: "content",
  10482. props: useTooltipContentProps,
  10483. setup(__props, { expose: __expose }) {
  10484. const props = __props;
  10485. const { selector } = usePopperContainerId();
  10486. const ns = useNamespace("tooltip");
  10487. const contentRef = (0, vue.ref)();
  10488. const popperContentRef = computedEager(() => contentRef.value?.popperContentRef);
  10489. let stopHandle;
  10490. const { controlled, id, open, trigger, onClose, onOpen, onShow, onHide, onBeforeShow, onBeforeHide } = (0, vue.inject)(TOOLTIP_INJECTION_KEY, void 0);
  10491. const transitionClass = (0, vue.computed)(() => {
  10492. return props.transition || `${ns.namespace.value}-fade-in-linear`;
  10493. });
  10494. const persistentRef = (0, vue.computed)(() => {
  10495. return props.persistent;
  10496. });
  10497. (0, vue.onBeforeUnmount)(() => {
  10498. stopHandle?.();
  10499. });
  10500. const shouldRender = (0, vue.computed)(() => {
  10501. return (0, vue.unref)(persistentRef) ? true : (0, vue.unref)(open);
  10502. });
  10503. const shouldShow = (0, vue.computed)(() => {
  10504. return props.disabled ? false : (0, vue.unref)(open);
  10505. });
  10506. const appendTo = (0, vue.computed)(() => {
  10507. return props.appendTo || selector.value;
  10508. });
  10509. const contentStyle = (0, vue.computed)(() => props.style ?? {});
  10510. const ariaHidden = (0, vue.ref)(true);
  10511. const onTransitionLeave = () => {
  10512. onHide();
  10513. isFocusInsideContent() && focusElement(document.body, { preventScroll: true });
  10514. ariaHidden.value = true;
  10515. };
  10516. const stopWhenControlled = () => {
  10517. if ((0, vue.unref)(controlled)) return true;
  10518. };
  10519. const onContentEnter = composeEventHandlers(stopWhenControlled, () => {
  10520. if (props.enterable && isTriggerType((0, vue.unref)(trigger), "hover")) onOpen();
  10521. });
  10522. const onContentLeave = composeEventHandlers(stopWhenControlled, () => {
  10523. if (isTriggerType((0, vue.unref)(trigger), "hover")) onClose();
  10524. });
  10525. const onBeforeEnter = () => {
  10526. contentRef.value?.updatePopper?.();
  10527. onBeforeShow?.();
  10528. };
  10529. const onBeforeLeave = () => {
  10530. onBeforeHide?.();
  10531. };
  10532. const onAfterShow = () => {
  10533. onShow();
  10534. };
  10535. const onBlur = () => {
  10536. if (!props.virtualTriggering) onClose();
  10537. };
  10538. const isFocusInsideContent = (event) => {
  10539. const popperContent = contentRef.value?.popperContentRef;
  10540. const activeElement = event?.relatedTarget || document.activeElement;
  10541. return popperContent?.contains(activeElement);
  10542. };
  10543. (0, vue.watch)(() => (0, vue.unref)(open), (val) => {
  10544. if (!val) stopHandle?.();
  10545. else {
  10546. ariaHidden.value = false;
  10547. stopHandle = onClickOutside(popperContentRef, () => {
  10548. if ((0, vue.unref)(controlled)) return;
  10549. if (castArray((0, vue.unref)(trigger)).every((item) => {
  10550. return item !== "hover" && item !== "focus";
  10551. })) onClose();
  10552. }, { detectIframe: true });
  10553. }
  10554. }, { flush: "post" });
  10555. __expose({
  10556. contentRef,
  10557. isFocusInsideContent
  10558. });
  10559. return (_ctx, _cache) => {
  10560. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Teleport, {
  10561. disabled: !__props.teleported,
  10562. to: appendTo.value
  10563. }, [shouldRender.value || !ariaHidden.value ? ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
  10564. key: 0,
  10565. name: transitionClass.value,
  10566. appear: !persistentRef.value,
  10567. onAfterLeave: onTransitionLeave,
  10568. onBeforeEnter,
  10569. onAfterEnter: onAfterShow,
  10570. onBeforeLeave,
  10571. persisted: ""
  10572. }, {
  10573. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(content_default), (0, vue.mergeProps)({
  10574. id: (0, vue.unref)(id),
  10575. ref_key: "contentRef",
  10576. ref: contentRef
  10577. }, _ctx.$attrs, {
  10578. "aria-label": __props.ariaLabel,
  10579. "aria-hidden": ariaHidden.value,
  10580. "boundaries-padding": __props.boundariesPadding,
  10581. "fallback-placements": __props.fallbackPlacements,
  10582. "gpu-acceleration": __props.gpuAcceleration,
  10583. offset: __props.offset,
  10584. placement: __props.placement,
  10585. "popper-options": __props.popperOptions,
  10586. "arrow-offset": __props.arrowOffset,
  10587. strategy: __props.strategy,
  10588. effect: __props.effect,
  10589. enterable: __props.enterable,
  10590. pure: __props.pure,
  10591. "popper-class": __props.popperClass,
  10592. "popper-style": [__props.popperStyle, contentStyle.value],
  10593. "reference-el": __props.referenceEl,
  10594. "trigger-target-el": __props.triggerTargetEl,
  10595. visible: shouldShow.value,
  10596. "z-index": __props.zIndex,
  10597. loop: __props.loop,
  10598. onMouseenter: (0, vue.unref)(onContentEnter),
  10599. onMouseleave: (0, vue.unref)(onContentLeave),
  10600. onBlur,
  10601. onClose: (0, vue.unref)(onClose)
  10602. }), {
  10603. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  10604. _: 3
  10605. }, 16, [
  10606. "id",
  10607. "aria-label",
  10608. "aria-hidden",
  10609. "boundaries-padding",
  10610. "fallback-placements",
  10611. "gpu-acceleration",
  10612. "offset",
  10613. "placement",
  10614. "popper-options",
  10615. "arrow-offset",
  10616. "strategy",
  10617. "effect",
  10618. "enterable",
  10619. "pure",
  10620. "popper-class",
  10621. "popper-style",
  10622. "reference-el",
  10623. "trigger-target-el",
  10624. "visible",
  10625. "z-index",
  10626. "loop",
  10627. "onMouseenter",
  10628. "onMouseleave",
  10629. "onClose"
  10630. ]), [[vue.vShow, shouldShow.value]])]),
  10631. _: 3
  10632. }, 8, ["name", "appear"])) : (0, vue.createCommentVNode)("v-if", true)], 8, ["disabled", "to"]);
  10633. };
  10634. }
  10635. });
  10636. //#endregion
  10637. //#region ../../packages/components/tooltip/src/content.vue
  10638. var content_default$2 = content_vue_vue_type_script_setup_true_lang_default$1;
  10639. //#endregion
  10640. //#region ../../packages/components/tooltip/src/tooltip.vue?vue&type=script&setup=true&lang.ts
  10641. const _hoisted_1$78 = ["innerHTML"];
  10642. const _hoisted_2$44 = { key: 1 };
  10643. var tooltip_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  10644. name: "ElTooltip",
  10645. __name: "tooltip",
  10646. props: useTooltipProps,
  10647. emits: tooltipEmits,
  10648. setup(__props, { expose: __expose, emit: __emit }) {
  10649. const props = __props;
  10650. const emit = __emit;
  10651. usePopperContainer();
  10652. const ns = useNamespace("tooltip");
  10653. const id = useId();
  10654. const popperRef = (0, vue.ref)();
  10655. const contentRef = (0, vue.ref)();
  10656. const updatePopper = () => {
  10657. const popperComponent = (0, vue.unref)(popperRef);
  10658. if (popperComponent) popperComponent.popperInstanceRef?.update();
  10659. };
  10660. const open = (0, vue.ref)(false);
  10661. const toggleReason = (0, vue.ref)();
  10662. const { show, hide, hasUpdateHandler } = useTooltipModelToggle({
  10663. indicator: open,
  10664. toggleReason
  10665. });
  10666. const { onOpen, onClose } = useDelayedToggle({
  10667. showAfter: (0, vue.toRef)(props, "showAfter"),
  10668. hideAfter: (0, vue.toRef)(props, "hideAfter"),
  10669. autoClose: (0, vue.toRef)(props, "autoClose"),
  10670. open: show,
  10671. close: hide
  10672. });
  10673. const controlled = (0, vue.computed)(() => isBoolean(props.visible) && !hasUpdateHandler.value);
  10674. const kls = (0, vue.computed)(() => {
  10675. return [ns.b(), props.popperClass];
  10676. });
  10677. (0, vue.provide)(TOOLTIP_INJECTION_KEY, {
  10678. controlled,
  10679. id,
  10680. open: (0, vue.readonly)(open),
  10681. trigger: (0, vue.toRef)(props, "trigger"),
  10682. onOpen,
  10683. onClose,
  10684. onToggle: (event) => {
  10685. if ((0, vue.unref)(open)) onClose(event);
  10686. else onOpen(event);
  10687. },
  10688. onShow: () => {
  10689. emit("show", toggleReason.value);
  10690. },
  10691. onHide: () => {
  10692. emit("hide", toggleReason.value);
  10693. },
  10694. onBeforeShow: () => {
  10695. emit("before-show", toggleReason.value);
  10696. },
  10697. onBeforeHide: () => {
  10698. emit("before-hide", toggleReason.value);
  10699. },
  10700. updatePopper
  10701. });
  10702. (0, vue.watch)(() => props.disabled, (disabled) => {
  10703. if (disabled && open.value) open.value = false;
  10704. if (!disabled && isBoolean(props.visible)) open.value = props.visible;
  10705. });
  10706. const isFocusInsideContent = (event) => {
  10707. return contentRef.value?.isFocusInsideContent(event);
  10708. };
  10709. (0, vue.onDeactivated)(() => open.value && hide());
  10710. (0, vue.onBeforeUnmount)(() => {
  10711. toggleReason.value = void 0;
  10712. });
  10713. __expose({
  10714. popperRef,
  10715. contentRef,
  10716. isFocusInsideContent,
  10717. updatePopper,
  10718. onOpen,
  10719. onClose,
  10720. hide
  10721. });
  10722. return (_ctx, _cache) => {
  10723. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElPopper), {
  10724. ref_key: "popperRef",
  10725. ref: popperRef,
  10726. role: __props.role
  10727. }, {
  10728. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(trigger_default$1, {
  10729. disabled: __props.disabled,
  10730. trigger: __props.trigger,
  10731. "trigger-keys": __props.triggerKeys,
  10732. "virtual-ref": __props.virtualRef,
  10733. "virtual-triggering": __props.virtualTriggering,
  10734. "focus-on-target": __props.focusOnTarget
  10735. }, {
  10736. default: (0, vue.withCtx)(() => [_ctx.$slots.default ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true)]),
  10737. _: 3
  10738. }, 8, [
  10739. "disabled",
  10740. "trigger",
  10741. "trigger-keys",
  10742. "virtual-ref",
  10743. "virtual-triggering",
  10744. "focus-on-target"
  10745. ]), (0, vue.createVNode)(content_default$2, {
  10746. ref_key: "contentRef",
  10747. ref: contentRef,
  10748. "aria-label": __props.ariaLabel,
  10749. "boundaries-padding": __props.boundariesPadding,
  10750. content: __props.content,
  10751. disabled: __props.disabled,
  10752. effect: __props.effect,
  10753. enterable: __props.enterable,
  10754. "fallback-placements": __props.fallbackPlacements,
  10755. "hide-after": __props.hideAfter,
  10756. "gpu-acceleration": __props.gpuAcceleration,
  10757. offset: __props.offset,
  10758. persistent: __props.persistent,
  10759. "popper-class": kls.value,
  10760. "popper-style": __props.popperStyle,
  10761. placement: __props.placement,
  10762. "popper-options": __props.popperOptions,
  10763. "arrow-offset": __props.arrowOffset,
  10764. pure: __props.pure,
  10765. "raw-content": __props.rawContent,
  10766. "reference-el": __props.referenceEl,
  10767. "trigger-target-el": __props.triggerTargetEl,
  10768. "show-after": __props.showAfter,
  10769. strategy: __props.strategy,
  10770. teleported: __props.teleported,
  10771. transition: __props.transition,
  10772. "virtual-triggering": __props.virtualTriggering,
  10773. "z-index": __props.zIndex,
  10774. "append-to": __props.appendTo,
  10775. loop: __props.loop
  10776. }, {
  10777. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "content", {}, () => [__props.rawContent ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  10778. key: 0,
  10779. innerHTML: __props.content
  10780. }, null, 8, _hoisted_1$78)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$44, (0, vue.toDisplayString)(__props.content), 1))]), __props.showArrow ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(arrow_default), { key: 0 })) : (0, vue.createCommentVNode)("v-if", true)]),
  10781. _: 3
  10782. }, 8, [
  10783. "aria-label",
  10784. "boundaries-padding",
  10785. "content",
  10786. "disabled",
  10787. "effect",
  10788. "enterable",
  10789. "fallback-placements",
  10790. "hide-after",
  10791. "gpu-acceleration",
  10792. "offset",
  10793. "persistent",
  10794. "popper-class",
  10795. "popper-style",
  10796. "placement",
  10797. "popper-options",
  10798. "arrow-offset",
  10799. "pure",
  10800. "raw-content",
  10801. "reference-el",
  10802. "trigger-target-el",
  10803. "show-after",
  10804. "strategy",
  10805. "teleported",
  10806. "transition",
  10807. "virtual-triggering",
  10808. "z-index",
  10809. "append-to",
  10810. "loop"
  10811. ])]),
  10812. _: 3
  10813. }, 8, ["role"]);
  10814. };
  10815. }
  10816. });
  10817. //#endregion
  10818. //#region ../../packages/components/tooltip/src/tooltip.vue
  10819. var tooltip_default = tooltip_vue_vue_type_script_setup_true_lang_default;
  10820. //#endregion
  10821. //#region ../../packages/components/tooltip/index.ts
  10822. const ElTooltip = withInstall(tooltip_default);
  10823. //#endregion
  10824. //#region ../../packages/components/input/src/input.ts
  10825. const inputProps = buildProps({
  10826. id: {
  10827. type: String,
  10828. default: void 0
  10829. },
  10830. size: useSizeProp,
  10831. disabled: {
  10832. type: Boolean,
  10833. default: void 0
  10834. },
  10835. modelValue: {
  10836. type: definePropType([
  10837. String,
  10838. Number,
  10839. Object
  10840. ]),
  10841. default: ""
  10842. },
  10843. modelModifiers: {
  10844. type: definePropType(Object),
  10845. default: () => ({})
  10846. },
  10847. maxlength: { type: [String, Number] },
  10848. minlength: { type: [String, Number] },
  10849. type: {
  10850. type: definePropType(String),
  10851. default: "text"
  10852. },
  10853. resize: {
  10854. type: String,
  10855. values: [
  10856. "none",
  10857. "both",
  10858. "horizontal",
  10859. "vertical"
  10860. ]
  10861. },
  10862. autosize: {
  10863. type: definePropType([Boolean, Object]),
  10864. default: false
  10865. },
  10866. autocomplete: {
  10867. type: definePropType(String),
  10868. default: "off"
  10869. },
  10870. formatter: { type: Function },
  10871. parser: { type: Function },
  10872. placeholder: { type: String },
  10873. form: { type: String },
  10874. readonly: Boolean,
  10875. clearable: Boolean,
  10876. clearIcon: {
  10877. type: iconPropType,
  10878. default: circle_close_default
  10879. },
  10880. showPassword: Boolean,
  10881. showWordLimit: Boolean,
  10882. wordLimitPosition: {
  10883. type: String,
  10884. values: ["inside", "outside"],
  10885. default: "inside"
  10886. },
  10887. suffixIcon: { type: iconPropType },
  10888. prefixIcon: { type: iconPropType },
  10889. containerRole: {
  10890. type: String,
  10891. default: void 0
  10892. },
  10893. tabindex: {
  10894. type: [String, Number],
  10895. default: 0
  10896. },
  10897. validateEvent: {
  10898. type: Boolean,
  10899. default: true
  10900. },
  10901. inputStyle: {
  10902. type: definePropType([
  10903. Object,
  10904. Array,
  10905. String,
  10906. Boolean
  10907. ]),
  10908. default: () => mutable({})
  10909. },
  10910. countGraphemes: { type: definePropType(Function) },
  10911. autofocus: Boolean,
  10912. rows: {
  10913. type: Number,
  10914. default: 2
  10915. },
  10916. ...useAriaProps(["ariaLabel"]),
  10917. inputmode: {
  10918. type: definePropType(String),
  10919. default: void 0
  10920. },
  10921. name: String
  10922. });
  10923. const inputEmits = {
  10924. [UPDATE_MODEL_EVENT]: (value) => isString(value),
  10925. input: (value) => isString(value),
  10926. change: (value, evt) => isString(value) && (evt instanceof Event || evt === void 0),
  10927. focus: (evt) => evt instanceof FocusEvent,
  10928. blur: (evt) => evt instanceof FocusEvent,
  10929. clear: (evt) => evt === void 0 || evt instanceof MouseEvent,
  10930. mouseleave: (evt) => evt instanceof MouseEvent,
  10931. mouseenter: (evt) => evt instanceof MouseEvent,
  10932. keydown: (evt) => evt instanceof Event,
  10933. compositionstart: (evt) => evt instanceof CompositionEvent,
  10934. compositionupdate: (evt) => evt instanceof CompositionEvent,
  10935. compositionend: (evt) => evt instanceof CompositionEvent
  10936. };
  10937. const inputPropsDefaults = {
  10938. disabled: void 0,
  10939. modelValue: "",
  10940. modelModifiers: () => ({}),
  10941. type: "text",
  10942. autocomplete: "off",
  10943. clearIcon: (0, vue.markRaw)(circle_close_default),
  10944. wordLimitPosition: "inside",
  10945. tabindex: 0,
  10946. validateEvent: true,
  10947. inputStyle: () => ({}),
  10948. rows: 2
  10949. };
  10950. //#endregion
  10951. //#region ../../packages/components/input/src/utils.ts
  10952. let hiddenTextarea = void 0;
  10953. const HIDDEN_STYLE = {
  10954. height: "0",
  10955. visibility: "hidden",
  10956. overflow: isFirefox() ? "" : "hidden",
  10957. position: "absolute",
  10958. "z-index": "-1000",
  10959. top: "0",
  10960. right: "0"
  10961. };
  10962. const CONTEXT_STYLE = [
  10963. "letter-spacing",
  10964. "line-height",
  10965. "padding-top",
  10966. "padding-bottom",
  10967. "font-family",
  10968. "font-weight",
  10969. "font-size",
  10970. "text-rendering",
  10971. "text-transform",
  10972. "width",
  10973. "text-indent",
  10974. "padding-left",
  10975. "padding-right",
  10976. "border-width",
  10977. "box-sizing",
  10978. "word-break"
  10979. ];
  10980. const looseToNumber = (val) => {
  10981. const n = Number.parseFloat(val);
  10982. return Number.isNaN(n) ? val : n;
  10983. };
  10984. function calculateNodeStyling(targetElement) {
  10985. const style = window.getComputedStyle(targetElement);
  10986. const boxSizing = style.getPropertyValue("box-sizing");
  10987. const paddingSize = Number.parseFloat(style.getPropertyValue("padding-bottom")) + Number.parseFloat(style.getPropertyValue("padding-top"));
  10988. const borderSize = Number.parseFloat(style.getPropertyValue("border-bottom-width")) + Number.parseFloat(style.getPropertyValue("border-top-width"));
  10989. return {
  10990. contextStyle: CONTEXT_STYLE.map((name) => [name, style.getPropertyValue(name)]),
  10991. paddingSize,
  10992. borderSize,
  10993. boxSizing
  10994. };
  10995. }
  10996. function calcTextareaHeight(targetElement, minRows = 1, maxRows) {
  10997. if (!hiddenTextarea) {
  10998. hiddenTextarea = document.createElement("textarea");
  10999. let hostNode = document.body;
  11000. if (!isFirefox() && targetElement.parentNode) hostNode = targetElement.parentNode;
  11001. hostNode.appendChild(hiddenTextarea);
  11002. }
  11003. const { paddingSize, borderSize, boxSizing, contextStyle } = calculateNodeStyling(targetElement);
  11004. contextStyle.forEach(([key, value]) => hiddenTextarea?.style.setProperty(key, value));
  11005. Object.entries(HIDDEN_STYLE).forEach(([key, value]) => hiddenTextarea?.style.setProperty(key, value, "important"));
  11006. hiddenTextarea.value = targetElement.value || targetElement.placeholder || "";
  11007. let height = hiddenTextarea.scrollHeight;
  11008. const result = {};
  11009. if (boxSizing === "border-box") height = height + borderSize;
  11010. else if (boxSizing === "content-box") height = height - paddingSize;
  11011. hiddenTextarea.value = "";
  11012. const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;
  11013. if (isNumber(minRows)) {
  11014. let minHeight = singleRowHeight * minRows;
  11015. if (boxSizing === "border-box") minHeight = minHeight + paddingSize + borderSize;
  11016. height = Math.max(minHeight, height);
  11017. result.minHeight = `${minHeight}px`;
  11018. }
  11019. if (isNumber(maxRows)) {
  11020. let maxHeight = singleRowHeight * maxRows;
  11021. if (boxSizing === "border-box") maxHeight = maxHeight + paddingSize + borderSize;
  11022. height = Math.min(maxHeight, height);
  11023. }
  11024. result.height = `${height}px`;
  11025. hiddenTextarea.parentNode?.removeChild(hiddenTextarea);
  11026. hiddenTextarea = void 0;
  11027. return result;
  11028. }
  11029. //#endregion
  11030. //#region ../../packages/components/input/src/input.vue?vue&type=script&setup=true&lang.ts
  11031. const _hoisted_1$77 = [
  11032. "id",
  11033. "name",
  11034. "minlength",
  11035. "maxlength",
  11036. "type",
  11037. "disabled",
  11038. "readonly",
  11039. "autocomplete",
  11040. "tabindex",
  11041. "aria-label",
  11042. "placeholder",
  11043. "form",
  11044. "autofocus",
  11045. "role",
  11046. "inputmode"
  11047. ];
  11048. const _hoisted_2$43 = [
  11049. "id",
  11050. "name",
  11051. "minlength",
  11052. "maxlength",
  11053. "tabindex",
  11054. "disabled",
  11055. "readonly",
  11056. "autocomplete",
  11057. "aria-label",
  11058. "placeholder",
  11059. "form",
  11060. "autofocus",
  11061. "rows",
  11062. "role",
  11063. "inputmode"
  11064. ];
  11065. const COMPONENT_NAME$19 = "ElInput";
  11066. var input_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  11067. name: COMPONENT_NAME$19,
  11068. inheritAttrs: false,
  11069. __name: "input",
  11070. props: inputProps,
  11071. emits: inputEmits,
  11072. setup(__props, { expose: __expose, emit: __emit }) {
  11073. const props = __props;
  11074. const emit = __emit;
  11075. const rawAttrs = (0, vue.useAttrs)();
  11076. const slots = (0, vue.useSlots)();
  11077. const containerKls = (0, vue.computed)(() => [
  11078. props.type === "textarea" ? nsTextarea.b() : nsInput.b(),
  11079. nsInput.m(inputSize.value),
  11080. nsInput.is("disabled", inputDisabled.value),
  11081. nsInput.is("exceed", inputExceed.value),
  11082. {
  11083. [nsInput.b("group")]: slots.prepend || slots.append,
  11084. [nsInput.m("prefix")]: slots.prefix || props.prefixIcon,
  11085. [nsInput.m("suffix")]: slots.suffix || props.suffixIcon || props.clearable || props.showPassword,
  11086. [nsInput.bm("suffix", "password-clear")]: showClear.value && showPwdVisible.value,
  11087. [nsInput.b("hidden")]: props.type === "hidden"
  11088. },
  11089. rawAttrs.class
  11090. ]);
  11091. const wrapperKls = (0, vue.computed)(() => [nsInput.e("wrapper"), nsInput.is("focus", isFocused.value)]);
  11092. const attrs = useAttrs();
  11093. const maxlength = (0, vue.computed)(() => props.maxlength?.toString());
  11094. const { form: elForm, formItem: elFormItem } = useFormItem();
  11095. const { inputId } = useFormItemInputId(props, { formItemContext: elFormItem });
  11096. const inputSize = useFormSize();
  11097. const inputDisabled = useFormDisabled();
  11098. const nsInput = useNamespace("input");
  11099. const nsTextarea = useNamespace("textarea");
  11100. const input = (0, vue.shallowRef)();
  11101. const textarea = (0, vue.shallowRef)();
  11102. const hovering = (0, vue.ref)(false);
  11103. const passwordVisible = (0, vue.ref)(false);
  11104. const countStyle = (0, vue.ref)();
  11105. const clearIconStyle = (0, vue.ref)();
  11106. const textareaCalcStyle = (0, vue.shallowRef)(props.inputStyle);
  11107. const saveValue = (0, vue.ref)("");
  11108. const textareaHeight = (0, vue.ref)();
  11109. const _ref = (0, vue.computed)(() => input.value || textarea.value);
  11110. const { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(_ref, {
  11111. disabled: inputDisabled,
  11112. afterBlur() {
  11113. if (props.validateEvent) elFormItem?.validate?.("blur").catch(NOOP);
  11114. }
  11115. });
  11116. const needStatusIcon = (0, vue.computed)(() => elForm?.statusIcon ?? false);
  11117. const validateState = (0, vue.computed)(() => elFormItem?.validateState || "");
  11118. const validateIcon = (0, vue.computed)(() => validateState.value && ValidateComponentsMap[validateState.value]);
  11119. const passwordIcon = (0, vue.computed)(() => passwordVisible.value ? view_default : hide_default);
  11120. const containerStyle = (0, vue.computed)(() => [rawAttrs.style]);
  11121. const textareaStyle = (0, vue.computed)(() => [
  11122. props.inputStyle,
  11123. textareaCalcStyle.value,
  11124. { resize: props.resize },
  11125. textareaHeight.value ? { height: textareaHeight.value } : void 0
  11126. ]);
  11127. const nativeInputValue = (0, vue.computed)(() => isNil(props.modelValue) ? "" : String(props.modelValue));
  11128. const renderClear = (0, vue.computed)(() => props.clearable && !inputDisabled.value && !props.readonly);
  11129. const showClear = (0, vue.computed)(() => renderClear.value && !!nativeInputValue.value && (isFocused.value || hovering.value));
  11130. const showPwdVisible = (0, vue.computed)(() => props.showPassword && !inputDisabled.value && !!nativeInputValue.value);
  11131. const isWordLimitVisible = (0, vue.computed)(() => props.showWordLimit && !!maxlength.value && (props.type === "text" || props.type === "textarea") && !inputDisabled.value && !props.readonly && !props.showPassword);
  11132. const textLength = (0, vue.computed)(() => {
  11133. if (props.countGraphemes && props.showWordLimit) return props.countGraphemes(nativeInputValue.value);
  11134. return nativeInputValue.value.length;
  11135. });
  11136. const inputExceed = (0, vue.computed)(() => !!isWordLimitVisible.value && textLength.value > Number(maxlength.value));
  11137. const suffixVisible = (0, vue.computed)(() => !!slots.suffix || !!props.suffixIcon || props.clearable || props.showPassword || isWordLimitVisible.value || !!validateState.value && needStatusIcon.value);
  11138. const hasModelModifiers = (0, vue.computed)(() => !!Object.keys(props.modelModifiers).length);
  11139. const [recordCursor, setCursor] = useCursor(input);
  11140. let rAFId;
  11141. useResizeObserver(textarea, (entries) => {
  11142. onceInitSizeTextarea();
  11143. if (!isWordLimitVisible.value && !renderClear.value || props.resize !== "both" && props.resize !== "horizontal") return;
  11144. const { width } = entries[0].target.getBoundingClientRect();
  11145. const updateStyle = () => {
  11146. rAFId = void 0;
  11147. countStyle.value = { right: `calc(100% - ${width - 10}px)` };
  11148. clearIconStyle.value = { right: `calc(100% - ${width - 11}px)` };
  11149. };
  11150. rAFId && cAF(rAFId);
  11151. rAFId = rAF(updateStyle);
  11152. });
  11153. const resizeTextarea = () => {
  11154. const { type, autosize } = props;
  11155. if (!isClient || type !== "textarea" || !textarea.value) return;
  11156. if (autosize) {
  11157. const minRows = isObject$1(autosize) ? autosize.minRows : void 0;
  11158. const maxRows = isObject$1(autosize) ? autosize.maxRows : void 0;
  11159. const textareaStyle = calcTextareaHeight(textarea.value, minRows, maxRows);
  11160. textareaCalcStyle.value = {
  11161. overflowY: "hidden",
  11162. ...textareaStyle
  11163. };
  11164. (0, vue.nextTick)(() => {
  11165. textarea.value.offsetHeight;
  11166. textareaCalcStyle.value = textareaStyle;
  11167. });
  11168. } else textareaCalcStyle.value = { minHeight: calcTextareaHeight(textarea.value).minHeight };
  11169. };
  11170. const createOnceInitResize = (resizeTextarea) => {
  11171. let isInit = false;
  11172. return () => {
  11173. if (isInit || !props.autosize) {
  11174. if (props.resize !== "none") setTimeout(() => {
  11175. textareaHeight.value = textarea.value?.style.height;
  11176. });
  11177. return;
  11178. }
  11179. if (!(textarea.value?.offsetParent === null)) {
  11180. setTimeout(resizeTextarea);
  11181. isInit = true;
  11182. }
  11183. };
  11184. };
  11185. const onceInitSizeTextarea = createOnceInitResize(resizeTextarea);
  11186. const setNativeInputValue = () => {
  11187. const input = _ref.value;
  11188. const formatterValue = props.formatter ? props.formatter(nativeInputValue.value) : nativeInputValue.value;
  11189. if (!input || input.value === formatterValue || props.type === "file") return;
  11190. input.value = formatterValue;
  11191. };
  11192. const formatValue = (value) => {
  11193. const { trim, number } = props.modelModifiers;
  11194. if (trim) value = value.trim();
  11195. if (number) value = `${looseToNumber(value)}`;
  11196. if (props.formatter && props.parser) value = props.parser(value);
  11197. return value;
  11198. };
  11199. const handleInput = async (event) => {
  11200. if (isComposing.value) return;
  11201. const { lazy } = props.modelModifiers;
  11202. let { value } = event.target;
  11203. let shouldForceNativeUpdate = false;
  11204. if (lazy) {
  11205. emit(INPUT_EVENT, value);
  11206. return;
  11207. }
  11208. value = formatValue(value);
  11209. if (props.countGraphemes && maxlength.value != null) {
  11210. const limit = Number(maxlength.value);
  11211. const graphemes = props.countGraphemes(value);
  11212. const saveGraphemes = props.countGraphemes(saveValue.value);
  11213. if (graphemes > limit && graphemes > saveGraphemes) if (saveGraphemes > limit) {
  11214. value = saveValue.value;
  11215. shouldForceNativeUpdate = true;
  11216. } else {
  11217. const prevValue = saveValue.value;
  11218. const nextValue = value;
  11219. let prefixLen = 0;
  11220. while (prefixLen < prevValue.length && prefixLen < nextValue.length && prevValue[prefixLen] === nextValue[prefixLen]) prefixLen++;
  11221. let prevSuffixIndex = prevValue.length;
  11222. let nextSuffixIndex = nextValue.length;
  11223. while (prevSuffixIndex > prefixLen && nextSuffixIndex > prefixLen && prevValue[prevSuffixIndex - 1] === nextValue[nextSuffixIndex - 1]) {
  11224. prevSuffixIndex--;
  11225. nextSuffixIndex--;
  11226. }
  11227. const before = nextValue.slice(0, prefixLen);
  11228. const removed = prevValue.slice(prefixLen, prevSuffixIndex);
  11229. const inserted = nextValue.slice(prefixLen, nextSuffixIndex);
  11230. const after = nextValue.slice(nextSuffixIndex);
  11231. const baseCount = saveGraphemes - props.countGraphemes(removed);
  11232. const availableInserted = Math.max(0, limit - baseCount);
  11233. let acceptedInserted = "";
  11234. if (availableInserted > 0) if (typeof Intl !== "undefined" && "Segmenter" in Intl) {
  11235. const segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
  11236. for (const { segment } of segmenter.segment(inserted)) {
  11237. const candidate = acceptedInserted + segment;
  11238. if (props.countGraphemes(candidate) > availableInserted) break;
  11239. acceptedInserted = candidate;
  11240. }
  11241. } else for (const char of Array.from(inserted)) {
  11242. const candidate = acceptedInserted + char;
  11243. if (props.countGraphemes(candidate) > availableInserted) break;
  11244. acceptedInserted = candidate;
  11245. }
  11246. value = before + acceptedInserted + after;
  11247. shouldForceNativeUpdate = true;
  11248. }
  11249. }
  11250. if (String(value) === nativeInputValue.value) {
  11251. if (props.formatter || shouldForceNativeUpdate) {
  11252. const target = event.target;
  11253. const blockedValue = target.value;
  11254. const selectionStart = target.selectionStart;
  11255. const selectionEnd = target.selectionEnd;
  11256. setNativeInputValue();
  11257. if (shouldForceNativeUpdate && _ref.value && selectionStart != null && selectionEnd != null) {
  11258. const restoredValue = _ref.value.value;
  11259. const afterTxt = blockedValue.slice(Math.max(0, selectionEnd));
  11260. let caretPos = Math.min(selectionStart, restoredValue.length);
  11261. if (afterTxt && restoredValue.endsWith(afterTxt)) caretPos = restoredValue.length - afterTxt.length;
  11262. _ref.value.setSelectionRange(caretPos, caretPos);
  11263. }
  11264. }
  11265. return;
  11266. }
  11267. saveValue.value = value;
  11268. recordCursor();
  11269. emit(UPDATE_MODEL_EVENT, value);
  11270. emit(INPUT_EVENT, value);
  11271. await (0, vue.nextTick)();
  11272. if (props.formatter && props.parser || !hasModelModifiers.value) setNativeInputValue();
  11273. setCursor();
  11274. };
  11275. const handleChange = async (event) => {
  11276. let { value } = event.target;
  11277. value = formatValue(value);
  11278. if (props.modelModifiers.lazy) emit(UPDATE_MODEL_EVENT, value);
  11279. emit(CHANGE_EVENT, value, event);
  11280. await (0, vue.nextTick)();
  11281. setNativeInputValue();
  11282. };
  11283. const { isComposing, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd } = useComposition({
  11284. emit,
  11285. afterComposition: handleInput
  11286. });
  11287. const handlePasswordVisible = () => {
  11288. passwordVisible.value = !passwordVisible.value;
  11289. };
  11290. const focus = () => _ref.value?.focus();
  11291. const blur = () => _ref.value?.blur();
  11292. const handleMouseLeave = (evt) => {
  11293. hovering.value = false;
  11294. emit("mouseleave", evt);
  11295. };
  11296. const handleMouseEnter = (evt) => {
  11297. hovering.value = true;
  11298. emit("mouseenter", evt);
  11299. };
  11300. const handleKeydown = (evt) => {
  11301. emit("keydown", evt);
  11302. };
  11303. const select = () => {
  11304. _ref.value?.select();
  11305. };
  11306. const clear = (evt) => {
  11307. emit(UPDATE_MODEL_EVENT, "");
  11308. emit(CHANGE_EVENT, "");
  11309. emit("clear", evt);
  11310. emit(INPUT_EVENT, "");
  11311. };
  11312. (0, vue.watch)(() => props.modelValue, () => {
  11313. (0, vue.nextTick)(() => {
  11314. resizeTextarea();
  11315. if (props.autosize) textareaHeight.value = void 0;
  11316. });
  11317. if (props.validateEvent) elFormItem?.validate?.("change").catch(NOOP);
  11318. });
  11319. (0, vue.watch)(() => nativeInputValue.value, (val) => {
  11320. saveValue.value = val;
  11321. }, { immediate: true });
  11322. (0, vue.watch)(nativeInputValue, (newValue) => {
  11323. if (!_ref.value) return;
  11324. const { trim, number } = props.modelModifiers;
  11325. const elValue = _ref.value.value;
  11326. const displayValue = (number || props.type === "number") && !/^0\d/.test(elValue) ? `${looseToNumber(elValue)}` : elValue;
  11327. if (displayValue === newValue) return;
  11328. if (document.activeElement === _ref.value && _ref.value.type !== "range") {
  11329. if (trim && displayValue.trim() === newValue) return;
  11330. }
  11331. setNativeInputValue();
  11332. });
  11333. (0, vue.watch)(() => props.type, async () => {
  11334. await (0, vue.nextTick)();
  11335. setNativeInputValue();
  11336. resizeTextarea();
  11337. });
  11338. (0, vue.onMounted)(() => {
  11339. if (!props.formatter && props.parser) /* @__PURE__ */ debugWarn(COMPONENT_NAME$19, "If you set the parser, you also need to set the formatter.");
  11340. setNativeInputValue();
  11341. (0, vue.nextTick)(resizeTextarea);
  11342. });
  11343. (0, vue.onBeforeUnmount)(() => {
  11344. rAFId && cAF(rAFId);
  11345. });
  11346. __expose({
  11347. input,
  11348. textarea,
  11349. ref: _ref,
  11350. textareaStyle,
  11351. autosize: (0, vue.toRef)(props, "autosize"),
  11352. isComposing,
  11353. passwordVisible,
  11354. focus,
  11355. blur,
  11356. select,
  11357. clear,
  11358. resizeTextarea
  11359. });
  11360. return (_ctx, _cache) => {
  11361. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  11362. class: (0, vue.normalizeClass)([containerKls.value, {
  11363. [(0, vue.unref)(nsInput).bm("group", "append")]: _ctx.$slots.append,
  11364. [(0, vue.unref)(nsInput).bm("group", "prepend")]: _ctx.$slots.prepend
  11365. }]),
  11366. style: (0, vue.normalizeStyle)(containerStyle.value),
  11367. onMouseenter: handleMouseEnter,
  11368. onMouseleave: handleMouseLeave
  11369. }, [(0, vue.createCommentVNode)(" input "), __props.type !== "textarea" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [
  11370. (0, vue.createCommentVNode)(" prepend slot "),
  11371. _ctx.$slots.prepend ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  11372. key: 0,
  11373. class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).be("group", "prepend"))
  11374. }, [(0, vue.renderSlot)(_ctx.$slots, "prepend")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  11375. (0, vue.createElementVNode)("div", {
  11376. ref_key: "wrapperRef",
  11377. ref: wrapperRef,
  11378. class: (0, vue.normalizeClass)(wrapperKls.value)
  11379. }, [
  11380. (0, vue.createCommentVNode)(" prefix slot "),
  11381. _ctx.$slots.prefix || __props.prefixIcon ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  11382. key: 0,
  11383. class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("prefix"))
  11384. }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("prefix-inner")) }, [(0, vue.renderSlot)(_ctx.$slots, "prefix"), __props.prefixIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  11385. key: 0,
  11386. class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("icon"))
  11387. }, {
  11388. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.prefixIcon)))]),
  11389. _: 1
  11390. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true),
  11391. (0, vue.createElementVNode)("input", (0, vue.mergeProps)({
  11392. id: (0, vue.unref)(inputId),
  11393. ref_key: "input",
  11394. ref: input,
  11395. class: (0, vue.unref)(nsInput).e("inner")
  11396. }, (0, vue.unref)(attrs), {
  11397. name: __props.name,
  11398. minlength: __props.countGraphemes ? void 0 : __props.minlength,
  11399. maxlength: __props.countGraphemes ? void 0 : maxlength.value,
  11400. type: __props.showPassword ? passwordVisible.value ? "text" : "password" : __props.type,
  11401. disabled: (0, vue.unref)(inputDisabled),
  11402. readonly: __props.readonly,
  11403. autocomplete: __props.autocomplete,
  11404. tabindex: __props.tabindex,
  11405. "aria-label": __props.ariaLabel,
  11406. placeholder: __props.placeholder,
  11407. style: __props.inputStyle,
  11408. form: __props.form,
  11409. autofocus: __props.autofocus,
  11410. role: __props.containerRole,
  11411. inputmode: __props.inputmode,
  11412. onCompositionstart: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleCompositionStart) && (0, vue.unref)(handleCompositionStart)(...args)),
  11413. onCompositionupdate: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleCompositionUpdate) && (0, vue.unref)(handleCompositionUpdate)(...args)),
  11414. onCompositionend: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(handleCompositionEnd) && (0, vue.unref)(handleCompositionEnd)(...args)),
  11415. onInput: handleInput,
  11416. onChange: handleChange,
  11417. onKeydown: handleKeydown
  11418. }), null, 16, _hoisted_1$77),
  11419. (0, vue.createCommentVNode)(" suffix slot "),
  11420. suffixVisible.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  11421. key: 1,
  11422. class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("suffix"))
  11423. }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("suffix-inner")) }, [
  11424. renderClear.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  11425. key: 0,
  11426. class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("icon"), (0, vue.unref)(nsInput).e("clear")]),
  11427. style: (0, vue.normalizeStyle)({ visibility: showClear.value ? "visible" : "hidden" }),
  11428. onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
  11429. onClick: clear
  11430. }, {
  11431. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.clearIcon)))]),
  11432. _: 1
  11433. }, 8, [
  11434. "class",
  11435. "style",
  11436. "onMousedown"
  11437. ])) : (0, vue.createCommentVNode)("v-if", true),
  11438. !showClear.value || !showPwdVisible.value || !isWordLimitVisible.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.renderSlot)(_ctx.$slots, "suffix"), __props.suffixIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  11439. key: 0,
  11440. class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("icon"))
  11441. }, {
  11442. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.suffixIcon)))]),
  11443. _: 1
  11444. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)], 64)) : (0, vue.createCommentVNode)("v-if", true),
  11445. showPwdVisible.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  11446. key: 2,
  11447. class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("icon"), (0, vue.unref)(nsInput).e("password")]),
  11448. onClick: handlePasswordVisible,
  11449. onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
  11450. onMouseup: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"])
  11451. }, {
  11452. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "password-icon", { visible: passwordVisible.value }, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(passwordIcon.value)))])]),
  11453. _: 3
  11454. }, 8, [
  11455. "class",
  11456. "onMousedown",
  11457. "onMouseup"
  11458. ])) : (0, vue.createCommentVNode)("v-if", true),
  11459. isWordLimitVisible.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  11460. key: 3,
  11461. class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("count"), (0, vue.unref)(nsInput).is("outside", __props.wordLimitPosition === "outside")])
  11462. }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("count-inner")) }, (0, vue.toDisplayString)(textLength.value) + " / " + (0, vue.toDisplayString)(maxlength.value), 3)], 2)) : (0, vue.createCommentVNode)("v-if", true),
  11463. validateState.value && validateIcon.value && needStatusIcon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  11464. key: 4,
  11465. class: (0, vue.normalizeClass)([
  11466. (0, vue.unref)(nsInput).e("icon"),
  11467. (0, vue.unref)(nsInput).e("validateIcon"),
  11468. (0, vue.unref)(nsInput).is("loading", validateState.value === "validating")
  11469. ])
  11470. }, {
  11471. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(validateIcon.value)))]),
  11472. _: 1
  11473. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
  11474. ], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true)
  11475. ], 2),
  11476. (0, vue.createCommentVNode)(" append slot "),
  11477. _ctx.$slots.append ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  11478. key: 1,
  11479. class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).be("group", "append"))
  11480. }, [(0, vue.renderSlot)(_ctx.$slots, "append")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  11481. ], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [
  11482. (0, vue.createCommentVNode)(" textarea "),
  11483. (0, vue.createElementVNode)("textarea", (0, vue.mergeProps)({
  11484. id: (0, vue.unref)(inputId),
  11485. ref_key: "textarea",
  11486. ref: textarea,
  11487. class: [
  11488. (0, vue.unref)(nsTextarea).e("inner"),
  11489. (0, vue.unref)(nsInput).is("focus", (0, vue.unref)(isFocused)),
  11490. (0, vue.unref)(nsTextarea).is("clearable", __props.clearable)
  11491. ]
  11492. }, (0, vue.unref)(attrs), {
  11493. name: __props.name,
  11494. minlength: __props.countGraphemes ? void 0 : __props.minlength,
  11495. maxlength: __props.countGraphemes ? void 0 : maxlength.value,
  11496. tabindex: __props.tabindex,
  11497. disabled: (0, vue.unref)(inputDisabled),
  11498. readonly: __props.readonly,
  11499. autocomplete: __props.autocomplete,
  11500. style: textareaStyle.value,
  11501. "aria-label": __props.ariaLabel,
  11502. placeholder: __props.placeholder,
  11503. form: __props.form,
  11504. autofocus: __props.autofocus,
  11505. rows: __props.rows,
  11506. role: __props.containerRole,
  11507. inputmode: __props.inputmode,
  11508. onCompositionstart: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(handleCompositionStart) && (0, vue.unref)(handleCompositionStart)(...args)),
  11509. onCompositionupdate: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleCompositionUpdate) && (0, vue.unref)(handleCompositionUpdate)(...args)),
  11510. onCompositionend: _cache[5] || (_cache[5] = (...args) => (0, vue.unref)(handleCompositionEnd) && (0, vue.unref)(handleCompositionEnd)(...args)),
  11511. onInput: handleInput,
  11512. onFocus: _cache[6] || (_cache[6] = (...args) => (0, vue.unref)(handleFocus) && (0, vue.unref)(handleFocus)(...args)),
  11513. onBlur: _cache[7] || (_cache[7] = (...args) => (0, vue.unref)(handleBlur) && (0, vue.unref)(handleBlur)(...args)),
  11514. onChange: handleChange,
  11515. onKeydown: handleKeydown
  11516. }), null, 16, _hoisted_2$43),
  11517. showClear.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  11518. key: 0,
  11519. class: (0, vue.normalizeClass)([(0, vue.unref)(nsTextarea).e("icon"), (0, vue.unref)(nsTextarea).e("clear")]),
  11520. style: (0, vue.normalizeStyle)(clearIconStyle.value),
  11521. onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
  11522. onClick: clear
  11523. }, {
  11524. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.clearIcon)))]),
  11525. _: 1
  11526. }, 8, [
  11527. "class",
  11528. "style",
  11529. "onMousedown"
  11530. ])) : (0, vue.createCommentVNode)("v-if", true),
  11531. isWordLimitVisible.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  11532. key: 1,
  11533. style: (0, vue.normalizeStyle)(countStyle.value),
  11534. class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("count"), (0, vue.unref)(nsInput).is("outside", __props.wordLimitPosition === "outside")])
  11535. }, (0, vue.toDisplayString)(textLength.value) + " / " + (0, vue.toDisplayString)(maxlength.value), 7)) : (0, vue.createCommentVNode)("v-if", true)
  11536. ], 64))], 38);
  11537. };
  11538. }
  11539. });
  11540. //#endregion
  11541. //#region ../../packages/components/input/src/input.vue
  11542. var input_default = input_vue_vue_type_script_setup_true_lang_default;
  11543. //#endregion
  11544. //#region ../../packages/components/input/index.ts
  11545. const ElInput = withInstall(input_default);
  11546. //#endregion
  11547. //#region ../../packages/components/autocomplete/src/autocomplete.ts
  11548. const autocompleteProps = buildProps({
  11549. ...inputProps,
  11550. valueKey: {
  11551. type: String,
  11552. default: "value"
  11553. },
  11554. modelValue: {
  11555. type: [String, Number],
  11556. default: ""
  11557. },
  11558. debounce: {
  11559. type: Number,
  11560. default: 300
  11561. },
  11562. placement: {
  11563. type: definePropType(String),
  11564. values: [
  11565. "top",
  11566. "top-start",
  11567. "top-end",
  11568. "bottom",
  11569. "bottom-start",
  11570. "bottom-end"
  11571. ],
  11572. default: "bottom-start"
  11573. },
  11574. fetchSuggestions: {
  11575. type: definePropType([Function, Array]),
  11576. default: NOOP
  11577. },
  11578. popperClass: useTooltipContentProps.popperClass,
  11579. popperStyle: useTooltipContentProps.popperStyle,
  11580. popperOptions: useTooltipContentProps.popperOptions,
  11581. showArrow: {
  11582. type: Boolean,
  11583. default: true
  11584. },
  11585. triggerOnFocus: {
  11586. type: Boolean,
  11587. default: true
  11588. },
  11589. selectWhenUnmatched: Boolean,
  11590. hideLoading: Boolean,
  11591. teleported: useTooltipContentProps.teleported,
  11592. appendTo: useTooltipContentProps.appendTo,
  11593. highlightFirstItem: Boolean,
  11594. fitInputWidth: Boolean,
  11595. loopNavigation: {
  11596. type: Boolean,
  11597. default: true
  11598. }
  11599. });
  11600. const autocompleteEmits = {
  11601. [UPDATE_MODEL_EVENT]: (value) => isString(value) || isNumber(value),
  11602. [INPUT_EVENT]: (value) => isString(value) || isNumber(value),
  11603. [CHANGE_EVENT]: (value) => isString(value) || isNumber(value),
  11604. focus: (evt) => evt instanceof FocusEvent,
  11605. blur: (evt) => evt instanceof FocusEvent,
  11606. clear: () => true,
  11607. select: (item) => isObject$1(item)
  11608. };
  11609. //#endregion
  11610. //#region ../../packages/components/scrollbar/src/scrollbar.ts
  11611. const scrollbarProps = buildProps({
  11612. distance: {
  11613. type: Number,
  11614. default: 0
  11615. },
  11616. height: {
  11617. type: [String, Number],
  11618. default: ""
  11619. },
  11620. maxHeight: {
  11621. type: [String, Number],
  11622. default: ""
  11623. },
  11624. native: Boolean,
  11625. wrapStyle: {
  11626. type: definePropType([
  11627. String,
  11628. Object,
  11629. Array,
  11630. Boolean
  11631. ]),
  11632. default: ""
  11633. },
  11634. wrapClass: {
  11635. type: [String, Array],
  11636. default: ""
  11637. },
  11638. viewClass: {
  11639. type: [String, Array],
  11640. default: ""
  11641. },
  11642. viewStyle: {
  11643. type: definePropType([
  11644. String,
  11645. Object,
  11646. Array,
  11647. Boolean
  11648. ]),
  11649. default: ""
  11650. },
  11651. noresize: Boolean,
  11652. tag: {
  11653. type: String,
  11654. default: "div"
  11655. },
  11656. always: Boolean,
  11657. minSize: {
  11658. type: Number,
  11659. default: 20
  11660. },
  11661. tabindex: {
  11662. type: [String, Number],
  11663. default: void 0
  11664. },
  11665. id: String,
  11666. role: String,
  11667. ...useAriaProps(["ariaLabel", "ariaOrientation"])
  11668. });
  11669. const scrollbarEmits = {
  11670. "end-reached": (direction) => [
  11671. "left",
  11672. "right",
  11673. "top",
  11674. "bottom"
  11675. ].includes(direction),
  11676. scroll: ({ scrollTop, scrollLeft }) => [scrollTop, scrollLeft].every(isNumber)
  11677. };
  11678. //#endregion
  11679. //#region ../../packages/components/scrollbar/src/bar.ts
  11680. const barProps = buildProps({
  11681. always: {
  11682. type: Boolean,
  11683. default: true
  11684. },
  11685. minSize: {
  11686. type: Number,
  11687. required: true
  11688. }
  11689. });
  11690. //#endregion
  11691. //#region ../../packages/components/scrollbar/src/util.ts
  11692. const GAP = 4;
  11693. const BAR_MAP = {
  11694. vertical: {
  11695. offset: "offsetHeight",
  11696. scroll: "scrollTop",
  11697. scrollSize: "scrollHeight",
  11698. size: "height",
  11699. key: "vertical",
  11700. axis: "Y",
  11701. client: "clientY",
  11702. direction: "top"
  11703. },
  11704. horizontal: {
  11705. offset: "offsetWidth",
  11706. scroll: "scrollLeft",
  11707. scrollSize: "scrollWidth",
  11708. size: "width",
  11709. key: "horizontal",
  11710. axis: "X",
  11711. client: "clientX",
  11712. direction: "left"
  11713. }
  11714. };
  11715. const renderThumbStyle = ({ move, size, bar }) => ({
  11716. [bar.size]: size,
  11717. transform: `translate${bar.axis}(${move}%)`
  11718. });
  11719. //#endregion
  11720. //#region ../../packages/components/scrollbar/src/thumb.ts
  11721. const thumbProps = buildProps({
  11722. vertical: Boolean,
  11723. size: String,
  11724. move: Number,
  11725. ratio: {
  11726. type: Number,
  11727. required: true
  11728. },
  11729. always: Boolean
  11730. });
  11731. //#endregion
  11732. //#region ../../packages/components/scrollbar/src/constants.ts
  11733. const scrollbarContextKey = Symbol("scrollbarContextKey");
  11734. //#endregion
  11735. //#region ../../packages/components/scrollbar/src/thumb.vue?vue&type=script&setup=true&lang.ts
  11736. const COMPONENT_NAME$18 = "Thumb";
  11737. var thumb_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  11738. __name: "thumb",
  11739. props: thumbProps,
  11740. setup(__props) {
  11741. const props = __props;
  11742. const scrollbar = (0, vue.inject)(scrollbarContextKey);
  11743. const ns = useNamespace("scrollbar");
  11744. if (!scrollbar) throwError(COMPONENT_NAME$18, "can not inject scrollbar context");
  11745. const instance = (0, vue.ref)();
  11746. const thumb = (0, vue.ref)();
  11747. const thumbState = (0, vue.ref)({});
  11748. const visible = (0, vue.ref)(false);
  11749. let cursorDown = false;
  11750. let cursorLeave = false;
  11751. let baseScrollHeight = 0;
  11752. let baseScrollWidth = 0;
  11753. let originalOnSelectStart = isClient ? document.onselectstart : null;
  11754. const bar = (0, vue.computed)(() => BAR_MAP[props.vertical ? "vertical" : "horizontal"]);
  11755. const thumbStyle = (0, vue.computed)(() => renderThumbStyle({
  11756. size: props.size,
  11757. move: props.move,
  11758. bar: bar.value
  11759. }));
  11760. const offsetRatio = (0, vue.computed)(() => instance.value[bar.value.offset] ** 2 / scrollbar.wrapElement[bar.value.scrollSize] / props.ratio / thumb.value[bar.value.offset]);
  11761. const clickThumbHandler = (e) => {
  11762. e.stopPropagation();
  11763. if (e.ctrlKey || [1, 2].includes(e.button)) return;
  11764. window.getSelection()?.removeAllRanges();
  11765. startDrag(e);
  11766. const el = e.currentTarget;
  11767. if (!el) return;
  11768. thumbState.value[bar.value.axis] = el[bar.value.offset] - (e[bar.value.client] - el.getBoundingClientRect()[bar.value.direction]);
  11769. };
  11770. const clickTrackHandler = (e) => {
  11771. if (!thumb.value || !instance.value || !scrollbar.wrapElement) return;
  11772. const thumbPositionPercentage = (Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) - thumb.value[bar.value.offset] / 2) * 100 * offsetRatio.value / instance.value[bar.value.offset];
  11773. scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100;
  11774. };
  11775. const startDrag = (e) => {
  11776. e.stopImmediatePropagation();
  11777. cursorDown = true;
  11778. baseScrollHeight = scrollbar.wrapElement.scrollHeight;
  11779. baseScrollWidth = scrollbar.wrapElement.scrollWidth;
  11780. document.addEventListener("mousemove", mouseMoveDocumentHandler);
  11781. document.addEventListener("mouseup", mouseUpDocumentHandler);
  11782. originalOnSelectStart = document.onselectstart;
  11783. document.onselectstart = () => false;
  11784. };
  11785. const mouseMoveDocumentHandler = (e) => {
  11786. if (!instance.value || !thumb.value) return;
  11787. if (cursorDown === false) return;
  11788. const prevPage = thumbState.value[bar.value.axis];
  11789. if (!prevPage) return;
  11790. const thumbPositionPercentage = ((instance.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1 - (thumb.value[bar.value.offset] - prevPage)) * 100 * offsetRatio.value / instance.value[bar.value.offset];
  11791. if (bar.value.scroll === "scrollLeft") scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * baseScrollWidth / 100;
  11792. else scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * baseScrollHeight / 100;
  11793. };
  11794. const mouseUpDocumentHandler = () => {
  11795. cursorDown = false;
  11796. thumbState.value[bar.value.axis] = 0;
  11797. document.removeEventListener("mousemove", mouseMoveDocumentHandler);
  11798. document.removeEventListener("mouseup", mouseUpDocumentHandler);
  11799. restoreOnselectstart();
  11800. if (cursorLeave) visible.value = false;
  11801. };
  11802. const mouseMoveScrollbarHandler = () => {
  11803. cursorLeave = false;
  11804. visible.value = !!props.size;
  11805. };
  11806. const mouseLeaveScrollbarHandler = () => {
  11807. cursorLeave = true;
  11808. visible.value = cursorDown;
  11809. };
  11810. (0, vue.onBeforeUnmount)(() => {
  11811. restoreOnselectstart();
  11812. document.removeEventListener("mouseup", mouseUpDocumentHandler);
  11813. });
  11814. const restoreOnselectstart = () => {
  11815. if (document.onselectstart !== originalOnSelectStart) document.onselectstart = originalOnSelectStart;
  11816. };
  11817. useEventListener((0, vue.toRef)(scrollbar, "scrollbarElement"), "mousemove", mouseMoveScrollbarHandler);
  11818. useEventListener((0, vue.toRef)(scrollbar, "scrollbarElement"), "mouseleave", mouseLeaveScrollbarHandler);
  11819. return (_ctx, _cache) => {
  11820. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
  11821. name: (0, vue.unref)(ns).b("fade"),
  11822. persisted: ""
  11823. }, {
  11824. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
  11825. ref_key: "instance",
  11826. ref: instance,
  11827. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("bar"), (0, vue.unref)(ns).is(bar.value.key)]),
  11828. onMousedown: clickTrackHandler,
  11829. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
  11830. }, [(0, vue.createElementVNode)("div", {
  11831. ref_key: "thumb",
  11832. ref: thumb,
  11833. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("thumb")),
  11834. style: (0, vue.normalizeStyle)(thumbStyle.value),
  11835. onMousedown: clickThumbHandler
  11836. }, null, 38)], 34), [[vue.vShow, __props.always || visible.value]])]),
  11837. _: 1
  11838. }, 8, ["name"]);
  11839. };
  11840. }
  11841. });
  11842. //#endregion
  11843. //#region ../../packages/components/scrollbar/src/thumb.vue
  11844. var thumb_default = thumb_vue_vue_type_script_setup_true_lang_default;
  11845. //#endregion
  11846. //#region ../../packages/components/scrollbar/src/bar.vue?vue&type=script&setup=true&lang.ts
  11847. var bar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  11848. __name: "bar",
  11849. props: barProps,
  11850. setup(__props, { expose: __expose }) {
  11851. const props = __props;
  11852. const scrollbar = (0, vue.inject)(scrollbarContextKey);
  11853. const moveX = (0, vue.ref)(0);
  11854. const moveY = (0, vue.ref)(0);
  11855. const sizeWidth = (0, vue.ref)("");
  11856. const sizeHeight = (0, vue.ref)("");
  11857. const ratioY = (0, vue.ref)(1);
  11858. const ratioX = (0, vue.ref)(1);
  11859. const handleScroll = (wrap) => {
  11860. if (wrap) {
  11861. const offsetHeight = wrap.offsetHeight - 4;
  11862. const offsetWidth = wrap.offsetWidth - 4;
  11863. moveY.value = wrap.scrollTop * 100 / offsetHeight * ratioY.value;
  11864. moveX.value = wrap.scrollLeft * 100 / offsetWidth * ratioX.value;
  11865. }
  11866. };
  11867. const update = () => {
  11868. const wrap = scrollbar?.wrapElement;
  11869. if (!wrap) return;
  11870. const offsetHeight = wrap.offsetHeight - 4;
  11871. const offsetWidth = wrap.offsetWidth - 4;
  11872. const originalHeight = offsetHeight ** 2 / wrap.scrollHeight;
  11873. const originalWidth = offsetWidth ** 2 / wrap.scrollWidth;
  11874. const height = Math.max(originalHeight, props.minSize);
  11875. const width = Math.max(originalWidth, props.minSize);
  11876. ratioY.value = originalHeight / (offsetHeight - originalHeight) / (height / (offsetHeight - height));
  11877. ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width / (offsetWidth - width));
  11878. sizeHeight.value = height + 4 < offsetHeight ? `${height}px` : "";
  11879. sizeWidth.value = width + 4 < offsetWidth ? `${width}px` : "";
  11880. };
  11881. __expose({
  11882. handleScroll,
  11883. update
  11884. });
  11885. return (_ctx, _cache) => {
  11886. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [(0, vue.createVNode)(thumb_default, {
  11887. move: moveX.value,
  11888. ratio: ratioX.value,
  11889. size: sizeWidth.value,
  11890. always: __props.always
  11891. }, null, 8, [
  11892. "move",
  11893. "ratio",
  11894. "size",
  11895. "always"
  11896. ]), (0, vue.createVNode)(thumb_default, {
  11897. move: moveY.value,
  11898. ratio: ratioY.value,
  11899. size: sizeHeight.value,
  11900. vertical: "",
  11901. always: __props.always
  11902. }, null, 8, [
  11903. "move",
  11904. "ratio",
  11905. "size",
  11906. "always"
  11907. ])], 64);
  11908. };
  11909. }
  11910. });
  11911. //#endregion
  11912. //#region ../../packages/components/scrollbar/src/bar.vue
  11913. var bar_default = bar_vue_vue_type_script_setup_true_lang_default;
  11914. //#endregion
  11915. //#region ../../packages/components/scrollbar/src/scrollbar.vue?vue&type=script&setup=true&lang.ts
  11916. const _hoisted_1$76 = ["tabindex"];
  11917. const COMPONENT_NAME$17 = "ElScrollbar";
  11918. var scrollbar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  11919. name: COMPONENT_NAME$17,
  11920. __name: "scrollbar",
  11921. props: scrollbarProps,
  11922. emits: scrollbarEmits,
  11923. setup(__props, { expose: __expose, emit: __emit }) {
  11924. const props = __props;
  11925. const emit = __emit;
  11926. const ns = useNamespace("scrollbar");
  11927. let stopResizeObserver = void 0;
  11928. let stopWrapResizeObserver = void 0;
  11929. let stopResizeListener = void 0;
  11930. let wrapScrollTop = 0;
  11931. let wrapScrollLeft = 0;
  11932. let direction = "";
  11933. const distanceScrollState = {
  11934. bottom: false,
  11935. top: false,
  11936. right: false,
  11937. left: false
  11938. };
  11939. const scrollbarRef = (0, vue.ref)();
  11940. const wrapRef = (0, vue.ref)();
  11941. const resizeRef = (0, vue.ref)();
  11942. const barRef = (0, vue.ref)();
  11943. const wrapStyle = (0, vue.computed)(() => {
  11944. const style = {};
  11945. const height = addUnit(props.height);
  11946. const maxHeight = addUnit(props.maxHeight);
  11947. if (height) style.height = height;
  11948. if (maxHeight) style.maxHeight = maxHeight;
  11949. return [props.wrapStyle, style];
  11950. });
  11951. const wrapKls = (0, vue.computed)(() => {
  11952. return [
  11953. props.wrapClass,
  11954. ns.e("wrap"),
  11955. { [ns.em("wrap", "hidden-default")]: !props.native }
  11956. ];
  11957. });
  11958. const resizeKls = (0, vue.computed)(() => {
  11959. return [ns.e("view"), props.viewClass];
  11960. });
  11961. const shouldSkipDirection = (direction) => {
  11962. return distanceScrollState[direction] ?? false;
  11963. };
  11964. const DIRECTION_PAIRS = {
  11965. top: "bottom",
  11966. bottom: "top",
  11967. left: "right",
  11968. right: "left"
  11969. };
  11970. const updateTriggerStatus = (arrivedStates) => {
  11971. const oppositeDirection = DIRECTION_PAIRS[direction];
  11972. if (!oppositeDirection) return;
  11973. const arrived = arrivedStates[direction];
  11974. const oppositeArrived = arrivedStates[oppositeDirection];
  11975. if (arrived && !distanceScrollState[direction]) distanceScrollState[direction] = true;
  11976. if (!oppositeArrived && distanceScrollState[oppositeDirection]) distanceScrollState[oppositeDirection] = false;
  11977. };
  11978. const handleScroll = () => {
  11979. if (wrapRef.value) {
  11980. barRef.value?.handleScroll(wrapRef.value);
  11981. const prevTop = wrapScrollTop;
  11982. const prevLeft = wrapScrollLeft;
  11983. wrapScrollTop = wrapRef.value.scrollTop;
  11984. wrapScrollLeft = wrapRef.value.scrollLeft;
  11985. const arrivedStates = {
  11986. bottom: !isGreaterThan(wrapRef.value.scrollHeight - props.distance, wrapRef.value.clientHeight + wrapScrollTop),
  11987. top: wrapScrollTop <= props.distance && prevTop !== 0,
  11988. right: !isGreaterThan(wrapRef.value.scrollWidth - props.distance, wrapRef.value.clientWidth + wrapScrollLeft) && prevLeft !== wrapScrollLeft,
  11989. left: wrapScrollLeft <= props.distance && prevLeft !== 0
  11990. };
  11991. emit("scroll", {
  11992. scrollTop: wrapScrollTop,
  11993. scrollLeft: wrapScrollLeft
  11994. });
  11995. if (prevTop !== wrapScrollTop) direction = wrapScrollTop > prevTop ? "bottom" : "top";
  11996. if (prevLeft !== wrapScrollLeft) direction = wrapScrollLeft > prevLeft ? "right" : "left";
  11997. if (props.distance > 0) {
  11998. if (shouldSkipDirection(direction)) return;
  11999. updateTriggerStatus(arrivedStates);
  12000. }
  12001. if (arrivedStates[direction]) emit("end-reached", direction);
  12002. }
  12003. };
  12004. function scrollTo(arg1, arg2) {
  12005. if (isObject$1(arg1)) wrapRef.value.scrollTo(arg1);
  12006. else if (isNumber(arg1) && isNumber(arg2)) wrapRef.value.scrollTo(arg1, arg2);
  12007. }
  12008. const setScrollTop = (value) => {
  12009. if (!isNumber(value)) {
  12010. /* @__PURE__ */ debugWarn(COMPONENT_NAME$17, "value must be a number");
  12011. return;
  12012. }
  12013. wrapRef.value.scrollTop = value;
  12014. };
  12015. const setScrollLeft = (value) => {
  12016. if (!isNumber(value)) {
  12017. /* @__PURE__ */ debugWarn(COMPONENT_NAME$17, "value must be a number");
  12018. return;
  12019. }
  12020. wrapRef.value.scrollLeft = value;
  12021. };
  12022. const update = () => {
  12023. barRef.value?.update();
  12024. distanceScrollState[direction] = false;
  12025. if (wrapRef.value) barRef.value?.handleScroll(wrapRef.value);
  12026. };
  12027. (0, vue.watch)(() => props.noresize, (noresize) => {
  12028. if (noresize) {
  12029. stopResizeObserver?.();
  12030. stopWrapResizeObserver?.();
  12031. stopResizeListener?.();
  12032. } else {
  12033. ({stop: stopResizeObserver} = useResizeObserver(resizeRef, update));
  12034. ({stop: stopWrapResizeObserver} = useResizeObserver(wrapRef, update));
  12035. stopResizeListener = useEventListener("resize", update);
  12036. }
  12037. }, { immediate: true });
  12038. (0, vue.watch)(() => [props.maxHeight, props.height], () => {
  12039. if (!props.native) (0, vue.nextTick)(() => {
  12040. update();
  12041. });
  12042. });
  12043. (0, vue.provide)(scrollbarContextKey, (0, vue.reactive)({
  12044. scrollbarElement: scrollbarRef,
  12045. wrapElement: wrapRef
  12046. }));
  12047. (0, vue.onActivated)(() => {
  12048. if (wrapRef.value) {
  12049. wrapRef.value.scrollTop = wrapScrollTop;
  12050. wrapRef.value.scrollLeft = wrapScrollLeft;
  12051. }
  12052. });
  12053. (0, vue.onMounted)(() => {
  12054. if (!props.native) (0, vue.nextTick)(() => {
  12055. update();
  12056. });
  12057. });
  12058. (0, vue.onUpdated)(() => update());
  12059. __expose({
  12060. wrapRef,
  12061. update,
  12062. scrollTo,
  12063. setScrollTop,
  12064. setScrollLeft,
  12065. handleScroll
  12066. });
  12067. return (_ctx, _cache) => {
  12068. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  12069. ref_key: "scrollbarRef",
  12070. ref: scrollbarRef,
  12071. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b())
  12072. }, [(0, vue.createElementVNode)("div", {
  12073. ref_key: "wrapRef",
  12074. ref: wrapRef,
  12075. class: (0, vue.normalizeClass)(wrapKls.value),
  12076. style: (0, vue.normalizeStyle)(wrapStyle.value),
  12077. tabindex: __props.tabindex,
  12078. onScroll: handleScroll
  12079. }, [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
  12080. id: __props.id,
  12081. ref_key: "resizeRef",
  12082. ref: resizeRef,
  12083. class: (0, vue.normalizeClass)(resizeKls.value),
  12084. style: (0, vue.normalizeStyle)(__props.viewStyle),
  12085. role: __props.role,
  12086. "aria-label": __props.ariaLabel,
  12087. "aria-orientation": __props.ariaOrientation
  12088. }, {
  12089. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  12090. _: 3
  12091. }, 8, [
  12092. "id",
  12093. "class",
  12094. "style",
  12095. "role",
  12096. "aria-label",
  12097. "aria-orientation"
  12098. ]))], 46, _hoisted_1$76), !__props.native ? ((0, vue.openBlock)(), (0, vue.createBlock)(bar_default, {
  12099. key: 0,
  12100. ref_key: "barRef",
  12101. ref: barRef,
  12102. always: __props.always,
  12103. "min-size": __props.minSize
  12104. }, null, 8, ["always", "min-size"])) : (0, vue.createCommentVNode)("v-if", true)], 2);
  12105. };
  12106. }
  12107. });
  12108. //#endregion
  12109. //#region ../../packages/components/scrollbar/src/scrollbar.vue
  12110. var scrollbar_default = scrollbar_vue_vue_type_script_setup_true_lang_default;
  12111. //#endregion
  12112. //#region ../../packages/components/scrollbar/index.ts
  12113. const ElScrollbar = withInstall(scrollbar_default);
  12114. //#endregion
  12115. //#region ../../packages/components/autocomplete/src/autocomplete.vue?vue&type=script&setup=true&lang.ts
  12116. const _hoisted_1$75 = ["aria-expanded", "aria-owns"];
  12117. const _hoisted_2$42 = { key: 0 };
  12118. const _hoisted_3$19 = [
  12119. "id",
  12120. "aria-selected",
  12121. "onClick"
  12122. ];
  12123. const COMPONENT_NAME$16 = "ElAutocomplete";
  12124. var autocomplete_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  12125. name: COMPONENT_NAME$16,
  12126. inheritAttrs: false,
  12127. __name: "autocomplete",
  12128. props: autocompleteProps,
  12129. emits: autocompleteEmits,
  12130. setup(__props, { expose: __expose, emit: __emit }) {
  12131. const props = __props;
  12132. const emit = __emit;
  12133. const passInputProps = (0, vue.computed)(() => {
  12134. const inputProps = ElInput.props ?? [];
  12135. return pick(props, isArray$1(inputProps) ? inputProps : Object.keys(inputProps));
  12136. });
  12137. const rawAttrs = (0, vue.useAttrs)();
  12138. const disabled = useFormDisabled();
  12139. const ns = useNamespace("autocomplete");
  12140. const inputRef = (0, vue.ref)();
  12141. const regionRef = (0, vue.ref)();
  12142. const popperRef = (0, vue.ref)();
  12143. const listboxRef = (0, vue.ref)();
  12144. let readonly = false;
  12145. let ignoreFocusEvent = false;
  12146. const suggestions = (0, vue.ref)([]);
  12147. const highlightedIndex = (0, vue.ref)(-1);
  12148. const dropdownWidth = (0, vue.ref)("");
  12149. const activated = (0, vue.ref)(false);
  12150. const suggestionDisabled = (0, vue.ref)(false);
  12151. const loading = (0, vue.ref)(false);
  12152. const listboxId = useId();
  12153. const styles = (0, vue.computed)(() => rawAttrs.style);
  12154. const suggestionVisible = (0, vue.computed)(() => {
  12155. return (suggestions.value.length > 0 || loading.value) && activated.value;
  12156. });
  12157. const suggestionLoading = (0, vue.computed)(() => !props.hideLoading && loading.value);
  12158. const refInput = (0, vue.computed)(() => {
  12159. if (inputRef.value) return Array.from(inputRef.value.$el.querySelectorAll("input"));
  12160. return [];
  12161. });
  12162. const onSuggestionShow = () => {
  12163. if (suggestionVisible.value) dropdownWidth.value = `${inputRef.value.$el.offsetWidth}px`;
  12164. };
  12165. const onHide = () => {
  12166. highlightedIndex.value = -1;
  12167. };
  12168. const getData = async (queryString) => {
  12169. if (suggestionDisabled.value) return;
  12170. const cb = (suggestionList) => {
  12171. loading.value = false;
  12172. if (suggestionDisabled.value) return;
  12173. if (isArray$1(suggestionList)) {
  12174. suggestions.value = suggestionList;
  12175. highlightedIndex.value = props.highlightFirstItem ? 0 : -1;
  12176. } else throwError(COMPONENT_NAME$16, "autocomplete suggestions must be an array");
  12177. };
  12178. loading.value = true;
  12179. if (isArray$1(props.fetchSuggestions)) cb(props.fetchSuggestions);
  12180. else {
  12181. const result = await props.fetchSuggestions(queryString, cb);
  12182. if (isArray$1(result)) cb(result);
  12183. }
  12184. };
  12185. const debouncedGetData = useDebounceFn(getData, (0, vue.computed)(() => props.debounce));
  12186. const handleInput = (value) => {
  12187. const valuePresented = !!value;
  12188. emit(INPUT_EVENT, value);
  12189. emit(UPDATE_MODEL_EVENT, value);
  12190. suggestionDisabled.value = false;
  12191. activated.value ||= valuePresented;
  12192. if (!props.triggerOnFocus && !value) {
  12193. suggestionDisabled.value = true;
  12194. suggestions.value = [];
  12195. return;
  12196. }
  12197. debouncedGetData(value);
  12198. };
  12199. const handleMouseDown = (event) => {
  12200. if (disabled.value) return;
  12201. if (event.target?.tagName !== "INPUT" || refInput.value.includes(document.activeElement)) activated.value = true;
  12202. };
  12203. const handleChange = (value) => {
  12204. emit(CHANGE_EVENT, value);
  12205. };
  12206. const handleFocus = (evt) => {
  12207. if (!ignoreFocusEvent) {
  12208. activated.value = true;
  12209. emit("focus", evt);
  12210. const queryString = props.modelValue ?? "";
  12211. if (props.triggerOnFocus && !readonly) debouncedGetData(String(queryString));
  12212. } else ignoreFocusEvent = false;
  12213. };
  12214. const handleBlur = (evt) => {
  12215. setTimeout(() => {
  12216. if (popperRef.value?.isFocusInsideContent()) {
  12217. ignoreFocusEvent = true;
  12218. return;
  12219. }
  12220. activated.value && close();
  12221. emit("blur", evt);
  12222. });
  12223. };
  12224. const handleClear = () => {
  12225. activated.value = false;
  12226. emit(UPDATE_MODEL_EVENT, "");
  12227. emit("clear");
  12228. };
  12229. const handleKeyEnter = async () => {
  12230. if (inputRef.value?.isComposing) return;
  12231. if (suggestionVisible.value && highlightedIndex.value >= 0 && highlightedIndex.value < suggestions.value.length) handleSelect(suggestions.value[highlightedIndex.value]);
  12232. else {
  12233. if (props.selectWhenUnmatched) {
  12234. emit("select", { value: props.modelValue });
  12235. suggestions.value = [];
  12236. highlightedIndex.value = -1;
  12237. }
  12238. activated.value = true;
  12239. debouncedGetData(String(props.modelValue));
  12240. }
  12241. };
  12242. const handleKeyEscape = (evt) => {
  12243. if (suggestionVisible.value) {
  12244. evt.preventDefault();
  12245. evt.stopPropagation();
  12246. close();
  12247. }
  12248. };
  12249. const close = () => {
  12250. activated.value = false;
  12251. };
  12252. const focus = () => {
  12253. inputRef.value?.focus();
  12254. };
  12255. const blur = () => {
  12256. inputRef.value?.blur();
  12257. };
  12258. const handleSelect = async (item) => {
  12259. emit(INPUT_EVENT, item[props.valueKey]);
  12260. emit(UPDATE_MODEL_EVENT, item[props.valueKey]);
  12261. emit("select", item);
  12262. suggestions.value = [];
  12263. highlightedIndex.value = -1;
  12264. };
  12265. const highlight = (index) => {
  12266. if (!suggestionVisible.value || loading.value) return;
  12267. if (index < 0) {
  12268. if (!props.loopNavigation) {
  12269. highlightedIndex.value = -1;
  12270. return;
  12271. }
  12272. index = suggestions.value.length - 1;
  12273. }
  12274. if (index >= suggestions.value.length) index = props.loopNavigation ? 0 : suggestions.value.length - 1;
  12275. const [suggestion, suggestionList] = getSuggestionContext();
  12276. const highlightItem = suggestionList[index];
  12277. const scrollTop = suggestion.scrollTop;
  12278. const { offsetTop, scrollHeight } = highlightItem;
  12279. if (offsetTop + scrollHeight > scrollTop + suggestion.clientHeight) suggestion.scrollTop = offsetTop + scrollHeight - suggestion.clientHeight;
  12280. if (offsetTop < scrollTop) suggestion.scrollTop = offsetTop;
  12281. highlightedIndex.value = index;
  12282. inputRef.value?.ref?.setAttribute("aria-activedescendant", `${listboxId.value}-item-${highlightedIndex.value}`);
  12283. };
  12284. const getSuggestionContext = () => {
  12285. const suggestion = regionRef.value.querySelector(`.${ns.be("suggestion", "wrap")}`);
  12286. return [suggestion, suggestion.querySelectorAll(`.${ns.be("suggestion", "list")} li`)];
  12287. };
  12288. const stopHandle = onClickOutside(listboxRef, (event) => {
  12289. if (popperRef.value?.isFocusInsideContent()) return;
  12290. const hadIgnoredFocus = ignoreFocusEvent;
  12291. ignoreFocusEvent = false;
  12292. if (!suggestionVisible.value) return;
  12293. if (hadIgnoredFocus) handleBlur(new FocusEvent("blur", event));
  12294. else close();
  12295. });
  12296. const handleKeydown = (e) => {
  12297. switch (getEventCode(e)) {
  12298. case EVENT_CODE.up:
  12299. e.preventDefault();
  12300. highlight(highlightedIndex.value - 1);
  12301. break;
  12302. case EVENT_CODE.down:
  12303. e.preventDefault();
  12304. highlight(highlightedIndex.value + 1);
  12305. break;
  12306. case EVENT_CODE.enter:
  12307. case EVENT_CODE.numpadEnter:
  12308. e.preventDefault();
  12309. handleKeyEnter();
  12310. break;
  12311. case EVENT_CODE.tab:
  12312. close();
  12313. break;
  12314. case EVENT_CODE.esc:
  12315. handleKeyEscape(e);
  12316. break;
  12317. case EVENT_CODE.home:
  12318. e.preventDefault();
  12319. highlight(0);
  12320. break;
  12321. case EVENT_CODE.end:
  12322. e.preventDefault();
  12323. highlight(suggestions.value.length - 1);
  12324. break;
  12325. case EVENT_CODE.pageUp:
  12326. e.preventDefault();
  12327. highlight(Math.max(0, highlightedIndex.value - 10));
  12328. break;
  12329. case EVENT_CODE.pageDown:
  12330. e.preventDefault();
  12331. highlight(Math.min(suggestions.value.length - 1, highlightedIndex.value + 10));
  12332. break;
  12333. }
  12334. };
  12335. (0, vue.onBeforeUnmount)(() => {
  12336. stopHandle?.();
  12337. });
  12338. (0, vue.onMounted)(() => {
  12339. const inputElement = inputRef.value?.ref;
  12340. if (!inputElement) return;
  12341. [
  12342. {
  12343. key: "role",
  12344. value: "textbox"
  12345. },
  12346. {
  12347. key: "aria-autocomplete",
  12348. value: "list"
  12349. },
  12350. {
  12351. key: "aria-controls",
  12352. value: listboxId.value
  12353. },
  12354. {
  12355. key: "aria-activedescendant",
  12356. value: `${listboxId.value}-item-${highlightedIndex.value}`
  12357. }
  12358. ].forEach(({ key, value }) => inputElement.setAttribute(key, value));
  12359. readonly = inputElement.hasAttribute("readonly");
  12360. });
  12361. __expose({
  12362. highlightedIndex,
  12363. activated,
  12364. loading,
  12365. inputRef,
  12366. popperRef,
  12367. suggestions,
  12368. handleSelect,
  12369. handleKeyEnter,
  12370. focus,
  12371. blur,
  12372. close,
  12373. highlight,
  12374. getData
  12375. });
  12376. return (_ctx, _cache) => {
  12377. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
  12378. ref_key: "popperRef",
  12379. ref: popperRef,
  12380. visible: suggestionVisible.value,
  12381. placement: __props.placement,
  12382. "fallback-placements": ["bottom-start", "top-start"],
  12383. "popper-class": [(0, vue.unref)(ns).e("popper"), __props.popperClass],
  12384. "popper-style": __props.popperStyle,
  12385. "popper-options": __props.popperOptions,
  12386. "show-arrow": __props.showArrow,
  12387. teleported: __props.teleported,
  12388. "append-to": __props.appendTo,
  12389. "gpu-acceleration": false,
  12390. pure: "",
  12391. "manual-mode": "",
  12392. effect: "light",
  12393. trigger: "click",
  12394. transition: `${(0, vue.unref)(ns).namespace.value}-zoom-in-top`,
  12395. persistent: "",
  12396. role: "listbox",
  12397. onBeforeShow: onSuggestionShow,
  12398. onHide
  12399. }, {
  12400. content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  12401. ref_key: "regionRef",
  12402. ref: regionRef,
  12403. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("suggestion"), (0, vue.unref)(ns).is("loading", suggestionLoading.value)]),
  12404. style: (0, vue.normalizeStyle)({
  12405. [__props.fitInputWidth ? "width" : "minWidth"]: dropdownWidth.value,
  12406. outline: "none"
  12407. }),
  12408. role: "region"
  12409. }, [
  12410. _ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  12411. key: 0,
  12412. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("suggestion", "header")),
  12413. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
  12414. }, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  12415. (0, vue.createVNode)((0, vue.unref)(ElScrollbar), {
  12416. id: (0, vue.unref)(listboxId),
  12417. tag: "ul",
  12418. "wrap-class": (0, vue.unref)(ns).be("suggestion", "wrap"),
  12419. "view-class": (0, vue.unref)(ns).be("suggestion", "list"),
  12420. role: "listbox"
  12421. }, {
  12422. default: (0, vue.withCtx)(() => [suggestionLoading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", _hoisted_2$42, [(0, vue.renderSlot)(_ctx.$slots, "loading", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading")) }, {
  12423. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(loading_default))]),
  12424. _: 1
  12425. }, 8, ["class"])])])) : ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, (0, vue.renderList)(suggestions.value, (item, index) => {
  12426. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  12427. id: `${(0, vue.unref)(listboxId)}-item-${index}`,
  12428. key: index,
  12429. class: (0, vue.normalizeClass)({ highlighted: highlightedIndex.value === index }),
  12430. role: "option",
  12431. "aria-selected": highlightedIndex.value === index,
  12432. onClick: ($event) => handleSelect(item)
  12433. }, [(0, vue.renderSlot)(_ctx.$slots, "default", { item }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item[__props.valueKey]), 1)])], 10, _hoisted_3$19);
  12434. }), 128))]),
  12435. _: 3
  12436. }, 8, [
  12437. "id",
  12438. "wrap-class",
  12439. "view-class"
  12440. ]),
  12441. _ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  12442. key: 1,
  12443. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("suggestion", "footer")),
  12444. onClick: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"]))
  12445. }, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  12446. ], 6)]),
  12447. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  12448. ref_key: "listboxRef",
  12449. ref: listboxRef,
  12450. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), _ctx.$attrs.class]),
  12451. style: (0, vue.normalizeStyle)(styles.value),
  12452. role: "combobox",
  12453. "aria-haspopup": "listbox",
  12454. "aria-expanded": suggestionVisible.value,
  12455. "aria-owns": (0, vue.unref)(listboxId)
  12456. }, [(0, vue.createVNode)((0, vue.unref)(ElInput), (0, vue.mergeProps)({
  12457. ref_key: "inputRef",
  12458. ref: inputRef
  12459. }, (0, vue.mergeProps)(passInputProps.value, _ctx.$attrs), {
  12460. "model-value": __props.modelValue,
  12461. disabled: (0, vue.unref)(disabled),
  12462. onInput: handleInput,
  12463. onChange: handleChange,
  12464. onFocus: handleFocus,
  12465. onBlur: handleBlur,
  12466. onClear: handleClear,
  12467. onKeydown: handleKeydown,
  12468. onMousedown: handleMouseDown
  12469. }), (0, vue.createSlots)({ _: 2 }, [
  12470. _ctx.$slots.prepend ? {
  12471. name: "prepend",
  12472. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "prepend")]),
  12473. key: "0"
  12474. } : void 0,
  12475. _ctx.$slots.append ? {
  12476. name: "append",
  12477. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "append")]),
  12478. key: "1"
  12479. } : void 0,
  12480. _ctx.$slots.prefix ? {
  12481. name: "prefix",
  12482. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "prefix")]),
  12483. key: "2"
  12484. } : void 0,
  12485. _ctx.$slots.suffix ? {
  12486. name: "suffix",
  12487. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "suffix")]),
  12488. key: "3"
  12489. } : void 0
  12490. ]), 1040, ["model-value", "disabled"])], 14, _hoisted_1$75)]),
  12491. _: 3
  12492. }, 8, [
  12493. "visible",
  12494. "placement",
  12495. "popper-class",
  12496. "popper-style",
  12497. "popper-options",
  12498. "show-arrow",
  12499. "teleported",
  12500. "append-to",
  12501. "transition"
  12502. ]);
  12503. };
  12504. }
  12505. });
  12506. //#endregion
  12507. //#region ../../packages/components/autocomplete/src/autocomplete.vue
  12508. var autocomplete_default = autocomplete_vue_vue_type_script_setup_true_lang_default;
  12509. //#endregion
  12510. //#region ../../packages/components/autocomplete/index.ts
  12511. const ElAutocomplete = withInstall(autocomplete_default);
  12512. //#endregion
  12513. //#region ../../packages/components/avatar/src/avatar.ts
  12514. const avatarProps = buildProps({
  12515. size: {
  12516. type: [Number, String],
  12517. values: componentSizes,
  12518. validator: (val) => isNumber(val)
  12519. },
  12520. shape: {
  12521. type: String,
  12522. values: ["circle", "square"]
  12523. },
  12524. icon: { type: iconPropType },
  12525. src: {
  12526. type: String,
  12527. default: ""
  12528. },
  12529. alt: String,
  12530. srcSet: String,
  12531. fit: {
  12532. type: definePropType(String),
  12533. default: "cover"
  12534. }
  12535. });
  12536. const avatarEmits = { error: (evt) => evt instanceof Event };
  12537. //#endregion
  12538. //#region ../../packages/components/avatar/src/constants.ts
  12539. const avatarGroupContextKey = Symbol("avatarGroupContextKey");
  12540. //#endregion
  12541. //#region ../../packages/components/avatar/src/avatar.vue?vue&type=script&setup=true&lang.ts
  12542. const _hoisted_1$74 = [
  12543. "src",
  12544. "alt",
  12545. "srcset"
  12546. ];
  12547. var avatar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  12548. name: "ElAvatar",
  12549. __name: "avatar",
  12550. props: avatarProps,
  12551. emits: avatarEmits,
  12552. setup(__props, { emit: __emit }) {
  12553. const props = __props;
  12554. const emit = __emit;
  12555. const avatarGroupContext = (0, vue.inject)(avatarGroupContextKey, void 0);
  12556. const ns = useNamespace("avatar");
  12557. const hasLoadError = (0, vue.ref)(false);
  12558. const size = (0, vue.computed)(() => props.size ?? avatarGroupContext?.size);
  12559. const shape = (0, vue.computed)(() => props.shape ?? avatarGroupContext?.shape ?? "circle");
  12560. const avatarClass = (0, vue.computed)(() => {
  12561. const { icon } = props;
  12562. const classList = [ns.b()];
  12563. if (isString(size.value)) classList.push(ns.m(size.value));
  12564. if (icon) classList.push(ns.m("icon"));
  12565. if (shape.value) classList.push(ns.m(shape.value));
  12566. return classList;
  12567. });
  12568. const sizeStyle = (0, vue.computed)(() => {
  12569. return isNumber(size.value) ? ns.cssVarBlock({ size: addUnit(size.value) }) : void 0;
  12570. });
  12571. const fitStyle = (0, vue.computed)(() => ({ objectFit: props.fit }));
  12572. (0, vue.watch)(() => [props.src, props.srcSet], () => hasLoadError.value = false);
  12573. function handleError(e) {
  12574. hasLoadError.value = true;
  12575. emit("error", e);
  12576. }
  12577. return (_ctx, _cache) => {
  12578. return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  12579. class: (0, vue.normalizeClass)(avatarClass.value),
  12580. style: (0, vue.normalizeStyle)(sizeStyle.value)
  12581. }, [(__props.src || __props.srcSet) && !hasLoadError.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
  12582. key: 0,
  12583. src: __props.src,
  12584. alt: __props.alt,
  12585. srcset: __props.srcSet,
  12586. style: (0, vue.normalizeStyle)(fitStyle.value),
  12587. onError: handleError
  12588. }, null, 44, _hoisted_1$74)) : __props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
  12589. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
  12590. _: 1
  12591. })) : (0, vue.renderSlot)(_ctx.$slots, "default", { key: 2 })], 6);
  12592. };
  12593. }
  12594. });
  12595. //#endregion
  12596. //#region ../../packages/components/avatar/src/avatar.vue
  12597. var avatar_default = avatar_vue_vue_type_script_setup_true_lang_default;
  12598. //#endregion
  12599. //#region ../../packages/components/avatar/src/avatar-group-props.ts
  12600. const avatarGroupProps = {
  12601. size: {
  12602. type: definePropType([Number, String]),
  12603. values: componentSizes,
  12604. validator: (val) => isNumber(val)
  12605. },
  12606. shape: {
  12607. type: definePropType(String),
  12608. values: ["circle", "square"]
  12609. },
  12610. collapseAvatars: Boolean,
  12611. collapseAvatarsTooltip: Boolean,
  12612. maxCollapseAvatars: {
  12613. type: Number,
  12614. default: 1
  12615. },
  12616. effect: {
  12617. type: definePropType(String),
  12618. default: "light"
  12619. },
  12620. placement: {
  12621. type: definePropType(String),
  12622. values: Ee,
  12623. default: "top"
  12624. },
  12625. popperClass: useTooltipContentProps.popperClass,
  12626. popperStyle: useTooltipContentProps.popperStyle,
  12627. collapseClass: String,
  12628. collapseStyle: {
  12629. type: definePropType([
  12630. String,
  12631. Array,
  12632. Object,
  12633. Boolean
  12634. ]),
  12635. default: void 0
  12636. }
  12637. };
  12638. //#endregion
  12639. //#region ../../packages/components/avatar/src/avatar-group.tsx
  12640. var avatar_group_default = /* @__PURE__ */ (0, vue.defineComponent)({
  12641. name: "ElAvatarGroup",
  12642. props: avatarGroupProps,
  12643. setup(props, { slots }) {
  12644. const ns = useNamespace("avatar-group");
  12645. (0, vue.provide)(avatarGroupContextKey, (0, vue.reactive)({
  12646. size: (0, vue.toRef)(props, "size"),
  12647. shape: (0, vue.toRef)(props, "shape")
  12648. }));
  12649. return () => {
  12650. const avatars = flattedChildren(slots.default?.() ?? []);
  12651. let visibleAvatars = avatars;
  12652. if (props.collapseAvatars && avatars.length > props.maxCollapseAvatars) {
  12653. visibleAvatars = avatars.slice(0, props.maxCollapseAvatars);
  12654. const hiddenAvatars = avatars.slice(props.maxCollapseAvatars);
  12655. visibleAvatars.push((0, vue.createVNode)(ElTooltip, {
  12656. "popperClass": props.popperClass,
  12657. "popperStyle": props.popperStyle,
  12658. "placement": props.placement,
  12659. "effect": props.effect,
  12660. "disabled": !props.collapseAvatarsTooltip
  12661. }, {
  12662. default: () => (0, vue.createVNode)(avatar_default, {
  12663. "size": props.size,
  12664. "shape": props.shape,
  12665. "class": props.collapseClass,
  12666. "style": props.collapseStyle
  12667. }, { default: () => [(0, vue.createTextVNode)("+ "), hiddenAvatars.length] }),
  12668. content: () => (0, vue.createVNode)("div", { "class": ns.e("collapse-avatars") }, [hiddenAvatars.map((node, idx) => (0, vue.isVNode)(node) ? (0, vue.cloneVNode)(node, { key: node.key ?? idx }) : node)])
  12669. }));
  12670. }
  12671. return (0, vue.createVNode)("div", { "class": ns.b() }, [visibleAvatars]);
  12672. };
  12673. }
  12674. });
  12675. //#endregion
  12676. //#region ../../packages/components/avatar/index.ts
  12677. const ElAvatar = withInstall(avatar_default, { AvatarGroup: avatar_group_default });
  12678. const ElAvatarGroup = withNoopInstall(avatar_group_default);
  12679. //#endregion
  12680. //#region ../../packages/components/backtop/src/backtop.ts
  12681. const backtopProps = {
  12682. visibilityHeight: {
  12683. type: Number,
  12684. default: 200
  12685. },
  12686. target: {
  12687. type: String,
  12688. default: ""
  12689. },
  12690. right: {
  12691. type: Number,
  12692. default: 40
  12693. },
  12694. bottom: {
  12695. type: Number,
  12696. default: 40
  12697. }
  12698. };
  12699. const backtopEmits = { click: (evt) => evt instanceof MouseEvent };
  12700. //#endregion
  12701. //#region ../../packages/components/backtop/src/use-backtop.ts
  12702. const useBackTop = (props, emit, componentName) => {
  12703. const el = (0, vue.shallowRef)();
  12704. const container = (0, vue.shallowRef)();
  12705. const visible = (0, vue.ref)(false);
  12706. const handleScroll = () => {
  12707. if (el.value) visible.value = el.value.scrollTop >= props.visibilityHeight;
  12708. };
  12709. const handleClick = (event) => {
  12710. el.value?.scrollTo({
  12711. top: 0,
  12712. behavior: "smooth"
  12713. });
  12714. emit("click", event);
  12715. };
  12716. useEventListener(container, "scroll", useThrottleFn(handleScroll, 300, true));
  12717. (0, vue.onMounted)(() => {
  12718. container.value = document;
  12719. el.value = document.documentElement;
  12720. if (props.target) {
  12721. el.value = document.querySelector(props.target) ?? void 0;
  12722. if (!el.value) throwError(componentName, `target does not exist: ${props.target}`);
  12723. container.value = el.value;
  12724. }
  12725. handleScroll();
  12726. });
  12727. return {
  12728. visible,
  12729. handleClick
  12730. };
  12731. };
  12732. //#endregion
  12733. //#region ../../packages/components/backtop/src/backtop.vue?vue&type=script&setup=true&lang.ts
  12734. const COMPONENT_NAME$15 = "ElBacktop";
  12735. var backtop_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  12736. name: COMPONENT_NAME$15,
  12737. __name: "backtop",
  12738. props: backtopProps,
  12739. emits: backtopEmits,
  12740. setup(__props, { emit: __emit }) {
  12741. const props = __props;
  12742. const emit = __emit;
  12743. const ns = useNamespace("backtop");
  12744. const { handleClick, visible } = useBackTop(props, emit, COMPONENT_NAME$15);
  12745. const backTopStyle = (0, vue.computed)(() => ({
  12746. right: `${props.right}px`,
  12747. bottom: `${props.bottom}px`
  12748. }));
  12749. return (_ctx, _cache) => {
  12750. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, { name: `${(0, vue.unref)(ns).namespace.value}-fade-in` }, {
  12751. default: (0, vue.withCtx)(() => [(0, vue.unref)(visible) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  12752. key: 0,
  12753. style: (0, vue.normalizeStyle)(backTopStyle.value),
  12754. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  12755. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)((...args) => (0, vue.unref)(handleClick) && (0, vue.unref)(handleClick)(...args), ["stop"]))
  12756. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon")) }, {
  12757. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(caret_top_default))]),
  12758. _: 1
  12759. }, 8, ["class"])])], 6)) : (0, vue.createCommentVNode)("v-if", true)]),
  12760. _: 3
  12761. }, 8, ["name"]);
  12762. };
  12763. }
  12764. });
  12765. //#endregion
  12766. //#region ../../packages/components/backtop/src/backtop.vue
  12767. var backtop_default = backtop_vue_vue_type_script_setup_true_lang_default;
  12768. //#endregion
  12769. //#region ../../packages/components/backtop/index.ts
  12770. const ElBacktop = withInstall(backtop_default);
  12771. //#endregion
  12772. //#region ../../packages/components/badge/src/badge.ts
  12773. const badgeProps = buildProps({
  12774. value: {
  12775. type: [String, Number],
  12776. default: ""
  12777. },
  12778. max: {
  12779. type: Number,
  12780. default: 99
  12781. },
  12782. isDot: Boolean,
  12783. hidden: Boolean,
  12784. type: {
  12785. type: String,
  12786. values: [
  12787. "primary",
  12788. "success",
  12789. "warning",
  12790. "info",
  12791. "danger"
  12792. ],
  12793. default: "danger"
  12794. },
  12795. showZero: {
  12796. type: Boolean,
  12797. default: true
  12798. },
  12799. color: String,
  12800. badgeStyle: {
  12801. type: definePropType([
  12802. String,
  12803. Object,
  12804. Array,
  12805. Boolean
  12806. ]),
  12807. default: void 0
  12808. },
  12809. offset: {
  12810. type: definePropType(Array),
  12811. default: () => [0, 0]
  12812. },
  12813. badgeClass: { type: String }
  12814. });
  12815. //#endregion
  12816. //#region ../../packages/components/badge/src/badge.vue?vue&type=script&setup=true&lang.ts
  12817. var badge_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  12818. name: "ElBadge",
  12819. __name: "badge",
  12820. props: badgeProps,
  12821. setup(__props, { expose: __expose }) {
  12822. const props = __props;
  12823. const ns = useNamespace("badge");
  12824. const content = (0, vue.computed)(() => {
  12825. if (props.isDot) return "";
  12826. if (isNumber(props.value) && isNumber(props.max)) return props.max < props.value ? `${props.max}+` : `${props.value}`;
  12827. return `${props.value}`;
  12828. });
  12829. const style = (0, vue.computed)(() => {
  12830. return [{
  12831. backgroundColor: props.color,
  12832. marginRight: addUnit(-props.offset[0]),
  12833. marginTop: addUnit(props.offset[1])
  12834. }, props.badgeStyle ?? {}];
  12835. });
  12836. __expose({ content });
  12837. return (_ctx, _cache) => {
  12838. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [(0, vue.renderSlot)(_ctx.$slots, "default"), (0, vue.createVNode)(vue.Transition, { name: `${(0, vue.unref)(ns).namespace.value}-zoom-in-center` }, {
  12839. default: (0, vue.withCtx)(() => [!__props.hidden && (content.value || __props.isDot || _ctx.$slots.content) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("sup", {
  12840. key: 0,
  12841. class: (0, vue.normalizeClass)([
  12842. (0, vue.unref)(ns).e("content"),
  12843. (0, vue.unref)(ns).em("content", __props.type),
  12844. (0, vue.unref)(ns).is("fixed", !!_ctx.$slots.default),
  12845. (0, vue.unref)(ns).is("dot", __props.isDot),
  12846. (0, vue.unref)(ns).is("hide-zero", !__props.showZero && __props.value === 0),
  12847. __props.badgeClass
  12848. ]),
  12849. style: (0, vue.normalizeStyle)(style.value)
  12850. }, [(0, vue.renderSlot)(_ctx.$slots, "content", { value: content.value }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(content.value), 1)])], 6)) : (0, vue.createCommentVNode)("v-if", true)]),
  12851. _: 3
  12852. }, 8, ["name"])], 2);
  12853. };
  12854. }
  12855. });
  12856. //#endregion
  12857. //#region ../../packages/components/badge/src/badge.vue
  12858. var badge_default = badge_vue_vue_type_script_setup_true_lang_default;
  12859. //#endregion
  12860. //#region ../../packages/components/badge/index.ts
  12861. const ElBadge = withInstall(badge_default);
  12862. //#endregion
  12863. //#region ../../packages/components/breadcrumb/src/breadcrumb.ts
  12864. const breadcrumbProps = buildProps({
  12865. separator: {
  12866. type: String,
  12867. default: "/"
  12868. },
  12869. separatorIcon: { type: iconPropType }
  12870. });
  12871. //#endregion
  12872. //#region ../../packages/components/breadcrumb/src/constants.ts
  12873. const breadcrumbKey = Symbol("breadcrumbKey");
  12874. //#endregion
  12875. //#region ../../packages/components/breadcrumb/src/breadcrumb.vue?vue&type=script&setup=true&lang.ts
  12876. const _hoisted_1$73 = ["aria-label"];
  12877. var breadcrumb_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  12878. name: "ElBreadcrumb",
  12879. __name: "breadcrumb",
  12880. props: breadcrumbProps,
  12881. setup(__props) {
  12882. const { t } = useLocale();
  12883. const props = __props;
  12884. const ns = useNamespace("breadcrumb");
  12885. const breadcrumb = (0, vue.ref)();
  12886. (0, vue.provide)(breadcrumbKey, props);
  12887. (0, vue.onMounted)(() => {
  12888. const items = breadcrumb.value.querySelectorAll(`.${ns.e("item")}`);
  12889. if (items.length) items[items.length - 1].setAttribute("aria-current", "page");
  12890. });
  12891. return (_ctx, _cache) => {
  12892. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  12893. ref_key: "breadcrumb",
  12894. ref: breadcrumb,
  12895. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  12896. "aria-label": (0, vue.unref)(t)("el.breadcrumb.label"),
  12897. role: "navigation"
  12898. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 10, _hoisted_1$73);
  12899. };
  12900. }
  12901. });
  12902. //#endregion
  12903. //#region ../../packages/components/breadcrumb/src/breadcrumb.vue
  12904. var breadcrumb_default = breadcrumb_vue_vue_type_script_setup_true_lang_default;
  12905. //#endregion
  12906. //#region ../../packages/components/breadcrumb/src/breadcrumb-item.ts
  12907. const breadcrumbItemProps = buildProps({
  12908. to: {
  12909. type: definePropType([String, Object]),
  12910. default: ""
  12911. },
  12912. replace: Boolean
  12913. });
  12914. //#endregion
  12915. //#region ../../packages/components/breadcrumb/src/breadcrumb-item.vue?vue&type=script&setup=true&lang.ts
  12916. var breadcrumb_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  12917. name: "ElBreadcrumbItem",
  12918. __name: "breadcrumb-item",
  12919. props: breadcrumbItemProps,
  12920. setup(__props) {
  12921. const props = __props;
  12922. const instance = (0, vue.getCurrentInstance)();
  12923. const breadcrumbContext = (0, vue.inject)(breadcrumbKey, void 0);
  12924. const ns = useNamespace("breadcrumb");
  12925. const router = instance.appContext.config.globalProperties.$router;
  12926. const onClick = () => {
  12927. if (!props.to || !router) return;
  12928. props.replace ? router.replace(props.to) : router.push(props.to);
  12929. };
  12930. return (_ctx, _cache) => {
  12931. return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item")) }, [(0, vue.createElementVNode)("span", {
  12932. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("inner"), (0, vue.unref)(ns).is("link", !!__props.to)]),
  12933. role: "link",
  12934. onClick
  12935. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2), (0, vue.unref)(breadcrumbContext)?.separatorIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  12936. key: 0,
  12937. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("separator"))
  12938. }, {
  12939. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(breadcrumbContext).separatorIcon)))]),
  12940. _: 1
  12941. }, 8, ["class"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  12942. key: 1,
  12943. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("separator")),
  12944. role: "presentation"
  12945. }, (0, vue.toDisplayString)((0, vue.unref)(breadcrumbContext)?.separator), 3))], 2);
  12946. };
  12947. }
  12948. });
  12949. //#endregion
  12950. //#region ../../packages/components/breadcrumb/src/breadcrumb-item.vue
  12951. var breadcrumb_item_default = breadcrumb_item_vue_vue_type_script_setup_true_lang_default;
  12952. //#endregion
  12953. //#region ../../packages/components/breadcrumb/index.ts
  12954. const ElBreadcrumb = withInstall(breadcrumb_default, { BreadcrumbItem: breadcrumb_item_default });
  12955. const ElBreadcrumbItem = withNoopInstall(breadcrumb_item_default);
  12956. //#endregion
  12957. //#region ../../packages/components/button/src/button.ts
  12958. const buttonTypes = [
  12959. "default",
  12960. "primary",
  12961. "success",
  12962. "warning",
  12963. "info",
  12964. "danger",
  12965. "text",
  12966. ""
  12967. ];
  12968. const buttonNativeTypes = [
  12969. "button",
  12970. "submit",
  12971. "reset"
  12972. ];
  12973. const buttonProps = buildProps({
  12974. size: useSizeProp,
  12975. disabled: {
  12976. type: Boolean,
  12977. default: void 0
  12978. },
  12979. type: {
  12980. type: String,
  12981. values: buttonTypes,
  12982. default: ""
  12983. },
  12984. icon: { type: iconPropType },
  12985. nativeType: {
  12986. type: String,
  12987. values: buttonNativeTypes,
  12988. default: "button"
  12989. },
  12990. loading: Boolean,
  12991. loadingIcon: {
  12992. type: iconPropType,
  12993. default: () => loading_default
  12994. },
  12995. plain: {
  12996. type: Boolean,
  12997. default: void 0
  12998. },
  12999. text: {
  13000. type: Boolean,
  13001. default: void 0
  13002. },
  13003. link: Boolean,
  13004. bg: Boolean,
  13005. autofocus: Boolean,
  13006. round: {
  13007. type: Boolean,
  13008. default: void 0
  13009. },
  13010. circle: Boolean,
  13011. dashed: {
  13012. type: Boolean,
  13013. default: void 0
  13014. },
  13015. color: String,
  13016. dark: Boolean,
  13017. autoInsertSpace: {
  13018. type: Boolean,
  13019. default: void 0
  13020. },
  13021. tag: {
  13022. type: definePropType([String, Object]),
  13023. default: "button"
  13024. }
  13025. });
  13026. const buttonEmits = { click: (evt) => evt instanceof MouseEvent };
  13027. //#endregion
  13028. //#region ../../packages/components/button/src/constants.ts
  13029. const buttonGroupContextKey = Symbol("buttonGroupContextKey");
  13030. //#endregion
  13031. //#region ../../packages/components/button/src/use-button.ts
  13032. const useButton = (props, emit) => {
  13033. useDeprecated({
  13034. from: "type.text",
  13035. replacement: "link",
  13036. version: "3.0.0",
  13037. scope: "props",
  13038. ref: "https://element-plus.org/en-US/component/button.html#button-attributes"
  13039. }, (0, vue.computed)(() => props.type === "text"));
  13040. const buttonGroupContext = (0, vue.inject)(buttonGroupContextKey, void 0);
  13041. const globalConfig = useGlobalConfig("button");
  13042. const { form } = useFormItem();
  13043. const _size = useFormSize((0, vue.computed)(() => buttonGroupContext?.size));
  13044. const _disabled = useFormDisabled();
  13045. const _ref = (0, vue.ref)();
  13046. const slots = (0, vue.useSlots)();
  13047. const _type = (0, vue.computed)(() => props.type || buttonGroupContext?.type || globalConfig.value?.type || "");
  13048. const autoInsertSpace = (0, vue.computed)(() => props.autoInsertSpace ?? globalConfig.value?.autoInsertSpace ?? false);
  13049. const _plain = (0, vue.computed)(() => props.plain ?? globalConfig.value?.plain ?? false);
  13050. const _round = (0, vue.computed)(() => props.round ?? globalConfig.value?.round ?? false);
  13051. const _text = (0, vue.computed)(() => props.text ?? globalConfig.value?.text ?? false);
  13052. const _dashed = (0, vue.computed)(() => props.dashed ?? globalConfig.value?.dashed ?? false);
  13053. const _props = (0, vue.computed)(() => {
  13054. if (props.tag === "button") return {
  13055. ariaDisabled: _disabled.value || props.loading,
  13056. disabled: _disabled.value || props.loading,
  13057. autofocus: props.autofocus,
  13058. type: props.nativeType
  13059. };
  13060. return {};
  13061. });
  13062. const shouldAddSpace = (0, vue.computed)(() => {
  13063. const defaultSlot = slots.default?.();
  13064. if (autoInsertSpace.value && defaultSlot?.length === 1) {
  13065. const slot = defaultSlot[0];
  13066. if (slot?.type === vue.Text) {
  13067. const text = slot.children;
  13068. return /^\p{Unified_Ideograph}{2}$/u.test(text.trim());
  13069. }
  13070. }
  13071. return false;
  13072. });
  13073. const handleClick = (evt) => {
  13074. if (_disabled.value || props.loading) {
  13075. evt.stopPropagation();
  13076. return;
  13077. }
  13078. if (props.nativeType === "reset") form?.resetFields();
  13079. emit("click", evt);
  13080. };
  13081. return {
  13082. _disabled,
  13083. _size,
  13084. _type,
  13085. _ref,
  13086. _props,
  13087. _plain,
  13088. _round,
  13089. _text,
  13090. _dashed,
  13091. shouldAddSpace,
  13092. handleClick
  13093. };
  13094. };
  13095. //#endregion
  13096. //#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/util.js
  13097. function bound01(n, max) {
  13098. if (isOnePointZero(n)) n = "100%";
  13099. const isPercent = isPercentage(n);
  13100. n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));
  13101. if (isPercent) n = parseInt(String(n * max), 10) / 100;
  13102. if (Math.abs(n - max) < 1e-6) return 1;
  13103. if (max === 360) n = (n < 0 ? n % max + max : n % max) / parseFloat(String(max));
  13104. else n = n % max / parseFloat(String(max));
  13105. return n;
  13106. }
  13107. function clamp01(val) {
  13108. return Math.min(1, Math.max(0, val));
  13109. }
  13110. function isOnePointZero(n) {
  13111. return typeof n === "string" && n.indexOf(".") !== -1 && parseFloat(n) === 1;
  13112. }
  13113. function isPercentage(n) {
  13114. return typeof n === "string" && n.indexOf("%") !== -1;
  13115. }
  13116. function boundAlpha(a) {
  13117. a = parseFloat(a);
  13118. if (isNaN(a) || a < 0 || a > 1) a = 1;
  13119. return a;
  13120. }
  13121. function convertToPercentage(n) {
  13122. if (Number(n) <= 1) return `${Number(n) * 100}%`;
  13123. return n;
  13124. }
  13125. function pad2(c) {
  13126. return c.length === 1 ? "0" + c : String(c);
  13127. }
  13128. //#endregion
  13129. //#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/conversion.js
  13130. function rgbToRgb(r, g, b) {
  13131. return {
  13132. r: bound01(r, 255) * 255,
  13133. g: bound01(g, 255) * 255,
  13134. b: bound01(b, 255) * 255
  13135. };
  13136. }
  13137. function rgbToHsl(r, g, b) {
  13138. r = bound01(r, 255);
  13139. g = bound01(g, 255);
  13140. b = bound01(b, 255);
  13141. const max = Math.max(r, g, b);
  13142. const min = Math.min(r, g, b);
  13143. let h = 0;
  13144. let s = 0;
  13145. const l = (max + min) / 2;
  13146. if (max === min) {
  13147. s = 0;
  13148. h = 0;
  13149. } else {
  13150. const d = max - min;
  13151. s = l > .5 ? d / (2 - max - min) : d / (max + min);
  13152. switch (max) {
  13153. case r:
  13154. h = (g - b) / d + (g < b ? 6 : 0);
  13155. break;
  13156. case g:
  13157. h = (b - r) / d + 2;
  13158. break;
  13159. case b:
  13160. h = (r - g) / d + 4;
  13161. break;
  13162. default: break;
  13163. }
  13164. h /= 6;
  13165. }
  13166. return {
  13167. h,
  13168. s,
  13169. l
  13170. };
  13171. }
  13172. function hue2rgb(p, q, t) {
  13173. if (t < 0) t += 1;
  13174. if (t > 1) t -= 1;
  13175. if (t < 1 / 6) return p + (q - p) * (6 * t);
  13176. if (t < 1 / 2) return q;
  13177. if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
  13178. return p;
  13179. }
  13180. function hslToRgb(h, s, l) {
  13181. let r;
  13182. let g;
  13183. let b;
  13184. h = bound01(h, 360);
  13185. s = bound01(s, 100);
  13186. l = bound01(l, 100);
  13187. if (s === 0) {
  13188. g = l;
  13189. b = l;
  13190. r = l;
  13191. } else {
  13192. const q = l < .5 ? l * (1 + s) : l + s - l * s;
  13193. const p = 2 * l - q;
  13194. r = hue2rgb(p, q, h + 1 / 3);
  13195. g = hue2rgb(p, q, h);
  13196. b = hue2rgb(p, q, h - 1 / 3);
  13197. }
  13198. return {
  13199. r: r * 255,
  13200. g: g * 255,
  13201. b: b * 255
  13202. };
  13203. }
  13204. function rgbToHsv(r, g, b) {
  13205. r = bound01(r, 255);
  13206. g = bound01(g, 255);
  13207. b = bound01(b, 255);
  13208. const max = Math.max(r, g, b);
  13209. const min = Math.min(r, g, b);
  13210. let h = 0;
  13211. const v = max;
  13212. const d = max - min;
  13213. const s = max === 0 ? 0 : d / max;
  13214. if (max === min) h = 0;
  13215. else {
  13216. switch (max) {
  13217. case r:
  13218. h = (g - b) / d + (g < b ? 6 : 0);
  13219. break;
  13220. case g:
  13221. h = (b - r) / d + 2;
  13222. break;
  13223. case b:
  13224. h = (r - g) / d + 4;
  13225. break;
  13226. default: break;
  13227. }
  13228. h /= 6;
  13229. }
  13230. return {
  13231. h,
  13232. s,
  13233. v
  13234. };
  13235. }
  13236. function hsvToRgb(h, s, v) {
  13237. h = bound01(h, 360) * 6;
  13238. s = bound01(s, 100);
  13239. v = bound01(v, 100);
  13240. const i = Math.floor(h);
  13241. const f = h - i;
  13242. const p = v * (1 - s);
  13243. const q = v * (1 - f * s);
  13244. const t = v * (1 - (1 - f) * s);
  13245. const mod = i % 6;
  13246. const r = [
  13247. v,
  13248. q,
  13249. p,
  13250. p,
  13251. t,
  13252. v
  13253. ][mod];
  13254. const g = [
  13255. t,
  13256. v,
  13257. v,
  13258. q,
  13259. p,
  13260. p
  13261. ][mod];
  13262. const b = [
  13263. p,
  13264. p,
  13265. t,
  13266. v,
  13267. v,
  13268. q
  13269. ][mod];
  13270. return {
  13271. r: r * 255,
  13272. g: g * 255,
  13273. b: b * 255
  13274. };
  13275. }
  13276. function rgbToHex(r, g, b, allow3Char) {
  13277. const hex = [
  13278. pad2(Math.round(r).toString(16)),
  13279. pad2(Math.round(g).toString(16)),
  13280. pad2(Math.round(b).toString(16))
  13281. ];
  13282. if (allow3Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1))) return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
  13283. return hex.join("");
  13284. }
  13285. function rgbaToHex(r, g, b, a, allow4Char) {
  13286. const hex = [
  13287. pad2(Math.round(r).toString(16)),
  13288. pad2(Math.round(g).toString(16)),
  13289. pad2(Math.round(b).toString(16)),
  13290. pad2(convertDecimalToHex(a))
  13291. ];
  13292. if (allow4Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1)) && hex[3].startsWith(hex[3].charAt(1))) return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
  13293. return hex.join("");
  13294. }
  13295. function cmykToRgb(c, m, y, k) {
  13296. const cConv = c / 100;
  13297. const mConv = m / 100;
  13298. const yConv = y / 100;
  13299. const kConv = k / 100;
  13300. return {
  13301. r: 255 * (1 - cConv) * (1 - kConv),
  13302. g: 255 * (1 - mConv) * (1 - kConv),
  13303. b: 255 * (1 - yConv) * (1 - kConv)
  13304. };
  13305. }
  13306. function rgbToCmyk(r, g, b) {
  13307. let c = 1 - r / 255;
  13308. let m = 1 - g / 255;
  13309. let y = 1 - b / 255;
  13310. let k = Math.min(c, m, y);
  13311. if (k === 1) {
  13312. c = 0;
  13313. m = 0;
  13314. y = 0;
  13315. } else {
  13316. c = (c - k) / (1 - k) * 100;
  13317. m = (m - k) / (1 - k) * 100;
  13318. y = (y - k) / (1 - k) * 100;
  13319. }
  13320. k *= 100;
  13321. return {
  13322. c: Math.round(c),
  13323. m: Math.round(m),
  13324. y: Math.round(y),
  13325. k: Math.round(k)
  13326. };
  13327. }
  13328. function convertDecimalToHex(d) {
  13329. return Math.round(parseFloat(d) * 255).toString(16);
  13330. }
  13331. function convertHexToDecimal(h) {
  13332. return parseIntFromHex(h) / 255;
  13333. }
  13334. function parseIntFromHex(val) {
  13335. return parseInt(val, 16);
  13336. }
  13337. function numberInputToObject(color) {
  13338. return {
  13339. r: color >> 16,
  13340. g: (color & 65280) >> 8,
  13341. b: color & 255
  13342. };
  13343. }
  13344. //#endregion
  13345. //#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/css-color-names.js
  13346. const names = {
  13347. aliceblue: "#f0f8ff",
  13348. antiquewhite: "#faebd7",
  13349. aqua: "#00ffff",
  13350. aquamarine: "#7fffd4",
  13351. azure: "#f0ffff",
  13352. beige: "#f5f5dc",
  13353. bisque: "#ffe4c4",
  13354. black: "#000000",
  13355. blanchedalmond: "#ffebcd",
  13356. blue: "#0000ff",
  13357. blueviolet: "#8a2be2",
  13358. brown: "#a52a2a",
  13359. burlywood: "#deb887",
  13360. cadetblue: "#5f9ea0",
  13361. chartreuse: "#7fff00",
  13362. chocolate: "#d2691e",
  13363. coral: "#ff7f50",
  13364. cornflowerblue: "#6495ed",
  13365. cornsilk: "#fff8dc",
  13366. crimson: "#dc143c",
  13367. cyan: "#00ffff",
  13368. darkblue: "#00008b",
  13369. darkcyan: "#008b8b",
  13370. darkgoldenrod: "#b8860b",
  13371. darkgray: "#a9a9a9",
  13372. darkgreen: "#006400",
  13373. darkgrey: "#a9a9a9",
  13374. darkkhaki: "#bdb76b",
  13375. darkmagenta: "#8b008b",
  13376. darkolivegreen: "#556b2f",
  13377. darkorange: "#ff8c00",
  13378. darkorchid: "#9932cc",
  13379. darkred: "#8b0000",
  13380. darksalmon: "#e9967a",
  13381. darkseagreen: "#8fbc8f",
  13382. darkslateblue: "#483d8b",
  13383. darkslategray: "#2f4f4f",
  13384. darkslategrey: "#2f4f4f",
  13385. darkturquoise: "#00ced1",
  13386. darkviolet: "#9400d3",
  13387. deeppink: "#ff1493",
  13388. deepskyblue: "#00bfff",
  13389. dimgray: "#696969",
  13390. dimgrey: "#696969",
  13391. dodgerblue: "#1e90ff",
  13392. firebrick: "#b22222",
  13393. floralwhite: "#fffaf0",
  13394. forestgreen: "#228b22",
  13395. fuchsia: "#ff00ff",
  13396. gainsboro: "#dcdcdc",
  13397. ghostwhite: "#f8f8ff",
  13398. goldenrod: "#daa520",
  13399. gold: "#ffd700",
  13400. gray: "#808080",
  13401. green: "#008000",
  13402. greenyellow: "#adff2f",
  13403. grey: "#808080",
  13404. honeydew: "#f0fff0",
  13405. hotpink: "#ff69b4",
  13406. indianred: "#cd5c5c",
  13407. indigo: "#4b0082",
  13408. ivory: "#fffff0",
  13409. khaki: "#f0e68c",
  13410. lavenderblush: "#fff0f5",
  13411. lavender: "#e6e6fa",
  13412. lawngreen: "#7cfc00",
  13413. lemonchiffon: "#fffacd",
  13414. lightblue: "#add8e6",
  13415. lightcoral: "#f08080",
  13416. lightcyan: "#e0ffff",
  13417. lightgoldenrodyellow: "#fafad2",
  13418. lightgray: "#d3d3d3",
  13419. lightgreen: "#90ee90",
  13420. lightgrey: "#d3d3d3",
  13421. lightpink: "#ffb6c1",
  13422. lightsalmon: "#ffa07a",
  13423. lightseagreen: "#20b2aa",
  13424. lightskyblue: "#87cefa",
  13425. lightslategray: "#778899",
  13426. lightslategrey: "#778899",
  13427. lightsteelblue: "#b0c4de",
  13428. lightyellow: "#ffffe0",
  13429. lime: "#00ff00",
  13430. limegreen: "#32cd32",
  13431. linen: "#faf0e6",
  13432. magenta: "#ff00ff",
  13433. maroon: "#800000",
  13434. mediumaquamarine: "#66cdaa",
  13435. mediumblue: "#0000cd",
  13436. mediumorchid: "#ba55d3",
  13437. mediumpurple: "#9370db",
  13438. mediumseagreen: "#3cb371",
  13439. mediumslateblue: "#7b68ee",
  13440. mediumspringgreen: "#00fa9a",
  13441. mediumturquoise: "#48d1cc",
  13442. mediumvioletred: "#c71585",
  13443. midnightblue: "#191970",
  13444. mintcream: "#f5fffa",
  13445. mistyrose: "#ffe4e1",
  13446. moccasin: "#ffe4b5",
  13447. navajowhite: "#ffdead",
  13448. navy: "#000080",
  13449. oldlace: "#fdf5e6",
  13450. olive: "#808000",
  13451. olivedrab: "#6b8e23",
  13452. orange: "#ffa500",
  13453. orangered: "#ff4500",
  13454. orchid: "#da70d6",
  13455. palegoldenrod: "#eee8aa",
  13456. palegreen: "#98fb98",
  13457. paleturquoise: "#afeeee",
  13458. palevioletred: "#db7093",
  13459. papayawhip: "#ffefd5",
  13460. peachpuff: "#ffdab9",
  13461. peru: "#cd853f",
  13462. pink: "#ffc0cb",
  13463. plum: "#dda0dd",
  13464. powderblue: "#b0e0e6",
  13465. purple: "#800080",
  13466. rebeccapurple: "#663399",
  13467. red: "#ff0000",
  13468. rosybrown: "#bc8f8f",
  13469. royalblue: "#4169e1",
  13470. saddlebrown: "#8b4513",
  13471. salmon: "#fa8072",
  13472. sandybrown: "#f4a460",
  13473. seagreen: "#2e8b57",
  13474. seashell: "#fff5ee",
  13475. sienna: "#a0522d",
  13476. silver: "#c0c0c0",
  13477. skyblue: "#87ceeb",
  13478. slateblue: "#6a5acd",
  13479. slategray: "#708090",
  13480. slategrey: "#708090",
  13481. snow: "#fffafa",
  13482. springgreen: "#00ff7f",
  13483. steelblue: "#4682b4",
  13484. tan: "#d2b48c",
  13485. teal: "#008080",
  13486. thistle: "#d8bfd8",
  13487. tomato: "#ff6347",
  13488. turquoise: "#40e0d0",
  13489. violet: "#ee82ee",
  13490. wheat: "#f5deb3",
  13491. white: "#ffffff",
  13492. whitesmoke: "#f5f5f5",
  13493. yellow: "#ffff00",
  13494. yellowgreen: "#9acd32"
  13495. };
  13496. //#endregion
  13497. //#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/format-input.js
  13498. function inputToRGB(color) {
  13499. let rgb = {
  13500. r: 0,
  13501. g: 0,
  13502. b: 0
  13503. };
  13504. let a = 1;
  13505. let s = null;
  13506. let v = null;
  13507. let l = null;
  13508. let ok = false;
  13509. let format = false;
  13510. if (typeof color === "string") color = stringInputToObject(color);
  13511. if (typeof color === "object") {
  13512. if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
  13513. rgb = rgbToRgb(color.r, color.g, color.b);
  13514. ok = true;
  13515. format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
  13516. } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
  13517. s = convertToPercentage(color.s);
  13518. v = convertToPercentage(color.v);
  13519. rgb = hsvToRgb(color.h, s, v);
  13520. ok = true;
  13521. format = "hsv";
  13522. } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
  13523. s = convertToPercentage(color.s);
  13524. l = convertToPercentage(color.l);
  13525. rgb = hslToRgb(color.h, s, l);
  13526. ok = true;
  13527. format = "hsl";
  13528. } else if (isValidCSSUnit(color.c) && isValidCSSUnit(color.m) && isValidCSSUnit(color.y) && isValidCSSUnit(color.k)) {
  13529. rgb = cmykToRgb(color.c, color.m, color.y, color.k);
  13530. ok = true;
  13531. format = "cmyk";
  13532. }
  13533. if (Object.prototype.hasOwnProperty.call(color, "a")) a = color.a;
  13534. }
  13535. a = boundAlpha(a);
  13536. return {
  13537. ok,
  13538. format: color.format || format,
  13539. r: Math.min(255, Math.max(rgb.r, 0)),
  13540. g: Math.min(255, Math.max(rgb.g, 0)),
  13541. b: Math.min(255, Math.max(rgb.b, 0)),
  13542. a
  13543. };
  13544. }
  13545. const CSS_UNIT = "(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)";
  13546. const PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))\\s*\\)?";
  13547. const PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))[,|\\s]+((?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?))\\s*\\)?";
  13548. const matchers = {
  13549. CSS_UNIT: new RegExp(CSS_UNIT),
  13550. rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
  13551. rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
  13552. hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
  13553. hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
  13554. hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
  13555. hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
  13556. cmyk: new RegExp("cmyk" + PERMISSIVE_MATCH4),
  13557. hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
  13558. hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
  13559. hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
  13560. hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
  13561. };
  13562. function stringInputToObject(color) {
  13563. color = color.trim().toLowerCase();
  13564. if (color.length === 0) return false;
  13565. let named = false;
  13566. if (names[color]) {
  13567. color = names[color];
  13568. named = true;
  13569. } else if (color === "transparent") return {
  13570. r: 0,
  13571. g: 0,
  13572. b: 0,
  13573. a: 0,
  13574. format: "name"
  13575. };
  13576. let match = matchers.rgb.exec(color);
  13577. if (match) return {
  13578. r: match[1],
  13579. g: match[2],
  13580. b: match[3]
  13581. };
  13582. match = matchers.rgba.exec(color);
  13583. if (match) return {
  13584. r: match[1],
  13585. g: match[2],
  13586. b: match[3],
  13587. a: match[4]
  13588. };
  13589. match = matchers.hsl.exec(color);
  13590. if (match) return {
  13591. h: match[1],
  13592. s: match[2],
  13593. l: match[3]
  13594. };
  13595. match = matchers.hsla.exec(color);
  13596. if (match) return {
  13597. h: match[1],
  13598. s: match[2],
  13599. l: match[3],
  13600. a: match[4]
  13601. };
  13602. match = matchers.hsv.exec(color);
  13603. if (match) return {
  13604. h: match[1],
  13605. s: match[2],
  13606. v: match[3]
  13607. };
  13608. match = matchers.hsva.exec(color);
  13609. if (match) return {
  13610. h: match[1],
  13611. s: match[2],
  13612. v: match[3],
  13613. a: match[4]
  13614. };
  13615. match = matchers.cmyk.exec(color);
  13616. if (match) return {
  13617. c: match[1],
  13618. m: match[2],
  13619. y: match[3],
  13620. k: match[4]
  13621. };
  13622. match = matchers.hex8.exec(color);
  13623. if (match) return {
  13624. r: parseIntFromHex(match[1]),
  13625. g: parseIntFromHex(match[2]),
  13626. b: parseIntFromHex(match[3]),
  13627. a: convertHexToDecimal(match[4]),
  13628. format: named ? "name" : "hex8"
  13629. };
  13630. match = matchers.hex6.exec(color);
  13631. if (match) return {
  13632. r: parseIntFromHex(match[1]),
  13633. g: parseIntFromHex(match[2]),
  13634. b: parseIntFromHex(match[3]),
  13635. format: named ? "name" : "hex"
  13636. };
  13637. match = matchers.hex4.exec(color);
  13638. if (match) return {
  13639. r: parseIntFromHex(match[1] + match[1]),
  13640. g: parseIntFromHex(match[2] + match[2]),
  13641. b: parseIntFromHex(match[3] + match[3]),
  13642. a: convertHexToDecimal(match[4] + match[4]),
  13643. format: named ? "name" : "hex8"
  13644. };
  13645. match = matchers.hex3.exec(color);
  13646. if (match) return {
  13647. r: parseIntFromHex(match[1] + match[1]),
  13648. g: parseIntFromHex(match[2] + match[2]),
  13649. b: parseIntFromHex(match[3] + match[3]),
  13650. format: named ? "name" : "hex"
  13651. };
  13652. return false;
  13653. }
  13654. function isValidCSSUnit(color) {
  13655. if (typeof color === "number") return !Number.isNaN(color);
  13656. return matchers.CSS_UNIT.test(color);
  13657. }
  13658. //#endregion
  13659. //#region ../../node_modules/.pnpm/@ctrl+tinycolor@4.2.0/node_modules/@ctrl/tinycolor/dist/module/index.js
  13660. var TinyColor = class TinyColor {
  13661. constructor(color = "", opts = {}) {
  13662. if (color instanceof TinyColor) return color;
  13663. if (typeof color === "number") color = numberInputToObject(color);
  13664. this.originalInput = color;
  13665. const rgb = inputToRGB(color);
  13666. this.originalInput = color;
  13667. this.r = rgb.r;
  13668. this.g = rgb.g;
  13669. this.b = rgb.b;
  13670. this.a = rgb.a;
  13671. this.roundA = Math.round(100 * this.a) / 100;
  13672. this.format = opts.format ?? rgb.format;
  13673. this.gradientType = opts.gradientType;
  13674. if (this.r < 1) this.r = Math.round(this.r);
  13675. if (this.g < 1) this.g = Math.round(this.g);
  13676. if (this.b < 1) this.b = Math.round(this.b);
  13677. this.isValid = rgb.ok;
  13678. }
  13679. isDark() {
  13680. return this.getBrightness() < 128;
  13681. }
  13682. isLight() {
  13683. return !this.isDark();
  13684. }
  13685. getBrightness() {
  13686. const rgb = this.toRgb();
  13687. return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1e3;
  13688. }
  13689. getLuminance() {
  13690. const rgb = this.toRgb();
  13691. let R;
  13692. let G;
  13693. let B;
  13694. const RsRGB = rgb.r / 255;
  13695. const GsRGB = rgb.g / 255;
  13696. const BsRGB = rgb.b / 255;
  13697. if (RsRGB <= .03928) R = RsRGB / 12.92;
  13698. else R = Math.pow((RsRGB + .055) / 1.055, 2.4);
  13699. if (GsRGB <= .03928) G = GsRGB / 12.92;
  13700. else G = Math.pow((GsRGB + .055) / 1.055, 2.4);
  13701. if (BsRGB <= .03928) B = BsRGB / 12.92;
  13702. else B = Math.pow((BsRGB + .055) / 1.055, 2.4);
  13703. return .2126 * R + .7152 * G + .0722 * B;
  13704. }
  13705. getAlpha() {
  13706. return this.a;
  13707. }
  13708. setAlpha(alpha) {
  13709. this.a = boundAlpha(alpha);
  13710. this.roundA = Math.round(100 * this.a) / 100;
  13711. return this;
  13712. }
  13713. isMonochrome() {
  13714. const { s } = this.toHsl();
  13715. return s === 0;
  13716. }
  13717. toHsv() {
  13718. const hsv = rgbToHsv(this.r, this.g, this.b);
  13719. return {
  13720. h: hsv.h * 360,
  13721. s: hsv.s,
  13722. v: hsv.v,
  13723. a: this.a
  13724. };
  13725. }
  13726. toHsvString() {
  13727. const hsv = rgbToHsv(this.r, this.g, this.b);
  13728. const h = Math.round(hsv.h * 360);
  13729. const s = Math.round(hsv.s * 100);
  13730. const v = Math.round(hsv.v * 100);
  13731. return this.a === 1 ? `hsv(${h}, ${s}%, ${v}%)` : `hsva(${h}, ${s}%, ${v}%, ${this.roundA})`;
  13732. }
  13733. toHsl() {
  13734. const hsl = rgbToHsl(this.r, this.g, this.b);
  13735. return {
  13736. h: hsl.h * 360,
  13737. s: hsl.s,
  13738. l: hsl.l,
  13739. a: this.a
  13740. };
  13741. }
  13742. toHslString() {
  13743. const hsl = rgbToHsl(this.r, this.g, this.b);
  13744. const h = Math.round(hsl.h * 360);
  13745. const s = Math.round(hsl.s * 100);
  13746. const l = Math.round(hsl.l * 100);
  13747. return this.a === 1 ? `hsl(${h}, ${s}%, ${l}%)` : `hsla(${h}, ${s}%, ${l}%, ${this.roundA})`;
  13748. }
  13749. toHex(allow3Char = false) {
  13750. return rgbToHex(this.r, this.g, this.b, allow3Char);
  13751. }
  13752. toHexString(allow3Char = false) {
  13753. return "#" + this.toHex(allow3Char);
  13754. }
  13755. toHex8(allow4Char = false) {
  13756. return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char);
  13757. }
  13758. toHex8String(allow4Char = false) {
  13759. return "#" + this.toHex8(allow4Char);
  13760. }
  13761. toHexShortString(allowShortChar = false) {
  13762. return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar);
  13763. }
  13764. toRgb() {
  13765. return {
  13766. r: Math.round(this.r),
  13767. g: Math.round(this.g),
  13768. b: Math.round(this.b),
  13769. a: this.a
  13770. };
  13771. }
  13772. toRgbString() {
  13773. const r = Math.round(this.r);
  13774. const g = Math.round(this.g);
  13775. const b = Math.round(this.b);
  13776. return this.a === 1 ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${this.roundA})`;
  13777. }
  13778. toPercentageRgb() {
  13779. const fmt = (x) => `${Math.round(bound01(x, 255) * 100)}%`;
  13780. return {
  13781. r: fmt(this.r),
  13782. g: fmt(this.g),
  13783. b: fmt(this.b),
  13784. a: this.a
  13785. };
  13786. }
  13787. toPercentageRgbString() {
  13788. const rnd = (x) => Math.round(bound01(x, 255) * 100);
  13789. return this.a === 1 ? `rgb(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%)` : `rgba(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%, ${this.roundA})`;
  13790. }
  13791. toCmyk() {
  13792. return { ...rgbToCmyk(this.r, this.g, this.b) };
  13793. }
  13794. toCmykString() {
  13795. const { c, m, y, k } = rgbToCmyk(this.r, this.g, this.b);
  13796. return `cmyk(${c}, ${m}, ${y}, ${k})`;
  13797. }
  13798. toName() {
  13799. if (this.a === 0) return "transparent";
  13800. if (this.a < 1) return false;
  13801. const hex = "#" + rgbToHex(this.r, this.g, this.b, false);
  13802. for (const [key, value] of Object.entries(names)) if (hex === value) return key;
  13803. return false;
  13804. }
  13805. toString(format) {
  13806. const formatSet = Boolean(format);
  13807. format = format ?? this.format;
  13808. let formattedString = false;
  13809. const hasAlpha = this.a < 1 && this.a >= 0;
  13810. if (!formatSet && hasAlpha && (format.startsWith("hex") || format === "name")) {
  13811. if (format === "name" && this.a === 0) return this.toName();
  13812. return this.toRgbString();
  13813. }
  13814. if (format === "rgb") formattedString = this.toRgbString();
  13815. if (format === "prgb") formattedString = this.toPercentageRgbString();
  13816. if (format === "hex" || format === "hex6") formattedString = this.toHexString();
  13817. if (format === "hex3") formattedString = this.toHexString(true);
  13818. if (format === "hex4") formattedString = this.toHex8String(true);
  13819. if (format === "hex8") formattedString = this.toHex8String();
  13820. if (format === "name") formattedString = this.toName();
  13821. if (format === "hsl") formattedString = this.toHslString();
  13822. if (format === "hsv") formattedString = this.toHsvString();
  13823. if (format === "cmyk") formattedString = this.toCmykString();
  13824. return formattedString || this.toHexString();
  13825. }
  13826. toNumber() {
  13827. return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);
  13828. }
  13829. clone() {
  13830. return new TinyColor(this.toString());
  13831. }
  13832. lighten(amount = 10) {
  13833. const hsl = this.toHsl();
  13834. hsl.l += amount / 100;
  13835. hsl.l = clamp01(hsl.l);
  13836. return new TinyColor(hsl);
  13837. }
  13838. brighten(amount = 10) {
  13839. const rgb = this.toRgb();
  13840. rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));
  13841. rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));
  13842. rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));
  13843. return new TinyColor(rgb);
  13844. }
  13845. darken(amount = 10) {
  13846. const hsl = this.toHsl();
  13847. hsl.l -= amount / 100;
  13848. hsl.l = clamp01(hsl.l);
  13849. return new TinyColor(hsl);
  13850. }
  13851. tint(amount = 10) {
  13852. return this.mix("white", amount);
  13853. }
  13854. shade(amount = 10) {
  13855. return this.mix("black", amount);
  13856. }
  13857. desaturate(amount = 10) {
  13858. const hsl = this.toHsl();
  13859. hsl.s -= amount / 100;
  13860. hsl.s = clamp01(hsl.s);
  13861. return new TinyColor(hsl);
  13862. }
  13863. saturate(amount = 10) {
  13864. const hsl = this.toHsl();
  13865. hsl.s += amount / 100;
  13866. hsl.s = clamp01(hsl.s);
  13867. return new TinyColor(hsl);
  13868. }
  13869. greyscale() {
  13870. return this.desaturate(100);
  13871. }
  13872. spin(amount) {
  13873. const hsl = this.toHsl();
  13874. const hue = (hsl.h + amount) % 360;
  13875. hsl.h = hue < 0 ? 360 + hue : hue;
  13876. return new TinyColor(hsl);
  13877. }
  13878. mix(color, amount = 50) {
  13879. const rgb1 = this.toRgb();
  13880. const rgb2 = new TinyColor(color).toRgb();
  13881. const p = amount / 100;
  13882. return new TinyColor({
  13883. r: (rgb2.r - rgb1.r) * p + rgb1.r,
  13884. g: (rgb2.g - rgb1.g) * p + rgb1.g,
  13885. b: (rgb2.b - rgb1.b) * p + rgb1.b,
  13886. a: (rgb2.a - rgb1.a) * p + rgb1.a
  13887. });
  13888. }
  13889. analogous(results = 6, slices = 30) {
  13890. const hsl = this.toHsl();
  13891. const part = 360 / slices;
  13892. const ret = [this];
  13893. for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {
  13894. hsl.h = (hsl.h + part) % 360;
  13895. ret.push(new TinyColor(hsl));
  13896. }
  13897. return ret;
  13898. }
  13899. complement() {
  13900. const hsl = this.toHsl();
  13901. hsl.h = (hsl.h + 180) % 360;
  13902. return new TinyColor(hsl);
  13903. }
  13904. monochromatic(results = 6) {
  13905. const hsv = this.toHsv();
  13906. const { h } = hsv;
  13907. const { s } = hsv;
  13908. let { v } = hsv;
  13909. const res = [];
  13910. const modification = 1 / results;
  13911. while (results--) {
  13912. res.push(new TinyColor({
  13913. h,
  13914. s,
  13915. v
  13916. }));
  13917. v = (v + modification) % 1;
  13918. }
  13919. return res;
  13920. }
  13921. splitcomplement() {
  13922. const hsl = this.toHsl();
  13923. const { h } = hsl;
  13924. return [
  13925. this,
  13926. new TinyColor({
  13927. h: (h + 72) % 360,
  13928. s: hsl.s,
  13929. l: hsl.l
  13930. }),
  13931. new TinyColor({
  13932. h: (h + 216) % 360,
  13933. s: hsl.s,
  13934. l: hsl.l
  13935. })
  13936. ];
  13937. }
  13938. onBackground(background) {
  13939. const fg = this.toRgb();
  13940. const bg = new TinyColor(background).toRgb();
  13941. const alpha = fg.a + bg.a * (1 - fg.a);
  13942. return new TinyColor({
  13943. r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,
  13944. g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,
  13945. b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,
  13946. a: alpha
  13947. });
  13948. }
  13949. triad() {
  13950. return this.polyad(3);
  13951. }
  13952. tetrad() {
  13953. return this.polyad(4);
  13954. }
  13955. polyad(n) {
  13956. const hsl = this.toHsl();
  13957. const { h } = hsl;
  13958. const result = [this];
  13959. const increment = 360 / n;
  13960. for (let i = 1; i < n; i++) result.push(new TinyColor({
  13961. h: (h + i * increment) % 360,
  13962. s: hsl.s,
  13963. l: hsl.l
  13964. }));
  13965. return result;
  13966. }
  13967. equals(color) {
  13968. const comparedColor = new TinyColor(color);
  13969. if (this.format === "cmyk" || comparedColor.format === "cmyk") return this.toCmykString() === comparedColor.toCmykString();
  13970. return this.toRgbString() === comparedColor.toRgbString();
  13971. }
  13972. };
  13973. //#endregion
  13974. //#region ../../packages/components/button/src/button-custom.ts
  13975. function darken(color, amount = 20) {
  13976. return color.mix("#141414", amount).toString();
  13977. }
  13978. function useButtonCustomStyle(props) {
  13979. const _disabled = useFormDisabled();
  13980. const ns = useNamespace("button");
  13981. return (0, vue.computed)(() => {
  13982. let styles = {};
  13983. let buttonColor = props.color;
  13984. if (buttonColor) {
  13985. const match = buttonColor.match(/var\((.*?)\)/);
  13986. if (match) buttonColor = window.getComputedStyle(window.document.documentElement).getPropertyValue(match[1]);
  13987. const color = new TinyColor(buttonColor);
  13988. const activeBgColor = props.dark ? color.tint(20).toString() : darken(color, 20);
  13989. if (props.plain) {
  13990. styles = ns.cssVarBlock({
  13991. "bg-color": props.dark ? darken(color, 90) : color.tint(90).toString(),
  13992. "text-color": buttonColor,
  13993. "border-color": props.dark ? darken(color, 50) : color.tint(50).toString(),
  13994. "hover-text-color": `var(${ns.cssVarName("color-white")})`,
  13995. "hover-bg-color": buttonColor,
  13996. "hover-border-color": buttonColor,
  13997. "active-bg-color": activeBgColor,
  13998. "active-text-color": `var(${ns.cssVarName("color-white")})`,
  13999. "active-border-color": activeBgColor
  14000. });
  14001. if (_disabled.value) {
  14002. styles[ns.cssVarBlockName("disabled-bg-color")] = props.dark ? darken(color, 90) : color.tint(90).toString();
  14003. styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? darken(color, 50) : color.tint(50).toString();
  14004. styles[ns.cssVarBlockName("disabled-border-color")] = props.dark ? darken(color, 80) : color.tint(80).toString();
  14005. }
  14006. } else if (props.link || props.text) {
  14007. const hoverColor = props.dark ? darken(color, 30) : color.tint(30).toString();
  14008. styles = ns.cssVarBlock({
  14009. "text-color": buttonColor,
  14010. "hover-text-color": hoverColor,
  14011. "active-text-color": activeBgColor
  14012. });
  14013. if (props.link) {
  14014. styles[ns.cssVarBlockName("hover-link-text-color")] = hoverColor;
  14015. styles[ns.cssVarBlockName("active-color")] = activeBgColor;
  14016. }
  14017. if (_disabled.value) {
  14018. const disabledColor = props.dark ? darken(color, 50) : color.tint(50).toString();
  14019. styles[ns.cssVarBlockName("disabled-bg-color")] = "transparent";
  14020. styles[ns.cssVarBlockName("disabled-text-color")] = disabledColor;
  14021. styles[ns.cssVarBlockName("disabled-border-color")] = "transparent";
  14022. }
  14023. } else {
  14024. const hoverBgColor = props.dark ? darken(color, 30) : color.tint(30).toString();
  14025. const textColor = color.isDark() ? `var(${ns.cssVarName("color-white")})` : `var(${ns.cssVarName("color-black")})`;
  14026. styles = ns.cssVarBlock({
  14027. "bg-color": buttonColor,
  14028. "text-color": textColor,
  14029. "border-color": buttonColor,
  14030. "hover-bg-color": hoverBgColor,
  14031. "hover-text-color": textColor,
  14032. "hover-border-color": hoverBgColor,
  14033. "active-bg-color": activeBgColor,
  14034. "active-border-color": activeBgColor
  14035. });
  14036. if (_disabled.value) {
  14037. const disabledButtonColor = props.dark ? darken(color, 50) : color.tint(50).toString();
  14038. styles[ns.cssVarBlockName("disabled-bg-color")] = disabledButtonColor;
  14039. styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? "rgba(255, 255, 255, 0.5)" : `var(${ns.cssVarName("color-white")})`;
  14040. styles[ns.cssVarBlockName("disabled-border-color")] = disabledButtonColor;
  14041. }
  14042. }
  14043. }
  14044. return styles;
  14045. });
  14046. }
  14047. //#endregion
  14048. //#region ../../packages/components/button/src/button.vue?vue&type=script&setup=true&lang.ts
  14049. var button_vue_vue_type_script_setup_true_lang_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
  14050. name: "ElButton",
  14051. __name: "button",
  14052. props: buttonProps,
  14053. emits: buttonEmits,
  14054. setup(__props, { expose: __expose, emit: __emit }) {
  14055. const props = __props;
  14056. const emit = __emit;
  14057. const buttonStyle = useButtonCustomStyle(props);
  14058. const ns = useNamespace("button");
  14059. const { _ref, _size, _type, _disabled, _props, _plain, _round, _text, _dashed, shouldAddSpace, handleClick } = useButton(props, emit);
  14060. const buttonKls = (0, vue.computed)(() => [
  14061. ns.b(),
  14062. ns.m(_type.value),
  14063. ns.m(_size.value),
  14064. ns.is("disabled", _disabled.value),
  14065. ns.is("loading", props.loading),
  14066. ns.is("plain", _plain.value),
  14067. ns.is("round", _round.value),
  14068. ns.is("circle", props.circle),
  14069. ns.is("text", _text.value),
  14070. ns.is("dashed", _dashed.value),
  14071. ns.is("link", props.link),
  14072. ns.is("has-bg", props.bg)
  14073. ]);
  14074. __expose({
  14075. ref: _ref,
  14076. size: _size,
  14077. type: _type,
  14078. disabled: _disabled,
  14079. shouldAddSpace
  14080. });
  14081. return (_ctx, _cache) => {
  14082. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), (0, vue.mergeProps)({
  14083. ref_key: "_ref",
  14084. ref: _ref
  14085. }, (0, vue.unref)(_props), {
  14086. class: buttonKls.value,
  14087. style: (0, vue.unref)(buttonStyle),
  14088. onClick: (0, vue.unref)(handleClick)
  14089. }), {
  14090. default: (0, vue.withCtx)(() => [__props.loading ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [_ctx.$slots.loading ? (0, vue.renderSlot)(_ctx.$slots, "loading", { key: 0 }) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  14091. key: 1,
  14092. class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading"))
  14093. }, {
  14094. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.loadingIcon)))]),
  14095. _: 1
  14096. }, 8, ["class"]))], 64)) : __props.icon || _ctx.$slots.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
  14097. default: (0, vue.withCtx)(() => [__props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon), { key: 0 })) : (0, vue.renderSlot)(_ctx.$slots, "icon", { key: 1 })]),
  14098. _: 3
  14099. })) : (0, vue.createCommentVNode)("v-if", true), _ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  14100. key: 2,
  14101. class: (0, vue.normalizeClass)({ [(0, vue.unref)(ns).em("text", "expand")]: (0, vue.unref)(shouldAddSpace) })
  14102. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)]),
  14103. _: 3
  14104. }, 16, [
  14105. "class",
  14106. "style",
  14107. "onClick"
  14108. ]);
  14109. };
  14110. }
  14111. });
  14112. //#endregion
  14113. //#region ../../packages/components/button/src/button.vue
  14114. var button_default$1 = button_vue_vue_type_script_setup_true_lang_default$1;
  14115. //#endregion
  14116. //#region ../../packages/components/button/src/button-group.ts
  14117. const buttonGroupProps = {
  14118. size: buttonProps.size,
  14119. type: buttonProps.type,
  14120. direction: {
  14121. type: definePropType(String),
  14122. values: ["horizontal", "vertical"],
  14123. default: "horizontal"
  14124. }
  14125. };
  14126. //#endregion
  14127. //#region ../../packages/components/button/src/button-group.vue?vue&type=script&setup=true&lang.ts
  14128. var button_group_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  14129. name: "ElButtonGroup",
  14130. __name: "button-group",
  14131. props: buttonGroupProps,
  14132. setup(__props) {
  14133. const props = __props;
  14134. (0, vue.provide)(buttonGroupContextKey, (0, vue.reactive)({
  14135. size: (0, vue.toRef)(props, "size"),
  14136. type: (0, vue.toRef)(props, "type")
  14137. }));
  14138. const ns = useNamespace("button");
  14139. return (_ctx, _cache) => {
  14140. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("group"), (0, vue.unref)(ns).bm("group", props.direction)]) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
  14141. };
  14142. }
  14143. });
  14144. //#endregion
  14145. //#region ../../packages/components/button/src/button-group.vue
  14146. var button_group_default = button_group_vue_vue_type_script_setup_true_lang_default;
  14147. //#endregion
  14148. //#region ../../packages/components/button/index.ts
  14149. const ElButton = withInstall(button_default$1, { ButtonGroup: button_group_default });
  14150. const ElButtonGroup = withNoopInstall(button_group_default);
  14151. //#endregion
  14152. //#region ../../packages/components/calendar/src/calendar.ts
  14153. const isValidRange$1 = (range) => isArray$1(range) && range.length === 2 && range.every((item) => isDate(item));
  14154. const calendarProps = buildProps({
  14155. modelValue: { type: Date },
  14156. range: {
  14157. type: definePropType(Array),
  14158. validator: isValidRange$1
  14159. },
  14160. controllerType: {
  14161. type: String,
  14162. values: ["button", "select"],
  14163. default: "button"
  14164. },
  14165. formatter: { type: definePropType(Function) }
  14166. });
  14167. const calendarEmits = {
  14168. [UPDATE_MODEL_EVENT]: (value) => isDate(value),
  14169. [INPUT_EVENT]: (value) => isDate(value)
  14170. };
  14171. //#endregion
  14172. //#region ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/dayjs.min.js
  14173. var require_dayjs_min = /* @__PURE__ */ __commonJSMin(((exports, module) => {
  14174. (function(t, e) {
  14175. "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs = e();
  14176. })(exports, (function() {
  14177. "use strict";
  14178. var t = 1e3, e = 6e4, n = 36e5, r = "millisecond", i = "second", s = "minute", u = "hour", a = "day", o = "week", c = "month", f = "quarter", h = "year", d = "date", l = "Invalid Date", $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M = {
  14179. name: "en",
  14180. weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
  14181. months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
  14182. ordinal: function(t) {
  14183. var e = [
  14184. "th",
  14185. "st",
  14186. "nd",
  14187. "rd"
  14188. ], n = t % 100;
  14189. return "[" + t + (e[(n - 20) % 10] || e[n] || e[0]) + "]";
  14190. }
  14191. }, m = function(t, e, n) {
  14192. var r = String(t);
  14193. return !r || r.length >= e ? t : "" + Array(e + 1 - r.length).join(n) + t;
  14194. }, v = {
  14195. s: m,
  14196. z: function(t) {
  14197. var e = -t.utcOffset(), n = Math.abs(e), r = Math.floor(n / 60), i = n % 60;
  14198. return (e <= 0 ? "+" : "-") + m(r, 2, "0") + ":" + m(i, 2, "0");
  14199. },
  14200. m: function t(e, n) {
  14201. if (e.date() < n.date()) return -t(n, e);
  14202. var r = 12 * (n.year() - e.year()) + (n.month() - e.month()), i = e.clone().add(r, c), s = n - i < 0, u = e.clone().add(r + (s ? -1 : 1), c);
  14203. return +(-(r + (n - i) / (s ? i - u : u - i)) || 0);
  14204. },
  14205. a: function(t) {
  14206. return t < 0 ? Math.ceil(t) || 0 : Math.floor(t);
  14207. },
  14208. p: function(t) {
  14209. return {
  14210. M: c,
  14211. y: h,
  14212. w: o,
  14213. d: a,
  14214. D: d,
  14215. h: u,
  14216. m: s,
  14217. s: i,
  14218. ms: r,
  14219. Q: f
  14220. }[t] || String(t || "").toLowerCase().replace(/s$/, "");
  14221. },
  14222. u: function(t) {
  14223. return void 0 === t;
  14224. }
  14225. }, g = "en", D = {};
  14226. D[g] = M;
  14227. var p = "$isDayjsObject", S = function(t) {
  14228. return t instanceof _ || !(!t || !t[p]);
  14229. }, w = function t(e, n, r) {
  14230. var i;
  14231. if (!e) return g;
  14232. if ("string" == typeof e) {
  14233. var s = e.toLowerCase();
  14234. D[s] && (i = s), n && (D[s] = n, i = s);
  14235. var u = e.split("-");
  14236. if (!i && u.length > 1) return t(u[0]);
  14237. } else {
  14238. var a = e.name;
  14239. D[a] = e, i = a;
  14240. }
  14241. return !r && i && (g = i), i || !r && g;
  14242. }, O = function(t, e) {
  14243. if (S(t)) return t.clone();
  14244. var n = "object" == typeof e ? e : {};
  14245. return n.date = t, n.args = arguments, new _(n);
  14246. }, b = v;
  14247. b.l = w, b.i = S, b.w = function(t, e) {
  14248. return O(t, {
  14249. locale: e.$L,
  14250. utc: e.$u,
  14251. x: e.$x,
  14252. $offset: e.$offset
  14253. });
  14254. };
  14255. var _ = function() {
  14256. function M(t) {
  14257. this.$L = w(t.locale, null, !0), this.parse(t), this.$x = this.$x || t.x || {}, this[p] = !0;
  14258. }
  14259. var m = M.prototype;
  14260. return m.parse = function(t) {
  14261. this.$d = function(t) {
  14262. var e = t.date, n = t.utc;
  14263. if (null === e) return /* @__PURE__ */ new Date(NaN);
  14264. if (b.u(e)) return /* @__PURE__ */ new Date();
  14265. if (e instanceof Date) return new Date(e);
  14266. if ("string" == typeof e && !/Z$/i.test(e)) {
  14267. var r = e.match($);
  14268. if (r) {
  14269. var i = r[2] - 1 || 0, s = (r[7] || "0").substring(0, 3);
  14270. return n ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)) : new Date(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s);
  14271. }
  14272. }
  14273. return new Date(e);
  14274. }(t), this.init();
  14275. }, m.init = function() {
  14276. var t = this.$d;
  14277. this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(), this.$H = t.getHours(), this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t.getMilliseconds();
  14278. }, m.$utils = function() {
  14279. return b;
  14280. }, m.isValid = function() {
  14281. return !(this.$d.toString() === l);
  14282. }, m.isSame = function(t, e) {
  14283. var n = O(t);
  14284. return this.startOf(e) <= n && n <= this.endOf(e);
  14285. }, m.isAfter = function(t, e) {
  14286. return O(t) < this.startOf(e);
  14287. }, m.isBefore = function(t, e) {
  14288. return this.endOf(e) < O(t);
  14289. }, m.$g = function(t, e, n) {
  14290. return b.u(t) ? this[e] : this.set(n, t);
  14291. }, m.unix = function() {
  14292. return Math.floor(this.valueOf() / 1e3);
  14293. }, m.valueOf = function() {
  14294. return this.$d.getTime();
  14295. }, m.startOf = function(t, e) {
  14296. var n = this, r = !!b.u(e) || e, f = b.p(t), l = function(t, e) {
  14297. var i = b.w(n.$u ? Date.UTC(n.$y, e, t) : new Date(n.$y, e, t), n);
  14298. return r ? i : i.endOf(a);
  14299. }, $ = function(t, e) {
  14300. return b.w(n.toDate()[t].apply(n.toDate("s"), (r ? [
  14301. 0,
  14302. 0,
  14303. 0,
  14304. 0
  14305. ] : [
  14306. 23,
  14307. 59,
  14308. 59,
  14309. 999
  14310. ]).slice(e)), n);
  14311. }, y = this.$W, M = this.$M, m = this.$D, v = "set" + (this.$u ? "UTC" : "");
  14312. switch (f) {
  14313. case h: return r ? l(1, 0) : l(31, 11);
  14314. case c: return r ? l(1, M) : l(0, M + 1);
  14315. case o:
  14316. var g = this.$locale().weekStart || 0, D = (y < g ? y + 7 : y) - g;
  14317. return l(r ? m - D : m + (6 - D), M);
  14318. case a:
  14319. case d: return $(v + "Hours", 0);
  14320. case u: return $(v + "Minutes", 1);
  14321. case s: return $(v + "Seconds", 2);
  14322. case i: return $(v + "Milliseconds", 3);
  14323. default: return this.clone();
  14324. }
  14325. }, m.endOf = function(t) {
  14326. return this.startOf(t, !1);
  14327. }, m.$set = function(t, e) {
  14328. var n, o = b.p(t), f = "set" + (this.$u ? "UTC" : ""), l = (n = {}, n[a] = f + "Date", n[d] = f + "Date", n[c] = f + "Month", n[h] = f + "FullYear", n[u] = f + "Hours", n[s] = f + "Minutes", n[i] = f + "Seconds", n[r] = f + "Milliseconds", n)[o], $ = o === a ? this.$D + (e - this.$W) : e;
  14329. if (o === c || o === h) {
  14330. var y = this.clone().set(d, 1);
  14331. y.$d[l]($), y.init(), this.$d = y.set(d, Math.min(this.$D, y.daysInMonth())).$d;
  14332. } else l && this.$d[l]($);
  14333. return this.init(), this;
  14334. }, m.set = function(t, e) {
  14335. return this.clone().$set(t, e);
  14336. }, m.get = function(t) {
  14337. return this[b.p(t)]();
  14338. }, m.add = function(r, f) {
  14339. var d, l = this;
  14340. r = Number(r);
  14341. var $ = b.p(f), y = function(t) {
  14342. var e = O(l);
  14343. return b.w(e.date(e.date() + Math.round(t * r)), l);
  14344. };
  14345. if ($ === c) return this.set(c, this.$M + r);
  14346. if ($ === h) return this.set(h, this.$y + r);
  14347. if ($ === a) return y(1);
  14348. if ($ === o) return y(7);
  14349. var M = (d = {}, d[s] = e, d[u] = n, d[i] = t, d)[$] || 1, m = this.$d.getTime() + r * M;
  14350. return b.w(m, this);
  14351. }, m.subtract = function(t, e) {
  14352. return this.add(-1 * t, e);
  14353. }, m.format = function(t) {
  14354. var e = this, n = this.$locale();
  14355. if (!this.isValid()) return n.invalidDate || l;
  14356. var r = t || "YYYY-MM-DDTHH:mm:ssZ", i = b.z(this), s = this.$H, u = this.$m, a = this.$M, o = n.weekdays, c = n.months, f = n.meridiem, h = function(t, n, i, s) {
  14357. return t && (t[n] || t(e, r)) || i[n].slice(0, s);
  14358. }, d = function(t) {
  14359. return b.s(s % 12 || 12, t, "0");
  14360. }, $ = f || function(t, e, n) {
  14361. var r = t < 12 ? "AM" : "PM";
  14362. return n ? r.toLowerCase() : r;
  14363. };
  14364. return r.replace(y, (function(t, r) {
  14365. return r || function(t) {
  14366. switch (t) {
  14367. case "YY": return String(e.$y).slice(-2);
  14368. case "YYYY": return b.s(e.$y, 4, "0");
  14369. case "M": return a + 1;
  14370. case "MM": return b.s(a + 1, 2, "0");
  14371. case "MMM": return h(n.monthsShort, a, c, 3);
  14372. case "MMMM": return h(c, a);
  14373. case "D": return e.$D;
  14374. case "DD": return b.s(e.$D, 2, "0");
  14375. case "d": return String(e.$W);
  14376. case "dd": return h(n.weekdaysMin, e.$W, o, 2);
  14377. case "ddd": return h(n.weekdaysShort, e.$W, o, 3);
  14378. case "dddd": return o[e.$W];
  14379. case "H": return String(s);
  14380. case "HH": return b.s(s, 2, "0");
  14381. case "h": return d(1);
  14382. case "hh": return d(2);
  14383. case "a": return $(s, u, !0);
  14384. case "A": return $(s, u, !1);
  14385. case "m": return String(u);
  14386. case "mm": return b.s(u, 2, "0");
  14387. case "s": return String(e.$s);
  14388. case "ss": return b.s(e.$s, 2, "0");
  14389. case "SSS": return b.s(e.$ms, 3, "0");
  14390. case "Z": return i;
  14391. }
  14392. return null;
  14393. }(t) || i.replace(":", "");
  14394. }));
  14395. }, m.utcOffset = function() {
  14396. return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
  14397. }, m.diff = function(r, d, l) {
  14398. var $, y = this, M = b.p(d), m = O(r), v = (m.utcOffset() - this.utcOffset()) * e, g = this - m, D = function() {
  14399. return b.m(y, m);
  14400. };
  14401. switch (M) {
  14402. case h:
  14403. $ = D() / 12;
  14404. break;
  14405. case c:
  14406. $ = D();
  14407. break;
  14408. case f:
  14409. $ = D() / 3;
  14410. break;
  14411. case o:
  14412. $ = (g - v) / 6048e5;
  14413. break;
  14414. case a:
  14415. $ = (g - v) / 864e5;
  14416. break;
  14417. case u:
  14418. $ = g / n;
  14419. break;
  14420. case s:
  14421. $ = g / e;
  14422. break;
  14423. case i:
  14424. $ = g / t;
  14425. break;
  14426. default: $ = g;
  14427. }
  14428. return l ? $ : b.a($);
  14429. }, m.daysInMonth = function() {
  14430. return this.endOf(c).$D;
  14431. }, m.$locale = function() {
  14432. return D[this.$L];
  14433. }, m.locale = function(t, e) {
  14434. if (!t) return this.$L;
  14435. var n = this.clone(), r = w(t, e, !0);
  14436. return r && (n.$L = r), n;
  14437. }, m.clone = function() {
  14438. return b.w(this.$d, this);
  14439. }, m.toDate = function() {
  14440. return new Date(this.valueOf());
  14441. }, m.toJSON = function() {
  14442. return this.isValid() ? this.toISOString() : null;
  14443. }, m.toISOString = function() {
  14444. return this.$d.toISOString();
  14445. }, m.toString = function() {
  14446. return this.$d.toUTCString();
  14447. }, M;
  14448. }(), k = _.prototype;
  14449. return O.prototype = k, [
  14450. ["$ms", r],
  14451. ["$s", i],
  14452. ["$m", s],
  14453. ["$H", u],
  14454. ["$W", a],
  14455. ["$M", c],
  14456. ["$y", h],
  14457. ["$D", d]
  14458. ].forEach((function(t) {
  14459. k[t[1]] = function(e) {
  14460. return this.$g(e, t[0], t[1]);
  14461. };
  14462. })), O.extend = function(t, e) {
  14463. return t.$i || (t(e, _, O), t.$i = !0), O;
  14464. }, O.locale = w, O.isDayjs = S, O.unix = function(t) {
  14465. return O(1e3 * t);
  14466. }, O.en = D[g], O.Ls = D, O.p = {}, O;
  14467. }));
  14468. }));
  14469. //#endregion
  14470. //#region ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/customParseFormat.js
  14471. var require_customParseFormat = /* @__PURE__ */ __commonJSMin(((exports, module) => {
  14472. (function(e, t) {
  14473. "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_customParseFormat = t();
  14474. })(exports, (function() {
  14475. "use strict";
  14476. var e = {
  14477. LTS: "h:mm:ss A",
  14478. LT: "h:mm A",
  14479. L: "MM/DD/YYYY",
  14480. LL: "MMMM D, YYYY",
  14481. LLL: "MMMM D, YYYY h:mm A",
  14482. LLLL: "dddd, MMMM D, YYYY h:mm A"
  14483. }, t = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, n = /\d/, r = /\d\d/, i = /\d\d?/, o = /\d*[^-_:/,()\s\d]+/, s = {}, a = function(e) {
  14484. return (e = +e) + (e > 68 ? 1900 : 2e3);
  14485. };
  14486. var f = function(e) {
  14487. return function(t) {
  14488. this[e] = +t;
  14489. };
  14490. }, h = [/[+-]\d\d:?(\d\d)?|Z/, function(e) {
  14491. (this.zone || (this.zone = {})).offset = function(e) {
  14492. if (!e) return 0;
  14493. if ("Z" === e) return 0;
  14494. var t = e.match(/([+-]|\d\d)/g), n = 60 * t[1] + (+t[2] || 0);
  14495. return 0 === n ? 0 : "+" === t[0] ? -n : n;
  14496. }(e);
  14497. }], u = function(e) {
  14498. var t = s[e];
  14499. return t && (t.indexOf ? t : t.s.concat(t.f));
  14500. }, d = function(e, t) {
  14501. var n, r = s.meridiem;
  14502. if (r) {
  14503. for (var i = 1; i <= 24; i += 1) if (e.indexOf(r(i, 0, t)) > -1) {
  14504. n = i > 12;
  14505. break;
  14506. }
  14507. } else n = e === (t ? "pm" : "PM");
  14508. return n;
  14509. }, c = {
  14510. A: [o, function(e) {
  14511. this.afternoon = d(e, !1);
  14512. }],
  14513. a: [o, function(e) {
  14514. this.afternoon = d(e, !0);
  14515. }],
  14516. Q: [n, function(e) {
  14517. this.month = 3 * (e - 1) + 1;
  14518. }],
  14519. S: [n, function(e) {
  14520. this.milliseconds = 100 * +e;
  14521. }],
  14522. SS: [r, function(e) {
  14523. this.milliseconds = 10 * +e;
  14524. }],
  14525. SSS: [/\d{3}/, function(e) {
  14526. this.milliseconds = +e;
  14527. }],
  14528. s: [i, f("seconds")],
  14529. ss: [i, f("seconds")],
  14530. m: [i, f("minutes")],
  14531. mm: [i, f("minutes")],
  14532. H: [i, f("hours")],
  14533. h: [i, f("hours")],
  14534. HH: [i, f("hours")],
  14535. hh: [i, f("hours")],
  14536. D: [i, f("day")],
  14537. DD: [r, f("day")],
  14538. Do: [o, function(e) {
  14539. var t = s.ordinal, n = e.match(/\d+/);
  14540. if (this.day = n[0], t) for (var r = 1; r <= 31; r += 1) t(r).replace(/\[|\]/g, "") === e && (this.day = r);
  14541. }],
  14542. w: [i, f("week")],
  14543. ww: [r, f("week")],
  14544. M: [i, f("month")],
  14545. MM: [r, f("month")],
  14546. MMM: [o, function(e) {
  14547. var t = u("months"), n = (u("monthsShort") || t.map((function(e) {
  14548. return e.slice(0, 3);
  14549. }))).indexOf(e) + 1;
  14550. if (n < 1) throw new Error();
  14551. this.month = n % 12 || n;
  14552. }],
  14553. MMMM: [o, function(e) {
  14554. var t = u("months").indexOf(e) + 1;
  14555. if (t < 1) throw new Error();
  14556. this.month = t % 12 || t;
  14557. }],
  14558. Y: [/[+-]?\d+/, f("year")],
  14559. YY: [r, function(e) {
  14560. this.year = a(e);
  14561. }],
  14562. YYYY: [/\d{4}/, f("year")],
  14563. Z: h,
  14564. ZZ: h
  14565. };
  14566. function l(n) {
  14567. var r = n, i = s && s.formats;
  14568. for (var o = (n = r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, (function(t, n, r) {
  14569. var o = r && r.toUpperCase();
  14570. return n || i[r] || e[r] || i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (function(e, t, n) {
  14571. return t || n.slice(1);
  14572. }));
  14573. }))).match(t), a = o.length, f = 0; f < a; f += 1) {
  14574. var h = o[f], u = c[h], d = u && u[0], l = u && u[1];
  14575. o[f] = l ? {
  14576. regex: d,
  14577. parser: l
  14578. } : h.replace(/^\[|\]$/g, "");
  14579. }
  14580. return function(e) {
  14581. for (var t = {}, n = 0, r = 0; n < a; n += 1) {
  14582. var i = o[n];
  14583. if ("string" == typeof i) r += i.length;
  14584. else {
  14585. var s = i.regex, f = i.parser, h = e.slice(r), u = s.exec(h)[0];
  14586. f.call(t, u), e = e.replace(u, "");
  14587. }
  14588. }
  14589. return function(e) {
  14590. var t = e.afternoon;
  14591. if (void 0 !== t) {
  14592. var n = e.hours;
  14593. t ? n < 12 && (e.hours += 12) : 12 === n && (e.hours = 0), delete e.afternoon;
  14594. }
  14595. }(t), t;
  14596. };
  14597. }
  14598. return function(e, t, n) {
  14599. n.p.customParseFormat = !0, e && e.parseTwoDigitYear && (a = e.parseTwoDigitYear);
  14600. var r = t.prototype, i = r.parse;
  14601. r.parse = function(e) {
  14602. var t = e.date, r = e.utc, o = e.args;
  14603. this.$u = r;
  14604. var a = o[1];
  14605. if ("string" == typeof a) {
  14606. var f = !0 === o[2], h = !0 === o[3], u = f || h, d = o[2];
  14607. h && (d = o[2]), s = this.$locale(), !f && d && (s = n.Ls[d]), this.$d = function(e, t, n, r) {
  14608. try {
  14609. if (["x", "X"].indexOf(t) > -1) return /* @__PURE__ */ new Date(("X" === t ? 1e3 : 1) * e);
  14610. var i = l(t)(e), o = i.year, s = i.month, a = i.day, f = i.hours, h = i.minutes, u = i.seconds, d = i.milliseconds, c = i.zone, m = i.week, M = /* @__PURE__ */ new Date(), Y = a || (o || s ? 1 : M.getDate()), p = o || M.getFullYear(), v = 0;
  14611. o && !s || (v = s > 0 ? s - 1 : M.getMonth());
  14612. var D, w = f || 0, g = h || 0, y = u || 0, L = d || 0;
  14613. return c ? new Date(Date.UTC(p, v, Y, w, g, y, L + 60 * c.offset * 1e3)) : n ? new Date(Date.UTC(p, v, Y, w, g, y, L)) : (D = new Date(p, v, Y, w, g, y, L), m && (D = r(D).week(m).toDate()), D);
  14614. } catch (e) {
  14615. return /* @__PURE__ */ new Date("");
  14616. }
  14617. }(t, a, r, n), this.init(), d && !0 !== d && (this.$L = this.locale(d).$L), u && t != this.format(a) && (this.$d = /* @__PURE__ */ new Date("")), s = {};
  14618. } else if (a instanceof Array) for (var c = a.length, m = 1; m <= c; m += 1) {
  14619. o[1] = a[m - 1];
  14620. var M = n.apply(this, o);
  14621. if (M.isValid()) {
  14622. this.$d = M.$d, this.$L = M.$L, this.init();
  14623. break;
  14624. }
  14625. m === c && (this.$d = /* @__PURE__ */ new Date(""));
  14626. }
  14627. else i.call(this, e);
  14628. };
  14629. };
  14630. }));
  14631. }));
  14632. //#endregion
  14633. //#region ../../packages/components/time-picker/src/constants.ts
  14634. var import_dayjs_min = /* @__PURE__ */ __toESM(require_dayjs_min());
  14635. var import_customParseFormat = /* @__PURE__ */ __toESM(require_customParseFormat());
  14636. const timeUnits = [
  14637. "hours",
  14638. "minutes",
  14639. "seconds"
  14640. ];
  14641. const PICKER_BASE_INJECTION_KEY = "EP_PICKER_BASE";
  14642. const PICKER_POPPER_OPTIONS_INJECTION_KEY = "ElPopperOptions";
  14643. const ROOT_COMMON_PICKER_INJECTION_KEY = Symbol("commonPickerContextKey");
  14644. const DEFAULT_FORMATS_TIME = "HH:mm:ss";
  14645. const DEFAULT_FORMATS_DATE = "YYYY-MM-DD";
  14646. const DEFAULT_FORMATS_DATEPICKER = {
  14647. date: DEFAULT_FORMATS_DATE,
  14648. dates: DEFAULT_FORMATS_DATE,
  14649. week: "gggg[w]ww",
  14650. year: "YYYY",
  14651. years: "YYYY",
  14652. month: "YYYY-MM",
  14653. months: "YYYY-MM",
  14654. datetime: `${DEFAULT_FORMATS_DATE} ${DEFAULT_FORMATS_TIME}`,
  14655. monthrange: "YYYY-MM",
  14656. yearrange: "YYYY",
  14657. daterange: DEFAULT_FORMATS_DATE,
  14658. datetimerange: `${DEFAULT_FORMATS_DATE} ${DEFAULT_FORMATS_TIME}`
  14659. };
  14660. //#endregion
  14661. //#region ../../packages/components/time-picker/src/utils.ts
  14662. const buildTimeList = (value, bound) => {
  14663. return [
  14664. value > 0 ? value - 1 : void 0,
  14665. value,
  14666. value < bound ? value + 1 : void 0
  14667. ];
  14668. };
  14669. const rangeArr = (n) => Array.from(Array.from({ length: n }).keys());
  14670. const extractDateFormat = (format) => {
  14671. return format.replace(/\W?m{1,2}|\W?ZZ/g, "").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi, "").trim();
  14672. };
  14673. const extractTimeFormat = (format) => {
  14674. return format.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g, "").trim();
  14675. };
  14676. const dateEquals = function(a, b) {
  14677. const aIsDate = isDate(a);
  14678. const bIsDate = isDate(b);
  14679. if (aIsDate && bIsDate) return a.getTime() === b.getTime();
  14680. if (!aIsDate && !bIsDate) return a === b;
  14681. return false;
  14682. };
  14683. const valueEquals = function(a, b) {
  14684. const aIsArray = isArray$1(a);
  14685. const bIsArray = isArray$1(b);
  14686. if (aIsArray && bIsArray) {
  14687. if (a.length !== b.length) return false;
  14688. return a.every((item, index) => dateEquals(item, b[index]));
  14689. }
  14690. if (!aIsArray && !bIsArray) return dateEquals(a, b);
  14691. return false;
  14692. };
  14693. const parseDate = function(date, format, lang) {
  14694. const day = isEmpty(format) || format === "x" ? (0, import_dayjs_min.default)(date).locale(lang) : (0, import_dayjs_min.default)(date, format).locale(lang);
  14695. return day.isValid() ? day : void 0;
  14696. };
  14697. const formatter = function(date, format, lang) {
  14698. if (isEmpty(format)) return date;
  14699. if (format === "x") return +date;
  14700. return (0, import_dayjs_min.default)(date).locale(lang).format(format);
  14701. };
  14702. const makeList = (total, method) => {
  14703. const arr = [];
  14704. const disabledArr = method?.();
  14705. for (let i = 0; i < total; i++) arr.push(disabledArr?.includes(i) ?? false);
  14706. return arr;
  14707. };
  14708. const dayOrDaysToDate = (dayOrDays) => {
  14709. return isArray$1(dayOrDays) ? dayOrDays.map((d) => d.toDate()) : dayOrDays.toDate();
  14710. };
  14711. //#endregion
  14712. //#region ../../packages/components/time-picker/src/composables/use-common-picker.ts
  14713. const useCommonPicker = (props, emit) => {
  14714. const { lang } = useLocale();
  14715. const pickerVisible = (0, vue.ref)(false);
  14716. const pickerActualVisible = (0, vue.ref)(false);
  14717. const userInput = (0, vue.ref)(null);
  14718. const valueIsEmpty = (0, vue.computed)(() => {
  14719. const { modelValue } = props;
  14720. return !modelValue || isArray$1(modelValue) && !modelValue.filter(Boolean).length;
  14721. });
  14722. const emitInput = (input) => {
  14723. if (!valueEquals(props.modelValue, input)) {
  14724. let formatted;
  14725. if (isArray$1(input)) formatted = input.map((item) => formatter(item, props.valueFormat, lang.value));
  14726. else if (input) formatted = formatter(input, props.valueFormat, lang.value);
  14727. emit(UPDATE_MODEL_EVENT, input ? formatted : input, lang.value);
  14728. }
  14729. };
  14730. const parsedValue = (0, vue.computed)(() => {
  14731. let dayOrDays;
  14732. if (valueIsEmpty.value) {
  14733. if (pickerOptions.value.getDefaultValue) dayOrDays = pickerOptions.value.getDefaultValue();
  14734. } else if (isArray$1(props.modelValue)) dayOrDays = props.modelValue.map((d) => parseDate(d, props.valueFormat, lang.value));
  14735. else dayOrDays = parseDate(props.modelValue ?? "", props.valueFormat, lang.value);
  14736. if (pickerOptions.value.getRangeAvailableTime) {
  14737. const availableResult = pickerOptions.value.getRangeAvailableTime(dayOrDays);
  14738. if (!isEqual$1(availableResult, dayOrDays)) {
  14739. dayOrDays = availableResult;
  14740. if (!valueIsEmpty.value) emitInput(dayOrDaysToDate(dayOrDays));
  14741. }
  14742. }
  14743. if (isArray$1(dayOrDays) && dayOrDays.some((day) => !day)) dayOrDays = [];
  14744. return dayOrDays;
  14745. });
  14746. const pickerOptions = (0, vue.ref)({});
  14747. const onSetPickerOption = (e) => {
  14748. pickerOptions.value[e[0]] = e[1];
  14749. pickerOptions.value.panelReady = true;
  14750. };
  14751. const onCalendarChange = (e) => {
  14752. emit("calendar-change", e);
  14753. };
  14754. const onPanelChange = (value, mode, view) => {
  14755. emit("panel-change", value, mode, view);
  14756. };
  14757. const onPick = (date = "", visible = false) => {
  14758. pickerVisible.value = visible;
  14759. let result;
  14760. if (isArray$1(date)) result = date.map((_) => _.toDate());
  14761. else result = date ? date.toDate() : date;
  14762. userInput.value = null;
  14763. emitInput(result);
  14764. };
  14765. return {
  14766. parsedValue,
  14767. pickerActualVisible,
  14768. pickerOptions,
  14769. pickerVisible,
  14770. userInput,
  14771. valueIsEmpty,
  14772. emitInput,
  14773. onCalendarChange,
  14774. onPanelChange,
  14775. onPick,
  14776. onSetPickerOption
  14777. };
  14778. };
  14779. //#endregion
  14780. //#region ../../packages/components/time-picker/src/props/shared.ts
  14781. const disabledTimeListsProps = buildProps({
  14782. disabledHours: { type: definePropType(Function) },
  14783. disabledMinutes: { type: definePropType(Function) },
  14784. disabledSeconds: { type: definePropType(Function) }
  14785. });
  14786. const timePanelSharedProps = buildProps({
  14787. visible: Boolean,
  14788. actualVisible: {
  14789. type: Boolean,
  14790. default: void 0
  14791. },
  14792. format: {
  14793. type: String,
  14794. default: ""
  14795. }
  14796. });
  14797. //#endregion
  14798. //#region ../../packages/components/time-picker/src/common/props.ts
  14799. const timePickerDefaultProps = buildProps({
  14800. automaticDropdown: {
  14801. type: Boolean,
  14802. default: true
  14803. },
  14804. id: { type: definePropType([Array, String]) },
  14805. name: { type: definePropType([Array, String]) },
  14806. popperClass: useTooltipContentProps.popperClass,
  14807. popperStyle: useTooltipContentProps.popperStyle,
  14808. format: String,
  14809. valueFormat: String,
  14810. dateFormat: String,
  14811. timeFormat: String,
  14812. type: {
  14813. type: String,
  14814. default: ""
  14815. },
  14816. clearable: {
  14817. type: Boolean,
  14818. default: true
  14819. },
  14820. clearIcon: {
  14821. type: definePropType([String, Object]),
  14822. default: circle_close_default
  14823. },
  14824. editable: {
  14825. type: Boolean,
  14826. default: true
  14827. },
  14828. saveOnBlur: {
  14829. type: Boolean,
  14830. default: true
  14831. },
  14832. prefixIcon: {
  14833. type: definePropType([String, Object]),
  14834. default: ""
  14835. },
  14836. size: useSizeProp,
  14837. readonly: Boolean,
  14838. disabled: {
  14839. type: Boolean,
  14840. default: void 0
  14841. },
  14842. placeholder: {
  14843. type: String,
  14844. default: ""
  14845. },
  14846. popperOptions: {
  14847. type: definePropType(Object),
  14848. default: () => ({})
  14849. },
  14850. modelValue: {
  14851. type: definePropType([
  14852. Date,
  14853. Array,
  14854. String,
  14855. Number
  14856. ]),
  14857. default: ""
  14858. },
  14859. rangeSeparator: {
  14860. type: String,
  14861. default: "-"
  14862. },
  14863. startPlaceholder: String,
  14864. endPlaceholder: String,
  14865. defaultValue: { type: definePropType([Date, Array]) },
  14866. defaultTime: { type: definePropType([Date, Array]) },
  14867. isRange: Boolean,
  14868. ...disabledTimeListsProps,
  14869. disabledDate: { type: Function },
  14870. cellClassName: { type: Function },
  14871. shortcuts: {
  14872. type: Array,
  14873. default: () => []
  14874. },
  14875. arrowControl: Boolean,
  14876. tabindex: {
  14877. type: definePropType([String, Number]),
  14878. default: 0
  14879. },
  14880. validateEvent: {
  14881. type: Boolean,
  14882. default: true
  14883. },
  14884. unlinkPanels: Boolean,
  14885. singlePanel: Boolean,
  14886. placement: {
  14887. type: definePropType(String),
  14888. values: Ee,
  14889. default: "bottom"
  14890. },
  14891. fallbackPlacements: {
  14892. type: definePropType(Array),
  14893. default: [
  14894. "bottom",
  14895. "top",
  14896. "right",
  14897. "left"
  14898. ]
  14899. },
  14900. ...useEmptyValuesProps,
  14901. ...useAriaProps(["ariaLabel"]),
  14902. showNow: {
  14903. type: Boolean,
  14904. default: true
  14905. },
  14906. showConfirm: {
  14907. type: Boolean,
  14908. default: true
  14909. },
  14910. showFooter: {
  14911. type: Boolean,
  14912. default: true
  14913. },
  14914. showWeekNumber: Boolean
  14915. });
  14916. const timePickerRangeTriggerProps = buildProps({
  14917. id: { type: definePropType(Array) },
  14918. name: { type: definePropType(Array) },
  14919. modelValue: { type: definePropType([Array, String]) },
  14920. startPlaceholder: String,
  14921. endPlaceholder: String,
  14922. disabled: Boolean
  14923. });
  14924. const timePickerRngeTriggerProps = timePickerRangeTriggerProps;
  14925. //#endregion
  14926. //#region ../../packages/components/time-picker/src/common/picker-range-trigger.vue?vue&type=script&setup=true&lang.ts
  14927. const _hoisted_1$72 = [
  14928. "id",
  14929. "name",
  14930. "placeholder",
  14931. "value",
  14932. "disabled"
  14933. ];
  14934. const _hoisted_2$41 = [
  14935. "id",
  14936. "name",
  14937. "placeholder",
  14938. "value",
  14939. "disabled"
  14940. ];
  14941. var picker_range_trigger_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  14942. name: "PickerRangeTrigger",
  14943. inheritAttrs: false,
  14944. __name: "picker-range-trigger",
  14945. props: timePickerRangeTriggerProps,
  14946. emits: [
  14947. "mouseenter",
  14948. "mouseleave",
  14949. "click",
  14950. "touchstart",
  14951. "focus",
  14952. "blur",
  14953. "startInput",
  14954. "endInput",
  14955. "startChange",
  14956. "endChange"
  14957. ],
  14958. setup(__props, { expose: __expose, emit: __emit }) {
  14959. const props = __props;
  14960. const emit = __emit;
  14961. const { formItem } = useFormItem();
  14962. const { inputId } = useFormItemInputId((0, vue.reactive)({ id: (0, vue.computed)(() => props.id?.[0]) }), { formItemContext: formItem });
  14963. const attrs = useAttrs();
  14964. const nsDate = useNamespace("date");
  14965. const nsRange = useNamespace("range");
  14966. const inputRef = (0, vue.ref)();
  14967. const endInputRef = (0, vue.ref)();
  14968. const { wrapperRef, isFocused } = useFocusController(inputRef, { disabled: (0, vue.computed)(() => props.disabled) });
  14969. const handleClick = (evt) => {
  14970. emit("click", evt);
  14971. };
  14972. const handleMouseEnter = (evt) => {
  14973. emit("mouseenter", evt);
  14974. };
  14975. const handleMouseLeave = (evt) => {
  14976. emit("mouseleave", evt);
  14977. };
  14978. const handleTouchStart = (evt) => {
  14979. emit("touchstart", evt);
  14980. };
  14981. const handleStartInput = (evt) => {
  14982. emit("startInput", evt);
  14983. };
  14984. const handleEndInput = (evt) => {
  14985. emit("endInput", evt);
  14986. };
  14987. const handleStartChange = (evt) => {
  14988. emit("startChange", evt);
  14989. };
  14990. const handleEndChange = (evt) => {
  14991. emit("endChange", evt);
  14992. };
  14993. const focus = () => {
  14994. inputRef.value?.focus();
  14995. };
  14996. const blur = () => {
  14997. inputRef.value?.blur();
  14998. endInputRef.value?.blur();
  14999. };
  15000. __expose({
  15001. focus,
  15002. blur
  15003. });
  15004. return (_ctx, _cache) => {
  15005. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  15006. ref_key: "wrapperRef",
  15007. ref: wrapperRef,
  15008. class: (0, vue.normalizeClass)([(0, vue.unref)(nsDate).is("active", (0, vue.unref)(isFocused)), _ctx.$attrs.class]),
  15009. style: (0, vue.normalizeStyle)(_ctx.$attrs.style),
  15010. onClick: handleClick,
  15011. onMouseenter: handleMouseEnter,
  15012. onMouseleave: handleMouseLeave,
  15013. onTouchstartPassive: handleTouchStart
  15014. }, [
  15015. (0, vue.renderSlot)(_ctx.$slots, "prefix"),
  15016. (0, vue.createElementVNode)("input", (0, vue.mergeProps)((0, vue.unref)(attrs), {
  15017. id: (0, vue.unref)(inputId),
  15018. ref_key: "inputRef",
  15019. ref: inputRef,
  15020. name: _ctx.name && _ctx.name[0],
  15021. placeholder: _ctx.startPlaceholder,
  15022. value: _ctx.modelValue && _ctx.modelValue[0],
  15023. class: (0, vue.unref)(nsRange).b("input"),
  15024. disabled: _ctx.disabled,
  15025. onInput: handleStartInput,
  15026. onChange: handleStartChange
  15027. }), null, 16, _hoisted_1$72),
  15028. (0, vue.renderSlot)(_ctx.$slots, "range-separator"),
  15029. (0, vue.createElementVNode)("input", (0, vue.mergeProps)((0, vue.unref)(attrs), {
  15030. id: _ctx.id && _ctx.id[1],
  15031. ref_key: "endInputRef",
  15032. ref: endInputRef,
  15033. name: _ctx.name && _ctx.name[1],
  15034. placeholder: _ctx.endPlaceholder,
  15035. value: _ctx.modelValue && _ctx.modelValue[1],
  15036. class: (0, vue.unref)(nsRange).b("input"),
  15037. disabled: _ctx.disabled,
  15038. onInput: handleEndInput,
  15039. onChange: handleEndChange
  15040. }), null, 16, _hoisted_2$41),
  15041. (0, vue.renderSlot)(_ctx.$slots, "suffix")
  15042. ], 38);
  15043. };
  15044. }
  15045. });
  15046. //#endregion
  15047. //#region ../../packages/components/time-picker/src/common/picker-range-trigger.vue
  15048. var picker_range_trigger_default = picker_range_trigger_vue_vue_type_script_setup_true_lang_default;
  15049. //#endregion
  15050. //#region ../../packages/components/time-picker/src/common/picker.vue?vue&type=script&setup=true&lang.ts
  15051. var picker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  15052. name: "Picker",
  15053. __name: "picker",
  15054. props: timePickerDefaultProps,
  15055. emits: [
  15056. UPDATE_MODEL_EVENT,
  15057. CHANGE_EVENT,
  15058. "focus",
  15059. "blur",
  15060. "clear",
  15061. "calendar-change",
  15062. "panel-change",
  15063. "visible-change",
  15064. "keydown"
  15065. ],
  15066. setup(__props, { expose: __expose, emit: __emit }) {
  15067. const props = __props;
  15068. const emit = __emit;
  15069. const attrs = (0, vue.useAttrs)();
  15070. const nsDate = useNamespace("date");
  15071. const nsInput = useNamespace("input");
  15072. const nsRange = useNamespace("range");
  15073. const { formItem } = useFormItem();
  15074. const elPopperOptions = (0, vue.inject)(PICKER_POPPER_OPTIONS_INJECTION_KEY, {});
  15075. const emptyValues = useEmptyValues(props, null);
  15076. const refPopper = (0, vue.ref)();
  15077. const inputRef = (0, vue.ref)();
  15078. const valueOnOpen = (0, vue.ref)(null);
  15079. let hasJustTabExitedInput = false;
  15080. const pickerDisabled = useFormDisabled();
  15081. const commonPicker = useCommonPicker(props, emit);
  15082. const { parsedValue, pickerActualVisible, userInput, pickerVisible, pickerOptions, valueIsEmpty, emitInput, onPick, onSetPickerOption, onCalendarChange, onPanelChange } = commonPicker;
  15083. const { isFocused, handleFocus, handleBlur } = useFocusController(inputRef, {
  15084. disabled: pickerDisabled,
  15085. beforeFocus() {
  15086. return props.readonly;
  15087. },
  15088. afterFocus() {
  15089. if (!props.automaticDropdown) return;
  15090. pickerVisible.value = true;
  15091. },
  15092. beforeBlur(event) {
  15093. return !hasJustTabExitedInput && refPopper.value?.isFocusInsideContent(event);
  15094. },
  15095. afterBlur() {
  15096. if (isTimePicker.value && !props.saveOnBlur) {
  15097. if (!valueIsEmpty.value) pickerOptions.value.handleCancel?.();
  15098. } else handleChange();
  15099. pickerVisible.value = false;
  15100. hasJustTabExitedInput = false;
  15101. props.validateEvent && formItem?.validate("blur").catch(NOOP);
  15102. }
  15103. });
  15104. const hovering = (0, vue.ref)(false);
  15105. const rangeInputKls = (0, vue.computed)(() => [
  15106. nsDate.b("editor"),
  15107. nsDate.bm("editor", props.type),
  15108. nsInput.e("wrapper"),
  15109. nsDate.is("disabled", pickerDisabled.value),
  15110. nsDate.is("active", pickerVisible.value),
  15111. nsRange.b("editor"),
  15112. pickerSize ? nsRange.bm("editor", pickerSize.value) : "",
  15113. attrs.class
  15114. ]);
  15115. const clearIconKls = (0, vue.computed)(() => [
  15116. nsInput.e("icon"),
  15117. nsRange.e("close-icon"),
  15118. !showClearBtn.value ? nsRange.em("close-icon", "hidden") : ""
  15119. ]);
  15120. (0, vue.watch)(pickerVisible, (val) => {
  15121. if (!val) {
  15122. userInput.value = null;
  15123. (0, vue.nextTick)(() => {
  15124. emitChange(props.modelValue);
  15125. });
  15126. } else (0, vue.nextTick)(() => {
  15127. if (val) valueOnOpen.value = props.modelValue;
  15128. });
  15129. });
  15130. const emitChange = (val, isClear) => {
  15131. if (isClear || !valueEquals(val, valueOnOpen.value)) {
  15132. emit(CHANGE_EVENT, val);
  15133. isClear && (valueOnOpen.value = val);
  15134. props.validateEvent && formItem?.validate("change").catch(NOOP);
  15135. }
  15136. };
  15137. const emitKeydown = (e) => {
  15138. emit("keydown", e);
  15139. };
  15140. const refInput = (0, vue.computed)(() => {
  15141. if (inputRef.value) return Array.from(inputRef.value.$el.querySelectorAll("input"));
  15142. return [];
  15143. });
  15144. const setSelectionRange = (start, end, pos) => {
  15145. const _inputs = refInput.value;
  15146. if (!_inputs.length) return;
  15147. if (!pos || pos === "min") {
  15148. _inputs[0].setSelectionRange(start, end);
  15149. _inputs[0].focus();
  15150. } else if (pos === "max") {
  15151. _inputs[1].setSelectionRange(start, end);
  15152. _inputs[1].focus();
  15153. }
  15154. };
  15155. const onBeforeShow = () => {
  15156. pickerActualVisible.value = true;
  15157. };
  15158. const onShow = () => {
  15159. emit("visible-change", true);
  15160. };
  15161. const onHide = () => {
  15162. pickerActualVisible.value = false;
  15163. pickerVisible.value = false;
  15164. emit("visible-change", false);
  15165. };
  15166. const handleOpen = () => {
  15167. pickerVisible.value = true;
  15168. };
  15169. const handleClose = () => {
  15170. pickerVisible.value = false;
  15171. };
  15172. const displayValue = (0, vue.computed)(() => {
  15173. const formattedValue = formatToString(parsedValue.value);
  15174. if (isArray$1(userInput.value)) return [userInput.value[0] ?? (formattedValue && formattedValue[0]) ?? "", userInput.value[1] ?? (formattedValue && formattedValue[1]) ?? ""];
  15175. else if (userInput.value !== null) return userInput.value;
  15176. if (isTimePicker.value && valueIsEmpty.value && !props.saveOnBlur) return "";
  15177. if (!isTimePicker.value && valueIsEmpty.value) return "";
  15178. if (!pickerVisible.value && valueIsEmpty.value) return "";
  15179. if (formattedValue) return isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value ? formattedValue.join(", ") : formattedValue;
  15180. return "";
  15181. });
  15182. const isTimeLikePicker = (0, vue.computed)(() => props.type.includes("time"));
  15183. const isTimePicker = (0, vue.computed)(() => props.type.startsWith("time"));
  15184. const isDatesPicker = (0, vue.computed)(() => props.type === "dates");
  15185. const isMonthsPicker = (0, vue.computed)(() => props.type === "months");
  15186. const isYearsPicker = (0, vue.computed)(() => props.type === "years");
  15187. const triggerIcon = (0, vue.computed)(() => props.prefixIcon || (isTimeLikePicker.value ? clock_default : calendar_default$1));
  15188. const showClearBtn = (0, vue.computed)(() => props.clearable && !pickerDisabled.value && !props.readonly && !valueIsEmpty.value && (hovering.value || isFocused.value));
  15189. const onClear = (event) => {
  15190. if (props.readonly || pickerDisabled.value) return;
  15191. if (showClearBtn.value) {
  15192. event?.stopPropagation();
  15193. if (pickerOptions.value.handleClear) pickerOptions.value.handleClear();
  15194. else emitInput(emptyValues.valueOnClear.value);
  15195. emitChange(emptyValues.valueOnClear.value, true);
  15196. onHide();
  15197. }
  15198. emit("clear");
  15199. };
  15200. const onMouseDownInput = async (event) => {
  15201. if (props.readonly || pickerDisabled.value) return;
  15202. if (event.target?.tagName !== "INPUT" || isFocused.value || !props.automaticDropdown) pickerVisible.value = true;
  15203. };
  15204. const onMouseEnter = () => {
  15205. if (props.readonly || pickerDisabled.value) return;
  15206. if (!valueIsEmpty.value && props.clearable) hovering.value = true;
  15207. };
  15208. const onMouseLeave = () => {
  15209. hovering.value = false;
  15210. };
  15211. const onTouchStartInput = (event) => {
  15212. if (props.readonly || pickerDisabled.value) return;
  15213. if (event.touches[0].target?.tagName !== "INPUT" || isFocused.value || !props.automaticDropdown) pickerVisible.value = true;
  15214. };
  15215. const isRangeInput = (0, vue.computed)(() => {
  15216. return props.type.includes("range");
  15217. });
  15218. const pickerSize = useFormSize();
  15219. const popperEl = (0, vue.computed)(() => (0, vue.unref)(refPopper)?.popperRef?.contentRef);
  15220. const stophandle = onClickOutside(inputRef, (e) => {
  15221. const unrefedPopperEl = (0, vue.unref)(popperEl);
  15222. const inputEl = unrefElement(inputRef);
  15223. if (unrefedPopperEl && (e.target === unrefedPopperEl || e.composedPath().includes(unrefedPopperEl)) || e.target === inputEl || inputEl && e.composedPath().includes(inputEl)) return;
  15224. pickerVisible.value = false;
  15225. });
  15226. (0, vue.onBeforeUnmount)(() => {
  15227. stophandle?.();
  15228. });
  15229. const handleChange = () => {
  15230. if (isTimePicker.value && !props.saveOnBlur) return;
  15231. const isRangeEmpty = isArray$1(userInput.value) && userInput.value.every((v) => v === "");
  15232. if (userInput.value && !isRangeEmpty) {
  15233. const value = parseUserInputToDayjs(displayValue.value);
  15234. if (value) {
  15235. if (isValidValue(value)) emitInput(dayOrDaysToDate(value));
  15236. userInput.value = null;
  15237. }
  15238. }
  15239. if (userInput.value === "" || isRangeEmpty) {
  15240. emitInput(emptyValues.valueOnClear.value);
  15241. emitChange(emptyValues.valueOnClear.value, true);
  15242. userInput.value = null;
  15243. }
  15244. };
  15245. const parseUserInputToDayjs = (value) => {
  15246. if (!value) return null;
  15247. return pickerOptions.value.parseUserInput(value);
  15248. };
  15249. const formatToString = (value) => {
  15250. if (!value) return null;
  15251. return isArray$1(value) ? value.map((_) => _.format(props.format)) : value.format(props.format);
  15252. };
  15253. const isValidValue = (value) => {
  15254. return pickerOptions.value.isValidValue(value);
  15255. };
  15256. const handleKeydownInput = async (event) => {
  15257. if (props.readonly || pickerDisabled.value) return;
  15258. const code = getEventCode(event);
  15259. emitKeydown(event);
  15260. if (code === EVENT_CODE.esc) {
  15261. if (pickerVisible.value === true) {
  15262. pickerVisible.value = false;
  15263. event.preventDefault();
  15264. event.stopPropagation();
  15265. }
  15266. return;
  15267. }
  15268. if (code === EVENT_CODE.down) {
  15269. if (pickerOptions.value.handleFocusPicker) {
  15270. event.preventDefault();
  15271. event.stopPropagation();
  15272. }
  15273. if (pickerVisible.value === false) {
  15274. pickerVisible.value = true;
  15275. await (0, vue.nextTick)();
  15276. }
  15277. if (pickerOptions.value.handleFocusPicker) {
  15278. pickerOptions.value.handleFocusPicker();
  15279. return;
  15280. }
  15281. }
  15282. if (code === EVENT_CODE.tab) {
  15283. hasJustTabExitedInput = true;
  15284. return;
  15285. }
  15286. if (code === EVENT_CODE.enter || code === EVENT_CODE.numpadEnter) {
  15287. if (!pickerVisible.value) pickerVisible.value = true;
  15288. else if (userInput.value === null || userInput.value === "" || isValidValue(parseUserInputToDayjs(displayValue.value))) {
  15289. handleChange();
  15290. pickerVisible.value = false;
  15291. }
  15292. event.preventDefault();
  15293. event.stopPropagation();
  15294. return;
  15295. }
  15296. if (userInput.value) {
  15297. event.stopPropagation();
  15298. return;
  15299. }
  15300. if (pickerOptions.value.handleKeydownInput) pickerOptions.value.handleKeydownInput(event);
  15301. };
  15302. const onUserInput = (e) => {
  15303. userInput.value = e;
  15304. if (!pickerVisible.value) pickerVisible.value = true;
  15305. };
  15306. const handleStartInput = (event) => {
  15307. const target = event.target;
  15308. if (userInput.value) userInput.value = [target.value, userInput.value[1]];
  15309. else userInput.value = [target.value, null];
  15310. };
  15311. const handleEndInput = (event) => {
  15312. const target = event.target;
  15313. if (userInput.value) userInput.value = [userInput.value[0], target.value];
  15314. else userInput.value = [null, target.value];
  15315. };
  15316. const handleStartChange = () => {
  15317. const values = userInput.value;
  15318. const value = parseUserInputToDayjs(values && values[0]);
  15319. const parsedVal = (0, vue.unref)(parsedValue);
  15320. if (value && value.isValid()) {
  15321. userInput.value = [formatToString(value), displayValue.value?.[1] || null];
  15322. const newValue = [value, parsedVal && (parsedVal[1] || null)];
  15323. if (isValidValue(newValue)) {
  15324. emitInput(dayOrDaysToDate(newValue));
  15325. userInput.value = null;
  15326. }
  15327. }
  15328. };
  15329. const handleEndChange = () => {
  15330. const values = (0, vue.unref)(userInput);
  15331. const value = parseUserInputToDayjs(values && values[1]);
  15332. const parsedVal = (0, vue.unref)(parsedValue);
  15333. if (value && value.isValid()) {
  15334. userInput.value = [(0, vue.unref)(displayValue)?.[0] || null, formatToString(value)];
  15335. const newValue = [parsedVal && parsedVal[0], value];
  15336. if (isValidValue(newValue)) {
  15337. emitInput(dayOrDaysToDate(newValue));
  15338. userInput.value = null;
  15339. }
  15340. }
  15341. };
  15342. const focus = () => {
  15343. inputRef.value?.focus();
  15344. };
  15345. const blur = () => {
  15346. inputRef.value?.blur();
  15347. };
  15348. (0, vue.provide)(PICKER_BASE_INJECTION_KEY, {
  15349. props,
  15350. emptyValues
  15351. });
  15352. (0, vue.provide)(ROOT_COMMON_PICKER_INJECTION_KEY, commonPicker);
  15353. __expose({
  15354. focus,
  15355. blur,
  15356. handleOpen,
  15357. handleClose,
  15358. onPick
  15359. });
  15360. return (_ctx, _cache) => {
  15361. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), (0, vue.mergeProps)({
  15362. ref_key: "refPopper",
  15363. ref: refPopper,
  15364. visible: (0, vue.unref)(pickerVisible),
  15365. effect: "light",
  15366. pure: "",
  15367. trigger: "click"
  15368. }, _ctx.$attrs, {
  15369. role: "dialog",
  15370. teleported: "",
  15371. transition: `${(0, vue.unref)(nsDate).namespace.value}-zoom-in-top`,
  15372. "popper-class": [`${(0, vue.unref)(nsDate).namespace.value}-picker__popper`, _ctx.popperClass],
  15373. "popper-style": _ctx.popperStyle,
  15374. "popper-options": (0, vue.unref)(elPopperOptions),
  15375. "fallback-placements": _ctx.fallbackPlacements,
  15376. "gpu-acceleration": false,
  15377. placement: _ctx.placement,
  15378. "stop-popper-mouse-event": false,
  15379. "hide-after": 0,
  15380. persistent: "",
  15381. onBeforeShow,
  15382. onShow,
  15383. onHide
  15384. }), {
  15385. default: (0, vue.withCtx)(() => [!isRangeInput.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElInput), {
  15386. key: 0,
  15387. id: _ctx.id,
  15388. ref_key: "inputRef",
  15389. ref: inputRef,
  15390. "container-role": "combobox",
  15391. "model-value": displayValue.value,
  15392. name: _ctx.name,
  15393. size: (0, vue.unref)(pickerSize),
  15394. disabled: (0, vue.unref)(pickerDisabled),
  15395. placeholder: _ctx.placeholder,
  15396. class: (0, vue.normalizeClass)([
  15397. (0, vue.unref)(nsDate).b("editor"),
  15398. (0, vue.unref)(nsDate).bm("editor", _ctx.type),
  15399. (0, vue.unref)(nsDate).is("focus", (0, vue.unref)(pickerVisible)),
  15400. _ctx.$attrs.class
  15401. ]),
  15402. style: (0, vue.normalizeStyle)(_ctx.$attrs.style),
  15403. readonly: !_ctx.editable || _ctx.readonly || isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value || _ctx.type === "week",
  15404. "aria-label": _ctx.ariaLabel,
  15405. tabindex: _ctx.tabindex,
  15406. "validate-event": false,
  15407. onInput: onUserInput,
  15408. onFocus: (0, vue.unref)(handleFocus),
  15409. onBlur: (0, vue.unref)(handleBlur),
  15410. onKeydown: handleKeydownInput,
  15411. onChange: handleChange,
  15412. onMousedown: onMouseDownInput,
  15413. onMouseenter: onMouseEnter,
  15414. onMouseleave: onMouseLeave,
  15415. onTouchstartPassive: onTouchStartInput,
  15416. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
  15417. }, {
  15418. prefix: (0, vue.withCtx)(() => [triggerIcon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  15419. key: 0,
  15420. class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("icon")),
  15421. onMousedown: (0, vue.withModifiers)(onMouseDownInput, ["prevent"]),
  15422. onTouchstartPassive: onTouchStartInput
  15423. }, {
  15424. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(triggerIcon.value)))]),
  15425. _: 1
  15426. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)]),
  15427. suffix: (0, vue.withCtx)(() => [showClearBtn.value && _ctx.clearIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  15428. key: 0,
  15429. class: (0, vue.normalizeClass)(`${(0, vue.unref)(nsInput).e("icon")} clear-icon`),
  15430. onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
  15431. onClick: onClear
  15432. }, {
  15433. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.clearIcon)))]),
  15434. _: 1
  15435. }, 8, ["class", "onMousedown"])) : (0, vue.createCommentVNode)("v-if", true)]),
  15436. _: 1
  15437. }, 8, [
  15438. "id",
  15439. "model-value",
  15440. "name",
  15441. "size",
  15442. "disabled",
  15443. "placeholder",
  15444. "class",
  15445. "style",
  15446. "readonly",
  15447. "aria-label",
  15448. "tabindex",
  15449. "onFocus",
  15450. "onBlur"
  15451. ])) : ((0, vue.openBlock)(), (0, vue.createBlock)(picker_range_trigger_default, {
  15452. key: 1,
  15453. id: _ctx.id,
  15454. ref_key: "inputRef",
  15455. ref: inputRef,
  15456. "model-value": displayValue.value,
  15457. name: _ctx.name,
  15458. disabled: (0, vue.unref)(pickerDisabled),
  15459. readonly: !_ctx.editable || _ctx.readonly,
  15460. "start-placeholder": _ctx.startPlaceholder,
  15461. "end-placeholder": _ctx.endPlaceholder,
  15462. class: (0, vue.normalizeClass)(rangeInputKls.value),
  15463. style: (0, vue.normalizeStyle)(_ctx.$attrs.style),
  15464. "aria-label": _ctx.ariaLabel,
  15465. tabindex: _ctx.tabindex,
  15466. autocomplete: "off",
  15467. role: "combobox",
  15468. onClick: onMouseDownInput,
  15469. onFocus: (0, vue.unref)(handleFocus),
  15470. onBlur: (0, vue.unref)(handleBlur),
  15471. onStartInput: handleStartInput,
  15472. onStartChange: handleStartChange,
  15473. onEndInput: handleEndInput,
  15474. onEndChange: handleEndChange,
  15475. onMousedown: onMouseDownInput,
  15476. onMouseenter: onMouseEnter,
  15477. onMouseleave: onMouseLeave,
  15478. onTouchstartPassive: onTouchStartInput,
  15479. onKeydown: handleKeydownInput
  15480. }, {
  15481. prefix: (0, vue.withCtx)(() => [triggerIcon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  15482. key: 0,
  15483. class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("icon"), (0, vue.unref)(nsRange).e("icon")])
  15484. }, {
  15485. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(triggerIcon.value)))]),
  15486. _: 1
  15487. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)]),
  15488. "range-separator": (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "range-separator", {}, () => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsRange).b("separator")) }, (0, vue.toDisplayString)(_ctx.rangeSeparator), 3)])]),
  15489. suffix: (0, vue.withCtx)(() => [_ctx.clearIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  15490. key: 0,
  15491. class: (0, vue.normalizeClass)(clearIconKls.value),
  15492. onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
  15493. onClick: onClear
  15494. }, {
  15495. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.clearIcon)))]),
  15496. _: 1
  15497. }, 8, ["class", "onMousedown"])) : (0, vue.createCommentVNode)("v-if", true)]),
  15498. _: 3
  15499. }, 8, [
  15500. "id",
  15501. "model-value",
  15502. "name",
  15503. "disabled",
  15504. "readonly",
  15505. "start-placeholder",
  15506. "end-placeholder",
  15507. "class",
  15508. "style",
  15509. "aria-label",
  15510. "tabindex",
  15511. "onFocus",
  15512. "onBlur"
  15513. ]))]),
  15514. content: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default", {
  15515. visible: (0, vue.unref)(pickerVisible),
  15516. actualVisible: (0, vue.unref)(pickerActualVisible),
  15517. parsedValue: (0, vue.unref)(parsedValue),
  15518. format: _ctx.format,
  15519. dateFormat: _ctx.dateFormat,
  15520. timeFormat: _ctx.timeFormat,
  15521. unlinkPanels: _ctx.unlinkPanels,
  15522. type: _ctx.type,
  15523. defaultValue: _ctx.defaultValue,
  15524. showNow: _ctx.showNow,
  15525. showConfirm: _ctx.showConfirm,
  15526. showFooter: _ctx.showFooter,
  15527. showWeekNumber: _ctx.showWeekNumber,
  15528. singlePanel: _ctx.singlePanel,
  15529. onPick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(onPick) && (0, vue.unref)(onPick)(...args)),
  15530. onSelectRange: setSelectionRange,
  15531. onSetPickerOption: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(onSetPickerOption) && (0, vue.unref)(onSetPickerOption)(...args)),
  15532. onCalendarChange: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(onCalendarChange) && (0, vue.unref)(onCalendarChange)(...args)),
  15533. onClear,
  15534. onPanelChange: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(onPanelChange) && (0, vue.unref)(onPanelChange)(...args)),
  15535. onMousedown: _cache[5] || (_cache[5] = (0, vue.withModifiers)(() => {}, ["stop"]))
  15536. })]),
  15537. _: 3
  15538. }, 16, [
  15539. "visible",
  15540. "transition",
  15541. "popper-class",
  15542. "popper-style",
  15543. "popper-options",
  15544. "fallback-placements",
  15545. "placement"
  15546. ]);
  15547. };
  15548. }
  15549. });
  15550. //#endregion
  15551. //#region ../../packages/components/time-picker/src/common/picker.vue
  15552. var picker_default = picker_vue_vue_type_script_setup_true_lang_default;
  15553. //#endregion
  15554. //#region ../../packages/components/time-picker/src/props/panel-time-picker.ts
  15555. const panelTimePickerProps = buildProps({
  15556. ...timePanelSharedProps,
  15557. datetimeRole: String,
  15558. parsedValue: { type: definePropType(Object) }
  15559. });
  15560. //#endregion
  15561. //#region ../../packages/components/time-picker/src/composables/use-time-panel.ts
  15562. const useTimePanel = ({ getAvailableHours, getAvailableMinutes, getAvailableSeconds }) => {
  15563. const getAvailableTime = (date, role, first, compareDate) => {
  15564. const availableTimeGetters = {
  15565. hour: getAvailableHours,
  15566. minute: getAvailableMinutes,
  15567. second: getAvailableSeconds
  15568. };
  15569. let result = date;
  15570. [
  15571. "hour",
  15572. "minute",
  15573. "second"
  15574. ].forEach((type) => {
  15575. if (availableTimeGetters[type]) {
  15576. let availableTimeSlots;
  15577. const method = availableTimeGetters[type];
  15578. switch (type) {
  15579. case "minute":
  15580. availableTimeSlots = method(result.hour(), role, compareDate);
  15581. break;
  15582. case "second":
  15583. availableTimeSlots = method(result.hour(), result.minute(), role, compareDate);
  15584. break;
  15585. default:
  15586. availableTimeSlots = method(role, compareDate);
  15587. break;
  15588. }
  15589. if (availableTimeSlots?.length && !availableTimeSlots.includes(result[type]())) {
  15590. const pos = first ? 0 : availableTimeSlots.length - 1;
  15591. result = result[type](availableTimeSlots[pos]);
  15592. }
  15593. }
  15594. });
  15595. return result;
  15596. };
  15597. const timePickerOptions = {};
  15598. const onSetOption = ([key, val]) => {
  15599. timePickerOptions[key] = val;
  15600. };
  15601. return {
  15602. timePickerOptions,
  15603. getAvailableTime,
  15604. onSetOption
  15605. };
  15606. };
  15607. //#endregion
  15608. //#region ../../packages/components/time-picker/src/composables/use-time-picker.ts
  15609. const makeAvailableArr = (disabledList) => {
  15610. const trueOrNumber = (isDisabled, index) => isDisabled || index;
  15611. const getNumber = (predicate) => predicate !== true;
  15612. return disabledList.map(trueOrNumber).filter(getNumber);
  15613. };
  15614. const getTimeLists = (disabledHours, disabledMinutes, disabledSeconds) => {
  15615. const getHoursList = (role, compare) => {
  15616. return makeList(24, disabledHours && (() => disabledHours?.(role, compare)));
  15617. };
  15618. const getMinutesList = (hour, role, compare) => {
  15619. return makeList(60, disabledMinutes && (() => disabledMinutes?.(hour, role, compare)));
  15620. };
  15621. const getSecondsList = (hour, minute, role, compare) => {
  15622. return makeList(60, disabledSeconds && (() => disabledSeconds?.(hour, minute, role, compare)));
  15623. };
  15624. return {
  15625. getHoursList,
  15626. getMinutesList,
  15627. getSecondsList
  15628. };
  15629. };
  15630. const buildAvailableTimeSlotGetter = (disabledHours, disabledMinutes, disabledSeconds) => {
  15631. const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(disabledHours, disabledMinutes, disabledSeconds);
  15632. const getAvailableHours = (role, compare) => {
  15633. return makeAvailableArr(getHoursList(role, compare));
  15634. };
  15635. const getAvailableMinutes = (hour, role, compare) => {
  15636. return makeAvailableArr(getMinutesList(hour, role, compare));
  15637. };
  15638. const getAvailableSeconds = (hour, minute, role, compare) => {
  15639. return makeAvailableArr(getSecondsList(hour, minute, role, compare));
  15640. };
  15641. return {
  15642. getAvailableHours,
  15643. getAvailableMinutes,
  15644. getAvailableSeconds
  15645. };
  15646. };
  15647. const useOldValue = (props, options) => {
  15648. const oldValue = (0, vue.ref)(props.parsedValue);
  15649. (0, vue.watch)(() => props.visible, (val) => {
  15650. const modelValue = (0, vue.toValue)(options.modelValue);
  15651. const valueOnClear = (0, vue.toValue)(options.valueOnClear);
  15652. if (val && modelValue === valueOnClear) {
  15653. oldValue.value = valueOnClear;
  15654. return;
  15655. }
  15656. if (!val) oldValue.value = props.parsedValue;
  15657. });
  15658. return oldValue;
  15659. };
  15660. //#endregion
  15661. //#region ../../packages/directives/click-outside/index.ts
  15662. const nodeList = /* @__PURE__ */ new Map();
  15663. if (isClient) {
  15664. let startClick;
  15665. document.addEventListener("mousedown", (e) => startClick = e);
  15666. document.addEventListener("mouseup", (e) => {
  15667. if (startClick) {
  15668. for (const handlers of nodeList.values()) for (const { documentHandler } of handlers) documentHandler(e, startClick);
  15669. startClick = void 0;
  15670. }
  15671. });
  15672. }
  15673. function createDocumentHandler(el, binding) {
  15674. let excludes = [];
  15675. if (isArray$1(binding.arg)) excludes = binding.arg;
  15676. else if (isElement$1(binding.arg)) excludes.push(binding.arg);
  15677. return function(mouseup, mousedown) {
  15678. const popperRef = binding.instance.popperRef;
  15679. const mouseUpTarget = mouseup.target;
  15680. const mouseDownTarget = mousedown?.target;
  15681. const isBound = !binding || !binding.instance;
  15682. const isTargetExists = !mouseUpTarget || !mouseDownTarget;
  15683. const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget);
  15684. const isSelf = el === mouseUpTarget;
  15685. const isTargetExcluded = excludes.length && excludes.some((item) => item?.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget);
  15686. const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget));
  15687. if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) return;
  15688. binding.value(mouseup, mousedown);
  15689. };
  15690. }
  15691. const ClickOutside = {
  15692. beforeMount(el, binding) {
  15693. if (!nodeList.has(el)) nodeList.set(el, []);
  15694. nodeList.get(el).push({
  15695. documentHandler: createDocumentHandler(el, binding),
  15696. bindingFn: binding.value
  15697. });
  15698. },
  15699. updated(el, binding) {
  15700. if (!nodeList.has(el)) nodeList.set(el, []);
  15701. const handlers = nodeList.get(el);
  15702. const oldHandlerIndex = handlers.findIndex((item) => item.bindingFn === binding.oldValue);
  15703. const newHandler = {
  15704. documentHandler: createDocumentHandler(el, binding),
  15705. bindingFn: binding.value
  15706. };
  15707. if (oldHandlerIndex >= 0) handlers.splice(oldHandlerIndex, 1, newHandler);
  15708. else handlers.push(newHandler);
  15709. },
  15710. unmounted(el) {
  15711. nodeList.delete(el);
  15712. }
  15713. };
  15714. //#endregion
  15715. //#region ../../packages/directives/repeat-click/index.ts
  15716. const REPEAT_INTERVAL = 100;
  15717. const REPEAT_DELAY = 600;
  15718. const SCOPE$6 = "_RepeatClick";
  15719. const vRepeatClick = {
  15720. beforeMount(el, binding) {
  15721. const value = binding.value;
  15722. const { interval = 100, delay = 600 } = isFunction$1(value) ? {} : value;
  15723. let intervalId;
  15724. let delayId;
  15725. const handler = () => isFunction$1(value) ? value() : value.handler();
  15726. const clear = () => {
  15727. if (delayId) {
  15728. clearTimeout(delayId);
  15729. delayId = void 0;
  15730. }
  15731. if (intervalId) {
  15732. clearInterval(intervalId);
  15733. intervalId = void 0;
  15734. }
  15735. };
  15736. const start = (evt) => {
  15737. if (evt.button !== 0) return;
  15738. clear();
  15739. handler();
  15740. document.addEventListener("mouseup", clear, { once: true });
  15741. delayId = setTimeout(() => {
  15742. intervalId = setInterval(() => {
  15743. handler();
  15744. }, interval);
  15745. }, delay);
  15746. };
  15747. el[SCOPE$6] = {
  15748. start,
  15749. clear
  15750. };
  15751. el.addEventListener("mousedown", start);
  15752. },
  15753. unmounted(el) {
  15754. if (!el[SCOPE$6]) return;
  15755. const { start, clear } = el[SCOPE$6];
  15756. if (start) el.removeEventListener("mousedown", start);
  15757. if (clear) {
  15758. clear();
  15759. document.removeEventListener("mouseup", clear);
  15760. }
  15761. el[SCOPE$6] = null;
  15762. }
  15763. };
  15764. //#endregion
  15765. //#region ../../packages/directives/trap-focus/index.ts
  15766. const FOCUSABLE_CHILDREN = "_trap-focus-children";
  15767. const FOCUS_STACK = [];
  15768. const FOCUS_HANDLER = (e) => {
  15769. if (FOCUS_STACK.length === 0) return;
  15770. const code = getEventCode(e);
  15771. const focusableElement = FOCUS_STACK[FOCUS_STACK.length - 1][FOCUSABLE_CHILDREN];
  15772. if (focusableElement.length > 0 && code === EVENT_CODE.tab) {
  15773. if (focusableElement.length === 1) {
  15774. e.preventDefault();
  15775. if (document.activeElement !== focusableElement[0]) focusableElement[0].focus();
  15776. return;
  15777. }
  15778. const goingBackward = e.shiftKey;
  15779. const isFirst = e.target === focusableElement[0];
  15780. const isLast = e.target === focusableElement[focusableElement.length - 1];
  15781. if (isFirst && goingBackward) {
  15782. e.preventDefault();
  15783. focusableElement[focusableElement.length - 1].focus();
  15784. }
  15785. if (isLast && !goingBackward) {
  15786. e.preventDefault();
  15787. focusableElement[0].focus();
  15788. }
  15789. }
  15790. };
  15791. const TrapFocus = {
  15792. beforeMount(el) {
  15793. el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements$1(el);
  15794. FOCUS_STACK.push(el);
  15795. if (FOCUS_STACK.length <= 1) document.addEventListener("keydown", FOCUS_HANDLER);
  15796. },
  15797. updated(el) {
  15798. (0, vue.nextTick)(() => {
  15799. el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements$1(el);
  15800. });
  15801. },
  15802. unmounted() {
  15803. FOCUS_STACK.shift();
  15804. if (FOCUS_STACK.length === 0) document.removeEventListener("keydown", FOCUS_HANDLER);
  15805. }
  15806. };
  15807. //#endregion
  15808. //#region ../../node_modules/.pnpm/normalize-wheel-es@1.2.0/node_modules/normalize-wheel-es/dist/index.mjs
  15809. var v = !1, o, f, s, u, d, N, l, p, m, w, D, x, E, M, F;
  15810. function a() {
  15811. if (!v) {
  15812. v = !0;
  15813. var e = navigator.userAgent, n = /(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e), i = /(Mac OS X)|(Windows)|(Linux)/.exec(e);
  15814. if (x = /\b(iPhone|iP[ao]d)/.exec(e), E = /\b(iP[ao]d)/.exec(e), w = /Android/i.exec(e), M = /FBAN\/\w+;/i.exec(e), F = /Mobile/i.exec(e), D = !!/Win64/.exec(e), n) {
  15815. o = n[1] ? parseFloat(n[1]) : n[5] ? parseFloat(n[5]) : NaN, o && document && document.documentMode && (o = document.documentMode);
  15816. var r = /(?:Trident\/(\d+.\d+))/.exec(e);
  15817. N = r ? parseFloat(r[1]) + 4 : o, f = n[2] ? parseFloat(n[2]) : NaN, s = n[3] ? parseFloat(n[3]) : NaN, u = n[4] ? parseFloat(n[4]) : NaN, u ? (n = /(?:Chrome\/(\d+\.\d+))/.exec(e), d = n && n[1] ? parseFloat(n[1]) : NaN) : d = NaN;
  15818. } else o = f = s = d = u = NaN;
  15819. if (i) {
  15820. if (i[1]) {
  15821. var t = /(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);
  15822. l = t ? parseFloat(t[1].replace("_", ".")) : !0;
  15823. } else l = !1;
  15824. p = !!i[2], m = !!i[3];
  15825. } else l = p = m = !1;
  15826. }
  15827. }
  15828. var _ = {
  15829. ie: function() {
  15830. return a() || o;
  15831. },
  15832. ieCompatibilityMode: function() {
  15833. return a() || N > o;
  15834. },
  15835. ie64: function() {
  15836. return _.ie() && D;
  15837. },
  15838. firefox: function() {
  15839. return a() || f;
  15840. },
  15841. opera: function() {
  15842. return a() || s;
  15843. },
  15844. webkit: function() {
  15845. return a() || u;
  15846. },
  15847. safari: function() {
  15848. return _.webkit();
  15849. },
  15850. chrome: function() {
  15851. return a() || d;
  15852. },
  15853. windows: function() {
  15854. return a() || p;
  15855. },
  15856. osx: function() {
  15857. return a() || l;
  15858. },
  15859. linux: function() {
  15860. return a() || m;
  15861. },
  15862. iphone: function() {
  15863. return a() || x;
  15864. },
  15865. mobile: function() {
  15866. return a() || x || E || w || F;
  15867. },
  15868. nativeApp: function() {
  15869. return a() || M;
  15870. },
  15871. android: function() {
  15872. return a() || w;
  15873. },
  15874. ipad: function() {
  15875. return a() || E;
  15876. }
  15877. }, A = _;
  15878. var c = !!(typeof window < "u" && window.document && window.document.createElement), h$26 = {
  15879. canUseDOM: c,
  15880. canUseWorkers: typeof Worker < "u",
  15881. canUseEventListeners: c && !!(window.addEventListener || window.attachEvent),
  15882. canUseViewport: c && !!window.screen,
  15883. isInWorker: !c
  15884. };
  15885. var X;
  15886. h$26.canUseDOM && (X = document.implementation && document.implementation.hasFeature && document.implementation.hasFeature("", "") !== !0);
  15887. function S(e, n) {
  15888. if (!h$26.canUseDOM || n && !("addEventListener" in document)) return !1;
  15889. var i = "on" + e, r = i in document;
  15890. if (!r) {
  15891. var t = document.createElement("div");
  15892. t.setAttribute(i, "return;"), r = typeof t[i] == "function";
  15893. }
  15894. return !r && X && e === "wheel" && (r = document.implementation.hasFeature("Events.wheel", "3.0")), r;
  15895. }
  15896. var b = S;
  15897. var O = 10, I = 40, P = 800;
  15898. function T(e) {
  15899. var n = 0, i = 0, r = 0, t = 0;
  15900. return "detail" in e && (i = e.detail), "wheelDelta" in e && (i = -e.wheelDelta / 120), "wheelDeltaY" in e && (i = -e.wheelDeltaY / 120), "wheelDeltaX" in e && (n = -e.wheelDeltaX / 120), "axis" in e && e.axis === e.HORIZONTAL_AXIS && (n = i, i = 0), r = n * O, t = i * O, "deltaY" in e && (t = e.deltaY), "deltaX" in e && (r = e.deltaX), (r || t) && e.deltaMode && (e.deltaMode == 1 ? (r *= I, t *= I) : (r *= P, t *= P)), r && !n && (n = r < 1 ? -1 : 1), t && !i && (i = t < 1 ? -1 : 1), {
  15901. spinX: n,
  15902. spinY: i,
  15903. pixelX: r,
  15904. pixelY: t
  15905. };
  15906. }
  15907. T.getEventType = function() {
  15908. return A.firefox() ? "DOMMouseScroll" : b("wheel") ? "wheel" : "mousewheel";
  15909. };
  15910. var Y = T;
  15911. /**
  15912. * Checks if an event is supported in the current execution environment.
  15913. *
  15914. * NOTE: This will not work correctly for non-generic events such as `change`,
  15915. * `reset`, `load`, `error`, and `select`.
  15916. *
  15917. * Borrows from Modernizr.
  15918. *
  15919. * @param {string} eventNameSuffix Event name, e.g. "click".
  15920. * @param {?boolean} capture Check if the capture phase is supported.
  15921. * @return {boolean} True if the event is supported.
  15922. * @internal
  15923. * @license Modernizr 3.0.0pre (Custom Build) | MIT
  15924. */
  15925. //#endregion
  15926. //#region ../../packages/directives/mousewheel/index.ts
  15927. const SCOPE$5 = "_Mousewheel";
  15928. const mousewheel = function(element, callback) {
  15929. if (element && element.addEventListener) {
  15930. removeWheelHandler(element);
  15931. const fn = function(event) {
  15932. const normalized = Y(event);
  15933. callback && Reflect.apply(callback, this, [event, normalized]);
  15934. };
  15935. element[SCOPE$5] = { wheelHandler: fn };
  15936. element.addEventListener("wheel", fn, { passive: true });
  15937. }
  15938. };
  15939. const removeWheelHandler = (element) => {
  15940. if (element["_Mousewheel"]?.wheelHandler) {
  15941. element.removeEventListener("wheel", element[SCOPE$5].wheelHandler);
  15942. element[SCOPE$5] = null;
  15943. }
  15944. };
  15945. const Mousewheel = {
  15946. beforeMount(el, binding) {
  15947. mousewheel(el, binding.value);
  15948. },
  15949. unmounted(el) {
  15950. removeWheelHandler(el);
  15951. },
  15952. updated(el, binding) {
  15953. if (binding.value !== binding.oldValue) mousewheel(el, binding.value);
  15954. }
  15955. };
  15956. //#endregion
  15957. //#region ../../packages/components/time-picker/src/props/basic-time-spinner.ts
  15958. const basicTimeSpinnerProps = buildProps({
  15959. role: {
  15960. type: String,
  15961. required: true
  15962. },
  15963. spinnerDate: {
  15964. type: definePropType(Object),
  15965. required: true
  15966. },
  15967. showSeconds: {
  15968. type: Boolean,
  15969. default: true
  15970. },
  15971. arrowControl: Boolean,
  15972. amPmMode: {
  15973. type: definePropType(String),
  15974. default: ""
  15975. },
  15976. ...disabledTimeListsProps
  15977. });
  15978. //#endregion
  15979. //#region ../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue?vue&type=script&setup=true&lang.ts
  15980. const _hoisted_1$71 = ["onClick"];
  15981. const _hoisted_2$40 = ["onMouseenter"];
  15982. var basic_time_spinner_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  15983. __name: "basic-time-spinner",
  15984. props: basicTimeSpinnerProps,
  15985. emits: [
  15986. CHANGE_EVENT,
  15987. "select-range",
  15988. "set-option"
  15989. ],
  15990. setup(__props, { emit: __emit }) {
  15991. const props = __props;
  15992. const { isRange, format, saveOnBlur } = (0, vue.inject)(PICKER_BASE_INJECTION_KEY).props;
  15993. const emit = __emit;
  15994. const ns = useNamespace("time");
  15995. const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(props.disabledHours, props.disabledMinutes, props.disabledSeconds);
  15996. let isScrolling = false;
  15997. const ignoreScroll = {
  15998. hours: false,
  15999. minutes: false,
  16000. seconds: false
  16001. };
  16002. const currentScrollbar = (0, vue.ref)();
  16003. const listRefsMap = {
  16004. hours: (0, vue.ref)(),
  16005. minutes: (0, vue.ref)(),
  16006. seconds: (0, vue.ref)()
  16007. };
  16008. const spinnerItems = (0, vue.computed)(() => {
  16009. return props.showSeconds ? timeUnits : timeUnits.slice(0, 2);
  16010. });
  16011. const timePartials = (0, vue.computed)(() => {
  16012. const { spinnerDate } = props;
  16013. return {
  16014. hours: spinnerDate.hour(),
  16015. minutes: spinnerDate.minute(),
  16016. seconds: spinnerDate.second()
  16017. };
  16018. });
  16019. const timeList = (0, vue.computed)(() => {
  16020. const { hours, minutes } = (0, vue.unref)(timePartials);
  16021. const { role, spinnerDate } = props;
  16022. const compare = !isRange ? spinnerDate : void 0;
  16023. return {
  16024. hours: getHoursList(role, compare),
  16025. minutes: getMinutesList(hours, role, compare),
  16026. seconds: getSecondsList(hours, minutes, role, compare)
  16027. };
  16028. });
  16029. const arrowControlTimeList = (0, vue.computed)(() => {
  16030. const { hours, minutes, seconds } = (0, vue.unref)(timePartials);
  16031. return {
  16032. hours: buildTimeList(hours, 23),
  16033. minutes: buildTimeList(minutes, 59),
  16034. seconds: buildTimeList(seconds, 59)
  16035. };
  16036. });
  16037. const debouncedResetScroll = debounce((type) => {
  16038. isScrolling = false;
  16039. adjustCurrentSpinner(type);
  16040. }, 200);
  16041. const getAmPmFlag = (hour) => {
  16042. if (!!!props.amPmMode) return "";
  16043. const isCapital = props.amPmMode === "A";
  16044. let content = hour < 12 ? " am" : " pm";
  16045. if (isCapital) content = content.toUpperCase();
  16046. return content;
  16047. };
  16048. const emitSelectRange = (type) => {
  16049. let range = [0, 0];
  16050. const actualFormat = format || "HH:mm:ss";
  16051. const hourIndex = actualFormat.indexOf("HH");
  16052. const minuteIndex = actualFormat.indexOf("mm");
  16053. const secondIndex = actualFormat.indexOf("ss");
  16054. switch (type) {
  16055. case "hours":
  16056. if (hourIndex !== -1) range = [hourIndex, hourIndex + 2];
  16057. break;
  16058. case "minutes":
  16059. if (minuteIndex !== -1) range = [minuteIndex, minuteIndex + 2];
  16060. break;
  16061. case "seconds":
  16062. if (secondIndex !== -1) range = [secondIndex, secondIndex + 2];
  16063. break;
  16064. }
  16065. const [left, right] = range;
  16066. emit("select-range", left, right);
  16067. currentScrollbar.value = type;
  16068. };
  16069. const adjustCurrentSpinner = (type) => {
  16070. adjustSpinner(type, (0, vue.unref)(timePartials)[type]);
  16071. };
  16072. const adjustSpinners = () => {
  16073. adjustCurrentSpinner("hours");
  16074. adjustCurrentSpinner("minutes");
  16075. adjustCurrentSpinner("seconds");
  16076. };
  16077. const getScrollbarElement = (el) => el.querySelector(`.${ns.namespace.value}-scrollbar__wrap`);
  16078. const adjustSpinner = (type, value) => {
  16079. if (props.arrowControl) return;
  16080. const scrollbar = (0, vue.unref)(listRefsMap[type]);
  16081. if (scrollbar && scrollbar.$el) {
  16082. if (!saveOnBlur) {
  16083. ignoreScroll[type] = true;
  16084. rAF(() => {
  16085. ignoreScroll[type] = false;
  16086. });
  16087. }
  16088. getScrollbarElement(scrollbar.$el).scrollTop = Math.max(0, value * typeItemHeight(type));
  16089. }
  16090. };
  16091. const typeItemHeight = (type) => {
  16092. const listItem = (0, vue.unref)(listRefsMap[type])?.$el.querySelector("li");
  16093. if (listItem) return Number.parseFloat(getStyle(listItem, "height")) || 0;
  16094. return 0;
  16095. };
  16096. const onIncrement = () => {
  16097. scrollDown(1);
  16098. };
  16099. const onDecrement = () => {
  16100. scrollDown(-1);
  16101. };
  16102. const scrollDown = (step) => {
  16103. if (!currentScrollbar.value) emitSelectRange("hours");
  16104. const label = currentScrollbar.value;
  16105. const now = (0, vue.unref)(timePartials)[label];
  16106. const next = findNextUnDisabled(label, now, step, currentScrollbar.value === "hours" ? 24 : 60);
  16107. modifyDateField(label, next);
  16108. adjustSpinner(label, next);
  16109. (0, vue.nextTick)(() => emitSelectRange(label));
  16110. };
  16111. const findNextUnDisabled = (type, now, step, total) => {
  16112. let next = (now + step + total) % total;
  16113. const list = (0, vue.unref)(timeList)[type];
  16114. while (list[next] && next !== now) next = (next + step + total) % total;
  16115. return next;
  16116. };
  16117. const modifyDateField = (type, value) => {
  16118. if ((0, vue.unref)(timeList)[type][value]) return;
  16119. const { hours, minutes, seconds } = (0, vue.unref)(timePartials);
  16120. let changeTo;
  16121. switch (type) {
  16122. case "hours":
  16123. changeTo = props.spinnerDate.hour(value).minute(minutes).second(seconds);
  16124. break;
  16125. case "minutes":
  16126. changeTo = props.spinnerDate.hour(hours).minute(value).second(seconds);
  16127. break;
  16128. case "seconds":
  16129. changeTo = props.spinnerDate.hour(hours).minute(minutes).second(value);
  16130. break;
  16131. }
  16132. emit(CHANGE_EVENT, changeTo);
  16133. };
  16134. const handleClick = (type, { value, disabled }) => {
  16135. if (!disabled) {
  16136. modifyDateField(type, value);
  16137. emitSelectRange(type);
  16138. adjustSpinner(type, value);
  16139. }
  16140. };
  16141. const handleScroll = (type) => {
  16142. if (!saveOnBlur && ignoreScroll[type]) return;
  16143. const scrollbar = (0, vue.unref)(listRefsMap[type]);
  16144. if (!scrollbar) return;
  16145. isScrolling = true;
  16146. debouncedResetScroll(type);
  16147. modifyDateField(type, Math.min(Math.round((getScrollbarElement(scrollbar.$el).scrollTop - (scrollBarHeight(type) * .5 - 10) / typeItemHeight(type) + 3) / typeItemHeight(type)), type === "hours" ? 23 : 59));
  16148. };
  16149. const scrollBarHeight = (type) => {
  16150. return (0, vue.unref)(listRefsMap[type]).$el.offsetHeight;
  16151. };
  16152. const bindScrollEvent = () => {
  16153. const bindFunction = (type) => {
  16154. const scrollbar = (0, vue.unref)(listRefsMap[type]);
  16155. if (scrollbar && scrollbar.$el) getScrollbarElement(scrollbar.$el).onscroll = () => {
  16156. handleScroll(type);
  16157. };
  16158. };
  16159. bindFunction("hours");
  16160. bindFunction("minutes");
  16161. bindFunction("seconds");
  16162. };
  16163. (0, vue.onMounted)(() => {
  16164. (0, vue.nextTick)(() => {
  16165. !props.arrowControl && bindScrollEvent();
  16166. adjustSpinners();
  16167. if (props.role === "start") emitSelectRange("hours");
  16168. });
  16169. });
  16170. const setRef = (scrollbar, type) => {
  16171. listRefsMap[type].value = scrollbar ?? void 0;
  16172. };
  16173. emit("set-option", [`${props.role}_scrollDown`, scrollDown]);
  16174. emit("set-option", [`${props.role}_emitSelectRange`, emitSelectRange]);
  16175. (0, vue.watch)(() => props.spinnerDate, () => {
  16176. if (isScrolling) return;
  16177. adjustSpinners();
  16178. });
  16179. return (_ctx, _cache) => {
  16180. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("spinner"), { "has-seconds": _ctx.showSeconds }]) }, [!_ctx.arrowControl ? ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, (0, vue.renderList)(spinnerItems.value, (item) => {
  16181. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElScrollbar), {
  16182. key: item,
  16183. ref_for: true,
  16184. ref: (scrollbar) => setRef(scrollbar, item),
  16185. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("spinner", "wrapper")),
  16186. "wrap-style": "max-height: inherit;",
  16187. "view-class": (0, vue.unref)(ns).be("spinner", "list"),
  16188. noresize: "",
  16189. tag: "ul",
  16190. onMouseenter: ($event) => emitSelectRange(item),
  16191. onMousemove: ($event) => adjustCurrentSpinner(item)
  16192. }, {
  16193. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(timeList.value[item], (disabled, key) => {
  16194. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  16195. key,
  16196. class: (0, vue.normalizeClass)([
  16197. (0, vue.unref)(ns).be("spinner", "item"),
  16198. (0, vue.unref)(ns).is("active", key === timePartials.value[item]),
  16199. (0, vue.unref)(ns).is("disabled", disabled)
  16200. ]),
  16201. onClick: ($event) => handleClick(item, {
  16202. value: key,
  16203. disabled
  16204. })
  16205. }, [item === "hours" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(("0" + (_ctx.amPmMode ? key % 12 || 12 : key)).slice(-2)) + (0, vue.toDisplayString)(getAmPmFlag(key)), 1)], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(("0" + key).slice(-2)), 1)], 64))], 10, _hoisted_1$71);
  16206. }), 128))]),
  16207. _: 2
  16208. }, 1032, [
  16209. "class",
  16210. "view-class",
  16211. "onMouseenter",
  16212. "onMousemove"
  16213. ]);
  16214. }), 128)) : (0, vue.createCommentVNode)("v-if", true), _ctx.arrowControl ? ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, (0, vue.renderList)(spinnerItems.value, (item) => {
  16215. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  16216. key: item,
  16217. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("spinner", "wrapper"), (0, vue.unref)(ns).is("arrow")]),
  16218. onMouseenter: ($event) => emitSelectRange(item)
  16219. }, [
  16220. (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)(["arrow-up", (0, vue.unref)(ns).be("spinner", "arrow")]) }, {
  16221. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_up_default))]),
  16222. _: 1
  16223. }, 8, ["class"])), [[(0, vue.unref)(vRepeatClick), onDecrement]]),
  16224. (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)(["arrow-down", (0, vue.unref)(ns).be("spinner", "arrow")]) }, {
  16225. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_down_default))]),
  16226. _: 1
  16227. }, 8, ["class"])), [[(0, vue.unref)(vRepeatClick), onIncrement]]),
  16228. (0, vue.createElementVNode)("ul", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("spinner", "list")) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(arrowControlTimeList.value[item], (time, key) => {
  16229. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  16230. key,
  16231. class: (0, vue.normalizeClass)([
  16232. (0, vue.unref)(ns).be("spinner", "item"),
  16233. (0, vue.unref)(ns).is("active", time === timePartials.value[item]),
  16234. (0, vue.unref)(ns).is("disabled", timeList.value[item][time])
  16235. ])
  16236. }, [(0, vue.unref)(isNumber)(time) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [item === "hours" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(("0" + (_ctx.amPmMode ? time % 12 || 12 : time)).slice(-2)) + (0, vue.toDisplayString)(getAmPmFlag(time)), 1)], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(("0" + time).slice(-2)), 1)], 64))], 64)) : (0, vue.createCommentVNode)("v-if", true)], 2);
  16237. }), 128))], 2)
  16238. ], 42, _hoisted_2$40);
  16239. }), 128)) : (0, vue.createCommentVNode)("v-if", true)], 2);
  16240. };
  16241. }
  16242. });
  16243. //#endregion
  16244. //#region ../../packages/components/time-picker/src/time-picker-com/basic-time-spinner.vue
  16245. var basic_time_spinner_default = basic_time_spinner_vue_vue_type_script_setup_true_lang_default;
  16246. //#endregion
  16247. //#region ../../packages/components/time-picker/src/time-picker-com/panel-time-pick.vue?vue&type=script&setup=true&lang.ts
  16248. var panel_time_pick_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  16249. __name: "panel-time-pick",
  16250. props: panelTimePickerProps,
  16251. emits: [
  16252. "pick",
  16253. "select-range",
  16254. "set-picker-option"
  16255. ],
  16256. setup(__props, { emit: __emit }) {
  16257. const props = __props;
  16258. const emit = __emit;
  16259. const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
  16260. const { arrowControl, disabledHours, disabledMinutes, disabledSeconds, defaultValue } = pickerBase.props;
  16261. const { getAvailableHours, getAvailableMinutes, getAvailableSeconds } = buildAvailableTimeSlotGetter(disabledHours, disabledMinutes, disabledSeconds);
  16262. const ns = useNamespace("time");
  16263. const { t, lang } = useLocale();
  16264. const selectionRange = (0, vue.ref)([0, 2]);
  16265. const oldValue = useOldValue(props, {
  16266. modelValue: (0, vue.computed)(() => pickerBase.props.modelValue),
  16267. valueOnClear: (0, vue.computed)(() => pickerBase?.emptyValues ? pickerBase.emptyValues.valueOnClear.value : null)
  16268. });
  16269. const transitionName = (0, vue.computed)(() => {
  16270. return isUndefined(props.actualVisible) ? `${ns.namespace.value}-zoom-in-top` : "";
  16271. });
  16272. const showSeconds = (0, vue.computed)(() => {
  16273. return props.format.includes("ss");
  16274. });
  16275. const amPmMode = (0, vue.computed)(() => {
  16276. if (props.format.includes("A")) return "A";
  16277. if (props.format.includes("a")) return "a";
  16278. return "";
  16279. });
  16280. const isValidValue = (_date) => {
  16281. const parsedDate = (0, import_dayjs_min.default)(_date).locale(lang.value);
  16282. const result = getRangeAvailableTime(parsedDate);
  16283. return parsedDate.isSame(result);
  16284. };
  16285. const handleCancel = () => {
  16286. const old = oldValue.value;
  16287. emit("pick", old, false);
  16288. (0, vue.nextTick)(() => {
  16289. oldValue.value = old;
  16290. });
  16291. };
  16292. const handleConfirm = (visible = false, first = false) => {
  16293. if (first) return;
  16294. emit("pick", props.parsedValue, visible);
  16295. };
  16296. const handleChange = (_date) => {
  16297. if (!props.visible) return;
  16298. emit("pick", getRangeAvailableTime(_date).millisecond(0), true);
  16299. };
  16300. const setSelectionRange = (start, end) => {
  16301. emit("select-range", start, end);
  16302. selectionRange.value = [start, end];
  16303. };
  16304. const changeSelectionRange = (step) => {
  16305. const actualFormat = props.format;
  16306. const hourIndex = actualFormat.indexOf("HH");
  16307. const minuteIndex = actualFormat.indexOf("mm");
  16308. const secondIndex = actualFormat.indexOf("ss");
  16309. const list = [];
  16310. const mapping = [];
  16311. if (hourIndex !== -1) {
  16312. list.push(hourIndex);
  16313. mapping.push("hours");
  16314. }
  16315. if (minuteIndex !== -1) {
  16316. list.push(minuteIndex);
  16317. mapping.push("minutes");
  16318. }
  16319. if (secondIndex !== -1 && showSeconds.value) {
  16320. list.push(secondIndex);
  16321. mapping.push("seconds");
  16322. }
  16323. const next = (list.indexOf(selectionRange.value[0]) + step + list.length) % list.length;
  16324. timePickerOptions["start_emitSelectRange"](mapping[next]);
  16325. };
  16326. const handleKeydown = (event) => {
  16327. const code = getEventCode(event);
  16328. const { left, right, up, down } = EVENT_CODE;
  16329. if ([left, right].includes(code)) {
  16330. changeSelectionRange(code === left ? -1 : 1);
  16331. event.preventDefault();
  16332. return;
  16333. }
  16334. if ([up, down].includes(code)) {
  16335. const step = code === up ? -1 : 1;
  16336. timePickerOptions["start_scrollDown"](step);
  16337. event.preventDefault();
  16338. return;
  16339. }
  16340. };
  16341. const { timePickerOptions, onSetOption, getAvailableTime } = useTimePanel({
  16342. getAvailableHours,
  16343. getAvailableMinutes,
  16344. getAvailableSeconds
  16345. });
  16346. const getRangeAvailableTime = (date) => {
  16347. return getAvailableTime(date, props.datetimeRole || "", true);
  16348. };
  16349. const parseUserInput = (value) => {
  16350. if (!value) return null;
  16351. return (0, import_dayjs_min.default)(value, props.format).locale(lang.value);
  16352. };
  16353. const getDefaultValue = () => {
  16354. return (0, import_dayjs_min.default)(defaultValue).locale(lang.value);
  16355. };
  16356. emit("set-picker-option", ["isValidValue", isValidValue]);
  16357. emit("set-picker-option", ["parseUserInput", parseUserInput]);
  16358. emit("set-picker-option", ["handleKeydownInput", handleKeydown]);
  16359. emit("set-picker-option", ["getRangeAvailableTime", getRangeAvailableTime]);
  16360. emit("set-picker-option", ["getDefaultValue", getDefaultValue]);
  16361. emit("set-picker-option", ["handleCancel", handleCancel]);
  16362. return (_ctx, _cache) => {
  16363. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, { name: transitionName.value }, {
  16364. default: (0, vue.withCtx)(() => [_ctx.actualVisible || _ctx.visible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  16365. key: 0,
  16366. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("panel"))
  16367. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("panel", "content"), { "has-seconds": showSeconds.value }]) }, [(0, vue.createVNode)(basic_time_spinner_default, {
  16368. ref: "spinner",
  16369. role: _ctx.datetimeRole || "start",
  16370. "arrow-control": (0, vue.unref)(arrowControl),
  16371. "show-seconds": showSeconds.value,
  16372. "am-pm-mode": amPmMode.value,
  16373. "spinner-date": _ctx.parsedValue,
  16374. "disabled-hours": (0, vue.unref)(disabledHours),
  16375. "disabled-minutes": (0, vue.unref)(disabledMinutes),
  16376. "disabled-seconds": (0, vue.unref)(disabledSeconds),
  16377. onChange: handleChange,
  16378. onSetOption: (0, vue.unref)(onSetOption),
  16379. onSelectRange: setSelectionRange
  16380. }, null, 8, [
  16381. "role",
  16382. "arrow-control",
  16383. "show-seconds",
  16384. "am-pm-mode",
  16385. "spinner-date",
  16386. "disabled-hours",
  16387. "disabled-minutes",
  16388. "disabled-seconds",
  16389. "onSetOption"
  16390. ])], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "footer")) }, [(0, vue.createElementVNode)("button", {
  16391. type: "button",
  16392. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("panel", "btn"), "cancel"]),
  16393. onClick: handleCancel
  16394. }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.cancel")), 3), (0, vue.createElementVNode)("button", {
  16395. type: "button",
  16396. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("panel", "btn"), "confirm"]),
  16397. onClick: _cache[0] || (_cache[0] = ($event) => handleConfirm())
  16398. }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.confirm")), 3)], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true)]),
  16399. _: 1
  16400. }, 8, ["name"]);
  16401. };
  16402. }
  16403. });
  16404. //#endregion
  16405. //#region ../../packages/components/time-picker/src/time-picker-com/panel-time-pick.vue
  16406. var panel_time_pick_default = panel_time_pick_vue_vue_type_script_setup_true_lang_default;
  16407. //#endregion
  16408. //#region ../../packages/components/time-picker/src/props/panel-time-range.ts
  16409. const panelTimeRangeProps = buildProps({
  16410. ...timePanelSharedProps,
  16411. parsedValue: { type: definePropType(Array) }
  16412. });
  16413. //#endregion
  16414. //#region ../../packages/components/time-picker/src/time-picker-com/panel-time-range.vue?vue&type=script&setup=true&lang.ts
  16415. const _hoisted_1$70 = ["disabled"];
  16416. var panel_time_range_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  16417. __name: "panel-time-range",
  16418. props: panelTimeRangeProps,
  16419. emits: [
  16420. "pick",
  16421. "select-range",
  16422. "set-picker-option"
  16423. ],
  16424. setup(__props, { emit: __emit }) {
  16425. const props = __props;
  16426. const emit = __emit;
  16427. const makeSelectRange = (start, end) => {
  16428. const result = [];
  16429. for (let i = start; i <= end; i++) result.push(i);
  16430. return result;
  16431. };
  16432. const { t, lang } = useLocale();
  16433. const nsTime = useNamespace("time");
  16434. const nsPicker = useNamespace("picker");
  16435. const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
  16436. const { arrowControl, disabledHours, disabledMinutes, disabledSeconds, defaultValue } = pickerBase.props;
  16437. const startContainerKls = (0, vue.computed)(() => [
  16438. nsTime.be("range-picker", "body"),
  16439. nsTime.be("panel", "content"),
  16440. nsTime.is("arrow", arrowControl),
  16441. showSeconds.value ? "has-seconds" : ""
  16442. ]);
  16443. const endContainerKls = (0, vue.computed)(() => [
  16444. nsTime.be("range-picker", "body"),
  16445. nsTime.be("panel", "content"),
  16446. nsTime.is("arrow", arrowControl),
  16447. showSeconds.value ? "has-seconds" : ""
  16448. ]);
  16449. const startTime = (0, vue.computed)(() => props.parsedValue[0]);
  16450. const endTime = (0, vue.computed)(() => props.parsedValue[1]);
  16451. const oldValue = useOldValue(props, {
  16452. modelValue: (0, vue.computed)(() => pickerBase.props.modelValue),
  16453. valueOnClear: (0, vue.computed)(() => pickerBase?.emptyValues ? pickerBase.emptyValues.valueOnClear.value : null)
  16454. });
  16455. const handleCancel = () => {
  16456. const old = oldValue.value;
  16457. emit("pick", old, false);
  16458. (0, vue.nextTick)(() => {
  16459. oldValue.value = old;
  16460. });
  16461. };
  16462. const showSeconds = (0, vue.computed)(() => {
  16463. return props.format.includes("ss");
  16464. });
  16465. const amPmMode = (0, vue.computed)(() => {
  16466. if (props.format.includes("A")) return "A";
  16467. if (props.format.includes("a")) return "a";
  16468. return "";
  16469. });
  16470. const handleConfirm = (visible = false) => {
  16471. emit("pick", [startTime.value, endTime.value], visible);
  16472. };
  16473. const handleMinChange = (date) => {
  16474. handleChange(date.millisecond(0), endTime.value);
  16475. };
  16476. const handleMaxChange = (date) => {
  16477. handleChange(startTime.value, date.millisecond(0));
  16478. };
  16479. const isValidValue = (_date) => {
  16480. const parsedDate = _date.map((_) => (0, import_dayjs_min.default)(_).locale(lang.value));
  16481. const result = getRangeAvailableTime(parsedDate);
  16482. return parsedDate[0].isSame(result[0]) && parsedDate[1].isSame(result[1]);
  16483. };
  16484. const handleChange = (start, end) => {
  16485. if (!props.visible) return;
  16486. emit("pick", [start, end], true);
  16487. };
  16488. const btnConfirmDisabled = (0, vue.computed)(() => {
  16489. return startTime.value > endTime.value;
  16490. });
  16491. const selectionRange = (0, vue.ref)([0, 2]);
  16492. const setMinSelectionRange = (start, end) => {
  16493. emit("select-range", start, end, "min");
  16494. selectionRange.value = [start, end];
  16495. };
  16496. const offset = (0, vue.computed)(() => showSeconds.value ? 11 : 8);
  16497. const setMaxSelectionRange = (start, end) => {
  16498. emit("select-range", start, end, "max");
  16499. const _offset = (0, vue.unref)(offset);
  16500. selectionRange.value = [start + _offset, end + _offset];
  16501. };
  16502. const changeSelectionRange = (step) => {
  16503. const list = showSeconds.value ? [
  16504. 0,
  16505. 3,
  16506. 6,
  16507. 11,
  16508. 14,
  16509. 17
  16510. ] : [
  16511. 0,
  16512. 3,
  16513. 8,
  16514. 11
  16515. ];
  16516. const mapping = ["hours", "minutes"].concat(showSeconds.value ? ["seconds"] : []);
  16517. const next = (list.indexOf(selectionRange.value[0]) + step + list.length) % list.length;
  16518. const half = list.length / 2;
  16519. if (next < half) timePickerOptions["start_emitSelectRange"](mapping[next]);
  16520. else timePickerOptions["end_emitSelectRange"](mapping[next - half]);
  16521. };
  16522. const handleKeydown = (event) => {
  16523. const code = getEventCode(event);
  16524. const { left, right, up, down } = EVENT_CODE;
  16525. if ([left, right].includes(code)) {
  16526. changeSelectionRange(code === left ? -1 : 1);
  16527. event.preventDefault();
  16528. return;
  16529. }
  16530. if ([up, down].includes(code)) {
  16531. const step = code === up ? -1 : 1;
  16532. timePickerOptions[`${selectionRange.value[0] < offset.value ? "start" : "end"}_scrollDown`](step);
  16533. event.preventDefault();
  16534. return;
  16535. }
  16536. };
  16537. const disabledHours_ = (role, compare) => {
  16538. const defaultDisable = disabledHours ? disabledHours(role) : [];
  16539. const isStart = role === "start";
  16540. const compareHour = (compare || (isStart ? endTime.value : startTime.value)).hour();
  16541. return union(defaultDisable, isStart ? makeSelectRange(compareHour + 1, 23) : makeSelectRange(0, compareHour - 1));
  16542. };
  16543. const disabledMinutes_ = (hour, role, compare) => {
  16544. const defaultDisable = disabledMinutes ? disabledMinutes(hour, role) : [];
  16545. const isStart = role === "start";
  16546. const compareDate = compare || (isStart ? endTime.value : startTime.value);
  16547. if (hour !== compareDate.hour()) return defaultDisable;
  16548. const compareMinute = compareDate.minute();
  16549. return union(defaultDisable, isStart ? makeSelectRange(compareMinute + 1, 59) : makeSelectRange(0, compareMinute - 1));
  16550. };
  16551. const disabledSeconds_ = (hour, minute, role, compare) => {
  16552. const defaultDisable = disabledSeconds ? disabledSeconds(hour, minute, role) : [];
  16553. const isStart = role === "start";
  16554. const compareDate = compare || (isStart ? endTime.value : startTime.value);
  16555. const compareHour = compareDate.hour();
  16556. const compareMinute = compareDate.minute();
  16557. if (hour !== compareHour || minute !== compareMinute) return defaultDisable;
  16558. const compareSecond = compareDate.second();
  16559. return union(defaultDisable, isStart ? makeSelectRange(compareSecond + 1, 59) : makeSelectRange(0, compareSecond - 1));
  16560. };
  16561. const getRangeAvailableTime = ([start, end]) => {
  16562. return [getAvailableTime(start, "start", true, end), getAvailableTime(end, "end", false, start)];
  16563. };
  16564. const { getAvailableHours, getAvailableMinutes, getAvailableSeconds } = buildAvailableTimeSlotGetter(disabledHours_, disabledMinutes_, disabledSeconds_);
  16565. const { timePickerOptions, getAvailableTime, onSetOption } = useTimePanel({
  16566. getAvailableHours,
  16567. getAvailableMinutes,
  16568. getAvailableSeconds
  16569. });
  16570. const parseUserInput = (days) => {
  16571. if (!days) return null;
  16572. if (isArray$1(days)) return days.map((d) => (0, import_dayjs_min.default)(d, props.format).locale(lang.value));
  16573. return (0, import_dayjs_min.default)(days, props.format).locale(lang.value);
  16574. };
  16575. const getDefaultValue = () => {
  16576. if (isArray$1(defaultValue)) return defaultValue.map((d) => (0, import_dayjs_min.default)(d).locale(lang.value));
  16577. const defaultDay = (0, import_dayjs_min.default)(defaultValue).locale(lang.value);
  16578. return [defaultDay, defaultDay.add(60, "m")];
  16579. };
  16580. emit("set-picker-option", ["parseUserInput", parseUserInput]);
  16581. emit("set-picker-option", ["isValidValue", isValidValue]);
  16582. emit("set-picker-option", ["handleKeydownInput", handleKeydown]);
  16583. emit("set-picker-option", ["getDefaultValue", getDefaultValue]);
  16584. emit("set-picker-option", ["getRangeAvailableTime", getRangeAvailableTime]);
  16585. emit("set-picker-option", ["handleCancel", handleCancel]);
  16586. return (_ctx, _cache) => {
  16587. return _ctx.actualVisible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  16588. key: 0,
  16589. class: (0, vue.normalizeClass)([(0, vue.unref)(nsTime).b("range-picker"), (0, vue.unref)(nsPicker).b("panel")])
  16590. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "content")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "cell")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "header")) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.startTime")), 3), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(startContainerKls.value) }, [(0, vue.createVNode)(basic_time_spinner_default, {
  16591. ref: "minSpinner",
  16592. role: "start",
  16593. "show-seconds": showSeconds.value,
  16594. "am-pm-mode": amPmMode.value,
  16595. "arrow-control": (0, vue.unref)(arrowControl),
  16596. "spinner-date": startTime.value,
  16597. "disabled-hours": disabledHours_,
  16598. "disabled-minutes": disabledMinutes_,
  16599. "disabled-seconds": disabledSeconds_,
  16600. onChange: handleMinChange,
  16601. onSetOption: (0, vue.unref)(onSetOption),
  16602. onSelectRange: setMinSelectionRange
  16603. }, null, 8, [
  16604. "show-seconds",
  16605. "am-pm-mode",
  16606. "arrow-control",
  16607. "spinner-date",
  16608. "onSetOption"
  16609. ])], 2)], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "cell")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("range-picker", "header")) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.endTime")), 3), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(endContainerKls.value) }, [(0, vue.createVNode)(basic_time_spinner_default, {
  16610. ref: "maxSpinner",
  16611. role: "end",
  16612. "show-seconds": showSeconds.value,
  16613. "am-pm-mode": amPmMode.value,
  16614. "arrow-control": (0, vue.unref)(arrowControl),
  16615. "spinner-date": endTime.value,
  16616. "disabled-hours": disabledHours_,
  16617. "disabled-minutes": disabledMinutes_,
  16618. "disabled-seconds": disabledSeconds_,
  16619. onChange: handleMaxChange,
  16620. onSetOption: (0, vue.unref)(onSetOption),
  16621. onSelectRange: setMaxSelectionRange
  16622. }, null, 8, [
  16623. "show-seconds",
  16624. "am-pm-mode",
  16625. "arrow-control",
  16626. "spinner-date",
  16627. "onSetOption"
  16628. ])], 2)], 2)], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsTime).be("panel", "footer")) }, [(0, vue.createElementVNode)("button", {
  16629. type: "button",
  16630. class: (0, vue.normalizeClass)([(0, vue.unref)(nsTime).be("panel", "btn"), "cancel"]),
  16631. onClick: _cache[0] || (_cache[0] = ($event) => handleCancel())
  16632. }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.cancel")), 3), (0, vue.createElementVNode)("button", {
  16633. type: "button",
  16634. class: (0, vue.normalizeClass)([(0, vue.unref)(nsTime).be("panel", "btn"), "confirm"]),
  16635. disabled: btnConfirmDisabled.value,
  16636. onClick: _cache[1] || (_cache[1] = ($event) => handleConfirm())
  16637. }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.confirm")), 11, _hoisted_1$70)], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true);
  16638. };
  16639. }
  16640. });
  16641. //#endregion
  16642. //#region ../../packages/components/time-picker/src/time-picker-com/panel-time-range.vue
  16643. var panel_time_range_default = panel_time_range_vue_vue_type_script_setup_true_lang_default;
  16644. //#endregion
  16645. //#region ../../packages/components/time-picker/src/time-picker.tsx
  16646. import_dayjs_min.default.extend(import_customParseFormat.default);
  16647. var time_picker_default = /* @__PURE__ */ (0, vue.defineComponent)({
  16648. name: "ElTimePicker",
  16649. install: null,
  16650. props: {
  16651. ...timePickerDefaultProps,
  16652. isRange: Boolean
  16653. },
  16654. emits: [UPDATE_MODEL_EVENT],
  16655. setup(props, ctx) {
  16656. const commonPicker = (0, vue.ref)();
  16657. const [type, Panel] = props.isRange ? ["timerange", panel_time_range_default] : ["time", panel_time_pick_default];
  16658. const modelUpdater = (value) => ctx.emit(UPDATE_MODEL_EVENT, value);
  16659. (0, vue.provide)(PICKER_POPPER_OPTIONS_INJECTION_KEY, props.popperOptions);
  16660. ctx.expose({
  16661. focus: () => {
  16662. commonPicker.value?.focus();
  16663. },
  16664. blur: () => {
  16665. commonPicker.value?.blur();
  16666. },
  16667. handleOpen: () => {
  16668. commonPicker.value?.handleOpen();
  16669. },
  16670. handleClose: () => {
  16671. commonPicker.value?.handleClose();
  16672. }
  16673. });
  16674. return () => {
  16675. return (0, vue.createVNode)(picker_default, (0, vue.mergeProps)(props, {
  16676. "ref": commonPicker,
  16677. "type": type,
  16678. "format": props.format ?? "HH:mm:ss",
  16679. "onUpdate:modelValue": modelUpdater
  16680. }), { default: (props) => (0, vue.createVNode)(Panel, props, null) });
  16681. };
  16682. }
  16683. });
  16684. //#endregion
  16685. //#region ../../packages/components/time-picker/index.ts
  16686. const ElTimePicker = withInstall(time_picker_default);
  16687. //#endregion
  16688. //#region ../../packages/components/calendar/src/date-table.ts
  16689. const getPrevMonthLastDays = (date, count) => {
  16690. const lastDay = date.subtract(1, "month").endOf("month").date();
  16691. return rangeArr(count).map((_, index) => lastDay - (count - index - 1));
  16692. };
  16693. const getMonthDays = (date) => {
  16694. return rangeArr(date.daysInMonth()).map((_, index) => index + 1);
  16695. };
  16696. const toNestedArr = (days) => rangeArr(days.length / 7).map((index) => {
  16697. const start = index * 7;
  16698. return days.slice(start, start + 7);
  16699. });
  16700. const dateTableProps = buildProps({
  16701. selectedDay: { type: definePropType(Object) },
  16702. range: { type: definePropType(Array) },
  16703. date: {
  16704. type: definePropType(Object),
  16705. required: true
  16706. },
  16707. hideHeader: { type: Boolean }
  16708. });
  16709. const dateTableEmits = { pick: (value) => isObject$1(value) };
  16710. //#endregion
  16711. //#region ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/localeData.js
  16712. var require_localeData = /* @__PURE__ */ __commonJSMin(((exports, module) => {
  16713. (function(n, e) {
  16714. "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (n = "undefined" != typeof globalThis ? globalThis : n || self).dayjs_plugin_localeData = e();
  16715. })(exports, (function() {
  16716. "use strict";
  16717. return function(n, e, t) {
  16718. var r = e.prototype, o = function(n) {
  16719. return n && (n.indexOf ? n : n.s);
  16720. }, u = function(n, e, t, r, u) {
  16721. var i = n.name ? n : n.$locale(), a = o(i[e]), s = o(i[t]), f = a || s.map((function(n) {
  16722. return n.slice(0, r);
  16723. }));
  16724. if (!u) return f;
  16725. var d = i.weekStart;
  16726. return f.map((function(n, e) {
  16727. return f[(e + (d || 0)) % 7];
  16728. }));
  16729. }, i = function() {
  16730. return t.Ls[t.locale()];
  16731. }, a = function(n, e) {
  16732. return n.formats[e] || function(n) {
  16733. return n.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (function(n, e, t) {
  16734. return e || t.slice(1);
  16735. }));
  16736. }(n.formats[e.toUpperCase()]);
  16737. }, s = function() {
  16738. var n = this;
  16739. return {
  16740. months: function(e) {
  16741. return e ? e.format("MMMM") : u(n, "months");
  16742. },
  16743. monthsShort: function(e) {
  16744. return e ? e.format("MMM") : u(n, "monthsShort", "months", 3);
  16745. },
  16746. firstDayOfWeek: function() {
  16747. return n.$locale().weekStart || 0;
  16748. },
  16749. weekdays: function(e) {
  16750. return e ? e.format("dddd") : u(n, "weekdays");
  16751. },
  16752. weekdaysMin: function(e) {
  16753. return e ? e.format("dd") : u(n, "weekdaysMin", "weekdays", 2);
  16754. },
  16755. weekdaysShort: function(e) {
  16756. return e ? e.format("ddd") : u(n, "weekdaysShort", "weekdays", 3);
  16757. },
  16758. longDateFormat: function(e) {
  16759. return a(n.$locale(), e);
  16760. },
  16761. meridiem: this.$locale().meridiem,
  16762. ordinal: this.$locale().ordinal
  16763. };
  16764. };
  16765. r.localeData = function() {
  16766. return s.bind(this)();
  16767. }, t.localeData = function() {
  16768. var n = i();
  16769. return {
  16770. firstDayOfWeek: function() {
  16771. return n.weekStart || 0;
  16772. },
  16773. weekdays: function() {
  16774. return t.weekdays();
  16775. },
  16776. weekdaysShort: function() {
  16777. return t.weekdaysShort();
  16778. },
  16779. weekdaysMin: function() {
  16780. return t.weekdaysMin();
  16781. },
  16782. months: function() {
  16783. return t.months();
  16784. },
  16785. monthsShort: function() {
  16786. return t.monthsShort();
  16787. },
  16788. longDateFormat: function(e) {
  16789. return a(n, e);
  16790. },
  16791. meridiem: n.meridiem,
  16792. ordinal: n.ordinal
  16793. };
  16794. }, t.months = function() {
  16795. return u(i(), "months");
  16796. }, t.monthsShort = function() {
  16797. return u(i(), "monthsShort", "months", 3);
  16798. }, t.weekdays = function(n) {
  16799. return u(i(), "weekdays", null, null, n);
  16800. }, t.weekdaysShort = function(n) {
  16801. return u(i(), "weekdaysShort", "weekdays", 3, n);
  16802. }, t.weekdaysMin = function(n) {
  16803. return u(i(), "weekdaysMin", "weekdays", 2, n);
  16804. };
  16805. };
  16806. }));
  16807. }));
  16808. //#endregion
  16809. //#region ../../packages/components/calendar/src/use-date-table.ts
  16810. var import_localeData = /* @__PURE__ */ __toESM(require_localeData());
  16811. const useDateTable = (props, emit) => {
  16812. import_dayjs_min.default.extend(import_localeData.default);
  16813. const firstDayOfWeek = import_dayjs_min.default.localeData().firstDayOfWeek();
  16814. const { t, lang } = useLocale();
  16815. const now = (0, import_dayjs_min.default)().locale(lang.value);
  16816. const isInRange = (0, vue.computed)(() => !!props.range && !!props.range.length);
  16817. const rows = (0, vue.computed)(() => {
  16818. let days = [];
  16819. if (isInRange.value) {
  16820. const [start, end] = props.range;
  16821. const currentMonthRange = rangeArr(end.date() - start.date() + 1).map((index) => ({
  16822. text: start.date() + index,
  16823. type: "current"
  16824. }));
  16825. let remaining = currentMonthRange.length % 7;
  16826. remaining = remaining === 0 ? 0 : 7 - remaining;
  16827. const nextMonthRange = rangeArr(remaining).map((_, index) => ({
  16828. text: index + 1,
  16829. type: "next"
  16830. }));
  16831. days = currentMonthRange.concat(nextMonthRange);
  16832. } else {
  16833. const firstDay = props.date.startOf("month").day();
  16834. const prevMonthDays = getPrevMonthLastDays(props.date, (firstDay - firstDayOfWeek + 7) % 7).map((day) => ({
  16835. text: day,
  16836. type: "prev"
  16837. }));
  16838. const currentMonthDays = getMonthDays(props.date).map((day) => ({
  16839. text: day,
  16840. type: "current"
  16841. }));
  16842. days = [...prevMonthDays, ...currentMonthDays];
  16843. const nextMonthDays = rangeArr(7 - (days.length % 7 || 7)).map((_, index) => ({
  16844. text: index + 1,
  16845. type: "next"
  16846. }));
  16847. days = days.concat(nextMonthDays);
  16848. }
  16849. return toNestedArr(days);
  16850. });
  16851. const weekDays = (0, vue.computed)(() => {
  16852. const start = firstDayOfWeek;
  16853. if (start === 0) return WEEK_DAYS.map((_) => t(`el.datepicker.weeks.${_}`));
  16854. else return WEEK_DAYS.slice(start).concat(WEEK_DAYS.slice(0, start)).map((_) => t(`el.datepicker.weeks.${_}`));
  16855. });
  16856. const getFormattedDate = (day, type) => {
  16857. switch (type) {
  16858. case "prev": return props.date.startOf("month").subtract(1, "month").date(day);
  16859. case "next": return props.date.startOf("month").add(1, "month").date(day);
  16860. case "current": return props.date.date(day);
  16861. }
  16862. };
  16863. const handlePickDay = ({ text, type }) => {
  16864. emit("pick", getFormattedDate(text, type));
  16865. };
  16866. const getSlotData = ({ text, type }) => {
  16867. const day = getFormattedDate(text, type);
  16868. return {
  16869. isSelected: day.isSame(props.selectedDay),
  16870. type: `${type}-month`,
  16871. day: day.format(DEFAULT_FORMATS_DATE),
  16872. date: day.toDate()
  16873. };
  16874. };
  16875. return {
  16876. now,
  16877. isInRange,
  16878. rows,
  16879. weekDays,
  16880. getFormattedDate,
  16881. handlePickDay,
  16882. getSlotData
  16883. };
  16884. };
  16885. //#endregion
  16886. //#region ../../packages/components/calendar/src/date-table.vue?vue&type=script&setup=true&lang.ts
  16887. const _hoisted_1$69 = { key: 0 };
  16888. const _hoisted_2$39 = ["onClick"];
  16889. var date_table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  16890. name: "DateTable",
  16891. __name: "date-table",
  16892. props: dateTableProps,
  16893. emits: dateTableEmits,
  16894. setup(__props, { expose: __expose, emit: __emit }) {
  16895. const props = __props;
  16896. const { isInRange, now, rows, weekDays, getFormattedDate, handlePickDay, getSlotData } = useDateTable(props, __emit);
  16897. const nsTable = useNamespace("calendar-table");
  16898. const nsDay = useNamespace("calendar-day");
  16899. const getCellClass = ({ text, type }) => {
  16900. const classes = [type];
  16901. if (type === "current") {
  16902. const date = getFormattedDate(text, type);
  16903. if (date.isSame(props.selectedDay, "day")) classes.push(nsDay.is("selected"));
  16904. if (date.isSame(now, "day")) classes.push(nsDay.is("today"));
  16905. }
  16906. return classes;
  16907. };
  16908. __expose({ getFormattedDate });
  16909. return (_ctx, _cache) => {
  16910. return (0, vue.openBlock)(), (0, vue.createElementBlock)("table", {
  16911. class: (0, vue.normalizeClass)([(0, vue.unref)(nsTable).b(), (0, vue.unref)(nsTable).is("range", (0, vue.unref)(isInRange))]),
  16912. cellspacing: "0",
  16913. cellpadding: "0"
  16914. }, [!__props.hideHeader ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("thead", _hoisted_1$69, [(0, vue.createElementVNode)("tr", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(weekDays), (day) => {
  16915. return (0, vue.openBlock)(), (0, vue.createElementBlock)("th", {
  16916. key: day,
  16917. scope: "col"
  16918. }, (0, vue.toDisplayString)(day), 1);
  16919. }), 128))])])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("tbody", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(rows), (row, index) => {
  16920. return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", {
  16921. key: index,
  16922. class: (0, vue.normalizeClass)({
  16923. [(0, vue.unref)(nsTable).e("row")]: true,
  16924. [(0, vue.unref)(nsTable).em("row", "hide-border")]: index === 0 && __props.hideHeader
  16925. })
  16926. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(row, (cell, key) => {
  16927. return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
  16928. key,
  16929. class: (0, vue.normalizeClass)(getCellClass(cell)),
  16930. onClick: ($event) => (0, vue.unref)(handlePickDay)(cell)
  16931. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsDay).b()) }, [(0, vue.renderSlot)(_ctx.$slots, "date-cell", { data: (0, vue.unref)(getSlotData)(cell) }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(cell.text), 1)])], 2)], 10, _hoisted_2$39);
  16932. }), 128))], 2);
  16933. }), 128))])], 2);
  16934. };
  16935. }
  16936. });
  16937. //#endregion
  16938. //#region ../../packages/components/calendar/src/date-table.vue
  16939. var date_table_default = date_table_vue_vue_type_script_setup_true_lang_default;
  16940. //#endregion
  16941. //#region ../../packages/components/calendar/src/use-calendar.ts
  16942. const adjacentMonth = (start, end) => {
  16943. const firstMonthLastDay = start.endOf("month");
  16944. const lastMonthFirstDay = end.startOf("month");
  16945. const lastMonthStartDay = firstMonthLastDay.isSame(lastMonthFirstDay, "week") ? lastMonthFirstDay.add(1, "week") : lastMonthFirstDay;
  16946. return [[start, firstMonthLastDay], [lastMonthStartDay.startOf("week"), end]];
  16947. };
  16948. const threeConsecutiveMonth = (start, end) => {
  16949. const firstMonthLastDay = start.endOf("month");
  16950. const secondMonthFirstDay = start.add(1, "month").startOf("month");
  16951. const secondMonthStartDay = firstMonthLastDay.isSame(secondMonthFirstDay, "week") ? secondMonthFirstDay.add(1, "week") : secondMonthFirstDay;
  16952. const secondMonthLastDay = secondMonthStartDay.endOf("month");
  16953. const lastMonthFirstDay = end.startOf("month");
  16954. const lastMonthStartDay = secondMonthLastDay.isSame(lastMonthFirstDay, "week") ? lastMonthFirstDay.add(1, "week") : lastMonthFirstDay;
  16955. return [
  16956. [start, firstMonthLastDay],
  16957. [secondMonthStartDay.startOf("week"), secondMonthLastDay],
  16958. [lastMonthStartDay.startOf("week"), end]
  16959. ];
  16960. };
  16961. const useCalendar = (props, emit, componentName) => {
  16962. const { lang } = useLocale();
  16963. const selectedDay = (0, vue.ref)();
  16964. const now = (0, import_dayjs_min.default)().locale(lang.value);
  16965. const realSelectedDay = (0, vue.computed)({
  16966. get() {
  16967. if (!props.modelValue) return selectedDay.value;
  16968. return date.value;
  16969. },
  16970. set(val) {
  16971. if (!val) return;
  16972. selectedDay.value = val;
  16973. const result = val.toDate();
  16974. emit(INPUT_EVENT, result);
  16975. emit(UPDATE_MODEL_EVENT, result);
  16976. }
  16977. });
  16978. const validatedRange = (0, vue.computed)(() => {
  16979. if (!props.range || !isArray$1(props.range) || props.range.length !== 2 || props.range.some((item) => !isDate(item))) return [];
  16980. const [startDayjs, endDayjs] = props.range.map((_) => (0, import_dayjs_min.default)(_).locale(lang.value));
  16981. if (startDayjs.isAfter(endDayjs)) {
  16982. /* @__PURE__ */ debugWarn(componentName, "end time should be greater than start time");
  16983. return [];
  16984. }
  16985. if (startDayjs.isSame(endDayjs, "month")) return calculateValidatedDateRange(startDayjs, endDayjs);
  16986. else {
  16987. if (!startDayjs.add(1, "month").isSame(endDayjs, "month")) {
  16988. /* @__PURE__ */ debugWarn(componentName, "start time and end time interval must not exceed two months");
  16989. return [];
  16990. }
  16991. return calculateValidatedDateRange(startDayjs, endDayjs);
  16992. }
  16993. });
  16994. const date = (0, vue.computed)(() => {
  16995. if (!props.modelValue) return realSelectedDay.value || (validatedRange.value.length ? validatedRange.value[0][0] : now);
  16996. else return (0, import_dayjs_min.default)(props.modelValue).locale(lang.value);
  16997. });
  16998. const prevMonthDayjs = (0, vue.computed)(() => date.value.subtract(1, "month").date(1));
  16999. const nextMonthDayjs = (0, vue.computed)(() => date.value.add(1, "month").date(1));
  17000. const prevYearDayjs = (0, vue.computed)(() => date.value.subtract(1, "year").date(1));
  17001. const nextYearDayjs = (0, vue.computed)(() => date.value.add(1, "year").date(1));
  17002. const calculateValidatedDateRange = (startDayjs, endDayjs) => {
  17003. const firstDay = startDayjs.startOf("week");
  17004. const lastDay = endDayjs.endOf("week");
  17005. const firstMonth = firstDay.get("month");
  17006. const lastMonth = lastDay.get("month");
  17007. if (firstMonth === lastMonth) return [[firstDay, lastDay]];
  17008. else if ((firstMonth + 1) % 12 === lastMonth) return adjacentMonth(firstDay, lastDay);
  17009. else if (firstMonth + 2 === lastMonth || (firstMonth + 1) % 11 === lastMonth) return threeConsecutiveMonth(firstDay, lastDay);
  17010. else {
  17011. /* @__PURE__ */ debugWarn(componentName, "start time and end time interval must not exceed two months");
  17012. return [];
  17013. }
  17014. };
  17015. const pickDay = (day) => {
  17016. realSelectedDay.value = day;
  17017. };
  17018. const selectDate = (type) => {
  17019. const day = {
  17020. "prev-month": prevMonthDayjs.value,
  17021. "next-month": nextMonthDayjs.value,
  17022. "prev-year": prevYearDayjs.value,
  17023. "next-year": nextYearDayjs.value,
  17024. today: now
  17025. }[type];
  17026. if (!day.isSame(date.value, "day")) pickDay(day);
  17027. };
  17028. const handleDateChange = (date) => {
  17029. if (date === "today") selectDate("today");
  17030. else pickDay(date);
  17031. };
  17032. return {
  17033. calculateValidatedDateRange,
  17034. date,
  17035. realSelectedDay,
  17036. pickDay,
  17037. selectDate,
  17038. validatedRange,
  17039. handleDateChange
  17040. };
  17041. };
  17042. //#endregion
  17043. //#region ../../packages/components/calendar/src/select-controller.ts
  17044. const selectControllerProps = buildProps({
  17045. date: {
  17046. type: definePropType(Object),
  17047. required: true
  17048. },
  17049. formatter: { type: definePropType(Function) }
  17050. });
  17051. const selectControllerEmits = { "date-change": (date) => isObject$1(date) || isString(date) };
  17052. //#endregion
  17053. //#region ../../packages/components/tag/src/tag.ts
  17054. const tagProps = buildProps({
  17055. type: {
  17056. type: String,
  17057. values: [
  17058. "primary",
  17059. "success",
  17060. "info",
  17061. "warning",
  17062. "danger"
  17063. ],
  17064. default: "primary"
  17065. },
  17066. closable: Boolean,
  17067. disableTransitions: Boolean,
  17068. hit: Boolean,
  17069. color: String,
  17070. size: {
  17071. type: String,
  17072. values: componentSizes
  17073. },
  17074. effect: {
  17075. type: String,
  17076. values: [
  17077. "dark",
  17078. "light",
  17079. "plain"
  17080. ],
  17081. default: "light"
  17082. },
  17083. round: Boolean
  17084. });
  17085. const tagEmits = {
  17086. close: (evt) => evt instanceof MouseEvent,
  17087. click: (evt) => evt instanceof MouseEvent
  17088. };
  17089. //#endregion
  17090. //#region ../../packages/components/tag/src/tag.vue?vue&type=script&setup=true&lang.ts
  17091. const _hoisted_1$68 = ["aria-label"];
  17092. const _hoisted_2$38 = ["aria-label"];
  17093. var tag_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  17094. name: "ElTag",
  17095. __name: "tag",
  17096. props: tagProps,
  17097. emits: tagEmits,
  17098. setup(__props, { emit: __emit }) {
  17099. const props = __props;
  17100. const emit = __emit;
  17101. const tagSize = useFormSize();
  17102. const { t } = useLocale();
  17103. const ns = useNamespace("tag");
  17104. const containerKls = (0, vue.computed)(() => {
  17105. const { type, hit, effect, closable, round } = props;
  17106. return [
  17107. ns.b(),
  17108. ns.is("closable", closable),
  17109. ns.m(type || "primary"),
  17110. ns.m(tagSize.value),
  17111. ns.m(effect),
  17112. ns.is("hit", hit),
  17113. ns.is("round", round)
  17114. ];
  17115. });
  17116. const handleClose = (event) => {
  17117. emit("close", event);
  17118. };
  17119. const handleClick = (event) => {
  17120. emit("click", event);
  17121. };
  17122. const handleVNodeMounted = (vnode) => {
  17123. if (vnode?.component?.subTree?.component?.bum) vnode.component.subTree.component.bum = null;
  17124. };
  17125. return (_ctx, _cache) => {
  17126. return __props.disableTransitions ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  17127. key: 0,
  17128. class: (0, vue.normalizeClass)(containerKls.value),
  17129. style: (0, vue.normalizeStyle)({ backgroundColor: __props.color }),
  17130. onClick: handleClick
  17131. }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2), __props.closable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  17132. key: 0,
  17133. "aria-label": (0, vue.unref)(t)("el.tag.close"),
  17134. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")),
  17135. type: "button",
  17136. onClick: (0, vue.withModifiers)(handleClose, ["stop"])
  17137. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  17138. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
  17139. _: 1
  17140. })], 10, _hoisted_1$68)) : (0, vue.createCommentVNode)("v-if", true)], 6)) : ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
  17141. key: 1,
  17142. name: `${(0, vue.unref)(ns).namespace.value}-zoom-in-center`,
  17143. appear: "",
  17144. onVnodeMounted: handleVNodeMounted
  17145. }, {
  17146. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", {
  17147. class: (0, vue.normalizeClass)(containerKls.value),
  17148. style: (0, vue.normalizeStyle)({ backgroundColor: __props.color }),
  17149. onClick: handleClick
  17150. }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2), __props.closable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  17151. key: 0,
  17152. "aria-label": (0, vue.unref)(t)("el.tag.close"),
  17153. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")),
  17154. type: "button",
  17155. onClick: (0, vue.withModifiers)(handleClose, ["stop"])
  17156. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  17157. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
  17158. _: 1
  17159. })], 10, _hoisted_2$38)) : (0, vue.createCommentVNode)("v-if", true)], 6)]),
  17160. _: 3
  17161. }, 8, ["name"]));
  17162. };
  17163. }
  17164. });
  17165. //#endregion
  17166. //#region ../../packages/components/tag/src/tag.vue
  17167. var tag_default = tag_vue_vue_type_script_setup_true_lang_default;
  17168. //#endregion
  17169. //#region ../../packages/components/tag/index.ts
  17170. const ElTag = withInstall(tag_default);
  17171. //#endregion
  17172. //#region ../../packages/components/select-v2/src/useProps.ts
  17173. const defaultProps$2 = {
  17174. label: "label",
  17175. value: "value",
  17176. disabled: "disabled",
  17177. options: "options"
  17178. };
  17179. function useProps(props) {
  17180. const aliasProps = (0, vue.ref)({
  17181. ...defaultProps$2,
  17182. ...props.props
  17183. });
  17184. let cache = { ...props.props };
  17185. (0, vue.watch)(() => props.props, (val) => {
  17186. if (!isEqual$1(val, cache)) {
  17187. aliasProps.value = {
  17188. ...defaultProps$2,
  17189. ...val
  17190. };
  17191. cache = { ...val };
  17192. }
  17193. }, { deep: true });
  17194. const getLabel = (option) => get(option, aliasProps.value.label);
  17195. const getValue = (option) => get(option, aliasProps.value.value);
  17196. const getDisabled = (option) => get(option, aliasProps.value.disabled);
  17197. const getOptions = (option) => get(option, aliasProps.value.options);
  17198. return {
  17199. aliasProps,
  17200. getLabel,
  17201. getValue,
  17202. getDisabled,
  17203. getOptions
  17204. };
  17205. }
  17206. //#endregion
  17207. //#region ../../packages/components/select/src/token.ts
  17208. const selectGroupKey = Symbol("ElSelectGroup");
  17209. const selectKey = Symbol("ElSelect");
  17210. //#endregion
  17211. //#region ../../packages/components/select/src/option.ts
  17212. const COMPONENT_NAME$14 = "ElOption";
  17213. const optionProps = buildProps({
  17214. value: {
  17215. type: [
  17216. String,
  17217. Number,
  17218. Boolean,
  17219. Object
  17220. ],
  17221. required: true
  17222. },
  17223. label: { type: [String, Number] },
  17224. created: Boolean,
  17225. disabled: Boolean
  17226. });
  17227. //#endregion
  17228. //#region ../../packages/components/select/src/useOption.ts
  17229. function useOption$1(props, states) {
  17230. const select = (0, vue.inject)(selectKey);
  17231. if (!select) throwError(COMPONENT_NAME$14, "usage: <el-select><el-option /></el-select/>");
  17232. const selectGroup = (0, vue.inject)(selectGroupKey, { disabled: false });
  17233. const itemSelected = (0, vue.computed)(() => {
  17234. return contains(castArray$1(select.props.modelValue), props.value);
  17235. });
  17236. const limitReached = (0, vue.computed)(() => {
  17237. if (select.props.multiple) {
  17238. const modelValue = castArray$1(select.props.modelValue ?? []);
  17239. return !itemSelected.value && modelValue.length >= select.props.multipleLimit && select.props.multipleLimit > 0;
  17240. } else return false;
  17241. });
  17242. const currentLabel = (0, vue.computed)(() => {
  17243. return props.label ?? (isObject$1(props.value) ? "" : props.value);
  17244. });
  17245. const currentValue = (0, vue.computed)(() => {
  17246. return props.value || props.label || "";
  17247. });
  17248. const isDisabled = (0, vue.computed)(() => {
  17249. return props.disabled || states.groupDisabled || limitReached.value;
  17250. });
  17251. const instance = (0, vue.getCurrentInstance)();
  17252. const contains = (arr = [], target) => {
  17253. if (!isObject$1(props.value)) return arr && arr.includes(target);
  17254. else {
  17255. const valueKey = select.props.valueKey;
  17256. return arr && arr.some((item) => {
  17257. return (0, vue.toRaw)(get(item, valueKey)) === get(target, valueKey);
  17258. });
  17259. }
  17260. };
  17261. const hoverItem = () => {
  17262. if (!isDisabled.value) select.states.hoveringIndex = select.optionsArray.indexOf(instance.proxy);
  17263. };
  17264. const updateOption = (query) => {
  17265. states.visible = new RegExp(escapeStringRegexp(query), "i").test(String(currentLabel.value)) || props.created;
  17266. };
  17267. (0, vue.watch)(() => currentLabel.value, () => {
  17268. if (!props.created && !select.props.remote) select.setSelected();
  17269. });
  17270. (0, vue.watch)(() => props.value, (val, oldVal) => {
  17271. const { remote, valueKey } = select.props;
  17272. if (remote ? val !== oldVal : !isEqual$1(val, oldVal)) {
  17273. select.onOptionDestroy(oldVal, instance.proxy);
  17274. select.onOptionCreate(instance.proxy);
  17275. }
  17276. if (!props.created && !remote) {
  17277. if (valueKey && isObject$1(val) && isObject$1(oldVal) && val[valueKey] === oldVal[valueKey]) return;
  17278. select.setSelected();
  17279. }
  17280. });
  17281. (0, vue.watch)(() => selectGroup.disabled, () => {
  17282. states.groupDisabled = selectGroup.disabled;
  17283. }, { immediate: true });
  17284. return {
  17285. select,
  17286. currentLabel,
  17287. currentValue,
  17288. itemSelected,
  17289. isDisabled,
  17290. hoverItem,
  17291. updateOption
  17292. };
  17293. }
  17294. //#endregion
  17295. //#region ../../packages/components/select/src/option.vue?vue&type=script&lang.ts
  17296. var option_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  17297. name: COMPONENT_NAME$14,
  17298. componentName: COMPONENT_NAME$14,
  17299. props: optionProps,
  17300. setup(props) {
  17301. const ns = useNamespace("select");
  17302. const id = useId();
  17303. const containerKls = (0, vue.computed)(() => [
  17304. ns.be("dropdown", "item"),
  17305. ns.is("disabled", (0, vue.unref)(isDisabled)),
  17306. ns.is("selected", (0, vue.unref)(itemSelected)),
  17307. ns.is("hovering", (0, vue.unref)(hover))
  17308. ]);
  17309. const states = (0, vue.reactive)({
  17310. index: -1,
  17311. groupDisabled: false,
  17312. visible: true,
  17313. hover: false
  17314. });
  17315. const mouseMoveEventName = isIOS ? null : "mousemove";
  17316. const { currentLabel, itemSelected, isDisabled, select, hoverItem, updateOption } = useOption$1(props, states);
  17317. const { visible, hover } = (0, vue.toRefs)(states);
  17318. const vm = (0, vue.getCurrentInstance)().proxy;
  17319. select.onOptionCreate(vm);
  17320. (0, vue.onBeforeUnmount)(() => {
  17321. const key = vm.value;
  17322. (0, vue.nextTick)(() => {
  17323. const { selected: selectedOptions } = select.states;
  17324. const doesSelected = selectedOptions.some((item) => {
  17325. return item.value === vm.value;
  17326. });
  17327. if (select.states.cachedOptions.get(key) === vm && !doesSelected) select.states.cachedOptions.delete(key);
  17328. });
  17329. select.onOptionDestroy(key, vm);
  17330. });
  17331. function selectOptionClick() {
  17332. if (!isDisabled.value) select.handleOptionSelect(vm);
  17333. }
  17334. const handleMousedown = (event) => {
  17335. let target = event.target;
  17336. const currentTarget = event.currentTarget;
  17337. while (target && target !== currentTarget) {
  17338. if (isFocusable(target)) return;
  17339. target = target.parentElement;
  17340. }
  17341. event.preventDefault();
  17342. };
  17343. return {
  17344. ns,
  17345. id,
  17346. containerKls,
  17347. currentLabel,
  17348. itemSelected,
  17349. isDisabled,
  17350. select,
  17351. visible,
  17352. hover,
  17353. states,
  17354. mouseMoveEventName,
  17355. hoverItem,
  17356. handleMousedown,
  17357. updateOption,
  17358. selectOptionClick
  17359. };
  17360. }
  17361. });
  17362. //#endregion
  17363. //#region ../../packages/components/select/src/option.vue
  17364. const _hoisted_1$67 = [
  17365. "id",
  17366. "aria-disabled",
  17367. "aria-selected"
  17368. ];
  17369. function _sfc_render$19(_ctx, _cache, $props, $setup, $data, $options) {
  17370. return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("li", (0, vue.mergeProps)({
  17371. id: _ctx.id,
  17372. class: _ctx.containerKls,
  17373. role: "option",
  17374. "aria-disabled": _ctx.isDisabled || void 0,
  17375. "aria-selected": _ctx.itemSelected
  17376. }, { [(0, vue.toHandlerKey)(_ctx.mouseMoveEventName)]: _cache[0] || (_cache[0] = (...args) => _ctx.hoverItem && _ctx.hoverItem(...args)) }, {
  17377. onMousedown: _cache[1] || (_cache[1] = (...args) => _ctx.handleMousedown && _ctx.handleMousedown(...args)),
  17378. onClick: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.selectOptionClick && _ctx.selectOptionClick(...args), ["stop"]))
  17379. }), [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.currentLabel), 1)])], 16, _hoisted_1$67)), [[vue.vShow, _ctx.visible]]);
  17380. }
  17381. var option_default = /* @__PURE__ */ _plugin_vue_export_helper_default(option_vue_vue_type_script_lang_default, [["render", _sfc_render$19]]);
  17382. //#endregion
  17383. //#region ../../packages/components/select/src/select-dropdown.vue?vue&type=script&lang.ts
  17384. var select_dropdown_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  17385. name: "ElSelectDropdown",
  17386. componentName: "ElSelectDropdown",
  17387. setup() {
  17388. const select = (0, vue.inject)(selectKey);
  17389. const ns = useNamespace("select");
  17390. const popperClass = (0, vue.computed)(() => select.props.popperClass);
  17391. const isMultiple = (0, vue.computed)(() => select.props.multiple);
  17392. const isFitInputWidth = (0, vue.computed)(() => select.props.fitInputWidth);
  17393. const minWidth = (0, vue.ref)("");
  17394. function updateMinWidth() {
  17395. const offsetWidth = select.selectRef?.offsetWidth;
  17396. if (offsetWidth) minWidth.value = `${offsetWidth - 2}px`;
  17397. else minWidth.value = "";
  17398. }
  17399. (0, vue.onMounted)(() => {
  17400. updateMinWidth();
  17401. useResizeObserver(select.selectRef, updateMinWidth);
  17402. });
  17403. return {
  17404. ns,
  17405. minWidth,
  17406. popperClass,
  17407. isMultiple,
  17408. isFitInputWidth
  17409. };
  17410. }
  17411. });
  17412. //#endregion
  17413. //#region ../../packages/components/select/src/select-dropdown.vue
  17414. function _sfc_render$18(_ctx, _cache, $props, $setup, $data, $options) {
  17415. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  17416. class: (0, vue.normalizeClass)([
  17417. _ctx.ns.b("dropdown"),
  17418. _ctx.ns.is("multiple", _ctx.isMultiple),
  17419. _ctx.popperClass
  17420. ]),
  17421. style: (0, vue.normalizeStyle)({ [_ctx.isFitInputWidth ? "width" : "minWidth"]: _ctx.minWidth })
  17422. }, [
  17423. _ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  17424. key: 0,
  17425. class: (0, vue.normalizeClass)(_ctx.ns.be("dropdown", "header"))
  17426. }, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  17427. (0, vue.renderSlot)(_ctx.$slots, "default"),
  17428. _ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  17429. key: 1,
  17430. class: (0, vue.normalizeClass)(_ctx.ns.be("dropdown", "footer"))
  17431. }, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  17432. ], 6);
  17433. }
  17434. var select_dropdown_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(select_dropdown_vue_vue_type_script_lang_default, [["render", _sfc_render$18]]);
  17435. //#endregion
  17436. //#region ../../packages/components/select/src/useSelect.ts
  17437. const useSelect$2 = (props, emit) => {
  17438. const { t } = useLocale();
  17439. const slots = (0, vue.useSlots)();
  17440. const contentId = useId();
  17441. const nsSelect = useNamespace("select");
  17442. const nsInput = useNamespace("input");
  17443. const states = (0, vue.reactive)({
  17444. inputValue: "",
  17445. options: /* @__PURE__ */ new Map(),
  17446. cachedOptions: /* @__PURE__ */ new Map(),
  17447. optionValues: [],
  17448. selected: [],
  17449. selectionWidth: 0,
  17450. collapseItemWidth: 0,
  17451. selectedLabel: "",
  17452. hoveringIndex: -1,
  17453. previousQuery: null,
  17454. inputHovering: false,
  17455. menuVisibleOnFocus: false,
  17456. isBeforeHide: false
  17457. });
  17458. const selectRef = (0, vue.ref)();
  17459. const selectionRef = (0, vue.ref)();
  17460. const tooltipRef = (0, vue.ref)();
  17461. const tagTooltipRef = (0, vue.ref)();
  17462. const inputRef = (0, vue.ref)();
  17463. const prefixRef = (0, vue.ref)();
  17464. const suffixRef = (0, vue.ref)();
  17465. const menuRef = (0, vue.ref)();
  17466. const tagMenuRef = (0, vue.ref)();
  17467. const collapseItemRef = (0, vue.ref)();
  17468. const scrollbarRef = (0, vue.ref)();
  17469. const expanded = (0, vue.ref)(false);
  17470. const hoverOption = (0, vue.ref)();
  17471. const debouncing = (0, vue.ref)(false);
  17472. const { form, formItem } = useFormItem();
  17473. const { inputId } = useFormItemInputId(props, { formItemContext: formItem });
  17474. const { valueOnClear, isEmptyValue } = useEmptyValues(props);
  17475. const { isComposing, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd } = useComposition({ afterComposition: (e) => onInput(e) });
  17476. const selectDisabled = useFormDisabled();
  17477. const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {
  17478. disabled: selectDisabled,
  17479. afterFocus() {
  17480. if (props.automaticDropdown && !expanded.value) {
  17481. expanded.value = true;
  17482. states.menuVisibleOnFocus = true;
  17483. }
  17484. },
  17485. beforeBlur(event) {
  17486. return tooltipRef.value?.isFocusInsideContent(event) || tagTooltipRef.value?.isFocusInsideContent(event);
  17487. },
  17488. afterBlur() {
  17489. expanded.value = false;
  17490. states.menuVisibleOnFocus = false;
  17491. if (props.validateEvent) formItem?.validate?.("blur").catch(NOOP);
  17492. }
  17493. });
  17494. const hasModelValue = (0, vue.computed)(() => {
  17495. return isArray$1(props.modelValue) ? props.modelValue.length > 0 : !isEmptyValue(props.modelValue);
  17496. });
  17497. const needStatusIcon = (0, vue.computed)(() => form?.statusIcon ?? false);
  17498. const showClearBtn = (0, vue.computed)(() => {
  17499. return props.clearable && !selectDisabled.value && hasModelValue.value && (isFocused.value || states.inputHovering);
  17500. });
  17501. const iconComponent = (0, vue.computed)(() => props.remote && props.filterable && !props.remoteShowSuffix ? "" : props.suffixIcon);
  17502. const iconReverse = (0, vue.computed)(() => nsSelect.is("reverse", !!(iconComponent.value && expanded.value)));
  17503. const validateState = (0, vue.computed)(() => formItem?.validateState || "");
  17504. const validateIcon = (0, vue.computed)(() => validateState.value && ValidateComponentsMap[validateState.value]);
  17505. const debounce = (0, vue.computed)(() => props.remote ? props.debounce : 0);
  17506. const isRemoteSearchEmpty = (0, vue.computed)(() => props.remote && !states.inputValue && states.options.size === 0);
  17507. const emptyText = (0, vue.computed)(() => {
  17508. if (props.loading) return props.loadingText || t("el.select.loading");
  17509. else {
  17510. if (props.filterable && states.inputValue && states.options.size > 0 && filteredOptionsCount.value === 0) return props.noMatchText || t("el.select.noMatch");
  17511. if (states.options.size === 0) return props.noDataText || t("el.select.noData");
  17512. }
  17513. return null;
  17514. });
  17515. const filteredOptionsCount = (0, vue.computed)(() => optionsArray.value.filter((option) => option.visible).length);
  17516. const optionsArray = (0, vue.computed)(() => {
  17517. const list = Array.from(states.options.values());
  17518. const newList = [];
  17519. states.optionValues.forEach((item) => {
  17520. const index = list.findIndex((i) => i.value === item);
  17521. if (index > -1) newList.push(list[index]);
  17522. });
  17523. return newList.length >= list.length ? newList : list;
  17524. });
  17525. const cachedOptionsArray = (0, vue.computed)(() => Array.from(states.cachedOptions.values()));
  17526. const showNewOption = (0, vue.computed)(() => {
  17527. const hasExistingOption = optionsArray.value.filter((option) => {
  17528. return !option.created;
  17529. }).some((option) => {
  17530. return option.currentLabel === states.inputValue;
  17531. });
  17532. return props.filterable && props.allowCreate && states.inputValue !== "" && !hasExistingOption;
  17533. });
  17534. const updateOptions = () => {
  17535. if (props.filterable && isFunction$1(props.filterMethod)) return;
  17536. if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) return;
  17537. optionsArray.value.forEach((option) => {
  17538. option.updateOption?.(states.inputValue);
  17539. });
  17540. };
  17541. const selectSize = useFormSize();
  17542. const collapseTagSize = (0, vue.computed)(() => ["small"].includes(selectSize.value) ? "small" : "default");
  17543. const dropdownMenuVisible = (0, vue.computed)({
  17544. get() {
  17545. return expanded.value && (props.loading || !isRemoteSearchEmpty.value || props.remote && !!slots.empty) && (!debouncing.value || !isEmpty(states.previousQuery) || states.options.size > 0);
  17546. },
  17547. set(val) {
  17548. expanded.value = val;
  17549. }
  17550. });
  17551. const shouldShowPlaceholder = (0, vue.computed)(() => {
  17552. if (props.multiple && !isUndefined(props.modelValue)) return castArray$1(props.modelValue).length === 0 && !states.inputValue;
  17553. const value = isArray$1(props.modelValue) ? props.modelValue[0] : props.modelValue;
  17554. return props.filterable || isUndefined(value) ? !states.inputValue : true;
  17555. });
  17556. const currentPlaceholder = (0, vue.computed)(() => {
  17557. const _placeholder = props.placeholder ?? t("el.select.placeholder");
  17558. return props.multiple || !hasModelValue.value ? _placeholder : states.selectedLabel;
  17559. });
  17560. const mouseEnterEventName = isIOS ? null : "mouseenter";
  17561. (0, vue.watch)(() => props.modelValue, (val, oldVal) => {
  17562. if (props.multiple) {
  17563. if (props.filterable && !props.reserveKeyword) {
  17564. states.inputValue = "";
  17565. handleQueryChange("");
  17566. }
  17567. }
  17568. setSelected();
  17569. if (!isEqual$1(val, oldVal) && props.validateEvent) formItem?.validate("change").catch(NOOP);
  17570. }, {
  17571. flush: "post",
  17572. deep: true
  17573. });
  17574. (0, vue.watch)(() => expanded.value, (val) => {
  17575. if (val) handleQueryChange(states.inputValue);
  17576. else {
  17577. states.inputValue = "";
  17578. states.previousQuery = null;
  17579. states.isBeforeHide = true;
  17580. states.menuVisibleOnFocus = false;
  17581. }
  17582. });
  17583. (0, vue.watch)(() => states.options.entries(), () => {
  17584. if (!isClient) return;
  17585. setSelected();
  17586. if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptionsCount.value) checkDefaultFirstOption();
  17587. }, { flush: "post" });
  17588. (0, vue.watch)([() => states.hoveringIndex, optionsArray], ([val]) => {
  17589. if (isNumber(val) && val > -1) hoverOption.value = optionsArray.value[val] || {};
  17590. else hoverOption.value = {};
  17591. optionsArray.value.forEach((option) => {
  17592. option.hover = hoverOption.value === option;
  17593. });
  17594. });
  17595. (0, vue.watchEffect)(() => {
  17596. if (states.isBeforeHide) return;
  17597. updateOptions();
  17598. });
  17599. const handleQueryChange = (val) => {
  17600. if (states.previousQuery === val || isComposing.value) return;
  17601. states.previousQuery = val;
  17602. if (props.filterable && isFunction$1(props.filterMethod)) props.filterMethod(val);
  17603. else if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) props.remoteMethod(val);
  17604. if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptionsCount.value) (0, vue.nextTick)(checkDefaultFirstOption);
  17605. else (0, vue.nextTick)(updateHoveringIndex);
  17606. };
  17607. const checkDefaultFirstOption = () => {
  17608. const optionsInDropdown = optionsArray.value.filter((n) => n.visible && !n.disabled && !n.states.groupDisabled);
  17609. const userCreatedOption = optionsInDropdown.find((n) => n.created);
  17610. const firstOriginOption = optionsInDropdown[0];
  17611. states.hoveringIndex = getValueIndex(optionsArray.value.map((item) => item.value), userCreatedOption || firstOriginOption);
  17612. };
  17613. const setSelected = () => {
  17614. if (!props.multiple) {
  17615. const option = getOption(isArray$1(props.modelValue) ? props.modelValue[0] : props.modelValue);
  17616. states.selectedLabel = option.currentLabel;
  17617. states.selected = [option];
  17618. return;
  17619. } else states.selectedLabel = "";
  17620. const result = [];
  17621. if (!isUndefined(props.modelValue)) castArray$1(props.modelValue).forEach((value) => {
  17622. result.push(getOption(value));
  17623. });
  17624. states.selected = result;
  17625. };
  17626. const getOption = (value) => {
  17627. let option;
  17628. const isObjectValue = isPlainObject$1(value);
  17629. for (let i = states.cachedOptions.size - 1; i >= 0; i--) {
  17630. const cachedOption = cachedOptionsArray.value[i];
  17631. if (isObjectValue ? get(cachedOption.value, props.valueKey) === get(value, props.valueKey) : cachedOption.value === value) {
  17632. option = {
  17633. index: optionsArray.value.filter((opt) => !opt.created).indexOf(cachedOption),
  17634. value,
  17635. currentLabel: cachedOption.currentLabel,
  17636. get isDisabled() {
  17637. return cachedOption.isDisabled;
  17638. }
  17639. };
  17640. break;
  17641. }
  17642. }
  17643. if (option) return option;
  17644. const existingSelected = states.selected.find((item) => isObjectValue ? get(item.value, props.valueKey) === get(value, props.valueKey) : item.value === value);
  17645. return {
  17646. index: -1,
  17647. value,
  17648. currentLabel: isObjectValue ? value.label : existingSelected ? existingSelected.currentLabel : value ?? ""
  17649. };
  17650. };
  17651. const updateHoveringIndex = () => {
  17652. const length = states.selected.length;
  17653. if (length > 0) {
  17654. const lastOption = states.selected[length - 1];
  17655. states.hoveringIndex = optionsArray.value.findIndex((item) => getValueKey(lastOption) === getValueKey(item));
  17656. } else states.hoveringIndex = -1;
  17657. };
  17658. const resetSelectionWidth = () => {
  17659. states.selectionWidth = Number.parseFloat(window.getComputedStyle(selectionRef.value).width);
  17660. };
  17661. const resetCollapseItemWidth = () => {
  17662. states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width;
  17663. };
  17664. const updateTooltip = () => {
  17665. tooltipRef.value?.updatePopper?.();
  17666. };
  17667. const updateTagTooltip = () => {
  17668. tagTooltipRef.value?.updatePopper?.();
  17669. };
  17670. const onInputChange = () => {
  17671. if (states.inputValue.length > 0 && !expanded.value) expanded.value = true;
  17672. handleQueryChange(states.inputValue);
  17673. };
  17674. const onInput = (event) => {
  17675. states.inputValue = event.target.value;
  17676. if (props.remote) {
  17677. debouncing.value = true;
  17678. debouncedOnInputChange();
  17679. } else return onInputChange();
  17680. };
  17681. const debouncedOnInputChange = useDebounceFn(() => {
  17682. onInputChange();
  17683. debouncing.value = false;
  17684. }, debounce);
  17685. const emitChange = (val) => {
  17686. if (!isEqual$1(props.modelValue, val)) emit(CHANGE_EVENT, val);
  17687. };
  17688. const getLastNotDisabledIndex = (value) => findLastIndex(value, (it) => {
  17689. const option = states.cachedOptions.get(it);
  17690. return !option?.disabled && !option?.states.groupDisabled;
  17691. });
  17692. const deletePrevTag = (e) => {
  17693. const code = getEventCode(e);
  17694. if (!props.multiple) return;
  17695. if (code === EVENT_CODE.delete) return;
  17696. if (e.target.value.length <= 0) {
  17697. const value = castArray$1(props.modelValue).slice();
  17698. const lastNotDisabledIndex = getLastNotDisabledIndex(value);
  17699. if (lastNotDisabledIndex < 0) return;
  17700. const removeTagValue = value[lastNotDisabledIndex];
  17701. value.splice(lastNotDisabledIndex, 1);
  17702. emit(UPDATE_MODEL_EVENT, value);
  17703. emitChange(value);
  17704. emit("remove-tag", removeTagValue);
  17705. }
  17706. };
  17707. const deleteTag = (event, tag) => {
  17708. const index = states.selected.indexOf(tag);
  17709. if (index > -1 && !selectDisabled.value) {
  17710. const value = castArray$1(props.modelValue).slice();
  17711. value.splice(index, 1);
  17712. emit(UPDATE_MODEL_EVENT, value);
  17713. emitChange(value);
  17714. emit("remove-tag", tag.value);
  17715. }
  17716. event.stopPropagation();
  17717. focus();
  17718. };
  17719. const deleteSelected = (event) => {
  17720. event.stopPropagation();
  17721. const value = props.multiple ? [] : valueOnClear.value;
  17722. if (props.multiple) {
  17723. for (const item of states.selected) if (item.isDisabled) value.push(item.value);
  17724. }
  17725. emit(UPDATE_MODEL_EVENT, value);
  17726. emitChange(value);
  17727. states.hoveringIndex = -1;
  17728. expanded.value = false;
  17729. emit("clear");
  17730. focus();
  17731. };
  17732. const handleOptionSelect = (option) => {
  17733. if (props.multiple) {
  17734. const value = castArray$1(props.modelValue ?? []).slice();
  17735. const optionIndex = getValueIndex(value, option);
  17736. if (optionIndex > -1) value.splice(optionIndex, 1);
  17737. else if (props.multipleLimit <= 0 || value.length < props.multipleLimit) value.push(option.value);
  17738. emit(UPDATE_MODEL_EVENT, value);
  17739. emitChange(value);
  17740. if (option.created) handleQueryChange("");
  17741. if (props.filterable && (option.created || !props.reserveKeyword)) states.inputValue = "";
  17742. } else {
  17743. !isEqual$1(props.modelValue, option.value) && emit("update:modelValue", option.value);
  17744. emitChange(option.value);
  17745. expanded.value = false;
  17746. }
  17747. focus();
  17748. if (expanded.value) return;
  17749. (0, vue.nextTick)(() => {
  17750. scrollToOption(option);
  17751. });
  17752. };
  17753. const getValueIndex = (arr, option) => {
  17754. if (isUndefined(option)) return -1;
  17755. if (!isObject$1(option.value)) return arr.indexOf(option.value);
  17756. return arr.findIndex((item) => {
  17757. return isEqual$1(get(item, props.valueKey), getValueKey(option));
  17758. });
  17759. };
  17760. const scrollToOption = (option) => {
  17761. const targetOption = isArray$1(option) ? option[option.length - 1] : option;
  17762. let target = null;
  17763. if (!isNil(targetOption?.value)) {
  17764. const options = optionsArray.value.filter((item) => item.value === targetOption.value);
  17765. if (options.length > 0) target = options[0].$el;
  17766. }
  17767. if (tooltipRef.value && target) {
  17768. const menu = tooltipRef.value?.popperRef?.contentRef?.querySelector?.(`.${nsSelect.be("dropdown", "wrap")}`);
  17769. if (menu) scrollIntoView(menu, target);
  17770. }
  17771. scrollbarRef.value?.handleScroll();
  17772. };
  17773. const onOptionCreate = (vm) => {
  17774. states.options.set(vm.value, vm);
  17775. states.cachedOptions.set(vm.value, vm);
  17776. };
  17777. const onOptionDestroy = (key, vm) => {
  17778. if (states.options.get(key) === vm) states.options.delete(key);
  17779. };
  17780. const popperRef = (0, vue.computed)(() => {
  17781. return tooltipRef.value?.popperRef?.contentRef;
  17782. });
  17783. const handleMenuEnter = () => {
  17784. states.isBeforeHide = false;
  17785. (0, vue.nextTick)(() => {
  17786. scrollbarRef.value?.update();
  17787. scrollToOption(states.selected);
  17788. });
  17789. };
  17790. const focus = () => {
  17791. inputRef.value?.focus();
  17792. };
  17793. const blur = () => {
  17794. if (expanded.value) {
  17795. expanded.value = false;
  17796. (0, vue.nextTick)(() => inputRef.value?.blur());
  17797. return;
  17798. }
  17799. inputRef.value?.blur();
  17800. };
  17801. const handleClearClick = (event) => {
  17802. deleteSelected(event);
  17803. };
  17804. const handleClickOutside = (event) => {
  17805. expanded.value = false;
  17806. if (isFocused.value) {
  17807. const _event = new FocusEvent("blur", event);
  17808. (0, vue.nextTick)(() => handleBlur(_event));
  17809. }
  17810. };
  17811. const handleEsc = () => {
  17812. if (states.inputValue.length > 0) states.inputValue = "";
  17813. else expanded.value = false;
  17814. };
  17815. const toggleMenu = (event) => {
  17816. if (selectDisabled.value || props.filterable && expanded.value && event && !suffixRef.value?.contains(event.target)) return;
  17817. if (isIOS) states.inputHovering = true;
  17818. if (states.menuVisibleOnFocus) states.menuVisibleOnFocus = false;
  17819. else expanded.value = !expanded.value;
  17820. };
  17821. const selectOption = () => {
  17822. if (!expanded.value) toggleMenu();
  17823. else {
  17824. const option = optionsArray.value[states.hoveringIndex];
  17825. if (option && !option.isDisabled) handleOptionSelect(option);
  17826. }
  17827. };
  17828. const getValueKey = (item) => {
  17829. return isObject$1(item.value) ? get(item.value, props.valueKey) : item.value;
  17830. };
  17831. const optionsAllDisabled = (0, vue.computed)(() => optionsArray.value.filter((option) => option.visible).every((option) => option.isDisabled));
  17832. const showTagList = (0, vue.computed)(() => {
  17833. if (!props.multiple) return [];
  17834. return props.collapseTags ? states.selected.slice(0, props.maxCollapseTags) : states.selected;
  17835. });
  17836. const collapseTagList = (0, vue.computed)(() => {
  17837. if (!props.multiple) return [];
  17838. return props.collapseTags ? states.selected.slice(props.maxCollapseTags) : [];
  17839. });
  17840. const navigateOptions = (direction) => {
  17841. if (!expanded.value) {
  17842. expanded.value = true;
  17843. return;
  17844. }
  17845. if (states.options.size === 0 || filteredOptionsCount.value === 0 || isComposing.value) return;
  17846. if (!optionsAllDisabled.value) {
  17847. if (direction === "next") {
  17848. states.hoveringIndex++;
  17849. if (states.hoveringIndex === states.options.size) states.hoveringIndex = 0;
  17850. } else if (direction === "prev") {
  17851. states.hoveringIndex--;
  17852. if (states.hoveringIndex < 0) states.hoveringIndex = states.options.size - 1;
  17853. }
  17854. const option = optionsArray.value[states.hoveringIndex];
  17855. if (option.isDisabled || !option.visible) navigateOptions(direction);
  17856. (0, vue.nextTick)(() => scrollToOption(hoverOption.value));
  17857. }
  17858. };
  17859. const findFocusableIndex = (arr, start, step, len) => {
  17860. for (let i = start; i >= 0 && i < len; i += step) {
  17861. const obj = arr[i];
  17862. if (!obj?.isDisabled && obj?.visible) return i;
  17863. }
  17864. return null;
  17865. };
  17866. const focusOption = (targetIndex, mode) => {
  17867. const len = states.options.size;
  17868. if (len === 0) return;
  17869. const start = clamp$1(targetIndex, 0, len - 1);
  17870. const options = optionsArray.value;
  17871. const direction = mode === "up" ? -1 : 1;
  17872. const newIndex = findFocusableIndex(options, start, direction, len) ?? findFocusableIndex(options, start - direction, -direction, len);
  17873. if (newIndex != null) {
  17874. states.hoveringIndex = newIndex;
  17875. (0, vue.nextTick)(() => scrollToOption(hoverOption.value));
  17876. }
  17877. };
  17878. const handleKeydown = (e) => {
  17879. const code = getEventCode(e);
  17880. let isPreventDefault = true;
  17881. switch (code) {
  17882. case EVENT_CODE.up:
  17883. navigateOptions("prev");
  17884. break;
  17885. case EVENT_CODE.down:
  17886. navigateOptions("next");
  17887. break;
  17888. case EVENT_CODE.enter:
  17889. case EVENT_CODE.numpadEnter:
  17890. if (!isComposing.value) selectOption();
  17891. break;
  17892. case EVENT_CODE.esc:
  17893. handleEsc();
  17894. break;
  17895. case EVENT_CODE.backspace:
  17896. isPreventDefault = false;
  17897. deletePrevTag(e);
  17898. return;
  17899. case EVENT_CODE.home:
  17900. if (!expanded.value) return;
  17901. focusOption(0, "down");
  17902. break;
  17903. case EVENT_CODE.end:
  17904. if (!expanded.value) return;
  17905. focusOption(states.options.size - 1, "up");
  17906. break;
  17907. case EVENT_CODE.pageUp:
  17908. if (!expanded.value) return;
  17909. focusOption(states.hoveringIndex - 10, "up");
  17910. break;
  17911. case EVENT_CODE.pageDown:
  17912. if (!expanded.value) return;
  17913. focusOption(states.hoveringIndex + 10, "down");
  17914. break;
  17915. default:
  17916. isPreventDefault = false;
  17917. break;
  17918. }
  17919. if (isPreventDefault) {
  17920. e.preventDefault();
  17921. e.stopPropagation();
  17922. }
  17923. };
  17924. const getGapWidth = () => {
  17925. if (!selectionRef.value) return 0;
  17926. const style = window.getComputedStyle(selectionRef.value);
  17927. return Number.parseFloat(style.gap || "6px");
  17928. };
  17929. const tagStyle = (0, vue.computed)(() => {
  17930. const gapWidth = getGapWidth();
  17931. const inputSlotWidth = props.filterable ? gapWidth + 11 : 0;
  17932. return { maxWidth: `${collapseItemRef.value && props.maxCollapseTags === 1 ? states.selectionWidth - states.collapseItemWidth - gapWidth - inputSlotWidth : states.selectionWidth - inputSlotWidth}px` };
  17933. });
  17934. const collapseTagStyle = (0, vue.computed)(() => {
  17935. return { maxWidth: `${states.selectionWidth}px` };
  17936. });
  17937. const popupScroll = (data) => {
  17938. emit("popup-scroll", data);
  17939. };
  17940. const endReached = (direction) => {
  17941. emit("end-reached", direction);
  17942. };
  17943. useResizeObserver(selectionRef, resetSelectionWidth);
  17944. useResizeObserver(wrapperRef, updateTooltip);
  17945. useResizeObserver(tagMenuRef, updateTagTooltip);
  17946. useResizeObserver(collapseItemRef, resetCollapseItemWidth);
  17947. let stop;
  17948. (0, vue.watch)(() => dropdownMenuVisible.value, (newVal) => {
  17949. if (newVal) stop = useResizeObserver(menuRef, updateTooltip).stop;
  17950. else {
  17951. stop?.();
  17952. stop = void 0;
  17953. }
  17954. emit("visible-change", newVal);
  17955. });
  17956. (0, vue.onMounted)(() => {
  17957. setSelected();
  17958. });
  17959. return {
  17960. inputId,
  17961. contentId,
  17962. nsSelect,
  17963. nsInput,
  17964. states,
  17965. isFocused,
  17966. expanded,
  17967. optionsArray,
  17968. hoverOption,
  17969. selectSize,
  17970. filteredOptionsCount,
  17971. updateTooltip,
  17972. updateTagTooltip,
  17973. debouncedOnInputChange,
  17974. onInput,
  17975. deletePrevTag,
  17976. deleteTag,
  17977. deleteSelected,
  17978. handleOptionSelect,
  17979. scrollToOption,
  17980. hasModelValue,
  17981. shouldShowPlaceholder,
  17982. currentPlaceholder,
  17983. mouseEnterEventName,
  17984. needStatusIcon,
  17985. showClearBtn,
  17986. iconComponent,
  17987. iconReverse,
  17988. validateState,
  17989. validateIcon,
  17990. showNewOption,
  17991. updateOptions,
  17992. collapseTagSize,
  17993. setSelected,
  17994. selectDisabled,
  17995. emptyText,
  17996. handleCompositionStart,
  17997. handleCompositionUpdate,
  17998. handleCompositionEnd,
  17999. handleKeydown,
  18000. onOptionCreate,
  18001. onOptionDestroy,
  18002. handleMenuEnter,
  18003. focus,
  18004. blur,
  18005. handleClearClick,
  18006. handleClickOutside,
  18007. handleEsc,
  18008. toggleMenu,
  18009. selectOption,
  18010. getValueKey,
  18011. navigateOptions,
  18012. dropdownMenuVisible,
  18013. showTagList,
  18014. collapseTagList,
  18015. popupScroll,
  18016. getOption,
  18017. endReached,
  18018. tagStyle,
  18019. collapseTagStyle,
  18020. popperRef,
  18021. inputRef,
  18022. tooltipRef,
  18023. tagTooltipRef,
  18024. prefixRef,
  18025. suffixRef,
  18026. selectRef,
  18027. wrapperRef,
  18028. selectionRef,
  18029. scrollbarRef,
  18030. menuRef,
  18031. tagMenuRef,
  18032. collapseItemRef
  18033. };
  18034. };
  18035. //#endregion
  18036. //#region ../../packages/components/select/src/options.ts
  18037. var options_default = (0, vue.defineComponent)({
  18038. name: "ElOptions",
  18039. setup(_, { slots }) {
  18040. const select = (0, vue.inject)(selectKey);
  18041. let cachedValueList = [];
  18042. return () => {
  18043. const children = slots.default?.();
  18044. const valueList = [];
  18045. function filterOptions(children) {
  18046. if (!isArray$1(children)) return;
  18047. children.forEach((item) => {
  18048. const name = (item?.type || {})?.name;
  18049. if (name === "ElOptionGroup") filterOptions(!isString(item.children) && !isArray$1(item.children) && isFunction$1(item.children?.default) ? item.children?.default() : item.children);
  18050. else if (name === "ElOption") valueList.push(item.props?.value);
  18051. else if (isArray$1(item.children)) filterOptions(item.children);
  18052. });
  18053. }
  18054. if (children.length) filterOptions(children[0]?.children);
  18055. if (!isEqual$1(valueList, cachedValueList)) {
  18056. cachedValueList = valueList;
  18057. if (select) select.states.optionValues = valueList;
  18058. }
  18059. return children;
  18060. };
  18061. }
  18062. });
  18063. //#endregion
  18064. //#region ../../packages/components/select/src/select.ts
  18065. const selectProps = buildProps({
  18066. name: String,
  18067. id: String,
  18068. modelValue: {
  18069. type: definePropType([
  18070. Array,
  18071. String,
  18072. Number,
  18073. Boolean,
  18074. Object
  18075. ]),
  18076. default: void 0
  18077. },
  18078. autocomplete: {
  18079. type: String,
  18080. default: "off"
  18081. },
  18082. automaticDropdown: Boolean,
  18083. size: useSizeProp,
  18084. effect: {
  18085. type: definePropType(String),
  18086. default: "light"
  18087. },
  18088. disabled: {
  18089. type: Boolean,
  18090. default: void 0
  18091. },
  18092. clearable: Boolean,
  18093. filterable: Boolean,
  18094. allowCreate: Boolean,
  18095. loading: Boolean,
  18096. popperClass: {
  18097. type: String,
  18098. default: ""
  18099. },
  18100. popperStyle: { type: definePropType([String, Object]) },
  18101. popperOptions: {
  18102. type: definePropType(Object),
  18103. default: () => ({})
  18104. },
  18105. remote: Boolean,
  18106. debounce: {
  18107. type: Number,
  18108. default: 300
  18109. },
  18110. loadingText: String,
  18111. noMatchText: String,
  18112. noDataText: String,
  18113. remoteMethod: { type: definePropType(Function) },
  18114. filterMethod: { type: definePropType(Function) },
  18115. multiple: Boolean,
  18116. multipleLimit: {
  18117. type: Number,
  18118. default: 0
  18119. },
  18120. placeholder: { type: String },
  18121. defaultFirstOption: Boolean,
  18122. reserveKeyword: {
  18123. type: Boolean,
  18124. default: true
  18125. },
  18126. valueKey: {
  18127. type: String,
  18128. default: "value"
  18129. },
  18130. collapseTags: Boolean,
  18131. collapseTagsTooltip: Boolean,
  18132. tagTooltip: {
  18133. type: definePropType(Object),
  18134. default: () => ({})
  18135. },
  18136. maxCollapseTags: {
  18137. type: Number,
  18138. default: 1
  18139. },
  18140. teleported: useTooltipContentProps.teleported,
  18141. persistent: {
  18142. type: Boolean,
  18143. default: true
  18144. },
  18145. clearIcon: {
  18146. type: iconPropType,
  18147. default: circle_close_default
  18148. },
  18149. fitInputWidth: Boolean,
  18150. suffixIcon: {
  18151. type: iconPropType,
  18152. default: arrow_down_default
  18153. },
  18154. tagType: {
  18155. ...tagProps.type,
  18156. default: "info"
  18157. },
  18158. tagEffect: {
  18159. ...tagProps.effect,
  18160. default: "light"
  18161. },
  18162. validateEvent: {
  18163. type: Boolean,
  18164. default: true
  18165. },
  18166. remoteShowSuffix: Boolean,
  18167. showArrow: {
  18168. type: Boolean,
  18169. default: true
  18170. },
  18171. offset: {
  18172. type: Number,
  18173. default: 12
  18174. },
  18175. placement: {
  18176. type: definePropType(String),
  18177. values: Ee,
  18178. default: "bottom-start"
  18179. },
  18180. fallbackPlacements: {
  18181. type: definePropType(Array),
  18182. default: [
  18183. "bottom-start",
  18184. "top-start",
  18185. "right",
  18186. "left"
  18187. ]
  18188. },
  18189. tabindex: {
  18190. type: [String, Number],
  18191. default: 0
  18192. },
  18193. appendTo: useTooltipContentProps.appendTo,
  18194. options: { type: definePropType(Array) },
  18195. props: {
  18196. type: definePropType(Object),
  18197. default: () => defaultProps$2
  18198. },
  18199. ...useEmptyValuesProps,
  18200. ...useAriaProps(["ariaLabel"])
  18201. });
  18202. const selectEmits = {
  18203. [UPDATE_MODEL_EVENT]: (val) => true,
  18204. [CHANGE_EVENT]: (val) => true,
  18205. "popup-scroll": scrollbarEmits.scroll,
  18206. "end-reached": scrollbarEmits["end-reached"],
  18207. "remove-tag": (val) => true,
  18208. "visible-change": (visible) => true,
  18209. focus: (evt) => evt instanceof FocusEvent,
  18210. blur: (evt) => evt instanceof FocusEvent,
  18211. clear: () => true
  18212. };
  18213. //#endregion
  18214. //#region ../../packages/components/select/src/option-group.vue?vue&type=script&lang.ts
  18215. var option_group_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  18216. name: "ElOptionGroup",
  18217. componentName: "ElOptionGroup",
  18218. props: {
  18219. label: String,
  18220. disabled: Boolean
  18221. },
  18222. setup(props) {
  18223. const ns = useNamespace("select");
  18224. const groupRef = (0, vue.ref)();
  18225. const instance = (0, vue.getCurrentInstance)();
  18226. const children = (0, vue.ref)([]);
  18227. (0, vue.provide)(selectGroupKey, (0, vue.reactive)({ ...(0, vue.toRefs)(props) }));
  18228. const visible = (0, vue.computed)(() => children.value.some((option) => option.visible === true));
  18229. const isOption = (node) => node.type.name === "ElOption" && !!node.component?.proxy;
  18230. const flattedChildren = (node) => {
  18231. const nodes = castArray$1(node);
  18232. const children = [];
  18233. nodes.forEach((child) => {
  18234. if (!(0, vue.isVNode)(child)) return;
  18235. if (isOption(child)) children.push(child.component.proxy);
  18236. else if (isArray$1(child.children) && child.children.length) children.push(...flattedChildren(child.children));
  18237. else if (child.component?.subTree) children.push(...flattedChildren(child.component.subTree));
  18238. });
  18239. return children;
  18240. };
  18241. const updateChildren = () => {
  18242. children.value = flattedChildren(instance.subTree);
  18243. };
  18244. (0, vue.onMounted)(() => {
  18245. updateChildren();
  18246. });
  18247. useMutationObserver(groupRef, updateChildren, {
  18248. attributes: true,
  18249. subtree: true,
  18250. childList: true
  18251. });
  18252. return {
  18253. groupRef,
  18254. visible,
  18255. ns
  18256. };
  18257. }
  18258. });
  18259. //#endregion
  18260. //#region ../../packages/components/select/src/option-group.vue
  18261. function _sfc_render$17(_ctx, _cache, $props, $setup, $data, $options) {
  18262. return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
  18263. ref: "groupRef",
  18264. class: (0, vue.normalizeClass)(_ctx.ns.be("group", "wrap"))
  18265. }, [(0, vue.createElementVNode)("li", { class: (0, vue.normalizeClass)(_ctx.ns.be("group", "title")) }, (0, vue.toDisplayString)(_ctx.label), 3), (0, vue.createElementVNode)("li", null, [(0, vue.createElementVNode)("ul", { class: (0, vue.normalizeClass)(_ctx.ns.b("group")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)])], 2)), [[vue.vShow, _ctx.visible]]);
  18266. }
  18267. var option_group_default = /* @__PURE__ */ _plugin_vue_export_helper_default(option_group_vue_vue_type_script_lang_default, [["render", _sfc_render$17]]);
  18268. //#endregion
  18269. //#region ../../packages/components/select/src/select.vue?vue&type=script&lang.ts
  18270. const COMPONENT_NAME$13 = "ElSelect";
  18271. const warnHandlerMap = /* @__PURE__ */ new WeakMap();
  18272. const createSelectWarnHandler = (appContext) => {
  18273. return (...args) => {
  18274. const message = args[0];
  18275. if (!message || message.includes("Slot \"default\" invoked outside of the render function") && args[2]?.includes("ElTreeSelect")) return;
  18276. const original = warnHandlerMap.get(appContext)?.originalWarnHandler;
  18277. if (original) {
  18278. original(...args);
  18279. return;
  18280. }
  18281. console.warn(...args);
  18282. };
  18283. };
  18284. const getWarnHandlerRecord = (appContext) => {
  18285. let record = warnHandlerMap.get(appContext);
  18286. if (!record) {
  18287. record = {
  18288. originalWarnHandler: appContext.config.warnHandler,
  18289. handler: createSelectWarnHandler(appContext),
  18290. count: 0
  18291. };
  18292. warnHandlerMap.set(appContext, record);
  18293. }
  18294. return record;
  18295. };
  18296. var select_vue_vue_type_script_lang_default$1 = (0, vue.defineComponent)({
  18297. name: COMPONENT_NAME$13,
  18298. componentName: COMPONENT_NAME$13,
  18299. components: {
  18300. ElSelectMenu: select_dropdown_default$1,
  18301. ElOption: option_default,
  18302. ElOptions: options_default,
  18303. ElOptionGroup: option_group_default,
  18304. ElTag,
  18305. ElScrollbar,
  18306. ElTooltip,
  18307. ElIcon
  18308. },
  18309. directives: { ClickOutside },
  18310. props: selectProps,
  18311. emits: selectEmits,
  18312. setup(props, { emit, slots }) {
  18313. const instance = (0, vue.getCurrentInstance)();
  18314. const warnRecord = getWarnHandlerRecord(instance.appContext);
  18315. warnRecord.count += 1;
  18316. instance.appContext.config.warnHandler = warnRecord.handler;
  18317. const modelValue = (0, vue.computed)(() => {
  18318. const { modelValue: rawModelValue, multiple } = props;
  18319. const fallback = multiple ? [] : void 0;
  18320. if (isArray$1(rawModelValue)) return multiple ? rawModelValue : fallback;
  18321. return multiple ? fallback : rawModelValue;
  18322. });
  18323. const _props = (0, vue.reactive)({
  18324. ...(0, vue.toRefs)(props),
  18325. modelValue
  18326. });
  18327. const API = useSelect$2(_props, emit);
  18328. const { calculatorRef, inputStyle } = useCalcInputWidth();
  18329. const { getLabel, getValue, getOptions, getDisabled } = useProps(props);
  18330. const getOptionProps = (option) => ({
  18331. label: getLabel(option),
  18332. value: getValue(option),
  18333. disabled: getDisabled(option)
  18334. });
  18335. const flatTreeSelectData = (data) => {
  18336. return data.reduce((acc, item) => {
  18337. acc.push(item);
  18338. if (item.children && item.children.length > 0) acc.push(...flatTreeSelectData(item.children));
  18339. return acc;
  18340. }, []);
  18341. };
  18342. const manuallyRenderSlots = (vnodes) => {
  18343. flattedChildren(vnodes || []).forEach((item) => {
  18344. if (isObject$1(item) && (item.type.name === "ElOption" || item.type.name === "ElTree")) {
  18345. const _name = item.type.name;
  18346. if (_name === "ElTree") flatTreeSelectData(item.props?.data || []).forEach((treeItem) => {
  18347. treeItem.currentLabel = treeItem.label ?? (isObject$1(treeItem.value) ? "" : treeItem.value);
  18348. API.onOptionCreate(treeItem);
  18349. });
  18350. else if (_name === "ElOption") {
  18351. const obj = { ...item.props };
  18352. obj.currentLabel = obj.label ?? (isObject$1(obj.value) ? "" : obj.value);
  18353. API.onOptionCreate(obj);
  18354. }
  18355. }
  18356. });
  18357. };
  18358. (0, vue.watch)(() => [props.persistent || API.expanded.value || !slots.default ? void 0 : slots.default?.(), modelValue.value], () => {
  18359. if (props.persistent || API.expanded.value) return;
  18360. if (!slots.default) return;
  18361. API.states.options.clear();
  18362. manuallyRenderSlots(slots.default?.());
  18363. }, { immediate: true });
  18364. (0, vue.provide)(selectKey, (0, vue.reactive)({
  18365. props: _props,
  18366. states: API.states,
  18367. selectRef: API.selectRef,
  18368. optionsArray: API.optionsArray,
  18369. setSelected: API.setSelected,
  18370. handleOptionSelect: API.handleOptionSelect,
  18371. onOptionCreate: API.onOptionCreate,
  18372. onOptionDestroy: API.onOptionDestroy
  18373. }));
  18374. const selectedLabel = (0, vue.computed)(() => {
  18375. if (!props.multiple) return API.states.selectedLabel;
  18376. return API.states.selected.map((i) => i.currentLabel);
  18377. });
  18378. (0, vue.onBeforeUnmount)(() => {
  18379. const record = warnHandlerMap.get(instance.appContext);
  18380. if (!record) return;
  18381. record.count -= 1;
  18382. if (record.count <= 0) {
  18383. instance.appContext.config.warnHandler = record.originalWarnHandler;
  18384. warnHandlerMap.delete(instance.appContext);
  18385. }
  18386. });
  18387. return {
  18388. ...API,
  18389. modelValue,
  18390. selectedLabel,
  18391. calculatorRef,
  18392. inputStyle,
  18393. getLabel,
  18394. getValue,
  18395. getOptions,
  18396. getDisabled,
  18397. getOptionProps
  18398. };
  18399. }
  18400. });
  18401. //#endregion
  18402. //#region ../../packages/components/select/src/select.vue
  18403. const _hoisted_1$66 = [
  18404. "id",
  18405. "value",
  18406. "name",
  18407. "disabled",
  18408. "autocomplete",
  18409. "tabindex",
  18410. "readonly",
  18411. "aria-activedescendant",
  18412. "aria-controls",
  18413. "aria-expanded",
  18414. "aria-label"
  18415. ];
  18416. const _hoisted_2$37 = ["textContent"];
  18417. const _hoisted_3$18 = { key: 1 };
  18418. function _sfc_render$16(_ctx, _cache, $props, $setup, $data, $options) {
  18419. const _component_el_tag = (0, vue.resolveComponent)("el-tag");
  18420. const _component_el_tooltip = (0, vue.resolveComponent)("el-tooltip");
  18421. const _component_el_icon = (0, vue.resolveComponent)("el-icon");
  18422. const _component_el_option = (0, vue.resolveComponent)("el-option");
  18423. const _component_el_option_group = (0, vue.resolveComponent)("el-option-group");
  18424. const _component_el_options = (0, vue.resolveComponent)("el-options");
  18425. const _component_el_scrollbar = (0, vue.resolveComponent)("el-scrollbar");
  18426. const _component_el_select_menu = (0, vue.resolveComponent)("el-select-menu");
  18427. const _directive_click_outside = (0, vue.resolveDirective)("click-outside");
  18428. return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
  18429. ref: "selectRef",
  18430. class: [_ctx.nsSelect.b(), _ctx.nsSelect.m(_ctx.selectSize)]
  18431. }, { [(0, vue.toHandlerKey)(_ctx.mouseEnterEventName)]: _cache[11] || (_cache[11] = ($event) => _ctx.states.inputHovering = true) }, { onMouseleave: _cache[12] || (_cache[12] = ($event) => _ctx.states.inputHovering = false) }), [(0, vue.createVNode)(_component_el_tooltip, {
  18432. ref: "tooltipRef",
  18433. visible: _ctx.dropdownMenuVisible,
  18434. placement: _ctx.placement,
  18435. teleported: _ctx.teleported,
  18436. "popper-class": [_ctx.nsSelect.e("popper"), _ctx.popperClass],
  18437. "popper-style": _ctx.popperStyle,
  18438. "popper-options": _ctx.popperOptions,
  18439. "fallback-placements": _ctx.fallbackPlacements,
  18440. effect: _ctx.effect,
  18441. pure: "",
  18442. trigger: "click",
  18443. transition: `${_ctx.nsSelect.namespace.value}-zoom-in-top`,
  18444. "stop-popper-mouse-event": false,
  18445. "gpu-acceleration": false,
  18446. persistent: _ctx.persistent,
  18447. "append-to": _ctx.appendTo,
  18448. "show-arrow": _ctx.showArrow,
  18449. offset: _ctx.offset,
  18450. onBeforeShow: _ctx.handleMenuEnter,
  18451. onHide: _cache[10] || (_cache[10] = ($event) => _ctx.states.isBeforeHide = false)
  18452. }, {
  18453. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  18454. ref: "wrapperRef",
  18455. class: (0, vue.normalizeClass)([
  18456. _ctx.nsSelect.e("wrapper"),
  18457. _ctx.nsSelect.is("focused", _ctx.isFocused),
  18458. _ctx.nsSelect.is("hovering", _ctx.states.inputHovering),
  18459. _ctx.nsSelect.is("filterable", _ctx.filterable),
  18460. _ctx.nsSelect.is("disabled", _ctx.selectDisabled)
  18461. ]),
  18462. onClick: _cache[7] || (_cache[7] = (0, vue.withModifiers)((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["prevent"]))
  18463. }, [
  18464. _ctx.$slots.prefix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18465. key: 0,
  18466. ref: "prefixRef",
  18467. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("prefix"))
  18468. }, [(0, vue.renderSlot)(_ctx.$slots, "prefix")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  18469. (0, vue.createElementVNode)("div", {
  18470. ref: "selectionRef",
  18471. class: (0, vue.normalizeClass)([_ctx.nsSelect.e("selection"), _ctx.nsSelect.is("near", _ctx.multiple && !_ctx.$slots.prefix && !!_ctx.states.selected.length)])
  18472. }, [
  18473. _ctx.multiple ? (0, vue.renderSlot)(_ctx.$slots, "tag", {
  18474. key: 0,
  18475. data: _ctx.states.selected,
  18476. deleteTag: _ctx.deleteTag,
  18477. selectDisabled: _ctx.selectDisabled
  18478. }, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.showTagList, (item) => {
  18479. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18480. key: _ctx.getValueKey(item),
  18481. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
  18482. }, [(0, vue.createVNode)(_component_el_tag, {
  18483. closable: !_ctx.selectDisabled && !item.isDisabled,
  18484. size: _ctx.collapseTagSize,
  18485. type: _ctx.tagType,
  18486. effect: _ctx.tagEffect,
  18487. "disable-transitions": "",
  18488. style: (0, vue.normalizeStyle)(_ctx.tagStyle),
  18489. onClose: ($event) => _ctx.deleteTag($event, item)
  18490. }, {
  18491. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "label", {
  18492. index: item.index,
  18493. label: item.currentLabel,
  18494. value: item.value
  18495. }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item.currentLabel), 1)])], 2)]),
  18496. _: 2
  18497. }, 1032, [
  18498. "closable",
  18499. "size",
  18500. "type",
  18501. "effect",
  18502. "style",
  18503. "onClose"
  18504. ])], 2);
  18505. }), 128)), _ctx.collapseTags && _ctx.states.selected.length > _ctx.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tooltip, {
  18506. key: 0,
  18507. ref: "tagTooltipRef",
  18508. disabled: _ctx.dropdownMenuVisible || !_ctx.collapseTagsTooltip,
  18509. "fallback-placements": _ctx.tagTooltip?.fallbackPlacements ?? [
  18510. "bottom",
  18511. "top",
  18512. "right",
  18513. "left"
  18514. ],
  18515. effect: _ctx.tagTooltip?.effect ?? _ctx.effect,
  18516. placement: _ctx.tagTooltip?.placement ?? "bottom",
  18517. "popper-class": _ctx.tagTooltip?.popperClass ?? _ctx.popperClass,
  18518. "popper-style": _ctx.tagTooltip?.popperStyle ?? _ctx.popperStyle,
  18519. teleported: _ctx.tagTooltip?.teleported ?? _ctx.teleported,
  18520. "append-to": _ctx.tagTooltip?.appendTo ?? _ctx.appendTo,
  18521. "popper-options": _ctx.tagTooltip?.popperOptions ?? _ctx.popperOptions,
  18522. transition: _ctx.tagTooltip?.transition,
  18523. "show-after": _ctx.tagTooltip?.showAfter,
  18524. "hide-after": _ctx.tagTooltip?.hideAfter,
  18525. "auto-close": _ctx.tagTooltip?.autoClose,
  18526. offset: _ctx.tagTooltip?.offset
  18527. }, {
  18528. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  18529. ref: "collapseItemRef",
  18530. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
  18531. }, [(0, vue.createVNode)(_component_el_tag, {
  18532. closable: false,
  18533. size: _ctx.collapseTagSize,
  18534. type: _ctx.tagType,
  18535. effect: _ctx.tagEffect,
  18536. "disable-transitions": "",
  18537. style: (0, vue.normalizeStyle)(_ctx.collapseTagStyle)
  18538. }, {
  18539. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, " + " + (0, vue.toDisplayString)(_ctx.states.selected.length - _ctx.maxCollapseTags), 3)]),
  18540. _: 1
  18541. }, 8, [
  18542. "size",
  18543. "type",
  18544. "effect",
  18545. "style"
  18546. ])], 2)]),
  18547. content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  18548. ref: "tagMenuRef",
  18549. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selection"))
  18550. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.collapseTagList, (item) => {
  18551. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18552. key: _ctx.getValueKey(item),
  18553. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
  18554. }, [(0, vue.createVNode)(_component_el_tag, {
  18555. class: "in-tooltip",
  18556. closable: !_ctx.selectDisabled && !item.isDisabled,
  18557. size: _ctx.collapseTagSize,
  18558. type: _ctx.tagType,
  18559. effect: _ctx.tagEffect,
  18560. "disable-transitions": "",
  18561. onClose: ($event) => _ctx.deleteTag($event, item)
  18562. }, {
  18563. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "label", {
  18564. index: item.index,
  18565. label: item.currentLabel,
  18566. value: item.value
  18567. }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item.currentLabel), 1)])], 2)]),
  18568. _: 2
  18569. }, 1032, [
  18570. "closable",
  18571. "size",
  18572. "type",
  18573. "effect",
  18574. "onClose"
  18575. ])], 2);
  18576. }), 128))], 2)]),
  18577. _: 3
  18578. }, 8, [
  18579. "disabled",
  18580. "fallback-placements",
  18581. "effect",
  18582. "placement",
  18583. "popper-class",
  18584. "popper-style",
  18585. "teleported",
  18586. "append-to",
  18587. "popper-options",
  18588. "transition",
  18589. "show-after",
  18590. "hide-after",
  18591. "auto-close",
  18592. "offset"
  18593. ])) : (0, vue.createCommentVNode)("v-if", true)]) : (0, vue.createCommentVNode)("v-if", true),
  18594. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([
  18595. _ctx.nsSelect.e("selected-item"),
  18596. _ctx.nsSelect.e("input-wrapper"),
  18597. _ctx.nsSelect.is("hidden", !_ctx.filterable || _ctx.selectDisabled || _ctx.multiple && !_ctx.states.inputValue && !_ctx.isFocused)
  18598. ]) }, [(0, vue.createElementVNode)("input", {
  18599. id: _ctx.inputId,
  18600. ref: "inputRef",
  18601. value: _ctx.states.inputValue,
  18602. type: "text",
  18603. name: _ctx.name,
  18604. class: (0, vue.normalizeClass)([_ctx.nsSelect.e("input"), _ctx.nsSelect.is(_ctx.selectSize)]),
  18605. disabled: _ctx.selectDisabled,
  18606. autocomplete: _ctx.autocomplete,
  18607. style: (0, vue.normalizeStyle)(_ctx.inputStyle),
  18608. tabindex: _ctx.tabindex,
  18609. role: "combobox",
  18610. readonly: !_ctx.filterable,
  18611. spellcheck: "false",
  18612. "aria-activedescendant": _ctx.hoverOption?.id || "",
  18613. "aria-controls": _ctx.contentId,
  18614. "aria-expanded": _ctx.dropdownMenuVisible,
  18615. "aria-label": _ctx.ariaLabel,
  18616. "aria-autocomplete": "none",
  18617. "aria-haspopup": "listbox",
  18618. onKeydown: _cache[0] || (_cache[0] = (...args) => _ctx.handleKeydown && _ctx.handleKeydown(...args)),
  18619. onCompositionstart: _cache[1] || (_cache[1] = (...args) => _ctx.handleCompositionStart && _ctx.handleCompositionStart(...args)),
  18620. onCompositionupdate: _cache[2] || (_cache[2] = (...args) => _ctx.handleCompositionUpdate && _ctx.handleCompositionUpdate(...args)),
  18621. onCompositionend: _cache[3] || (_cache[3] = (...args) => _ctx.handleCompositionEnd && _ctx.handleCompositionEnd(...args)),
  18622. onInput: _cache[4] || (_cache[4] = (...args) => _ctx.onInput && _ctx.onInput(...args)),
  18623. onChange: _cache[5] || (_cache[5] = (0, vue.withModifiers)(() => {}, ["stop"])),
  18624. onClick: _cache[6] || (_cache[6] = (0, vue.withModifiers)((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["stop"]))
  18625. }, null, 46, _hoisted_1$66), _ctx.filterable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  18626. key: 0,
  18627. ref: "calculatorRef",
  18628. "aria-hidden": "true",
  18629. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("input-calculator")),
  18630. textContent: (0, vue.toDisplayString)(_ctx.states.inputValue)
  18631. }, null, 10, _hoisted_2$37)) : (0, vue.createCommentVNode)("v-if", true)], 2),
  18632. _ctx.shouldShowPlaceholder ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18633. key: 1,
  18634. class: (0, vue.normalizeClass)([
  18635. _ctx.nsSelect.e("selected-item"),
  18636. _ctx.nsSelect.e("placeholder"),
  18637. _ctx.nsSelect.is("transparent", !_ctx.hasModelValue || _ctx.expanded && !_ctx.states.inputValue)
  18638. ])
  18639. }, [_ctx.hasModelValue ? (0, vue.renderSlot)(_ctx.$slots, "label", {
  18640. key: 0,
  18641. index: _ctx.getOption(_ctx.modelValue).index,
  18642. label: _ctx.currentPlaceholder,
  18643. value: _ctx.modelValue
  18644. }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.currentPlaceholder), 1)]) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_3$18, (0, vue.toDisplayString)(_ctx.currentPlaceholder), 1))], 2)) : (0, vue.createCommentVNode)("v-if", true)
  18645. ], 2),
  18646. (0, vue.createElementVNode)("div", {
  18647. ref: "suffixRef",
  18648. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("suffix"))
  18649. }, [
  18650. _ctx.iconComponent && !_ctx.showClearBtn ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  18651. key: 0,
  18652. class: (0, vue.normalizeClass)([
  18653. _ctx.nsSelect.e("caret"),
  18654. _ctx.nsSelect.e("icon"),
  18655. _ctx.iconReverse
  18656. ])
  18657. }, {
  18658. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.iconComponent)))]),
  18659. _: 1
  18660. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
  18661. _ctx.showClearBtn && _ctx.clearIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  18662. key: 1,
  18663. class: (0, vue.normalizeClass)([
  18664. _ctx.nsSelect.e("caret"),
  18665. _ctx.nsSelect.e("icon"),
  18666. _ctx.nsSelect.e("clear")
  18667. ]),
  18668. onClick: _ctx.handleClearClick
  18669. }, {
  18670. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.clearIcon)))]),
  18671. _: 1
  18672. }, 8, ["class", "onClick"])) : (0, vue.createCommentVNode)("v-if", true),
  18673. _ctx.validateState && _ctx.validateIcon && _ctx.needStatusIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  18674. key: 2,
  18675. class: (0, vue.normalizeClass)([
  18676. _ctx.nsInput.e("icon"),
  18677. _ctx.nsInput.e("validateIcon"),
  18678. _ctx.nsInput.is("loading", _ctx.validateState === "validating")
  18679. ])
  18680. }, {
  18681. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.validateIcon)))]),
  18682. _: 1
  18683. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
  18684. ], 2)
  18685. ], 2)]),
  18686. content: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_select_menu, { ref: "menuRef" }, {
  18687. default: (0, vue.withCtx)(() => [
  18688. _ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18689. key: 0,
  18690. class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "header")),
  18691. onClick: _cache[8] || (_cache[8] = (0, vue.withModifiers)(() => {}, ["stop"]))
  18692. }, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  18693. (0, vue.withDirectives)((0, vue.createVNode)(_component_el_scrollbar, {
  18694. id: _ctx.contentId,
  18695. ref: "scrollbarRef",
  18696. tag: "ul",
  18697. "wrap-class": _ctx.nsSelect.be("dropdown", "wrap"),
  18698. "view-class": _ctx.nsSelect.be("dropdown", "list"),
  18699. class: (0, vue.normalizeClass)([_ctx.nsSelect.is("empty", _ctx.filteredOptionsCount === 0)]),
  18700. role: "listbox",
  18701. "aria-label": _ctx.ariaLabel,
  18702. "aria-orientation": "vertical",
  18703. onScroll: _ctx.popupScroll,
  18704. onEndReached: _ctx.endReached
  18705. }, {
  18706. default: (0, vue.withCtx)(() => [_ctx.showNewOption ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_option, {
  18707. key: 0,
  18708. value: _ctx.states.inputValue,
  18709. created: true
  18710. }, null, 8, ["value"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createVNode)(_component_el_options, null, {
  18711. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.options, (option, index) => {
  18712. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: index }, [_ctx.getOptions(option)?.length ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_option_group, {
  18713. key: 0,
  18714. label: _ctx.getLabel(option),
  18715. disabled: _ctx.getDisabled(option)
  18716. }, {
  18717. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.getOptions(option), (item) => {
  18718. return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_option, (0, vue.mergeProps)({ key: _ctx.getValue(item) }, { ref_for: true }, _ctx.getOptionProps(item)), null, 16);
  18719. }), 128))]),
  18720. _: 2
  18721. }, 1032, ["label", "disabled"])) : ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_option, (0, vue.mergeProps)({
  18722. key: 1,
  18723. ref_for: true
  18724. }, _ctx.getOptionProps(option)), null, 16))], 64);
  18725. }), 128))])]),
  18726. _: 3
  18727. })]),
  18728. _: 3
  18729. }, 8, [
  18730. "id",
  18731. "wrap-class",
  18732. "view-class",
  18733. "class",
  18734. "aria-label",
  18735. "onScroll",
  18736. "onEndReached"
  18737. ]), [[vue.vShow, _ctx.states.options.size > 0 && !_ctx.loading]]),
  18738. _ctx.$slots.loading && _ctx.loading ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18739. key: 1,
  18740. class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "loading"))
  18741. }, [(0, vue.renderSlot)(_ctx.$slots, "loading")], 2)) : _ctx.loading || _ctx.filteredOptionsCount === 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18742. key: 2,
  18743. class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "empty"))
  18744. }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.emptyText), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  18745. _ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18746. key: 3,
  18747. class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "footer")),
  18748. onClick: _cache[9] || (_cache[9] = (0, vue.withModifiers)(() => {}, ["stop"]))
  18749. }, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  18750. ]),
  18751. _: 3
  18752. }, 512)]),
  18753. _: 3
  18754. }, 8, [
  18755. "visible",
  18756. "placement",
  18757. "teleported",
  18758. "popper-class",
  18759. "popper-style",
  18760. "popper-options",
  18761. "fallback-placements",
  18762. "effect",
  18763. "transition",
  18764. "persistent",
  18765. "append-to",
  18766. "show-arrow",
  18767. "offset",
  18768. "onBeforeShow"
  18769. ])], 16)), [[
  18770. _directive_click_outside,
  18771. _ctx.handleClickOutside,
  18772. _ctx.popperRef
  18773. ]]);
  18774. }
  18775. var select_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(select_vue_vue_type_script_lang_default$1, [["render", _sfc_render$16]]);
  18776. //#endregion
  18777. //#region ../../packages/components/select/index.ts
  18778. const ElSelect = withInstall(select_default$1, {
  18779. Option: option_default,
  18780. OptionGroup: option_group_default
  18781. });
  18782. const ElOption = withNoopInstall(option_default);
  18783. const ElOptionGroup = withNoopInstall(option_group_default);
  18784. //#endregion
  18785. //#region ../../packages/components/calendar/src/select-controller.vue?vue&type=script&setup=true&lang.ts
  18786. var select_controller_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  18787. name: "SelectController",
  18788. __name: "select-controller",
  18789. props: selectControllerProps,
  18790. emits: selectControllerEmits,
  18791. setup(__props, { emit: __emit }) {
  18792. const props = __props;
  18793. const emit = __emit;
  18794. const nsSelect = useNamespace("calendar-select");
  18795. const { t, lang } = useLocale();
  18796. const monthOptions = Array.from({ length: 12 }, (_, index) => {
  18797. const actualMonth = index + 1;
  18798. return {
  18799. value: actualMonth,
  18800. label: isFunction$1(props.formatter) ? props.formatter(actualMonth, "month") : actualMonth
  18801. };
  18802. });
  18803. const yearValue = (0, vue.computed)(() => props.date.year());
  18804. const monthValue = (0, vue.computed)(() => props.date.month() + 1);
  18805. const yearOptions = (0, vue.computed)(() => {
  18806. const years = [];
  18807. for (let i = -10; i < 10; i++) {
  18808. const year = yearValue.value + i;
  18809. if (year > 0) {
  18810. const label = isFunction$1(props.formatter) ? props.formatter(year, "year") : year;
  18811. years.push({
  18812. value: year,
  18813. label
  18814. });
  18815. }
  18816. }
  18817. return years;
  18818. });
  18819. const handleYearChange = (year) => {
  18820. emit("date-change", (0, import_dayjs_min.default)(new Date(year, monthValue.value - 1, 1)).locale(lang.value));
  18821. };
  18822. const handleMonthChange = (month) => {
  18823. emit("date-change", (0, import_dayjs_min.default)(new Date(yearValue.value, month - 1, 1)).locale(lang.value));
  18824. };
  18825. const selectToday = () => {
  18826. emit("date-change", "today");
  18827. };
  18828. return (_ctx, _cache) => {
  18829. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [
  18830. (0, vue.createVNode)((0, vue.unref)(ElSelect), {
  18831. "model-value": yearValue.value,
  18832. size: "small",
  18833. class: (0, vue.normalizeClass)((0, vue.unref)(nsSelect).e("year")),
  18834. "validate-event": false,
  18835. options: yearOptions.value,
  18836. onChange: handleYearChange
  18837. }, null, 8, [
  18838. "model-value",
  18839. "class",
  18840. "options"
  18841. ]),
  18842. (0, vue.createVNode)((0, vue.unref)(ElSelect), {
  18843. "model-value": monthValue.value,
  18844. size: "small",
  18845. class: (0, vue.normalizeClass)((0, vue.unref)(nsSelect).e("month")),
  18846. "validate-event": false,
  18847. options: (0, vue.unref)(monthOptions),
  18848. onChange: handleMonthChange
  18849. }, null, 8, [
  18850. "model-value",
  18851. "class",
  18852. "options"
  18853. ]),
  18854. (0, vue.createVNode)((0, vue.unref)(ElButton), {
  18855. size: "small",
  18856. onClick: selectToday
  18857. }, {
  18858. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.today")), 1)]),
  18859. _: 1
  18860. })
  18861. ], 64);
  18862. };
  18863. }
  18864. });
  18865. //#endregion
  18866. //#region ../../packages/components/calendar/src/select-controller.vue
  18867. var select_controller_default = select_controller_vue_vue_type_script_setup_true_lang_default;
  18868. //#endregion
  18869. //#region ../../packages/components/calendar/src/calendar.vue?vue&type=script&setup=true&lang.ts
  18870. const COMPONENT_NAME$12 = "ElCalendar";
  18871. var calendar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  18872. name: COMPONENT_NAME$12,
  18873. __name: "calendar",
  18874. props: calendarProps,
  18875. emits: calendarEmits,
  18876. setup(__props, { expose: __expose, emit: __emit }) {
  18877. const ns = useNamespace("calendar");
  18878. const { calculateValidatedDateRange, date, pickDay, realSelectedDay, selectDate, validatedRange, handleDateChange } = useCalendar(__props, __emit, COMPONENT_NAME$12);
  18879. const { t } = useLocale();
  18880. const i18nDate = (0, vue.computed)(() => {
  18881. const pickedMonth = `el.datepicker.month${date.value.format("M")}`;
  18882. return `${date.value.year()} ${t("el.datepicker.year")} ${t(pickedMonth)}`;
  18883. });
  18884. __expose({
  18885. selectedDay: realSelectedDay,
  18886. pickDay,
  18887. selectDate,
  18888. calculateValidatedDateRange
  18889. });
  18890. return (_ctx, _cache) => {
  18891. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("header")) }, [(0, vue.renderSlot)(_ctx.$slots, "header", { date: i18nDate.value }, () => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")) }, (0, vue.toDisplayString)(i18nDate.value), 3), (0, vue.unref)(validatedRange).length === 0 && __props.controllerType === "button" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18892. key: 0,
  18893. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("button-group"))
  18894. }, [(0, vue.createVNode)((0, vue.unref)(ElButtonGroup), null, {
  18895. default: (0, vue.withCtx)(() => [
  18896. (0, vue.createVNode)((0, vue.unref)(ElButton), {
  18897. size: "small",
  18898. onClick: _cache[0] || (_cache[0] = ($event) => (0, vue.unref)(selectDate)("prev-month"))
  18899. }, {
  18900. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.prevMonth")), 1)]),
  18901. _: 1
  18902. }),
  18903. (0, vue.createVNode)((0, vue.unref)(ElButton), {
  18904. size: "small",
  18905. onClick: _cache[1] || (_cache[1] = ($event) => (0, vue.unref)(selectDate)("today"))
  18906. }, {
  18907. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.today")), 1)]),
  18908. _: 1
  18909. }),
  18910. (0, vue.createVNode)((0, vue.unref)(ElButton), {
  18911. size: "small",
  18912. onClick: _cache[2] || (_cache[2] = ($event) => (0, vue.unref)(selectDate)("next-month"))
  18913. }, {
  18914. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.nextMonth")), 1)]),
  18915. _: 1
  18916. })
  18917. ]),
  18918. _: 1
  18919. })], 2)) : (0, vue.unref)(validatedRange).length === 0 && __props.controllerType === "select" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18920. key: 1,
  18921. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("select-controller"))
  18922. }, [(0, vue.createVNode)(select_controller_default, {
  18923. date: (0, vue.unref)(date),
  18924. formatter: __props.formatter,
  18925. onDateChange: (0, vue.unref)(handleDateChange)
  18926. }, null, 8, [
  18927. "date",
  18928. "formatter",
  18929. "onDateChange"
  18930. ])], 2)) : (0, vue.createCommentVNode)("v-if", true)])], 2), (0, vue.unref)(validatedRange).length === 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18931. key: 0,
  18932. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body"))
  18933. }, [(0, vue.createVNode)(date_table_default, {
  18934. date: (0, vue.unref)(date),
  18935. "selected-day": (0, vue.unref)(realSelectedDay),
  18936. onPick: (0, vue.unref)(pickDay)
  18937. }, (0, vue.createSlots)({ _: 2 }, [_ctx.$slots["date-cell"] ? {
  18938. name: "date-cell",
  18939. fn: (0, vue.withCtx)((data) => [(0, vue.renderSlot)(_ctx.$slots, "date-cell", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(data)))]),
  18940. key: "0"
  18941. } : void 0]), 1032, [
  18942. "date",
  18943. "selected-day",
  18944. "onPick"
  18945. ])], 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  18946. key: 1,
  18947. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body"))
  18948. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(validatedRange), (range_, index) => {
  18949. return (0, vue.openBlock)(), (0, vue.createBlock)(date_table_default, {
  18950. key: index,
  18951. date: range_[0],
  18952. "selected-day": (0, vue.unref)(realSelectedDay),
  18953. range: range_,
  18954. "hide-header": index !== 0,
  18955. onPick: (0, vue.unref)(pickDay)
  18956. }, (0, vue.createSlots)({ _: 2 }, [_ctx.$slots["date-cell"] ? {
  18957. name: "date-cell",
  18958. fn: (0, vue.withCtx)((data) => [(0, vue.renderSlot)(_ctx.$slots, "date-cell", (0, vue.mergeProps)({ ref_for: true }, data))]),
  18959. key: "0"
  18960. } : void 0]), 1032, [
  18961. "date",
  18962. "selected-day",
  18963. "range",
  18964. "hide-header",
  18965. "onPick"
  18966. ]);
  18967. }), 128))], 2))], 2);
  18968. };
  18969. }
  18970. });
  18971. //#endregion
  18972. //#region ../../packages/components/calendar/src/calendar.vue
  18973. var calendar_default = calendar_vue_vue_type_script_setup_true_lang_default;
  18974. //#endregion
  18975. //#region ../../packages/components/calendar/index.ts
  18976. const ElCalendar = withInstall(calendar_default);
  18977. //#endregion
  18978. //#region ../../packages/components/card/src/card.ts
  18979. const cardProps = buildProps({
  18980. header: {
  18981. type: String,
  18982. default: ""
  18983. },
  18984. footer: {
  18985. type: String,
  18986. default: ""
  18987. },
  18988. bodyStyle: {
  18989. type: definePropType([
  18990. String,
  18991. Object,
  18992. Array,
  18993. Boolean
  18994. ]),
  18995. default: ""
  18996. },
  18997. headerClass: String,
  18998. bodyClass: String,
  18999. footerClass: String,
  19000. shadow: {
  19001. type: String,
  19002. values: [
  19003. "always",
  19004. "hover",
  19005. "never"
  19006. ],
  19007. default: void 0
  19008. }
  19009. });
  19010. const cardContextKey = Symbol("cardContextKey");
  19011. //#endregion
  19012. //#region ../../packages/components/card/src/card.vue?vue&type=script&setup=true&lang.ts
  19013. var card_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  19014. name: "ElCard",
  19015. __name: "card",
  19016. props: cardProps,
  19017. setup(__props) {
  19018. const globalConfig = useGlobalConfig("card");
  19019. const ns = useNamespace("card");
  19020. return (_ctx, _cache) => {
  19021. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).is(`${__props.shadow || (0, vue.unref)(globalConfig)?.shadow || "always"}-shadow`)]) }, [
  19022. _ctx.$slots.header || __props.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  19023. key: 0,
  19024. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("header"), __props.headerClass])
  19025. }, [(0, vue.renderSlot)(_ctx.$slots, "header", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.header), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  19026. (0, vue.createElementVNode)("div", {
  19027. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("body"), __props.bodyClass]),
  19028. style: (0, vue.normalizeStyle)(__props.bodyStyle)
  19029. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6),
  19030. _ctx.$slots.footer || __props.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  19031. key: 1,
  19032. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("footer"), __props.footerClass])
  19033. }, [(0, vue.renderSlot)(_ctx.$slots, "footer", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.footer), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true)
  19034. ], 2);
  19035. };
  19036. }
  19037. });
  19038. //#endregion
  19039. //#region ../../packages/components/card/src/card.vue
  19040. var card_default = card_vue_vue_type_script_setup_true_lang_default;
  19041. //#endregion
  19042. //#region ../../packages/components/card/index.ts
  19043. const ElCard = withInstall(card_default);
  19044. //#endregion
  19045. //#region ../../packages/components/carousel/src/carousel.ts
  19046. const carouselProps = buildProps({
  19047. initialIndex: {
  19048. type: Number,
  19049. default: 0
  19050. },
  19051. height: {
  19052. type: String,
  19053. default: ""
  19054. },
  19055. trigger: {
  19056. type: String,
  19057. values: ["hover", "click"],
  19058. default: "hover"
  19059. },
  19060. autoplay: {
  19061. type: Boolean,
  19062. default: true
  19063. },
  19064. interval: {
  19065. type: Number,
  19066. default: 3e3
  19067. },
  19068. indicatorPosition: {
  19069. type: String,
  19070. values: [
  19071. "",
  19072. "none",
  19073. "outside"
  19074. ],
  19075. default: ""
  19076. },
  19077. arrow: {
  19078. type: String,
  19079. values: [
  19080. "always",
  19081. "hover",
  19082. "never"
  19083. ],
  19084. default: "hover"
  19085. },
  19086. type: {
  19087. type: String,
  19088. values: ["", "card"],
  19089. default: ""
  19090. },
  19091. cardScale: {
  19092. type: Number,
  19093. default: .83
  19094. },
  19095. loop: {
  19096. type: Boolean,
  19097. default: true
  19098. },
  19099. direction: {
  19100. type: String,
  19101. values: ["horizontal", "vertical"],
  19102. default: "horizontal"
  19103. },
  19104. pauseOnHover: {
  19105. type: Boolean,
  19106. default: true
  19107. },
  19108. motionBlur: Boolean
  19109. });
  19110. const carouselEmits = { change: (current, prev) => [current, prev].every(isNumber) };
  19111. //#endregion
  19112. //#region ../../packages/components/carousel/src/constants.ts
  19113. const carouselContextKey = Symbol("carouselContextKey");
  19114. const CAROUSEL_ITEM_NAME = "ElCarouselItem";
  19115. //#endregion
  19116. //#region ../../packages/components/carousel/src/use-carousel.ts
  19117. const THROTTLE_TIME = 300;
  19118. const useCarousel = (props, emit, componentName) => {
  19119. const { children: items, addChild: addItem, removeChild: removeItem, ChildrenSorter: ItemsSorter } = useOrderedChildren((0, vue.getCurrentInstance)(), CAROUSEL_ITEM_NAME);
  19120. const slots = (0, vue.useSlots)();
  19121. const activeIndex = (0, vue.ref)(-1);
  19122. const timer = (0, vue.ref)(null);
  19123. const hover = (0, vue.ref)(false);
  19124. const root = (0, vue.ref)();
  19125. const containerHeight = (0, vue.ref)(0);
  19126. const isItemsTwoLength = (0, vue.ref)(true);
  19127. const arrowDisplay = (0, vue.computed)(() => props.arrow !== "never" && !(0, vue.unref)(isVertical));
  19128. const hasLabel = (0, vue.computed)(() => {
  19129. return items.value.some((item) => item.props.label.toString().length > 0);
  19130. });
  19131. const isCardType = (0, vue.computed)(() => props.type === "card");
  19132. const isVertical = (0, vue.computed)(() => props.direction === "vertical");
  19133. const containerStyle = (0, vue.computed)(() => {
  19134. if (props.height !== "auto") return { height: props.height };
  19135. return {
  19136. height: `${containerHeight.value}px`,
  19137. overflow: "hidden"
  19138. };
  19139. });
  19140. const throttledArrowClick = throttle((index) => {
  19141. setActiveItem(index);
  19142. }, THROTTLE_TIME, { trailing: true });
  19143. const throttledIndicatorHover = throttle((index) => {
  19144. handleIndicatorHover(index);
  19145. }, THROTTLE_TIME);
  19146. const isTwoLengthShow = (index) => {
  19147. if (!isItemsTwoLength.value) return true;
  19148. return activeIndex.value <= 1 ? index <= 1 : index > 1;
  19149. };
  19150. function pauseTimer() {
  19151. if (timer.value) {
  19152. clearInterval(timer.value);
  19153. timer.value = null;
  19154. }
  19155. }
  19156. function startTimer() {
  19157. if (props.interval <= 0 || !props.autoplay || timer.value) return;
  19158. timer.value = setInterval(() => playSlides(), props.interval);
  19159. }
  19160. const playSlides = () => {
  19161. if (activeIndex.value < items.value.length - 1) activeIndex.value = activeIndex.value + 1;
  19162. else if (props.loop) activeIndex.value = 0;
  19163. };
  19164. function setActiveItem(index) {
  19165. if (isString(index)) {
  19166. const filteredItems = items.value.filter((item) => item.props.name === index);
  19167. if (filteredItems.length > 0) index = items.value.indexOf(filteredItems[0]);
  19168. }
  19169. index = Number(index);
  19170. if (Number.isNaN(index) || index !== Math.floor(index)) {
  19171. /* @__PURE__ */ debugWarn(componentName, "index must be integer.");
  19172. return;
  19173. }
  19174. const itemCount = items.value.length;
  19175. const oldIndex = activeIndex.value;
  19176. if (index < 0) activeIndex.value = props.loop ? itemCount - 1 : 0;
  19177. else if (index >= itemCount) activeIndex.value = props.loop ? 0 : itemCount - 1;
  19178. else activeIndex.value = index;
  19179. if (oldIndex === activeIndex.value) resetItemPosition(oldIndex);
  19180. resetTimer();
  19181. }
  19182. function resetItemPosition(oldIndex) {
  19183. items.value.forEach((item, index) => {
  19184. item.translateItem(index, activeIndex.value, oldIndex);
  19185. });
  19186. }
  19187. function itemInStage(item, index) {
  19188. const _items = (0, vue.unref)(items);
  19189. const itemCount = _items.length;
  19190. if (itemCount === 0 || !item.states.inStage) return false;
  19191. const nextItemIndex = index + 1;
  19192. const prevItemIndex = index - 1;
  19193. const lastItemIndex = itemCount - 1;
  19194. const isLastItemActive = _items[lastItemIndex].states.active;
  19195. const isFirstItemActive = _items[0].states.active;
  19196. const isNextItemActive = _items[nextItemIndex]?.states?.active;
  19197. const isPrevItemActive = _items[prevItemIndex]?.states?.active;
  19198. if (index === lastItemIndex && isFirstItemActive || isNextItemActive) return "left";
  19199. else if (index === 0 && isLastItemActive || isPrevItemActive) return "right";
  19200. return false;
  19201. }
  19202. function handleMouseEnter() {
  19203. hover.value = true;
  19204. if (props.pauseOnHover) pauseTimer();
  19205. }
  19206. function handleMouseLeave() {
  19207. hover.value = false;
  19208. startTimer();
  19209. }
  19210. function handleButtonEnter(arrow) {
  19211. if ((0, vue.unref)(isVertical)) return;
  19212. items.value.forEach((item, index) => {
  19213. if (arrow === itemInStage(item, index)) item.states.hover = true;
  19214. });
  19215. }
  19216. function handleButtonLeave() {
  19217. if ((0, vue.unref)(isVertical)) return;
  19218. items.value.forEach((item) => {
  19219. item.states.hover = false;
  19220. });
  19221. }
  19222. function handleIndicatorClick(index) {
  19223. activeIndex.value = index;
  19224. }
  19225. function handleIndicatorHover(index) {
  19226. if (props.trigger === "hover" && index !== activeIndex.value) activeIndex.value = index;
  19227. }
  19228. function prev() {
  19229. setActiveItem(activeIndex.value - 1);
  19230. }
  19231. function next() {
  19232. setActiveItem(activeIndex.value + 1);
  19233. }
  19234. function resetTimer() {
  19235. pauseTimer();
  19236. if (!props.pauseOnHover || !hover.value) startTimer();
  19237. }
  19238. function setContainerHeight(height) {
  19239. if (props.height !== "auto") return;
  19240. containerHeight.value = height;
  19241. }
  19242. function PlaceholderItem() {
  19243. const defaultSlots = slots.default?.();
  19244. if (!defaultSlots) return null;
  19245. const normalizeSlots = flattedChildren(defaultSlots).filter((slot) => {
  19246. return (0, vue.isVNode)(slot) && slot.type.name === "ElCarouselItem";
  19247. });
  19248. if (normalizeSlots?.length === 2 && props.loop && !isCardType.value) {
  19249. isItemsTwoLength.value = true;
  19250. return normalizeSlots;
  19251. }
  19252. isItemsTwoLength.value = false;
  19253. return null;
  19254. }
  19255. (0, vue.watch)(() => activeIndex.value, (current, prev) => {
  19256. resetItemPosition(prev);
  19257. if (isItemsTwoLength.value) {
  19258. current = current % 2;
  19259. prev = prev % 2;
  19260. }
  19261. if (prev > -1) emit(CHANGE_EVENT, current, prev);
  19262. });
  19263. const exposeActiveIndex = (0, vue.computed)({
  19264. get: () => {
  19265. return isItemsTwoLength.value ? activeIndex.value % 2 : activeIndex.value;
  19266. },
  19267. set: (value) => activeIndex.value = value
  19268. });
  19269. (0, vue.watch)(() => props.autoplay, (autoplay) => {
  19270. autoplay ? startTimer() : pauseTimer();
  19271. });
  19272. (0, vue.watch)(() => props.loop, () => {
  19273. setActiveItem(activeIndex.value);
  19274. });
  19275. (0, vue.watch)(() => props.interval, () => {
  19276. resetTimer();
  19277. });
  19278. const resizeObserver = (0, vue.shallowRef)();
  19279. (0, vue.onMounted)(() => {
  19280. (0, vue.watch)(() => items.value, () => {
  19281. if (items.value.length > 0) setActiveItem(props.initialIndex);
  19282. }, { immediate: true });
  19283. resizeObserver.value = useResizeObserver(root.value, () => {
  19284. resetItemPosition();
  19285. });
  19286. startTimer();
  19287. });
  19288. (0, vue.onBeforeUnmount)(() => {
  19289. pauseTimer();
  19290. if (root.value && resizeObserver.value) resizeObserver.value.stop();
  19291. });
  19292. (0, vue.provide)(carouselContextKey, {
  19293. root,
  19294. isCardType,
  19295. isVertical,
  19296. items,
  19297. loop: props.loop,
  19298. cardScale: props.cardScale,
  19299. addItem,
  19300. removeItem,
  19301. setActiveItem,
  19302. setContainerHeight
  19303. });
  19304. return {
  19305. root,
  19306. activeIndex,
  19307. exposeActiveIndex,
  19308. arrowDisplay,
  19309. hasLabel,
  19310. hover,
  19311. isCardType,
  19312. items,
  19313. isVertical,
  19314. containerStyle,
  19315. isItemsTwoLength,
  19316. handleButtonEnter,
  19317. handleButtonLeave,
  19318. handleIndicatorClick,
  19319. handleMouseEnter,
  19320. handleMouseLeave,
  19321. setActiveItem,
  19322. prev,
  19323. next,
  19324. PlaceholderItem,
  19325. isTwoLengthShow,
  19326. ItemsSorter,
  19327. throttledArrowClick,
  19328. throttledIndicatorHover
  19329. };
  19330. };
  19331. //#endregion
  19332. //#region ../../packages/components/carousel/src/carousel.vue?vue&type=script&setup=true&lang.ts
  19333. const _hoisted_1$65 = ["aria-label"];
  19334. const _hoisted_2$36 = ["aria-label"];
  19335. const _hoisted_3$17 = ["onMouseenter", "onClick"];
  19336. const _hoisted_4$12 = ["aria-label"];
  19337. const _hoisted_5$9 = { key: 0 };
  19338. const _hoisted_6$4 = {
  19339. key: 2,
  19340. xmlns: "http://www.w3.org/2000/svg",
  19341. version: "1.1",
  19342. style: { "display": "none" }
  19343. };
  19344. const COMPONENT_NAME$11 = "ElCarousel";
  19345. var carousel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  19346. name: COMPONENT_NAME$11,
  19347. __name: "carousel",
  19348. props: carouselProps,
  19349. emits: carouselEmits,
  19350. setup(__props, { expose: __expose, emit: __emit }) {
  19351. const props = __props;
  19352. const { root, activeIndex, exposeActiveIndex, arrowDisplay, hasLabel, hover, isCardType, items, isVertical, containerStyle, handleButtonEnter, handleButtonLeave, handleIndicatorClick, handleMouseEnter, handleMouseLeave, setActiveItem, prev, next, PlaceholderItem, isTwoLengthShow, ItemsSorter, throttledArrowClick, throttledIndicatorHover } = useCarousel(props, __emit, COMPONENT_NAME$11);
  19353. const ns = useNamespace("carousel");
  19354. const { t } = useLocale();
  19355. const carouselClasses = (0, vue.computed)(() => {
  19356. const classes = [ns.b(), ns.m(props.direction)];
  19357. if ((0, vue.unref)(isCardType)) classes.push(ns.m("card"));
  19358. classes.push(ns.is("vertical-outside", (0, vue.unref)(isVertical) && props.indicatorPosition === "outside"));
  19359. return classes;
  19360. });
  19361. const indicatorsClasses = (0, vue.computed)(() => {
  19362. const classes = [ns.e("indicators"), ns.em("indicators", props.direction)];
  19363. if ((0, vue.unref)(hasLabel)) classes.push(ns.em("indicators", "labels"));
  19364. if (props.indicatorPosition === "outside") classes.push(ns.em("indicators", "outside"));
  19365. if ((0, vue.unref)(isVertical)) classes.push(ns.em("indicators", "right"));
  19366. return classes;
  19367. });
  19368. function handleTransitionStart(e) {
  19369. if (!props.motionBlur) return;
  19370. const kls = (0, vue.unref)(isVertical) ? `${ns.namespace.value}-transitioning-vertical` : `${ns.namespace.value}-transitioning`;
  19371. e.currentTarget.classList.add(kls);
  19372. }
  19373. function handleTransitionEnd(e) {
  19374. if (!props.motionBlur) return;
  19375. const kls = (0, vue.unref)(isVertical) ? `${ns.namespace.value}-transitioning-vertical` : `${ns.namespace.value}-transitioning`;
  19376. e.currentTarget.classList.remove(kls);
  19377. }
  19378. __expose({
  19379. activeIndex: exposeActiveIndex,
  19380. setActiveItem,
  19381. prev,
  19382. next
  19383. });
  19384. return (_ctx, _cache) => {
  19385. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  19386. ref_key: "root",
  19387. ref: root,
  19388. class: (0, vue.normalizeClass)(carouselClasses.value),
  19389. onMouseenter: _cache[6] || (_cache[6] = (0, vue.withModifiers)((...args) => (0, vue.unref)(handleMouseEnter) && (0, vue.unref)(handleMouseEnter)(...args), ["stop"])),
  19390. onMouseleave: _cache[7] || (_cache[7] = (0, vue.withModifiers)((...args) => (0, vue.unref)(handleMouseLeave) && (0, vue.unref)(handleMouseLeave)(...args), ["stop"]))
  19391. }, [
  19392. (0, vue.unref)(arrowDisplay) ? ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
  19393. key: 0,
  19394. name: "carousel-arrow-left",
  19395. persisted: ""
  19396. }, {
  19397. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("button", {
  19398. type: "button",
  19399. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("arrow"), (0, vue.unref)(ns).em("arrow", "left")]),
  19400. "aria-label": (0, vue.unref)(t)("el.carousel.leftArrow"),
  19401. onMouseenter: _cache[0] || (_cache[0] = ($event) => (0, vue.unref)(handleButtonEnter)("left")),
  19402. onMouseleave: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleButtonLeave) && (0, vue.unref)(handleButtonLeave)(...args)),
  19403. onClick: _cache[2] || (_cache[2] = (0, vue.withModifiers)(($event) => (0, vue.unref)(throttledArrowClick)((0, vue.unref)(activeIndex) - 1), ["stop"]))
  19404. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  19405. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
  19406. _: 1
  19407. })], 42, _hoisted_1$65), [[vue.vShow, (__props.arrow === "always" || (0, vue.unref)(hover)) && (__props.loop || (0, vue.unref)(activeIndex) > 0)]])]),
  19408. _: 1
  19409. })) : (0, vue.createCommentVNode)("v-if", true),
  19410. (0, vue.unref)(arrowDisplay) ? ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
  19411. key: 1,
  19412. name: "carousel-arrow-right",
  19413. persisted: ""
  19414. }, {
  19415. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("button", {
  19416. type: "button",
  19417. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("arrow"), (0, vue.unref)(ns).em("arrow", "right")]),
  19418. "aria-label": (0, vue.unref)(t)("el.carousel.rightArrow"),
  19419. onMouseenter: _cache[3] || (_cache[3] = ($event) => (0, vue.unref)(handleButtonEnter)("right")),
  19420. onMouseleave: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleButtonLeave) && (0, vue.unref)(handleButtonLeave)(...args)),
  19421. onClick: _cache[5] || (_cache[5] = (0, vue.withModifiers)(($event) => (0, vue.unref)(throttledArrowClick)((0, vue.unref)(activeIndex) + 1), ["stop"]))
  19422. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  19423. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
  19424. _: 1
  19425. })], 42, _hoisted_2$36), [[vue.vShow, (__props.arrow === "always" || (0, vue.unref)(hover)) && (__props.loop || (0, vue.unref)(activeIndex) < (0, vue.unref)(items).length - 1)]])]),
  19426. _: 1
  19427. })) : (0, vue.createCommentVNode)("v-if", true),
  19428. (0, vue.createElementVNode)("div", {
  19429. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("container")),
  19430. style: (0, vue.normalizeStyle)((0, vue.unref)(containerStyle)),
  19431. onTransitionstart: handleTransitionStart,
  19432. onTransitionend: handleTransitionEnd
  19433. }, [(0, vue.createVNode)((0, vue.unref)(PlaceholderItem)), (0, vue.renderSlot)(_ctx.$slots, "default")], 38),
  19434. (0, vue.createVNode)((0, vue.unref)(ItemsSorter), null, {
  19435. default: (0, vue.withCtx)(() => [__props.indicatorPosition !== "none" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
  19436. key: 0,
  19437. class: (0, vue.normalizeClass)(indicatorsClasses.value)
  19438. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(items), (item, index) => {
  19439. return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  19440. key: index,
  19441. class: (0, vue.normalizeClass)([
  19442. (0, vue.unref)(ns).e("indicator"),
  19443. (0, vue.unref)(ns).em("indicator", __props.direction),
  19444. (0, vue.unref)(ns).is("active", index === (0, vue.unref)(activeIndex))
  19445. ]),
  19446. onMouseenter: ($event) => (0, vue.unref)(throttledIndicatorHover)(index),
  19447. onClick: (0, vue.withModifiers)(($event) => (0, vue.unref)(handleIndicatorClick)(index), ["stop"])
  19448. }, [(0, vue.createElementVNode)("button", {
  19449. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("button")),
  19450. "aria-label": (0, vue.unref)(t)("el.carousel.indicator", { index: index + 1 })
  19451. }, [(0, vue.unref)(hasLabel) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_5$9, (0, vue.toDisplayString)(item.props.label), 1)) : (0, vue.createCommentVNode)("v-if", true)], 10, _hoisted_4$12)], 42, _hoisted_3$17)), [[vue.vShow, (0, vue.unref)(isTwoLengthShow)(index)]]);
  19452. }), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true)]),
  19453. _: 1
  19454. }),
  19455. __props.motionBlur ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_6$4, [..._cache[8] || (_cache[8] = [(0, vue.createElementVNode)("defs", null, [(0, vue.createElementVNode)("filter", { id: "elCarouselHorizontal" }, [(0, vue.createElementVNode)("feGaussianBlur", {
  19456. in: "SourceGraphic",
  19457. stdDeviation: "12,0"
  19458. })]), (0, vue.createElementVNode)("filter", { id: "elCarouselVertical" }, [(0, vue.createElementVNode)("feGaussianBlur", {
  19459. in: "SourceGraphic",
  19460. stdDeviation: "0,10"
  19461. })])], -1)])])) : (0, vue.createCommentVNode)("v-if", true)
  19462. ], 34);
  19463. };
  19464. }
  19465. });
  19466. //#endregion
  19467. //#region ../../packages/components/carousel/src/carousel.vue
  19468. var carousel_default = carousel_vue_vue_type_script_setup_true_lang_default;
  19469. //#endregion
  19470. //#region ../../packages/components/carousel/src/carousel-item.ts
  19471. const carouselItemProps = buildProps({
  19472. name: {
  19473. type: String,
  19474. default: ""
  19475. },
  19476. label: {
  19477. type: [String, Number],
  19478. default: ""
  19479. }
  19480. });
  19481. //#endregion
  19482. //#region ../../packages/components/carousel/src/use-carousel-item.ts
  19483. const useCarouselItem = (props) => {
  19484. const carouselContext = (0, vue.inject)(carouselContextKey);
  19485. const instance = (0, vue.getCurrentInstance)();
  19486. if (!carouselContext) /* @__PURE__ */ debugWarn(CAROUSEL_ITEM_NAME, "usage: <el-carousel></el-carousel-item></el-carousel>");
  19487. if (!instance) /* @__PURE__ */ debugWarn(CAROUSEL_ITEM_NAME, "compositional hook can only be invoked inside setups");
  19488. const carouselItemRef = (0, vue.ref)();
  19489. const hover = (0, vue.ref)(false);
  19490. const translate = (0, vue.ref)(0);
  19491. const scale = (0, vue.ref)(1);
  19492. const active = (0, vue.ref)(false);
  19493. const ready = (0, vue.ref)(false);
  19494. const inStage = (0, vue.ref)(false);
  19495. const animating = (0, vue.ref)(false);
  19496. const { isCardType, isVertical, cardScale } = carouselContext;
  19497. function processIndex(index, activeIndex, length) {
  19498. const lastItemIndex = length - 1;
  19499. const prevItemIndex = activeIndex - 1;
  19500. const nextItemIndex = activeIndex + 1;
  19501. const halfItemIndex = length / 2;
  19502. if (activeIndex === 0 && index === lastItemIndex) return -1;
  19503. else if (activeIndex === lastItemIndex && index === 0) return length;
  19504. else if (index < prevItemIndex && activeIndex - index >= halfItemIndex) return length + 1;
  19505. else if (index > nextItemIndex && index - activeIndex >= halfItemIndex) return -2;
  19506. return index;
  19507. }
  19508. function calcCardTranslate(index, activeIndex) {
  19509. const parentWidth = (0, vue.unref)(isVertical) ? carouselContext.root.value?.offsetHeight || 0 : carouselContext.root.value?.offsetWidth || 0;
  19510. if (inStage.value) return parentWidth * ((2 - cardScale) * (index - activeIndex) + 1) / 4;
  19511. else if (index < activeIndex) return -(1 + cardScale) * parentWidth / 4;
  19512. else return (3 + cardScale) * parentWidth / 4;
  19513. }
  19514. function calcTranslate(index, activeIndex, isVertical) {
  19515. const rootEl = carouselContext.root.value;
  19516. if (!rootEl) return 0;
  19517. return ((isVertical ? rootEl.offsetHeight : rootEl.offsetWidth) || 0) * (index - activeIndex);
  19518. }
  19519. const translateItem = (index, activeIndex, oldIndex) => {
  19520. const _isCardType = (0, vue.unref)(isCardType);
  19521. const carouselItemLength = carouselContext.items.value.length ?? NaN;
  19522. const isActive = index === activeIndex;
  19523. if (!_isCardType && !isUndefined(oldIndex)) animating.value = isActive || index === oldIndex;
  19524. if (!isActive && carouselItemLength > 2 && carouselContext.loop) index = processIndex(index, activeIndex, carouselItemLength);
  19525. const _isVertical = (0, vue.unref)(isVertical);
  19526. active.value = isActive;
  19527. if (_isCardType) {
  19528. inStage.value = Math.round(Math.abs(index - activeIndex)) <= 1;
  19529. translate.value = calcCardTranslate(index, activeIndex);
  19530. scale.value = (0, vue.unref)(active) ? 1 : cardScale;
  19531. } else translate.value = calcTranslate(index, activeIndex, _isVertical);
  19532. ready.value = true;
  19533. if (isActive && carouselItemRef.value) carouselContext.setContainerHeight(carouselItemRef.value.offsetHeight);
  19534. };
  19535. function handleItemClick() {
  19536. if (carouselContext && (0, vue.unref)(isCardType)) {
  19537. const index = carouselContext.items.value.findIndex(({ uid }) => uid === instance.uid);
  19538. carouselContext.setActiveItem(index);
  19539. }
  19540. }
  19541. const carouselItemContext = {
  19542. props,
  19543. states: (0, vue.reactive)({
  19544. hover,
  19545. translate,
  19546. scale,
  19547. active,
  19548. ready,
  19549. inStage,
  19550. animating
  19551. }),
  19552. uid: instance.uid,
  19553. getVnode: () => instance.vnode,
  19554. translateItem
  19555. };
  19556. carouselContext.addItem(carouselItemContext);
  19557. (0, vue.onBeforeUnmount)(() => {
  19558. carouselContext.removeItem(carouselItemContext);
  19559. });
  19560. return {
  19561. carouselItemRef,
  19562. active,
  19563. animating,
  19564. hover,
  19565. inStage,
  19566. isVertical,
  19567. translate,
  19568. isCardType,
  19569. scale,
  19570. ready,
  19571. handleItemClick
  19572. };
  19573. };
  19574. //#endregion
  19575. //#region ../../packages/components/carousel/src/carousel-item.vue?vue&type=script&setup=true&lang.ts
  19576. var carousel_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  19577. name: CAROUSEL_ITEM_NAME,
  19578. __name: "carousel-item",
  19579. props: carouselItemProps,
  19580. setup(__props) {
  19581. const props = __props;
  19582. const ns = useNamespace("carousel");
  19583. const { carouselItemRef, active, animating, hover, inStage, isVertical, translate, isCardType, scale, ready, handleItemClick } = useCarouselItem(props);
  19584. const itemKls = (0, vue.computed)(() => [
  19585. ns.e("item"),
  19586. ns.is("active", active.value),
  19587. ns.is("in-stage", inStage.value),
  19588. ns.is("hover", hover.value),
  19589. ns.is("animating", animating.value),
  19590. {
  19591. [ns.em("item", "card")]: isCardType.value,
  19592. [ns.em("item", "card-vertical")]: isCardType.value && isVertical.value
  19593. }
  19594. ]);
  19595. const itemStyle = (0, vue.computed)(() => {
  19596. return { transform: [`${`translate${(0, vue.unref)(isVertical) ? "Y" : "X"}`}(${(0, vue.unref)(translate)}px)`, `scale(${(0, vue.unref)(scale)})`].join(" ") };
  19597. });
  19598. return (_ctx, _cache) => {
  19599. return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  19600. ref_key: "carouselItemRef",
  19601. ref: carouselItemRef,
  19602. class: (0, vue.normalizeClass)(itemKls.value),
  19603. style: (0, vue.normalizeStyle)(itemStyle.value),
  19604. onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleItemClick) && (0, vue.unref)(handleItemClick)(...args))
  19605. }, [(0, vue.unref)(isCardType) ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  19606. key: 0,
  19607. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("mask"))
  19608. }, null, 2)), [[vue.vShow, !(0, vue.unref)(active)]]) : (0, vue.createCommentVNode)("v-if", true), (0, vue.renderSlot)(_ctx.$slots, "default")], 6)), [[vue.vShow, (0, vue.unref)(ready)]]);
  19609. };
  19610. }
  19611. });
  19612. //#endregion
  19613. //#region ../../packages/components/carousel/src/carousel-item.vue
  19614. var carousel_item_default = carousel_item_vue_vue_type_script_setup_true_lang_default;
  19615. //#endregion
  19616. //#region ../../packages/components/carousel/index.ts
  19617. const ElCarousel = withInstall(carousel_default, { CarouselItem: carousel_item_default });
  19618. const ElCarouselItem = withNoopInstall(carousel_item_default);
  19619. //#endregion
  19620. //#region ../../packages/components/cascader-panel/src/config.ts
  19621. const CASCADER_PANEL_ITEM_SIZE = 34;
  19622. const CASCADER_PANEL_HEIGHT = 204;
  19623. const CommonProps = buildProps({
  19624. modelValue: { type: definePropType([
  19625. Number,
  19626. String,
  19627. Array,
  19628. Object
  19629. ]) },
  19630. options: {
  19631. type: definePropType(Array),
  19632. default: () => []
  19633. },
  19634. props: {
  19635. type: definePropType(Object),
  19636. default: () => ({})
  19637. },
  19638. virtualScroll: Boolean,
  19639. itemSize: {
  19640. type: Number,
  19641. default: 34
  19642. },
  19643. height: {
  19644. type: Number,
  19645. default: 204
  19646. }
  19647. });
  19648. const DefaultProps = {
  19649. expandTrigger: "click",
  19650. multiple: false,
  19651. checkStrictly: false,
  19652. emitPath: true,
  19653. lazy: false,
  19654. lazyLoad: NOOP,
  19655. value: "value",
  19656. label: "label",
  19657. children: "children",
  19658. leaf: "leaf",
  19659. disabled: "disabled",
  19660. hoverThreshold: 500,
  19661. checkOnClickNode: false,
  19662. checkOnClickLeaf: true,
  19663. showPrefix: true
  19664. };
  19665. const cascaderPanelProps = buildProps({
  19666. ...CommonProps,
  19667. border: {
  19668. type: Boolean,
  19669. default: true
  19670. },
  19671. renderLabel: { type: Function }
  19672. });
  19673. const emitChangeFn$2 = (value) => true;
  19674. const cascaderPanelEmits = {
  19675. [UPDATE_MODEL_EVENT]: emitChangeFn$2,
  19676. [CHANGE_EVENT]: emitChangeFn$2,
  19677. close: () => true,
  19678. "expand-change": (value) => value
  19679. };
  19680. const useCascaderConfig = (props) => {
  19681. return (0, vue.computed)(() => ({
  19682. ...DefaultProps,
  19683. ...props.props
  19684. }));
  19685. };
  19686. //#endregion
  19687. //#region ../../node_modules/.pnpm/memoize-one@6.0.0/node_modules/memoize-one/dist/memoize-one.esm.js
  19688. var safeIsNaN = Number.isNaN || function ponyfill(value) {
  19689. return typeof value === "number" && value !== value;
  19690. };
  19691. function isEqual(first, second) {
  19692. if (first === second) return true;
  19693. if (safeIsNaN(first) && safeIsNaN(second)) return true;
  19694. return false;
  19695. }
  19696. function areInputsEqual(newInputs, lastInputs) {
  19697. if (newInputs.length !== lastInputs.length) return false;
  19698. for (var i = 0; i < newInputs.length; i++) if (!isEqual(newInputs[i], lastInputs[i])) return false;
  19699. return true;
  19700. }
  19701. function memoizeOne(resultFn, isEqual) {
  19702. if (isEqual === void 0) isEqual = areInputsEqual;
  19703. var cache = null;
  19704. function memoized() {
  19705. var newArgs = [];
  19706. for (var _i = 0; _i < arguments.length; _i++) newArgs[_i] = arguments[_i];
  19707. if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) return cache.lastResult;
  19708. var lastResult = resultFn.apply(this, newArgs);
  19709. cache = {
  19710. lastResult,
  19711. lastArgs: newArgs,
  19712. lastThis: this
  19713. };
  19714. return lastResult;
  19715. }
  19716. memoized.clear = function clear() {
  19717. cache = null;
  19718. };
  19719. return memoized;
  19720. }
  19721. //#endregion
  19722. //#region ../../packages/components/virtual-list/src/hooks/use-cache.ts
  19723. const useCache = () => {
  19724. const props = (0, vue.getCurrentInstance)().proxy.$props;
  19725. return (0, vue.computed)(() => {
  19726. const _getItemStyleCache = (_, __, ___) => ({});
  19727. return props.perfMode ? memoize(_getItemStyleCache) : memoizeOne(_getItemStyleCache);
  19728. });
  19729. };
  19730. //#endregion
  19731. //#region ../../packages/components/virtual-list/src/defaults.ts
  19732. const ITEM_RENDER_EVT = "itemRendered";
  19733. const SCROLL_EVT = "scroll";
  19734. const END_REACHED_EVT = "end-reached";
  19735. const FORWARD = "forward";
  19736. const BACKWARD = "backward";
  19737. const AUTO_ALIGNMENT = "auto";
  19738. const SMART_ALIGNMENT = "smart";
  19739. const START_ALIGNMENT = "start";
  19740. const CENTERED_ALIGNMENT = "center";
  19741. const HORIZONTAL = "horizontal";
  19742. const VERTICAL = "vertical";
  19743. const RTL_OFFSET_NAG = "negative";
  19744. const RTL_OFFSET_POS_ASC = "positive-ascending";
  19745. const RTL_OFFSET_POS_DESC = "positive-descending";
  19746. const ScrollbarDirKey = {
  19747. [HORIZONTAL]: "left",
  19748. [VERTICAL]: "top"
  19749. };
  19750. //#endregion
  19751. //#region ../../packages/components/virtual-list/src/hooks/use-wheel.ts
  19752. const useWheel = ({ atEndEdge, atStartEdge, layout }, onWheelDelta) => {
  19753. let frameHandle;
  19754. let offset = 0;
  19755. const hasReachedEdge = (offset) => {
  19756. return offset < 0 && atStartEdge.value || offset > 0 && atEndEdge.value;
  19757. };
  19758. const onWheel = (e) => {
  19759. cAF(frameHandle);
  19760. let { deltaX, deltaY } = e;
  19761. if (e.shiftKey && deltaY !== 0) {
  19762. deltaX = deltaY;
  19763. deltaY = 0;
  19764. }
  19765. const newOffset = layout.value === "horizontal" ? deltaX : deltaY;
  19766. if (hasReachedEdge(newOffset)) return;
  19767. offset += newOffset;
  19768. if (!isFirefox() && newOffset !== 0) e.preventDefault();
  19769. frameHandle = rAF(() => {
  19770. onWheelDelta(offset);
  19771. offset = 0;
  19772. });
  19773. };
  19774. return {
  19775. hasReachedEdge,
  19776. onWheel
  19777. };
  19778. };
  19779. //#endregion
  19780. //#region ../../packages/components/virtual-list/src/props.ts
  19781. const itemSize$1 = buildProp({
  19782. type: definePropType([Number, Function]),
  19783. required: true
  19784. });
  19785. const estimatedItemSize = buildProp({ type: Number });
  19786. const cache = buildProp({
  19787. type: Number,
  19788. default: 2
  19789. });
  19790. const direction = buildProp({
  19791. type: String,
  19792. values: ["ltr", "rtl"],
  19793. default: "ltr"
  19794. });
  19795. const initScrollOffset = buildProp({
  19796. type: Number,
  19797. default: 0
  19798. });
  19799. const total = buildProp({
  19800. type: Number,
  19801. required: true
  19802. });
  19803. const layout = buildProp({
  19804. type: String,
  19805. values: ["horizontal", "vertical"],
  19806. default: VERTICAL
  19807. });
  19808. const virtualizedProps = buildProps({
  19809. className: {
  19810. type: String,
  19811. default: ""
  19812. },
  19813. containerElement: {
  19814. type: definePropType([String, Object]),
  19815. default: "div"
  19816. },
  19817. data: {
  19818. type: definePropType(Array),
  19819. default: () => mutable([])
  19820. },
  19821. direction,
  19822. height: {
  19823. type: [String, Number],
  19824. required: true
  19825. },
  19826. innerElement: {
  19827. type: [String, Object],
  19828. default: "div"
  19829. },
  19830. innerProps: {
  19831. type: definePropType(Object),
  19832. default: () => ({})
  19833. },
  19834. style: {
  19835. type: definePropType([
  19836. Object,
  19837. String,
  19838. Array,
  19839. Boolean
  19840. ]),
  19841. default: void 0
  19842. },
  19843. useIsScrolling: Boolean,
  19844. width: {
  19845. type: [Number, String],
  19846. required: false
  19847. },
  19848. innerWidth: {
  19849. type: [Number, String],
  19850. required: false
  19851. },
  19852. perfMode: {
  19853. type: Boolean,
  19854. default: true
  19855. },
  19856. scrollbarAlwaysOn: Boolean
  19857. });
  19858. const virtualizedListProps = buildProps({
  19859. cache,
  19860. estimatedItemSize,
  19861. layout,
  19862. initScrollOffset,
  19863. total,
  19864. itemSize: itemSize$1,
  19865. ...virtualizedProps
  19866. });
  19867. const scrollbarSize = {
  19868. type: Number,
  19869. default: 6
  19870. };
  19871. const startGap = {
  19872. type: Number,
  19873. default: 0
  19874. };
  19875. const endGap = {
  19876. type: Number,
  19877. default: 2
  19878. };
  19879. const virtualizedGridProps = buildProps({
  19880. columnCache: cache,
  19881. columnWidth: itemSize$1,
  19882. estimatedColumnWidth: estimatedItemSize,
  19883. estimatedRowHeight: estimatedItemSize,
  19884. initScrollLeft: initScrollOffset,
  19885. initScrollTop: initScrollOffset,
  19886. itemKey: {
  19887. type: definePropType(Function),
  19888. default: ({ columnIndex, rowIndex }) => `${rowIndex}:${columnIndex}`
  19889. },
  19890. rowCache: cache,
  19891. rowHeight: itemSize$1,
  19892. totalColumn: total,
  19893. totalRow: total,
  19894. hScrollbarSize: scrollbarSize,
  19895. vScrollbarSize: scrollbarSize,
  19896. scrollbarStartGap: startGap,
  19897. scrollbarEndGap: endGap,
  19898. role: String,
  19899. ...virtualizedProps
  19900. });
  19901. const virtualizedScrollbarProps = buildProps({
  19902. alwaysOn: Boolean,
  19903. class: String,
  19904. layout,
  19905. total,
  19906. ratio: {
  19907. type: Number,
  19908. required: true
  19909. },
  19910. clientSize: {
  19911. type: Number,
  19912. required: true
  19913. },
  19914. scrollFrom: {
  19915. type: Number,
  19916. required: true
  19917. },
  19918. scrollbarSize,
  19919. startGap,
  19920. endGap,
  19921. visible: Boolean
  19922. });
  19923. //#endregion
  19924. //#region ../../packages/components/virtual-list/src/utils.ts
  19925. const getScrollDir = (prev, cur) => prev < cur ? FORWARD : BACKWARD;
  19926. const isHorizontal = (dir) => dir === "ltr" || dir === "rtl" || dir === "horizontal";
  19927. const isRTL = (dir) => dir === "rtl";
  19928. let cachedRTLResult = null;
  19929. function getRTLOffsetType(recalculate = false) {
  19930. if (cachedRTLResult === null || recalculate) {
  19931. const outerDiv = document.createElement("div");
  19932. const outerStyle = outerDiv.style;
  19933. outerStyle.width = "50px";
  19934. outerStyle.height = "50px";
  19935. outerStyle.overflow = "scroll";
  19936. outerStyle.direction = "rtl";
  19937. const innerDiv = document.createElement("div");
  19938. const innerStyle = innerDiv.style;
  19939. innerStyle.width = "100px";
  19940. innerStyle.height = "100px";
  19941. outerDiv.appendChild(innerDiv);
  19942. document.body.appendChild(outerDiv);
  19943. if (outerDiv.scrollLeft > 0) cachedRTLResult = RTL_OFFSET_POS_DESC;
  19944. else {
  19945. outerDiv.scrollLeft = 1;
  19946. if (outerDiv.scrollLeft === 0) cachedRTLResult = RTL_OFFSET_NAG;
  19947. else cachedRTLResult = RTL_OFFSET_POS_ASC;
  19948. }
  19949. document.body.removeChild(outerDiv);
  19950. return cachedRTLResult;
  19951. }
  19952. return cachedRTLResult;
  19953. }
  19954. function renderThumbStyle$1({ move, size, bar }, layout) {
  19955. const style = {};
  19956. const translate = `translate${bar.axis}(${move}px)`;
  19957. style[bar.size] = size;
  19958. style.transform = translate;
  19959. if (layout === "horizontal") style.height = "100%";
  19960. else style.width = "100%";
  19961. return style;
  19962. }
  19963. //#endregion
  19964. //#region ../../packages/components/virtual-list/src/components/scrollbar.ts
  19965. const ScrollBar = (0, vue.defineComponent)({
  19966. name: "ElVirtualScrollBar",
  19967. props: virtualizedScrollbarProps,
  19968. emits: [
  19969. "scroll",
  19970. "start-move",
  19971. "stop-move"
  19972. ],
  19973. setup(props, { emit }) {
  19974. const GAP = (0, vue.computed)(() => props.startGap + props.endGap);
  19975. const nsVirtualScrollbar = useNamespace("virtual-scrollbar");
  19976. const nsScrollbar = useNamespace("scrollbar");
  19977. const trackRef = (0, vue.ref)();
  19978. const thumbRef = (0, vue.ref)();
  19979. let frameHandle = null;
  19980. let onselectstartStore = null;
  19981. const state = (0, vue.reactive)({
  19982. isDragging: false,
  19983. traveled: 0
  19984. });
  19985. const bar = (0, vue.computed)(() => BAR_MAP[props.layout]);
  19986. const trackSize = (0, vue.computed)(() => props.clientSize - (0, vue.unref)(GAP));
  19987. const trackStyle = (0, vue.computed)(() => ({
  19988. position: "absolute",
  19989. width: `${"horizontal" === props.layout ? trackSize.value : props.scrollbarSize}px`,
  19990. height: `${"horizontal" === props.layout ? props.scrollbarSize : trackSize.value}px`,
  19991. [ScrollbarDirKey[props.layout]]: "2px",
  19992. right: "2px",
  19993. bottom: "2px",
  19994. borderRadius: "4px"
  19995. }));
  19996. const thumbSize = (0, vue.computed)(() => {
  19997. const ratio = props.ratio;
  19998. if (ratio >= 100) return Number.POSITIVE_INFINITY;
  19999. if (ratio >= 50) return ratio * trackSize.value / 100;
  20000. const SCROLLBAR_MAX_SIZE = trackSize.value / 3;
  20001. return Math.floor(Math.min(Math.max(ratio * trackSize.value / 100, 20), SCROLLBAR_MAX_SIZE));
  20002. });
  20003. const thumbStyle = (0, vue.computed)(() => {
  20004. if (!Number.isFinite(thumbSize.value)) return { display: "none" };
  20005. const thumb = `${thumbSize.value}px`;
  20006. return renderThumbStyle$1({
  20007. bar: bar.value,
  20008. size: thumb,
  20009. move: state.traveled
  20010. }, props.layout);
  20011. });
  20012. const totalSteps = (0, vue.computed)(() => Math.ceil(props.clientSize - thumbSize.value - (0, vue.unref)(GAP)));
  20013. const attachEvents = () => {
  20014. window.addEventListener("mousemove", onMouseMove);
  20015. window.addEventListener("mouseup", onMouseUp);
  20016. const thumbEl = (0, vue.unref)(thumbRef);
  20017. if (!thumbEl) return;
  20018. onselectstartStore = document.onselectstart;
  20019. document.onselectstart = () => false;
  20020. thumbEl.addEventListener("touchmove", onMouseMove, { passive: true });
  20021. thumbEl.addEventListener("touchend", onMouseUp);
  20022. };
  20023. const detachEvents = () => {
  20024. window.removeEventListener("mousemove", onMouseMove);
  20025. window.removeEventListener("mouseup", onMouseUp);
  20026. document.onselectstart = onselectstartStore;
  20027. onselectstartStore = null;
  20028. const thumbEl = (0, vue.unref)(thumbRef);
  20029. if (!thumbEl) return;
  20030. thumbEl.removeEventListener("touchmove", onMouseMove);
  20031. thumbEl.removeEventListener("touchend", onMouseUp);
  20032. };
  20033. const onThumbMouseDown = (e) => {
  20034. e.stopImmediatePropagation();
  20035. if (e.ctrlKey || [1, 2].includes(e.button)) return;
  20036. state.isDragging = true;
  20037. state[bar.value.axis] = e.currentTarget[bar.value.offset] - (e[bar.value.client] - e.currentTarget.getBoundingClientRect()[bar.value.direction]);
  20038. emit("start-move");
  20039. attachEvents();
  20040. };
  20041. const onMouseUp = () => {
  20042. state.isDragging = false;
  20043. state[bar.value.axis] = 0;
  20044. emit("stop-move");
  20045. detachEvents();
  20046. };
  20047. const onMouseMove = (e) => {
  20048. const { isDragging } = state;
  20049. if (!isDragging) return;
  20050. if (!thumbRef.value || !trackRef.value) return;
  20051. const prevPage = state[bar.value.axis];
  20052. if (!prevPage) return;
  20053. cAF(frameHandle);
  20054. const distance = (trackRef.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1 - (thumbRef.value[bar.value.offset] - prevPage);
  20055. frameHandle = rAF(() => {
  20056. state.traveled = Math.max(0, Math.min(distance, totalSteps.value));
  20057. emit("scroll", distance, totalSteps.value);
  20058. });
  20059. };
  20060. const clickTrackHandler = (e) => {
  20061. const distance = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) - thumbRef.value[bar.value.offset] / 2;
  20062. state.traveled = Math.max(0, Math.min(distance, totalSteps.value));
  20063. emit("scroll", distance, totalSteps.value);
  20064. };
  20065. (0, vue.watch)(() => props.scrollFrom, (v) => {
  20066. if (state.isDragging) return;
  20067. state.traveled = Math.ceil(v * totalSteps.value);
  20068. });
  20069. (0, vue.onBeforeUnmount)(() => {
  20070. detachEvents();
  20071. });
  20072. return () => {
  20073. return (0, vue.h)("div", {
  20074. role: "presentation",
  20075. ref: trackRef,
  20076. class: [
  20077. nsVirtualScrollbar.b(),
  20078. props.class,
  20079. (props.alwaysOn || state.isDragging) && "always-on"
  20080. ],
  20081. style: trackStyle.value,
  20082. onMousedown: (0, vue.withModifiers)(clickTrackHandler, ["stop", "prevent"]),
  20083. onTouchstartPrevent: onThumbMouseDown
  20084. }, (0, vue.h)("div", {
  20085. ref: thumbRef,
  20086. class: nsScrollbar.e("thumb"),
  20087. style: thumbStyle.value,
  20088. onMousedown: onThumbMouseDown
  20089. }, []));
  20090. };
  20091. }
  20092. });
  20093. //#endregion
  20094. //#region ../../packages/components/virtual-list/src/builders/build-list.ts
  20095. const createList = ({ name, getOffset, getItemSize, getItemOffset, getEstimatedTotalSize, getStartIndexForOffset, getStopIndexForStartIndex, initCache, clearCache, validateProps }) => {
  20096. return (0, vue.defineComponent)({
  20097. name: name ?? "ElVirtualList",
  20098. props: virtualizedListProps,
  20099. emits: [
  20100. ITEM_RENDER_EVT,
  20101. SCROLL_EVT,
  20102. END_REACHED_EVT
  20103. ],
  20104. setup(props, { emit, expose }) {
  20105. validateProps(props);
  20106. const instance = (0, vue.getCurrentInstance)();
  20107. const ns = useNamespace("vl");
  20108. const dynamicSizeCache = (0, vue.ref)(initCache(props, instance));
  20109. const getItemStyleCache = useCache();
  20110. const windowRef = (0, vue.ref)();
  20111. const innerRef = (0, vue.ref)();
  20112. const scrollbarRef = (0, vue.ref)();
  20113. const states = (0, vue.ref)({
  20114. isScrolling: false,
  20115. scrollDir: FORWARD,
  20116. scrollOffset: isNumber(props.initScrollOffset) ? props.initScrollOffset : 0,
  20117. updateRequested: false,
  20118. isScrollbarDragging: false
  20119. });
  20120. const itemsToRender = (0, vue.computed)(() => {
  20121. const { total, cache } = props;
  20122. const { isScrolling, scrollDir, scrollOffset } = (0, vue.unref)(states);
  20123. if (total === 0) return [
  20124. 0,
  20125. 0,
  20126. 0,
  20127. 0
  20128. ];
  20129. const startIndex = getStartIndexForOffset(props, scrollOffset, (0, vue.unref)(dynamicSizeCache));
  20130. const stopIndex = getStopIndexForStartIndex(props, startIndex, scrollOffset, (0, vue.unref)(dynamicSizeCache));
  20131. const cacheBackward = !isScrolling || scrollDir === "backward" ? Math.max(1, cache) : 1;
  20132. const cacheForward = !isScrolling || scrollDir === "forward" ? Math.max(1, cache) : 1;
  20133. return [
  20134. Math.max(0, startIndex - cacheBackward),
  20135. Math.max(0, Math.min(total - 1, stopIndex + cacheForward)),
  20136. startIndex,
  20137. stopIndex
  20138. ];
  20139. });
  20140. const estimatedTotalSize = (0, vue.computed)(() => getEstimatedTotalSize(props, (0, vue.unref)(dynamicSizeCache)));
  20141. const _isHorizontal = (0, vue.computed)(() => isHorizontal(props.layout));
  20142. const windowStyle = (0, vue.computed)(() => [
  20143. {
  20144. position: "relative",
  20145. [`overflow-${_isHorizontal.value ? "x" : "y"}`]: "scroll",
  20146. WebkitOverflowScrolling: "touch",
  20147. willChange: "transform"
  20148. },
  20149. {
  20150. direction: props.direction,
  20151. height: isNumber(props.height) ? `${props.height}px` : props.height,
  20152. width: isNumber(props.width) ? `${props.width}px` : props.width
  20153. },
  20154. props.style
  20155. ]);
  20156. const innerStyle = (0, vue.computed)(() => {
  20157. const size = (0, vue.unref)(estimatedTotalSize);
  20158. const horizontal = (0, vue.unref)(_isHorizontal);
  20159. const innerWidth = props.innerWidth;
  20160. return {
  20161. height: horizontal ? "100%" : `${size}px`,
  20162. pointerEvents: (0, vue.unref)(states).isScrolling ? "none" : void 0,
  20163. width: horizontal ? `${size}px` : innerWidth !== void 0 ? isNumber(innerWidth) ? `${innerWidth}px` : innerWidth : "100%",
  20164. margin: 0,
  20165. boxSizing: "border-box"
  20166. };
  20167. });
  20168. const clientSize = (0, vue.computed)(() => _isHorizontal.value ? props.width : props.height);
  20169. const maxOffset = (0, vue.computed)(() => Math.max(0, estimatedTotalSize.value - clientSize.value));
  20170. const normalizeOffset = (offset) => clamp$2(offset, 0, maxOffset.value);
  20171. const EDGE_TOLERANCE = 1;
  20172. const getEdgeState = (normalizedOffset) => ({
  20173. start: !isGreaterThan(normalizedOffset, 0, EDGE_TOLERANCE),
  20174. end: !isGreaterThan(maxOffset.value, normalizedOffset, EDGE_TOLERANCE)
  20175. });
  20176. const normalizedScrollOffset = (0, vue.computed)(() => normalizeOffset(states.value.scrollOffset));
  20177. const currentEdgeState = (0, vue.computed)(() => getEdgeState(normalizedScrollOffset.value));
  20178. let edgeState = currentEdgeState.value;
  20179. const { onWheel } = useWheel({
  20180. atStartEdge: (0, vue.computed)(() => currentEdgeState.value.start),
  20181. atEndEdge: (0, vue.computed)(() => currentEdgeState.value.end),
  20182. layout: (0, vue.computed)(() => props.layout)
  20183. }, (offset) => {
  20184. scrollbarRef.value.onMouseUp?.();
  20185. scrollTo(Math.min(states.value.scrollOffset + offset, maxOffset.value));
  20186. });
  20187. useEventListener(windowRef, "wheel", onWheel, { passive: false });
  20188. const emitEvents = () => {
  20189. const { total } = props;
  20190. if (total > 0) {
  20191. const [cacheStart, cacheEnd, visibleStart, visibleEnd] = (0, vue.unref)(itemsToRender);
  20192. emit(ITEM_RENDER_EVT, cacheStart, cacheEnd, visibleStart, visibleEnd);
  20193. }
  20194. const { scrollDir, scrollOffset, updateRequested } = (0, vue.unref)(states);
  20195. emit(SCROLL_EVT, scrollDir, scrollOffset, updateRequested);
  20196. };
  20197. const emitEndReached = (direction, offset) => {
  20198. const nextEdgeState = getEdgeState(offset);
  20199. const horizontalEnd = props.direction === "rtl" ? "left" : "right";
  20200. const horizontalStart = props.direction === "rtl" ? "right" : "left";
  20201. if (direction === "forward" && nextEdgeState.end && !edgeState.end) emit(END_REACHED_EVT, _isHorizontal.value ? horizontalEnd : "bottom");
  20202. if (direction === "backward" && nextEdgeState.start && !edgeState.start) emit(END_REACHED_EVT, _isHorizontal.value ? horizontalStart : "top");
  20203. edgeState = nextEdgeState;
  20204. };
  20205. const updateScrollOffset = (offset, { isScrolling, updateRequested }) => {
  20206. const currentState = (0, vue.unref)(states);
  20207. const nextOffset = Math.max(offset, 0);
  20208. if (nextOffset === currentState.scrollOffset) return;
  20209. const scrollDir = getScrollDir(currentState.scrollOffset, nextOffset);
  20210. states.value = {
  20211. ...currentState,
  20212. isScrolling,
  20213. scrollDir,
  20214. scrollOffset: nextOffset,
  20215. updateRequested
  20216. };
  20217. emitEndReached(scrollDir, normalizeOffset(nextOffset));
  20218. (0, vue.nextTick)(resetIsScrolling);
  20219. };
  20220. const scrollVertically = (e) => {
  20221. const { clientHeight, scrollHeight, scrollTop } = e.currentTarget;
  20222. if ((0, vue.unref)(states).scrollOffset === scrollTop) return;
  20223. updateScrollOffset(Math.min(scrollTop, scrollHeight - clientHeight), {
  20224. isScrolling: true,
  20225. updateRequested: false
  20226. });
  20227. };
  20228. const scrollHorizontally = (e) => {
  20229. const { clientWidth, scrollLeft, scrollWidth } = e.currentTarget;
  20230. if ((0, vue.unref)(states).scrollOffset === scrollLeft) return;
  20231. const { direction } = props;
  20232. let scrollOffset = scrollLeft;
  20233. if (direction === "rtl") switch (getRTLOffsetType()) {
  20234. case RTL_OFFSET_NAG:
  20235. scrollOffset = -scrollLeft;
  20236. break;
  20237. case RTL_OFFSET_POS_DESC:
  20238. scrollOffset = scrollWidth - clientWidth - scrollLeft;
  20239. break;
  20240. }
  20241. updateScrollOffset(Math.min(scrollOffset, scrollWidth - clientWidth), {
  20242. isScrolling: true,
  20243. updateRequested: false
  20244. });
  20245. };
  20246. const onScroll = (e) => {
  20247. (0, vue.unref)(_isHorizontal) ? scrollHorizontally(e) : scrollVertically(e);
  20248. emitEvents();
  20249. };
  20250. const onScrollbarScroll = (distanceToGo, totalSteps) => {
  20251. const offset = maxOffset.value / totalSteps * distanceToGo;
  20252. scrollTo(Math.min(maxOffset.value, offset));
  20253. };
  20254. const scrollTo = (offset) => {
  20255. updateScrollOffset(offset, {
  20256. isScrolling: (0, vue.unref)(states).isScrolling,
  20257. updateRequested: true
  20258. });
  20259. };
  20260. const scrollToItem = (idx, alignment = AUTO_ALIGNMENT) => {
  20261. const { scrollOffset } = (0, vue.unref)(states);
  20262. idx = Math.max(0, Math.min(idx, props.total - 1));
  20263. scrollTo(getOffset(props, idx, alignment, scrollOffset, (0, vue.unref)(dynamicSizeCache)));
  20264. };
  20265. const getItemStyle = (idx) => {
  20266. const { direction, itemSize, layout } = props;
  20267. const itemStyleCache = getItemStyleCache.value(clearCache && itemSize, clearCache && layout, clearCache && direction);
  20268. let style;
  20269. if (hasOwn(itemStyleCache, String(idx))) style = itemStyleCache[idx];
  20270. else {
  20271. const offset = getItemOffset(props, idx, (0, vue.unref)(dynamicSizeCache));
  20272. const size = getItemSize(props, idx, (0, vue.unref)(dynamicSizeCache));
  20273. const horizontal = (0, vue.unref)(_isHorizontal);
  20274. const isRtl = direction === "rtl";
  20275. const offsetHorizontal = horizontal ? offset : 0;
  20276. itemStyleCache[idx] = style = {
  20277. position: "absolute",
  20278. left: isRtl ? void 0 : `${offsetHorizontal}px`,
  20279. right: isRtl ? `${offsetHorizontal}px` : void 0,
  20280. top: !horizontal ? `${offset}px` : 0,
  20281. height: !horizontal ? `${size}px` : "100%",
  20282. width: horizontal ? `${size}px` : "100%"
  20283. };
  20284. }
  20285. return style;
  20286. };
  20287. const resetIsScrolling = () => {
  20288. states.value.isScrolling = false;
  20289. (0, vue.nextTick)(() => {
  20290. getItemStyleCache.value(-1, null, null);
  20291. });
  20292. };
  20293. const resetScrollTop = () => {
  20294. const window = windowRef.value;
  20295. if (window) window.scrollTop = 0;
  20296. };
  20297. (0, vue.onMounted)(() => {
  20298. if (!isClient) return;
  20299. const { initScrollOffset } = props;
  20300. const windowElement = (0, vue.unref)(windowRef);
  20301. if (isNumber(initScrollOffset) && windowElement) if ((0, vue.unref)(_isHorizontal)) windowElement.scrollLeft = initScrollOffset;
  20302. else windowElement.scrollTop = initScrollOffset;
  20303. emitEvents();
  20304. });
  20305. (0, vue.onUpdated)(() => {
  20306. const { direction, layout } = props;
  20307. const { scrollOffset, updateRequested } = (0, vue.unref)(states);
  20308. const windowElement = (0, vue.unref)(windowRef);
  20309. if (updateRequested && windowElement) if (layout === "horizontal") if (direction === "rtl") switch (getRTLOffsetType()) {
  20310. case RTL_OFFSET_NAG:
  20311. windowElement.scrollLeft = -scrollOffset;
  20312. break;
  20313. case RTL_OFFSET_POS_ASC:
  20314. windowElement.scrollLeft = scrollOffset;
  20315. break;
  20316. default: {
  20317. const { clientWidth, scrollWidth } = windowElement;
  20318. windowElement.scrollLeft = scrollWidth - clientWidth - scrollOffset;
  20319. break;
  20320. }
  20321. }
  20322. else windowElement.scrollLeft = scrollOffset;
  20323. else windowElement.scrollTop = scrollOffset;
  20324. });
  20325. (0, vue.onActivated)(() => {
  20326. (0, vue.unref)(windowRef).scrollTop = (0, vue.unref)(states).scrollOffset;
  20327. });
  20328. (0, vue.watch)(maxOffset, () => {
  20329. edgeState = currentEdgeState.value;
  20330. });
  20331. const api = {
  20332. ns,
  20333. clientSize,
  20334. estimatedTotalSize,
  20335. windowStyle,
  20336. windowRef,
  20337. innerRef,
  20338. innerStyle,
  20339. itemsToRender,
  20340. scrollbarRef,
  20341. states,
  20342. getItemStyle,
  20343. onScroll,
  20344. onScrollbarScroll,
  20345. onWheel,
  20346. scrollTo,
  20347. scrollToItem,
  20348. resetScrollTop
  20349. };
  20350. expose({
  20351. windowRef,
  20352. innerRef,
  20353. getItemStyleCache,
  20354. scrollTo,
  20355. scrollToItem,
  20356. resetScrollTop,
  20357. states
  20358. });
  20359. return api;
  20360. },
  20361. render(ctx) {
  20362. const { $slots, className, clientSize, containerElement, data, getItemStyle, innerElement, itemsToRender, innerStyle, layout, scrollbarAlwaysOn, total, onScroll, onScrollbarScroll, states, useIsScrolling, windowStyle, ns } = ctx;
  20363. const [start, end] = itemsToRender;
  20364. const Container = (0, vue.resolveDynamicComponent)(containerElement);
  20365. const Inner = (0, vue.resolveDynamicComponent)(innerElement);
  20366. const children = [];
  20367. if (total > 0) for (let i = start; i <= end; i++) children.push((0, vue.h)(vue.Fragment, { key: i }, $slots.default?.({
  20368. data,
  20369. index: i,
  20370. isScrolling: useIsScrolling ? states.isScrolling : void 0,
  20371. style: getItemStyle(i)
  20372. })));
  20373. const InnerNode = [(0, vue.h)(Inner, (0, vue.mergeProps)(ctx.innerProps, {
  20374. style: innerStyle,
  20375. ref: "innerRef"
  20376. }), !isString(Inner) ? { default: () => children } : children)];
  20377. const scrollbar = (0, vue.h)(ScrollBar, {
  20378. ref: "scrollbarRef",
  20379. clientSize,
  20380. layout,
  20381. onScroll: onScrollbarScroll,
  20382. ratio: clientSize * 100 / this.estimatedTotalSize,
  20383. scrollFrom: states.scrollOffset / (this.estimatedTotalSize - clientSize),
  20384. total,
  20385. alwaysOn: scrollbarAlwaysOn
  20386. });
  20387. const listContainer = (0, vue.h)(Container, {
  20388. class: [ns.e("window"), className],
  20389. style: windowStyle,
  20390. onScroll,
  20391. ref: "windowRef",
  20392. key: 0
  20393. }, !isString(Container) ? { default: () => [InnerNode] } : [InnerNode]);
  20394. return (0, vue.h)("div", {
  20395. key: 0,
  20396. class: [ns.e("wrapper"), scrollbarAlwaysOn ? "always-on" : ""]
  20397. }, [listContainer, scrollbar]);
  20398. }
  20399. });
  20400. };
  20401. //#endregion
  20402. //#region ../../packages/components/virtual-list/src/components/fixed-size-list.ts
  20403. const FixedSizeList = createList({
  20404. name: "ElFixedSizeList",
  20405. getItemOffset: ({ itemSize }, index) => index * itemSize,
  20406. getItemSize: ({ itemSize }) => itemSize,
  20407. getEstimatedTotalSize: ({ total, itemSize }) => itemSize * total,
  20408. getOffset: ({ height, total, itemSize, layout, width }, index, alignment, scrollOffset) => {
  20409. const size = isHorizontal(layout) ? width : height;
  20410. const lastItemOffset = Math.max(0, total * itemSize - size);
  20411. const maxOffset = Math.min(lastItemOffset, index * itemSize);
  20412. const minOffset = Math.max(0, (index + 1) * itemSize - size);
  20413. if (alignment === "smart") if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) alignment = AUTO_ALIGNMENT;
  20414. else alignment = CENTERED_ALIGNMENT;
  20415. switch (alignment) {
  20416. case START_ALIGNMENT: return maxOffset;
  20417. case "end": return minOffset;
  20418. case CENTERED_ALIGNMENT: {
  20419. const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);
  20420. if (middleOffset < Math.ceil(size / 2)) return 0;
  20421. else if (middleOffset > lastItemOffset + Math.floor(size / 2)) return lastItemOffset;
  20422. else return middleOffset;
  20423. }
  20424. case AUTO_ALIGNMENT:
  20425. default: if (scrollOffset >= minOffset && scrollOffset <= maxOffset) return scrollOffset;
  20426. else if (scrollOffset < minOffset) return minOffset;
  20427. else return maxOffset;
  20428. }
  20429. },
  20430. getStartIndexForOffset: ({ total, itemSize }, offset) => Math.max(0, Math.min(total - 1, Math.floor(offset / itemSize))),
  20431. getStopIndexForStartIndex: ({ height, total, itemSize, layout, width }, startIndex, scrollOffset) => {
  20432. const offset = startIndex * itemSize;
  20433. const size = isHorizontal(layout) ? width : height;
  20434. const numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);
  20435. return Math.max(0, Math.min(total - 1, startIndex + numVisibleItems - 1));
  20436. },
  20437. initCache() {},
  20438. clearCache: true,
  20439. validateProps() {}
  20440. });
  20441. //#endregion
  20442. //#region ../../packages/components/virtual-list/src/components/dynamic-size-list.ts
  20443. const getItemFromCache$1 = (props, index, listCache) => {
  20444. const { itemSize } = props;
  20445. const { items, lastVisitedIndex } = listCache;
  20446. if (index > lastVisitedIndex) {
  20447. let offset = 0;
  20448. if (lastVisitedIndex >= 0) {
  20449. const item = items[lastVisitedIndex];
  20450. offset = item.offset + item.size;
  20451. }
  20452. for (let i = lastVisitedIndex + 1; i <= index; i++) {
  20453. const size = itemSize(i);
  20454. items[i] = {
  20455. offset,
  20456. size
  20457. };
  20458. offset += size;
  20459. }
  20460. listCache.lastVisitedIndex = index;
  20461. }
  20462. return items[index];
  20463. };
  20464. const findItem$1 = (props, listCache, offset) => {
  20465. const { items, lastVisitedIndex } = listCache;
  20466. if ((lastVisitedIndex > 0 ? items[lastVisitedIndex].offset : 0) >= offset) return bs$1(props, listCache, 0, lastVisitedIndex, offset);
  20467. return es$1(props, listCache, Math.max(0, lastVisitedIndex), offset);
  20468. };
  20469. const bs$1 = (props, listCache, low, high, offset) => {
  20470. while (low <= high) {
  20471. const mid = low + Math.floor((high - low) / 2);
  20472. const currentOffset = getItemFromCache$1(props, mid, listCache).offset;
  20473. if (currentOffset === offset) return mid;
  20474. else if (currentOffset < offset) low = mid + 1;
  20475. else if (currentOffset > offset) high = mid - 1;
  20476. }
  20477. return Math.max(0, low - 1);
  20478. };
  20479. const es$1 = (props, listCache, index, offset) => {
  20480. const { total } = props;
  20481. let exponent = 1;
  20482. while (index < total && getItemFromCache$1(props, index, listCache).offset < offset) {
  20483. index += exponent;
  20484. exponent *= 2;
  20485. }
  20486. return bs$1(props, listCache, Math.floor(index / 2), Math.min(index, total - 1), offset);
  20487. };
  20488. const getEstimatedTotalSize = ({ total }, { items, estimatedItemSize, lastVisitedIndex }) => {
  20489. let totalSizeOfMeasuredItems = 0;
  20490. if (lastVisitedIndex >= total) lastVisitedIndex = total - 1;
  20491. if (lastVisitedIndex >= 0) {
  20492. const item = items[lastVisitedIndex];
  20493. totalSizeOfMeasuredItems = item.offset + item.size;
  20494. }
  20495. const totalSizeOfUnmeasuredItems = (total - lastVisitedIndex - 1) * estimatedItemSize;
  20496. return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;
  20497. };
  20498. const DynamicSizeList = createList({
  20499. name: "ElDynamicSizeList",
  20500. getItemOffset: (props, index, listCache) => getItemFromCache$1(props, index, listCache).offset,
  20501. getItemSize: (_, index, { items }) => items[index].size,
  20502. getEstimatedTotalSize,
  20503. getOffset: (props, index, alignment, scrollOffset, listCache) => {
  20504. const { height, layout, width } = props;
  20505. const size = isHorizontal(layout) ? width : height;
  20506. const item = getItemFromCache$1(props, index, listCache);
  20507. const estimatedTotalSize = getEstimatedTotalSize(props, listCache);
  20508. const maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, item.offset));
  20509. const minOffset = Math.max(0, item.offset - size + item.size);
  20510. if (alignment === "smart") if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) alignment = AUTO_ALIGNMENT;
  20511. else alignment = CENTERED_ALIGNMENT;
  20512. switch (alignment) {
  20513. case START_ALIGNMENT: return maxOffset;
  20514. case "end": return minOffset;
  20515. case CENTERED_ALIGNMENT: return Math.round(minOffset + (maxOffset - minOffset) / 2);
  20516. case AUTO_ALIGNMENT:
  20517. default: if (scrollOffset >= minOffset && scrollOffset <= maxOffset) return scrollOffset;
  20518. else if (scrollOffset < minOffset) return minOffset;
  20519. else return maxOffset;
  20520. }
  20521. },
  20522. getStartIndexForOffset: (props, offset, listCache) => findItem$1(props, listCache, offset),
  20523. getStopIndexForStartIndex: (props, startIndex, scrollOffset, listCache) => {
  20524. const { height, total, layout, width } = props;
  20525. const size = isHorizontal(layout) ? width : height;
  20526. const item = getItemFromCache$1(props, startIndex, listCache);
  20527. const maxOffset = scrollOffset + size;
  20528. let offset = item.offset + item.size;
  20529. let stopIndex = startIndex;
  20530. while (stopIndex < total - 1 && offset < maxOffset) {
  20531. stopIndex++;
  20532. offset += getItemFromCache$1(props, stopIndex, listCache).size;
  20533. }
  20534. return stopIndex;
  20535. },
  20536. initCache({ estimatedItemSize = 50 }, instance) {
  20537. const cache = {
  20538. items: {},
  20539. estimatedItemSize,
  20540. lastVisitedIndex: -1
  20541. };
  20542. cache.clearCacheAfterIndex = (index, forceUpdate = true) => {
  20543. cache.lastVisitedIndex = Math.min(cache.lastVisitedIndex, index - 1);
  20544. instance.exposed?.getItemStyleCache(-1);
  20545. if (forceUpdate) instance.proxy?.$forceUpdate();
  20546. };
  20547. return cache;
  20548. },
  20549. clearCache: false,
  20550. validateProps: ({ itemSize }) => {}
  20551. });
  20552. //#endregion
  20553. //#region ../../packages/components/virtual-list/src/hooks/use-grid-wheel.ts
  20554. const useGridWheel = ({ atXEndEdge, atXStartEdge, atYEndEdge, atYStartEdge }, onWheelDelta) => {
  20555. let frameHandle = null;
  20556. let xOffset = 0;
  20557. let yOffset = 0;
  20558. const hasReachedEdge = (x, y) => {
  20559. const xEdgeReached = x < 0 && atXStartEdge.value || x > 0 && atXEndEdge.value;
  20560. const yEdgeReached = y < 0 && atYStartEdge.value || y > 0 && atYEndEdge.value;
  20561. return xEdgeReached || yEdgeReached;
  20562. };
  20563. const onWheel = (e) => {
  20564. cAF(frameHandle);
  20565. let x = e.deltaX;
  20566. let y = e.deltaY;
  20567. if (Math.abs(x) > Math.abs(y)) y = 0;
  20568. else x = 0;
  20569. if (e.shiftKey && y !== 0) {
  20570. x = y;
  20571. y = 0;
  20572. }
  20573. if (hasReachedEdge(x, y)) {
  20574. if (e.deltaX !== 0 && x === 0) e.preventDefault();
  20575. return;
  20576. }
  20577. xOffset += x;
  20578. yOffset += y;
  20579. e.preventDefault();
  20580. frameHandle = rAF(() => {
  20581. onWheelDelta(xOffset, yOffset);
  20582. xOffset = 0;
  20583. yOffset = 0;
  20584. });
  20585. };
  20586. return {
  20587. hasReachedEdge,
  20588. onWheel
  20589. };
  20590. };
  20591. //#endregion
  20592. //#region ../../packages/components/virtual-list/src/hooks/use-grid-touch.ts
  20593. const useGridTouch = (windowRef, states, scrollTo, estimatedTotalWidth, estimatedTotalHeight, parsedWidth, parsedHeight) => {
  20594. const touchStartX = (0, vue.ref)(0);
  20595. const touchStartY = (0, vue.ref)(0);
  20596. let frameHandle;
  20597. let deltaX = 0;
  20598. let deltaY = 0;
  20599. const handleTouchStart = (event) => {
  20600. cAF(frameHandle);
  20601. touchStartX.value = event.touches[0].clientX;
  20602. touchStartY.value = event.touches[0].clientY;
  20603. deltaX = 0;
  20604. deltaY = 0;
  20605. };
  20606. const handleTouchMove = (event) => {
  20607. event.preventDefault();
  20608. cAF(frameHandle);
  20609. deltaX += touchStartX.value - event.touches[0].clientX;
  20610. deltaY += touchStartY.value - event.touches[0].clientY;
  20611. touchStartX.value = event.touches[0].clientX;
  20612. touchStartY.value = event.touches[0].clientY;
  20613. frameHandle = rAF(() => {
  20614. const maxScrollLeft = estimatedTotalWidth.value - (0, vue.unref)(parsedWidth);
  20615. const maxScrollTop = estimatedTotalHeight.value - (0, vue.unref)(parsedHeight);
  20616. scrollTo({
  20617. scrollLeft: Math.min(states.value.scrollLeft + deltaX, maxScrollLeft),
  20618. scrollTop: Math.min(states.value.scrollTop + deltaY, maxScrollTop)
  20619. });
  20620. deltaX = 0;
  20621. deltaY = 0;
  20622. });
  20623. };
  20624. useEventListener(windowRef, "touchstart", handleTouchStart, { passive: true });
  20625. useEventListener(windowRef, "touchmove", handleTouchMove, { passive: false });
  20626. return {
  20627. touchStartX,
  20628. touchStartY,
  20629. handleTouchStart,
  20630. handleTouchMove
  20631. };
  20632. };
  20633. //#endregion
  20634. //#region ../../packages/components/virtual-list/src/builders/build-grid.ts
  20635. const createGrid = ({ name, clearCache, getColumnPosition, getColumnStartIndexForOffset, getColumnStopIndexForStartIndex, getEstimatedTotalHeight, getEstimatedTotalWidth, getColumnOffset, getRowOffset, getRowPosition, getRowStartIndexForOffset, getRowStopIndexForStartIndex, initCache, injectToInstance, validateProps }) => {
  20636. return (0, vue.defineComponent)({
  20637. name: name ?? "ElVirtualList",
  20638. props: virtualizedGridProps,
  20639. emits: [ITEM_RENDER_EVT, SCROLL_EVT],
  20640. setup(props, { emit, expose, slots }) {
  20641. const ns = useNamespace("vl");
  20642. validateProps(props);
  20643. const instance = (0, vue.getCurrentInstance)();
  20644. const cache = (0, vue.ref)(initCache(props, instance));
  20645. injectToInstance?.(instance, cache);
  20646. const windowRef = (0, vue.ref)();
  20647. const hScrollbar = (0, vue.ref)();
  20648. const vScrollbar = (0, vue.ref)();
  20649. const innerRef = (0, vue.ref)();
  20650. const states = (0, vue.ref)({
  20651. isScrolling: false,
  20652. scrollLeft: isNumber(props.initScrollLeft) ? props.initScrollLeft : 0,
  20653. scrollTop: isNumber(props.initScrollTop) ? props.initScrollTop : 0,
  20654. updateRequested: false,
  20655. xAxisScrollDir: FORWARD,
  20656. yAxisScrollDir: FORWARD
  20657. });
  20658. const getItemStyleCache = useCache();
  20659. const parsedHeight = (0, vue.computed)(() => Number.parseInt(`${props.height}`, 10));
  20660. const parsedWidth = (0, vue.computed)(() => Number.parseInt(`${props.width}`, 10));
  20661. const columnsToRender = (0, vue.computed)(() => {
  20662. const { totalColumn, totalRow, columnCache } = props;
  20663. const { isScrolling, xAxisScrollDir, scrollLeft } = (0, vue.unref)(states);
  20664. if (totalColumn === 0 || totalRow === 0) return [
  20665. 0,
  20666. 0,
  20667. 0,
  20668. 0
  20669. ];
  20670. const startIndex = getColumnStartIndexForOffset(props, scrollLeft, (0, vue.unref)(cache));
  20671. const stopIndex = getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, (0, vue.unref)(cache));
  20672. const cacheBackward = !isScrolling || xAxisScrollDir === "backward" ? Math.max(1, columnCache) : 1;
  20673. const cacheForward = !isScrolling || xAxisScrollDir === "forward" ? Math.max(1, columnCache) : 1;
  20674. return [
  20675. Math.max(0, startIndex - cacheBackward),
  20676. Math.max(0, Math.min(totalColumn - 1, stopIndex + cacheForward)),
  20677. startIndex,
  20678. stopIndex
  20679. ];
  20680. });
  20681. const rowsToRender = (0, vue.computed)(() => {
  20682. const { totalColumn, totalRow, rowCache } = props;
  20683. const { isScrolling, yAxisScrollDir, scrollTop } = (0, vue.unref)(states);
  20684. if (totalColumn === 0 || totalRow === 0) return [
  20685. 0,
  20686. 0,
  20687. 0,
  20688. 0
  20689. ];
  20690. const startIndex = getRowStartIndexForOffset(props, scrollTop, (0, vue.unref)(cache));
  20691. const stopIndex = getRowStopIndexForStartIndex(props, startIndex, scrollTop, (0, vue.unref)(cache));
  20692. const cacheBackward = !isScrolling || yAxisScrollDir === "backward" ? Math.max(1, rowCache) : 1;
  20693. const cacheForward = !isScrolling || yAxisScrollDir === "forward" ? Math.max(1, rowCache) : 1;
  20694. return [
  20695. Math.max(0, startIndex - cacheBackward),
  20696. Math.max(0, Math.min(totalRow - 1, stopIndex + cacheForward)),
  20697. startIndex,
  20698. stopIndex
  20699. ];
  20700. });
  20701. const estimatedTotalHeight = (0, vue.computed)(() => getEstimatedTotalHeight(props, (0, vue.unref)(cache)));
  20702. const estimatedTotalWidth = (0, vue.computed)(() => getEstimatedTotalWidth(props, (0, vue.unref)(cache)));
  20703. const windowStyle = (0, vue.computed)(() => [
  20704. {
  20705. position: "relative",
  20706. overflow: "hidden",
  20707. WebkitOverflowScrolling: "touch",
  20708. willChange: "transform"
  20709. },
  20710. {
  20711. direction: props.direction,
  20712. height: isNumber(props.height) ? `${props.height}px` : props.height,
  20713. width: isNumber(props.width) ? `${props.width}px` : props.width
  20714. },
  20715. props.style ?? {}
  20716. ]);
  20717. const innerStyle = (0, vue.computed)(() => {
  20718. const width = `${(0, vue.unref)(estimatedTotalWidth)}px`;
  20719. return {
  20720. height: `${(0, vue.unref)(estimatedTotalHeight)}px`,
  20721. pointerEvents: (0, vue.unref)(states).isScrolling ? "none" : void 0,
  20722. width,
  20723. margin: 0,
  20724. boxSizing: "border-box"
  20725. };
  20726. });
  20727. const emitEvents = () => {
  20728. const { totalColumn, totalRow } = props;
  20729. if (totalColumn > 0 && totalRow > 0) {
  20730. const [columnCacheStart, columnCacheEnd, columnVisibleStart, columnVisibleEnd] = (0, vue.unref)(columnsToRender);
  20731. const [rowCacheStart, rowCacheEnd, rowVisibleStart, rowVisibleEnd] = (0, vue.unref)(rowsToRender);
  20732. emit(ITEM_RENDER_EVT, {
  20733. columnCacheStart,
  20734. columnCacheEnd,
  20735. rowCacheStart,
  20736. rowCacheEnd,
  20737. columnVisibleStart,
  20738. columnVisibleEnd,
  20739. rowVisibleStart,
  20740. rowVisibleEnd
  20741. });
  20742. }
  20743. const { scrollLeft, scrollTop, updateRequested, xAxisScrollDir, yAxisScrollDir } = (0, vue.unref)(states);
  20744. emit(SCROLL_EVT, {
  20745. xAxisScrollDir,
  20746. scrollLeft,
  20747. yAxisScrollDir,
  20748. scrollTop,
  20749. updateRequested
  20750. });
  20751. };
  20752. const onScroll = (e) => {
  20753. const { clientHeight, clientWidth, scrollHeight, scrollLeft, scrollTop, scrollWidth } = e.currentTarget;
  20754. const _states = (0, vue.unref)(states);
  20755. if (_states.scrollTop === scrollTop && _states.scrollLeft === scrollLeft) return;
  20756. let _scrollLeft = scrollLeft;
  20757. if (isRTL(props.direction)) switch (getRTLOffsetType()) {
  20758. case RTL_OFFSET_NAG:
  20759. _scrollLeft = -scrollLeft;
  20760. break;
  20761. case RTL_OFFSET_POS_DESC:
  20762. _scrollLeft = scrollWidth - clientWidth - scrollLeft;
  20763. break;
  20764. }
  20765. states.value = {
  20766. ..._states,
  20767. isScrolling: true,
  20768. scrollLeft: _scrollLeft,
  20769. scrollTop: Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight)),
  20770. updateRequested: true,
  20771. xAxisScrollDir: getScrollDir(_states.scrollLeft, _scrollLeft),
  20772. yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop)
  20773. };
  20774. (0, vue.nextTick)(() => resetIsScrolling());
  20775. onUpdated();
  20776. emitEvents();
  20777. };
  20778. const onVerticalScroll = (distance, totalSteps) => {
  20779. const height = (0, vue.unref)(parsedHeight);
  20780. const offset = (estimatedTotalHeight.value - height) / totalSteps * distance;
  20781. scrollTo({ scrollTop: Math.min(estimatedTotalHeight.value - height, offset) });
  20782. };
  20783. const onHorizontalScroll = (distance, totalSteps) => {
  20784. const width = (0, vue.unref)(parsedWidth);
  20785. const offset = (estimatedTotalWidth.value - width) / totalSteps * distance;
  20786. scrollTo({ scrollLeft: Math.min(estimatedTotalWidth.value - width, offset) });
  20787. };
  20788. const { onWheel } = useGridWheel({
  20789. atXStartEdge: (0, vue.computed)(() => states.value.scrollLeft <= 0),
  20790. atXEndEdge: (0, vue.computed)(() => states.value.scrollLeft >= estimatedTotalWidth.value - (0, vue.unref)(parsedWidth)),
  20791. atYStartEdge: (0, vue.computed)(() => states.value.scrollTop <= 0),
  20792. atYEndEdge: (0, vue.computed)(() => states.value.scrollTop >= estimatedTotalHeight.value - (0, vue.unref)(parsedHeight))
  20793. }, (x, y) => {
  20794. hScrollbar.value?.onMouseUp?.();
  20795. vScrollbar.value?.onMouseUp?.();
  20796. const width = (0, vue.unref)(parsedWidth);
  20797. const height = (0, vue.unref)(parsedHeight);
  20798. scrollTo({
  20799. scrollLeft: Math.min(states.value.scrollLeft + x, estimatedTotalWidth.value - width),
  20800. scrollTop: Math.min(states.value.scrollTop + y, estimatedTotalHeight.value - height)
  20801. });
  20802. });
  20803. useEventListener(windowRef, "wheel", onWheel, { passive: false });
  20804. const scrollTo = ({ scrollLeft = states.value.scrollLeft, scrollTop = states.value.scrollTop }) => {
  20805. scrollLeft = Math.max(scrollLeft, 0);
  20806. scrollTop = Math.max(scrollTop, 0);
  20807. const _states = (0, vue.unref)(states);
  20808. if (scrollTop === _states.scrollTop && scrollLeft === _states.scrollLeft) return;
  20809. states.value = {
  20810. ..._states,
  20811. xAxisScrollDir: getScrollDir(_states.scrollLeft, scrollLeft),
  20812. yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop),
  20813. scrollLeft,
  20814. scrollTop,
  20815. updateRequested: true
  20816. };
  20817. (0, vue.nextTick)(() => resetIsScrolling());
  20818. onUpdated();
  20819. emitEvents();
  20820. };
  20821. const { touchStartX, touchStartY, handleTouchStart, handleTouchMove } = useGridTouch(windowRef, states, scrollTo, estimatedTotalWidth, estimatedTotalHeight, parsedWidth, parsedHeight);
  20822. const scrollToItem = (rowIndex = 0, columnIdx = 0, alignment = AUTO_ALIGNMENT) => {
  20823. const _states = (0, vue.unref)(states);
  20824. columnIdx = Math.max(0, Math.min(columnIdx, props.totalColumn - 1));
  20825. rowIndex = Math.max(0, Math.min(rowIndex, props.totalRow - 1));
  20826. const scrollBarWidth = getScrollBarWidth(ns.namespace.value);
  20827. const _cache = (0, vue.unref)(cache);
  20828. const estimatedHeight = getEstimatedTotalHeight(props, _cache);
  20829. const estimatedWidth = getEstimatedTotalWidth(props, _cache);
  20830. scrollTo({
  20831. scrollLeft: getColumnOffset(props, columnIdx, alignment, _states.scrollLeft, _cache, estimatedWidth > props.width ? scrollBarWidth : 0),
  20832. scrollTop: getRowOffset(props, rowIndex, alignment, _states.scrollTop, _cache, estimatedHeight > props.height ? scrollBarWidth : 0)
  20833. });
  20834. };
  20835. const getItemStyle = (rowIndex, columnIndex) => {
  20836. const { columnWidth, direction, rowHeight } = props;
  20837. const itemStyleCache = getItemStyleCache.value(clearCache && columnWidth, clearCache && rowHeight, clearCache && direction);
  20838. const key = `${rowIndex},${columnIndex}`;
  20839. if (hasOwn(itemStyleCache, key)) return itemStyleCache[key];
  20840. else {
  20841. const [, left] = getColumnPosition(props, columnIndex, (0, vue.unref)(cache));
  20842. const _cache = (0, vue.unref)(cache);
  20843. const rtl = isRTL(direction);
  20844. const [height, top] = getRowPosition(props, rowIndex, _cache);
  20845. const [width] = getColumnPosition(props, columnIndex, _cache);
  20846. itemStyleCache[key] = {
  20847. position: "absolute",
  20848. left: rtl ? void 0 : `${left}px`,
  20849. right: rtl ? `${left}px` : void 0,
  20850. top: `${top}px`,
  20851. height: `${height}px`,
  20852. width: `${width}px`
  20853. };
  20854. return itemStyleCache[key];
  20855. }
  20856. };
  20857. const resetIsScrolling = () => {
  20858. states.value.isScrolling = false;
  20859. (0, vue.nextTick)(() => {
  20860. getItemStyleCache.value(-1, null, null);
  20861. });
  20862. };
  20863. (0, vue.onMounted)(() => {
  20864. if (!isClient) return;
  20865. const { initScrollLeft, initScrollTop } = props;
  20866. const windowElement = (0, vue.unref)(windowRef);
  20867. if (windowElement) {
  20868. if (isNumber(initScrollLeft)) windowElement.scrollLeft = initScrollLeft;
  20869. if (isNumber(initScrollTop)) windowElement.scrollTop = initScrollTop;
  20870. }
  20871. emitEvents();
  20872. });
  20873. const onUpdated = () => {
  20874. const { direction } = props;
  20875. const { scrollLeft, scrollTop, updateRequested } = (0, vue.unref)(states);
  20876. const windowElement = (0, vue.unref)(windowRef);
  20877. if (updateRequested && windowElement) {
  20878. if (direction === "rtl") switch (getRTLOffsetType()) {
  20879. case RTL_OFFSET_NAG:
  20880. windowElement.scrollLeft = -scrollLeft;
  20881. break;
  20882. case RTL_OFFSET_POS_ASC:
  20883. windowElement.scrollLeft = scrollLeft;
  20884. break;
  20885. default: {
  20886. const { clientWidth, scrollWidth } = windowElement;
  20887. windowElement.scrollLeft = scrollWidth - clientWidth - scrollLeft;
  20888. break;
  20889. }
  20890. }
  20891. else windowElement.scrollLeft = Math.max(0, scrollLeft);
  20892. windowElement.scrollTop = Math.max(0, scrollTop);
  20893. }
  20894. };
  20895. const { resetAfterColumnIndex, resetAfterRowIndex, resetAfter } = instance.proxy;
  20896. expose({
  20897. windowRef,
  20898. innerRef,
  20899. getItemStyleCache,
  20900. touchStartX,
  20901. touchStartY,
  20902. handleTouchStart,
  20903. handleTouchMove,
  20904. scrollTo,
  20905. scrollToItem,
  20906. states,
  20907. resetAfterColumnIndex,
  20908. resetAfterRowIndex,
  20909. resetAfter
  20910. });
  20911. const renderScrollbars = () => {
  20912. const { scrollbarAlwaysOn, scrollbarStartGap, scrollbarEndGap, totalColumn, totalRow } = props;
  20913. const width = (0, vue.unref)(parsedWidth);
  20914. const height = (0, vue.unref)(parsedHeight);
  20915. const estimatedWidth = (0, vue.unref)(estimatedTotalWidth);
  20916. const estimatedHeight = (0, vue.unref)(estimatedTotalHeight);
  20917. const { scrollLeft, scrollTop } = (0, vue.unref)(states);
  20918. return {
  20919. horizontalScrollbar: (0, vue.h)(ScrollBar, {
  20920. ref: hScrollbar,
  20921. alwaysOn: scrollbarAlwaysOn,
  20922. startGap: scrollbarStartGap,
  20923. endGap: scrollbarEndGap,
  20924. class: ns.e("horizontal"),
  20925. clientSize: width,
  20926. layout: "horizontal",
  20927. onScroll: onHorizontalScroll,
  20928. ratio: width * 100 / estimatedWidth,
  20929. scrollFrom: scrollLeft / (estimatedWidth - width),
  20930. total: totalRow,
  20931. visible: true
  20932. }),
  20933. verticalScrollbar: (0, vue.h)(ScrollBar, {
  20934. ref: vScrollbar,
  20935. alwaysOn: scrollbarAlwaysOn,
  20936. startGap: scrollbarStartGap,
  20937. endGap: scrollbarEndGap,
  20938. class: ns.e("vertical"),
  20939. clientSize: height,
  20940. layout: "vertical",
  20941. onScroll: onVerticalScroll,
  20942. ratio: height * 100 / estimatedHeight,
  20943. scrollFrom: scrollTop / (estimatedHeight - height),
  20944. total: totalColumn,
  20945. visible: true
  20946. })
  20947. };
  20948. };
  20949. const renderItems = () => {
  20950. const [columnStart, columnEnd] = (0, vue.unref)(columnsToRender);
  20951. const [rowStart, rowEnd] = (0, vue.unref)(rowsToRender);
  20952. const { data, totalColumn, totalRow, useIsScrolling, itemKey } = props;
  20953. const children = [];
  20954. if (totalRow > 0 && totalColumn > 0) for (let row = rowStart; row <= rowEnd; row++) for (let column = columnStart; column <= columnEnd; column++) {
  20955. const key = itemKey({
  20956. columnIndex: column,
  20957. data,
  20958. rowIndex: row
  20959. });
  20960. children.push((0, vue.h)(vue.Fragment, { key }, slots.default?.({
  20961. columnIndex: column,
  20962. data,
  20963. isScrolling: useIsScrolling ? (0, vue.unref)(states).isScrolling : void 0,
  20964. style: getItemStyle(row, column),
  20965. rowIndex: row
  20966. })));
  20967. }
  20968. return children;
  20969. };
  20970. const renderInner = () => {
  20971. const Inner = (0, vue.resolveDynamicComponent)(props.innerElement);
  20972. const children = renderItems();
  20973. return [(0, vue.h)(Inner, (0, vue.mergeProps)(props.innerProps, {
  20974. style: (0, vue.unref)(innerStyle),
  20975. ref: innerRef
  20976. }), !isString(Inner) ? { default: () => children } : children)];
  20977. };
  20978. const renderWindow = () => {
  20979. const Container = (0, vue.resolveDynamicComponent)(props.containerElement);
  20980. const { horizontalScrollbar, verticalScrollbar } = renderScrollbars();
  20981. const Inner = renderInner();
  20982. return (0, vue.h)("div", {
  20983. key: 0,
  20984. class: ns.e("wrapper"),
  20985. role: props.role
  20986. }, [
  20987. (0, vue.h)(Container, {
  20988. class: props.className,
  20989. style: (0, vue.unref)(windowStyle),
  20990. onScroll,
  20991. ref: windowRef
  20992. }, !isString(Container) ? { default: () => Inner } : Inner),
  20993. horizontalScrollbar,
  20994. verticalScrollbar
  20995. ]);
  20996. };
  20997. return renderWindow;
  20998. }
  20999. });
  21000. };
  21001. //#endregion
  21002. //#region ../../packages/components/virtual-list/src/components/fixed-size-grid.ts
  21003. const FixedSizeGrid = createGrid({
  21004. name: "ElFixedSizeGrid",
  21005. getColumnPosition: ({ columnWidth }, index) => [columnWidth, index * columnWidth],
  21006. getRowPosition: ({ rowHeight }, index) => [rowHeight, index * rowHeight],
  21007. getEstimatedTotalHeight: ({ totalRow, rowHeight }) => rowHeight * totalRow,
  21008. getEstimatedTotalWidth: ({ totalColumn, columnWidth }) => columnWidth * totalColumn,
  21009. getColumnOffset: ({ totalColumn, columnWidth, width }, columnIndex, alignment, scrollLeft, _, scrollBarWidth) => {
  21010. width = Number(width);
  21011. const lastColumnOffset = Math.max(0, totalColumn * columnWidth - width);
  21012. const maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);
  21013. const minOffset = Math.max(0, columnIndex * columnWidth - width + scrollBarWidth + columnWidth);
  21014. if (alignment === "smart") if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) alignment = AUTO_ALIGNMENT;
  21015. else alignment = CENTERED_ALIGNMENT;
  21016. switch (alignment) {
  21017. case START_ALIGNMENT: return maxOffset;
  21018. case "end": return minOffset;
  21019. case CENTERED_ALIGNMENT: {
  21020. const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);
  21021. if (middleOffset < Math.ceil(width / 2)) return 0;
  21022. else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) return lastColumnOffset;
  21023. else return middleOffset;
  21024. }
  21025. case AUTO_ALIGNMENT:
  21026. default: if (scrollLeft >= minOffset && scrollLeft <= maxOffset) return scrollLeft;
  21027. else if (minOffset > maxOffset) return minOffset;
  21028. else if (scrollLeft < minOffset) return minOffset;
  21029. else return maxOffset;
  21030. }
  21031. },
  21032. getRowOffset: ({ rowHeight, height, totalRow }, rowIndex, align, scrollTop, _, scrollBarWidth) => {
  21033. height = Number(height);
  21034. const lastRowOffset = Math.max(0, totalRow * rowHeight - height);
  21035. const maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);
  21036. const minOffset = Math.max(0, rowIndex * rowHeight - height + scrollBarWidth + rowHeight);
  21037. if (align === "smart") if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) align = AUTO_ALIGNMENT;
  21038. else align = CENTERED_ALIGNMENT;
  21039. switch (align) {
  21040. case START_ALIGNMENT: return maxOffset;
  21041. case "end": return minOffset;
  21042. case CENTERED_ALIGNMENT: {
  21043. const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);
  21044. if (middleOffset < Math.ceil(height / 2)) return 0;
  21045. else if (middleOffset > lastRowOffset + Math.floor(height / 2)) return lastRowOffset;
  21046. else return middleOffset;
  21047. }
  21048. case AUTO_ALIGNMENT:
  21049. default: if (scrollTop >= minOffset && scrollTop <= maxOffset) return scrollTop;
  21050. else if (minOffset > maxOffset) return minOffset;
  21051. else if (scrollTop < minOffset) return minOffset;
  21052. else return maxOffset;
  21053. }
  21054. },
  21055. getColumnStartIndexForOffset: ({ columnWidth, totalColumn }, scrollLeft) => Math.max(0, Math.min(totalColumn - 1, Math.floor(scrollLeft / columnWidth))),
  21056. getColumnStopIndexForStartIndex: ({ columnWidth, totalColumn, width }, startIndex, scrollLeft) => {
  21057. const left = startIndex * columnWidth;
  21058. const visibleColumnsCount = Math.ceil((width + scrollLeft - left) / columnWidth);
  21059. return Math.max(0, Math.min(totalColumn - 1, startIndex + visibleColumnsCount - 1));
  21060. },
  21061. getRowStartIndexForOffset: ({ rowHeight, totalRow }, scrollTop) => Math.max(0, Math.min(totalRow - 1, Math.floor(scrollTop / rowHeight))),
  21062. getRowStopIndexForStartIndex: ({ rowHeight, totalRow, height }, startIndex, scrollTop) => {
  21063. const top = startIndex * rowHeight;
  21064. const numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);
  21065. return Math.max(0, Math.min(totalRow - 1, startIndex + numVisibleRows - 1));
  21066. },
  21067. initCache: () => void 0,
  21068. clearCache: true,
  21069. validateProps: ({ columnWidth, rowHeight }) => {}
  21070. });
  21071. //#endregion
  21072. //#region ../../packages/components/virtual-list/src/components/dynamic-size-grid.ts
  21073. const { max, min, floor } = Math;
  21074. const ACCESS_SIZER_KEY_MAP = {
  21075. column: "columnWidth",
  21076. row: "rowHeight"
  21077. };
  21078. const ACCESS_LAST_VISITED_KEY_MAP = {
  21079. column: "lastVisitedColumnIndex",
  21080. row: "lastVisitedRowIndex"
  21081. };
  21082. const getItemFromCache = (props, index, gridCache, type) => {
  21083. const [cachedItems, sizer, lastVisited] = [
  21084. gridCache[type],
  21085. props[ACCESS_SIZER_KEY_MAP[type]],
  21086. gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]]
  21087. ];
  21088. if (index > lastVisited) {
  21089. let offset = 0;
  21090. if (lastVisited >= 0) {
  21091. const item = cachedItems[lastVisited];
  21092. offset = item.offset + item.size;
  21093. }
  21094. for (let i = lastVisited + 1; i <= index; i++) {
  21095. const size = sizer(i);
  21096. cachedItems[i] = {
  21097. offset,
  21098. size
  21099. };
  21100. offset += size;
  21101. }
  21102. gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]] = index;
  21103. }
  21104. return cachedItems[index];
  21105. };
  21106. const bs = (props, gridCache, low, high, offset, type) => {
  21107. while (low <= high) {
  21108. const mid = low + floor((high - low) / 2);
  21109. const currentOffset = getItemFromCache(props, mid, gridCache, type).offset;
  21110. if (currentOffset === offset) return mid;
  21111. else if (currentOffset < offset) low = mid + 1;
  21112. else high = mid - 1;
  21113. }
  21114. return max(0, low - 1);
  21115. };
  21116. const es = (props, gridCache, idx, offset, type) => {
  21117. const total = type === "column" ? props.totalColumn : props.totalRow;
  21118. let exponent = 1;
  21119. while (idx < total && getItemFromCache(props, idx, gridCache, type).offset < offset) {
  21120. idx += exponent;
  21121. exponent *= 2;
  21122. }
  21123. return bs(props, gridCache, floor(idx / 2), min(idx, total - 1), offset, type);
  21124. };
  21125. const findItem = (props, gridCache, offset, type) => {
  21126. const [cache, lastVisitedIndex] = [gridCache[type], gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]]];
  21127. if ((lastVisitedIndex > 0 ? cache[lastVisitedIndex].offset : 0) >= offset) return bs(props, gridCache, 0, lastVisitedIndex, offset, type);
  21128. return es(props, gridCache, max(0, lastVisitedIndex), offset, type);
  21129. };
  21130. const getEstimatedTotalHeight = ({ totalRow }, { estimatedRowHeight, lastVisitedRowIndex, row }) => {
  21131. let sizeOfVisitedRows = 0;
  21132. if (lastVisitedRowIndex >= totalRow) lastVisitedRowIndex = totalRow - 1;
  21133. if (lastVisitedRowIndex >= 0) {
  21134. const item = row[lastVisitedRowIndex];
  21135. sizeOfVisitedRows = item.offset + item.size;
  21136. }
  21137. const sizeOfUnvisitedItems = (totalRow - lastVisitedRowIndex - 1) * estimatedRowHeight;
  21138. return sizeOfVisitedRows + sizeOfUnvisitedItems;
  21139. };
  21140. const getEstimatedTotalWidth = ({ totalColumn }, { column, estimatedColumnWidth, lastVisitedColumnIndex }) => {
  21141. let sizeOfVisitedColumns = 0;
  21142. if (lastVisitedColumnIndex > totalColumn) lastVisitedColumnIndex = totalColumn - 1;
  21143. if (lastVisitedColumnIndex >= 0) {
  21144. const item = column[lastVisitedColumnIndex];
  21145. sizeOfVisitedColumns = item.offset + item.size;
  21146. }
  21147. const sizeOfUnvisitedItems = (totalColumn - lastVisitedColumnIndex - 1) * estimatedColumnWidth;
  21148. return sizeOfVisitedColumns + sizeOfUnvisitedItems;
  21149. };
  21150. const ACCESS_ESTIMATED_SIZE_KEY_MAP = {
  21151. column: getEstimatedTotalWidth,
  21152. row: getEstimatedTotalHeight
  21153. };
  21154. const getOffset$1 = (props, index, alignment, scrollOffset, cache, type, scrollBarWidth) => {
  21155. const [size, estimatedSizeAssociates] = [type === "row" ? props.height : props.width, ACCESS_ESTIMATED_SIZE_KEY_MAP[type]];
  21156. const item = getItemFromCache(props, index, cache, type);
  21157. const maxOffset = max(0, min(estimatedSizeAssociates(props, cache) - size, item.offset));
  21158. const minOffset = max(0, item.offset - size + scrollBarWidth + item.size);
  21159. if (alignment === "smart") if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) alignment = AUTO_ALIGNMENT;
  21160. else alignment = CENTERED_ALIGNMENT;
  21161. switch (alignment) {
  21162. case START_ALIGNMENT: return maxOffset;
  21163. case "end": return minOffset;
  21164. case CENTERED_ALIGNMENT: return Math.round(minOffset + (maxOffset - minOffset) / 2);
  21165. case AUTO_ALIGNMENT:
  21166. default: if (scrollOffset >= minOffset && scrollOffset <= maxOffset) return scrollOffset;
  21167. else if (minOffset > maxOffset) return minOffset;
  21168. else if (scrollOffset < minOffset) return minOffset;
  21169. else return maxOffset;
  21170. }
  21171. };
  21172. const DynamicSizeGrid = createGrid({
  21173. name: "ElDynamicSizeGrid",
  21174. getColumnPosition: (props, idx, cache) => {
  21175. const item = getItemFromCache(props, idx, cache, "column");
  21176. return [item.size, item.offset];
  21177. },
  21178. getRowPosition: (props, idx, cache) => {
  21179. const item = getItemFromCache(props, idx, cache, "row");
  21180. return [item.size, item.offset];
  21181. },
  21182. getColumnOffset: (props, columnIndex, alignment, scrollLeft, cache, scrollBarWidth) => getOffset$1(props, columnIndex, alignment, scrollLeft, cache, "column", scrollBarWidth),
  21183. getRowOffset: (props, rowIndex, alignment, scrollTop, cache, scrollBarWidth) => getOffset$1(props, rowIndex, alignment, scrollTop, cache, "row", scrollBarWidth),
  21184. getColumnStartIndexForOffset: (props, scrollLeft, cache) => findItem(props, cache, scrollLeft, "column"),
  21185. getColumnStopIndexForStartIndex: (props, startIndex, scrollLeft, cache) => {
  21186. const item = getItemFromCache(props, startIndex, cache, "column");
  21187. const maxOffset = scrollLeft + props.width;
  21188. let offset = item.offset + item.size;
  21189. let stopIndex = startIndex;
  21190. while (stopIndex < props.totalColumn - 1 && offset < maxOffset) {
  21191. stopIndex++;
  21192. offset += getItemFromCache(props, startIndex, cache, "column").size;
  21193. }
  21194. return stopIndex;
  21195. },
  21196. getEstimatedTotalHeight,
  21197. getEstimatedTotalWidth,
  21198. getRowStartIndexForOffset: (props, scrollTop, cache) => findItem(props, cache, scrollTop, "row"),
  21199. getRowStopIndexForStartIndex: (props, startIndex, scrollTop, cache) => {
  21200. const { totalRow, height } = props;
  21201. const item = getItemFromCache(props, startIndex, cache, "row");
  21202. const maxOffset = scrollTop + height;
  21203. let offset = item.size + item.offset;
  21204. let stopIndex = startIndex;
  21205. while (stopIndex < totalRow - 1 && offset < maxOffset) {
  21206. stopIndex++;
  21207. offset += getItemFromCache(props, stopIndex, cache, "row").size;
  21208. }
  21209. return stopIndex;
  21210. },
  21211. injectToInstance: (instance, cache) => {
  21212. const resetAfter = ({ columnIndex, rowIndex }, forceUpdate) => {
  21213. forceUpdate = isUndefined(forceUpdate) ? true : forceUpdate;
  21214. if (isNumber(columnIndex)) cache.value.lastVisitedColumnIndex = Math.min(cache.value.lastVisitedColumnIndex, columnIndex - 1);
  21215. if (isNumber(rowIndex)) cache.value.lastVisitedRowIndex = Math.min(cache.value.lastVisitedRowIndex, rowIndex - 1);
  21216. instance.exposed?.getItemStyleCache.value(-1, null, null);
  21217. if (forceUpdate) instance.proxy?.$forceUpdate();
  21218. };
  21219. const resetAfterColumnIndex = (columnIndex, forceUpdate) => {
  21220. resetAfter({ columnIndex }, forceUpdate);
  21221. };
  21222. const resetAfterRowIndex = (rowIndex, forceUpdate) => {
  21223. resetAfter({ rowIndex }, forceUpdate);
  21224. };
  21225. Object.assign(instance.proxy, {
  21226. resetAfterColumnIndex,
  21227. resetAfterRowIndex,
  21228. resetAfter
  21229. });
  21230. },
  21231. initCache: ({ estimatedColumnWidth = 50, estimatedRowHeight = 50 }) => {
  21232. return {
  21233. column: {},
  21234. estimatedColumnWidth,
  21235. estimatedRowHeight,
  21236. lastVisitedColumnIndex: -1,
  21237. lastVisitedRowIndex: -1,
  21238. row: {}
  21239. };
  21240. },
  21241. clearCache: false,
  21242. validateProps: ({ columnWidth, rowHeight }) => {}
  21243. });
  21244. //#endregion
  21245. //#region ../../packages/components/checkbox/src/checkbox.ts
  21246. const checkboxProps = {
  21247. modelValue: {
  21248. type: [
  21249. Number,
  21250. String,
  21251. Boolean
  21252. ],
  21253. default: void 0
  21254. },
  21255. label: {
  21256. type: [
  21257. String,
  21258. Boolean,
  21259. Number,
  21260. Object
  21261. ],
  21262. default: void 0
  21263. },
  21264. value: {
  21265. type: [
  21266. String,
  21267. Boolean,
  21268. Number,
  21269. Object
  21270. ],
  21271. default: void 0
  21272. },
  21273. indeterminate: Boolean,
  21274. disabled: {
  21275. type: Boolean,
  21276. default: void 0
  21277. },
  21278. checked: Boolean,
  21279. name: {
  21280. type: String,
  21281. default: void 0
  21282. },
  21283. trueValue: {
  21284. type: [String, Number],
  21285. default: void 0
  21286. },
  21287. falseValue: {
  21288. type: [String, Number],
  21289. default: void 0
  21290. },
  21291. trueLabel: {
  21292. type: [String, Number],
  21293. default: void 0
  21294. },
  21295. falseLabel: {
  21296. type: [String, Number],
  21297. default: void 0
  21298. },
  21299. id: {
  21300. type: String,
  21301. default: void 0
  21302. },
  21303. border: Boolean,
  21304. size: useSizeProp,
  21305. tabindex: [String, Number],
  21306. validateEvent: {
  21307. type: Boolean,
  21308. default: true
  21309. },
  21310. ariaLabel: String,
  21311. ...useAriaProps(["ariaControls"])
  21312. };
  21313. const checkboxEmits = {
  21314. [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val),
  21315. change: (val) => isString(val) || isNumber(val) || isBoolean(val)
  21316. };
  21317. const checkboxPropsDefaults = {
  21318. modelValue: void 0,
  21319. label: void 0,
  21320. value: void 0,
  21321. disabled: void 0,
  21322. name: void 0,
  21323. trueValue: void 0,
  21324. falseValue: void 0,
  21325. trueLabel: void 0,
  21326. falseLabel: void 0,
  21327. id: void 0,
  21328. validateEvent: true
  21329. };
  21330. //#endregion
  21331. //#region ../../packages/components/checkbox/src/constants.ts
  21332. const checkboxGroupContextKey = Symbol("checkboxGroupContextKey");
  21333. //#endregion
  21334. //#region ../../packages/components/checkbox/src/composables/use-checkbox-disabled.ts
  21335. const useCheckboxDisabled = ({ model, isChecked }) => {
  21336. const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
  21337. const formContext = (0, vue.inject)(formContextKey, void 0);
  21338. const isLimitDisabled = (0, vue.computed)(() => {
  21339. const max = checkboxGroup?.max?.value;
  21340. const min = checkboxGroup?.min?.value;
  21341. return !isUndefined(max) && model.value.length >= max && !isChecked.value || !isUndefined(min) && model.value.length <= min && isChecked.value;
  21342. });
  21343. return {
  21344. isDisabled: useFormDisabled((0, vue.computed)(() => {
  21345. if (checkboxGroup === void 0) return formContext?.disabled ?? isLimitDisabled.value;
  21346. else return checkboxGroup.disabled?.value || isLimitDisabled.value;
  21347. })),
  21348. isLimitDisabled
  21349. };
  21350. };
  21351. //#endregion
  21352. //#region ../../packages/components/checkbox/src/composables/use-checkbox-event.ts
  21353. const useCheckboxEvent = (props, { model, isLimitExceeded, hasOwnLabel, isDisabled, isLabeledByFormItem }) => {
  21354. const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
  21355. const { formItem } = useFormItem();
  21356. const { emit } = (0, vue.getCurrentInstance)();
  21357. function getLabeledValue(value) {
  21358. return [
  21359. true,
  21360. props.trueValue,
  21361. props.trueLabel
  21362. ].includes(value) ? props.trueValue ?? props.trueLabel ?? true : props.falseValue ?? props.falseLabel ?? false;
  21363. }
  21364. function emitChangeEvent(checked, e) {
  21365. emit(CHANGE_EVENT, getLabeledValue(checked), e);
  21366. }
  21367. function handleChange(e) {
  21368. if (isLimitExceeded.value) return;
  21369. const target = e.target;
  21370. emit(CHANGE_EVENT, getLabeledValue(target.checked), e);
  21371. }
  21372. async function onClickRoot(e) {
  21373. if (isLimitExceeded.value) return;
  21374. if (!hasOwnLabel.value && !isDisabled.value && isLabeledByFormItem.value) {
  21375. if (!e.composedPath().some((item) => item.tagName === "LABEL")) {
  21376. model.value = getLabeledValue([
  21377. false,
  21378. props.falseValue,
  21379. props.falseLabel
  21380. ].includes(model.value));
  21381. await (0, vue.nextTick)();
  21382. emitChangeEvent(model.value, e);
  21383. }
  21384. }
  21385. }
  21386. const validateEvent = (0, vue.computed)(() => checkboxGroup?.validateEvent || props.validateEvent);
  21387. (0, vue.watch)(() => props.modelValue, () => {
  21388. if (validateEvent.value) formItem?.validate("change").catch(NOOP);
  21389. });
  21390. return {
  21391. handleChange,
  21392. onClickRoot
  21393. };
  21394. };
  21395. //#endregion
  21396. //#region ../../packages/components/checkbox/src/composables/use-checkbox-model.ts
  21397. const useCheckboxModel = (props) => {
  21398. const selfModel = (0, vue.ref)(false);
  21399. const { emit, vnode } = (0, vue.getCurrentInstance)();
  21400. const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
  21401. const isGroup = (0, vue.computed)(() => isUndefined(checkboxGroup) === false);
  21402. const isLimitExceeded = (0, vue.ref)(false);
  21403. const isControlled = (0, vue.computed)(() => {
  21404. const rawProps = vnode.props ?? {};
  21405. return "modelValue" in rawProps || "model-value" in rawProps;
  21406. });
  21407. const model = (0, vue.computed)({
  21408. get() {
  21409. return isGroup.value ? checkboxGroup?.modelValue?.value : !isControlled.value ? selfModel.value : props.modelValue;
  21410. },
  21411. set(val) {
  21412. if (isGroup.value && isArray$1(val)) {
  21413. isLimitExceeded.value = checkboxGroup?.max?.value !== void 0 && val.length > checkboxGroup?.max.value && val.length > model.value.length;
  21414. isLimitExceeded.value === false && checkboxGroup?.changeEvent?.(val);
  21415. } else {
  21416. emit(UPDATE_MODEL_EVENT, val);
  21417. selfModel.value = val;
  21418. }
  21419. }
  21420. });
  21421. return {
  21422. model,
  21423. isGroup,
  21424. isLimitExceeded
  21425. };
  21426. };
  21427. //#endregion
  21428. //#region ../../packages/components/checkbox/src/composables/use-checkbox-status.ts
  21429. const useCheckboxStatus = (props, slots, { model }) => {
  21430. const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
  21431. const isFocused = (0, vue.ref)(false);
  21432. const actualValue = (0, vue.computed)(() => {
  21433. if (!isPropAbsent(props.value)) return props.value;
  21434. return props.label;
  21435. });
  21436. const isChecked = (0, vue.computed)(() => {
  21437. const value = model.value;
  21438. if (isBoolean(value)) return value;
  21439. else if (isArray$1(value)) if (isObject$1(actualValue.value)) return value.map(vue.toRaw).some((o) => isEqual$1(o, actualValue.value));
  21440. else return value.map(vue.toRaw).includes(actualValue.value);
  21441. else if (value !== null && value !== void 0) return value === props.trueValue || value === props.trueLabel;
  21442. else return !!value;
  21443. });
  21444. return {
  21445. checkboxButtonSize: useFormSize((0, vue.computed)(() => checkboxGroup?.size?.value), { prop: true }),
  21446. isChecked,
  21447. isFocused,
  21448. checkboxSize: useFormSize((0, vue.computed)(() => checkboxGroup?.size?.value)),
  21449. hasOwnLabel: (0, vue.computed)(() => {
  21450. return !!slots.default || !isPropAbsent(actualValue.value);
  21451. }),
  21452. actualValue
  21453. };
  21454. };
  21455. //#endregion
  21456. //#region ../../packages/components/checkbox/src/composables/use-checkbox.ts
  21457. const useCheckbox = (props, slots) => {
  21458. const { formItem: elFormItem } = useFormItem();
  21459. const { model, isGroup, isLimitExceeded } = useCheckboxModel(props);
  21460. const { isFocused, isChecked, checkboxButtonSize, checkboxSize, hasOwnLabel, actualValue } = useCheckboxStatus(props, slots, { model });
  21461. const { isDisabled } = useCheckboxDisabled({
  21462. model,
  21463. isChecked
  21464. });
  21465. const { inputId, isLabeledByFormItem } = useFormItemInputId(props, {
  21466. formItemContext: elFormItem,
  21467. disableIdGeneration: hasOwnLabel,
  21468. disableIdManagement: isGroup
  21469. });
  21470. const { handleChange, onClickRoot } = useCheckboxEvent(props, {
  21471. model,
  21472. isLimitExceeded,
  21473. hasOwnLabel,
  21474. isDisabled,
  21475. isLabeledByFormItem
  21476. });
  21477. const setStoreValue = () => {
  21478. function addToStore() {
  21479. if (isArray$1(model.value) && !model.value.includes(actualValue.value)) model.value.push(actualValue.value);
  21480. else model.value = props.trueValue ?? props.trueLabel ?? true;
  21481. }
  21482. props.checked && addToStore();
  21483. };
  21484. setStoreValue();
  21485. useDeprecated({
  21486. from: "label act as value",
  21487. replacement: "value",
  21488. version: "3.0.0",
  21489. scope: "el-checkbox",
  21490. ref: "https://element-plus.org/en-US/component/checkbox.html"
  21491. }, (0, vue.computed)(() => isGroup.value && isPropAbsent(props.value)));
  21492. useDeprecated({
  21493. from: "true-label",
  21494. replacement: "true-value",
  21495. version: "3.0.0",
  21496. scope: "el-checkbox",
  21497. ref: "https://element-plus.org/en-US/component/checkbox.html"
  21498. }, (0, vue.computed)(() => !!props.trueLabel));
  21499. useDeprecated({
  21500. from: "false-label",
  21501. replacement: "false-value",
  21502. version: "3.0.0",
  21503. scope: "el-checkbox",
  21504. ref: "https://element-plus.org/en-US/component/checkbox.html"
  21505. }, (0, vue.computed)(() => !!props.falseLabel));
  21506. return {
  21507. inputId,
  21508. isLabeledByFormItem,
  21509. isChecked,
  21510. isDisabled,
  21511. isFocused,
  21512. checkboxButtonSize,
  21513. checkboxSize,
  21514. hasOwnLabel,
  21515. model,
  21516. actualValue,
  21517. handleChange,
  21518. onClickRoot
  21519. };
  21520. };
  21521. //#endregion
  21522. //#region ../../packages/components/checkbox/src/checkbox.vue?vue&type=script&setup=true&lang.ts
  21523. const _hoisted_1$64 = [
  21524. "id",
  21525. "indeterminate",
  21526. "name",
  21527. "tabindex",
  21528. "disabled"
  21529. ];
  21530. var checkbox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  21531. name: "ElCheckbox",
  21532. __name: "checkbox",
  21533. props: checkboxProps,
  21534. emits: checkboxEmits,
  21535. setup(__props) {
  21536. const props = __props;
  21537. const { inputId, isLabeledByFormItem, isChecked, isDisabled, isFocused, checkboxSize, hasOwnLabel, model, actualValue, handleChange, onClickRoot } = useCheckbox(props, (0, vue.useSlots)());
  21538. const inputBindings = (0, vue.computed)(() => {
  21539. if (props.trueValue || props.falseValue || props.trueLabel || props.falseLabel) return {
  21540. "true-value": props.trueValue ?? props.trueLabel ?? true,
  21541. "false-value": props.falseValue ?? props.falseLabel ?? false
  21542. };
  21543. return { value: actualValue.value };
  21544. });
  21545. const ns = useNamespace("checkbox");
  21546. const compKls = (0, vue.computed)(() => {
  21547. return [
  21548. ns.b(),
  21549. ns.m(checkboxSize.value),
  21550. ns.is("disabled", isDisabled.value),
  21551. ns.is("bordered", props.border),
  21552. ns.is("checked", isChecked.value)
  21553. ];
  21554. });
  21555. const spanKls = (0, vue.computed)(() => {
  21556. return [
  21557. ns.e("input"),
  21558. ns.is("disabled", isDisabled.value),
  21559. ns.is("checked", isChecked.value),
  21560. ns.is("indeterminate", props.indeterminate),
  21561. ns.is("focus", isFocused.value)
  21562. ];
  21563. });
  21564. return (_ctx, _cache) => {
  21565. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(!(0, vue.unref)(hasOwnLabel) && (0, vue.unref)(isLabeledByFormItem) ? "span" : "label"), {
  21566. for: !(0, vue.unref)(hasOwnLabel) && (0, vue.unref)(isLabeledByFormItem) ? null : (0, vue.unref)(inputId),
  21567. class: (0, vue.normalizeClass)(compKls.value),
  21568. "aria-controls": __props.indeterminate ? __props.ariaControls : null,
  21569. "aria-checked": __props.indeterminate ? "mixed" : void 0,
  21570. "aria-label": __props.ariaLabel,
  21571. onClick: (0, vue.unref)(onClickRoot)
  21572. }, {
  21573. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(spanKls.value) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", (0, vue.mergeProps)({
  21574. id: (0, vue.unref)(inputId),
  21575. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(model) ? model.value = $event : null),
  21576. class: (0, vue.unref)(ns).e("original"),
  21577. type: "checkbox",
  21578. indeterminate: __props.indeterminate,
  21579. name: __props.name,
  21580. tabindex: __props.tabindex,
  21581. disabled: (0, vue.unref)(isDisabled)
  21582. }, inputBindings.value, {
  21583. onChange: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleChange) && (0, vue.unref)(handleChange)(...args)),
  21584. onFocus: _cache[2] || (_cache[2] = ($event) => isFocused.value = true),
  21585. onBlur: _cache[3] || (_cache[3] = ($event) => isFocused.value = false),
  21586. onClick: _cache[4] || (_cache[4] = (0, vue.withModifiers)(() => {}, ["stop"]))
  21587. }), null, 16, _hoisted_1$64), [[vue.vModelCheckbox, (0, vue.unref)(model)]]), (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner")) }, null, 2)], 2), (0, vue.unref)(hasOwnLabel) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  21588. key: 0,
  21589. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("label"))
  21590. }, [(0, vue.renderSlot)(_ctx.$slots, "default"), !_ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.label), 1)], 64)) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true)]),
  21591. _: 3
  21592. }, 8, [
  21593. "for",
  21594. "class",
  21595. "aria-controls",
  21596. "aria-checked",
  21597. "aria-label",
  21598. "onClick"
  21599. ]);
  21600. };
  21601. }
  21602. });
  21603. //#endregion
  21604. //#region ../../packages/components/checkbox/src/checkbox.vue
  21605. var checkbox_default = checkbox_vue_vue_type_script_setup_true_lang_default;
  21606. //#endregion
  21607. //#region ../../packages/components/checkbox/src/checkbox-button.vue?vue&type=script&setup=true&lang.ts
  21608. const _hoisted_1$63 = [
  21609. "name",
  21610. "tabindex",
  21611. "disabled"
  21612. ];
  21613. var checkbox_button_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  21614. name: "ElCheckboxButton",
  21615. __name: "checkbox-button",
  21616. props: checkboxProps,
  21617. emits: checkboxEmits,
  21618. setup(__props) {
  21619. const props = __props;
  21620. const { isFocused, isChecked, isDisabled, checkboxButtonSize, model, actualValue, handleChange } = useCheckbox(props, (0, vue.useSlots)());
  21621. const inputBindings = (0, vue.computed)(() => {
  21622. if (props.trueValue || props.falseValue || props.trueLabel || props.falseLabel) return {
  21623. "true-value": props.trueValue ?? props.trueLabel ?? true,
  21624. "false-value": props.falseValue ?? props.falseLabel ?? false
  21625. };
  21626. return { value: actualValue.value };
  21627. });
  21628. const checkboxGroup = (0, vue.inject)(checkboxGroupContextKey, void 0);
  21629. const ns = useNamespace("checkbox");
  21630. const activeStyle = (0, vue.computed)(() => {
  21631. const fillValue = checkboxGroup?.fill?.value ?? "";
  21632. return {
  21633. backgroundColor: fillValue,
  21634. borderColor: fillValue,
  21635. color: checkboxGroup?.textColor?.value ?? "",
  21636. boxShadow: fillValue ? `-1px 0 0 0 ${fillValue}` : void 0
  21637. };
  21638. });
  21639. const labelKls = (0, vue.computed)(() => {
  21640. return [
  21641. ns.b("button"),
  21642. ns.bm("button", checkboxButtonSize.value),
  21643. ns.is("disabled", isDisabled.value),
  21644. ns.is("checked", isChecked.value),
  21645. ns.is("focus", isFocused.value)
  21646. ];
  21647. });
  21648. return (_ctx, _cache) => {
  21649. return (0, vue.openBlock)(), (0, vue.createElementBlock)("label", { class: (0, vue.normalizeClass)(labelKls.value) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", (0, vue.mergeProps)({
  21650. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(model) ? model.value = $event : null),
  21651. class: (0, vue.unref)(ns).be("button", "original"),
  21652. type: "checkbox",
  21653. name: __props.name,
  21654. tabindex: __props.tabindex,
  21655. disabled: (0, vue.unref)(isDisabled)
  21656. }, inputBindings.value, {
  21657. onChange: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleChange) && (0, vue.unref)(handleChange)(...args)),
  21658. onFocus: _cache[2] || (_cache[2] = ($event) => isFocused.value = true),
  21659. onBlur: _cache[3] || (_cache[3] = ($event) => isFocused.value = false),
  21660. onClick: _cache[4] || (_cache[4] = (0, vue.withModifiers)(() => {}, ["stop"]))
  21661. }), null, 16, _hoisted_1$63), [[vue.vModelCheckbox, (0, vue.unref)(model)]]), _ctx.$slots.default || __props.label ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  21662. key: 0,
  21663. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("button", "inner")),
  21664. style: (0, vue.normalizeStyle)((0, vue.unref)(isChecked) ? activeStyle.value : void 0)
  21665. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.label), 1)])], 6)) : (0, vue.createCommentVNode)("v-if", true)], 2);
  21666. };
  21667. }
  21668. });
  21669. //#endregion
  21670. //#region ../../packages/components/checkbox/src/checkbox-button.vue
  21671. var checkbox_button_default = checkbox_button_vue_vue_type_script_setup_true_lang_default;
  21672. //#endregion
  21673. //#region ../../packages/components/checkbox/src/checkbox-group.ts
  21674. const checkboxGroupProps = buildProps({
  21675. modelValue: {
  21676. type: definePropType(Array),
  21677. default: () => []
  21678. },
  21679. disabled: {
  21680. type: Boolean,
  21681. default: void 0
  21682. },
  21683. min: Number,
  21684. max: Number,
  21685. size: useSizeProp,
  21686. fill: String,
  21687. textColor: String,
  21688. tag: {
  21689. type: String,
  21690. default: "div"
  21691. },
  21692. validateEvent: {
  21693. type: Boolean,
  21694. default: true
  21695. },
  21696. options: { type: definePropType(Array) },
  21697. props: {
  21698. type: definePropType(Object),
  21699. default: () => checkboxDefaultProps
  21700. },
  21701. type: {
  21702. type: String,
  21703. values: ["checkbox", "button"],
  21704. default: "checkbox"
  21705. },
  21706. ...useAriaProps(["ariaLabel"])
  21707. });
  21708. const checkboxGroupEmits = {
  21709. [UPDATE_MODEL_EVENT]: (val) => isArray$1(val),
  21710. change: (val) => isArray$1(val)
  21711. };
  21712. const checkboxDefaultProps = {
  21713. label: "label",
  21714. value: "value",
  21715. disabled: "disabled"
  21716. };
  21717. //#endregion
  21718. //#region ../../packages/components/checkbox/src/checkbox-group.vue?vue&type=script&setup=true&lang.ts
  21719. var checkbox_group_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  21720. name: "ElCheckboxGroup",
  21721. __name: "checkbox-group",
  21722. props: checkboxGroupProps,
  21723. emits: checkboxGroupEmits,
  21724. setup(__props, { emit: __emit }) {
  21725. const props = __props;
  21726. const emit = __emit;
  21727. const ns = useNamespace("checkbox");
  21728. const checkboxDisabled = useFormDisabled();
  21729. const { formItem } = useFormItem();
  21730. const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem });
  21731. const changeEvent = async (value) => {
  21732. emit(UPDATE_MODEL_EVENT, value);
  21733. await (0, vue.nextTick)();
  21734. emit(CHANGE_EVENT, value);
  21735. };
  21736. const modelValue = (0, vue.computed)({
  21737. get() {
  21738. return props.modelValue;
  21739. },
  21740. set(val) {
  21741. changeEvent(val);
  21742. }
  21743. });
  21744. const aliasProps = (0, vue.computed)(() => ({
  21745. ...checkboxDefaultProps,
  21746. ...props.props
  21747. }));
  21748. const getOptionProps = (option) => {
  21749. const { label, value, disabled } = aliasProps.value;
  21750. const base = {
  21751. label: option[label],
  21752. value: option[value],
  21753. disabled: option[disabled]
  21754. };
  21755. return {
  21756. ...omit(option, [
  21757. label,
  21758. value,
  21759. disabled
  21760. ]),
  21761. ...base
  21762. };
  21763. };
  21764. const optionComponent = (0, vue.computed)(() => props.type === "button" ? checkbox_button_default : checkbox_default);
  21765. (0, vue.provide)(checkboxGroupContextKey, {
  21766. ...pick((0, vue.toRefs)(props), [
  21767. "size",
  21768. "min",
  21769. "max",
  21770. "validateEvent",
  21771. "fill",
  21772. "textColor"
  21773. ]),
  21774. disabled: checkboxDisabled,
  21775. modelValue,
  21776. changeEvent
  21777. });
  21778. (0, vue.watch)(() => props.modelValue, (newVal, oldValue) => {
  21779. if (props.validateEvent && !isEqual$1(newVal, oldValue)) formItem?.validate("change").catch(NOOP);
  21780. });
  21781. return (_ctx, _cache) => {
  21782. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
  21783. id: (0, vue.unref)(groupId),
  21784. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("group")),
  21785. role: "group",
  21786. "aria-label": !(0, vue.unref)(isLabeledByFormItem) ? __props.ariaLabel || "checkbox-group" : void 0,
  21787. "aria-labelledby": (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(formItem)?.labelId : void 0
  21788. }, {
  21789. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.options, (item, index) => {
  21790. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(optionComponent.value), (0, vue.mergeProps)({ key: index }, { ref_for: true }, getOptionProps(item)), null, 16);
  21791. }), 128))])]),
  21792. _: 3
  21793. }, 8, [
  21794. "id",
  21795. "class",
  21796. "aria-label",
  21797. "aria-labelledby"
  21798. ]);
  21799. };
  21800. }
  21801. });
  21802. //#endregion
  21803. //#region ../../packages/components/checkbox/src/checkbox-group.vue
  21804. var checkbox_group_default = checkbox_group_vue_vue_type_script_setup_true_lang_default;
  21805. //#endregion
  21806. //#region ../../packages/components/checkbox/index.ts
  21807. const ElCheckbox = withInstall(checkbox_default, {
  21808. CheckboxButton: checkbox_button_default,
  21809. CheckboxGroup: checkbox_group_default
  21810. });
  21811. const ElCheckboxButton = withNoopInstall(checkbox_button_default);
  21812. const ElCheckboxGroup = withNoopInstall(checkbox_group_default);
  21813. //#endregion
  21814. //#region ../../packages/components/radio/src/radio.ts
  21815. const radioPropsBase = buildProps({
  21816. modelValue: {
  21817. type: [
  21818. String,
  21819. Number,
  21820. Boolean
  21821. ],
  21822. default: void 0
  21823. },
  21824. size: useSizeProp,
  21825. disabled: {
  21826. type: Boolean,
  21827. default: void 0
  21828. },
  21829. label: {
  21830. type: [
  21831. String,
  21832. Number,
  21833. Boolean
  21834. ],
  21835. default: void 0
  21836. },
  21837. value: {
  21838. type: [
  21839. String,
  21840. Number,
  21841. Boolean
  21842. ],
  21843. default: void 0
  21844. },
  21845. name: {
  21846. type: String,
  21847. default: void 0
  21848. }
  21849. });
  21850. const radioProps = buildProps({
  21851. ...radioPropsBase,
  21852. border: Boolean
  21853. });
  21854. const radioEmits = {
  21855. [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val),
  21856. [CHANGE_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val)
  21857. };
  21858. const radioPropsDefaults = {
  21859. modelValue: void 0,
  21860. disabled: void 0,
  21861. label: void 0,
  21862. value: void 0,
  21863. name: void 0,
  21864. border: false
  21865. };
  21866. //#endregion
  21867. //#region ../../packages/components/radio/src/constants.ts
  21868. const radioGroupKey = Symbol("radioGroupKey");
  21869. //#endregion
  21870. //#region ../../packages/components/radio/src/use-radio.ts
  21871. const useRadio = (props, emit) => {
  21872. const radioRef = (0, vue.ref)();
  21873. const radioGroup = (0, vue.inject)(radioGroupKey, void 0);
  21874. const isGroup = (0, vue.computed)(() => !!radioGroup);
  21875. const actualValue = (0, vue.computed)(() => {
  21876. if (!isPropAbsent(props.value)) return props.value;
  21877. return props.label;
  21878. });
  21879. const modelValue = (0, vue.computed)({
  21880. get() {
  21881. return isGroup.value ? radioGroup.modelValue : props.modelValue;
  21882. },
  21883. set(val) {
  21884. if (isGroup.value) radioGroup.changeEvent(val);
  21885. else emit && emit("update:modelValue", val);
  21886. radioRef.value.checked = props.modelValue === actualValue.value;
  21887. }
  21888. });
  21889. const size = useFormSize((0, vue.computed)(() => radioGroup?.size));
  21890. const disabled = useFormDisabled((0, vue.computed)(() => radioGroup?.disabled));
  21891. const focus = (0, vue.ref)(false);
  21892. const tabIndex = (0, vue.computed)(() => {
  21893. return disabled.value || isGroup.value && modelValue.value !== actualValue.value ? -1 : 0;
  21894. });
  21895. useDeprecated({
  21896. from: "label act as value",
  21897. replacement: "value",
  21898. version: "3.0.0",
  21899. scope: "el-radio",
  21900. ref: "https://element-plus.org/en-US/component/radio.html"
  21901. }, (0, vue.computed)(() => isGroup.value && isPropAbsent(props.value)));
  21902. return {
  21903. radioRef,
  21904. isGroup,
  21905. radioGroup,
  21906. focus,
  21907. size,
  21908. disabled,
  21909. tabIndex,
  21910. modelValue,
  21911. actualValue
  21912. };
  21913. };
  21914. //#endregion
  21915. //#region ../../packages/components/radio/src/radio.vue?vue&type=script&setup=true&lang.ts
  21916. const _hoisted_1$62 = [
  21917. "value",
  21918. "name",
  21919. "disabled",
  21920. "checked"
  21921. ];
  21922. var radio_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  21923. name: "ElRadio",
  21924. __name: "radio",
  21925. props: radioProps,
  21926. emits: radioEmits,
  21927. setup(__props, { emit: __emit }) {
  21928. const props = __props;
  21929. const emit = __emit;
  21930. const ns = useNamespace("radio");
  21931. const { radioRef, radioGroup, focus, size, disabled, modelValue, actualValue } = useRadio(props, emit);
  21932. function handleChange() {
  21933. (0, vue.nextTick)(() => emit(CHANGE_EVENT, modelValue.value));
  21934. }
  21935. return (_ctx, _cache) => {
  21936. return (0, vue.openBlock)(), (0, vue.createElementBlock)("label", { class: (0, vue.normalizeClass)([
  21937. (0, vue.unref)(ns).b(),
  21938. (0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled)),
  21939. (0, vue.unref)(ns).is("focus", (0, vue.unref)(focus)),
  21940. (0, vue.unref)(ns).is("bordered", __props.border),
  21941. (0, vue.unref)(ns).is("checked", (0, vue.unref)(modelValue) === (0, vue.unref)(actualValue)),
  21942. (0, vue.unref)(ns).m((0, vue.unref)(size))
  21943. ]) }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([
  21944. (0, vue.unref)(ns).e("input"),
  21945. (0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled)),
  21946. (0, vue.unref)(ns).is("checked", (0, vue.unref)(modelValue) === (0, vue.unref)(actualValue))
  21947. ]) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", {
  21948. ref_key: "radioRef",
  21949. ref: radioRef,
  21950. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(modelValue) ? modelValue.value = $event : null),
  21951. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("original")),
  21952. value: (0, vue.unref)(actualValue),
  21953. name: __props.name || (0, vue.unref)(radioGroup)?.name,
  21954. disabled: (0, vue.unref)(disabled),
  21955. checked: (0, vue.unref)(modelValue) === (0, vue.unref)(actualValue),
  21956. type: "radio",
  21957. onFocus: _cache[1] || (_cache[1] = ($event) => focus.value = true),
  21958. onBlur: _cache[2] || (_cache[2] = ($event) => focus.value = false),
  21959. onChange: handleChange,
  21960. onClick: _cache[3] || (_cache[3] = (0, vue.withModifiers)(() => {}, ["stop"]))
  21961. }, null, 42, _hoisted_1$62), [[vue.vModelRadio, (0, vue.unref)(modelValue)]]), (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner")) }, null, 2)], 2), (0, vue.createElementVNode)("span", {
  21962. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("label")),
  21963. onKeydown: _cache[4] || (_cache[4] = (0, vue.withModifiers)(() => {}, ["stop"]))
  21964. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.label), 1)])], 34)], 2);
  21965. };
  21966. }
  21967. });
  21968. //#endregion
  21969. //#region ../../packages/components/radio/src/radio.vue
  21970. var radio_default = radio_vue_vue_type_script_setup_true_lang_default;
  21971. //#endregion
  21972. //#region ../../packages/components/radio/src/radio-button.ts
  21973. const radioButtonProps = buildProps({ ...radioPropsBase });
  21974. const radioButtonPropsDefaults = {
  21975. modelValue: void 0,
  21976. disabled: void 0,
  21977. label: void 0,
  21978. value: void 0,
  21979. name: void 0
  21980. };
  21981. //#endregion
  21982. //#region ../../packages/components/radio/src/radio-button.vue?vue&type=script&setup=true&lang.ts
  21983. const _hoisted_1$61 = [
  21984. "value",
  21985. "name",
  21986. "disabled"
  21987. ];
  21988. var radio_button_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  21989. name: "ElRadioButton",
  21990. __name: "radio-button",
  21991. props: radioButtonProps,
  21992. setup(__props) {
  21993. const props = __props;
  21994. const ns = useNamespace("radio");
  21995. const { radioRef, focus, size, disabled, modelValue, radioGroup, actualValue } = useRadio(props);
  21996. const activeStyle = (0, vue.computed)(() => {
  21997. return {
  21998. backgroundColor: radioGroup?.fill || "",
  21999. borderColor: radioGroup?.fill || "",
  22000. boxShadow: radioGroup?.fill ? `-1px 0 0 0 ${radioGroup.fill}` : "",
  22001. color: radioGroup?.textColor || ""
  22002. };
  22003. });
  22004. return (_ctx, _cache) => {
  22005. return (0, vue.openBlock)(), (0, vue.createElementBlock)("label", { class: (0, vue.normalizeClass)([
  22006. (0, vue.unref)(ns).b("button"),
  22007. (0, vue.unref)(ns).is("active", (0, vue.unref)(modelValue) === (0, vue.unref)(actualValue)),
  22008. (0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled)),
  22009. (0, vue.unref)(ns).is("focus", (0, vue.unref)(focus)),
  22010. (0, vue.unref)(ns).bm("button", (0, vue.unref)(size))
  22011. ]) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", {
  22012. ref_key: "radioRef",
  22013. ref: radioRef,
  22014. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(modelValue) ? modelValue.value = $event : null),
  22015. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("button", "original-radio")),
  22016. value: (0, vue.unref)(actualValue),
  22017. type: "radio",
  22018. name: __props.name || (0, vue.unref)(radioGroup)?.name,
  22019. disabled: (0, vue.unref)(disabled),
  22020. onFocus: _cache[1] || (_cache[1] = ($event) => focus.value = true),
  22021. onBlur: _cache[2] || (_cache[2] = ($event) => focus.value = false),
  22022. onClick: _cache[3] || (_cache[3] = (0, vue.withModifiers)(() => {}, ["stop"]))
  22023. }, null, 42, _hoisted_1$61), [[vue.vModelRadio, (0, vue.unref)(modelValue)]]), (0, vue.createElementVNode)("span", {
  22024. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("button", "inner")),
  22025. style: (0, vue.normalizeStyle)((0, vue.unref)(modelValue) === (0, vue.unref)(actualValue) ? activeStyle.value : {}),
  22026. onKeydown: _cache[4] || (_cache[4] = (0, vue.withModifiers)(() => {}, ["stop"]))
  22027. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.label), 1)])], 38)], 2);
  22028. };
  22029. }
  22030. });
  22031. //#endregion
  22032. //#region ../../packages/components/radio/src/radio-button.vue
  22033. var radio_button_default = radio_button_vue_vue_type_script_setup_true_lang_default;
  22034. //#endregion
  22035. //#region ../../packages/components/radio/src/radio-group.ts
  22036. const radioDefaultProps = {
  22037. label: "label",
  22038. value: "value",
  22039. disabled: "disabled"
  22040. };
  22041. const radioGroupProps = buildProps({
  22042. id: {
  22043. type: String,
  22044. default: void 0
  22045. },
  22046. size: useSizeProp,
  22047. disabled: {
  22048. type: Boolean,
  22049. default: void 0
  22050. },
  22051. modelValue: {
  22052. type: [
  22053. String,
  22054. Number,
  22055. Boolean
  22056. ],
  22057. default: void 0
  22058. },
  22059. fill: {
  22060. type: String,
  22061. default: ""
  22062. },
  22063. textColor: {
  22064. type: String,
  22065. default: ""
  22066. },
  22067. name: {
  22068. type: String,
  22069. default: void 0
  22070. },
  22071. validateEvent: {
  22072. type: Boolean,
  22073. default: true
  22074. },
  22075. options: { type: definePropType(Array) },
  22076. props: {
  22077. type: definePropType(Object),
  22078. default: () => radioDefaultProps
  22079. },
  22080. type: {
  22081. type: String,
  22082. values: ["radio", "button"],
  22083. default: "radio"
  22084. },
  22085. ...useAriaProps(["ariaLabel"])
  22086. });
  22087. const radioGroupEmits = radioEmits;
  22088. const radioGroupPropsDefaults = {
  22089. id: void 0,
  22090. disabled: void 0,
  22091. modelValue: void 0,
  22092. fill: "",
  22093. textColor: "",
  22094. name: void 0,
  22095. validateEvent: true,
  22096. props: () => radioDefaultProps,
  22097. type: "radio"
  22098. };
  22099. //#endregion
  22100. //#region ../../packages/components/radio/src/radio-group.vue?vue&type=script&setup=true&lang.ts
  22101. const _hoisted_1$60 = [
  22102. "id",
  22103. "aria-label",
  22104. "aria-labelledby"
  22105. ];
  22106. var radio_group_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  22107. name: "ElRadioGroup",
  22108. __name: "radio-group",
  22109. props: radioGroupProps,
  22110. emits: radioGroupEmits,
  22111. setup(__props, { emit: __emit }) {
  22112. const props = __props;
  22113. const emit = __emit;
  22114. const ns = useNamespace("radio");
  22115. const radioId = useId();
  22116. const radioGroupRef = (0, vue.ref)();
  22117. const { formItem } = useFormItem();
  22118. const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem });
  22119. const changeEvent = (value) => {
  22120. emit(UPDATE_MODEL_EVENT, value);
  22121. (0, vue.nextTick)(() => emit(CHANGE_EVENT, value));
  22122. };
  22123. (0, vue.onMounted)(() => {
  22124. const radios = radioGroupRef.value.querySelectorAll("[type=radio]");
  22125. const firstLabel = radios[0];
  22126. if (!Array.from(radios).some((radio) => radio.checked) && firstLabel) firstLabel.tabIndex = 0;
  22127. });
  22128. const name = (0, vue.computed)(() => {
  22129. return props.name || radioId.value;
  22130. });
  22131. const aliasProps = (0, vue.computed)(() => ({
  22132. ...radioDefaultProps,
  22133. ...props.props
  22134. }));
  22135. const getOptionProps = (option) => {
  22136. const { label, value, disabled } = aliasProps.value;
  22137. const base = {
  22138. label: option[label],
  22139. value: option[value],
  22140. disabled: option[disabled]
  22141. };
  22142. return {
  22143. ...omit(option, [
  22144. label,
  22145. value,
  22146. disabled
  22147. ]),
  22148. ...base
  22149. };
  22150. };
  22151. const optionComponent = (0, vue.computed)(() => props.type === "button" ? radio_button_default : radio_default);
  22152. (0, vue.provide)(radioGroupKey, (0, vue.reactive)({
  22153. ...(0, vue.toRefs)(props),
  22154. changeEvent,
  22155. name
  22156. }));
  22157. (0, vue.watch)(() => props.modelValue, (newVal, oldValue) => {
  22158. if (props.validateEvent && !isEqual$1(newVal, oldValue)) formItem?.validate("change").catch(NOOP);
  22159. });
  22160. return (_ctx, _cache) => {
  22161. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  22162. id: (0, vue.unref)(groupId),
  22163. ref_key: "radioGroupRef",
  22164. ref: radioGroupRef,
  22165. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("group")),
  22166. role: "radiogroup",
  22167. "aria-label": !(0, vue.unref)(isLabeledByFormItem) ? __props.ariaLabel || "radio-group" : void 0,
  22168. "aria-labelledby": (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(formItem).labelId : void 0
  22169. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.options, (item, index) => {
  22170. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(optionComponent.value), (0, vue.mergeProps)({ key: index }, { ref_for: true }, getOptionProps(item)), null, 16);
  22171. }), 128))])], 10, _hoisted_1$60);
  22172. };
  22173. }
  22174. });
  22175. //#endregion
  22176. //#region ../../packages/components/radio/src/radio-group.vue
  22177. var radio_group_default = radio_group_vue_vue_type_script_setup_true_lang_default;
  22178. //#endregion
  22179. //#region ../../packages/components/radio/index.ts
  22180. const ElRadio = withInstall(radio_default, {
  22181. RadioButton: radio_button_default,
  22182. RadioGroup: radio_group_default
  22183. });
  22184. const ElRadioGroup = withNoopInstall(radio_group_default);
  22185. const ElRadioButton = withNoopInstall(radio_button_default);
  22186. //#endregion
  22187. //#region ../../packages/components/cascader-panel/src/types.ts
  22188. const CASCADER_PANEL_INJECTION_KEY = Symbol();
  22189. //#endregion
  22190. //#region ../../packages/components/cascader-panel/src/node-content.tsx
  22191. function isVNodeEmpty(vnodes) {
  22192. return !!(isArray$1(vnodes) ? vnodes.every(({ type }) => type === vue.Comment) : vnodes?.type === vue.Comment);
  22193. }
  22194. var node_content_default = /* @__PURE__ */ (0, vue.defineComponent)({
  22195. name: "NodeContent",
  22196. props: { node: {
  22197. type: Object,
  22198. required: true
  22199. } },
  22200. setup(props) {
  22201. const ns = useNamespace("cascader-node");
  22202. const { renderLabelFn } = (0, vue.inject)(CASCADER_PANEL_INJECTION_KEY);
  22203. const { node } = props;
  22204. const { data, label: nodeLabel } = node;
  22205. const label = () => {
  22206. const renderLabel = renderLabelFn?.({
  22207. node,
  22208. data
  22209. });
  22210. return isVNodeEmpty(renderLabel) ? nodeLabel : renderLabel ?? nodeLabel;
  22211. };
  22212. return () => (0, vue.createVNode)("span", { "class": ns.e("label") }, [label()]);
  22213. }
  22214. });
  22215. //#endregion
  22216. //#region ../../packages/components/cascader-panel/src/node.vue?vue&type=script&setup=true&lang.ts
  22217. const _hoisted_1$59 = [
  22218. "id",
  22219. "aria-haspopup",
  22220. "aria-owns",
  22221. "aria-expanded",
  22222. "tabindex"
  22223. ];
  22224. var node_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  22225. name: "ElCascaderNode",
  22226. __name: "node",
  22227. props: {
  22228. node: {
  22229. type: Object,
  22230. required: true
  22231. },
  22232. menuId: {
  22233. type: String,
  22234. required: false
  22235. }
  22236. },
  22237. emits: ["expand"],
  22238. setup(__props, { emit: __emit }) {
  22239. const props = __props;
  22240. const emit = __emit;
  22241. const panel = (0, vue.inject)(CASCADER_PANEL_INJECTION_KEY);
  22242. const ns = useNamespace("cascader-node");
  22243. const isHoverMenu = (0, vue.computed)(() => panel.isHoverMenu);
  22244. const multiple = (0, vue.computed)(() => panel.config.multiple);
  22245. const checkStrictly = (0, vue.computed)(() => panel.config.checkStrictly);
  22246. const showPrefix = (0, vue.computed)(() => panel.config.showPrefix);
  22247. const checkedNodeId = (0, vue.computed)(() => panel.checkedNodes[0]?.uid);
  22248. const isDisabled = (0, vue.computed)(() => props.node.isDisabled);
  22249. const isLeaf = (0, vue.computed)(() => props.node.isLeaf);
  22250. const expandable = (0, vue.computed)(() => checkStrictly.value && !isLeaf.value || !isDisabled.value);
  22251. const inExpandingPath = (0, vue.computed)(() => isInPath(panel.expandingNode));
  22252. const inCheckedPath = (0, vue.computed)(() => checkStrictly.value && panel.checkedNodes.some(isInPath));
  22253. const isInPath = (node) => {
  22254. const { level, uid } = props.node;
  22255. return node?.pathNodes[level - 1]?.uid === uid;
  22256. };
  22257. const doExpand = () => {
  22258. if (inExpandingPath.value) return;
  22259. panel.expandNode(props.node);
  22260. };
  22261. const doCheck = (checked) => {
  22262. const { node } = props;
  22263. if (checked === node.checked) return;
  22264. panel.handleCheckChange(node, checked);
  22265. };
  22266. const doLoad = () => {
  22267. panel.lazyLoad(props.node, () => {
  22268. if (!isLeaf.value) doExpand();
  22269. });
  22270. };
  22271. const handleHoverExpand = (e) => {
  22272. if (!isHoverMenu.value) return;
  22273. handleExpand();
  22274. !isLeaf.value && emit("expand", e);
  22275. };
  22276. const handleExpand = () => {
  22277. const { node } = props;
  22278. if (!expandable.value || node.loading) return;
  22279. node.loaded ? doExpand() : doLoad();
  22280. };
  22281. const handleClick = () => {
  22282. if (isLeaf.value && !isDisabled.value && !checkStrictly.value && !multiple.value) handleCheck(true);
  22283. else if ((panel.config.checkOnClickNode && (multiple.value || checkStrictly.value) || isLeaf.value && panel.config.checkOnClickLeaf) && !isDisabled.value) handleSelectCheck(!props.node.checked);
  22284. else if (!isHoverMenu.value) handleExpand();
  22285. };
  22286. const handleSelectCheck = (checked) => {
  22287. if (checkStrictly.value) {
  22288. doCheck(checked);
  22289. if (props.node.loaded) doExpand();
  22290. } else handleCheck(checked);
  22291. };
  22292. const handleCheck = (checked) => {
  22293. if (!props.node.loaded) doLoad();
  22294. else {
  22295. doCheck(checked);
  22296. !checkStrictly.value && doExpand();
  22297. }
  22298. };
  22299. return (_ctx, _cache) => {
  22300. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  22301. id: `${__props.menuId}-${__props.node.uid}`,
  22302. role: "menuitem",
  22303. "aria-haspopup": !isLeaf.value,
  22304. "aria-owns": isLeaf.value ? void 0 : __props.menuId,
  22305. "aria-expanded": inExpandingPath.value,
  22306. tabindex: expandable.value ? -1 : void 0,
  22307. class: (0, vue.normalizeClass)([
  22308. (0, vue.unref)(ns).b(),
  22309. (0, vue.unref)(ns).is("selectable", checkStrictly.value),
  22310. (0, vue.unref)(ns).is("active", __props.node.checked),
  22311. (0, vue.unref)(ns).is("disabled", !expandable.value),
  22312. inExpandingPath.value && "in-active-path",
  22313. inCheckedPath.value && "in-checked-path"
  22314. ]),
  22315. onMouseenter: handleHoverExpand,
  22316. onFocus: handleHoverExpand,
  22317. onClick: handleClick
  22318. }, [
  22319. (0, vue.createCommentVNode)(" prefix "),
  22320. multiple.value && showPrefix.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElCheckbox), {
  22321. key: 0,
  22322. "model-value": __props.node.checked,
  22323. indeterminate: __props.node.indeterminate,
  22324. disabled: isDisabled.value,
  22325. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"])),
  22326. "onUpdate:modelValue": handleSelectCheck
  22327. }, null, 8, [
  22328. "model-value",
  22329. "indeterminate",
  22330. "disabled"
  22331. ])) : checkStrictly.value && showPrefix.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElRadio), {
  22332. key: 1,
  22333. "model-value": checkedNodeId.value,
  22334. label: __props.node.uid,
  22335. disabled: isDisabled.value,
  22336. "onUpdate:modelValue": handleSelectCheck,
  22337. onClick: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"]))
  22338. }, {
  22339. default: (0, vue.withCtx)(() => [(0, vue.createCommentVNode)("\n Add an empty element to avoid render label,\n do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485\n "), _cache[2] || (_cache[2] = (0, vue.createElementVNode)("span", null, null, -1))]),
  22340. _: 1
  22341. }, 8, [
  22342. "model-value",
  22343. "label",
  22344. "disabled"
  22345. ])) : isLeaf.value && __props.node.checked ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  22346. key: 2,
  22347. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("prefix"))
  22348. }, {
  22349. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(check_default))]),
  22350. _: 1
  22351. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
  22352. (0, vue.createCommentVNode)(" content "),
  22353. (0, vue.createVNode)((0, vue.unref)(node_content_default), { node: __props.node }, null, 8, ["node"]),
  22354. (0, vue.createCommentVNode)(" postfix "),
  22355. !isLeaf.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 3 }, [__props.node.loading ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  22356. key: 0,
  22357. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).is("loading"), (0, vue.unref)(ns).e("postfix")])
  22358. }, {
  22359. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(loading_default))]),
  22360. _: 1
  22361. }, 8, ["class"])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  22362. key: 1,
  22363. class: (0, vue.normalizeClass)(["arrow-right", (0, vue.unref)(ns).e("postfix")])
  22364. }, {
  22365. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
  22366. _: 1
  22367. }, 8, ["class"]))], 64)) : (0, vue.createCommentVNode)("v-if", true)
  22368. ], 42, _hoisted_1$59);
  22369. };
  22370. }
  22371. });
  22372. //#endregion
  22373. //#region ../../packages/components/cascader-panel/src/node.vue
  22374. var node_default = node_vue_vue_type_script_setup_true_lang_default;
  22375. //#endregion
  22376. //#region ../../packages/components/cascader-panel/src/menu.vue?vue&type=script&setup=true&lang.ts
  22377. var menu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  22378. name: "ElCascaderMenu",
  22379. __name: "menu",
  22380. props: {
  22381. nodes: {
  22382. type: Array,
  22383. required: true
  22384. },
  22385. index: {
  22386. type: Number,
  22387. required: true
  22388. },
  22389. virtualScroll: {
  22390. type: Boolean,
  22391. required: false,
  22392. default: false
  22393. },
  22394. itemSize: {
  22395. type: Number,
  22396. required: false,
  22397. default: 34
  22398. },
  22399. height: {
  22400. type: Number,
  22401. required: false,
  22402. default: 204
  22403. }
  22404. },
  22405. setup(__props, { expose: __expose }) {
  22406. const props = __props;
  22407. const instance = (0, vue.getCurrentInstance)();
  22408. const ns = useNamespace("cascader-menu");
  22409. const { t } = useLocale();
  22410. const id = useId();
  22411. let activeNode;
  22412. let hoverTimer;
  22413. const panel = (0, vue.inject)(CASCADER_PANEL_INJECTION_KEY);
  22414. const hoverZone = (0, vue.ref)();
  22415. const virtualListRef = (0, vue.ref)();
  22416. const isEmpty = (0, vue.computed)(() => !props.nodes.length);
  22417. const isLoading = (0, vue.computed)(() => !panel.initialLoaded);
  22418. const menuId = (0, vue.computed)(() => `${id.value}-${props.index}`);
  22419. const getActiveNodeIndex = () => {
  22420. let activeNodeId;
  22421. if (panel.expandingNode) {
  22422. const { level, pathNodes } = panel.expandingNode;
  22423. if (props.index < level) activeNodeId = pathNodes[props.index]?.uid;
  22424. else if (props.index === level && panel.checkedNodes.length > 0) activeNodeId = panel.checkedNodes[0]?.pathNodes[props.index]?.uid;
  22425. } else if (panel.checkedNodes.length > 0 && props.index < panel.checkedNodes[0].pathNodes.length) activeNodeId = panel.checkedNodes[0].pathNodes[props.index]?.uid;
  22426. return activeNodeId !== void 0 ? props.nodes.findIndex((node) => node.uid === activeNodeId) : -1;
  22427. };
  22428. const getNodeIndexById = (nodeId) => {
  22429. if (!nodeId) return -1;
  22430. return props.nodes.findIndex((node) => `${menuId.value}-${node.uid}` === nodeId);
  22431. };
  22432. const scrollToItem = (index) => {
  22433. const targetIndex = clamp$1(index, 0, props.nodes.length - 1);
  22434. virtualListRef.value?.scrollToItem(targetIndex);
  22435. };
  22436. const focusNodeAt = (index) => {
  22437. if (!props.nodes.length) return;
  22438. const targetIndex = clamp$1(index, 0, props.nodes.length - 1);
  22439. scrollToItem(targetIndex);
  22440. (0, vue.nextTick)(() => {
  22441. const node = instance.vnode.el?.querySelector(`#${menuId.value}-${props.nodes[targetIndex].uid}`);
  22442. if (node) focusNode(node);
  22443. });
  22444. };
  22445. const handleExpand = (e) => {
  22446. activeNode = e.target;
  22447. };
  22448. const handleMouseMove = (e) => {
  22449. if (!panel.isHoverMenu || !activeNode || !hoverZone.value) return;
  22450. if (activeNode.contains(e.target)) {
  22451. clearHoverTimer();
  22452. const el = instance.vnode.el;
  22453. const { left } = el.getBoundingClientRect();
  22454. const { offsetWidth, offsetHeight } = el;
  22455. const startX = e.clientX - left;
  22456. const top = activeNode.offsetTop;
  22457. const bottom = top + activeNode.offsetHeight;
  22458. const scrollTop = props.virtualScroll ? virtualListRef.value?.states?.scrollOffset || 0 : el.querySelector(`.${ns.e("wrap")}`)?.scrollTop || 0;
  22459. hoverZone.value.innerHTML = `
  22460. <path style="pointer-events: auto;" fill="transparent" d="M${startX} ${top} L${offsetWidth} ${scrollTop} V${top} Z" />
  22461. <path style="pointer-events: auto;" fill="transparent" d="M${startX} ${bottom} L${offsetWidth} ${offsetHeight + scrollTop} V${bottom} Z" />
  22462. `;
  22463. } else if (!hoverTimer) hoverTimer = window.setTimeout(clearHoverZone, panel.config.hoverThreshold);
  22464. };
  22465. const clearHoverTimer = () => {
  22466. if (!hoverTimer) return;
  22467. clearTimeout(hoverTimer);
  22468. hoverTimer = void 0;
  22469. };
  22470. const clearHoverZone = () => {
  22471. if (!hoverZone.value) return;
  22472. hoverZone.value.innerHTML = "";
  22473. clearHoverTimer();
  22474. };
  22475. __expose({
  22476. getActiveNodeIndex,
  22477. getNodeIndexById,
  22478. scrollToItem,
  22479. focusNodeAt,
  22480. virtualListRef,
  22481. get $el() {
  22482. return instance.vnode.el;
  22483. }
  22484. });
  22485. return (_ctx, _cache) => {
  22486. return __props.virtualScroll ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  22487. key: menuId.value,
  22488. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  22489. onMousemove: handleMouseMove,
  22490. onMouseleave: clearHoverZone
  22491. }, [
  22492. (0, vue.createVNode)((0, vue.unref)(FixedSizeList), {
  22493. ref_key: "virtualListRef",
  22494. ref: virtualListRef,
  22495. height: __props.height,
  22496. "item-size": __props.itemSize,
  22497. data: __props.nodes,
  22498. total: __props.nodes.length,
  22499. "class-name": (0, vue.unref)(ns).e("list"),
  22500. "inner-element": "ul",
  22501. "inner-props": {
  22502. role: "menu",
  22503. class: (0, vue.unref)(ns).is("empty", isEmpty.value)
  22504. }
  22505. }, {
  22506. default: (0, vue.withCtx)(({ data, index: nodeIndex, style }) => [((0, vue.openBlock)(), (0, vue.createBlock)(node_default, {
  22507. key: data[nodeIndex].uid,
  22508. node: data[nodeIndex],
  22509. "menu-id": menuId.value,
  22510. style: (0, vue.normalizeStyle)(style),
  22511. onExpand: handleExpand
  22512. }, null, 8, [
  22513. "node",
  22514. "menu-id",
  22515. "style"
  22516. ]))]),
  22517. _: 1
  22518. }, 8, [
  22519. "height",
  22520. "item-size",
  22521. "data",
  22522. "total",
  22523. "class-name",
  22524. "inner-props"
  22525. ]),
  22526. isLoading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  22527. key: 0,
  22528. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text"))
  22529. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), {
  22530. size: 14,
  22531. class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading"))
  22532. }, {
  22533. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(loading_default))]),
  22534. _: 1
  22535. }, 8, ["class"]), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.loading")), 1)], 2)) : isEmpty.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  22536. key: 1,
  22537. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text"))
  22538. }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.noData")), 1)])], 2)) : (0, vue.unref)(panel)?.isHoverMenu ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [(0, vue.createCommentVNode)(" eslint-disable vue/html-self-closing "), ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  22539. ref_key: "hoverZone",
  22540. ref: hoverZone,
  22541. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("hover-zone"))
  22542. }, null, 2))], 2112)) : (0, vue.createCommentVNode)("v-if", true),
  22543. (0, vue.createCommentVNode)(" eslint-enable vue/html-self-closing ")
  22544. ], 34)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElScrollbar), {
  22545. key: menuId.value,
  22546. tag: "ul",
  22547. role: "menu",
  22548. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  22549. "wrap-class": (0, vue.unref)(ns).e("wrap"),
  22550. "view-class": [(0, vue.unref)(ns).e("list"), (0, vue.unref)(ns).is("empty", isEmpty.value)],
  22551. onMousemove: handleMouseMove,
  22552. onMouseleave: clearHoverZone
  22553. }, {
  22554. default: (0, vue.withCtx)(() => [
  22555. ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.nodes, (node) => {
  22556. return (0, vue.openBlock)(), (0, vue.createBlock)(node_default, {
  22557. key: node.uid,
  22558. node,
  22559. "menu-id": menuId.value,
  22560. onExpand: handleExpand
  22561. }, null, 8, ["node", "menu-id"]);
  22562. }), 128)),
  22563. isLoading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  22564. key: 0,
  22565. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text"))
  22566. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), {
  22567. size: 14,
  22568. class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading"))
  22569. }, {
  22570. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(loading_default))]),
  22571. _: 1
  22572. }, 8, ["class"]), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.loading")), 1)], 2)) : isEmpty.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  22573. key: 1,
  22574. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text"))
  22575. }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.noData")), 1)])], 2)) : (0, vue.unref)(panel)?.isHoverMenu ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [(0, vue.createCommentVNode)(" eslint-disable vue/html-self-closing "), ((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", {
  22576. ref_key: "hoverZone",
  22577. ref: hoverZone,
  22578. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("hover-zone"))
  22579. }, null, 2))], 2112)) : (0, vue.createCommentVNode)("v-if", true),
  22580. (0, vue.createCommentVNode)(" eslint-enable vue/html-self-closing ")
  22581. ]),
  22582. _: 3
  22583. }, 8, [
  22584. "class",
  22585. "wrap-class",
  22586. "view-class"
  22587. ]));
  22588. };
  22589. }
  22590. });
  22591. //#endregion
  22592. //#region ../../packages/components/cascader-panel/src/menu.vue
  22593. var menu_default$1 = menu_vue_vue_type_script_setup_true_lang_default;
  22594. //#endregion
  22595. //#region ../../packages/components/cascader-panel/src/node.ts
  22596. let uid = 0;
  22597. const calculatePathNodes = (node) => {
  22598. const nodes = [node];
  22599. let { parent } = node;
  22600. while (parent) {
  22601. nodes.unshift(parent);
  22602. parent = parent.parent;
  22603. }
  22604. return nodes;
  22605. };
  22606. var Node$2 = class Node$2 {
  22607. constructor(data, config, parent, root = false) {
  22608. this.data = data;
  22609. this.config = config;
  22610. this.parent = parent;
  22611. this.root = root;
  22612. this.uid = uid++;
  22613. this.checked = false;
  22614. this.indeterminate = false;
  22615. this.loading = false;
  22616. const { value: valueKey, label: labelKey, children: childrenKey } = config;
  22617. const childrenData = data[childrenKey];
  22618. const pathNodes = calculatePathNodes(this);
  22619. this.level = root ? 0 : parent ? parent.level + 1 : 1;
  22620. this.value = data[valueKey];
  22621. this.label = data[labelKey];
  22622. this.pathNodes = pathNodes;
  22623. this.pathValues = pathNodes.map((node) => node.value);
  22624. this.pathLabels = pathNodes.map((node) => node.label);
  22625. this.childrenData = childrenData;
  22626. this.children = (childrenData || []).map((child) => new Node$2(child, config, this));
  22627. this.loaded = !config.lazy || this.isLeaf || !isEmpty(childrenData);
  22628. this.text = "";
  22629. }
  22630. get isDisabled() {
  22631. const { data, parent, config } = this;
  22632. const { disabled, checkStrictly } = config;
  22633. return (isFunction$1(disabled) ? disabled(data, this) : !!data[disabled]) || !checkStrictly && !!parent?.isDisabled;
  22634. }
  22635. get isLeaf() {
  22636. const { data, config, childrenData, loaded } = this;
  22637. const { lazy, leaf } = config;
  22638. const isLeaf = isFunction$1(leaf) ? leaf(data, this) : data[leaf];
  22639. return isUndefined(isLeaf) ? lazy && !loaded ? false : !(isArray$1(childrenData) && childrenData.length) : !!isLeaf;
  22640. }
  22641. get valueByOption() {
  22642. return this.config.emitPath ? this.pathValues : this.value;
  22643. }
  22644. appendChild(childData) {
  22645. const { childrenData, children } = this;
  22646. const node = new Node$2(childData, this.config, this);
  22647. if (isArray$1(childrenData)) childrenData.push(childData);
  22648. else this.childrenData = [childData];
  22649. children.push(node);
  22650. return node;
  22651. }
  22652. calcText(allLevels, separator) {
  22653. const text = allLevels ? this.pathLabels.join(separator) : this.label;
  22654. this.text = text;
  22655. return text;
  22656. }
  22657. broadcast(checked) {
  22658. this.children.forEach((child) => {
  22659. if (child) {
  22660. child.broadcast(checked);
  22661. child.onParentCheck?.(checked);
  22662. }
  22663. });
  22664. }
  22665. emit() {
  22666. const { parent } = this;
  22667. if (parent) {
  22668. parent.onChildCheck?.();
  22669. parent.emit();
  22670. }
  22671. }
  22672. onParentCheck(checked) {
  22673. if (!this.isDisabled) this.setCheckState(checked);
  22674. }
  22675. onChildCheck() {
  22676. const { children } = this;
  22677. const validChildren = children.filter((child) => !child.isDisabled);
  22678. const checked = validChildren.length ? validChildren.every((child) => child.checked) : false;
  22679. this.setCheckState(checked);
  22680. }
  22681. setCheckState(checked) {
  22682. const totalNum = this.children.length;
  22683. const checkedNum = this.children.reduce((c, p) => {
  22684. return c + (p.checked ? 1 : p.indeterminate ? .5 : 0);
  22685. }, 0);
  22686. this.checked = this.loaded && this.children.filter((child) => !child.isDisabled).every((child) => child.loaded && child.checked) && checked;
  22687. this.indeterminate = this.loaded && checkedNum !== totalNum && checkedNum > 0;
  22688. }
  22689. doCheck(checked) {
  22690. if (this.checked === checked) return;
  22691. const { checkStrictly, multiple } = this.config;
  22692. if (checkStrictly || !multiple) this.checked = checked;
  22693. else {
  22694. this.broadcast(checked);
  22695. this.setCheckState(checked);
  22696. this.emit();
  22697. }
  22698. }
  22699. };
  22700. //#endregion
  22701. //#region ../../packages/components/cascader-panel/src/store.ts
  22702. const flatNodes = (nodes, leafOnly) => {
  22703. return nodes.reduce((res, node) => {
  22704. if (node.isLeaf) res.push(node);
  22705. else {
  22706. !leafOnly && res.push(node);
  22707. res = res.concat(flatNodes(node.children, leafOnly));
  22708. }
  22709. return res;
  22710. }, []);
  22711. };
  22712. var Store = class {
  22713. constructor(data, config) {
  22714. this.config = config;
  22715. const nodes = (data || []).map((nodeData) => new Node$2(nodeData, this.config));
  22716. this.nodes = nodes;
  22717. this.allNodes = flatNodes(nodes, false);
  22718. this.leafNodes = flatNodes(nodes, true);
  22719. }
  22720. getNodes() {
  22721. return this.nodes;
  22722. }
  22723. getFlattedNodes(leafOnly) {
  22724. return leafOnly ? this.leafNodes : this.allNodes;
  22725. }
  22726. appendNode(nodeData, parentNode) {
  22727. const node = parentNode ? parentNode.appendChild(nodeData) : new Node$2(nodeData, this.config);
  22728. if (!parentNode) this.nodes.push(node);
  22729. this.appendAllNodesAndLeafNodes(node);
  22730. }
  22731. appendNodes(nodeDataList, parentNode) {
  22732. if (nodeDataList.length > 0) nodeDataList.forEach((nodeData) => this.appendNode(nodeData, parentNode));
  22733. else parentNode && parentNode.isLeaf && this.leafNodes.push(parentNode);
  22734. }
  22735. appendAllNodesAndLeafNodes(node) {
  22736. this.allNodes.push(node);
  22737. node.isLeaf && this.leafNodes.push(node);
  22738. if (node.children) node.children.forEach((subNode) => {
  22739. this.appendAllNodesAndLeafNodes(subNode);
  22740. });
  22741. }
  22742. getNodeByValue(value, leafOnly = false) {
  22743. if (isPropAbsent(value)) return null;
  22744. return this.getFlattedNodes(leafOnly).find((node) => isEqual$1(node.value, value) || isEqual$1(node.pathValues, value)) || null;
  22745. }
  22746. getSameNode(node) {
  22747. if (!node) return null;
  22748. return this.getFlattedNodes(false).find(({ value, level }) => isEqual$1(node.value, value) && node.level === level) || null;
  22749. }
  22750. };
  22751. //#endregion
  22752. //#region ../../packages/components/cascader-panel/src/utils.ts
  22753. const getMenuIndex = (el) => {
  22754. if (!el) return 0;
  22755. const pieces = el.id.split("-");
  22756. return Number(pieces[pieces.length - 2]);
  22757. };
  22758. const checkNode = (el) => {
  22759. if (!el) return;
  22760. const input = el.querySelector("input");
  22761. if (input) input.click();
  22762. else if (isLeaf(el)) el.click();
  22763. };
  22764. const sortByOriginalOrder = (oldNodes, newNodes) => {
  22765. const newNodesCopy = newNodes.slice(0);
  22766. const newIds = newNodesCopy.map((node) => node.uid);
  22767. const res = oldNodes.reduce((acc, item) => {
  22768. const index = newIds.indexOf(item.uid);
  22769. if (index > -1) {
  22770. acc.push(item);
  22771. newNodesCopy.splice(index, 1);
  22772. newIds.splice(index, 1);
  22773. }
  22774. return acc;
  22775. }, []);
  22776. res.push(...newNodesCopy);
  22777. return res;
  22778. };
  22779. //#endregion
  22780. //#region ../../packages/components/cascader-panel/src/index.vue?vue&type=script&setup=true&lang.ts
  22781. var index_vue_vue_type_script_setup_true_lang_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
  22782. name: "ElCascaderPanel",
  22783. __name: "index",
  22784. props: cascaderPanelProps,
  22785. emits: cascaderPanelEmits,
  22786. setup(__props, { expose: __expose, emit: __emit }) {
  22787. const props = __props;
  22788. const emit = __emit;
  22789. let manualChecked = false;
  22790. const ns = useNamespace("cascader");
  22791. const config = useCascaderConfig(props);
  22792. const slots = (0, vue.useSlots)();
  22793. let store;
  22794. const initialLoaded = (0, vue.ref)(true);
  22795. const initialLoadedOnce = (0, vue.ref)(false);
  22796. const menuList = (0, vue.ref)([]);
  22797. const checkedValue = (0, vue.ref)();
  22798. const menus = (0, vue.ref)([]);
  22799. const expandingNode = (0, vue.ref)();
  22800. const checkedNodes = (0, vue.ref)([]);
  22801. const isHoverMenu = (0, vue.computed)(() => config.value.expandTrigger === "hover");
  22802. const renderLabelFn = (0, vue.computed)(() => props.renderLabel || slots.default);
  22803. const virtualScroll = (0, vue.computed)(() => props.virtualScroll);
  22804. const itemSize = (0, vue.computed)(() => props.itemSize);
  22805. const height = (0, vue.computed)(() => props.height);
  22806. const initStore = () => {
  22807. const { options } = props;
  22808. const cfg = config.value;
  22809. manualChecked = false;
  22810. store = new Store(options, cfg);
  22811. menus.value = [store.getNodes()];
  22812. if (cfg.lazy && isEmpty(props.options)) {
  22813. initialLoaded.value = false;
  22814. lazyLoad(void 0, (list) => {
  22815. if (list) {
  22816. store = new Store(list, cfg);
  22817. menus.value = [store.getNodes()];
  22818. }
  22819. initialLoaded.value = true;
  22820. syncCheckedValue(false, true);
  22821. });
  22822. } else syncCheckedValue(false, true);
  22823. };
  22824. const lazyLoad = (node, cb) => {
  22825. const cfg = config.value;
  22826. node = node || new Node$2({}, cfg, void 0, true);
  22827. node.loading = true;
  22828. const resolve = (dataList) => {
  22829. const _node = node;
  22830. const parent = _node.root ? null : _node;
  22831. _node.loading = false;
  22832. _node.loaded = true;
  22833. _node.childrenData = _node.childrenData || [];
  22834. dataList && store?.appendNodes(dataList, parent);
  22835. dataList && cb?.(dataList);
  22836. if (node.level === 0) initialLoadedOnce.value = true;
  22837. };
  22838. const reject = () => {
  22839. node.loading = false;
  22840. node.loaded = false;
  22841. if (node.level === 0) initialLoaded.value = true;
  22842. };
  22843. cfg.lazyLoad(node, resolve, reject);
  22844. };
  22845. const expandNode = (node, silent) => {
  22846. const { level } = node;
  22847. const newMenus = menus.value.slice(0, level);
  22848. let newExpandingNode;
  22849. if (node.isLeaf) newExpandingNode = node.pathNodes[level - 2];
  22850. else {
  22851. newExpandingNode = node;
  22852. newMenus.push(node.children);
  22853. }
  22854. if (expandingNode.value?.uid !== newExpandingNode?.uid) {
  22855. expandingNode.value = node;
  22856. menus.value = newMenus;
  22857. !silent && emit("expand-change", node?.pathValues || []);
  22858. }
  22859. };
  22860. const handleCheckChange = (node, checked, emitClose = true) => {
  22861. const { checkStrictly, multiple } = config.value;
  22862. const oldNode = checkedNodes.value[0];
  22863. manualChecked = true;
  22864. !multiple && oldNode?.doCheck(false);
  22865. node.doCheck(checked);
  22866. calculateCheckedValue();
  22867. emitClose && !multiple && !checkStrictly && emit("close");
  22868. !emitClose && !multiple && expandParentNode(node);
  22869. };
  22870. const expandParentNode = (node) => {
  22871. if (!node) return;
  22872. node = node.parent;
  22873. expandParentNode(node);
  22874. node && expandNode(node);
  22875. };
  22876. const getFlattedNodes = (leafOnly) => store?.getFlattedNodes(leafOnly);
  22877. const getCheckedNodes = (leafOnly) => {
  22878. return getFlattedNodes(leafOnly)?.filter(({ checked }) => checked !== false);
  22879. };
  22880. const clearCheckedNodes = () => {
  22881. checkedNodes.value.forEach((node) => node.doCheck(false));
  22882. calculateCheckedValue();
  22883. menus.value = menus.value.slice(0, 1);
  22884. expandingNode.value = void 0;
  22885. emit("expand-change", []);
  22886. };
  22887. const calculateCheckedValue = () => {
  22888. const { checkStrictly, multiple } = config.value;
  22889. const oldNodes = checkedNodes.value;
  22890. const nodes = sortByOriginalOrder(oldNodes, getCheckedNodes(!checkStrictly));
  22891. const values = nodes.map((node) => node.valueByOption);
  22892. checkedNodes.value = nodes;
  22893. checkedValue.value = multiple ? values : values[0] ?? null;
  22894. };
  22895. const syncCheckedValue = (loaded = false, forced = false) => {
  22896. const { modelValue } = props;
  22897. const { lazy, multiple, checkStrictly } = config.value;
  22898. const leafOnly = !checkStrictly;
  22899. if (!initialLoaded.value || manualChecked || !forced && isEqual$1(modelValue, checkedValue.value)) return;
  22900. if (lazy && !loaded) {
  22901. const nodes = unique(flattenDeep(castArray(modelValue))).map((val) => store?.getNodeByValue(val)).filter((node) => !!node && !node.loaded && !node.loading);
  22902. if (nodes.length) nodes.forEach((node) => {
  22903. lazyLoad(node, () => syncCheckedValue(false, forced));
  22904. });
  22905. else syncCheckedValue(true, forced);
  22906. } else {
  22907. syncMenuState(unique((multiple ? castArray(modelValue) : [modelValue]).map((val) => store?.getNodeByValue(val, leafOnly))), forced);
  22908. checkedValue.value = cloneDeep(modelValue ?? void 0);
  22909. }
  22910. };
  22911. const syncMenuState = (newCheckedNodes, reserveExpandingState = true) => {
  22912. const { checkStrictly } = config.value;
  22913. const oldNodes = checkedNodes.value;
  22914. const newNodes = newCheckedNodes.filter((node) => !!node && (checkStrictly || node.isLeaf));
  22915. const oldExpandingNode = store?.getSameNode(expandingNode.value);
  22916. const newExpandingNode = reserveExpandingState && oldExpandingNode || newNodes[0];
  22917. if (newExpandingNode) newExpandingNode.pathNodes.forEach((node) => expandNode(node, true));
  22918. else expandingNode.value = void 0;
  22919. oldNodes.forEach((node) => node.doCheck(false));
  22920. (0, vue.reactive)(newNodes).forEach((node) => node.doCheck(true));
  22921. checkedNodes.value = newNodes;
  22922. (0, vue.nextTick)(scrollToExpandingNode);
  22923. };
  22924. const scrollToExpandingNode = () => {
  22925. if (!isClient) return;
  22926. menuList.value.forEach((menu) => {
  22927. const menuElement = menu?.$el;
  22928. if (menuElement) if (virtualScroll.value) {
  22929. const activeIndex = menu?.getActiveNodeIndex?.();
  22930. if (activeIndex !== void 0 && activeIndex >= 0) menu?.scrollToItem?.(activeIndex);
  22931. } else {
  22932. const container = menuElement.querySelector(`.${ns.namespace.value}-scrollbar__wrap`);
  22933. let activeNode = menuElement.querySelector(`.${ns.b("node")}.in-active-path`);
  22934. if (!activeNode) {
  22935. const activeElements = menuElement.querySelectorAll(`.${ns.b("node")}.${ns.is("active")}`);
  22936. activeNode = activeElements[activeElements.length - 1];
  22937. }
  22938. scrollIntoView(container, activeNode);
  22939. }
  22940. });
  22941. };
  22942. const handleKeyDown = (e) => {
  22943. const target = e.target;
  22944. const code = getEventCode(e);
  22945. switch (code) {
  22946. case EVENT_CODE.up:
  22947. case EVENT_CODE.down: {
  22948. e.preventDefault();
  22949. const distance = code === EVENT_CODE.up ? -1 : 1;
  22950. if (virtualScroll.value) {
  22951. const menuIndex = getMenuIndex(target);
  22952. const menu = menuList.value[menuIndex];
  22953. if (menu) {
  22954. const currentIndex = menu.getNodeIndexById(target.id);
  22955. if (currentIndex >= 0) {
  22956. const nodesInMenu = menus.value[menuIndex] ?? [];
  22957. const nodesCount = nodesInMenu.length;
  22958. let targetIndex = currentIndex + distance;
  22959. while (targetIndex >= 0 && targetIndex < nodesCount) {
  22960. if (!nodesInMenu[targetIndex].isDisabled) {
  22961. menu.focusNodeAt(targetIndex);
  22962. return;
  22963. }
  22964. targetIndex += distance;
  22965. }
  22966. }
  22967. }
  22968. }
  22969. focusNode(getSibling(target, distance, `.${ns.b("node")}[tabindex="-1"]`));
  22970. break;
  22971. }
  22972. case EVENT_CODE.left: {
  22973. e.preventDefault();
  22974. const expandedNode = menuList.value[getMenuIndex(target) - 1]?.$el.querySelector(`.${ns.b("node")}[aria-expanded="true"]`);
  22975. focusNode(expandedNode);
  22976. break;
  22977. }
  22978. case EVENT_CODE.right: {
  22979. e.preventDefault();
  22980. const firstNode = menuList.value[getMenuIndex(target) + 1]?.$el.querySelector(`.${ns.b("node")}[tabindex="-1"]`);
  22981. focusNode(firstNode);
  22982. break;
  22983. }
  22984. case EVENT_CODE.enter:
  22985. case EVENT_CODE.numpadEnter:
  22986. checkNode(target);
  22987. break;
  22988. }
  22989. };
  22990. (0, vue.provide)(CASCADER_PANEL_INJECTION_KEY, (0, vue.reactive)({
  22991. config,
  22992. expandingNode,
  22993. checkedNodes,
  22994. isHoverMenu,
  22995. initialLoaded,
  22996. renderLabelFn,
  22997. virtualScroll,
  22998. itemSize,
  22999. height,
  23000. lazyLoad,
  23001. expandNode,
  23002. handleCheckChange
  23003. }));
  23004. (0, vue.watch)(config, (newVal, oldVal) => {
  23005. if (isEqual$1(newVal, oldVal)) return;
  23006. initStore();
  23007. }, { immediate: true });
  23008. (0, vue.watch)(() => props.options, initStore, { deep: true });
  23009. (0, vue.watch)(() => props.modelValue, () => {
  23010. manualChecked = false;
  23011. syncCheckedValue();
  23012. }, { deep: true });
  23013. (0, vue.watch)(() => checkedValue.value, (val) => {
  23014. if (!isEqual$1(val, props.modelValue)) {
  23015. emit(UPDATE_MODEL_EVENT, val);
  23016. emit(CHANGE_EVENT, val);
  23017. }
  23018. });
  23019. const loadLazyRootNodes = () => {
  23020. if (initialLoadedOnce.value || !initialLoaded.value) return;
  23021. initStore();
  23022. };
  23023. (0, vue.onBeforeUpdate)(() => menuList.value = []);
  23024. (0, vue.onMounted)(() => !isEmpty(props.modelValue) && syncCheckedValue());
  23025. __expose({
  23026. menuList,
  23027. menus,
  23028. checkedNodes,
  23029. handleKeyDown,
  23030. handleCheckChange,
  23031. getFlattedNodes,
  23032. getCheckedNodes,
  23033. clearCheckedNodes,
  23034. calculateCheckedValue,
  23035. scrollToExpandingNode,
  23036. loadLazyRootNodes
  23037. });
  23038. return (_ctx, _cache) => {
  23039. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  23040. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("panel"), (0, vue.unref)(ns).is("bordered", __props.border)]),
  23041. onKeydown: handleKeyDown
  23042. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(menus.value, (menu, index) => {
  23043. return (0, vue.openBlock)(), (0, vue.createBlock)(menu_default$1, {
  23044. key: index,
  23045. ref_for: true,
  23046. ref: (item) => menuList.value[index] = item,
  23047. index,
  23048. nodes: [...menu],
  23049. "virtual-scroll": virtualScroll.value,
  23050. "item-size": itemSize.value,
  23051. height: height.value
  23052. }, {
  23053. empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "empty")]),
  23054. _: 3
  23055. }, 8, [
  23056. "index",
  23057. "nodes",
  23058. "virtual-scroll",
  23059. "item-size",
  23060. "height"
  23061. ]);
  23062. }), 128))], 34);
  23063. };
  23064. }
  23065. });
  23066. //#endregion
  23067. //#region ../../packages/components/cascader-panel/src/index.vue
  23068. var src_default$1 = index_vue_vue_type_script_setup_true_lang_default$1;
  23069. //#endregion
  23070. //#region ../../packages/components/cascader-panel/index.ts
  23071. const ElCascaderPanel = withInstall(src_default$1);
  23072. //#endregion
  23073. //#region ../../packages/components/cascader/src/cascader.ts
  23074. const cascaderProps = buildProps({
  23075. ...CommonProps,
  23076. size: useSizeProp,
  23077. placeholder: String,
  23078. disabled: {
  23079. type: Boolean,
  23080. default: void 0
  23081. },
  23082. clearable: Boolean,
  23083. clearIcon: {
  23084. type: iconPropType,
  23085. default: circle_close_default
  23086. },
  23087. filterable: Boolean,
  23088. filterMethod: {
  23089. type: definePropType(Function),
  23090. default: (node, keyword) => node.text.includes(keyword)
  23091. },
  23092. separator: {
  23093. type: String,
  23094. default: " / "
  23095. },
  23096. showAllLevels: {
  23097. type: Boolean,
  23098. default: true
  23099. },
  23100. collapseTags: Boolean,
  23101. maxCollapseTags: {
  23102. type: Number,
  23103. default: 1
  23104. },
  23105. collapseTagsTooltip: Boolean,
  23106. maxCollapseTagsTooltipHeight: { type: [String, Number] },
  23107. debounce: {
  23108. type: Number,
  23109. default: 300
  23110. },
  23111. beforeFilter: {
  23112. type: definePropType(Function),
  23113. default: () => true
  23114. },
  23115. placement: {
  23116. type: definePropType(String),
  23117. values: Ee,
  23118. default: "bottom-start"
  23119. },
  23120. fallbackPlacements: {
  23121. type: definePropType(Array),
  23122. default: [
  23123. "bottom-start",
  23124. "bottom",
  23125. "top-start",
  23126. "top",
  23127. "right",
  23128. "left"
  23129. ]
  23130. },
  23131. popperClass: useTooltipContentProps.popperClass,
  23132. popperStyle: useTooltipContentProps.popperStyle,
  23133. teleported: useTooltipContentProps.teleported,
  23134. effect: {
  23135. type: definePropType(String),
  23136. default: "light"
  23137. },
  23138. tagType: {
  23139. ...tagProps.type,
  23140. default: "info"
  23141. },
  23142. tagEffect: {
  23143. ...tagProps.effect,
  23144. default: "light"
  23145. },
  23146. validateEvent: {
  23147. type: Boolean,
  23148. default: true
  23149. },
  23150. persistent: {
  23151. type: Boolean,
  23152. default: true
  23153. },
  23154. showCheckedStrategy: {
  23155. type: String,
  23156. values: ["parent", "child"],
  23157. default: "child"
  23158. },
  23159. checkOnClickNode: Boolean,
  23160. showPrefix: {
  23161. type: Boolean,
  23162. default: true
  23163. },
  23164. fitInputWidth: {
  23165. type: [Boolean, Number],
  23166. default: false
  23167. },
  23168. ...useEmptyValuesProps
  23169. });
  23170. const emitChangeFn$1 = (value) => true;
  23171. const cascaderEmits = {
  23172. [UPDATE_MODEL_EVENT]: emitChangeFn$1,
  23173. [CHANGE_EVENT]: emitChangeFn$1,
  23174. focus: (evt) => evt instanceof FocusEvent,
  23175. blur: (evt) => evt instanceof FocusEvent,
  23176. clear: () => true,
  23177. visibleChange: (val) => isBoolean(val),
  23178. expandChange: (val) => !!val,
  23179. removeTag: (val) => !!val
  23180. };
  23181. //#endregion
  23182. //#region ../../packages/components/cascader/src/cascader.vue?vue&type=script&setup=true&lang.ts
  23183. const _hoisted_1$58 = ["placeholder"];
  23184. const _hoisted_2$35 = ["onClick"];
  23185. const _hoisted_3$16 = [
  23186. "id",
  23187. "data-suggestion-index",
  23188. "onClick"
  23189. ];
  23190. const SUGGESTION_ITEM_EXTRA_WIDTH = 34;
  23191. var cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  23192. name: "ElCascader",
  23193. __name: "cascader",
  23194. props: cascaderProps,
  23195. emits: cascaderEmits,
  23196. setup(__props, { expose: __expose, emit: __emit }) {
  23197. const popperOptions = { modifiers: [{
  23198. name: "arrowPosition",
  23199. enabled: true,
  23200. phase: "main",
  23201. fn: ({ state }) => {
  23202. const { modifiersData, placement } = state;
  23203. if ([
  23204. "right",
  23205. "left",
  23206. "bottom",
  23207. "top"
  23208. ].includes(placement)) return;
  23209. if (modifiersData.arrow) modifiersData.arrow.x = 35;
  23210. },
  23211. requires: ["arrow"]
  23212. }] };
  23213. const props = __props;
  23214. const emit = __emit;
  23215. const attrs = (0, vue.useAttrs)();
  23216. const slots = (0, vue.useSlots)();
  23217. let inputInitialHeight = 0;
  23218. let pressDeleteCount = 0;
  23219. const nsCascader = useNamespace("cascader");
  23220. const nsInput = useNamespace("input");
  23221. const sizeMapPadding = {
  23222. small: 7,
  23223. default: 11,
  23224. large: 15
  23225. };
  23226. const { t } = useLocale();
  23227. const { formItem } = useFormItem();
  23228. const isDisabled = useFormDisabled();
  23229. const { valueOnClear } = useEmptyValues(props);
  23230. const { isComposing, handleComposition } = useComposition({ afterComposition(event) {
  23231. const text = event.target?.value;
  23232. handleInput(text);
  23233. } });
  23234. const tooltipRef = (0, vue.ref)();
  23235. const tagTooltipRef = (0, vue.ref)();
  23236. const inputRef = (0, vue.ref)();
  23237. const tagWrapper = (0, vue.ref)();
  23238. const cascaderPanelRef = (0, vue.ref)();
  23239. const suggestionPanel = (0, vue.ref)();
  23240. const suggestionVirtualListRef = (0, vue.ref)();
  23241. const popperVisible = (0, vue.ref)(false);
  23242. const inputHover = (0, vue.ref)(false);
  23243. const filtering = (0, vue.ref)(false);
  23244. const inputValue = (0, vue.ref)("");
  23245. const searchInputValue = (0, vue.ref)("");
  23246. const tags = (0, vue.ref)([]);
  23247. const suggestions = (0, vue.ref)([]);
  23248. const suggestionListWidth = (0, vue.ref)("100%");
  23249. const hasCustomSuggestionItemSlot = (0, vue.computed)(() => !!slots["suggestion-item"]);
  23250. const clampedSuggestionListHeight = (0, vue.computed)(() => clamp$1(suggestions.value.length * props.itemSize, props.itemSize, props.height));
  23251. const showTagList = (0, vue.computed)(() => {
  23252. if (!props.props.multiple) return [];
  23253. return props.collapseTags ? tags.value.slice(0, props.maxCollapseTags) : tags.value;
  23254. });
  23255. const collapseTagList = (0, vue.computed)(() => {
  23256. if (!props.props.multiple) return [];
  23257. return props.collapseTags ? tags.value.slice(props.maxCollapseTags) : [];
  23258. });
  23259. const cascaderStyle = (0, vue.computed)(() => {
  23260. return attrs.style;
  23261. });
  23262. const inputPlaceholder = (0, vue.computed)(() => props.placeholder ?? t("el.cascader.placeholder"));
  23263. const currentPlaceholder = (0, vue.computed)(() => searchInputValue.value || tags.value.length > 0 || isComposing.value ? "" : inputPlaceholder.value);
  23264. const realSize = useFormSize();
  23265. const tagSize = (0, vue.computed)(() => realSize.value === "small" ? "small" : "default");
  23266. const multiple = (0, vue.computed)(() => !!props.props.multiple);
  23267. const readonly = (0, vue.computed)(() => !props.filterable || multiple.value);
  23268. const searchKeyword = (0, vue.computed)(() => multiple.value ? searchInputValue.value : inputValue.value);
  23269. const checkedNodes = (0, vue.computed)(() => cascaderPanelRef.value?.checkedNodes || []);
  23270. const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {
  23271. disabled: isDisabled,
  23272. beforeBlur(event) {
  23273. return tooltipRef.value?.isFocusInsideContent(event) || tagTooltipRef.value?.isFocusInsideContent(event);
  23274. },
  23275. afterBlur() {
  23276. if (props.validateEvent) formItem?.validate?.("blur").catch(NOOP);
  23277. }
  23278. });
  23279. const clearBtnVisible = (0, vue.computed)(() => {
  23280. if (!props.clearable || isDisabled.value || filtering.value || !inputHover.value && !isFocused.value) return false;
  23281. return !!checkedNodes.value.length;
  23282. });
  23283. const presentText = (0, vue.computed)(() => {
  23284. const { showAllLevels, separator } = props;
  23285. const nodes = checkedNodes.value;
  23286. return nodes.length ? multiple.value ? "" : nodes[0].calcText(showAllLevels, separator) : "";
  23287. });
  23288. const validateState = (0, vue.computed)(() => formItem?.validateState || "");
  23289. const checkedValue = (0, vue.computed)({
  23290. get() {
  23291. return cloneDeep(props.modelValue);
  23292. },
  23293. set(val) {
  23294. const value = val ?? valueOnClear.value;
  23295. emit(UPDATE_MODEL_EVENT, value);
  23296. emit(CHANGE_EVENT, value);
  23297. if (props.validateEvent) formItem?.validate("change").catch(NOOP);
  23298. }
  23299. });
  23300. const cascaderKls = (0, vue.computed)(() => {
  23301. return [
  23302. nsCascader.b(),
  23303. nsCascader.m(realSize.value),
  23304. nsCascader.is("disabled", isDisabled.value),
  23305. attrs.class
  23306. ];
  23307. });
  23308. const cascaderIconKls = (0, vue.computed)(() => {
  23309. return [
  23310. nsInput.e("icon"),
  23311. "icon-arrow-down",
  23312. nsCascader.is("reverse", popperVisible.value)
  23313. ];
  23314. });
  23315. const inputClass = (0, vue.computed)(() => nsCascader.is("focus", isFocused.value));
  23316. const contentRef = (0, vue.computed)(() => {
  23317. return tooltipRef.value?.popperRef?.contentRef;
  23318. });
  23319. const handleClickOutside = (event) => {
  23320. if (isFocused.value) handleBlur(new FocusEvent("blur", event));
  23321. togglePopperVisible(false);
  23322. };
  23323. const togglePopperVisible = (visible) => {
  23324. if (isDisabled.value) return;
  23325. visible = visible ?? !popperVisible.value;
  23326. if (visible !== popperVisible.value) {
  23327. popperVisible.value = visible;
  23328. inputRef.value?.input?.setAttribute("aria-expanded", `${visible}`);
  23329. if (visible) {
  23330. updatePopperPosition();
  23331. cascaderPanelRef.value && (0, vue.nextTick)(cascaderPanelRef.value.scrollToExpandingNode);
  23332. } else if (props.filterable) syncPresentTextValue();
  23333. emit("visibleChange", visible);
  23334. }
  23335. };
  23336. const updatePopperPosition = () => {
  23337. (0, vue.nextTick)(() => {
  23338. tooltipRef.value?.updatePopper();
  23339. });
  23340. };
  23341. const hideSuggestionPanel = () => {
  23342. filtering.value = false;
  23343. };
  23344. const genTag = (node) => {
  23345. const { showAllLevels, separator } = props;
  23346. return {
  23347. node,
  23348. key: node.uid,
  23349. text: node.calcText(showAllLevels, separator),
  23350. hitState: false,
  23351. closable: !isDisabled.value && !node.isDisabled
  23352. };
  23353. };
  23354. const deleteTag = (tag) => {
  23355. const node = tag.node;
  23356. node.doCheck(false);
  23357. cascaderPanelRef.value?.calculateCheckedValue();
  23358. emit("removeTag", node.valueByOption);
  23359. };
  23360. const getStrategyCheckedNodes = () => {
  23361. switch (props.showCheckedStrategy) {
  23362. case "child": return checkedNodes.value;
  23363. case "parent": {
  23364. const clickedNodes = getCheckedNodes(false);
  23365. const clickedNodesValue = clickedNodes.map((o) => o.value);
  23366. return clickedNodes.filter((o) => !o.parent || !clickedNodesValue.includes(o.parent.value));
  23367. }
  23368. default: return [];
  23369. }
  23370. };
  23371. const calculatePresentTags = () => {
  23372. if (!multiple.value) return;
  23373. const nodes = getStrategyCheckedNodes();
  23374. const allTags = [];
  23375. nodes.forEach((node) => allTags.push(genTag(node)));
  23376. tags.value = allTags;
  23377. };
  23378. const calculateSuggestions = () => {
  23379. const { filterMethod, showAllLevels, separator } = props;
  23380. const res = cascaderPanelRef.value?.getFlattedNodes(!props.props.checkStrictly)?.filter((node) => {
  23381. if (node.isDisabled) return false;
  23382. node.calcText(showAllLevels, separator);
  23383. return filterMethod(node, searchKeyword.value);
  23384. });
  23385. if (multiple.value) tags.value.forEach((tag) => {
  23386. tag.hitState = false;
  23387. });
  23388. filtering.value = true;
  23389. suggestions.value = res;
  23390. (0, vue.nextTick)(() => {
  23391. if (props.virtualScroll && suggestions.value.length > 0) suggestionVirtualListRef.value?.scrollToItem(0);
  23392. updateStyle();
  23393. });
  23394. updatePopperPosition();
  23395. };
  23396. const getSuggestionPanelEl = (selector) => {
  23397. const el = suggestionPanel.value;
  23398. return selector ? el?.querySelector(selector) ?? void 0 : el;
  23399. };
  23400. const focusFirstNode = () => {
  23401. let firstNode;
  23402. if (filtering.value && suggestionPanel.value) firstNode = getSuggestionPanelEl(`.${nsCascader.e("suggestion-item")}`);
  23403. else firstNode = cascaderPanelRef.value?.$el.querySelector(`.${nsCascader.b("node")}[tabindex="-1"]`);
  23404. if (firstNode) {
  23405. firstNode.focus();
  23406. if (!filtering.value && firstNode.getAttribute("aria-haspopup") === "true") firstNode.click();
  23407. }
  23408. };
  23409. const updateSuggestionPanelWidth = (inputWidth) => {
  23410. const suggestionPanelEl = getSuggestionPanelEl();
  23411. if (!suggestionPanelEl) return;
  23412. const panelWidth = isNumber(props.fitInputWidth) ? `${props.fitInputWidth}px` : `${inputWidth}px`;
  23413. const setPanelStyle = (el) => {
  23414. if (props.fitInputWidth !== false) {
  23415. el.style.width = panelWidth;
  23416. el.style.minWidth = "";
  23417. } else {
  23418. el.style.width = "";
  23419. el.style.minWidth = panelWidth;
  23420. }
  23421. };
  23422. setPanelStyle(suggestionPanelEl);
  23423. if (props.virtualScroll) {
  23424. suggestionListWidth.value = props.fitInputWidth !== false ? panelWidth : hasCustomSuggestionItemSlot.value ? `${inputWidth}px` : `${Math.max(inputWidth, calculateSuggestionMaxWidth())}px`;
  23425. return;
  23426. }
  23427. const suggestionList = getSuggestionPanelEl(`.${nsCascader.e("suggestion-list")}`);
  23428. if (suggestionList) setPanelStyle(suggestionList);
  23429. };
  23430. const getTagWrapperLeft = () => {
  23431. if (!slots.prefix) return 0;
  23432. const prefix = inputRef.value?.$el.querySelector(`.${nsInput.e("prefix")}`);
  23433. if (!prefix) return 0;
  23434. const prefixWidth = prefix.getBoundingClientRect().width;
  23435. if (prefixWidth <= 0) return 0;
  23436. return prefixWidth + sizeMapPadding[realSize.value || "default"];
  23437. };
  23438. const updateStyle = () => {
  23439. const inputInner = inputRef.value?.input;
  23440. const inputWrapper = inputRef.value?.$el;
  23441. if (!isClient || !inputInner || !inputWrapper) return;
  23442. if (suggestionPanel.value) updateSuggestionPanelWidth(inputWrapper.getBoundingClientRect().width);
  23443. const tagWrapperEl = tagWrapper.value;
  23444. if (tagWrapperEl) {
  23445. const height = tags.value.length > 0 ? `${Math.max(tagWrapperEl.offsetHeight, inputInitialHeight) - 2}px` : `${inputInitialHeight}px`;
  23446. inputInner.style.height = height;
  23447. tagWrapperEl.style.left = `${getTagWrapperLeft()}px`;
  23448. updatePopperPosition();
  23449. }
  23450. };
  23451. const calculateSuggestionMaxWidth = () => {
  23452. if (hasCustomSuggestionItemSlot.value) return 0;
  23453. if (!suggestions.value.length) return 0;
  23454. const ctx = document.createElement("canvas").getContext("2d");
  23455. if (!ctx) return 0;
  23456. const renderedSuggestion = getSuggestionPanelEl(`.${nsCascader.e("suggestion-item")}`);
  23457. if (!renderedSuggestion || !isClient) return 0;
  23458. const style = getComputedStyle(renderedSuggestion);
  23459. const padding = Number.parseFloat(style.paddingLeft) + Number.parseFloat(style.paddingRight);
  23460. ctx.font = `bold ${style.fontSize} ${style.fontFamily}`;
  23461. let maxWidth = 0;
  23462. let hasChecked = false;
  23463. for (const suggestion of suggestions.value) {
  23464. const text = suggestion.text || "";
  23465. const metrics = ctx.measureText(text);
  23466. maxWidth = Math.max(maxWidth, metrics.width);
  23467. if (suggestion.checked && !hasChecked) hasChecked = true;
  23468. }
  23469. return maxWidth + padding + (hasChecked ? SUGGESTION_ITEM_EXTRA_WIDTH : 0);
  23470. };
  23471. const getCheckedNodes = (leafOnly) => {
  23472. return cascaderPanelRef.value?.getCheckedNodes(leafOnly);
  23473. };
  23474. const handleExpandChange = (value) => {
  23475. updatePopperPosition();
  23476. emit("expandChange", value);
  23477. };
  23478. const handleKeyDown = (e) => {
  23479. if (isComposing.value) return;
  23480. switch (getEventCode(e)) {
  23481. case EVENT_CODE.enter:
  23482. case EVENT_CODE.numpadEnter:
  23483. togglePopperVisible();
  23484. break;
  23485. case EVENT_CODE.down:
  23486. togglePopperVisible(true);
  23487. (0, vue.nextTick)(focusFirstNode);
  23488. e.preventDefault();
  23489. break;
  23490. case EVENT_CODE.esc:
  23491. if (popperVisible.value === true) {
  23492. e.preventDefault();
  23493. e.stopPropagation();
  23494. togglePopperVisible(false);
  23495. }
  23496. break;
  23497. case EVENT_CODE.tab:
  23498. togglePopperVisible(false);
  23499. break;
  23500. }
  23501. };
  23502. const handleClear = () => {
  23503. cascaderPanelRef.value?.clearCheckedNodes();
  23504. if (!popperVisible.value && props.filterable) syncPresentTextValue();
  23505. togglePopperVisible(false);
  23506. emit("clear");
  23507. };
  23508. const syncPresentTextValue = () => {
  23509. const { value } = presentText;
  23510. inputValue.value = value;
  23511. searchInputValue.value = value;
  23512. };
  23513. const handleSuggestionClick = (node) => {
  23514. const { checked } = node;
  23515. if (multiple.value) cascaderPanelRef.value?.handleCheckChange(node, !checked, false);
  23516. else {
  23517. !checked && cascaderPanelRef.value?.handleCheckChange(node, true, false);
  23518. togglePopperVisible(false);
  23519. }
  23520. };
  23521. const getSuggestionIndexFromTarget = (target) => {
  23522. const indexStr = target.closest("[data-suggestion-index]")?.dataset.suggestionIndex;
  23523. if (!indexStr) return -1;
  23524. const index = Number.parseInt(indexStr, 10);
  23525. if (Number.isNaN(index) || index < 0 || index >= suggestions.value.length) return -1;
  23526. return index;
  23527. };
  23528. const handleSuggestionKeyDown = (e) => {
  23529. const target = e.target;
  23530. const code = getEventCode(e);
  23531. switch (code) {
  23532. case EVENT_CODE.up:
  23533. case EVENT_CODE.down: {
  23534. e.preventDefault();
  23535. const distance = code === EVENT_CODE.up ? -1 : 1;
  23536. if (props.virtualScroll && suggestionVirtualListRef.value) {
  23537. const currentIndex = getSuggestionIndexFromTarget(target);
  23538. if (currentIndex >= 0) {
  23539. const length = suggestions.value.length;
  23540. const targetIndex = (currentIndex + distance + length) % length;
  23541. suggestionVirtualListRef.value.scrollToItem(targetIndex);
  23542. (0, vue.nextTick)(() => {
  23543. const targetItem = getSuggestionPanelEl(`#suggestion-${suggestions.value[targetIndex].uid}`);
  23544. targetItem && focusNode(targetItem);
  23545. });
  23546. return;
  23547. }
  23548. }
  23549. focusNode(getSibling(target, distance, `.${nsCascader.e("suggestion-item")}[tabindex="-1"]`));
  23550. break;
  23551. }
  23552. case EVENT_CODE.enter:
  23553. case EVENT_CODE.numpadEnter:
  23554. target.click();
  23555. break;
  23556. }
  23557. };
  23558. const handleDelete = () => {
  23559. const lastTag = tags.value[tags.value.length - 1];
  23560. pressDeleteCount = searchInputValue.value ? 0 : pressDeleteCount + 1;
  23561. if (!lastTag || !pressDeleteCount || props.collapseTags && tags.value.length > 1) return;
  23562. if (lastTag.hitState) deleteTag(lastTag);
  23563. else lastTag.hitState = true;
  23564. };
  23565. const handleFilter = useDebounceFn(() => {
  23566. const { value } = searchKeyword;
  23567. if (!value) return;
  23568. const passed = props.beforeFilter(value);
  23569. if (isPromise(passed)) passed.then(calculateSuggestions).catch(() => {});
  23570. else if (passed !== false) calculateSuggestions();
  23571. else hideSuggestionPanel();
  23572. }, (0, vue.computed)(() => props.debounce));
  23573. const handleInput = (val, e) => {
  23574. !popperVisible.value && togglePopperVisible(true);
  23575. if (e?.isComposing) return;
  23576. if (val) handleFilter();
  23577. else {
  23578. const passed = props.beforeFilter("");
  23579. if (isPromise(passed)) passed.catch(() => {});
  23580. hideSuggestionPanel();
  23581. }
  23582. };
  23583. const getInputInnerHeight = (inputInner) => Number.parseFloat(useCssVar(nsInput.cssVarName("input-height"), inputInner).value) - 2;
  23584. const focus = () => {
  23585. inputRef.value?.focus();
  23586. };
  23587. const blur = () => {
  23588. inputRef.value?.blur();
  23589. };
  23590. (0, vue.watch)(filtering, updatePopperPosition);
  23591. (0, vue.watch)([
  23592. checkedNodes,
  23593. isDisabled,
  23594. () => props.collapseTags,
  23595. () => props.maxCollapseTags
  23596. ], calculatePresentTags);
  23597. (0, vue.watch)(tags, () => {
  23598. (0, vue.nextTick)(() => updateStyle());
  23599. });
  23600. (0, vue.watch)(realSize, async () => {
  23601. await (0, vue.nextTick)();
  23602. const inputInner = inputRef.value.input;
  23603. inputInitialHeight = getInputInnerHeight(inputInner) || inputInitialHeight;
  23604. updateStyle();
  23605. });
  23606. (0, vue.watch)(presentText, syncPresentTextValue, { immediate: true });
  23607. (0, vue.watch)(() => popperVisible.value, (val) => {
  23608. if (val && props.props.lazy && props.props.lazyLoad) cascaderPanelRef.value?.loadLazyRootNodes();
  23609. });
  23610. (0, vue.onMounted)(() => {
  23611. const inputInner = inputRef.value.input;
  23612. const inputWrapper = inputRef.value.$el;
  23613. const inputInnerHeight = getInputInnerHeight(inputInner);
  23614. inputInitialHeight = inputInner.offsetHeight || inputInnerHeight;
  23615. useResizeObserver(inputWrapper, updateStyle);
  23616. });
  23617. __expose({
  23618. getCheckedNodes,
  23619. cascaderPanelRef,
  23620. togglePopperVisible,
  23621. contentRef,
  23622. presentText,
  23623. focus,
  23624. blur
  23625. });
  23626. return (_ctx, _cache) => {
  23627. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
  23628. ref_key: "tooltipRef",
  23629. ref: tooltipRef,
  23630. visible: popperVisible.value,
  23631. teleported: __props.teleported,
  23632. "popper-class": [(0, vue.unref)(nsCascader).e("dropdown"), __props.popperClass],
  23633. "popper-style": __props.popperStyle,
  23634. "popper-options": popperOptions,
  23635. "fallback-placements": __props.fallbackPlacements,
  23636. "stop-popper-mouse-event": false,
  23637. "gpu-acceleration": false,
  23638. placement: __props.placement,
  23639. transition: `${(0, vue.unref)(nsCascader).namespace.value}-zoom-in-top`,
  23640. effect: __props.effect,
  23641. pure: "",
  23642. persistent: __props.persistent,
  23643. onHide: hideSuggestionPanel
  23644. }, {
  23645. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  23646. ref_key: "wrapperRef",
  23647. ref: wrapperRef,
  23648. class: (0, vue.normalizeClass)(cascaderKls.value),
  23649. style: (0, vue.normalizeStyle)(cascaderStyle.value),
  23650. onClick: _cache[8] || (_cache[8] = () => togglePopperVisible(readonly.value ? void 0 : true)),
  23651. onKeydown: handleKeyDown,
  23652. onMouseenter: _cache[9] || (_cache[9] = ($event) => inputHover.value = true),
  23653. onMouseleave: _cache[10] || (_cache[10] = ($event) => inputHover.value = false)
  23654. }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
  23655. ref_key: "inputRef",
  23656. ref: inputRef,
  23657. modelValue: inputValue.value,
  23658. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => inputValue.value = $event),
  23659. placeholder: currentPlaceholder.value,
  23660. readonly: readonly.value,
  23661. disabled: (0, vue.unref)(isDisabled),
  23662. "validate-event": false,
  23663. size: (0, vue.unref)(realSize),
  23664. class: (0, vue.normalizeClass)(inputClass.value),
  23665. tabindex: multiple.value && __props.filterable && !(0, vue.unref)(isDisabled) ? -1 : void 0,
  23666. onCompositionstart: (0, vue.unref)(handleComposition),
  23667. onCompositionupdate: (0, vue.unref)(handleComposition),
  23668. onCompositionend: (0, vue.unref)(handleComposition),
  23669. onInput: handleInput
  23670. }, (0, vue.createSlots)({
  23671. suffix: (0, vue.withCtx)(() => [clearBtnVisible.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  23672. key: "clear",
  23673. class: (0, vue.normalizeClass)([(0, vue.unref)(nsInput).e("icon"), "icon-circle-close"]),
  23674. onClick: (0, vue.withModifiers)(handleClear, ["stop"])
  23675. }, {
  23676. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.clearIcon)))]),
  23677. _: 1
  23678. }, 8, ["class"])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  23679. key: "arrow-down",
  23680. class: (0, vue.normalizeClass)(cascaderIconKls.value),
  23681. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(($event) => togglePopperVisible(), ["stop"]))
  23682. }, {
  23683. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_down_default))]),
  23684. _: 1
  23685. }, 8, ["class"]))]),
  23686. _: 2
  23687. }, [_ctx.$slots.prefix ? {
  23688. name: "prefix",
  23689. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "prefix")]),
  23690. key: "0"
  23691. } : void 0]), 1032, [
  23692. "modelValue",
  23693. "placeholder",
  23694. "readonly",
  23695. "disabled",
  23696. "size",
  23697. "class",
  23698. "tabindex",
  23699. "onCompositionstart",
  23700. "onCompositionupdate",
  23701. "onCompositionend"
  23702. ]), multiple.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  23703. key: 0,
  23704. ref_key: "tagWrapper",
  23705. ref: tagWrapper,
  23706. class: (0, vue.normalizeClass)([(0, vue.unref)(nsCascader).e("tags"), (0, vue.unref)(nsCascader).is("validate", Boolean(validateState.value))])
  23707. }, [
  23708. (0, vue.renderSlot)(_ctx.$slots, "tag", {
  23709. data: tags.value,
  23710. deleteTag
  23711. }, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(showTagList.value, (tag) => {
  23712. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTag), {
  23713. key: tag.key,
  23714. type: __props.tagType,
  23715. size: tagSize.value,
  23716. effect: __props.tagEffect,
  23717. hit: tag.hitState,
  23718. closable: tag.closable,
  23719. "disable-transitions": "",
  23720. onClose: ($event) => deleteTag(tag)
  23721. }, {
  23722. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(tag.text), 1)]),
  23723. _: 2
  23724. }, 1032, [
  23725. "type",
  23726. "size",
  23727. "effect",
  23728. "hit",
  23729. "closable",
  23730. "onClose"
  23731. ]);
  23732. }), 128))]),
  23733. __props.collapseTags && tags.value.length > __props.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
  23734. key: 0,
  23735. ref_key: "tagTooltipRef",
  23736. ref: tagTooltipRef,
  23737. disabled: popperVisible.value || !__props.collapseTagsTooltip,
  23738. "fallback-placements": [
  23739. "bottom",
  23740. "top",
  23741. "right",
  23742. "left"
  23743. ],
  23744. placement: "bottom",
  23745. "popper-class": __props.popperClass,
  23746. "popper-style": __props.popperStyle,
  23747. effect: __props.effect,
  23748. persistent: __props.persistent
  23749. }, {
  23750. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(ElTag), {
  23751. closable: false,
  23752. size: tagSize.value,
  23753. type: __props.tagType,
  23754. effect: __props.tagEffect,
  23755. "disable-transitions": ""
  23756. }, {
  23757. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("tags-text")) }, " + " + (0, vue.toDisplayString)(tags.value.length - __props.maxCollapseTags), 3)]),
  23758. _: 1
  23759. }, 8, [
  23760. "size",
  23761. "type",
  23762. "effect"
  23763. ])]),
  23764. content: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(ElScrollbar), { "max-height": __props.maxCollapseTagsTooltipHeight }, {
  23765. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("collapse-tags")) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(collapseTagList.value, (tag, idx) => {
  23766. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  23767. key: idx,
  23768. class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("collapse-tag"))
  23769. }, [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTag), {
  23770. key: tag.key,
  23771. class: "in-tooltip",
  23772. type: __props.tagType,
  23773. size: tagSize.value,
  23774. effect: __props.tagEffect,
  23775. hit: tag.hitState,
  23776. closable: tag.closable,
  23777. "disable-transitions": "",
  23778. onClose: ($event) => deleteTag(tag)
  23779. }, {
  23780. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(tag.text), 1)]),
  23781. _: 2
  23782. }, 1032, [
  23783. "type",
  23784. "size",
  23785. "effect",
  23786. "hit",
  23787. "closable",
  23788. "onClose"
  23789. ]))], 2);
  23790. }), 128))], 2)]),
  23791. _: 1
  23792. }, 8, ["max-height"])]),
  23793. _: 1
  23794. }, 8, [
  23795. "disabled",
  23796. "popper-class",
  23797. "popper-style",
  23798. "effect",
  23799. "persistent"
  23800. ])) : (0, vue.createCommentVNode)("v-if", true),
  23801. __props.filterable && !(0, vue.unref)(isDisabled) ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("input", {
  23802. key: 1,
  23803. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => searchInputValue.value = $event),
  23804. type: "text",
  23805. class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("search-input")),
  23806. placeholder: presentText.value ? "" : inputPlaceholder.value,
  23807. onInput: _cache[3] || (_cache[3] = (e) => handleInput(searchInputValue.value, e)),
  23808. onClick: _cache[4] || (_cache[4] = (0, vue.withModifiers)(($event) => togglePopperVisible(true), ["stop"])),
  23809. onKeydown: (0, vue.withKeys)(handleDelete, ["delete"]),
  23810. onCompositionstart: _cache[5] || (_cache[5] = (...args) => (0, vue.unref)(handleComposition) && (0, vue.unref)(handleComposition)(...args)),
  23811. onCompositionupdate: _cache[6] || (_cache[6] = (...args) => (0, vue.unref)(handleComposition) && (0, vue.unref)(handleComposition)(...args)),
  23812. onCompositionend: _cache[7] || (_cache[7] = (...args) => (0, vue.unref)(handleComposition) && (0, vue.unref)(handleComposition)(...args))
  23813. }, null, 42, _hoisted_1$58)), [[vue.vModelText, searchInputValue.value]]) : (0, vue.createCommentVNode)("v-if", true)
  23814. ], 2)) : (0, vue.createCommentVNode)("v-if", true)], 38)), [[
  23815. (0, vue.unref)(ClickOutside),
  23816. handleClickOutside,
  23817. contentRef.value
  23818. ]])]),
  23819. content: (0, vue.withCtx)(() => [
  23820. _ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  23821. key: 0,
  23822. class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("header")),
  23823. onClick: _cache[11] || (_cache[11] = (0, vue.withModifiers)(() => {}, ["stop"]))
  23824. }, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  23825. (0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElCascaderPanel), {
  23826. ref_key: "cascaderPanelRef",
  23827. ref: cascaderPanelRef,
  23828. modelValue: checkedValue.value,
  23829. "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => checkedValue.value = $event),
  23830. options: __props.options,
  23831. props: props.props,
  23832. border: false,
  23833. "render-label": _ctx.$slots.default,
  23834. "virtual-scroll": __props.virtualScroll,
  23835. "item-size": __props.itemSize,
  23836. height: __props.height,
  23837. onExpandChange: handleExpandChange,
  23838. onClose: _cache[13] || (_cache[13] = ($event) => _ctx.$nextTick(() => togglePopperVisible(false)))
  23839. }, {
  23840. empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "empty")]),
  23841. _: 3
  23842. }, 8, [
  23843. "modelValue",
  23844. "options",
  23845. "props",
  23846. "render-label",
  23847. "virtual-scroll",
  23848. "item-size",
  23849. "height"
  23850. ]), [[vue.vShow, !filtering.value]]),
  23851. __props.filterable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [!__props.virtualScroll ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElScrollbar), {
  23852. key: 0,
  23853. ref: (ref) => suggestionPanel.value = ref?.$el,
  23854. tag: "ul",
  23855. class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("suggestion-panel")),
  23856. "wrap-class": (0, vue.unref)(nsCascader).e("suggestion-wrap"),
  23857. "view-class": (0, vue.unref)(nsCascader).e("suggestion-list"),
  23858. onKeydown: handleSuggestionKeyDown
  23859. }, {
  23860. default: (0, vue.withCtx)(() => [suggestions.value.length ? ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, (0, vue.renderList)(suggestions.value, (item) => {
  23861. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  23862. key: item.uid,
  23863. class: (0, vue.normalizeClass)([(0, vue.unref)(nsCascader).e("suggestion-item"), (0, vue.unref)(nsCascader).is("checked", item.checked)]),
  23864. tabindex: -1,
  23865. onClick: ($event) => handleSuggestionClick(item)
  23866. }, [(0, vue.renderSlot)(_ctx.$slots, "suggestion-item", { item }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(item.text), 1), item.checked ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  23867. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(check_default))]),
  23868. _: 1
  23869. })) : (0, vue.createCommentVNode)("v-if", true)])], 10, _hoisted_2$35);
  23870. }), 128)) : (0, vue.renderSlot)(_ctx.$slots, "empty", { key: 1 }, () => [(0, vue.createElementVNode)("li", { class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("empty-text")) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.noMatch")), 3)])]),
  23871. _: 3
  23872. }, 8, [
  23873. "class",
  23874. "wrap-class",
  23875. "view-class"
  23876. ])), [[vue.vShow, filtering.value]]) : (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  23877. key: 1,
  23878. ref_key: "suggestionPanel",
  23879. ref: suggestionPanel,
  23880. class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("suggestion-panel")),
  23881. onKeydown: handleSuggestionKeyDown
  23882. }, [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(FixedSizeList), {
  23883. ref_key: "suggestionVirtualListRef",
  23884. ref: suggestionVirtualListRef,
  23885. height: clampedSuggestionListHeight.value,
  23886. "item-size": __props.itemSize,
  23887. data: suggestions.value,
  23888. total: suggestions.value.length,
  23889. "class-name": (0, vue.unref)(nsCascader).e("suggestion-list"),
  23890. "inner-element": "ul",
  23891. "inner-width": suggestionListWidth.value
  23892. }, {
  23893. default: (0, vue.withCtx)(({ data, index, style }) => [((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  23894. id: `suggestion-${data[index].uid}`,
  23895. key: data[index].uid,
  23896. "data-suggestion-index": index,
  23897. class: (0, vue.normalizeClass)([(0, vue.unref)(nsCascader).e("suggestion-item"), (0, vue.unref)(nsCascader).is("checked", data[index].checked)]),
  23898. tabindex: -1,
  23899. style: (0, vue.normalizeStyle)(style),
  23900. onClick: ($event) => handleSuggestionClick(data[index])
  23901. }, [(0, vue.renderSlot)(_ctx.$slots, "suggestion-item", { item: data[index] }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(data[index].text), 1), data[index].checked ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  23902. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(check_default))]),
  23903. _: 1
  23904. })) : (0, vue.createCommentVNode)("v-if", true)])], 14, _hoisted_3$16))]),
  23905. _: 3
  23906. }, 8, [
  23907. "height",
  23908. "item-size",
  23909. "data",
  23910. "total",
  23911. "class-name",
  23912. "inner-width"
  23913. ]), [[vue.vShow, suggestions.value.length]]), !suggestions.value.length ? (0, vue.renderSlot)(_ctx.$slots, "empty", { key: 0 }, () => [(0, vue.createElementVNode)("ul", { class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("suggestion-list")) }, [(0, vue.createElementVNode)("li", { class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("empty-text")) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.cascader.noMatch")), 3)], 2)]) : (0, vue.createCommentVNode)("v-if", true)], 34)), [[vue.vShow, filtering.value]])], 64)) : (0, vue.createCommentVNode)("v-if", true),
  23914. _ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  23915. key: 2,
  23916. class: (0, vue.normalizeClass)((0, vue.unref)(nsCascader).e("footer")),
  23917. onClick: _cache[14] || (_cache[14] = (0, vue.withModifiers)(() => {}, ["stop"]))
  23918. }, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  23919. ]),
  23920. _: 3
  23921. }, 8, [
  23922. "visible",
  23923. "teleported",
  23924. "popper-class",
  23925. "popper-style",
  23926. "fallback-placements",
  23927. "placement",
  23928. "transition",
  23929. "effect",
  23930. "persistent"
  23931. ]);
  23932. };
  23933. }
  23934. });
  23935. //#endregion
  23936. //#region ../../packages/components/cascader/src/cascader.vue
  23937. var cascader_default = cascader_vue_vue_type_script_setup_true_lang_default;
  23938. //#endregion
  23939. //#region ../../packages/components/cascader/index.ts
  23940. const ElCascader = withInstall(cascader_default);
  23941. //#endregion
  23942. //#region ../../packages/components/check-tag/src/check-tag.ts
  23943. const checkTagProps = buildProps({
  23944. checked: Boolean,
  23945. disabled: Boolean,
  23946. type: {
  23947. type: String,
  23948. values: [
  23949. "primary",
  23950. "success",
  23951. "info",
  23952. "warning",
  23953. "danger"
  23954. ],
  23955. default: "primary"
  23956. }
  23957. });
  23958. const checkTagEmits = {
  23959. "update:checked": (value) => isBoolean(value),
  23960. [CHANGE_EVENT]: (value) => isBoolean(value)
  23961. };
  23962. //#endregion
  23963. //#region ../../packages/components/check-tag/src/check-tag.vue?vue&type=script&setup=true&lang.ts
  23964. var check_tag_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  23965. name: "ElCheckTag",
  23966. __name: "check-tag",
  23967. props: checkTagProps,
  23968. emits: checkTagEmits,
  23969. setup(__props, { emit: __emit }) {
  23970. const props = __props;
  23971. const emit = __emit;
  23972. const ns = useNamespace("check-tag");
  23973. const containerKls = (0, vue.computed)(() => [
  23974. ns.b(),
  23975. ns.is("checked", props.checked),
  23976. ns.is("disabled", props.disabled),
  23977. ns.m(props.type || "primary")
  23978. ]);
  23979. const handleChange = () => {
  23980. if (props.disabled) return;
  23981. const checked = !props.checked;
  23982. emit(CHANGE_EVENT, checked);
  23983. emit("update:checked", checked);
  23984. };
  23985. return (_ctx, _cache) => {
  23986. return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  23987. class: (0, vue.normalizeClass)(containerKls.value),
  23988. onClick: handleChange
  23989. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
  23990. };
  23991. }
  23992. });
  23993. //#endregion
  23994. //#region ../../packages/components/check-tag/src/check-tag.vue
  23995. var check_tag_default = check_tag_vue_vue_type_script_setup_true_lang_default;
  23996. //#endregion
  23997. //#region ../../packages/components/check-tag/index.ts
  23998. const ElCheckTag = withInstall(check_tag_default);
  23999. //#endregion
  24000. //#region ../../packages/components/col/src/col.ts
  24001. const colProps = buildProps({
  24002. tag: {
  24003. type: String,
  24004. default: "div"
  24005. },
  24006. span: {
  24007. type: Number,
  24008. default: 24
  24009. },
  24010. offset: {
  24011. type: Number,
  24012. default: 0
  24013. },
  24014. pull: {
  24015. type: Number,
  24016. default: 0
  24017. },
  24018. push: {
  24019. type: Number,
  24020. default: 0
  24021. },
  24022. xs: {
  24023. type: definePropType([Number, Object]),
  24024. default: () => mutable({})
  24025. },
  24026. sm: {
  24027. type: definePropType([Number, Object]),
  24028. default: () => mutable({})
  24029. },
  24030. md: {
  24031. type: definePropType([Number, Object]),
  24032. default: () => mutable({})
  24033. },
  24034. lg: {
  24035. type: definePropType([Number, Object]),
  24036. default: () => mutable({})
  24037. },
  24038. xl: {
  24039. type: definePropType([Number, Object]),
  24040. default: () => mutable({})
  24041. }
  24042. });
  24043. //#endregion
  24044. //#region ../../packages/components/row/src/row.ts
  24045. const RowJustify = [
  24046. "start",
  24047. "center",
  24048. "end",
  24049. "space-around",
  24050. "space-between",
  24051. "space-evenly"
  24052. ];
  24053. const RowAlign = [
  24054. "top",
  24055. "middle",
  24056. "bottom"
  24057. ];
  24058. const rowProps = buildProps({
  24059. tag: {
  24060. type: String,
  24061. default: "div"
  24062. },
  24063. gutter: {
  24064. type: Number,
  24065. default: 0
  24066. },
  24067. justify: {
  24068. type: String,
  24069. values: RowJustify,
  24070. default: "start"
  24071. },
  24072. align: {
  24073. type: String,
  24074. values: RowAlign
  24075. }
  24076. });
  24077. //#endregion
  24078. //#region ../../packages/components/row/src/constants.ts
  24079. const rowContextKey = Symbol("rowContextKey");
  24080. //#endregion
  24081. //#region ../../packages/components/row/src/row.vue?vue&type=script&setup=true&lang.ts
  24082. var row_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  24083. name: "ElRow",
  24084. __name: "row",
  24085. props: rowProps,
  24086. setup(__props) {
  24087. const props = __props;
  24088. const ns = useNamespace("row");
  24089. (0, vue.provide)(rowContextKey, { gutter: (0, vue.computed)(() => props.gutter) });
  24090. const style = (0, vue.computed)(() => {
  24091. const styles = {};
  24092. if (!props.gutter) return styles;
  24093. styles.marginRight = styles.marginLeft = `-${props.gutter / 2}px`;
  24094. return styles;
  24095. });
  24096. const rowKls = (0, vue.computed)(() => [
  24097. ns.b(),
  24098. ns.is(`justify-${props.justify}`, props.justify !== "start"),
  24099. ns.is(`align-${props.align}`, !!props.align)
  24100. ]);
  24101. return (_ctx, _cache) => {
  24102. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
  24103. class: (0, vue.normalizeClass)(rowKls.value),
  24104. style: (0, vue.normalizeStyle)(style.value)
  24105. }, {
  24106. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  24107. _: 3
  24108. }, 8, ["class", "style"]);
  24109. };
  24110. }
  24111. });
  24112. //#endregion
  24113. //#region ../../packages/components/row/src/row.vue
  24114. var row_default = row_vue_vue_type_script_setup_true_lang_default;
  24115. //#endregion
  24116. //#region ../../packages/components/row/index.ts
  24117. const ElRow = withInstall(row_default);
  24118. //#endregion
  24119. //#region ../../packages/components/col/src/col.vue?vue&type=script&setup=true&lang.ts
  24120. var col_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  24121. name: "ElCol",
  24122. __name: "col",
  24123. props: colProps,
  24124. setup(__props) {
  24125. const props = __props;
  24126. const { gutter } = (0, vue.inject)(rowContextKey, { gutter: (0, vue.computed)(() => 0) });
  24127. const ns = useNamespace("col");
  24128. const style = (0, vue.computed)(() => {
  24129. const styles = {};
  24130. if (gutter.value) styles.paddingLeft = styles.paddingRight = `${gutter.value / 2}px`;
  24131. return styles;
  24132. });
  24133. const colKls = (0, vue.computed)(() => {
  24134. const classes = [];
  24135. [
  24136. "span",
  24137. "offset",
  24138. "pull",
  24139. "push"
  24140. ].forEach((prop) => {
  24141. const size = props[prop];
  24142. if (isNumber(size)) {
  24143. if (prop === "span") classes.push(ns.b(`${props[prop]}`));
  24144. else if (size > 0) classes.push(ns.b(`${prop}-${props[prop]}`));
  24145. }
  24146. });
  24147. [
  24148. "xs",
  24149. "sm",
  24150. "md",
  24151. "lg",
  24152. "xl"
  24153. ].forEach((size) => {
  24154. if (isNumber(props[size])) classes.push(ns.b(`${size}-${props[size]}`));
  24155. else if (isObject$1(props[size])) Object.entries(props[size]).forEach(([prop, sizeProp]) => {
  24156. classes.push(prop !== "span" ? ns.b(`${size}-${prop}-${sizeProp}`) : ns.b(`${size}-${sizeProp}`));
  24157. });
  24158. });
  24159. if (gutter.value) classes.push(ns.is("guttered"));
  24160. return [ns.b(), classes];
  24161. });
  24162. return (_ctx, _cache) => {
  24163. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
  24164. class: (0, vue.normalizeClass)(colKls.value),
  24165. style: (0, vue.normalizeStyle)(style.value)
  24166. }, {
  24167. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  24168. _: 3
  24169. }, 8, ["class", "style"]);
  24170. };
  24171. }
  24172. });
  24173. //#endregion
  24174. //#region ../../packages/components/col/src/col.vue
  24175. var col_default = col_vue_vue_type_script_setup_true_lang_default;
  24176. //#endregion
  24177. //#region ../../packages/components/col/index.ts
  24178. const ElCol = withInstall(col_default);
  24179. //#endregion
  24180. //#region ../../packages/components/collapse/src/collapse.ts
  24181. const emitChangeFn = (value) => isNumber(value) || isString(value) || isArray$1(value);
  24182. const collapseProps = buildProps({
  24183. accordion: Boolean,
  24184. modelValue: {
  24185. type: definePropType([
  24186. Array,
  24187. String,
  24188. Number
  24189. ]),
  24190. default: () => mutable([])
  24191. },
  24192. expandIconPosition: {
  24193. type: definePropType([String]),
  24194. default: "right"
  24195. },
  24196. beforeCollapse: { type: definePropType(Function) }
  24197. });
  24198. const collapseEmits = {
  24199. [UPDATE_MODEL_EVENT]: emitChangeFn,
  24200. [CHANGE_EVENT]: emitChangeFn
  24201. };
  24202. //#endregion
  24203. //#region ../../packages/components/collapse/src/constants.ts
  24204. const collapseContextKey = Symbol("collapseContextKey");
  24205. //#endregion
  24206. //#region ../../packages/components/collapse/src/use-collapse.ts
  24207. const SCOPE$4 = "ElCollapse";
  24208. const useCollapse = (props, emit) => {
  24209. const activeNames = (0, vue.ref)(castArray$1(props.modelValue));
  24210. const setActiveNames = (_activeNames) => {
  24211. activeNames.value = _activeNames;
  24212. const value = props.accordion ? activeNames.value[0] : activeNames.value;
  24213. emit(UPDATE_MODEL_EVENT, value);
  24214. emit(CHANGE_EVENT, value);
  24215. };
  24216. const handleChange = (name) => {
  24217. if (props.accordion) setActiveNames([activeNames.value[0] === name ? "" : name]);
  24218. else {
  24219. const _activeNames = [...activeNames.value];
  24220. const index = _activeNames.indexOf(name);
  24221. if (index > -1) _activeNames.splice(index, 1);
  24222. else _activeNames.push(name);
  24223. setActiveNames(_activeNames);
  24224. }
  24225. };
  24226. const handleItemClick = async (name) => {
  24227. const { beforeCollapse } = props;
  24228. if (!beforeCollapse) {
  24229. handleChange(name);
  24230. return;
  24231. }
  24232. const shouldChange = beforeCollapse(name);
  24233. if (![isPromise(shouldChange), isBoolean(shouldChange)].includes(true)) throwError(SCOPE$4, "beforeCollapse must return type `Promise<boolean>` or `boolean`");
  24234. if (isPromise(shouldChange)) shouldChange.then((result) => {
  24235. if (result !== false) handleChange(name);
  24236. }).catch((e) => {
  24237. /* @__PURE__ */ debugWarn(SCOPE$4, `some error occurred: ${e}`);
  24238. });
  24239. else if (shouldChange) handleChange(name);
  24240. };
  24241. (0, vue.watch)(() => props.modelValue, () => activeNames.value = castArray$1(props.modelValue), { deep: true });
  24242. (0, vue.provide)(collapseContextKey, {
  24243. activeNames,
  24244. handleItemClick
  24245. });
  24246. return {
  24247. activeNames,
  24248. setActiveNames
  24249. };
  24250. };
  24251. const useCollapseDOM = (props) => {
  24252. const ns = useNamespace("collapse");
  24253. return { rootKls: (0, vue.computed)(() => [ns.b(), ns.b(`icon-position-${props.expandIconPosition}`)]) };
  24254. };
  24255. //#endregion
  24256. //#region ../../packages/components/collapse/src/collapse.vue?vue&type=script&setup=true&lang.ts
  24257. var collapse_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  24258. name: "ElCollapse",
  24259. __name: "collapse",
  24260. props: collapseProps,
  24261. emits: collapseEmits,
  24262. setup(__props, { expose: __expose, emit: __emit }) {
  24263. const props = __props;
  24264. const { activeNames, setActiveNames } = useCollapse(props, __emit);
  24265. const { rootKls } = useCollapseDOM(props);
  24266. __expose({
  24267. activeNames,
  24268. setActiveNames
  24269. });
  24270. return (_ctx, _cache) => {
  24271. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
  24272. };
  24273. }
  24274. });
  24275. //#endregion
  24276. //#region ../../packages/components/collapse/src/collapse.vue
  24277. var collapse_default = collapse_vue_vue_type_script_setup_true_lang_default;
  24278. //#endregion
  24279. //#region ../../packages/components/collapse/src/collapse-item.ts
  24280. const collapseItemProps = buildProps({
  24281. title: {
  24282. type: String,
  24283. default: ""
  24284. },
  24285. name: {
  24286. type: definePropType([String, Number]),
  24287. default: void 0
  24288. },
  24289. icon: {
  24290. type: iconPropType,
  24291. default: arrow_right_default
  24292. },
  24293. disabled: Boolean
  24294. });
  24295. //#endregion
  24296. //#region ../../packages/components/collapse-transition/src/collapse-transition.vue?vue&type=script&setup=true&lang.ts
  24297. var collapse_transition_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  24298. name: "ElCollapseTransition",
  24299. __name: "collapse-transition",
  24300. setup(__props) {
  24301. const ns = useNamespace("collapse-transition");
  24302. const reset = (el) => {
  24303. el.style.maxHeight = "";
  24304. el.style.overflow = el.dataset.oldOverflow;
  24305. el.style.paddingTop = el.dataset.oldPaddingTop;
  24306. el.style.paddingBottom = el.dataset.oldPaddingBottom;
  24307. };
  24308. const on = {
  24309. beforeEnter(el) {
  24310. if (!el.dataset) el.dataset = {};
  24311. el.dataset.oldPaddingTop = el.style.paddingTop;
  24312. el.dataset.oldPaddingBottom = el.style.paddingBottom;
  24313. if (el.style.height) el.dataset.elExistsHeight = el.style.height;
  24314. el.style.maxHeight = 0;
  24315. el.style.paddingTop = 0;
  24316. el.style.paddingBottom = 0;
  24317. },
  24318. enter(el) {
  24319. requestAnimationFrame(() => {
  24320. el.dataset.oldOverflow = el.style.overflow;
  24321. if (el.dataset.elExistsHeight) el.style.maxHeight = el.dataset.elExistsHeight;
  24322. else if (el.scrollHeight !== 0) el.style.maxHeight = `${el.scrollHeight}px`;
  24323. else el.style.maxHeight = 0;
  24324. el.style.paddingTop = el.dataset.oldPaddingTop;
  24325. el.style.paddingBottom = el.dataset.oldPaddingBottom;
  24326. el.style.overflow = "hidden";
  24327. });
  24328. },
  24329. afterEnter(el) {
  24330. el.style.maxHeight = "";
  24331. el.style.overflow = el.dataset.oldOverflow;
  24332. },
  24333. enterCancelled(el) {
  24334. reset(el);
  24335. },
  24336. beforeLeave(el) {
  24337. if (!el.dataset) el.dataset = {};
  24338. el.dataset.oldPaddingTop = el.style.paddingTop;
  24339. el.dataset.oldPaddingBottom = el.style.paddingBottom;
  24340. el.dataset.oldOverflow = el.style.overflow;
  24341. el.style.maxHeight = `${el.scrollHeight}px`;
  24342. el.style.overflow = "hidden";
  24343. },
  24344. leave(el) {
  24345. if (el.scrollHeight !== 0) {
  24346. el.style.maxHeight = 0;
  24347. el.style.paddingTop = 0;
  24348. el.style.paddingBottom = 0;
  24349. }
  24350. },
  24351. afterLeave(el) {
  24352. reset(el);
  24353. },
  24354. leaveCancelled(el) {
  24355. reset(el);
  24356. }
  24357. };
  24358. return (_ctx, _cache) => {
  24359. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, (0, vue.mergeProps)({ name: (0, vue.unref)(ns).b() }, (0, vue.toHandlers)(on)), {
  24360. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  24361. _: 3
  24362. }, 16, ["name"]);
  24363. };
  24364. }
  24365. });
  24366. //#endregion
  24367. //#region ../../packages/components/collapse-transition/src/collapse-transition.vue
  24368. var collapse_transition_default = collapse_transition_vue_vue_type_script_setup_true_lang_default;
  24369. //#endregion
  24370. //#region ../../packages/components/collapse-transition/index.ts
  24371. const ElCollapseTransition = withInstall(collapse_transition_default);
  24372. //#endregion
  24373. //#region ../../packages/components/collapse/src/use-collapse-item.ts
  24374. const useCollapseItem = (props) => {
  24375. const collapse = (0, vue.inject)(collapseContextKey);
  24376. const { namespace } = useNamespace("collapse");
  24377. const focusing = (0, vue.ref)(false);
  24378. const isClick = (0, vue.ref)(false);
  24379. const idInjection = useIdInjection();
  24380. const id = (0, vue.computed)(() => idInjection.current++);
  24381. const name = (0, vue.computed)(() => {
  24382. return props.name ?? `${namespace.value}-id-${idInjection.prefix}-${(0, vue.unref)(id)}`;
  24383. });
  24384. const isActive = (0, vue.computed)(() => collapse?.activeNames.value.includes((0, vue.unref)(name)));
  24385. const handleFocus = () => {
  24386. setTimeout(() => {
  24387. if (!isClick.value) focusing.value = true;
  24388. else isClick.value = false;
  24389. }, 50);
  24390. };
  24391. const handleHeaderClick = (e) => {
  24392. if (props.disabled) return;
  24393. if (e.target?.closest("input, textarea, select")) return;
  24394. collapse?.handleItemClick((0, vue.unref)(name));
  24395. focusing.value = false;
  24396. isClick.value = true;
  24397. };
  24398. const handleEnterClick = (e) => {
  24399. if (e.target?.closest("input, textarea, select")) return;
  24400. e.preventDefault();
  24401. collapse?.handleItemClick((0, vue.unref)(name));
  24402. };
  24403. return {
  24404. focusing,
  24405. id,
  24406. isActive,
  24407. handleFocus,
  24408. handleHeaderClick,
  24409. handleEnterClick
  24410. };
  24411. };
  24412. const useCollapseItemDOM = (props, { focusing, isActive, id }) => {
  24413. const ns = useNamespace("collapse");
  24414. const rootKls = (0, vue.computed)(() => [
  24415. ns.b("item"),
  24416. ns.is("active", (0, vue.unref)(isActive)),
  24417. ns.is("disabled", props.disabled)
  24418. ]);
  24419. const headKls = (0, vue.computed)(() => [
  24420. ns.be("item", "header"),
  24421. ns.is("active", (0, vue.unref)(isActive)),
  24422. { focusing: (0, vue.unref)(focusing) && !props.disabled }
  24423. ]);
  24424. const arrowKls = (0, vue.computed)(() => [ns.be("item", "arrow"), ns.is("active", (0, vue.unref)(isActive))]);
  24425. return {
  24426. itemTitleKls: (0, vue.computed)(() => [ns.be("item", "title")]),
  24427. arrowKls,
  24428. headKls,
  24429. rootKls,
  24430. itemWrapperKls: (0, vue.computed)(() => ns.be("item", "wrap")),
  24431. itemContentKls: (0, vue.computed)(() => ns.be("item", "content")),
  24432. scopedContentId: (0, vue.computed)(() => ns.b(`content-${(0, vue.unref)(id)}`)),
  24433. scopedHeadId: (0, vue.computed)(() => ns.b(`head-${(0, vue.unref)(id)}`))
  24434. };
  24435. };
  24436. //#endregion
  24437. //#region ../../packages/components/collapse/src/collapse-item.vue?vue&type=script&setup=true&lang.ts
  24438. const _hoisted_1$57 = [
  24439. "id",
  24440. "aria-expanded",
  24441. "aria-controls",
  24442. "aria-describedby",
  24443. "tabindex",
  24444. "aria-disabled"
  24445. ];
  24446. const _hoisted_2$34 = [
  24447. "id",
  24448. "aria-hidden",
  24449. "aria-labelledby"
  24450. ];
  24451. var collapse_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  24452. name: "ElCollapseItem",
  24453. __name: "collapse-item",
  24454. props: collapseItemProps,
  24455. setup(__props, { expose: __expose }) {
  24456. const props = __props;
  24457. const { focusing, id, isActive, handleFocus, handleHeaderClick, handleEnterClick } = useCollapseItem(props);
  24458. const { arrowKls, headKls, rootKls, itemTitleKls, itemWrapperKls, itemContentKls, scopedContentId, scopedHeadId } = useCollapseItemDOM(props, {
  24459. focusing,
  24460. isActive,
  24461. id
  24462. });
  24463. __expose({ isActive });
  24464. return (_ctx, _cache) => {
  24465. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.createElementVNode)("div", {
  24466. id: (0, vue.unref)(scopedHeadId),
  24467. class: (0, vue.normalizeClass)((0, vue.unref)(headKls)),
  24468. "aria-expanded": (0, vue.unref)(isActive),
  24469. "aria-controls": (0, vue.unref)(scopedContentId),
  24470. "aria-describedby": (0, vue.unref)(scopedContentId),
  24471. tabindex: __props.disabled ? void 0 : 0,
  24472. "aria-disabled": __props.disabled,
  24473. role: "button",
  24474. onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleHeaderClick) && (0, vue.unref)(handleHeaderClick)(...args)),
  24475. onKeydown: _cache[1] || (_cache[1] = (0, vue.withKeys)((0, vue.withModifiers)((...args) => (0, vue.unref)(handleEnterClick) && (0, vue.unref)(handleEnterClick)(...args), ["stop"]), ["space", "enter"])),
  24476. onFocus: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(handleFocus) && (0, vue.unref)(handleFocus)(...args)),
  24477. onBlur: _cache[3] || (_cache[3] = ($event) => focusing.value = false)
  24478. }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(itemTitleKls)) }, [(0, vue.renderSlot)(_ctx.$slots, "title", { isActive: (0, vue.unref)(isActive) }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2), (0, vue.renderSlot)(_ctx.$slots, "icon", { isActive: (0, vue.unref)(isActive) }, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(arrowKls)) }, {
  24479. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
  24480. _: 1
  24481. }, 8, ["class"])])], 42, _hoisted_1$57), (0, vue.createVNode)((0, vue.unref)(ElCollapseTransition), null, {
  24482. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
  24483. id: (0, vue.unref)(scopedContentId),
  24484. role: "region",
  24485. class: (0, vue.normalizeClass)((0, vue.unref)(itemWrapperKls)),
  24486. "aria-hidden": !(0, vue.unref)(isActive),
  24487. "aria-labelledby": (0, vue.unref)(scopedHeadId)
  24488. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(itemContentKls)) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)], 10, _hoisted_2$34), [[vue.vShow, (0, vue.unref)(isActive)]])]),
  24489. _: 3
  24490. })], 2);
  24491. };
  24492. }
  24493. });
  24494. //#endregion
  24495. //#region ../../packages/components/collapse/src/collapse-item.vue
  24496. var collapse_item_default = collapse_item_vue_vue_type_script_setup_true_lang_default;
  24497. //#endregion
  24498. //#region ../../packages/components/collapse/index.ts
  24499. const ElCollapse = withInstall(collapse_default, { CollapseItem: collapse_item_default });
  24500. const ElCollapseItem = withNoopInstall(collapse_item_default);
  24501. //#endregion
  24502. //#region ../../packages/components/color-picker-panel/src/color-picker-panel.ts
  24503. const colorPickerPanelProps = buildProps({
  24504. modelValue: {
  24505. type: definePropType(String),
  24506. default: void 0
  24507. },
  24508. border: {
  24509. type: Boolean,
  24510. default: true
  24511. },
  24512. showAlpha: Boolean,
  24513. colorFormat: { type: definePropType(String) },
  24514. disabled: Boolean,
  24515. predefine: { type: definePropType(Array) },
  24516. validateEvent: {
  24517. type: Boolean,
  24518. default: true
  24519. },
  24520. hueSliderClass: { type: definePropType([
  24521. String,
  24522. Array,
  24523. Object
  24524. ]) },
  24525. hueSliderStyle: {
  24526. type: definePropType([
  24527. String,
  24528. Array,
  24529. Object,
  24530. Boolean
  24531. ]),
  24532. default: void 0
  24533. }
  24534. });
  24535. const colorPickerPanelEmits = { [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNil(val) };
  24536. const ROOT_COMMON_COLOR_INJECTION_KEY = Symbol("colorCommonPickerKey");
  24537. const colorPickerPanelContextKey = Symbol("colorPickerPanelContextKey");
  24538. //#endregion
  24539. //#region ../../packages/components/color-picker-panel/src/props/slider.ts
  24540. const alphaSliderProps = buildProps({
  24541. color: {
  24542. type: definePropType(Object),
  24543. required: true
  24544. },
  24545. vertical: Boolean,
  24546. disabled: Boolean
  24547. });
  24548. const hueSliderProps = alphaSliderProps;
  24549. //#endregion
  24550. //#region ../../packages/components/color-picker-panel/src/utils/draggable.ts
  24551. let isDragging = false;
  24552. function draggable(element, options) {
  24553. if (!isClient) return;
  24554. const moveFn = function(event) {
  24555. options.drag?.(event);
  24556. };
  24557. const upFn = function(event) {
  24558. document.removeEventListener("mousemove", moveFn);
  24559. document.removeEventListener("mouseup", upFn);
  24560. document.removeEventListener("touchmove", moveFn);
  24561. document.removeEventListener("touchend", upFn);
  24562. document.onselectstart = null;
  24563. document.ondragstart = null;
  24564. isDragging = false;
  24565. options.end?.(event);
  24566. };
  24567. const downFn = function(event) {
  24568. if (isDragging) return;
  24569. document.onselectstart = () => false;
  24570. document.ondragstart = () => false;
  24571. document.addEventListener("mousemove", moveFn);
  24572. document.addEventListener("mouseup", upFn);
  24573. document.addEventListener("touchmove", moveFn);
  24574. document.addEventListener("touchend", upFn);
  24575. isDragging = true;
  24576. options.start?.(event);
  24577. };
  24578. element.addEventListener("mousedown", downFn);
  24579. element.addEventListener("touchstart", downFn, { passive: false });
  24580. }
  24581. //#endregion
  24582. //#region ../../packages/components/color-picker-panel/src/composables/use-slider.ts
  24583. const useSlider = (props, { key, minValue, maxValue }) => {
  24584. const instance = (0, vue.getCurrentInstance)();
  24585. const thumb = (0, vue.shallowRef)();
  24586. const bar = (0, vue.shallowRef)();
  24587. const currentValue = (0, vue.computed)(() => props.color.get(key));
  24588. function handleClick(event) {
  24589. if (props.disabled) return;
  24590. if (event.target !== thumb.value) handleDrag(event);
  24591. thumb.value?.focus();
  24592. }
  24593. function handleDrag(event) {
  24594. if (!bar.value || !thumb.value || props.disabled) return;
  24595. const rect = instance.vnode.el.getBoundingClientRect();
  24596. const { clientX, clientY } = getClientXY(event);
  24597. let value;
  24598. if (!props.vertical) {
  24599. let left = clientX - rect.left;
  24600. left = Math.max(thumb.value.offsetWidth / 2, left);
  24601. left = Math.min(left, rect.width - thumb.value.offsetWidth / 2);
  24602. value = Math.round((left - thumb.value.offsetWidth / 2) / (rect.width - thumb.value.offsetWidth) * maxValue);
  24603. } else {
  24604. let top = clientY - rect.top;
  24605. top = Math.max(thumb.value.offsetHeight / 2, top);
  24606. top = Math.min(top, rect.height - thumb.value.offsetHeight / 2);
  24607. value = Math.round((top - thumb.value.offsetHeight / 2) / (rect.height - thumb.value.offsetHeight) * maxValue);
  24608. }
  24609. props.color.set(key, value);
  24610. }
  24611. function handleKeydown(event) {
  24612. if (props.disabled) return;
  24613. const { shiftKey } = event;
  24614. const code = getEventCode(event);
  24615. const step = shiftKey ? 10 : 1;
  24616. const reverse = key === "hue" ? -1 : 1;
  24617. let isPreventDefault = true;
  24618. switch (code) {
  24619. case EVENT_CODE.left:
  24620. case EVENT_CODE.down:
  24621. incrementPosition(-step * reverse);
  24622. break;
  24623. case EVENT_CODE.right:
  24624. case EVENT_CODE.up:
  24625. incrementPosition(step * reverse);
  24626. break;
  24627. case EVENT_CODE.home:
  24628. props.color.set(key, key === "hue" ? maxValue : minValue);
  24629. break;
  24630. case EVENT_CODE.end:
  24631. props.color.set(key, key === "hue" ? minValue : maxValue);
  24632. break;
  24633. case EVENT_CODE.pageDown:
  24634. incrementPosition(-4 * reverse);
  24635. break;
  24636. case EVENT_CODE.pageUp:
  24637. incrementPosition(4 * reverse);
  24638. break;
  24639. default:
  24640. isPreventDefault = false;
  24641. break;
  24642. }
  24643. isPreventDefault && event.preventDefault();
  24644. }
  24645. function incrementPosition(step) {
  24646. let next = currentValue.value + step;
  24647. next = next < minValue ? minValue : next > maxValue ? maxValue : next;
  24648. props.color.set(key, next);
  24649. }
  24650. return {
  24651. thumb,
  24652. bar,
  24653. currentValue,
  24654. handleDrag,
  24655. handleClick,
  24656. handleKeydown
  24657. };
  24658. };
  24659. const useSliderDOM = (props, { namespace, maxValue, bar, thumb, currentValue, handleDrag, getBackground }) => {
  24660. const instance = (0, vue.getCurrentInstance)();
  24661. const ns = useNamespace(namespace);
  24662. const thumbLeft = (0, vue.ref)(0);
  24663. const thumbTop = (0, vue.ref)(0);
  24664. const background = (0, vue.ref)();
  24665. function getThumbLeft() {
  24666. if (!thumb.value) return 0;
  24667. if (props.vertical) return 0;
  24668. const el = instance.vnode.el;
  24669. const value = currentValue.value;
  24670. if (!el) return 0;
  24671. return Math.round(value * (el.offsetWidth - thumb.value.offsetWidth / 2) / maxValue);
  24672. }
  24673. function getThumbTop() {
  24674. if (!thumb.value) return 0;
  24675. const el = instance.vnode.el;
  24676. if (!props.vertical) return 0;
  24677. const value = currentValue.value;
  24678. if (!el) return 0;
  24679. return Math.round(value * (el.offsetHeight - thumb.value.offsetHeight / 2) / maxValue);
  24680. }
  24681. function update() {
  24682. thumbLeft.value = getThumbLeft();
  24683. thumbTop.value = getThumbTop();
  24684. background.value = getBackground?.();
  24685. }
  24686. (0, vue.onMounted)(() => {
  24687. if (!bar.value || !thumb.value) return;
  24688. const dragConfig = {
  24689. drag: (event) => {
  24690. handleDrag(event);
  24691. },
  24692. end: (event) => {
  24693. handleDrag(event);
  24694. }
  24695. };
  24696. draggable(bar.value, dragConfig);
  24697. draggable(thumb.value, dragConfig);
  24698. update();
  24699. });
  24700. (0, vue.watch)(currentValue, () => update());
  24701. (0, vue.watch)(() => props.color.value, () => update());
  24702. const rootKls = (0, vue.computed)(() => [
  24703. ns.b(),
  24704. ns.is("vertical", props.vertical),
  24705. ns.is("disabled", props.disabled)
  24706. ]);
  24707. const barKls = (0, vue.computed)(() => ns.e("bar"));
  24708. const thumbKls = (0, vue.computed)(() => ns.e("thumb"));
  24709. return {
  24710. rootKls,
  24711. barKls,
  24712. barStyle: (0, vue.computed)(() => ({ background: background.value })),
  24713. thumbKls,
  24714. thumbStyle: (0, vue.computed)(() => ({
  24715. left: addUnit(thumbLeft.value),
  24716. top: addUnit(thumbTop.value)
  24717. })),
  24718. thumbLeft,
  24719. thumbTop,
  24720. update
  24721. };
  24722. };
  24723. //#endregion
  24724. //#region ../../packages/components/color-picker-panel/src/components/alpha-slider.vue?vue&type=script&setup=true&lang.ts
  24725. const _hoisted_1$56 = [
  24726. "aria-label",
  24727. "aria-valuenow",
  24728. "aria-valuetext",
  24729. "aria-orientation",
  24730. "tabindex",
  24731. "aria-disabled"
  24732. ];
  24733. const minValue$1 = 0;
  24734. const maxValue$1 = 100;
  24735. var alpha_slider_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  24736. name: "ElColorAlphaSlider",
  24737. __name: "alpha-slider",
  24738. props: alphaSliderProps,
  24739. setup(__props, { expose: __expose }) {
  24740. const props = __props;
  24741. const { currentValue, bar, thumb, handleDrag, handleClick, handleKeydown } = useSlider(props, {
  24742. key: "alpha",
  24743. minValue: minValue$1,
  24744. maxValue: maxValue$1
  24745. });
  24746. const { rootKls, barKls, barStyle, thumbKls, thumbStyle, update } = useSliderDOM(props, {
  24747. namespace: "color-alpha-slider",
  24748. maxValue: maxValue$1,
  24749. currentValue,
  24750. bar,
  24751. thumb,
  24752. handleDrag,
  24753. getBackground
  24754. });
  24755. const { t } = useLocale();
  24756. const ariaLabel = (0, vue.computed)(() => t("el.colorpicker.alphaLabel"));
  24757. const ariaValuetext = (0, vue.computed)(() => {
  24758. return t("el.colorpicker.alphaDescription", {
  24759. alpha: currentValue.value,
  24760. color: props.color.value
  24761. });
  24762. });
  24763. function getBackground() {
  24764. if (props.color && props.color.value) {
  24765. const { r, g, b } = props.color.toRgb();
  24766. return `linear-gradient(to right, rgba(${r}, ${g}, ${b}, 0) 0%, rgba(${r}, ${g}, ${b}, 1) 100%)`;
  24767. }
  24768. return "";
  24769. }
  24770. __expose({
  24771. update,
  24772. bar,
  24773. thumb
  24774. });
  24775. return (_ctx, _cache) => {
  24776. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.createElementVNode)("div", {
  24777. ref_key: "bar",
  24778. ref: bar,
  24779. class: (0, vue.normalizeClass)((0, vue.unref)(barKls)),
  24780. style: (0, vue.normalizeStyle)((0, vue.unref)(barStyle)),
  24781. onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleClick) && (0, vue.unref)(handleClick)(...args))
  24782. }, null, 6), (0, vue.createElementVNode)("div", {
  24783. ref_key: "thumb",
  24784. ref: thumb,
  24785. class: (0, vue.normalizeClass)((0, vue.unref)(thumbKls)),
  24786. style: (0, vue.normalizeStyle)((0, vue.unref)(thumbStyle)),
  24787. "aria-label": ariaLabel.value,
  24788. "aria-valuenow": (0, vue.unref)(currentValue),
  24789. "aria-valuetext": ariaValuetext.value,
  24790. "aria-orientation": __props.vertical ? "vertical" : "horizontal",
  24791. "aria-valuemin": minValue$1,
  24792. "aria-valuemax": maxValue$1,
  24793. role: "slider",
  24794. tabindex: __props.disabled ? void 0 : 0,
  24795. "aria-disabled": __props.disabled,
  24796. onKeydown: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleKeydown) && (0, vue.unref)(handleKeydown)(...args))
  24797. }, null, 46, _hoisted_1$56)], 2);
  24798. };
  24799. }
  24800. });
  24801. //#endregion
  24802. //#region ../../packages/components/color-picker-panel/src/components/alpha-slider.vue
  24803. var alpha_slider_default = alpha_slider_vue_vue_type_script_setup_true_lang_default;
  24804. //#endregion
  24805. //#region ../../packages/components/color-picker-panel/src/components/hue-slider.vue?vue&type=script&setup=true&lang.ts
  24806. const _hoisted_1$55 = [
  24807. "aria-label",
  24808. "aria-valuenow",
  24809. "aria-valuetext",
  24810. "aria-orientation",
  24811. "tabindex",
  24812. "aria-disabled"
  24813. ];
  24814. const minValue = 0;
  24815. const maxValue = 360;
  24816. var hue_slider_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  24817. name: "ElColorHueSlider",
  24818. __name: "hue-slider",
  24819. props: hueSliderProps,
  24820. setup(__props, { expose: __expose }) {
  24821. const props = __props;
  24822. const { currentValue, bar, thumb, handleDrag, handleClick, handleKeydown } = useSlider(props, {
  24823. key: "hue",
  24824. minValue,
  24825. maxValue
  24826. });
  24827. const { rootKls, barKls, thumbKls, thumbStyle, thumbTop, update } = useSliderDOM(props, {
  24828. namespace: "color-hue-slider",
  24829. maxValue,
  24830. currentValue,
  24831. bar,
  24832. thumb,
  24833. handleDrag
  24834. });
  24835. const { t } = useLocale();
  24836. const ariaLabel = (0, vue.computed)(() => t("el.colorpicker.hueLabel"));
  24837. const ariaValuetext = (0, vue.computed)(() => {
  24838. return t("el.colorpicker.hueDescription", {
  24839. hue: currentValue.value,
  24840. color: props.color.value
  24841. });
  24842. });
  24843. __expose({
  24844. bar,
  24845. thumb,
  24846. thumbTop,
  24847. update
  24848. });
  24849. return (_ctx, _cache) => {
  24850. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.createElementVNode)("div", {
  24851. ref_key: "bar",
  24852. ref: bar,
  24853. class: (0, vue.normalizeClass)((0, vue.unref)(barKls)),
  24854. onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleClick) && (0, vue.unref)(handleClick)(...args))
  24855. }, null, 2), (0, vue.createElementVNode)("div", {
  24856. ref_key: "thumb",
  24857. ref: thumb,
  24858. class: (0, vue.normalizeClass)((0, vue.unref)(thumbKls)),
  24859. style: (0, vue.normalizeStyle)((0, vue.unref)(thumbStyle)),
  24860. "aria-label": ariaLabel.value,
  24861. "aria-valuenow": (0, vue.unref)(currentValue),
  24862. "aria-valuetext": ariaValuetext.value,
  24863. "aria-orientation": __props.vertical ? "vertical" : "horizontal",
  24864. "aria-valuemin": minValue,
  24865. "aria-valuemax": maxValue,
  24866. role: "slider",
  24867. tabindex: __props.disabled ? void 0 : 0,
  24868. "aria-disabled": __props.disabled,
  24869. onKeydown: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleKeydown) && (0, vue.unref)(handleKeydown)(...args))
  24870. }, null, 46, _hoisted_1$55)], 2);
  24871. };
  24872. }
  24873. });
  24874. //#endregion
  24875. //#region ../../packages/components/color-picker-panel/src/components/hue-slider.vue
  24876. var hue_slider_default = hue_slider_vue_vue_type_script_setup_true_lang_default;
  24877. //#endregion
  24878. //#region ../../packages/components/color-picker-panel/src/props/predefine.ts
  24879. const predefineProps = buildProps({
  24880. colors: {
  24881. type: definePropType(Array),
  24882. required: true
  24883. },
  24884. color: {
  24885. type: definePropType(Object),
  24886. required: true
  24887. },
  24888. enableAlpha: {
  24889. type: Boolean,
  24890. required: true
  24891. },
  24892. disabled: Boolean
  24893. });
  24894. //#endregion
  24895. //#region ../../packages/components/color-picker-panel/src/utils/color.ts
  24896. var Color = class {
  24897. constructor(options = {}) {
  24898. this._hue = 0;
  24899. this._saturation = 100;
  24900. this._value = 100;
  24901. this._alpha = 100;
  24902. this._tiny = new TinyColor();
  24903. this._isValid = false;
  24904. this.enableAlpha = false;
  24905. this.format = "";
  24906. this.value = "";
  24907. for (const option in options) if (hasOwn(options, option)) this[option] = options[option];
  24908. if (options.value) this.fromString(options.value);
  24909. else this.doOnChange();
  24910. }
  24911. set(prop, value) {
  24912. if (arguments.length === 1 && typeof prop === "object") {
  24913. for (const p in prop) if (hasOwn(prop, p)) this.set(p, prop[p]);
  24914. return;
  24915. }
  24916. this[`_${prop}`] = value;
  24917. this._isValid = true;
  24918. this.doOnChange();
  24919. }
  24920. get(prop) {
  24921. if ([
  24922. "hue",
  24923. "saturation",
  24924. "value",
  24925. "alpha"
  24926. ].includes(prop)) return Math.round(this[`_${prop}`]);
  24927. return this[`_${prop}`];
  24928. }
  24929. toRgb() {
  24930. return this._isValid ? this._tiny.toRgb() : {
  24931. r: 255,
  24932. g: 255,
  24933. b: 255,
  24934. a: 0
  24935. };
  24936. }
  24937. fromString(value) {
  24938. const color = new TinyColor(value);
  24939. this._isValid = color.isValid;
  24940. if (color.isValid) {
  24941. const { h, s, v, a } = color.toHsv();
  24942. this._hue = h;
  24943. this._saturation = s * 100;
  24944. this._value = v * 100;
  24945. this._alpha = a * 100;
  24946. } else {
  24947. this._hue = 0;
  24948. this._saturation = 100;
  24949. this._value = 100;
  24950. this._alpha = 100;
  24951. }
  24952. this.doOnChange();
  24953. }
  24954. clear() {
  24955. this._isValid = false;
  24956. this.value = "";
  24957. this._hue = 0;
  24958. this._saturation = 100;
  24959. this._value = 100;
  24960. this._alpha = 100;
  24961. }
  24962. compare(color) {
  24963. const compareColor = new TinyColor({
  24964. h: color._hue,
  24965. s: color._saturation / 100,
  24966. v: color._value / 100,
  24967. a: color._alpha / 100
  24968. });
  24969. return this._tiny.equals(compareColor);
  24970. }
  24971. doOnChange() {
  24972. const { _hue, _saturation, _value, _alpha, format, enableAlpha } = this;
  24973. let _format = format || (enableAlpha ? "rgb" : "hex");
  24974. if (format === "hex" && enableAlpha) _format = "hex8";
  24975. this._tiny = new TinyColor({
  24976. h: _hue,
  24977. s: _saturation / 100,
  24978. v: _value / 100,
  24979. a: _alpha / 100
  24980. });
  24981. this.value = this._isValid ? this._tiny.toString(_format) : "";
  24982. }
  24983. };
  24984. //#endregion
  24985. //#region ../../packages/components/color-picker-panel/src/composables/use-predefine.ts
  24986. const usePredefine = (props) => {
  24987. const { currentColor } = (0, vue.inject)(colorPickerPanelContextKey);
  24988. const rgbaColors = (0, vue.ref)(parseColors(props.colors, props.color));
  24989. (0, vue.watch)(() => currentColor.value, (val) => {
  24990. const color = new Color({
  24991. value: val,
  24992. enableAlpha: props.enableAlpha
  24993. });
  24994. rgbaColors.value.forEach((item) => {
  24995. item.selected = color.compare(item);
  24996. });
  24997. });
  24998. (0, vue.watchEffect)(() => {
  24999. rgbaColors.value = parseColors(props.colors, props.color);
  25000. });
  25001. function handleSelect(index) {
  25002. props.color.fromString(props.colors[index]);
  25003. }
  25004. function parseColors(colors, color) {
  25005. return colors.map((value) => {
  25006. const c = new Color({
  25007. value,
  25008. enableAlpha: props.enableAlpha
  25009. });
  25010. c.selected = c.compare(color);
  25011. return c;
  25012. });
  25013. }
  25014. return {
  25015. rgbaColors,
  25016. handleSelect
  25017. };
  25018. };
  25019. const usePredefineDOM = (props) => {
  25020. const ns = useNamespace("color-predefine");
  25021. const rootKls = (0, vue.computed)(() => [ns.b(), ns.is("disabled", props.disabled)]);
  25022. const colorsKls = (0, vue.computed)(() => ns.e("colors"));
  25023. function colorSelectorKls(item) {
  25024. return [
  25025. ns.e("color-selector"),
  25026. ns.is("alpha", item.get("alpha") < 100),
  25027. { selected: item.selected }
  25028. ];
  25029. }
  25030. return {
  25031. rootKls,
  25032. colorsKls,
  25033. colorSelectorKls
  25034. };
  25035. };
  25036. //#endregion
  25037. //#region ../../packages/components/color-picker-panel/src/components/predefine.vue?vue&type=script&setup=true&lang.ts
  25038. const _hoisted_1$54 = [
  25039. "disabled",
  25040. "aria-label",
  25041. "onClick"
  25042. ];
  25043. var predefine_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  25044. name: "ElColorPredefine",
  25045. __name: "predefine",
  25046. props: predefineProps,
  25047. setup(__props) {
  25048. const props = __props;
  25049. const { rgbaColors, handleSelect } = usePredefine(props);
  25050. const { rootKls, colorsKls, colorSelectorKls } = usePredefineDOM(props);
  25051. const { t } = useLocale();
  25052. const ariaLabel = (value) => {
  25053. return t("el.colorpicker.predefineDescription", { value });
  25054. };
  25055. return (_ctx, _cache) => {
  25056. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(colorsKls)) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(rgbaColors), (item, index) => {
  25057. return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  25058. key: __props.colors[index],
  25059. type: "button",
  25060. disabled: __props.disabled,
  25061. "aria-label": ariaLabel(item.value),
  25062. class: (0, vue.normalizeClass)((0, vue.unref)(colorSelectorKls)(item)),
  25063. onClick: ($event) => (0, vue.unref)(handleSelect)(index)
  25064. }, [(0, vue.createElementVNode)("div", { style: (0, vue.normalizeStyle)({ backgroundColor: item.value }) }, null, 4)], 10, _hoisted_1$54);
  25065. }), 128))], 2)], 2);
  25066. };
  25067. }
  25068. });
  25069. //#endregion
  25070. //#region ../../packages/components/color-picker-panel/src/components/predefine.vue
  25071. var predefine_default = predefine_vue_vue_type_script_setup_true_lang_default;
  25072. //#endregion
  25073. //#region ../../packages/components/color-picker-panel/src/props/sv-panel.ts
  25074. const svPanelProps = buildProps({
  25075. color: {
  25076. type: definePropType(Object),
  25077. required: true
  25078. },
  25079. disabled: Boolean
  25080. });
  25081. //#endregion
  25082. //#region ../../packages/components/color-picker-panel/src/composables/use-sv-panel.ts
  25083. const useSvPanel = (props) => {
  25084. const instance = (0, vue.getCurrentInstance)();
  25085. const cursorRef = (0, vue.ref)();
  25086. const cursorTop = (0, vue.ref)(0);
  25087. const cursorLeft = (0, vue.ref)(0);
  25088. const background = (0, vue.ref)("hsl(0, 100%, 50%)");
  25089. const saturation = (0, vue.computed)(() => props.color.get("saturation"));
  25090. const brightness = (0, vue.computed)(() => props.color.get("value"));
  25091. const hue = (0, vue.computed)(() => props.color.get("hue"));
  25092. function handleClick(event) {
  25093. if (props.disabled) return;
  25094. if (event.target !== cursorRef.value) handleDrag(event);
  25095. cursorRef.value?.focus({ preventScroll: true });
  25096. }
  25097. function handleDrag(event) {
  25098. if (props.disabled) return;
  25099. const rect = instance.vnode.el.getBoundingClientRect();
  25100. const { clientX, clientY } = getClientXY(event);
  25101. let left = clientX - rect.left;
  25102. let top = clientY - rect.top;
  25103. left = Math.max(0, left);
  25104. left = Math.min(left, rect.width);
  25105. top = Math.max(0, top);
  25106. top = Math.min(top, rect.height);
  25107. cursorLeft.value = left;
  25108. cursorTop.value = top;
  25109. props.color.set({
  25110. saturation: left / rect.width * 100,
  25111. value: 100 - top / rect.height * 100
  25112. });
  25113. }
  25114. function handleKeydown(event) {
  25115. if (props.disabled) return;
  25116. const { shiftKey } = event;
  25117. const code = getEventCode(event);
  25118. const step = shiftKey ? 10 : 1;
  25119. let isPreventDefault = true;
  25120. switch (code) {
  25121. case EVENT_CODE.left:
  25122. incrementSaturation(-step);
  25123. break;
  25124. case EVENT_CODE.right:
  25125. incrementSaturation(step);
  25126. break;
  25127. case EVENT_CODE.up:
  25128. incrementBrightness(step);
  25129. break;
  25130. case EVENT_CODE.down:
  25131. incrementBrightness(-step);
  25132. break;
  25133. default:
  25134. isPreventDefault = false;
  25135. break;
  25136. }
  25137. isPreventDefault && event.preventDefault();
  25138. }
  25139. function incrementSaturation(step) {
  25140. let next = saturation.value + step;
  25141. next = next < 0 ? 0 : next > 100 ? 100 : next;
  25142. props.color.set("saturation", next);
  25143. }
  25144. function incrementBrightness(step) {
  25145. let next = brightness.value + step;
  25146. next = next < 0 ? 0 : next > 100 ? 100 : next;
  25147. props.color.set("value", next);
  25148. }
  25149. return {
  25150. cursorRef,
  25151. cursorTop,
  25152. cursorLeft,
  25153. background,
  25154. saturation,
  25155. brightness,
  25156. hue,
  25157. handleClick,
  25158. handleDrag,
  25159. handleKeydown
  25160. };
  25161. };
  25162. const useSvPanelDOM = (props, { cursorTop, cursorLeft, background, handleDrag }) => {
  25163. const instance = (0, vue.getCurrentInstance)();
  25164. const ns = useNamespace("color-svpanel");
  25165. function update() {
  25166. const saturation = props.color.get("saturation");
  25167. const brightness = props.color.get("value");
  25168. const { clientWidth: width, clientHeight: height } = instance.vnode.el;
  25169. cursorLeft.value = saturation * width / 100;
  25170. cursorTop.value = (100 - brightness) * height / 100;
  25171. background.value = `hsl(${props.color.get("hue")}, 100%, 50%)`;
  25172. }
  25173. (0, vue.onMounted)(() => {
  25174. draggable(instance.vnode.el, {
  25175. drag: (event) => {
  25176. handleDrag(event);
  25177. },
  25178. end: (event) => {
  25179. handleDrag(event);
  25180. }
  25181. });
  25182. update();
  25183. });
  25184. (0, vue.watch)([
  25185. () => props.color.get("hue"),
  25186. () => props.color.get("value"),
  25187. () => props.color.value
  25188. ], () => update());
  25189. return {
  25190. rootKls: (0, vue.computed)(() => ns.b()),
  25191. cursorKls: (0, vue.computed)(() => ns.e("cursor")),
  25192. rootStyle: (0, vue.computed)(() => ({ backgroundColor: background.value })),
  25193. cursorStyle: (0, vue.computed)(() => ({
  25194. top: addUnit(cursorTop.value),
  25195. left: addUnit(cursorLeft.value)
  25196. })),
  25197. update
  25198. };
  25199. };
  25200. //#endregion
  25201. //#region ../../packages/components/color-picker-panel/src/components/sv-panel.vue?vue&type=script&setup=true&lang.ts
  25202. const _hoisted_1$53 = [
  25203. "tabindex",
  25204. "aria-disabled",
  25205. "aria-label",
  25206. "aria-valuenow",
  25207. "aria-valuetext"
  25208. ];
  25209. var sv_panel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  25210. name: "ElSvPanel",
  25211. __name: "sv-panel",
  25212. props: svPanelProps,
  25213. setup(__props, { expose: __expose }) {
  25214. const props = __props;
  25215. const { cursorRef, cursorTop, cursorLeft, background, saturation, brightness, handleClick, handleDrag, handleKeydown } = useSvPanel(props);
  25216. const { rootKls, cursorKls, rootStyle, cursorStyle, update } = useSvPanelDOM(props, {
  25217. cursorTop,
  25218. cursorLeft,
  25219. background,
  25220. handleDrag
  25221. });
  25222. const { t } = useLocale();
  25223. const ariaLabel = (0, vue.computed)(() => t("el.colorpicker.svLabel"));
  25224. const ariaValuetext = (0, vue.computed)(() => {
  25225. return t("el.colorpicker.svDescription", {
  25226. saturation: saturation.value,
  25227. brightness: brightness.value,
  25228. color: props.color.value
  25229. });
  25230. });
  25231. __expose({ update });
  25232. return (_ctx, _cache) => {
  25233. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  25234. class: (0, vue.normalizeClass)((0, vue.unref)(rootKls)),
  25235. style: (0, vue.normalizeStyle)((0, vue.unref)(rootStyle)),
  25236. onClick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleClick) && (0, vue.unref)(handleClick)(...args))
  25237. }, [(0, vue.createElementVNode)("div", {
  25238. ref_key: "cursorRef",
  25239. ref: cursorRef,
  25240. class: (0, vue.normalizeClass)((0, vue.unref)(cursorKls)),
  25241. style: (0, vue.normalizeStyle)((0, vue.unref)(cursorStyle)),
  25242. tabindex: __props.disabled ? void 0 : 0,
  25243. "aria-disabled": __props.disabled,
  25244. role: "slider",
  25245. "aria-valuemin": "0,0",
  25246. "aria-valuemax": "100,100",
  25247. "aria-label": ariaLabel.value,
  25248. "aria-valuenow": `${(0, vue.unref)(saturation)},${(0, vue.unref)(brightness)}`,
  25249. "aria-valuetext": ariaValuetext.value,
  25250. onKeydown: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleKeydown) && (0, vue.unref)(handleKeydown)(...args))
  25251. }, null, 46, _hoisted_1$53)], 6);
  25252. };
  25253. }
  25254. });
  25255. //#endregion
  25256. //#region ../../packages/components/color-picker-panel/src/components/sv-panel.vue
  25257. var sv_panel_default = sv_panel_vue_vue_type_script_setup_true_lang_default;
  25258. //#endregion
  25259. //#region ../../packages/components/color-picker-panel/src/composables/use-common-color.ts
  25260. const useCommonColor = (props, emit) => {
  25261. const color = (0, vue.reactive)(new Color({
  25262. enableAlpha: props.showAlpha,
  25263. format: props.colorFormat || "",
  25264. value: props.modelValue
  25265. }));
  25266. (0, vue.watch)(() => [props.colorFormat, props.showAlpha], () => {
  25267. color.enableAlpha = props.showAlpha;
  25268. color.format = props.colorFormat || color.format;
  25269. color.doOnChange();
  25270. emit(UPDATE_MODEL_EVENT, color.value);
  25271. });
  25272. return { color };
  25273. };
  25274. //#endregion
  25275. //#region ../../packages/components/color-picker-panel/src/color-picker-panel.vue?vue&type=script&setup=true&lang.ts
  25276. var color_picker_panel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  25277. name: "ElColorPickerPanel",
  25278. __name: "color-picker-panel",
  25279. props: colorPickerPanelProps,
  25280. emits: colorPickerPanelEmits,
  25281. setup(__props, { expose: __expose, emit: __emit }) {
  25282. const props = __props;
  25283. const emit = __emit;
  25284. const ns = useNamespace("color-picker-panel");
  25285. const { formItem } = useFormItem();
  25286. const disabled = useFormDisabled();
  25287. const hueRef = (0, vue.ref)();
  25288. const svRef = (0, vue.ref)();
  25289. const alphaRef = (0, vue.ref)();
  25290. const inputRef = (0, vue.ref)();
  25291. const customInput = (0, vue.ref)("");
  25292. const { color } = (0, vue.inject)(ROOT_COMMON_COLOR_INJECTION_KEY, () => useCommonColor(props, emit), true);
  25293. function handleConfirm() {
  25294. color.fromString(customInput.value);
  25295. if (color.value !== customInput.value) customInput.value = color.value;
  25296. }
  25297. function handleFocusout() {
  25298. if (props.validateEvent) formItem?.validate?.("blur").catch(NOOP);
  25299. }
  25300. function update() {
  25301. hueRef.value?.update();
  25302. svRef.value?.update();
  25303. alphaRef.value?.update();
  25304. }
  25305. (0, vue.onMounted)(() => {
  25306. if (props.modelValue) customInput.value = color.value;
  25307. (0, vue.nextTick)(update);
  25308. });
  25309. (0, vue.watch)(() => props.modelValue, (newVal) => {
  25310. if (newVal !== color.value) newVal ? color.fromString(newVal) : color.clear();
  25311. });
  25312. (0, vue.watch)(() => color.value, (val) => {
  25313. emit(UPDATE_MODEL_EVENT, val);
  25314. customInput.value = val;
  25315. if (props.validateEvent) formItem?.validate("change").catch(NOOP);
  25316. });
  25317. (0, vue.provide)(colorPickerPanelContextKey, { currentColor: (0, vue.computed)(() => color.value) });
  25318. __expose({
  25319. color,
  25320. inputRef,
  25321. update
  25322. });
  25323. return (_ctx, _cache) => {
  25324. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  25325. class: (0, vue.normalizeClass)([
  25326. (0, vue.unref)(ns).b(),
  25327. (0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled)),
  25328. (0, vue.unref)(ns).is("border", __props.border)
  25329. ]),
  25330. onFocusout: handleFocusout
  25331. }, [
  25332. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("wrapper")) }, [(0, vue.createVNode)(hue_slider_default, {
  25333. ref_key: "hueRef",
  25334. ref: hueRef,
  25335. color: (0, vue.unref)(color),
  25336. vertical: "",
  25337. disabled: (0, vue.unref)(disabled),
  25338. class: (0, vue.normalizeClass)(["hue-slider", __props.hueSliderClass]),
  25339. style: (0, vue.normalizeStyle)(__props.hueSliderStyle)
  25340. }, null, 8, [
  25341. "color",
  25342. "disabled",
  25343. "class",
  25344. "style"
  25345. ]), (0, vue.createVNode)(sv_panel_default, {
  25346. ref_key: "svRef",
  25347. ref: svRef,
  25348. color: (0, vue.unref)(color),
  25349. disabled: (0, vue.unref)(disabled)
  25350. }, null, 8, ["color", "disabled"])], 2),
  25351. __props.showAlpha ? ((0, vue.openBlock)(), (0, vue.createBlock)(alpha_slider_default, {
  25352. key: 0,
  25353. ref_key: "alphaRef",
  25354. ref: alphaRef,
  25355. color: (0, vue.unref)(color),
  25356. disabled: (0, vue.unref)(disabled)
  25357. }, null, 8, ["color", "disabled"])) : (0, vue.createCommentVNode)("v-if", true),
  25358. __props.predefine ? ((0, vue.openBlock)(), (0, vue.createBlock)(predefine_default, {
  25359. key: 1,
  25360. ref: "predefine",
  25361. "enable-alpha": __props.showAlpha,
  25362. color: (0, vue.unref)(color),
  25363. colors: __props.predefine,
  25364. disabled: (0, vue.unref)(disabled)
  25365. }, null, 8, [
  25366. "enable-alpha",
  25367. "color",
  25368. "colors",
  25369. "disabled"
  25370. ])) : (0, vue.createCommentVNode)("v-if", true),
  25371. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("footer")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
  25372. ref_key: "inputRef",
  25373. ref: inputRef,
  25374. modelValue: customInput.value,
  25375. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => customInput.value = $event),
  25376. "validate-event": false,
  25377. size: "small",
  25378. disabled: (0, vue.unref)(disabled),
  25379. onChange: handleConfirm
  25380. }, null, 8, ["modelValue", "disabled"]), (0, vue.renderSlot)(_ctx.$slots, "footer")], 2)
  25381. ], 34);
  25382. };
  25383. }
  25384. });
  25385. //#endregion
  25386. //#region ../../packages/components/color-picker-panel/src/color-picker-panel.vue
  25387. var color_picker_panel_default = color_picker_panel_vue_vue_type_script_setup_true_lang_default;
  25388. //#endregion
  25389. //#region ../../packages/components/color-picker-panel/index.ts
  25390. const ElColorPickerPanel = withInstall(color_picker_panel_default);
  25391. //#endregion
  25392. //#region ../../packages/components/color-picker/src/color-picker.ts
  25393. const colorPickerProps = buildProps({
  25394. persistent: {
  25395. type: Boolean,
  25396. default: true
  25397. },
  25398. modelValue: {
  25399. type: definePropType(String),
  25400. default: void 0
  25401. },
  25402. id: String,
  25403. showAlpha: Boolean,
  25404. colorFormat: { type: definePropType(String) },
  25405. disabled: {
  25406. type: Boolean,
  25407. default: void 0
  25408. },
  25409. clearable: {
  25410. type: Boolean,
  25411. default: true
  25412. },
  25413. size: useSizeProp,
  25414. popperClass: useTooltipContentProps.popperClass,
  25415. popperStyle: useTooltipContentProps.popperStyle,
  25416. tabindex: {
  25417. type: [String, Number],
  25418. default: 0
  25419. },
  25420. teleported: useTooltipContentProps.teleported,
  25421. appendTo: useTooltipContentProps.appendTo,
  25422. predefine: { type: definePropType(Array) },
  25423. validateEvent: {
  25424. type: Boolean,
  25425. default: true
  25426. },
  25427. ...useEmptyValuesProps,
  25428. ...useAriaProps(["ariaLabel"])
  25429. });
  25430. const colorPickerEmits = {
  25431. [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNil(val),
  25432. [CHANGE_EVENT]: (val) => isString(val) || isNil(val),
  25433. activeChange: (val) => isString(val) || isNil(val),
  25434. focus: (evt) => evt instanceof FocusEvent,
  25435. blur: (evt) => evt instanceof FocusEvent,
  25436. clear: () => true
  25437. };
  25438. const colorPickerPropsDefaults = {
  25439. persistent: true,
  25440. modelValue: void 0,
  25441. disabled: void 0,
  25442. clearable: true,
  25443. popperStyle: void 0,
  25444. tabindex: 0,
  25445. teleported: true,
  25446. validateEvent: true,
  25447. valueOnClear: void 0
  25448. };
  25449. //#endregion
  25450. //#region ../../packages/components/color-picker/src/color-picker.vue?vue&type=script&setup=true&lang.ts
  25451. const _hoisted_1$52 = [
  25452. "id",
  25453. "aria-label",
  25454. "aria-labelledby",
  25455. "aria-description",
  25456. "aria-disabled",
  25457. "tabindex"
  25458. ];
  25459. var color_picker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  25460. name: "ElColorPicker",
  25461. __name: "color-picker",
  25462. props: colorPickerProps,
  25463. emits: colorPickerEmits,
  25464. setup(__props, { expose: __expose, emit: __emit }) {
  25465. const props = __props;
  25466. const emit = __emit;
  25467. const { t } = useLocale();
  25468. const ns = useNamespace("color");
  25469. const { formItem } = useFormItem();
  25470. const colorSize = useFormSize();
  25471. const colorDisabled = useFormDisabled();
  25472. const { valueOnClear, isEmptyValue } = useEmptyValues(props, null);
  25473. const commonColor = useCommonColor(props, emit);
  25474. const { inputId: buttonId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem });
  25475. const popper = (0, vue.ref)();
  25476. const triggerRef = (0, vue.ref)();
  25477. const pickerPanelRef = (0, vue.ref)();
  25478. const showPicker = (0, vue.ref)(false);
  25479. const showPanelColor = (0, vue.ref)(false);
  25480. let shouldActiveChange = true;
  25481. const { isFocused, handleFocus, handleBlur } = useFocusController(triggerRef, {
  25482. disabled: colorDisabled,
  25483. beforeBlur(event) {
  25484. return popper.value?.isFocusInsideContent(event);
  25485. },
  25486. afterBlur() {
  25487. setShowPicker(false);
  25488. resetColor();
  25489. if (props.validateEvent) formItem?.validate?.("blur").catch(NOOP);
  25490. }
  25491. });
  25492. const color = reactiveComputed(() => pickerPanelRef.value?.color ?? commonColor.color);
  25493. const panelProps = (0, vue.computed)(() => pick(props, Object.keys(colorPickerPanelProps)));
  25494. const displayedColor = (0, vue.computed)(() => {
  25495. if (!props.modelValue && !showPanelColor.value) return "transparent";
  25496. return displayedRgb(color, props.showAlpha);
  25497. });
  25498. const currentColor = (0, vue.computed)(() => {
  25499. return !props.modelValue && !showPanelColor.value ? "" : color.value;
  25500. });
  25501. const buttonAriaLabel = (0, vue.computed)(() => {
  25502. return !isLabeledByFormItem.value ? props.ariaLabel || t("el.colorpicker.defaultLabel") : void 0;
  25503. });
  25504. const buttonAriaLabelledby = (0, vue.computed)(() => {
  25505. return isLabeledByFormItem.value ? formItem?.labelId : void 0;
  25506. });
  25507. const btnKls = (0, vue.computed)(() => {
  25508. return [
  25509. ns.b("picker"),
  25510. ns.is("disabled", colorDisabled.value),
  25511. ns.bm("picker", colorSize.value),
  25512. ns.is("focused", isFocused.value)
  25513. ];
  25514. });
  25515. function displayedRgb(color, showAlpha) {
  25516. const { r, g, b, a } = color.toRgb();
  25517. return showAlpha ? `rgba(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;
  25518. }
  25519. function setShowPicker(value) {
  25520. showPicker.value = value;
  25521. }
  25522. const debounceSetShowPicker = debounce(setShowPicker, 100, { leading: true });
  25523. function show() {
  25524. if (colorDisabled.value) return;
  25525. setShowPicker(true);
  25526. }
  25527. function hide() {
  25528. debounceSetShowPicker(false);
  25529. resetColor();
  25530. }
  25531. function resetColor() {
  25532. (0, vue.nextTick)(() => {
  25533. if (props.modelValue) color.fromString(props.modelValue);
  25534. else {
  25535. color.value = "";
  25536. (0, vue.nextTick)(() => {
  25537. showPanelColor.value = false;
  25538. });
  25539. }
  25540. });
  25541. }
  25542. function handleTrigger() {
  25543. if (colorDisabled.value) return;
  25544. if (showPicker.value) resetColor();
  25545. debounceSetShowPicker(!showPicker.value);
  25546. }
  25547. function confirmValue() {
  25548. const value = isEmptyValue(color.value) ? valueOnClear.value : color.value;
  25549. emit(UPDATE_MODEL_EVENT, value);
  25550. emit(CHANGE_EVENT, value);
  25551. if (props.validateEvent) formItem?.validate("change").catch(NOOP);
  25552. debounceSetShowPicker(false);
  25553. (0, vue.nextTick)(() => {
  25554. const newColor = new Color({
  25555. enableAlpha: props.showAlpha,
  25556. format: props.colorFormat || "",
  25557. value: props.modelValue
  25558. });
  25559. if (!color.compare(newColor)) resetColor();
  25560. });
  25561. }
  25562. function clear() {
  25563. debounceSetShowPicker(false);
  25564. emit(UPDATE_MODEL_EVENT, valueOnClear.value);
  25565. emit(CHANGE_EVENT, valueOnClear.value);
  25566. if (props.modelValue !== valueOnClear.value && props.validateEvent) formItem?.validate("change").catch(NOOP);
  25567. resetColor();
  25568. emit("clear");
  25569. }
  25570. function handleShowTooltip() {
  25571. pickerPanelRef?.value?.inputRef?.focus();
  25572. }
  25573. function handleClickOutside() {
  25574. if (!showPicker.value) return;
  25575. hide();
  25576. isFocused.value && focus();
  25577. }
  25578. function handleEsc(event) {
  25579. event.preventDefault();
  25580. event.stopPropagation();
  25581. setShowPicker(false);
  25582. resetColor();
  25583. }
  25584. function handleKeyDown(event) {
  25585. switch (getEventCode(event)) {
  25586. case EVENT_CODE.enter:
  25587. case EVENT_CODE.numpadEnter:
  25588. case EVENT_CODE.space:
  25589. event.preventDefault();
  25590. event.stopPropagation();
  25591. show();
  25592. break;
  25593. case EVENT_CODE.esc:
  25594. handleEsc(event);
  25595. break;
  25596. }
  25597. }
  25598. function focus() {
  25599. triggerRef.value.focus();
  25600. }
  25601. function blur() {
  25602. triggerRef.value.blur();
  25603. }
  25604. (0, vue.watch)(() => currentColor.value, (val) => {
  25605. shouldActiveChange && emit("activeChange", val);
  25606. shouldActiveChange = true;
  25607. });
  25608. (0, vue.watch)(() => color.value, () => {
  25609. if (!props.modelValue && !showPanelColor.value) showPanelColor.value = true;
  25610. });
  25611. (0, vue.watch)(() => props.modelValue, (newVal) => {
  25612. if (!newVal) showPanelColor.value = false;
  25613. else if (newVal && newVal !== color.value) {
  25614. shouldActiveChange = false;
  25615. color.fromString(newVal);
  25616. }
  25617. });
  25618. (0, vue.watch)(() => showPicker.value, () => {
  25619. pickerPanelRef.value && (0, vue.nextTick)(pickerPanelRef.value.update);
  25620. });
  25621. (0, vue.provide)(ROOT_COMMON_COLOR_INJECTION_KEY, commonColor);
  25622. __expose({
  25623. color,
  25624. show,
  25625. hide,
  25626. focus,
  25627. blur
  25628. });
  25629. return (_ctx, _cache) => {
  25630. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
  25631. ref_key: "popper",
  25632. ref: popper,
  25633. visible: showPicker.value,
  25634. "show-arrow": false,
  25635. "fallback-placements": [
  25636. "bottom",
  25637. "top",
  25638. "right",
  25639. "left"
  25640. ],
  25641. offset: 0,
  25642. "gpu-acceleration": false,
  25643. "popper-class": [(0, vue.unref)(ns).be("picker", "panel"), __props.popperClass],
  25644. "popper-style": __props.popperStyle,
  25645. "stop-popper-mouse-event": false,
  25646. pure: "",
  25647. loop: "",
  25648. role: "dialog",
  25649. effect: "light",
  25650. trigger: "click",
  25651. teleported: __props.teleported,
  25652. transition: `${(0, vue.unref)(ns).namespace.value}-zoom-in-top`,
  25653. persistent: __props.persistent,
  25654. "append-to": __props.appendTo,
  25655. onShow: handleShowTooltip,
  25656. onHide: _cache[2] || (_cache[2] = ($event) => setShowPicker(false))
  25657. }, {
  25658. content: (0, vue.withCtx)(() => [(0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElColorPickerPanel), (0, vue.mergeProps)({
  25659. ref_key: "pickerPanelRef",
  25660. ref: pickerPanelRef
  25661. }, panelProps.value, {
  25662. border: false,
  25663. "validate-event": false,
  25664. onKeydown: (0, vue.withKeys)(handleEsc, ["esc"])
  25665. }), {
  25666. footer: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", null, [__props.clearable ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), {
  25667. key: 0,
  25668. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("footer", "link-btn")),
  25669. text: "",
  25670. size: "small",
  25671. onClick: clear
  25672. }, {
  25673. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.colorpicker.clear")), 1)]),
  25674. _: 1
  25675. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createVNode)((0, vue.unref)(ElButton), {
  25676. plain: "",
  25677. size: "small",
  25678. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("footer", "btn")),
  25679. onClick: confirmValue
  25680. }, {
  25681. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.colorpicker.confirm")), 1)]),
  25682. _: 1
  25683. }, 8, ["class"])])]),
  25684. _: 1
  25685. }, 16)), [[
  25686. (0, vue.unref)(ClickOutside),
  25687. handleClickOutside,
  25688. triggerRef.value
  25689. ]])]),
  25690. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", (0, vue.mergeProps)({
  25691. id: (0, vue.unref)(buttonId),
  25692. ref_key: "triggerRef",
  25693. ref: triggerRef
  25694. }, _ctx.$attrs, {
  25695. class: btnKls.value,
  25696. role: "button",
  25697. "aria-label": buttonAriaLabel.value,
  25698. "aria-labelledby": buttonAriaLabelledby.value,
  25699. "aria-description": (0, vue.unref)(t)("el.colorpicker.description", { color: __props.modelValue || "" }),
  25700. "aria-disabled": (0, vue.unref)(colorDisabled),
  25701. tabindex: (0, vue.unref)(colorDisabled) ? void 0 : __props.tabindex,
  25702. onKeydown: handleKeyDown,
  25703. onFocus: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleFocus) && (0, vue.unref)(handleFocus)(...args)),
  25704. onBlur: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleBlur) && (0, vue.unref)(handleBlur)(...args))
  25705. }), [(0, vue.createElementVNode)("div", {
  25706. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("picker", "trigger")),
  25707. onClick: handleTrigger
  25708. }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("picker", "color"), (0, vue.unref)(ns).is("alpha", __props.showAlpha)]) }, [(0, vue.createElementVNode)("span", {
  25709. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("picker", "color-inner")),
  25710. style: (0, vue.normalizeStyle)({ backgroundColor: displayedColor.value })
  25711. }, [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("picker", "icon"), (0, vue.unref)(ns).is("icon-arrow-down")]) }, {
  25712. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_down_default))]),
  25713. _: 1
  25714. }, 8, ["class"]), [[vue.vShow, __props.modelValue || showPanelColor.value]]), (0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("picker", "empty"), (0, vue.unref)(ns).is("icon-close")]) }, {
  25715. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
  25716. _: 1
  25717. }, 8, ["class"]), [[vue.vShow, !__props.modelValue && !showPanelColor.value]])], 6)], 2)], 2)], 16, _hoisted_1$52)]),
  25718. _: 1
  25719. }, 8, [
  25720. "visible",
  25721. "popper-class",
  25722. "popper-style",
  25723. "teleported",
  25724. "transition",
  25725. "persistent",
  25726. "append-to"
  25727. ]);
  25728. };
  25729. }
  25730. });
  25731. //#endregion
  25732. //#region ../../packages/components/color-picker/src/color-picker.vue
  25733. var color_picker_default = color_picker_vue_vue_type_script_setup_true_lang_default;
  25734. //#endregion
  25735. //#region ../../packages/components/color-picker/index.ts
  25736. const ElColorPicker = withInstall(color_picker_default);
  25737. //#endregion
  25738. //#region ../../packages/components/container/src/container.vue?vue&type=script&setup=true&lang.ts
  25739. var container_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  25740. name: "ElContainer",
  25741. __name: "container",
  25742. props: { direction: {
  25743. type: String,
  25744. required: false
  25745. } },
  25746. setup(__props) {
  25747. const props = __props;
  25748. const slots = (0, vue.useSlots)();
  25749. const ns = useNamespace("container");
  25750. const isVertical = (0, vue.computed)(() => {
  25751. if (props.direction === "vertical") return true;
  25752. else if (props.direction === "horizontal") return false;
  25753. if (slots && slots.default) return slots.default().some((vNode) => {
  25754. const tag = vNode.type.name;
  25755. return tag === "ElHeader" || tag === "ElFooter";
  25756. });
  25757. else return false;
  25758. });
  25759. return (_ctx, _cache) => {
  25760. return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).is("vertical", isVertical.value)]) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
  25761. };
  25762. }
  25763. });
  25764. //#endregion
  25765. //#region ../../packages/components/container/src/container.vue
  25766. var container_default = container_vue_vue_type_script_setup_true_lang_default;
  25767. //#endregion
  25768. //#region ../../packages/components/container/src/aside.vue?vue&type=script&setup=true&lang.ts
  25769. var aside_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  25770. name: "ElAside",
  25771. __name: "aside",
  25772. props: { width: {
  25773. type: [String, null],
  25774. required: false,
  25775. default: null
  25776. } },
  25777. setup(__props) {
  25778. const props = __props;
  25779. const ns = useNamespace("aside");
  25780. const style = (0, vue.computed)(() => props.width ? ns.cssVarBlock({ width: props.width }) : {});
  25781. return (_ctx, _cache) => {
  25782. return (0, vue.openBlock)(), (0, vue.createElementBlock)("aside", {
  25783. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  25784. style: (0, vue.normalizeStyle)(style.value)
  25785. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6);
  25786. };
  25787. }
  25788. });
  25789. //#endregion
  25790. //#region ../../packages/components/container/src/aside.vue
  25791. var aside_default = aside_vue_vue_type_script_setup_true_lang_default;
  25792. //#endregion
  25793. //#region ../../packages/components/container/src/footer.vue?vue&type=script&setup=true&lang.ts
  25794. var footer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  25795. name: "ElFooter",
  25796. __name: "footer",
  25797. props: { height: {
  25798. type: [String, null],
  25799. required: false,
  25800. default: null
  25801. } },
  25802. setup(__props) {
  25803. const props = __props;
  25804. const ns = useNamespace("footer");
  25805. const style = (0, vue.computed)(() => props.height ? ns.cssVarBlock({ height: props.height }) : {});
  25806. return (_ctx, _cache) => {
  25807. return (0, vue.openBlock)(), (0, vue.createElementBlock)("footer", {
  25808. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  25809. style: (0, vue.normalizeStyle)(style.value)
  25810. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6);
  25811. };
  25812. }
  25813. });
  25814. //#endregion
  25815. //#region ../../packages/components/container/src/footer.vue
  25816. var footer_default = footer_vue_vue_type_script_setup_true_lang_default;
  25817. //#endregion
  25818. //#region ../../packages/components/container/src/header.vue?vue&type=script&setup=true&lang.ts
  25819. var header_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  25820. name: "ElHeader",
  25821. __name: "header",
  25822. props: { height: {
  25823. type: [String, null],
  25824. required: false,
  25825. default: null
  25826. } },
  25827. setup(__props) {
  25828. const props = __props;
  25829. const ns = useNamespace("header");
  25830. const style = (0, vue.computed)(() => {
  25831. return props.height ? ns.cssVarBlock({ height: props.height }) : {};
  25832. });
  25833. return (_ctx, _cache) => {
  25834. return (0, vue.openBlock)(), (0, vue.createElementBlock)("header", {
  25835. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  25836. style: (0, vue.normalizeStyle)(style.value)
  25837. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 6);
  25838. };
  25839. }
  25840. });
  25841. //#endregion
  25842. //#region ../../packages/components/container/src/header.vue
  25843. var header_default = header_vue_vue_type_script_setup_true_lang_default;
  25844. //#endregion
  25845. //#region ../../packages/components/container/src/main.vue?vue&type=script&setup=true&lang.ts
  25846. var main_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  25847. name: "ElMain",
  25848. __name: "main",
  25849. setup(__props) {
  25850. const ns = useNamespace("main");
  25851. return (_ctx, _cache) => {
  25852. return (0, vue.openBlock)(), (0, vue.createElementBlock)("main", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2);
  25853. };
  25854. }
  25855. });
  25856. //#endregion
  25857. //#region ../../packages/components/container/src/main.vue
  25858. var main_default = main_vue_vue_type_script_setup_true_lang_default;
  25859. //#endregion
  25860. //#region ../../packages/components/container/index.ts
  25861. const ElContainer = withInstall(container_default, {
  25862. Aside: aside_default,
  25863. Footer: footer_default,
  25864. Header: header_default,
  25865. Main: main_default
  25866. });
  25867. const ElAside = withNoopInstall(aside_default);
  25868. const ElFooter = withNoopInstall(footer_default);
  25869. const ElHeader = withNoopInstall(header_default);
  25870. const ElMain = withNoopInstall(main_default);
  25871. //#endregion
  25872. //#region ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/advancedFormat.js
  25873. var require_advancedFormat = /* @__PURE__ */ __commonJSMin(((exports, module) => {
  25874. (function(e, t) {
  25875. "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_advancedFormat = t();
  25876. })(exports, (function() {
  25877. "use strict";
  25878. return function(e, t) {
  25879. var r = t.prototype, n = r.format;
  25880. r.format = function(e) {
  25881. var t = this, r = this.$locale();
  25882. if (!this.isValid()) return n.bind(this)(e);
  25883. var s = this.$utils(), a = (e || "YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, (function(e) {
  25884. switch (e) {
  25885. case "Q": return Math.ceil((t.$M + 1) / 3);
  25886. case "Do": return r.ordinal(t.$D);
  25887. case "gggg": return t.weekYear();
  25888. case "GGGG": return t.isoWeekYear();
  25889. case "wo": return r.ordinal(t.week(), "W");
  25890. case "w":
  25891. case "ww": return s.s(t.week(), "w" === e ? 1 : 2, "0");
  25892. case "W":
  25893. case "WW": return s.s(t.isoWeek(), "W" === e ? 1 : 2, "0");
  25894. case "k":
  25895. case "kk": return s.s(String(0 === t.$H ? 24 : t.$H), "k" === e ? 1 : 2, "0");
  25896. case "X": return Math.floor(t.$d.getTime() / 1e3);
  25897. case "x": return t.$d.getTime();
  25898. case "z": return "[" + t.offsetName() + "]";
  25899. case "zzz": return "[" + t.offsetName("long") + "]";
  25900. default: return e;
  25901. }
  25902. }));
  25903. return n.bind(this)(a);
  25904. };
  25905. };
  25906. }));
  25907. }));
  25908. //#endregion
  25909. //#region ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/weekOfYear.js
  25910. var require_weekOfYear = /* @__PURE__ */ __commonJSMin(((exports, module) => {
  25911. (function(e, t) {
  25912. "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_weekOfYear = t();
  25913. })(exports, (function() {
  25914. "use strict";
  25915. var e = "week", t = "year";
  25916. return function(i, n, r) {
  25917. var f = n.prototype;
  25918. f.week = function(i) {
  25919. if (void 0 === i && (i = null), null !== i) return this.add(7 * (i - this.week()), "day");
  25920. var n = this.$locale().yearStart || 1;
  25921. if (11 === this.month() && this.date() > 25) {
  25922. var f = r(this).startOf(t).add(1, t).date(n), s = r(this).endOf(e);
  25923. if (f.isBefore(s)) return 1;
  25924. }
  25925. var a = r(this).startOf(t).date(n).startOf(e).subtract(1, "millisecond"), o = this.diff(a, e, !0);
  25926. return o < 0 ? r(this).startOf("week").week() : Math.ceil(o);
  25927. }, f.weeks = function(e) {
  25928. return void 0 === e && (e = null), this.week(e);
  25929. };
  25930. };
  25931. }));
  25932. }));
  25933. //#endregion
  25934. //#region ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/weekYear.js
  25935. var require_weekYear = /* @__PURE__ */ __commonJSMin(((exports, module) => {
  25936. (function(e, t) {
  25937. "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_weekYear = t();
  25938. })(exports, (function() {
  25939. "use strict";
  25940. return function(e, t) {
  25941. t.prototype.weekYear = function() {
  25942. var e = this.month(), t = this.week(), n = this.year();
  25943. return 1 === t && 11 === e ? n + 1 : 0 === e && t >= 52 ? n - 1 : n;
  25944. };
  25945. };
  25946. }));
  25947. }));
  25948. //#endregion
  25949. //#region ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/dayOfYear.js
  25950. var require_dayOfYear = /* @__PURE__ */ __commonJSMin(((exports, module) => {
  25951. (function(e, t) {
  25952. "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_dayOfYear = t();
  25953. })(exports, (function() {
  25954. "use strict";
  25955. return function(e, t, n) {
  25956. t.prototype.dayOfYear = function(e) {
  25957. var t = Math.round((n(this).startOf("day") - n(this).startOf("year")) / 864e5) + 1;
  25958. return null == e ? t : this.add(e - t, "day");
  25959. };
  25960. };
  25961. }));
  25962. }));
  25963. //#endregion
  25964. //#region ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/isSameOrAfter.js
  25965. var require_isSameOrAfter = /* @__PURE__ */ __commonJSMin(((exports, module) => {
  25966. (function(e, t) {
  25967. "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_isSameOrAfter = t();
  25968. })(exports, (function() {
  25969. "use strict";
  25970. return function(e, t) {
  25971. t.prototype.isSameOrAfter = function(e, t) {
  25972. return this.isSame(e, t) || this.isAfter(e, t);
  25973. };
  25974. };
  25975. }));
  25976. }));
  25977. //#endregion
  25978. //#region ../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/isSameOrBefore.js
  25979. var require_isSameOrBefore = /* @__PURE__ */ __commonJSMin(((exports, module) => {
  25980. (function(e, i) {
  25981. "object" == typeof exports && "undefined" != typeof module ? module.exports = i() : "function" == typeof define && define.amd ? define(i) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_isSameOrBefore = i();
  25982. })(exports, (function() {
  25983. "use strict";
  25984. return function(e, i) {
  25985. i.prototype.isSameOrBefore = function(e, i) {
  25986. return this.isSame(e, i) || this.isBefore(e, i);
  25987. };
  25988. };
  25989. }));
  25990. }));
  25991. //#endregion
  25992. //#region ../../packages/components/date-picker-panel/src/props/date-picker-panel.ts
  25993. var import_advancedFormat = /* @__PURE__ */ __toESM(require_advancedFormat());
  25994. var import_weekOfYear = /* @__PURE__ */ __toESM(require_weekOfYear());
  25995. var import_weekYear = /* @__PURE__ */ __toESM(require_weekYear());
  25996. var import_dayOfYear = /* @__PURE__ */ __toESM(require_dayOfYear());
  25997. var import_isSameOrAfter = /* @__PURE__ */ __toESM(require_isSameOrAfter());
  25998. var import_isSameOrBefore = /* @__PURE__ */ __toESM(require_isSameOrBefore());
  25999. const datePickerPanelProps = buildProps({
  26000. valueFormat: String,
  26001. dateFormat: String,
  26002. timeFormat: String,
  26003. disabled: {
  26004. type: Boolean,
  26005. default: void 0
  26006. },
  26007. modelValue: {
  26008. type: definePropType([
  26009. Date,
  26010. Array,
  26011. String,
  26012. Number
  26013. ]),
  26014. default: ""
  26015. },
  26016. defaultValue: { type: definePropType([Date, Array]) },
  26017. defaultTime: { type: definePropType([Date, Array]) },
  26018. isRange: Boolean,
  26019. ...disabledTimeListsProps,
  26020. disabledDate: { type: Function },
  26021. cellClassName: { type: Function },
  26022. shortcuts: {
  26023. type: Array,
  26024. default: () => []
  26025. },
  26026. arrowControl: Boolean,
  26027. unlinkPanels: Boolean,
  26028. showNow: {
  26029. type: Boolean,
  26030. default: true
  26031. },
  26032. showConfirm: Boolean,
  26033. showFooter: Boolean,
  26034. showWeekNumber: Boolean,
  26035. type: {
  26036. type: definePropType(String),
  26037. default: "date"
  26038. },
  26039. clearable: {
  26040. type: Boolean,
  26041. default: true
  26042. },
  26043. border: {
  26044. type: Boolean,
  26045. default: true
  26046. },
  26047. editable: {
  26048. type: Boolean,
  26049. default: true
  26050. }
  26051. });
  26052. //#endregion
  26053. //#region ../../packages/components/date-picker-panel/src/constants.ts
  26054. const ROOT_PICKER_INJECTION_KEY = Symbol("rootPickerContextKey");
  26055. const ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY = "ElIsDefaultFormat";
  26056. //#endregion
  26057. //#region ../../packages/components/date-picker-panel/src/props/shared.ts
  26058. const selectionModes = [
  26059. "date",
  26060. "dates",
  26061. "year",
  26062. "years",
  26063. "month",
  26064. "months",
  26065. "week",
  26066. "range"
  26067. ];
  26068. const datePickerSharedProps = buildProps({
  26069. cellClassName: { type: definePropType(Function) },
  26070. disabledDate: { type: definePropType(Function) },
  26071. date: {
  26072. type: definePropType(Object),
  26073. required: true
  26074. },
  26075. minDate: { type: definePropType(Object) },
  26076. maxDate: { type: definePropType(Object) },
  26077. parsedValue: { type: definePropType([Object, Array]) },
  26078. rangeState: {
  26079. type: definePropType(Object),
  26080. default: () => ({
  26081. endDate: null,
  26082. selecting: false
  26083. })
  26084. },
  26085. disabled: Boolean
  26086. });
  26087. const panelSharedProps = buildProps({
  26088. type: {
  26089. type: definePropType(String),
  26090. required: true,
  26091. values: datePickTypes
  26092. },
  26093. dateFormat: String,
  26094. timeFormat: String,
  26095. showNow: {
  26096. type: Boolean,
  26097. default: true
  26098. },
  26099. showConfirm: Boolean,
  26100. showFooter: {
  26101. type: Boolean,
  26102. default: true
  26103. },
  26104. showWeekNumber: Boolean,
  26105. border: Boolean,
  26106. disabled: Boolean,
  26107. editable: {
  26108. type: Boolean,
  26109. default: true
  26110. }
  26111. });
  26112. const panelRangeSharedProps = buildProps({
  26113. unlinkPanels: Boolean,
  26114. visible: {
  26115. type: Boolean,
  26116. default: true
  26117. },
  26118. showConfirm: Boolean,
  26119. showFooter: {
  26120. type: Boolean,
  26121. default: true
  26122. },
  26123. border: Boolean,
  26124. disabled: Boolean,
  26125. parsedValue: { type: definePropType(Array) },
  26126. singlePanel: Boolean
  26127. });
  26128. const selectionModeWithDefault = (mode) => {
  26129. return {
  26130. type: String,
  26131. values: selectionModes,
  26132. default: mode
  26133. };
  26134. };
  26135. //#endregion
  26136. //#region ../../packages/components/date-picker-panel/src/props/panel-date-pick.ts
  26137. const panelDatePickProps = buildProps({
  26138. ...panelSharedProps,
  26139. parsedValue: { type: definePropType([Object, Array]) },
  26140. visible: {
  26141. type: Boolean,
  26142. default: true
  26143. },
  26144. format: {
  26145. type: String,
  26146. default: ""
  26147. }
  26148. });
  26149. //#endregion
  26150. //#region ../../packages/components/date-picker-panel/src/utils.ts
  26151. const isValidRange = (range) => {
  26152. if (!isArray$1(range)) return false;
  26153. const [left, right] = range;
  26154. return import_dayjs_min.default.isDayjs(left) && import_dayjs_min.default.isDayjs(right) && (0, import_dayjs_min.default)(left).isValid() && (0, import_dayjs_min.default)(right).isValid() && left.isSameOrBefore(right);
  26155. };
  26156. const getDefaultValue = (defaultValue, { lang, step = 1, unit, unlinkPanels }) => {
  26157. let start;
  26158. if (isArray$1(defaultValue)) {
  26159. let [left, right] = defaultValue.map((d) => (0, import_dayjs_min.default)(d).locale(lang));
  26160. if (!unlinkPanels) right = left.add(step, unit);
  26161. return [left, right];
  26162. } else if (defaultValue) start = (0, import_dayjs_min.default)(defaultValue);
  26163. else start = (0, import_dayjs_min.default)();
  26164. start = start.locale(lang);
  26165. return [start, start.add(step, unit)];
  26166. };
  26167. const buildPickerTable = (dimension, rows, { columnIndexOffset, startDate, nextEndDate, now, unit, relativeDateGetter, setCellMetadata, setRowMetadata }) => {
  26168. for (let rowIndex = 0; rowIndex < dimension.row; rowIndex++) {
  26169. const row = rows[rowIndex];
  26170. for (let columnIndex = 0; columnIndex < dimension.column; columnIndex++) {
  26171. let cell = row[columnIndex + columnIndexOffset];
  26172. if (!cell) cell = {
  26173. row: rowIndex,
  26174. column: columnIndex,
  26175. type: "normal",
  26176. inRange: false,
  26177. start: false,
  26178. end: false
  26179. };
  26180. const nextStartDate = relativeDateGetter(rowIndex * dimension.column + columnIndex);
  26181. cell.dayjs = nextStartDate;
  26182. cell.date = nextStartDate.toDate();
  26183. cell.timestamp = nextStartDate.valueOf();
  26184. cell.type = "normal";
  26185. cell.inRange = !!(startDate && nextStartDate.isSameOrAfter(startDate, unit) && nextEndDate && nextStartDate.isSameOrBefore(nextEndDate, unit)) || !!(startDate && nextStartDate.isSameOrBefore(startDate, unit) && nextEndDate && nextStartDate.isSameOrAfter(nextEndDate, unit));
  26186. if (startDate?.isSameOrAfter(nextEndDate)) {
  26187. cell.start = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit);
  26188. cell.end = startDate && nextStartDate.isSame(startDate, unit);
  26189. } else {
  26190. cell.start = !!startDate && nextStartDate.isSame(startDate, unit);
  26191. cell.end = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit);
  26192. }
  26193. if (nextStartDate.isSame(now, unit)) cell.type = "today";
  26194. setCellMetadata?.(cell, {
  26195. rowIndex,
  26196. columnIndex
  26197. });
  26198. row[columnIndex + columnIndexOffset] = cell;
  26199. }
  26200. setRowMetadata?.(row);
  26201. }
  26202. };
  26203. const datesInMonth = (date, year, month, lang) => {
  26204. const firstDay = (0, import_dayjs_min.default)().locale(lang).startOf("month").month(month).year(year).hour(date.hour()).minute(date.minute()).second(date.second());
  26205. return rangeArr(firstDay.daysInMonth()).map((n) => firstDay.add(n, "day").toDate());
  26206. };
  26207. const getValidDateOfMonth = (date, year, month, lang, disabledDate) => {
  26208. const _value = (0, import_dayjs_min.default)().year(year).month(month).startOf("month").hour(date.hour()).minute(date.minute()).second(date.second());
  26209. const _date = datesInMonth(date, year, month, lang).find((date) => {
  26210. return !disabledDate?.(date);
  26211. });
  26212. if (_date) return (0, import_dayjs_min.default)(_date).locale(lang);
  26213. return _value.locale(lang);
  26214. };
  26215. const getValidDateOfYear = (value, lang, disabledDate) => {
  26216. const year = value.year();
  26217. if (!disabledDate?.(value.toDate())) return value.locale(lang);
  26218. const month = value.month();
  26219. if (!datesInMonth(value, year, month, lang).every(disabledDate)) return getValidDateOfMonth(value, year, month, lang, disabledDate);
  26220. for (let i = 0; i < 12; i++) if (!datesInMonth(value, year, i, lang).every(disabledDate)) return getValidDateOfMonth(value, year, i, lang, disabledDate);
  26221. return value;
  26222. };
  26223. const correctlyParseUserInput = (value, format, lang, defaultFormat) => {
  26224. if (isArray$1(value)) return value.map((v) => correctlyParseUserInput(v, format, lang, defaultFormat));
  26225. if (isString(value)) {
  26226. const dayjsValue = defaultFormat?.value ? (0, import_dayjs_min.default)(value) : (0, import_dayjs_min.default)(value, format);
  26227. if (!dayjsValue.isValid()) return dayjsValue;
  26228. }
  26229. return (0, import_dayjs_min.default)(value, format).locale(lang);
  26230. };
  26231. //#endregion
  26232. //#region ../../packages/components/date-picker-panel/src/props/basic-date-table.ts
  26233. const basicDateTableProps = buildProps({
  26234. ...datePickerSharedProps,
  26235. showWeekNumber: Boolean,
  26236. selectionMode: selectionModeWithDefault("date")
  26237. });
  26238. const basicDateTableEmits = [
  26239. "changerange",
  26240. "pick",
  26241. "select"
  26242. ];
  26243. //#endregion
  26244. //#region ../../packages/components/date-picker-panel/src/composables/use-basic-date-table.ts
  26245. const isNormalDay = (type = "") => {
  26246. return ["normal", "today"].includes(type);
  26247. };
  26248. const useBasicDateTable = (props, emit) => {
  26249. const { lang } = useLocale();
  26250. const tbodyRef = (0, vue.ref)();
  26251. const currentCellRef = (0, vue.ref)();
  26252. const lastRow = (0, vue.ref)();
  26253. const lastColumn = (0, vue.ref)();
  26254. const tableRows = (0, vue.ref)([
  26255. [],
  26256. [],
  26257. [],
  26258. [],
  26259. [],
  26260. []
  26261. ]);
  26262. let focusWithClick = false;
  26263. const firstDayOfWeek = props.date.$locale().weekStart || 7;
  26264. const WEEKS_CONSTANT = props.date.locale("en").localeData().weekdaysShort().map((_) => _.toLowerCase());
  26265. const offsetDay = (0, vue.computed)(() => {
  26266. return firstDayOfWeek > 3 ? 7 - firstDayOfWeek : -firstDayOfWeek;
  26267. });
  26268. const startDate = (0, vue.computed)(() => {
  26269. const startDayOfMonth = props.date.startOf("month");
  26270. return startDayOfMonth.subtract(startDayOfMonth.day() || 7, "day");
  26271. });
  26272. const WEEKS = (0, vue.computed)(() => {
  26273. return WEEKS_CONSTANT.concat(WEEKS_CONSTANT).slice(firstDayOfWeek, firstDayOfWeek + 7);
  26274. });
  26275. const hasCurrent = (0, vue.computed)(() => {
  26276. return flatten((0, vue.unref)(rows)).some((row) => {
  26277. return row.isCurrent;
  26278. });
  26279. });
  26280. const days = (0, vue.computed)(() => {
  26281. const startOfMonth = props.date.startOf("month");
  26282. return {
  26283. startOfMonthDay: startOfMonth.day() || 7,
  26284. dateCountOfMonth: startOfMonth.daysInMonth(),
  26285. dateCountOfLastMonth: startOfMonth.subtract(1, "month").daysInMonth()
  26286. };
  26287. });
  26288. const selectedDate = (0, vue.computed)(() => {
  26289. return props.selectionMode === "dates" ? castArray(props.parsedValue) : [];
  26290. });
  26291. const setDateText = (cell, { count, rowIndex, columnIndex }) => {
  26292. const { startOfMonthDay, dateCountOfMonth, dateCountOfLastMonth } = (0, vue.unref)(days);
  26293. const offset = (0, vue.unref)(offsetDay);
  26294. if (rowIndex >= 0 && rowIndex <= 1) {
  26295. const numberOfDaysFromPreviousMonth = startOfMonthDay + offset < 0 ? 7 + startOfMonthDay + offset : startOfMonthDay + offset;
  26296. if (columnIndex + rowIndex * 7 >= numberOfDaysFromPreviousMonth) {
  26297. cell.text = count;
  26298. return true;
  26299. } else {
  26300. cell.text = dateCountOfLastMonth - (numberOfDaysFromPreviousMonth - columnIndex % 7) + 1 + rowIndex * 7;
  26301. cell.type = "prev-month";
  26302. }
  26303. } else {
  26304. if (count <= dateCountOfMonth) cell.text = count;
  26305. else {
  26306. cell.text = count - dateCountOfMonth;
  26307. cell.type = "next-month";
  26308. }
  26309. return true;
  26310. }
  26311. return false;
  26312. };
  26313. const setCellMetadata = (cell, { columnIndex, rowIndex }, count) => {
  26314. const { disabledDate, cellClassName } = props;
  26315. const _selectedDate = (0, vue.unref)(selectedDate);
  26316. const shouldIncrement = setDateText(cell, {
  26317. count,
  26318. rowIndex,
  26319. columnIndex
  26320. });
  26321. const cellDate = cell.dayjs.toDate();
  26322. cell.selected = _selectedDate.find((d) => d.isSame(cell.dayjs, "day"));
  26323. cell.isSelected = !!cell.selected;
  26324. cell.isCurrent = isCurrent(cell);
  26325. cell.disabled = disabledDate?.(cellDate);
  26326. cell.customClass = cellClassName?.(cellDate);
  26327. return shouldIncrement;
  26328. };
  26329. const setRowMetadata = (row) => {
  26330. if (props.selectionMode === "week") {
  26331. const [start, end] = props.showWeekNumber ? [1, 7] : [0, 6];
  26332. const isActive = isWeekActive(row[start + 1]);
  26333. row[start].inRange = isActive;
  26334. row[start].start = isActive;
  26335. row[end].inRange = isActive;
  26336. row[end].end = isActive;
  26337. }
  26338. };
  26339. const rows = (0, vue.computed)(() => {
  26340. const { minDate, maxDate, rangeState, showWeekNumber } = props;
  26341. const offset = (0, vue.unref)(offsetDay);
  26342. const rows_ = (0, vue.unref)(tableRows);
  26343. const dateUnit = "day";
  26344. let count = 1;
  26345. buildPickerTable({
  26346. row: 6,
  26347. column: 7
  26348. }, rows_, {
  26349. startDate: minDate,
  26350. columnIndexOffset: showWeekNumber ? 1 : 0,
  26351. nextEndDate: rangeState.endDate || maxDate || rangeState.selecting && minDate || null,
  26352. now: (0, import_dayjs_min.default)().locale((0, vue.unref)(lang)).startOf(dateUnit),
  26353. unit: dateUnit,
  26354. relativeDateGetter: (idx) => (0, vue.unref)(startDate).add(idx - offset, dateUnit),
  26355. setCellMetadata: (...args) => {
  26356. if (setCellMetadata(...args, count)) count += 1;
  26357. },
  26358. setRowMetadata
  26359. });
  26360. if (showWeekNumber) {
  26361. for (let rowIndex = 0; rowIndex < 6; rowIndex++) if (rows_[rowIndex][1].dayjs) rows_[rowIndex][0] = {
  26362. type: "week",
  26363. text: rows_[rowIndex][1].dayjs.week()
  26364. };
  26365. }
  26366. return rows_;
  26367. });
  26368. (0, vue.watch)(() => props.date, async () => {
  26369. if ((0, vue.unref)(tbodyRef)?.contains(document.activeElement)) {
  26370. await (0, vue.nextTick)();
  26371. await focus();
  26372. }
  26373. });
  26374. const focus = async () => (0, vue.unref)(currentCellRef)?.focus();
  26375. const isCurrent = (cell) => {
  26376. return props.selectionMode === "date" && isNormalDay(cell.type) && cellMatchesDate(cell, props.parsedValue);
  26377. };
  26378. const cellMatchesDate = (cell, date) => {
  26379. if (!date) return false;
  26380. return (0, import_dayjs_min.default)(date).locale((0, vue.unref)(lang)).isSame(props.date.date(Number(cell.text)), "day");
  26381. };
  26382. const getDateOfCell = (row, column) => {
  26383. const startOfMonthDay = (0, vue.unref)(days).startOfMonthDay;
  26384. const offset = (0, vue.unref)(offsetDay);
  26385. const numberOfDaysFromPreviousMonth = startOfMonthDay + offset < 0 ? 7 + startOfMonthDay + offset : startOfMonthDay + offset;
  26386. const offsetFromStart = row * 7 + (column - (props.showWeekNumber ? 1 : 0));
  26387. return props.date.startOf("month").subtract(numberOfDaysFromPreviousMonth, "day").add(offsetFromStart, "day");
  26388. };
  26389. const handleMouseMove = (event) => {
  26390. if (!props.rangeState.selecting) return;
  26391. let target = event.target;
  26392. if (target.tagName === "SPAN") target = target.parentNode?.parentNode;
  26393. if (target.tagName === "DIV") target = target.parentNode;
  26394. if (target.tagName !== "TD") return;
  26395. const row = target.parentNode.rowIndex - 1;
  26396. const column = target.cellIndex;
  26397. if ((0, vue.unref)(rows)[row][column].disabled) return;
  26398. if (row !== (0, vue.unref)(lastRow) || column !== (0, vue.unref)(lastColumn)) {
  26399. lastRow.value = row;
  26400. lastColumn.value = column;
  26401. emit("changerange", {
  26402. selecting: true,
  26403. endDate: getDateOfCell(row, column)
  26404. });
  26405. }
  26406. };
  26407. const isSelectedCell = (cell) => {
  26408. return !(0, vue.unref)(hasCurrent) && cell?.text === 1 && isNormalDay(cell.type) || cell.isCurrent;
  26409. };
  26410. const handleFocus = (event) => {
  26411. if (focusWithClick || (0, vue.unref)(hasCurrent) || props.selectionMode !== "date") return;
  26412. handlePickDate(event, true);
  26413. };
  26414. const handleMouseDown = (event) => {
  26415. if (!event.target.closest("td")) return;
  26416. focusWithClick = true;
  26417. };
  26418. const handleMouseUp = (event) => {
  26419. if (!event.target.closest("td")) return;
  26420. focusWithClick = false;
  26421. };
  26422. const handleRangePick = (newDate) => {
  26423. if (!props.rangeState.selecting || !props.minDate) {
  26424. emit("pick", {
  26425. minDate: newDate,
  26426. maxDate: null
  26427. });
  26428. emit("select", true);
  26429. } else {
  26430. if (newDate >= props.minDate) emit("pick", {
  26431. minDate: props.minDate,
  26432. maxDate: newDate
  26433. });
  26434. else emit("pick", {
  26435. minDate: newDate,
  26436. maxDate: props.minDate
  26437. });
  26438. emit("select", false);
  26439. }
  26440. };
  26441. const handleWeekPick = (newDate) => {
  26442. const weekNumber = newDate.week();
  26443. const value = `${newDate.year()}w${weekNumber}`;
  26444. emit("pick", {
  26445. year: newDate.year(),
  26446. week: weekNumber,
  26447. value,
  26448. date: newDate.startOf("week")
  26449. });
  26450. };
  26451. const handleDatesPick = (newDate, selected) => {
  26452. emit("pick", selected ? castArray(props.parsedValue).filter((d) => d?.valueOf() !== newDate.valueOf()) : castArray(props.parsedValue).concat([newDate]));
  26453. };
  26454. const handlePickDate = (event, isKeyboardMovement = false) => {
  26455. if (props.disabled) return;
  26456. const target = event.target.closest("td");
  26457. if (!target) return;
  26458. const row = target.parentNode.rowIndex - 1;
  26459. const column = target.cellIndex;
  26460. const cell = (0, vue.unref)(rows)[row][column];
  26461. if (cell.disabled || cell.type === "week") return;
  26462. const newDate = getDateOfCell(row, column);
  26463. switch (props.selectionMode) {
  26464. case "range":
  26465. handleRangePick(newDate);
  26466. break;
  26467. case "date":
  26468. emit("pick", newDate, isKeyboardMovement);
  26469. break;
  26470. case "week":
  26471. handleWeekPick(newDate);
  26472. break;
  26473. case "dates":
  26474. handleDatesPick(newDate, !!cell.selected);
  26475. break;
  26476. default: break;
  26477. }
  26478. };
  26479. const isWeekActive = (cell) => {
  26480. if (props.selectionMode !== "week") return false;
  26481. let newDate = props.date.startOf("day");
  26482. if (cell.type === "prev-month") newDate = newDate.subtract(1, "month");
  26483. if (cell.type === "next-month") newDate = newDate.add(1, "month");
  26484. newDate = newDate.date(Number.parseInt(cell.text, 10));
  26485. if (props.parsedValue && !isArray$1(props.parsedValue)) {
  26486. const dayOffset = (props.parsedValue.day() - firstDayOfWeek + 7) % 7 - 1;
  26487. return props.parsedValue.subtract(dayOffset, "day").isSame(newDate, "day");
  26488. }
  26489. return false;
  26490. };
  26491. return {
  26492. WEEKS,
  26493. rows,
  26494. tbodyRef,
  26495. currentCellRef,
  26496. focus,
  26497. isCurrent,
  26498. isWeekActive,
  26499. isSelectedCell,
  26500. handlePickDate,
  26501. handleMouseUp,
  26502. handleMouseDown,
  26503. handleMouseMove,
  26504. handleFocus
  26505. };
  26506. };
  26507. const useBasicDateTableDOM = (props, { isCurrent, isWeekActive }) => {
  26508. const ns = useNamespace("date-table");
  26509. const { t } = useLocale();
  26510. const tableKls = (0, vue.computed)(() => [ns.b(), ns.is("week-mode", props.selectionMode === "week" && !props.disabled)]);
  26511. const tableLabel = (0, vue.computed)(() => t("el.datepicker.dateTablePrompt"));
  26512. const getCellClasses = (cell) => {
  26513. const classes = [];
  26514. if (isNormalDay(cell.type) && !cell.disabled) {
  26515. classes.push("available");
  26516. if (cell.type === "today") classes.push("today");
  26517. } else classes.push(cell.type);
  26518. if (isCurrent(cell)) classes.push("current");
  26519. if (cell.inRange && (isNormalDay(cell.type) || props.selectionMode === "week")) {
  26520. classes.push("in-range");
  26521. if (cell.start) classes.push("start-date");
  26522. if (cell.end) classes.push("end-date");
  26523. }
  26524. if (cell.disabled || props.disabled) classes.push("disabled");
  26525. if (cell.selected) classes.push("selected");
  26526. if (cell.customClass) classes.push(cell.customClass);
  26527. return classes.join(" ");
  26528. };
  26529. const getRowKls = (cell) => [ns.e("row"), { current: isWeekActive(cell) }];
  26530. return {
  26531. tableKls,
  26532. tableLabel,
  26533. weekHeaderClass: ns.e("week-header"),
  26534. getCellClasses,
  26535. getRowKls,
  26536. t
  26537. };
  26538. };
  26539. //#endregion
  26540. //#region ../../packages/components/date-picker-panel/src/props/basic-cell.ts
  26541. const basicCellProps = buildProps({ cell: { type: definePropType(Object) } });
  26542. //#endregion
  26543. //#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-cell-render.tsx
  26544. var basic_cell_render_default = /* @__PURE__ */ (0, vue.defineComponent)({
  26545. name: "ElDatePickerCell",
  26546. props: basicCellProps,
  26547. setup(props) {
  26548. const ns = useNamespace("date-table-cell");
  26549. const { slots } = (0, vue.inject)(ROOT_PICKER_INJECTION_KEY);
  26550. return () => {
  26551. const { cell } = props;
  26552. return (0, vue.renderSlot)(slots, "default", { ...cell }, () => [(0, vue.createVNode)("div", { "class": ns.b() }, [(0, vue.createVNode)("span", { "class": ns.e("text") }, [cell?.renderText ?? cell?.text])])]);
  26553. };
  26554. }
  26555. });
  26556. //#endregion
  26557. //#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-date-table.vue?vue&type=script&setup=true&lang.ts
  26558. const _hoisted_1$51 = ["aria-label"];
  26559. const _hoisted_2$33 = ["aria-label"];
  26560. const _hoisted_3$15 = [
  26561. "aria-current",
  26562. "aria-selected",
  26563. "tabindex",
  26564. "aria-disabled"
  26565. ];
  26566. var basic_date_table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  26567. __name: "basic-date-table",
  26568. props: basicDateTableProps,
  26569. emits: basicDateTableEmits,
  26570. setup(__props, { expose: __expose, emit: __emit }) {
  26571. const props = __props;
  26572. const { WEEKS, rows, tbodyRef, currentCellRef, focus, isCurrent, isWeekActive, isSelectedCell, handlePickDate, handleMouseUp, handleMouseDown, handleMouseMove, handleFocus } = useBasicDateTable(props, __emit);
  26573. const { tableLabel, tableKls, getCellClasses, getRowKls, weekHeaderClass, t } = useBasicDateTableDOM(props, {
  26574. isCurrent,
  26575. isWeekActive
  26576. });
  26577. let isUnmounting = false;
  26578. (0, vue.onBeforeUnmount)(() => {
  26579. isUnmounting = true;
  26580. });
  26581. __expose({ focus });
  26582. return (_ctx, _cache) => {
  26583. return (0, vue.openBlock)(), (0, vue.createElementBlock)("table", {
  26584. "aria-label": (0, vue.unref)(tableLabel),
  26585. class: (0, vue.normalizeClass)((0, vue.unref)(tableKls)),
  26586. cellspacing: "0",
  26587. cellpadding: "0",
  26588. role: "grid",
  26589. onClick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handlePickDate) && (0, vue.unref)(handlePickDate)(...args)),
  26590. onMousemove: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(handleMouseMove) && (0, vue.unref)(handleMouseMove)(...args)),
  26591. onMousedown: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(handleMouseDown) && (0, vue.unref)(handleMouseDown)(...args)),
  26592. onMouseup: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleMouseUp) && (0, vue.unref)(handleMouseUp)(...args))
  26593. }, [(0, vue.createElementVNode)("tbody", {
  26594. ref_key: "tbodyRef",
  26595. ref: tbodyRef
  26596. }, [(0, vue.createElementVNode)("tr", null, [_ctx.showWeekNumber ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("th", {
  26597. key: 0,
  26598. scope: "col",
  26599. class: (0, vue.normalizeClass)((0, vue.unref)(weekHeaderClass))
  26600. }, null, 2)) : (0, vue.createCommentVNode)("v-if", true), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(WEEKS), (week, key) => {
  26601. return (0, vue.openBlock)(), (0, vue.createElementBlock)("th", {
  26602. key,
  26603. "aria-label": (0, vue.unref)(t)("el.datepicker.weeksFull." + week),
  26604. scope: "col"
  26605. }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.weeks." + week)), 9, _hoisted_2$33);
  26606. }), 128))]), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(rows), (row, rowKey) => {
  26607. return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", {
  26608. key: rowKey,
  26609. class: (0, vue.normalizeClass)((0, vue.unref)(getRowKls)(_ctx.showWeekNumber ? row[2] : row[1]))
  26610. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(row, (cell, columnKey) => {
  26611. return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
  26612. key: `${rowKey}.${columnKey}`,
  26613. ref_for: true,
  26614. ref: (el) => !(0, vue.unref)(isUnmounting) && (0, vue.unref)(isSelectedCell)(cell) && (currentCellRef.value = el),
  26615. class: (0, vue.normalizeClass)((0, vue.unref)(getCellClasses)(cell)),
  26616. "aria-current": cell.isCurrent ? "date" : void 0,
  26617. "aria-selected": cell.isCurrent,
  26618. tabindex: _ctx.disabled ? void 0 : (0, vue.unref)(isSelectedCell)(cell) ? 0 : -1,
  26619. "aria-disabled": _ctx.disabled,
  26620. onFocus: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleFocus) && (0, vue.unref)(handleFocus)(...args))
  26621. }, [(0, vue.createVNode)((0, vue.unref)(basic_cell_render_default), { cell }, null, 8, ["cell"])], 42, _hoisted_3$15);
  26622. }), 128))], 2);
  26623. }), 128))], 512)], 42, _hoisted_1$51);
  26624. };
  26625. }
  26626. });
  26627. //#endregion
  26628. //#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-date-table.vue
  26629. var basic_date_table_default = basic_date_table_vue_vue_type_script_setup_true_lang_default;
  26630. //#endregion
  26631. //#region ../../packages/components/date-picker-panel/src/props/basic-month-table.ts
  26632. const basicMonthTableProps = buildProps({
  26633. ...datePickerSharedProps,
  26634. selectionMode: selectionModeWithDefault("month")
  26635. });
  26636. //#endregion
  26637. //#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-month-table.vue?vue&type=script&setup=true&lang.ts
  26638. const _hoisted_1$50 = ["aria-label"];
  26639. const _hoisted_2$32 = [
  26640. "aria-selected",
  26641. "aria-label",
  26642. "tabindex",
  26643. "onKeydown"
  26644. ];
  26645. var basic_month_table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  26646. __name: "basic-month-table",
  26647. props: basicMonthTableProps,
  26648. emits: [
  26649. "changerange",
  26650. "pick",
  26651. "select"
  26652. ],
  26653. setup(__props, { expose: __expose, emit: __emit }) {
  26654. const props = __props;
  26655. const emit = __emit;
  26656. const ns = useNamespace("month-table");
  26657. const { t, lang } = useLocale();
  26658. const tbodyRef = (0, vue.ref)();
  26659. const currentCellRef = (0, vue.ref)();
  26660. const months = (0, vue.ref)(props.date.locale("en").localeData().monthsShort().map((_) => _.toLowerCase()));
  26661. const tableRows = (0, vue.ref)([
  26662. [],
  26663. [],
  26664. []
  26665. ]);
  26666. const lastRow = (0, vue.ref)();
  26667. const lastColumn = (0, vue.ref)();
  26668. const rows = (0, vue.computed)(() => {
  26669. const rows = tableRows.value;
  26670. const now = (0, import_dayjs_min.default)().locale(lang.value).startOf("month");
  26671. for (let i = 0; i < 3; i++) {
  26672. const row = rows[i];
  26673. for (let j = 0; j < 4; j++) {
  26674. const cell = row[j] ||= {
  26675. row: i,
  26676. column: j,
  26677. type: "normal",
  26678. inRange: false,
  26679. start: false,
  26680. end: false,
  26681. text: -1,
  26682. disabled: false,
  26683. isSelected: false,
  26684. customClass: void 0,
  26685. date: void 0,
  26686. dayjs: void 0,
  26687. isCurrent: void 0,
  26688. selected: void 0,
  26689. renderText: void 0,
  26690. timestamp: void 0
  26691. };
  26692. cell.type = "normal";
  26693. const index = i * 4 + j;
  26694. const calTime = props.date.startOf("year").month(index);
  26695. const calEndDate = props.rangeState.endDate || props.maxDate || props.rangeState.selecting && props.minDate || null;
  26696. cell.inRange = !!(props.minDate && calTime.isSameOrAfter(props.minDate, "month") && calEndDate && calTime.isSameOrBefore(calEndDate, "month")) || !!(props.minDate && calTime.isSameOrBefore(props.minDate, "month") && calEndDate && calTime.isSameOrAfter(calEndDate, "month"));
  26697. if (props.minDate?.isSameOrAfter(calEndDate)) {
  26698. cell.start = !!(calEndDate && calTime.isSame(calEndDate, "month"));
  26699. cell.end = props.minDate && calTime.isSame(props.minDate, "month");
  26700. } else {
  26701. cell.start = !!(props.minDate && calTime.isSame(props.minDate, "month"));
  26702. cell.end = !!(calEndDate && calTime.isSame(calEndDate, "month"));
  26703. }
  26704. if (now.isSame(calTime)) cell.type = "today";
  26705. const cellDate = calTime.toDate();
  26706. cell.text = index;
  26707. cell.disabled = props.disabledDate?.(cellDate) || false;
  26708. cell.date = cellDate;
  26709. cell.customClass = props.cellClassName?.(cellDate);
  26710. cell.dayjs = calTime;
  26711. cell.timestamp = calTime.valueOf();
  26712. cell.isSelected = isSelectedCell(cell);
  26713. }
  26714. }
  26715. return rows;
  26716. });
  26717. const focus = () => {
  26718. currentCellRef.value?.focus();
  26719. };
  26720. const getCellStyle = (cell) => {
  26721. const style = {};
  26722. const year = props.date.year();
  26723. const today = /* @__PURE__ */ new Date();
  26724. const month = cell.text;
  26725. style.disabled = props.disabled || (props.disabledDate ? datesInMonth(props.date, year, month, lang.value).every(props.disabledDate) : false);
  26726. style.current = castArray(props.parsedValue).some((date) => import_dayjs_min.default.isDayjs(date) && date.year() === year && date.month() === month);
  26727. style.today = today.getFullYear() === year && today.getMonth() === month;
  26728. if (cell.customClass) style[cell.customClass] = true;
  26729. if (cell.inRange) {
  26730. style["in-range"] = true;
  26731. if (cell.start) style["start-date"] = true;
  26732. if (cell.end) style["end-date"] = true;
  26733. }
  26734. return style;
  26735. };
  26736. const isSelectedCell = (cell) => {
  26737. const year = props.date.year();
  26738. const month = cell.text;
  26739. return castArray(props.date).some((date) => date.year() === year && date.month() === month);
  26740. };
  26741. const handleMouseMove = (event) => {
  26742. if (!props.rangeState.selecting) return;
  26743. let target = event.target;
  26744. if (target.tagName === "SPAN") target = target.parentNode?.parentNode;
  26745. if (target.tagName === "DIV") target = target.parentNode;
  26746. if (target.tagName !== "TD") return;
  26747. const row = target.parentNode.rowIndex;
  26748. const column = target.cellIndex;
  26749. if (rows.value[row][column].disabled) return;
  26750. if (row !== lastRow.value || column !== lastColumn.value) {
  26751. lastRow.value = row;
  26752. lastColumn.value = column;
  26753. emit("changerange", {
  26754. selecting: true,
  26755. endDate: props.date.startOf("year").month(row * 4 + column)
  26756. });
  26757. }
  26758. };
  26759. const handleMonthTableClick = (event) => {
  26760. if (props.disabled) return;
  26761. const target = event.target?.closest("td");
  26762. if (target?.tagName !== "TD") return;
  26763. if (hasClass(target, "disabled")) return;
  26764. const column = target.cellIndex;
  26765. const month = target.parentNode.rowIndex * 4 + column;
  26766. const newDate = props.date.startOf("year").month(month);
  26767. if (props.selectionMode === "months") {
  26768. if (event.type === "keydown") {
  26769. emit("pick", castArray(props.parsedValue), false);
  26770. return;
  26771. }
  26772. const newMonth = getValidDateOfMonth(props.date, props.date.year(), month, lang.value, props.disabledDate);
  26773. emit("pick", hasClass(target, "current") ? castArray(props.parsedValue).filter((d) => d?.year() !== newMonth.year() || d?.month() !== newMonth.month()) : castArray(props.parsedValue).concat([(0, import_dayjs_min.default)(newMonth)]));
  26774. } else if (props.selectionMode === "range") if (!props.rangeState.selecting) {
  26775. emit("pick", {
  26776. minDate: newDate,
  26777. maxDate: null
  26778. });
  26779. emit("select", true);
  26780. } else {
  26781. if (props.minDate && newDate >= props.minDate) emit("pick", {
  26782. minDate: props.minDate,
  26783. maxDate: newDate
  26784. });
  26785. else emit("pick", {
  26786. minDate: newDate,
  26787. maxDate: props.minDate
  26788. });
  26789. emit("select", false);
  26790. }
  26791. else emit("pick", month);
  26792. };
  26793. (0, vue.watch)(() => props.date, async () => {
  26794. if (tbodyRef.value?.contains(document.activeElement)) {
  26795. await (0, vue.nextTick)();
  26796. currentCellRef.value?.focus();
  26797. }
  26798. });
  26799. __expose({ focus });
  26800. return (_ctx, _cache) => {
  26801. return (0, vue.openBlock)(), (0, vue.createElementBlock)("table", {
  26802. role: "grid",
  26803. "aria-label": (0, vue.unref)(t)("el.datepicker.monthTablePrompt"),
  26804. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  26805. onClick: handleMonthTableClick,
  26806. onMousemove: handleMouseMove
  26807. }, [(0, vue.createElementVNode)("tbody", {
  26808. ref_key: "tbodyRef",
  26809. ref: tbodyRef
  26810. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(rows.value, (row, key) => {
  26811. return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", { key }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(row, (cell, key_) => {
  26812. return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
  26813. key: key_,
  26814. ref_for: true,
  26815. ref: (el) => cell.isSelected && (currentCellRef.value = el),
  26816. class: (0, vue.normalizeClass)(getCellStyle(cell)),
  26817. "aria-selected": !!cell.isSelected,
  26818. "aria-label": (0, vue.unref)(t)(`el.datepicker.month${+cell.text + 1}`),
  26819. tabindex: cell.isSelected ? 0 : -1,
  26820. onKeydown: [(0, vue.withKeys)((0, vue.withModifiers)(handleMonthTableClick, ["prevent", "stop"]), ["space"]), (0, vue.withKeys)((0, vue.withModifiers)(handleMonthTableClick, ["prevent", "stop"]), ["enter"])]
  26821. }, [(0, vue.createVNode)((0, vue.unref)(basic_cell_render_default), { cell: {
  26822. ...cell,
  26823. renderText: (0, vue.unref)(t)("el.datepicker.months." + months.value[cell.text])
  26824. } }, null, 8, ["cell"])], 42, _hoisted_2$32);
  26825. }), 128))]);
  26826. }), 128))], 512)], 42, _hoisted_1$50);
  26827. };
  26828. }
  26829. });
  26830. //#endregion
  26831. //#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-month-table.vue
  26832. var basic_month_table_default = basic_month_table_vue_vue_type_script_setup_true_lang_default;
  26833. //#endregion
  26834. //#region ../../packages/components/date-picker-panel/src/props/basic-year-table.ts
  26835. const basicYearTableProps = buildProps({
  26836. ...datePickerSharedProps,
  26837. selectionMode: selectionModeWithDefault("year")
  26838. });
  26839. //#endregion
  26840. //#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-year-table.vue?vue&type=script&setup=true&lang.ts
  26841. const _hoisted_1$49 = ["aria-label"];
  26842. const _hoisted_2$31 = [
  26843. "aria-selected",
  26844. "aria-label",
  26845. "tabindex",
  26846. "onKeydown"
  26847. ];
  26848. var basic_year_table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  26849. __name: "basic-year-table",
  26850. props: basicYearTableProps,
  26851. emits: [
  26852. "changerange",
  26853. "pick",
  26854. "select"
  26855. ],
  26856. setup(__props, { expose: __expose, emit: __emit }) {
  26857. const datesInYear = (year, lang) => {
  26858. const firstDay = (0, import_dayjs_min.default)(String(year)).locale(lang).startOf("year");
  26859. return rangeArr(firstDay.endOf("year").dayOfYear()).map((n) => firstDay.add(n, "day").toDate());
  26860. };
  26861. const props = __props;
  26862. const emit = __emit;
  26863. const ns = useNamespace("year-table");
  26864. const { t, lang } = useLocale();
  26865. const tbodyRef = (0, vue.ref)();
  26866. const currentCellRef = (0, vue.ref)();
  26867. const startYear = (0, vue.computed)(() => {
  26868. return Math.floor(props.date.year() / 10) * 10;
  26869. });
  26870. const tableRows = (0, vue.ref)([
  26871. [],
  26872. [],
  26873. []
  26874. ]);
  26875. const lastRow = (0, vue.ref)();
  26876. const lastColumn = (0, vue.ref)();
  26877. const rows = (0, vue.computed)(() => {
  26878. const rows = tableRows.value;
  26879. const now = (0, import_dayjs_min.default)().locale(lang.value).startOf("year");
  26880. for (let i = 0; i < 3; i++) {
  26881. const row = rows[i];
  26882. for (let j = 0; j < 4; j++) {
  26883. if (i * 4 + j >= 10) break;
  26884. let cell = row[j];
  26885. if (!cell) cell = {
  26886. row: i,
  26887. column: j,
  26888. type: "normal",
  26889. inRange: false,
  26890. start: false,
  26891. end: false,
  26892. text: -1,
  26893. disabled: false,
  26894. isSelected: false,
  26895. customClass: void 0,
  26896. date: void 0,
  26897. dayjs: void 0,
  26898. isCurrent: void 0,
  26899. selected: void 0,
  26900. renderText: void 0,
  26901. timestamp: void 0
  26902. };
  26903. cell.type = "normal";
  26904. const index = i * 4 + j + startYear.value;
  26905. const calTime = (0, import_dayjs_min.default)().year(index);
  26906. const calEndDate = props.rangeState.endDate || props.maxDate || props.rangeState.selecting && props.minDate || null;
  26907. cell.inRange = !!(props.minDate && calTime.isSameOrAfter(props.minDate, "year") && calEndDate && calTime.isSameOrBefore(calEndDate, "year")) || !!(props.minDate && calTime.isSameOrBefore(props.minDate, "year") && calEndDate && calTime.isSameOrAfter(calEndDate, "year"));
  26908. if (props.minDate?.isSameOrAfter(calEndDate)) {
  26909. cell.start = !!(calEndDate && calTime.isSame(calEndDate, "year"));
  26910. cell.end = !!(props.minDate && calTime.isSame(props.minDate, "year"));
  26911. } else {
  26912. cell.start = !!(props.minDate && calTime.isSame(props.minDate, "year"));
  26913. cell.end = !!(calEndDate && calTime.isSame(calEndDate, "year"));
  26914. }
  26915. if (now.isSame(calTime)) cell.type = "today";
  26916. cell.text = index;
  26917. const cellDate = calTime.toDate();
  26918. cell.disabled = props.disabledDate?.(cellDate) || false;
  26919. cell.date = cellDate;
  26920. cell.customClass = props.cellClassName?.(cellDate);
  26921. cell.dayjs = calTime;
  26922. cell.timestamp = calTime.valueOf();
  26923. cell.isSelected = isSelectedCell(cell);
  26924. row[j] = cell;
  26925. }
  26926. }
  26927. return rows;
  26928. });
  26929. const focus = () => {
  26930. currentCellRef.value?.focus();
  26931. };
  26932. const getCellKls = (cell) => {
  26933. const kls = {};
  26934. const today = (0, import_dayjs_min.default)().locale(lang.value);
  26935. const year = cell.text;
  26936. kls.disabled = props.disabled || (props.disabledDate ? datesInYear(year, lang.value).every(props.disabledDate) : false);
  26937. kls.today = today.year() === year;
  26938. kls.current = castArray(props.parsedValue).some((d) => d.year() === year);
  26939. if (cell.customClass) kls[cell.customClass] = true;
  26940. if (cell.inRange) {
  26941. kls["in-range"] = true;
  26942. if (cell.start) kls["start-date"] = true;
  26943. if (cell.end) kls["end-date"] = true;
  26944. }
  26945. return kls;
  26946. };
  26947. const isSelectedCell = (cell) => {
  26948. const year = cell.text;
  26949. return castArray(props.date).some((date) => date.year() === year);
  26950. };
  26951. const handleYearTableClick = (event) => {
  26952. if (props.disabled) return;
  26953. const target = event.target?.closest("td");
  26954. if (!target || !target.textContent || hasClass(target, "disabled")) return;
  26955. const column = target.cellIndex;
  26956. const selectedYear = target.parentNode.rowIndex * 4 + column + startYear.value;
  26957. const newDate = (0, import_dayjs_min.default)().year(selectedYear);
  26958. if (props.selectionMode === "range") if (!props.rangeState.selecting) {
  26959. emit("pick", {
  26960. minDate: newDate,
  26961. maxDate: null
  26962. });
  26963. emit("select", true);
  26964. } else {
  26965. if (props.minDate && newDate >= props.minDate) emit("pick", {
  26966. minDate: props.minDate,
  26967. maxDate: newDate
  26968. });
  26969. else emit("pick", {
  26970. minDate: newDate,
  26971. maxDate: props.minDate
  26972. });
  26973. emit("select", false);
  26974. }
  26975. else if (props.selectionMode === "years") {
  26976. if (event.type === "keydown") {
  26977. emit("pick", castArray(props.parsedValue), false);
  26978. return;
  26979. }
  26980. const vaildYear = getValidDateOfYear(newDate.startOf("year"), lang.value, props.disabledDate);
  26981. emit("pick", hasClass(target, "current") ? castArray(props.parsedValue).filter((d) => d?.year() !== selectedYear) : castArray(props.parsedValue).concat([vaildYear]));
  26982. } else emit("pick", selectedYear);
  26983. };
  26984. const handleMouseMove = (event) => {
  26985. if (!props.rangeState.selecting) return;
  26986. const target = event.target?.closest("td");
  26987. if (!target) return;
  26988. const row = target.parentNode.rowIndex;
  26989. const column = target.cellIndex;
  26990. if (rows.value[row][column].disabled) return;
  26991. if (row !== lastRow.value || column !== lastColumn.value) {
  26992. lastRow.value = row;
  26993. lastColumn.value = column;
  26994. emit("changerange", {
  26995. selecting: true,
  26996. endDate: (0, import_dayjs_min.default)().year(startYear.value).add(row * 4 + column, "year")
  26997. });
  26998. }
  26999. };
  27000. (0, vue.watch)(() => props.date, async () => {
  27001. if (tbodyRef.value?.contains(document.activeElement)) {
  27002. await (0, vue.nextTick)();
  27003. currentCellRef.value?.focus();
  27004. }
  27005. });
  27006. __expose({ focus });
  27007. return (_ctx, _cache) => {
  27008. return (0, vue.openBlock)(), (0, vue.createElementBlock)("table", {
  27009. role: "grid",
  27010. "aria-label": (0, vue.unref)(t)("el.datepicker.yearTablePrompt"),
  27011. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  27012. onClick: handleYearTableClick,
  27013. onMousemove: handleMouseMove
  27014. }, [(0, vue.createElementVNode)("tbody", {
  27015. ref_key: "tbodyRef",
  27016. ref: tbodyRef
  27017. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(rows.value, (row, rowKey) => {
  27018. return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", { key: rowKey }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(row, (cell, cellKey) => {
  27019. return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
  27020. key: `${rowKey}_${cellKey}`,
  27021. ref_for: true,
  27022. ref: (el) => cell.isSelected && (currentCellRef.value = el),
  27023. class: (0, vue.normalizeClass)(["available", getCellKls(cell)]),
  27024. "aria-selected": cell.isSelected,
  27025. "aria-label": String(cell.text),
  27026. tabindex: cell.isSelected ? 0 : -1,
  27027. onKeydown: [(0, vue.withKeys)((0, vue.withModifiers)(handleYearTableClick, ["prevent", "stop"]), ["space"]), (0, vue.withKeys)((0, vue.withModifiers)(handleYearTableClick, ["prevent", "stop"]), ["enter"])]
  27028. }, [(0, vue.createVNode)((0, vue.unref)(basic_cell_render_default), { cell }, null, 8, ["cell"])], 42, _hoisted_2$31);
  27029. }), 128))]);
  27030. }), 128))], 512)], 42, _hoisted_1$49);
  27031. };
  27032. }
  27033. });
  27034. //#endregion
  27035. //#region ../../packages/components/date-picker-panel/src/date-picker-com/basic-year-table.vue
  27036. var basic_year_table_default = basic_year_table_vue_vue_type_script_setup_true_lang_default;
  27037. //#endregion
  27038. //#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-date-pick.vue?vue&type=script&setup=true&lang.ts
  27039. const _hoisted_1$48 = ["disabled", "onClick"];
  27040. const _hoisted_2$30 = ["aria-label", "disabled"];
  27041. const _hoisted_3$14 = ["aria-label", "disabled"];
  27042. const _hoisted_4$11 = ["tabindex", "aria-disabled"];
  27043. const _hoisted_5$8 = ["tabindex", "aria-disabled"];
  27044. const _hoisted_6$3 = ["aria-label", "disabled"];
  27045. const _hoisted_7$2 = ["aria-label", "disabled"];
  27046. var panel_date_pick_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  27047. __name: "panel-date-pick",
  27048. props: panelDatePickProps,
  27049. emits: [
  27050. "pick",
  27051. "set-picker-option",
  27052. "panel-change"
  27053. ],
  27054. setup(__props, { emit: __emit }) {
  27055. const timeWithinRange = (_, __, ___) => true;
  27056. const props = __props;
  27057. const contextEmit = __emit;
  27058. const ppNs = useNamespace("picker-panel");
  27059. const dpNs = useNamespace("date-picker");
  27060. const attrs = (0, vue.useAttrs)();
  27061. const slots = (0, vue.useSlots)();
  27062. const { t, lang } = useLocale();
  27063. const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
  27064. const isDefaultFormat = (0, vue.inject)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, void 0);
  27065. const { shortcuts, disabledDate, cellClassName, defaultTime } = pickerBase.props;
  27066. const defaultValue = (0, vue.toRef)(pickerBase.props, "defaultValue");
  27067. const currentViewRef = (0, vue.ref)();
  27068. const innerDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value));
  27069. const isChangeToNow = (0, vue.ref)(false);
  27070. let isShortcut = false;
  27071. const defaultTimeD = (0, vue.computed)(() => {
  27072. return (0, import_dayjs_min.default)(defaultTime).locale(lang.value);
  27073. });
  27074. const month = (0, vue.computed)(() => {
  27075. return innerDate.value.month();
  27076. });
  27077. const year = (0, vue.computed)(() => {
  27078. return innerDate.value.year();
  27079. });
  27080. const selectableRange = (0, vue.ref)([]);
  27081. const userInputDate = (0, vue.ref)(null);
  27082. const userInputTime = (0, vue.ref)(null);
  27083. const checkDateWithinRange = (date) => {
  27084. return selectableRange.value.length > 0 ? timeWithinRange(date, selectableRange.value, props.format || "HH:mm:ss") : true;
  27085. };
  27086. const formatEmit = (emitDayjs) => {
  27087. if (defaultTime && !visibleTime.value && !isChangeToNow.value && !isShortcut) return defaultTimeD.value.year(emitDayjs.year()).month(emitDayjs.month()).date(emitDayjs.date());
  27088. if (showTime.value) return emitDayjs.millisecond(0);
  27089. return emitDayjs.startOf("day");
  27090. };
  27091. const emit = (value, ...args) => {
  27092. if (!value) contextEmit("pick", value, ...args);
  27093. else if (isArray$1(value)) contextEmit("pick", value.map(formatEmit), ...args);
  27094. else contextEmit("pick", formatEmit(value), ...args);
  27095. userInputDate.value = null;
  27096. userInputTime.value = null;
  27097. isChangeToNow.value = false;
  27098. isShortcut = false;
  27099. };
  27100. const handleDatePick = async (value, keepOpen) => {
  27101. if (selectionMode.value === "date" && import_dayjs_min.default.isDayjs(value)) {
  27102. const parsedDateValue = extractFirst(props.parsedValue);
  27103. let newDate = parsedDateValue ? parsedDateValue.year(value.year()).month(value.month()).date(value.date()) : value;
  27104. if (!checkDateWithinRange(newDate)) newDate = selectableRange.value[0][0].year(value.year()).month(value.month()).date(value.date());
  27105. innerDate.value = newDate;
  27106. emit(newDate, showTime.value || keepOpen);
  27107. } else if (selectionMode.value === "week") emit(value.date);
  27108. else if (selectionMode.value === "dates") emit(value, true);
  27109. };
  27110. const moveByMonth = (forward) => {
  27111. const action = forward ? "add" : "subtract";
  27112. innerDate.value = innerDate.value[action](1, "month");
  27113. handlePanelChange("month");
  27114. };
  27115. const moveByYear = (forward) => {
  27116. const currentDate = innerDate.value;
  27117. const action = forward ? "add" : "subtract";
  27118. innerDate.value = currentView.value === "year" ? currentDate[action](10, "year") : currentDate[action](1, "year");
  27119. handlePanelChange("year");
  27120. };
  27121. const currentView = (0, vue.ref)("date");
  27122. const yearLabel = (0, vue.computed)(() => {
  27123. const yearTranslation = t("el.datepicker.year");
  27124. if (currentView.value === "year") {
  27125. const startYear = Math.floor(year.value / 10) * 10;
  27126. if (yearTranslation) return `${startYear} ${yearTranslation} - ${startYear + 9} ${yearTranslation}`;
  27127. return `${startYear} - ${startYear + 9}`;
  27128. }
  27129. return `${year.value} ${yearTranslation}`;
  27130. });
  27131. const handleShortcutClick = (shortcut) => {
  27132. const shortcutValue = isFunction$1(shortcut.value) ? shortcut.value() : shortcut.value;
  27133. if (shortcutValue) {
  27134. isShortcut = true;
  27135. emit((0, import_dayjs_min.default)(shortcutValue).locale(lang.value));
  27136. return;
  27137. }
  27138. if (shortcut.onClick) shortcut.onClick({
  27139. attrs,
  27140. slots,
  27141. emit: contextEmit
  27142. });
  27143. };
  27144. const selectionMode = (0, vue.computed)(() => {
  27145. const { type } = props;
  27146. if ([
  27147. "week",
  27148. "month",
  27149. "months",
  27150. "year",
  27151. "years",
  27152. "dates"
  27153. ].includes(type)) return type;
  27154. return "date";
  27155. });
  27156. const isMultipleType = (0, vue.computed)(() => {
  27157. return selectionMode.value === "dates" || selectionMode.value === "months" || selectionMode.value === "years";
  27158. });
  27159. const keyboardMode = (0, vue.computed)(() => {
  27160. return selectionMode.value === "date" ? currentView.value : selectionMode.value;
  27161. });
  27162. const hasShortcuts = (0, vue.computed)(() => !!shortcuts.length);
  27163. const handleMonthPick = async (month, keepOpen) => {
  27164. if (selectionMode.value === "month") {
  27165. innerDate.value = getValidDateOfMonth(innerDate.value, innerDate.value.year(), month, lang.value, disabledDate);
  27166. emit(innerDate.value, false);
  27167. } else if (selectionMode.value === "months") emit(month, keepOpen ?? true);
  27168. else {
  27169. innerDate.value = getValidDateOfMonth(innerDate.value, innerDate.value.year(), month, lang.value, disabledDate);
  27170. currentView.value = "date";
  27171. if ([
  27172. "month",
  27173. "year",
  27174. "date",
  27175. "week"
  27176. ].includes(selectionMode.value)) {
  27177. emit(innerDate.value, true);
  27178. await (0, vue.nextTick)();
  27179. handleFocusPicker();
  27180. }
  27181. }
  27182. handlePanelChange("month");
  27183. };
  27184. const handleYearPick = async (year, keepOpen) => {
  27185. if (selectionMode.value === "year") {
  27186. innerDate.value = getValidDateOfYear(innerDate.value.startOf("year").year(year), lang.value, disabledDate);
  27187. emit(innerDate.value, false);
  27188. } else if (selectionMode.value === "years") emit(year, keepOpen ?? true);
  27189. else {
  27190. innerDate.value = getValidDateOfYear(innerDate.value.year(year), lang.value, disabledDate);
  27191. currentView.value = "month";
  27192. if ([
  27193. "month",
  27194. "year",
  27195. "date",
  27196. "week"
  27197. ].includes(selectionMode.value)) {
  27198. emit(innerDate.value, true);
  27199. await (0, vue.nextTick)();
  27200. handleFocusPicker();
  27201. }
  27202. }
  27203. handlePanelChange("year");
  27204. };
  27205. const dateDisabled = useFormDisabled();
  27206. const showPicker = async (view) => {
  27207. if (dateDisabled.value) return;
  27208. currentView.value = view;
  27209. await (0, vue.nextTick)();
  27210. handleFocusPicker();
  27211. };
  27212. const showTime = (0, vue.computed)(() => props.type === "datetime" || props.type === "datetimerange");
  27213. const footerVisible = (0, vue.computed)(() => {
  27214. const showDateFooter = showTime.value || selectionMode.value === "dates";
  27215. const showYearFooter = selectionMode.value === "years";
  27216. const showMonthFooter = selectionMode.value === "months";
  27217. const isDateView = currentView.value === "date";
  27218. const isYearView = currentView.value === "year";
  27219. const isMonthView = currentView.value === "month";
  27220. return showDateFooter && isDateView || showYearFooter && isYearView || showMonthFooter && isMonthView;
  27221. });
  27222. const footerFilled = (0, vue.computed)(() => !isMultipleType.value && props.showNow || props.showConfirm);
  27223. const disabledConfirm = (0, vue.computed)(() => {
  27224. if (!disabledDate) return false;
  27225. if (!props.parsedValue) return true;
  27226. if (isArray$1(props.parsedValue)) return disabledDate(props.parsedValue[0].toDate());
  27227. return disabledDate(props.parsedValue.toDate());
  27228. });
  27229. const onConfirm = () => {
  27230. if (isMultipleType.value) emit(props.parsedValue);
  27231. else {
  27232. let result = extractFirst(props.parsedValue);
  27233. if (!result) {
  27234. const defaultTimeD = (0, import_dayjs_min.default)(defaultTime).locale(lang.value);
  27235. const defaultValueD = getDefaultValue();
  27236. result = defaultTimeD.year(defaultValueD.year()).month(defaultValueD.month()).date(defaultValueD.date());
  27237. }
  27238. innerDate.value = result;
  27239. emit(result);
  27240. }
  27241. };
  27242. const disabledNow = (0, vue.computed)(() => {
  27243. if (!disabledDate) return false;
  27244. return disabledDate((0, import_dayjs_min.default)().locale(lang.value).toDate());
  27245. });
  27246. const changeToNow = () => {
  27247. const nowDate = (0, import_dayjs_min.default)().locale(lang.value).toDate();
  27248. isChangeToNow.value = true;
  27249. if ((!disabledDate || !disabledDate(nowDate)) && checkDateWithinRange(nowDate)) {
  27250. innerDate.value = (0, import_dayjs_min.default)().locale(lang.value);
  27251. emit(innerDate.value);
  27252. }
  27253. };
  27254. const timeFormat = (0, vue.computed)(() => {
  27255. return props.timeFormat || extractTimeFormat(props.format) || "HH:mm:ss";
  27256. });
  27257. const dateFormat = (0, vue.computed)(() => {
  27258. return props.dateFormat || extractDateFormat(props.format) || "YYYY-MM-DD";
  27259. });
  27260. const visibleTime = (0, vue.computed)(() => {
  27261. if (userInputTime.value) return userInputTime.value;
  27262. if (!props.parsedValue && !defaultValue.value) return;
  27263. return (extractFirst(props.parsedValue) || innerDate.value).format(timeFormat.value);
  27264. });
  27265. const visibleDate = (0, vue.computed)(() => {
  27266. if (userInputDate.value) return userInputDate.value;
  27267. if (!props.parsedValue && !defaultValue.value) return;
  27268. return (extractFirst(props.parsedValue) || innerDate.value).format(dateFormat.value);
  27269. });
  27270. const timePickerVisible = (0, vue.ref)(false);
  27271. const onTimePickerInputFocus = () => {
  27272. timePickerVisible.value = true;
  27273. };
  27274. const handleTimePickClose = () => {
  27275. timePickerVisible.value = false;
  27276. };
  27277. const getUnits = (date) => {
  27278. return {
  27279. hour: date.hour(),
  27280. minute: date.minute(),
  27281. second: date.second(),
  27282. year: date.year(),
  27283. month: date.month(),
  27284. date: date.date()
  27285. };
  27286. };
  27287. const handleTimePick = (value, visible, first) => {
  27288. const { hour, minute, second } = getUnits(value);
  27289. const parsedDateValue = extractFirst(props.parsedValue);
  27290. innerDate.value = parsedDateValue ? parsedDateValue.hour(hour).minute(minute).second(second) : value;
  27291. emit(innerDate.value, true);
  27292. if (!first) timePickerVisible.value = visible;
  27293. };
  27294. const handleVisibleTimeChange = (value) => {
  27295. const newDate = (0, import_dayjs_min.default)(value, timeFormat.value).locale(lang.value);
  27296. if (newDate.isValid() && checkDateWithinRange(newDate)) {
  27297. const { year, month, date } = getUnits(innerDate.value);
  27298. innerDate.value = newDate.year(year).month(month).date(date);
  27299. userInputTime.value = null;
  27300. timePickerVisible.value = false;
  27301. emit(innerDate.value, true);
  27302. }
  27303. };
  27304. const handleVisibleDateChange = (value) => {
  27305. const newDate = correctlyParseUserInput(value, dateFormat.value, lang.value, isDefaultFormat);
  27306. if (newDate.isValid()) {
  27307. if (disabledDate && disabledDate(newDate.toDate())) return;
  27308. const { hour, minute, second } = getUnits(innerDate.value);
  27309. innerDate.value = newDate.hour(hour).minute(minute).second(second);
  27310. userInputDate.value = null;
  27311. emit(innerDate.value, true);
  27312. }
  27313. };
  27314. const isValidValue = (date) => {
  27315. return import_dayjs_min.default.isDayjs(date) && date.isValid() && (disabledDate ? !disabledDate(date.toDate()) : true);
  27316. };
  27317. const parseUserInput = (value) => {
  27318. return correctlyParseUserInput(value, props.format, lang.value, isDefaultFormat);
  27319. };
  27320. const getDefaultValue = () => {
  27321. const parseDate = (0, import_dayjs_min.default)(defaultValue.value).locale(lang.value);
  27322. if (!defaultValue.value) {
  27323. const defaultTimeDValue = defaultTimeD.value;
  27324. return (0, import_dayjs_min.default)().hour(defaultTimeDValue.hour()).minute(defaultTimeDValue.minute()).second(defaultTimeDValue.second()).locale(lang.value);
  27325. }
  27326. return parseDate;
  27327. };
  27328. const handleFocusPicker = () => {
  27329. if ([
  27330. "week",
  27331. "month",
  27332. "year",
  27333. "date"
  27334. ].includes(selectionMode.value)) currentViewRef.value?.focus();
  27335. };
  27336. const _handleFocusPicker = () => {
  27337. handleFocusPicker();
  27338. if (selectionMode.value === "week") handleKeyControl(EVENT_CODE.down);
  27339. };
  27340. const handleKeydownTable = (event) => {
  27341. const code = getEventCode(event);
  27342. if ([
  27343. EVENT_CODE.up,
  27344. EVENT_CODE.down,
  27345. EVENT_CODE.left,
  27346. EVENT_CODE.right,
  27347. EVENT_CODE.home,
  27348. EVENT_CODE.end,
  27349. EVENT_CODE.pageUp,
  27350. EVENT_CODE.pageDown
  27351. ].includes(code)) {
  27352. handleKeyControl(code);
  27353. event.stopPropagation();
  27354. event.preventDefault();
  27355. }
  27356. if ([
  27357. EVENT_CODE.enter,
  27358. EVENT_CODE.space,
  27359. EVENT_CODE.numpadEnter
  27360. ].includes(code) && userInputDate.value === null && userInputTime.value === null) {
  27361. event.preventDefault();
  27362. emit(innerDate.value, false);
  27363. }
  27364. };
  27365. const handleKeyControl = (code) => {
  27366. const { up, down, left, right, home, end, pageUp, pageDown } = EVENT_CODE;
  27367. const mapping = {
  27368. year: {
  27369. [up]: -4,
  27370. [down]: 4,
  27371. [left]: -1,
  27372. [right]: 1,
  27373. offset: (date, step) => date.setFullYear(date.getFullYear() + step)
  27374. },
  27375. month: {
  27376. [up]: -4,
  27377. [down]: 4,
  27378. [left]: -1,
  27379. [right]: 1,
  27380. offset: (date, step) => date.setMonth(date.getMonth() + step)
  27381. },
  27382. week: {
  27383. [up]: -1,
  27384. [down]: 1,
  27385. [left]: -1,
  27386. [right]: 1,
  27387. offset: (date, step) => date.setDate(date.getDate() + step * 7)
  27388. },
  27389. date: {
  27390. [up]: -7,
  27391. [down]: 7,
  27392. [left]: -1,
  27393. [right]: 1,
  27394. [home]: (date) => -date.getDay(),
  27395. [end]: (date) => -date.getDay() + 6,
  27396. [pageUp]: (date) => -new Date(date.getFullYear(), date.getMonth(), 0).getDate(),
  27397. [pageDown]: (date) => new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(),
  27398. offset: (date, step) => date.setDate(date.getDate() + step)
  27399. }
  27400. };
  27401. const newDate = innerDate.value.toDate();
  27402. while (Math.abs(innerDate.value.diff(newDate, "year", true)) < 1) {
  27403. const map = mapping[keyboardMode.value];
  27404. if (!map) return;
  27405. map.offset(newDate, isFunction$1(map[code]) ? map[code](newDate) : map[code] ?? 0);
  27406. if (disabledDate && disabledDate(newDate)) break;
  27407. const result = (0, import_dayjs_min.default)(newDate).locale(lang.value);
  27408. innerDate.value = result;
  27409. contextEmit("pick", result, true);
  27410. break;
  27411. }
  27412. };
  27413. const handlePanelChange = (mode) => {
  27414. contextEmit("panel-change", innerDate.value.toDate(), mode, currentView.value);
  27415. };
  27416. (0, vue.watch)(() => selectionMode.value, (val) => {
  27417. if (["month", "year"].includes(val)) {
  27418. currentView.value = val;
  27419. return;
  27420. } else if (val === "years") {
  27421. currentView.value = "year";
  27422. return;
  27423. } else if (val === "months") {
  27424. currentView.value = "month";
  27425. return;
  27426. }
  27427. currentView.value = "date";
  27428. }, { immediate: true });
  27429. (0, vue.watch)(() => defaultValue.value, (val) => {
  27430. if (val) innerDate.value = getDefaultValue();
  27431. }, { immediate: true });
  27432. (0, vue.watch)(() => props.parsedValue, (val) => {
  27433. if (val) {
  27434. if (isMultipleType.value) return;
  27435. if (isArray$1(val)) return;
  27436. innerDate.value = val;
  27437. } else innerDate.value = getDefaultValue();
  27438. }, { immediate: true });
  27439. contextEmit("set-picker-option", ["isValidValue", isValidValue]);
  27440. contextEmit("set-picker-option", ["parseUserInput", parseUserInput]);
  27441. contextEmit("set-picker-option", ["handleFocusPicker", _handleFocusPicker]);
  27442. return (_ctx, _cache) => {
  27443. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([
  27444. (0, vue.unref)(ppNs).b(),
  27445. (0, vue.unref)(dpNs).b(),
  27446. (0, vue.unref)(ppNs).is("border", _ctx.border),
  27447. (0, vue.unref)(ppNs).is("disabled", (0, vue.unref)(dateDisabled)),
  27448. {
  27449. "has-sidebar": _ctx.$slots.sidebar || hasShortcuts.value,
  27450. "has-time": showTime.value
  27451. }
  27452. ]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body-wrapper")) }, [
  27453. (0, vue.renderSlot)(_ctx.$slots, "sidebar", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar")) }),
  27454. hasShortcuts.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  27455. key: 0,
  27456. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar"))
  27457. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(shortcuts), (shortcut, key) => {
  27458. return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  27459. key,
  27460. type: "button",
  27461. disabled: (0, vue.unref)(dateDisabled),
  27462. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("shortcut")),
  27463. onClick: ($event) => handleShortcutClick(shortcut)
  27464. }, (0, vue.toDisplayString)(shortcut.text), 11, _hoisted_1$48);
  27465. }), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true),
  27466. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body")) }, [
  27467. showTime.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  27468. key: 0,
  27469. class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("time-header"))
  27470. }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("editor-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
  27471. placeholder: (0, vue.unref)(t)("el.datepicker.selectDate"),
  27472. "model-value": visibleDate.value,
  27473. size: "small",
  27474. "validate-event": false,
  27475. disabled: (0, vue.unref)(dateDisabled),
  27476. readonly: !_ctx.editable,
  27477. onInput: _cache[0] || (_cache[0] = (val) => userInputDate.value = val),
  27478. onChange: handleVisibleDateChange
  27479. }, null, 8, [
  27480. "placeholder",
  27481. "model-value",
  27482. "disabled",
  27483. "readonly"
  27484. ])], 2), (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("editor-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
  27485. placeholder: (0, vue.unref)(t)("el.datepicker.selectTime"),
  27486. "model-value": visibleTime.value,
  27487. size: "small",
  27488. "validate-event": false,
  27489. disabled: (0, vue.unref)(dateDisabled),
  27490. readonly: !_ctx.editable,
  27491. onFocus: onTimePickerInputFocus,
  27492. onInput: _cache[1] || (_cache[1] = (val) => userInputTime.value = val),
  27493. onChange: handleVisibleTimeChange
  27494. }, null, 8, [
  27495. "placeholder",
  27496. "model-value",
  27497. "disabled",
  27498. "readonly"
  27499. ]), (0, vue.createVNode)((0, vue.unref)(panel_time_pick_default), {
  27500. visible: timePickerVisible.value,
  27501. format: timeFormat.value,
  27502. "parsed-value": innerDate.value,
  27503. onPick: handleTimePick
  27504. }, null, 8, [
  27505. "visible",
  27506. "format",
  27507. "parsed-value"
  27508. ])], 2)), [[(0, vue.unref)(ClickOutside), handleTimePickClose]])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  27509. (0, vue.withDirectives)((0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(dpNs).e("header"), (currentView.value === "year" || currentView.value === "month") && (0, vue.unref)(dpNs).em("header", "bordered")]) }, [
  27510. (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("prev-btn")) }, [(0, vue.createElementVNode)("button", {
  27511. type: "button",
  27512. "aria-label": (0, vue.unref)(t)(`el.datepicker.prevYear`),
  27513. class: (0, vue.normalizeClass)(["d-arrow-left", (0, vue.unref)(ppNs).e("icon-btn")]),
  27514. disabled: (0, vue.unref)(dateDisabled),
  27515. onClick: _cache[2] || (_cache[2] = ($event) => moveByYear(false))
  27516. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  27517. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
  27518. _: 1
  27519. })])], 10, _hoisted_2$30), (0, vue.withDirectives)((0, vue.createElementVNode)("button", {
  27520. type: "button",
  27521. "aria-label": (0, vue.unref)(t)(`el.datepicker.prevMonth`),
  27522. class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "arrow-left"]),
  27523. disabled: (0, vue.unref)(dateDisabled),
  27524. onClick: _cache[3] || (_cache[3] = ($event) => moveByMonth(false))
  27525. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  27526. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
  27527. _: 1
  27528. })])], 10, _hoisted_3$14), [[vue.vShow, currentView.value === "date"]])], 2),
  27529. (0, vue.createElementVNode)("span", {
  27530. role: "button",
  27531. class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("header-label")),
  27532. "aria-live": "polite",
  27533. tabindex: _ctx.disabled ? void 0 : 0,
  27534. "aria-disabled": _ctx.disabled,
  27535. onKeydown: _cache[4] || (_cache[4] = (0, vue.withKeys)(($event) => showPicker("year"), ["enter"])),
  27536. onClick: _cache[5] || (_cache[5] = ($event) => showPicker("year"))
  27537. }, (0, vue.toDisplayString)(yearLabel.value), 43, _hoisted_4$11),
  27538. (0, vue.withDirectives)((0, vue.createElementVNode)("span", {
  27539. role: "button",
  27540. "aria-live": "polite",
  27541. tabindex: _ctx.disabled ? void 0 : 0,
  27542. "aria-disabled": _ctx.disabled,
  27543. class: (0, vue.normalizeClass)([(0, vue.unref)(dpNs).e("header-label"), { active: currentView.value === "month" }]),
  27544. onKeydown: _cache[6] || (_cache[6] = (0, vue.withKeys)(($event) => showPicker("month"), ["enter"])),
  27545. onClick: _cache[7] || (_cache[7] = ($event) => showPicker("month"))
  27546. }, (0, vue.toDisplayString)((0, vue.unref)(t)(`el.datepicker.month${month.value + 1}`)), 43, _hoisted_5$8), [[vue.vShow, currentView.value === "date"]]),
  27547. (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(dpNs).e("next-btn")) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("button", {
  27548. type: "button",
  27549. "aria-label": (0, vue.unref)(t)(`el.datepicker.nextMonth`),
  27550. class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "arrow-right"]),
  27551. disabled: (0, vue.unref)(dateDisabled),
  27552. onClick: _cache[8] || (_cache[8] = ($event) => moveByMonth(true))
  27553. }, [(0, vue.renderSlot)(_ctx.$slots, "next-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  27554. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
  27555. _: 1
  27556. })])], 10, _hoisted_6$3), [[vue.vShow, currentView.value === "date"]]), (0, vue.createElementVNode)("button", {
  27557. type: "button",
  27558. "aria-label": (0, vue.unref)(t)(`el.datepicker.nextYear`),
  27559. class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-right"]),
  27560. disabled: (0, vue.unref)(dateDisabled),
  27561. onClick: _cache[9] || (_cache[9] = ($event) => moveByYear(true))
  27562. }, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  27563. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
  27564. _: 1
  27565. })])], 10, _hoisted_7$2)], 2)
  27566. ], 2), [[vue.vShow, currentView.value !== "time"]]),
  27567. (0, vue.createElementVNode)("div", {
  27568. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("content")),
  27569. onKeydown: handleKeydownTable
  27570. }, [
  27571. currentView.value === "date" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_date_table_default, {
  27572. key: 0,
  27573. ref_key: "currentViewRef",
  27574. ref: currentViewRef,
  27575. "selection-mode": selectionMode.value,
  27576. date: innerDate.value,
  27577. "parsed-value": _ctx.parsedValue,
  27578. "disabled-date": (0, vue.unref)(disabledDate),
  27579. disabled: (0, vue.unref)(dateDisabled),
  27580. "cell-class-name": (0, vue.unref)(cellClassName),
  27581. "show-week-number": _ctx.showWeekNumber,
  27582. onPick: handleDatePick
  27583. }, null, 8, [
  27584. "selection-mode",
  27585. "date",
  27586. "parsed-value",
  27587. "disabled-date",
  27588. "disabled",
  27589. "cell-class-name",
  27590. "show-week-number"
  27591. ])) : (0, vue.createCommentVNode)("v-if", true),
  27592. currentView.value === "year" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_year_table_default, {
  27593. key: 1,
  27594. ref_key: "currentViewRef",
  27595. ref: currentViewRef,
  27596. "selection-mode": selectionMode.value,
  27597. date: innerDate.value,
  27598. "disabled-date": (0, vue.unref)(disabledDate),
  27599. disabled: (0, vue.unref)(dateDisabled),
  27600. "parsed-value": _ctx.parsedValue,
  27601. "cell-class-name": (0, vue.unref)(cellClassName),
  27602. onPick: handleYearPick
  27603. }, null, 8, [
  27604. "selection-mode",
  27605. "date",
  27606. "disabled-date",
  27607. "disabled",
  27608. "parsed-value",
  27609. "cell-class-name"
  27610. ])) : (0, vue.createCommentVNode)("v-if", true),
  27611. currentView.value === "month" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_month_table_default, {
  27612. key: 2,
  27613. ref_key: "currentViewRef",
  27614. ref: currentViewRef,
  27615. "selection-mode": selectionMode.value,
  27616. date: innerDate.value,
  27617. "parsed-value": _ctx.parsedValue,
  27618. "disabled-date": (0, vue.unref)(disabledDate),
  27619. disabled: (0, vue.unref)(dateDisabled),
  27620. "cell-class-name": (0, vue.unref)(cellClassName),
  27621. onPick: handleMonthPick
  27622. }, null, 8, [
  27623. "selection-mode",
  27624. "date",
  27625. "parsed-value",
  27626. "disabled-date",
  27627. "disabled",
  27628. "cell-class-name"
  27629. ])) : (0, vue.createCommentVNode)("v-if", true)
  27630. ], 34)
  27631. ], 2)
  27632. ], 2), _ctx.showFooter && footerVisible.value && footerFilled.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  27633. key: 0,
  27634. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("footer"))
  27635. }, [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElButton), {
  27636. text: "",
  27637. size: "small",
  27638. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("link-btn")),
  27639. disabled: disabledNow.value,
  27640. onClick: changeToNow
  27641. }, {
  27642. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.now")), 1)]),
  27643. _: 1
  27644. }, 8, ["class", "disabled"]), [[vue.vShow, !isMultipleType.value && _ctx.showNow]]), _ctx.showConfirm ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), {
  27645. key: 0,
  27646. plain: "",
  27647. size: "small",
  27648. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("link-btn")),
  27649. disabled: disabledConfirm.value,
  27650. onClick: onConfirm
  27651. }, {
  27652. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.confirm")), 1)]),
  27653. _: 1
  27654. }, 8, ["class", "disabled"])) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2);
  27655. };
  27656. }
  27657. });
  27658. //#endregion
  27659. //#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-date-pick.vue
  27660. var panel_date_pick_default = panel_date_pick_vue_vue_type_script_setup_true_lang_default;
  27661. //#endregion
  27662. //#region ../../packages/components/date-picker-panel/src/props/panel-date-range.ts
  27663. const panelDateRangeProps = buildProps({
  27664. ...panelSharedProps,
  27665. ...panelRangeSharedProps
  27666. });
  27667. //#endregion
  27668. //#region ../../packages/components/date-picker-panel/src/composables/use-shortcut.ts
  27669. const useShortcut = (lang) => {
  27670. const { emit } = (0, vue.getCurrentInstance)();
  27671. const attrs = (0, vue.useAttrs)();
  27672. const slots = (0, vue.useSlots)();
  27673. const handleShortcutClick = (shortcut) => {
  27674. const shortcutValues = isFunction$1(shortcut.value) ? shortcut.value() : shortcut.value;
  27675. if (shortcutValues) {
  27676. emit("pick", [(0, import_dayjs_min.default)(shortcutValues[0]).locale(lang.value), (0, import_dayjs_min.default)(shortcutValues[1]).locale(lang.value)]);
  27677. return;
  27678. }
  27679. if (shortcut.onClick) shortcut.onClick({
  27680. attrs,
  27681. slots,
  27682. emit
  27683. });
  27684. };
  27685. return handleShortcutClick;
  27686. };
  27687. //#endregion
  27688. //#region ../../packages/components/date-picker-panel/src/composables/use-range-picker.ts
  27689. const useRangePicker = (props, { defaultValue, defaultTime, leftDate, rightDate, step, unit, sortDates }) => {
  27690. const { emit } = (0, vue.getCurrentInstance)();
  27691. const { pickerNs } = (0, vue.inject)(ROOT_PICKER_INJECTION_KEY);
  27692. const drpNs = useNamespace("date-range-picker");
  27693. const { t, lang } = useLocale();
  27694. const handleShortcutClick = useShortcut(lang);
  27695. const minDate = (0, vue.ref)();
  27696. const maxDate = (0, vue.ref)();
  27697. const rangeState = (0, vue.ref)({
  27698. endDate: null,
  27699. selecting: false
  27700. });
  27701. const handleChangeRange = (val) => {
  27702. rangeState.value = val;
  27703. };
  27704. const handleRangeConfirm = (visible = false) => {
  27705. const _minDate = (0, vue.unref)(minDate);
  27706. const _maxDate = (0, vue.unref)(maxDate);
  27707. if (isValidRange([_minDate, _maxDate])) emit("pick", [_minDate, _maxDate], visible);
  27708. };
  27709. const onSelect = (selecting) => {
  27710. rangeState.value.selecting = selecting;
  27711. if (!selecting) rangeState.value.endDate = null;
  27712. };
  27713. const parseValue = (parsedValue) => {
  27714. if (isArray$1(parsedValue) && parsedValue.length === 2) {
  27715. const [start, end] = parsedValue;
  27716. minDate.value = start;
  27717. leftDate.value = start;
  27718. maxDate.value = end;
  27719. sortDates((0, vue.unref)(minDate), (0, vue.unref)(maxDate));
  27720. } else restoreDefault();
  27721. };
  27722. const restoreDefault = () => {
  27723. let [start, end] = getDefaultValue((0, vue.unref)(defaultValue), {
  27724. lang: (0, vue.unref)(lang),
  27725. step,
  27726. unit,
  27727. unlinkPanels: props.unlinkPanels
  27728. });
  27729. const getShift = (day) => {
  27730. return day.diff(day.startOf("d"), "ms");
  27731. };
  27732. const maybeTimes = (0, vue.unref)(defaultTime);
  27733. if (maybeTimes) {
  27734. let leftShift = 0;
  27735. let rightShift = 0;
  27736. if (isArray$1(maybeTimes)) {
  27737. const [timeStart, timeEnd] = maybeTimes.map(import_dayjs_min.default);
  27738. leftShift = getShift(timeStart);
  27739. rightShift = getShift(timeEnd);
  27740. } else {
  27741. const shift = getShift((0, import_dayjs_min.default)(maybeTimes));
  27742. leftShift = shift;
  27743. rightShift = shift;
  27744. }
  27745. start = start.startOf("d").add(leftShift, "ms");
  27746. end = end.startOf("d").add(rightShift, "ms");
  27747. }
  27748. minDate.value = void 0;
  27749. maxDate.value = void 0;
  27750. leftDate.value = start;
  27751. rightDate.value = end;
  27752. };
  27753. (0, vue.watch)(defaultValue, (val) => {
  27754. if (val) restoreDefault();
  27755. }, { immediate: true });
  27756. (0, vue.watch)(() => props.parsedValue, (parsedValue) => {
  27757. if (!parsedValue?.length || !isEqual$1(parsedValue, [minDate.value, maxDate.value])) parseValue(parsedValue);
  27758. }, { immediate: true });
  27759. (0, vue.watch)(() => props.visible, () => {
  27760. if (props.visible) parseValue(props.parsedValue);
  27761. }, { immediate: true });
  27762. return {
  27763. minDate,
  27764. maxDate,
  27765. rangeState,
  27766. lang,
  27767. ppNs: pickerNs,
  27768. drpNs,
  27769. handleChangeRange,
  27770. handleRangeConfirm,
  27771. handleShortcutClick,
  27772. onSelect,
  27773. parseValue,
  27774. t
  27775. };
  27776. };
  27777. //#endregion
  27778. //#region ../../packages/components/date-picker-panel/src/composables/use-panel-date-range.ts
  27779. const usePanelDateRange = (props, emit, leftDate, rightDate) => {
  27780. const leftCurrentView = (0, vue.ref)("date");
  27781. const leftCurrentViewRef = (0, vue.ref)();
  27782. const rightCurrentView = (0, vue.ref)("date");
  27783. const rightCurrentViewRef = (0, vue.ref)();
  27784. const { disabledDate } = (0, vue.inject)(PICKER_BASE_INJECTION_KEY).props;
  27785. const { t, lang } = useLocale();
  27786. const leftYear = (0, vue.computed)(() => {
  27787. return leftDate.value.year();
  27788. });
  27789. const leftMonth = (0, vue.computed)(() => {
  27790. return leftDate.value.month();
  27791. });
  27792. const rightYear = (0, vue.computed)(() => {
  27793. return rightDate.value.year();
  27794. });
  27795. const rightMonth = (0, vue.computed)(() => {
  27796. return rightDate.value.month();
  27797. });
  27798. function computedYearLabel(currentView, yearValue) {
  27799. const yearTranslation = t("el.datepicker.year");
  27800. if (currentView.value === "year") {
  27801. const startYear = Math.floor(yearValue.value / 10) * 10;
  27802. return yearTranslation ? `${startYear} ${yearTranslation} - ${startYear + 9} ${yearTranslation}` : `${startYear} - ${startYear + 9}`;
  27803. }
  27804. return `${yearValue.value} ${yearTranslation}`;
  27805. }
  27806. function focusPicker(currentViewRef) {
  27807. currentViewRef?.focus();
  27808. }
  27809. async function showPicker(pickerType, view) {
  27810. if (props.disabled) return;
  27811. const currentView = pickerType === "left" ? leftCurrentView : rightCurrentView;
  27812. const currentViewRef = pickerType === "left" ? leftCurrentViewRef : rightCurrentViewRef;
  27813. currentView.value = view;
  27814. await (0, vue.nextTick)();
  27815. focusPicker(currentViewRef.value);
  27816. }
  27817. async function handlePick(mode, pickerType, value) {
  27818. if (props.disabled) return;
  27819. const isLeftPicker = pickerType === "left";
  27820. const startDate = isLeftPicker ? leftDate : rightDate;
  27821. const endDate = isLeftPicker ? rightDate : leftDate;
  27822. const currentView = isLeftPicker ? leftCurrentView : rightCurrentView;
  27823. const currentViewRef = isLeftPicker ? leftCurrentViewRef : rightCurrentViewRef;
  27824. if (mode === "year") startDate.value = getValidDateOfYear(startDate.value.year(value), lang.value, disabledDate);
  27825. if (mode === "month") startDate.value = getValidDateOfMonth(startDate.value, startDate.value.year(), value, lang.value, disabledDate);
  27826. if (!props.unlinkPanels) endDate.value = pickerType === "left" ? startDate.value.add(1, "month") : startDate.value.subtract(1, "month");
  27827. currentView.value = mode === "year" ? "month" : "date";
  27828. await (0, vue.nextTick)();
  27829. focusPicker(currentViewRef.value);
  27830. handlePanelChange(mode);
  27831. }
  27832. function handlePanelChange(mode) {
  27833. emit("panel-change", [leftDate.value.toDate(), rightDate.value.toDate()], mode);
  27834. }
  27835. function adjustDateByView(currentView, date, forward) {
  27836. const action = forward ? "add" : "subtract";
  27837. return currentView === "year" ? date[action](10, "year") : date[action](1, "year");
  27838. }
  27839. return {
  27840. leftCurrentView,
  27841. rightCurrentView,
  27842. leftCurrentViewRef,
  27843. rightCurrentViewRef,
  27844. leftYear,
  27845. rightYear,
  27846. leftMonth,
  27847. rightMonth,
  27848. leftYearLabel: (0, vue.computed)(() => computedYearLabel(leftCurrentView, leftYear)),
  27849. rightYearLabel: (0, vue.computed)(() => computedYearLabel(rightCurrentView, rightYear)),
  27850. showLeftPicker: (view) => showPicker("left", view),
  27851. showRightPicker: (view) => showPicker("right", view),
  27852. handleLeftYearPick: (year) => handlePick("year", "left", year),
  27853. handleRightYearPick: (year) => handlePick("year", "right", year),
  27854. handleLeftMonthPick: (month) => handlePick("month", "left", month),
  27855. handleRightMonthPick: (month) => handlePick("month", "right", month),
  27856. handlePanelChange,
  27857. adjustDateByView
  27858. };
  27859. };
  27860. //#endregion
  27861. //#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-date-range.vue?vue&type=script&setup=true&lang.ts
  27862. const _hoisted_1$47 = ["disabled", "onClick"];
  27863. const _hoisted_2$29 = ["aria-label", "disabled"];
  27864. const _hoisted_3$13 = ["aria-label", "disabled"];
  27865. const _hoisted_4$10 = ["disabled", "aria-label"];
  27866. const _hoisted_5$7 = ["disabled", "aria-label"];
  27867. const _hoisted_6$2 = ["tabindex", "aria-disabled"];
  27868. const _hoisted_7$1 = ["tabindex", "aria-disabled"];
  27869. const _hoisted_8$1 = ["disabled", "aria-label"];
  27870. const _hoisted_9$1 = ["disabled", "aria-label"];
  27871. const _hoisted_10$1 = ["aria-label", "disabled"];
  27872. const _hoisted_11$1 = ["disabled", "aria-label"];
  27873. const _hoisted_12$1 = ["tabindex", "aria-disabled"];
  27874. const _hoisted_13$1 = ["tabindex", "aria-disabled"];
  27875. const unit$2 = "month";
  27876. var panel_date_range_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  27877. __name: "panel-date-range",
  27878. props: panelDateRangeProps,
  27879. emits: [
  27880. "pick",
  27881. "set-picker-option",
  27882. "calendar-change",
  27883. "panel-change",
  27884. "clear"
  27885. ],
  27886. setup(__props, { emit: __emit }) {
  27887. const props = __props;
  27888. const emit = __emit;
  27889. const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
  27890. const isDefaultFormat = (0, vue.inject)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, void 0);
  27891. const { disabledDate, cellClassName, defaultTime, clearable } = pickerBase.props;
  27892. const format = (0, vue.toRef)(pickerBase.props, "format");
  27893. const shortcuts = (0, vue.toRef)(pickerBase.props, "shortcuts");
  27894. const defaultValue = (0, vue.toRef)(pickerBase.props, "defaultValue");
  27895. const { lang } = useLocale();
  27896. const leftDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value));
  27897. const rightDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value).add(1, unit$2));
  27898. const { minDate, maxDate, rangeState, ppNs, drpNs, handleChangeRange, handleRangeConfirm, handleShortcutClick, onSelect, parseValue, t } = useRangePicker(props, {
  27899. defaultValue,
  27900. defaultTime,
  27901. leftDate,
  27902. rightDate,
  27903. unit: unit$2,
  27904. sortDates
  27905. });
  27906. (0, vue.watch)(() => props.visible, (visible) => {
  27907. if (!visible && rangeState.value.selecting) {
  27908. parseValue(props.parsedValue);
  27909. onSelect(false);
  27910. }
  27911. });
  27912. const dateUserInput = (0, vue.ref)({
  27913. min: null,
  27914. max: null
  27915. });
  27916. const timeUserInput = (0, vue.ref)({
  27917. min: null,
  27918. max: null
  27919. });
  27920. const { leftCurrentView, rightCurrentView, leftCurrentViewRef, rightCurrentViewRef, leftYear, rightYear, leftMonth, rightMonth, leftYearLabel, rightYearLabel, showLeftPicker, showRightPicker, handleLeftYearPick, handleRightYearPick, handleLeftMonthPick, handleRightMonthPick, handlePanelChange, adjustDateByView } = usePanelDateRange(props, emit, leftDate, rightDate);
  27921. const hasShortcuts = (0, vue.computed)(() => !!shortcuts.value.length);
  27922. const minVisibleDate = (0, vue.computed)(() => {
  27923. if (dateUserInput.value.min !== null) return dateUserInput.value.min;
  27924. if (minDate.value) return minDate.value.format(dateFormat.value);
  27925. return "";
  27926. });
  27927. const maxVisibleDate = (0, vue.computed)(() => {
  27928. if (dateUserInput.value.max !== null) return dateUserInput.value.max;
  27929. if (maxDate.value || minDate.value) return (maxDate.value || minDate.value).format(dateFormat.value);
  27930. return "";
  27931. });
  27932. const minVisibleTime = (0, vue.computed)(() => {
  27933. if (timeUserInput.value.min !== null) return timeUserInput.value.min;
  27934. if (minDate.value) return minDate.value.format(timeFormat.value);
  27935. return "";
  27936. });
  27937. const maxVisibleTime = (0, vue.computed)(() => {
  27938. if (timeUserInput.value.max !== null) return timeUserInput.value.max;
  27939. if (maxDate.value || minDate.value) return (maxDate.value || minDate.value).format(timeFormat.value);
  27940. return "";
  27941. });
  27942. const timeFormat = (0, vue.computed)(() => {
  27943. return props.timeFormat || extractTimeFormat(format.value || "") || "HH:mm:ss";
  27944. });
  27945. const dateFormat = (0, vue.computed)(() => {
  27946. return props.dateFormat || extractDateFormat(format.value || "") || "YYYY-MM-DD";
  27947. });
  27948. const isValidValue = (date) => {
  27949. return isValidRange(date) && (disabledDate ? !disabledDate(date[0].toDate()) && !disabledDate(date[1].toDate()) : true);
  27950. };
  27951. const leftPrevYear = () => {
  27952. leftDate.value = adjustDateByView(leftCurrentView.value, leftDate.value, false);
  27953. if (!props.unlinkPanels) rightDate.value = leftDate.value.add(1, "month");
  27954. handlePanelChange("year");
  27955. };
  27956. const leftPrevMonth = () => {
  27957. leftDate.value = leftDate.value.subtract(1, "month");
  27958. if (!props.unlinkPanels) rightDate.value = leftDate.value.add(1, "month");
  27959. handlePanelChange("month");
  27960. };
  27961. const rightNextYear = () => {
  27962. if (!props.unlinkPanels) {
  27963. leftDate.value = adjustDateByView(rightCurrentView.value, leftDate.value, true);
  27964. rightDate.value = leftDate.value.add(1, "month");
  27965. } else rightDate.value = adjustDateByView(rightCurrentView.value, rightDate.value, true);
  27966. handlePanelChange("year");
  27967. };
  27968. const rightNextMonth = () => {
  27969. if (!props.unlinkPanels) {
  27970. leftDate.value = leftDate.value.add(1, "month");
  27971. rightDate.value = leftDate.value.add(1, "month");
  27972. } else rightDate.value = rightDate.value.add(1, "month");
  27973. handlePanelChange("month");
  27974. };
  27975. const leftNextYear = () => {
  27976. leftDate.value = adjustDateByView(leftCurrentView.value, leftDate.value, true);
  27977. handlePanelChange("year");
  27978. };
  27979. const leftNextMonth = () => {
  27980. leftDate.value = leftDate.value.add(1, "month");
  27981. handlePanelChange("month");
  27982. };
  27983. const rightPrevYear = () => {
  27984. rightDate.value = adjustDateByView(rightCurrentView.value, rightDate.value, false);
  27985. handlePanelChange("year");
  27986. };
  27987. const rightPrevMonth = () => {
  27988. rightDate.value = rightDate.value.subtract(1, "month");
  27989. handlePanelChange("month");
  27990. };
  27991. const enableMonthArrow = (0, vue.computed)(() => {
  27992. const nextMonth = (leftMonth.value + 1) % 12;
  27993. const yearOffset = leftMonth.value + 1 >= 12 ? 1 : 0;
  27994. return props.singlePanel || props.unlinkPanels && new Date(leftYear.value + yearOffset, nextMonth) < new Date(rightYear.value, rightMonth.value);
  27995. });
  27996. const enableYearArrow = (0, vue.computed)(() => {
  27997. return props.singlePanel || props.unlinkPanels && rightYear.value * 12 + rightMonth.value - (leftYear.value * 12 + leftMonth.value + 1) >= 12;
  27998. });
  27999. const dateRangeDisabled = useFormDisabled();
  28000. const btnDisabled = (0, vue.computed)(() => {
  28001. return !(minDate.value && maxDate.value && !rangeState.value.selecting && isValidRange([minDate.value, maxDate.value]) && !dateRangeDisabled.value);
  28002. });
  28003. const showTime = (0, vue.computed)(() => props.type === "datetime" || props.type === "datetimerange");
  28004. const formatEmit = (emitDayjs, index) => {
  28005. if (!emitDayjs) return;
  28006. if (defaultTime) return (0, import_dayjs_min.default)(defaultTime[index] || defaultTime).locale(lang.value).year(emitDayjs.year()).month(emitDayjs.month()).date(emitDayjs.date());
  28007. return emitDayjs;
  28008. };
  28009. const handleRangePick = (val, close = true) => {
  28010. const min_ = val.minDate;
  28011. const max_ = val.maxDate;
  28012. const minDate_ = formatEmit(min_, 0);
  28013. const maxDate_ = formatEmit(max_, 1);
  28014. if (maxDate.value === maxDate_ && minDate.value === minDate_) return;
  28015. emit("calendar-change", [min_.toDate(), max_ && max_.toDate()]);
  28016. maxDate.value = maxDate_;
  28017. minDate.value = minDate_;
  28018. if (!showTime.value && close) close = !minDate_ || !maxDate_;
  28019. handleRangeConfirm(close);
  28020. };
  28021. const minTimePickerVisible = (0, vue.ref)(false);
  28022. const maxTimePickerVisible = (0, vue.ref)(false);
  28023. const handleMinTimeClose = () => {
  28024. minTimePickerVisible.value = false;
  28025. };
  28026. const handleMaxTimeClose = () => {
  28027. maxTimePickerVisible.value = false;
  28028. };
  28029. const findValidDateToward = (from, toward) => {
  28030. if (!disabledDate || !disabledDate(from.toDate())) return from;
  28031. const forward = from.isBefore(toward);
  28032. let cursor = from;
  28033. while (forward ? cursor.isBefore(toward) : cursor.isAfter(toward)) {
  28034. cursor = forward ? cursor.add(1, "day") : cursor.subtract(1, "day");
  28035. if (!disabledDate(cursor.toDate())) return cursor;
  28036. }
  28037. return from;
  28038. };
  28039. const handleDateInput = (value, type) => {
  28040. dateUserInput.value[type] = value;
  28041. const parsedValueD = (0, import_dayjs_min.default)(value, dateFormat.value).locale(lang.value);
  28042. if (parsedValueD.isValid()) {
  28043. if (disabledDate && disabledDate(parsedValueD.toDate())) return;
  28044. if (type === "min") {
  28045. leftDate.value = parsedValueD;
  28046. minDate.value = (minDate.value || leftDate.value).year(parsedValueD.year()).month(parsedValueD.month()).date(parsedValueD.date());
  28047. if (!props.unlinkPanels && !maxDate.value) {
  28048. const adjustedMax = findValidDateToward(minDate.value.add(1, "month"), minDate.value);
  28049. rightDate.value = adjustedMax;
  28050. maxDate.value = adjustedMax;
  28051. }
  28052. } else {
  28053. rightDate.value = parsedValueD;
  28054. maxDate.value = (maxDate.value || rightDate.value).year(parsedValueD.year()).month(parsedValueD.month()).date(parsedValueD.date());
  28055. if (!props.unlinkPanels && !minDate.value) {
  28056. const adjustedMin = findValidDateToward(maxDate.value.subtract(1, "month"), maxDate.value);
  28057. leftDate.value = adjustedMin;
  28058. minDate.value = adjustedMin;
  28059. }
  28060. }
  28061. sortDates(minDate.value, maxDate.value);
  28062. handleRangeConfirm(true);
  28063. }
  28064. };
  28065. const handleDateChange = (_, type) => {
  28066. dateUserInput.value[type] = null;
  28067. if (type === "min") {
  28068. if (!props.unlinkPanels && maxDate.value && minDate.value && maxDate.value.isBefore(minDate.value)) {
  28069. const adjustedMax = findValidDateToward(minDate.value.add(1, "month"), minDate.value);
  28070. rightDate.value = adjustedMax;
  28071. maxDate.value = adjustedMax;
  28072. }
  28073. } else if (!props.unlinkPanels && minDate.value && maxDate.value && minDate.value.isAfter(maxDate.value)) {
  28074. const adjustedMin = findValidDateToward(maxDate.value.subtract(1, "month"), maxDate.value);
  28075. leftDate.value = adjustedMin;
  28076. minDate.value = adjustedMin;
  28077. }
  28078. sortDates(minDate.value, maxDate.value);
  28079. handleRangeConfirm(true);
  28080. };
  28081. const handleTimeInput = (value, type) => {
  28082. timeUserInput.value[type] = value;
  28083. const parsedValueD = (0, import_dayjs_min.default)(value, timeFormat.value).locale(lang.value);
  28084. if (parsedValueD.isValid()) if (type === "min") {
  28085. minTimePickerVisible.value = true;
  28086. minDate.value = (minDate.value || leftDate.value).hour(parsedValueD.hour()).minute(parsedValueD.minute()).second(parsedValueD.second());
  28087. leftDate.value = minDate.value;
  28088. } else {
  28089. maxTimePickerVisible.value = true;
  28090. maxDate.value = (maxDate.value || rightDate.value).hour(parsedValueD.hour()).minute(parsedValueD.minute()).second(parsedValueD.second());
  28091. rightDate.value = maxDate.value;
  28092. }
  28093. };
  28094. const handleTimeChange = (_value, type) => {
  28095. timeUserInput.value[type] = null;
  28096. if (type === "min") {
  28097. leftDate.value = minDate.value;
  28098. minTimePickerVisible.value = false;
  28099. if (!maxDate.value || maxDate.value.isBefore(minDate.value)) maxDate.value = minDate.value;
  28100. } else {
  28101. rightDate.value = maxDate.value;
  28102. maxTimePickerVisible.value = false;
  28103. if (maxDate.value && maxDate.value.isBefore(minDate.value)) minDate.value = maxDate.value;
  28104. }
  28105. handleRangeConfirm(true);
  28106. };
  28107. const handleMinTimePick = (value, visible, first) => {
  28108. if (timeUserInput.value.min) return;
  28109. if (value) minDate.value = (minDate.value || leftDate.value).hour(value.hour()).minute(value.minute()).second(value.second());
  28110. if (!first) minTimePickerVisible.value = visible;
  28111. if (!maxDate.value || maxDate.value.isBefore(minDate.value)) {
  28112. maxDate.value = minDate.value;
  28113. rightDate.value = value;
  28114. (0, vue.nextTick)(() => {
  28115. parseValue(props.parsedValue);
  28116. });
  28117. }
  28118. handleRangeConfirm(true);
  28119. };
  28120. const handleMaxTimePick = (value, visible, first) => {
  28121. if (timeUserInput.value.max) return;
  28122. if (value) maxDate.value = (maxDate.value || rightDate.value).hour(value.hour()).minute(value.minute()).second(value.second());
  28123. if (!first) maxTimePickerVisible.value = visible;
  28124. if (maxDate.value && maxDate.value.isBefore(minDate.value)) minDate.value = maxDate.value;
  28125. handleRangeConfirm(true);
  28126. };
  28127. const onClear = () => {
  28128. handleClear();
  28129. emit("clear");
  28130. };
  28131. const handleClear = () => {
  28132. let valueOnClear = null;
  28133. if (pickerBase?.emptyValues) valueOnClear = pickerBase.emptyValues.valueOnClear.value;
  28134. leftDate.value = getDefaultValue((0, vue.unref)(defaultValue), {
  28135. lang: (0, vue.unref)(lang),
  28136. unit: "month",
  28137. unlinkPanels: props.unlinkPanels
  28138. })[0];
  28139. rightDate.value = leftDate.value.add(1, "month");
  28140. maxDate.value = void 0;
  28141. minDate.value = void 0;
  28142. handleRangeConfirm(true);
  28143. emit("pick", valueOnClear);
  28144. };
  28145. const parseUserInput = (value) => {
  28146. return correctlyParseUserInput(value, format.value || "", lang.value, isDefaultFormat);
  28147. };
  28148. function sortDates(minDate, maxDate) {
  28149. if (props.unlinkPanels && maxDate) {
  28150. const minDateYear = minDate?.year() || 0;
  28151. const minDateMonth = minDate?.month() || 0;
  28152. const maxDateYear = maxDate.year();
  28153. const maxDateMonth = maxDate.month();
  28154. rightDate.value = minDateYear === maxDateYear && minDateMonth === maxDateMonth ? maxDate.add(1, unit$2) : maxDate;
  28155. } else {
  28156. rightDate.value = leftDate.value.add(1, unit$2);
  28157. if (maxDate) rightDate.value = rightDate.value.hour(maxDate.hour()).minute(maxDate.minute()).second(maxDate.second());
  28158. }
  28159. }
  28160. emit("set-picker-option", ["isValidValue", isValidValue]);
  28161. emit("set-picker-option", ["parseUserInput", parseUserInput]);
  28162. emit("set-picker-option", ["handleClear", handleClear]);
  28163. return (_ctx, _cache) => {
  28164. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([
  28165. (0, vue.unref)(ppNs).b(),
  28166. (0, vue.unref)(drpNs).b(),
  28167. (0, vue.unref)(ppNs).is("border", _ctx.border),
  28168. (0, vue.unref)(ppNs).is("disabled", (0, vue.unref)(dateRangeDisabled)),
  28169. {
  28170. "has-sidebar": _ctx.$slots.sidebar || hasShortcuts.value,
  28171. "has-time": showTime.value,
  28172. "single-panel": _ctx.singlePanel
  28173. }
  28174. ]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body-wrapper")) }, [
  28175. (0, vue.renderSlot)(_ctx.$slots, "sidebar", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar")) }),
  28176. hasShortcuts.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  28177. key: 0,
  28178. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar"))
  28179. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(shortcuts.value, (shortcut, key) => {
  28180. return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  28181. key,
  28182. type: "button",
  28183. disabled: (0, vue.unref)(dateRangeDisabled),
  28184. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("shortcut")),
  28185. onClick: ($event) => (0, vue.unref)(handleShortcutClick)(shortcut)
  28186. }, (0, vue.toDisplayString)(shortcut.text), 11, _hoisted_1$47);
  28187. }), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true),
  28188. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body")) }, [
  28189. showTime.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  28190. key: 0,
  28191. class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-header"))
  28192. }, [
  28193. (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editors-wrap")) }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-picker-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
  28194. size: "small",
  28195. disabled: (0, vue.unref)(rangeState).selecting || (0, vue.unref)(dateRangeDisabled),
  28196. placeholder: (0, vue.unref)(t)("el.datepicker.startDate"),
  28197. class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editor")),
  28198. "model-value": minVisibleDate.value,
  28199. "validate-event": false,
  28200. readonly: !_ctx.editable,
  28201. onInput: _cache[0] || (_cache[0] = (val) => handleDateInput(val, "min")),
  28202. onChange: _cache[1] || (_cache[1] = (val) => handleDateChange(val, "min"))
  28203. }, null, 8, [
  28204. "disabled",
  28205. "placeholder",
  28206. "class",
  28207. "model-value",
  28208. "readonly"
  28209. ])], 2), (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-picker-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
  28210. size: "small",
  28211. class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editor")),
  28212. disabled: (0, vue.unref)(rangeState).selecting || (0, vue.unref)(dateRangeDisabled),
  28213. placeholder: (0, vue.unref)(t)("el.datepicker.startTime"),
  28214. "model-value": minVisibleTime.value,
  28215. "validate-event": false,
  28216. readonly: !_ctx.editable,
  28217. onFocus: _cache[2] || (_cache[2] = ($event) => minTimePickerVisible.value = true),
  28218. onInput: _cache[3] || (_cache[3] = (val) => handleTimeInput(val, "min")),
  28219. onChange: _cache[4] || (_cache[4] = (val) => handleTimeChange(val, "min"))
  28220. }, null, 8, [
  28221. "class",
  28222. "disabled",
  28223. "placeholder",
  28224. "model-value",
  28225. "readonly"
  28226. ]), (0, vue.createVNode)((0, vue.unref)(panel_time_pick_default), {
  28227. visible: minTimePickerVisible.value,
  28228. format: timeFormat.value,
  28229. "datetime-role": "start",
  28230. "parsed-value": (0, vue.unref)(minDate) || leftDate.value,
  28231. onPick: handleMinTimePick
  28232. }, null, 8, [
  28233. "visible",
  28234. "format",
  28235. "parsed-value"
  28236. ])], 2)), [[(0, vue.unref)(ClickOutside), handleMinTimeClose]])], 2),
  28237. (0, vue.createElementVNode)("span", null, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28238. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
  28239. _: 1
  28240. })]),
  28241. (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([(0, vue.unref)(drpNs).e("editors-wrap"), "is-right"]) }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-picker-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
  28242. size: "small",
  28243. class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editor")),
  28244. disabled: (0, vue.unref)(rangeState).selecting || (0, vue.unref)(dateRangeDisabled),
  28245. placeholder: (0, vue.unref)(t)("el.datepicker.endDate"),
  28246. "model-value": maxVisibleDate.value,
  28247. readonly: !(0, vue.unref)(minDate) || !_ctx.editable,
  28248. "validate-event": false,
  28249. onInput: _cache[5] || (_cache[5] = (val) => handleDateInput(val, "max")),
  28250. onChange: _cache[6] || (_cache[6] = (val) => handleDateChange(val, "max"))
  28251. }, null, 8, [
  28252. "class",
  28253. "disabled",
  28254. "placeholder",
  28255. "model-value",
  28256. "readonly"
  28257. ])], 2), (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("time-picker-wrap")) }, [(0, vue.createVNode)((0, vue.unref)(ElInput), {
  28258. size: "small",
  28259. class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("editor")),
  28260. disabled: (0, vue.unref)(rangeState).selecting || (0, vue.unref)(dateRangeDisabled),
  28261. placeholder: (0, vue.unref)(t)("el.datepicker.endTime"),
  28262. "model-value": maxVisibleTime.value,
  28263. readonly: !(0, vue.unref)(minDate) || !_ctx.editable,
  28264. "validate-event": false,
  28265. onFocus: _cache[7] || (_cache[7] = ($event) => (0, vue.unref)(minDate) && (maxTimePickerVisible.value = true)),
  28266. onInput: _cache[8] || (_cache[8] = (val) => handleTimeInput(val, "max")),
  28267. onChange: _cache[9] || (_cache[9] = (val) => handleTimeChange(val, "max"))
  28268. }, null, 8, [
  28269. "class",
  28270. "disabled",
  28271. "placeholder",
  28272. "model-value",
  28273. "readonly"
  28274. ]), (0, vue.createVNode)((0, vue.unref)(panel_time_pick_default), {
  28275. "datetime-role": "end",
  28276. visible: maxTimePickerVisible.value,
  28277. format: timeFormat.value,
  28278. "parsed-value": (0, vue.unref)(maxDate) || rightDate.value,
  28279. onPick: handleMaxTimePick
  28280. }, null, 8, [
  28281. "visible",
  28282. "format",
  28283. "parsed-value"
  28284. ])], 2)), [[(0, vue.unref)(ClickOutside), handleMaxTimeClose]])], 2)
  28285. ], 2)) : (0, vue.createCommentVNode)("v-if", true),
  28286. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([
  28287. (0, vue.unref)(ppNs).e("content"),
  28288. (0, vue.unref)(drpNs).e("content"),
  28289. (0, vue.unref)(drpNs).is("left", !_ctx.singlePanel)
  28290. ]) }, [
  28291. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
  28292. (0, vue.createElementVNode)("button", {
  28293. type: "button",
  28294. class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-left"]),
  28295. "aria-label": (0, vue.unref)(t)(`el.datepicker.prevYear`),
  28296. disabled: (0, vue.unref)(dateRangeDisabled),
  28297. onClick: leftPrevYear
  28298. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28299. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
  28300. _: 1
  28301. })])], 10, _hoisted_2$29),
  28302. (0, vue.withDirectives)((0, vue.createElementVNode)("button", {
  28303. type: "button",
  28304. class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "arrow-left"]),
  28305. "aria-label": (0, vue.unref)(t)(`el.datepicker.prevMonth`),
  28306. disabled: (0, vue.unref)(dateRangeDisabled),
  28307. onClick: leftPrevMonth
  28308. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28309. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
  28310. _: 1
  28311. })])], 10, _hoisted_3$13), [[vue.vShow, (0, vue.unref)(leftCurrentView) === "date"]]),
  28312. _ctx.unlinkPanels || _ctx.singlePanel ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  28313. key: 0,
  28314. type: "button",
  28315. disabled: !enableYearArrow.value || (0, vue.unref)(dateRangeDisabled),
  28316. class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableYearArrow.value || (0, vue.unref)(dateRangeDisabled))], "d-arrow-right"]),
  28317. "aria-label": (0, vue.unref)(t)(`el.datepicker.nextYear`),
  28318. onClick: leftNextYear
  28319. }, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28320. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
  28321. _: 1
  28322. })])], 10, _hoisted_4$10)) : (0, vue.createCommentVNode)("v-if", true),
  28323. _ctx.unlinkPanels && (0, vue.unref)(leftCurrentView) === "date" || _ctx.singlePanel ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  28324. key: 1,
  28325. type: "button",
  28326. disabled: !enableMonthArrow.value || (0, vue.unref)(dateRangeDisabled),
  28327. class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableMonthArrow.value || (0, vue.unref)(dateRangeDisabled))], "arrow-right"]),
  28328. "aria-label": (0, vue.unref)(t)(`el.datepicker.nextMonth`),
  28329. onClick: leftNextMonth
  28330. }, [(0, vue.renderSlot)(_ctx.$slots, "next-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28331. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
  28332. _: 1
  28333. })])], 10, _hoisted_5$7)) : (0, vue.createCommentVNode)("v-if", true),
  28334. (0, vue.createElementVNode)("div", null, [(0, vue.createElementVNode)("span", {
  28335. role: "button",
  28336. class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header-label")),
  28337. "aria-live": "polite",
  28338. tabindex: _ctx.disabled ? void 0 : 0,
  28339. "aria-disabled": _ctx.disabled,
  28340. onKeydown: _cache[10] || (_cache[10] = (0, vue.withKeys)(($event) => (0, vue.unref)(showLeftPicker)("year"), ["enter"])),
  28341. onClick: _cache[11] || (_cache[11] = ($event) => (0, vue.unref)(showLeftPicker)("year"))
  28342. }, (0, vue.toDisplayString)((0, vue.unref)(leftYearLabel)), 43, _hoisted_6$2), (0, vue.withDirectives)((0, vue.createElementVNode)("span", {
  28343. role: "button",
  28344. "aria-live": "polite",
  28345. tabindex: _ctx.disabled ? void 0 : 0,
  28346. "aria-disabled": _ctx.disabled,
  28347. class: (0, vue.normalizeClass)([(0, vue.unref)(drpNs).e("header-label"), { active: (0, vue.unref)(leftCurrentView) === "month" }]),
  28348. onKeydown: _cache[12] || (_cache[12] = (0, vue.withKeys)(($event) => (0, vue.unref)(showLeftPicker)("month"), ["enter"])),
  28349. onClick: _cache[13] || (_cache[13] = ($event) => (0, vue.unref)(showLeftPicker)("month"))
  28350. }, (0, vue.toDisplayString)((0, vue.unref)(t)(`el.datepicker.month${leftDate.value.month() + 1}`)), 43, _hoisted_7$1), [[vue.vShow, (0, vue.unref)(leftCurrentView) === "date"]])])
  28351. ], 2),
  28352. (0, vue.unref)(leftCurrentView) === "date" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_date_table_default, {
  28353. key: 0,
  28354. ref_key: "leftCurrentViewRef",
  28355. ref: leftCurrentViewRef,
  28356. "selection-mode": "range",
  28357. date: leftDate.value,
  28358. "min-date": (0, vue.unref)(minDate),
  28359. "max-date": (0, vue.unref)(maxDate),
  28360. "range-state": (0, vue.unref)(rangeState),
  28361. "disabled-date": (0, vue.unref)(disabledDate),
  28362. "cell-class-name": (0, vue.unref)(cellClassName),
  28363. "show-week-number": _ctx.showWeekNumber,
  28364. disabled: (0, vue.unref)(dateRangeDisabled),
  28365. onChangerange: (0, vue.unref)(handleChangeRange),
  28366. onPick: handleRangePick,
  28367. onSelect: (0, vue.unref)(onSelect)
  28368. }, null, 8, [
  28369. "date",
  28370. "min-date",
  28371. "max-date",
  28372. "range-state",
  28373. "disabled-date",
  28374. "cell-class-name",
  28375. "show-week-number",
  28376. "disabled",
  28377. "onChangerange",
  28378. "onSelect"
  28379. ])) : (0, vue.createCommentVNode)("v-if", true),
  28380. (0, vue.unref)(leftCurrentView) === "year" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_year_table_default, {
  28381. key: 1,
  28382. ref_key: "leftCurrentViewRef",
  28383. ref: leftCurrentViewRef,
  28384. "selection-mode": "year",
  28385. date: leftDate.value,
  28386. "disabled-date": (0, vue.unref)(disabledDate),
  28387. "parsed-value": _ctx.parsedValue,
  28388. disabled: (0, vue.unref)(dateRangeDisabled),
  28389. onPick: (0, vue.unref)(handleLeftYearPick)
  28390. }, null, 8, [
  28391. "date",
  28392. "disabled-date",
  28393. "parsed-value",
  28394. "disabled",
  28395. "onPick"
  28396. ])) : (0, vue.createCommentVNode)("v-if", true),
  28397. (0, vue.unref)(leftCurrentView) === "month" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_month_table_default, {
  28398. key: 2,
  28399. ref_key: "leftCurrentViewRef",
  28400. ref: leftCurrentViewRef,
  28401. "selection-mode": "month",
  28402. date: leftDate.value,
  28403. "parsed-value": _ctx.parsedValue,
  28404. "disabled-date": (0, vue.unref)(disabledDate),
  28405. disabled: (0, vue.unref)(dateRangeDisabled),
  28406. onPick: (0, vue.unref)(handleLeftMonthPick)
  28407. }, null, 8, [
  28408. "date",
  28409. "parsed-value",
  28410. "disabled-date",
  28411. "disabled",
  28412. "onPick"
  28413. ])) : (0, vue.createCommentVNode)("v-if", true)
  28414. ], 2),
  28415. !_ctx.singlePanel ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  28416. key: 1,
  28417. class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("content"), (0, vue.unref)(drpNs).e("content")], "is-right"])
  28418. }, [
  28419. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
  28420. _ctx.unlinkPanels ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  28421. key: 0,
  28422. type: "button",
  28423. disabled: !enableYearArrow.value || (0, vue.unref)(dateRangeDisabled),
  28424. class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableYearArrow.value || (0, vue.unref)(dateRangeDisabled))], "d-arrow-left"]),
  28425. "aria-label": (0, vue.unref)(t)(`el.datepicker.prevYear`),
  28426. onClick: rightPrevYear
  28427. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28428. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
  28429. _: 1
  28430. })])], 10, _hoisted_8$1)) : (0, vue.createCommentVNode)("v-if", true),
  28431. _ctx.unlinkPanels && (0, vue.unref)(rightCurrentView) === "date" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  28432. key: 1,
  28433. type: "button",
  28434. disabled: !enableMonthArrow.value || (0, vue.unref)(dateRangeDisabled),
  28435. class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableMonthArrow.value || (0, vue.unref)(dateRangeDisabled))], "arrow-left"]),
  28436. "aria-label": (0, vue.unref)(t)(`el.datepicker.prevMonth`),
  28437. onClick: rightPrevMonth
  28438. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28439. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
  28440. _: 1
  28441. })])], 10, _hoisted_9$1)) : (0, vue.createCommentVNode)("v-if", true),
  28442. (0, vue.createElementVNode)("button", {
  28443. type: "button",
  28444. "aria-label": (0, vue.unref)(t)(`el.datepicker.nextYear`),
  28445. class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-right"]),
  28446. disabled: (0, vue.unref)(dateRangeDisabled),
  28447. onClick: rightNextYear
  28448. }, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28449. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
  28450. _: 1
  28451. })])], 10, _hoisted_10$1),
  28452. (0, vue.withDirectives)((0, vue.createElementVNode)("button", {
  28453. type: "button",
  28454. class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "arrow-right"]),
  28455. disabled: (0, vue.unref)(dateRangeDisabled),
  28456. "aria-label": (0, vue.unref)(t)(`el.datepicker.nextMonth`),
  28457. onClick: rightNextMonth
  28458. }, [(0, vue.renderSlot)(_ctx.$slots, "next-month", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28459. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
  28460. _: 1
  28461. })])], 10, _hoisted_11$1), [[vue.vShow, (0, vue.unref)(rightCurrentView) === "date"]]),
  28462. (0, vue.createElementVNode)("div", null, [(0, vue.createElementVNode)("span", {
  28463. role: "button",
  28464. class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header-label")),
  28465. "aria-live": "polite",
  28466. tabindex: _ctx.disabled ? void 0 : 0,
  28467. "aria-disabled": _ctx.disabled,
  28468. onKeydown: _cache[14] || (_cache[14] = (0, vue.withKeys)(($event) => (0, vue.unref)(showRightPicker)("year"), ["enter"])),
  28469. onClick: _cache[15] || (_cache[15] = ($event) => (0, vue.unref)(showRightPicker)("year"))
  28470. }, (0, vue.toDisplayString)((0, vue.unref)(rightYearLabel)), 43, _hoisted_12$1), (0, vue.withDirectives)((0, vue.createElementVNode)("span", {
  28471. role: "button",
  28472. "aria-live": "polite",
  28473. tabindex: _ctx.disabled ? void 0 : 0,
  28474. "aria-disabled": _ctx.disabled,
  28475. class: (0, vue.normalizeClass)([(0, vue.unref)(drpNs).e("header-label"), { active: (0, vue.unref)(rightCurrentView) === "month" }]),
  28476. onKeydown: _cache[16] || (_cache[16] = (0, vue.withKeys)(($event) => (0, vue.unref)(showRightPicker)("month"), ["enter"])),
  28477. onClick: _cache[17] || (_cache[17] = ($event) => (0, vue.unref)(showRightPicker)("month"))
  28478. }, (0, vue.toDisplayString)((0, vue.unref)(t)(`el.datepicker.month${rightDate.value.month() + 1}`)), 43, _hoisted_13$1), [[vue.vShow, (0, vue.unref)(rightCurrentView) === "date"]])])
  28479. ], 2),
  28480. (0, vue.unref)(rightCurrentView) === "date" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_date_table_default, {
  28481. key: 0,
  28482. ref_key: "rightCurrentViewRef",
  28483. ref: rightCurrentViewRef,
  28484. "selection-mode": "range",
  28485. date: rightDate.value,
  28486. "min-date": (0, vue.unref)(minDate),
  28487. "max-date": (0, vue.unref)(maxDate),
  28488. "range-state": (0, vue.unref)(rangeState),
  28489. "disabled-date": (0, vue.unref)(disabledDate),
  28490. "cell-class-name": (0, vue.unref)(cellClassName),
  28491. "show-week-number": _ctx.showWeekNumber,
  28492. disabled: (0, vue.unref)(dateRangeDisabled),
  28493. onChangerange: (0, vue.unref)(handleChangeRange),
  28494. onPick: handleRangePick,
  28495. onSelect: (0, vue.unref)(onSelect)
  28496. }, null, 8, [
  28497. "date",
  28498. "min-date",
  28499. "max-date",
  28500. "range-state",
  28501. "disabled-date",
  28502. "cell-class-name",
  28503. "show-week-number",
  28504. "disabled",
  28505. "onChangerange",
  28506. "onSelect"
  28507. ])) : (0, vue.createCommentVNode)("v-if", true),
  28508. (0, vue.unref)(rightCurrentView) === "year" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_year_table_default, {
  28509. key: 1,
  28510. ref_key: "rightCurrentViewRef",
  28511. ref: rightCurrentViewRef,
  28512. "selection-mode": "year",
  28513. date: rightDate.value,
  28514. "disabled-date": (0, vue.unref)(disabledDate),
  28515. "parsed-value": _ctx.parsedValue,
  28516. disabled: (0, vue.unref)(dateRangeDisabled),
  28517. onPick: (0, vue.unref)(handleRightYearPick)
  28518. }, null, 8, [
  28519. "date",
  28520. "disabled-date",
  28521. "parsed-value",
  28522. "disabled",
  28523. "onPick"
  28524. ])) : (0, vue.createCommentVNode)("v-if", true),
  28525. (0, vue.unref)(rightCurrentView) === "month" ? ((0, vue.openBlock)(), (0, vue.createBlock)(basic_month_table_default, {
  28526. key: 2,
  28527. ref_key: "rightCurrentViewRef",
  28528. ref: rightCurrentViewRef,
  28529. "selection-mode": "month",
  28530. date: rightDate.value,
  28531. "parsed-value": _ctx.parsedValue,
  28532. "disabled-date": (0, vue.unref)(disabledDate),
  28533. disabled: (0, vue.unref)(dateRangeDisabled),
  28534. onPick: (0, vue.unref)(handleRightMonthPick)
  28535. }, null, 8, [
  28536. "date",
  28537. "parsed-value",
  28538. "disabled-date",
  28539. "disabled",
  28540. "onPick"
  28541. ])) : (0, vue.createCommentVNode)("v-if", true)
  28542. ], 2)) : (0, vue.createCommentVNode)("v-if", true)
  28543. ], 2)
  28544. ], 2), _ctx.showFooter && showTime.value && (_ctx.showConfirm || (0, vue.unref)(clearable)) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  28545. key: 0,
  28546. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("footer"))
  28547. }, [(0, vue.unref)(clearable) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), {
  28548. key: 0,
  28549. text: "",
  28550. size: "small",
  28551. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("link-btn")),
  28552. onClick: onClear
  28553. }, {
  28554. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.clear")), 1)]),
  28555. _: 1
  28556. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), _ctx.showConfirm ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), {
  28557. key: 1,
  28558. plain: "",
  28559. size: "small",
  28560. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("link-btn")),
  28561. disabled: btnDisabled.value,
  28562. onClick: _cache[18] || (_cache[18] = ($event) => (0, vue.unref)(handleRangeConfirm)(false))
  28563. }, {
  28564. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.datepicker.confirm")), 1)]),
  28565. _: 1
  28566. }, 8, ["class", "disabled"])) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2);
  28567. };
  28568. }
  28569. });
  28570. //#endregion
  28571. //#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-date-range.vue
  28572. var panel_date_range_default = panel_date_range_vue_vue_type_script_setup_true_lang_default;
  28573. //#endregion
  28574. //#region ../../packages/components/date-picker-panel/src/props/panel-month-range.ts
  28575. const panelMonthRangeProps = buildProps({ ...panelRangeSharedProps });
  28576. const panelMonthRangeEmits = [
  28577. "pick",
  28578. "set-picker-option",
  28579. "calendar-change"
  28580. ];
  28581. //#endregion
  28582. //#region ../../packages/components/date-picker-panel/src/composables/use-month-range-header.ts
  28583. const useMonthRangeHeader = ({ unlinkPanels, leftDate, rightDate }) => {
  28584. const { t } = useLocale();
  28585. const leftPrevYear = () => {
  28586. leftDate.value = leftDate.value.subtract(1, "year");
  28587. if (!unlinkPanels.value) rightDate.value = rightDate.value.subtract(1, "year");
  28588. };
  28589. const rightNextYear = () => {
  28590. if (!unlinkPanels.value) leftDate.value = leftDate.value.add(1, "year");
  28591. rightDate.value = rightDate.value.add(1, "year");
  28592. };
  28593. const leftNextYear = () => {
  28594. leftDate.value = leftDate.value.add(1, "year");
  28595. };
  28596. const rightPrevYear = () => {
  28597. rightDate.value = rightDate.value.subtract(1, "year");
  28598. };
  28599. return {
  28600. leftPrevYear,
  28601. rightNextYear,
  28602. leftNextYear,
  28603. rightPrevYear,
  28604. leftLabel: (0, vue.computed)(() => {
  28605. return `${leftDate.value.year()} ${t("el.datepicker.year")}`;
  28606. }),
  28607. rightLabel: (0, vue.computed)(() => {
  28608. return `${rightDate.value.year()} ${t("el.datepicker.year")}`;
  28609. }),
  28610. leftYear: (0, vue.computed)(() => {
  28611. return leftDate.value.year();
  28612. }),
  28613. rightYear: (0, vue.computed)(() => {
  28614. return rightDate.value.year() === leftDate.value.year() ? leftDate.value.year() + 1 : rightDate.value.year();
  28615. })
  28616. };
  28617. };
  28618. //#endregion
  28619. //#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-month-range.vue?vue&type=script&setup=true&lang.ts
  28620. const _hoisted_1$46 = ["disabled", "onClick"];
  28621. const _hoisted_2$28 = ["disabled"];
  28622. const _hoisted_3$12 = ["disabled"];
  28623. const _hoisted_4$9 = ["disabled"];
  28624. const _hoisted_5$6 = ["disabled"];
  28625. const unit$1 = "year";
  28626. var panel_month_range_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  28627. name: "DatePickerMonthRange",
  28628. __name: "panel-month-range",
  28629. props: panelMonthRangeProps,
  28630. emits: panelMonthRangeEmits,
  28631. setup(__props, { emit: __emit }) {
  28632. const props = __props;
  28633. const emit = __emit;
  28634. const { lang } = useLocale();
  28635. const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
  28636. const isDefaultFormat = (0, vue.inject)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, void 0);
  28637. const { shortcuts, disabledDate, cellClassName } = pickerBase.props;
  28638. const format = (0, vue.toRef)(pickerBase.props, "format");
  28639. const defaultValue = (0, vue.toRef)(pickerBase.props, "defaultValue");
  28640. const leftDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value));
  28641. const rightDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value).add(1, unit$1));
  28642. const { minDate, maxDate, rangeState, ppNs, drpNs, handleChangeRange, handleRangeConfirm, handleShortcutClick, onSelect, parseValue } = useRangePicker(props, {
  28643. defaultValue,
  28644. leftDate,
  28645. rightDate,
  28646. unit: unit$1,
  28647. sortDates
  28648. });
  28649. const hasShortcuts = (0, vue.computed)(() => !!shortcuts.length);
  28650. const { leftPrevYear, rightNextYear, leftNextYear, rightPrevYear, leftLabel, rightLabel, leftYear, rightYear } = useMonthRangeHeader({
  28651. unlinkPanels: (0, vue.toRef)(props, "unlinkPanels"),
  28652. leftDate,
  28653. rightDate
  28654. });
  28655. const enableYearArrow = (0, vue.computed)(() => {
  28656. return props.singlePanel || props.unlinkPanels && rightYear.value > leftYear.value + 1;
  28657. });
  28658. const handleRangePick = (val, close = true) => {
  28659. const minDate_ = val.minDate;
  28660. const maxDate_ = val.maxDate;
  28661. if (maxDate.value === maxDate_ && minDate.value === minDate_) return;
  28662. emit("calendar-change", [minDate_.toDate(), maxDate_ && maxDate_.toDate()]);
  28663. maxDate.value = maxDate_;
  28664. minDate.value = minDate_;
  28665. if (!close) return;
  28666. handleRangeConfirm();
  28667. };
  28668. const handleClear = () => {
  28669. let valueOnClear = null;
  28670. if (pickerBase?.emptyValues) valueOnClear = pickerBase.emptyValues.valueOnClear.value;
  28671. leftDate.value = getDefaultValue((0, vue.unref)(defaultValue), {
  28672. lang: (0, vue.unref)(lang),
  28673. unit: "year",
  28674. unlinkPanels: props.unlinkPanels
  28675. })[0];
  28676. rightDate.value = leftDate.value.add(1, "year");
  28677. emit("pick", valueOnClear);
  28678. };
  28679. const parseUserInput = (value) => {
  28680. return correctlyParseUserInput(value, format.value, lang.value, isDefaultFormat);
  28681. };
  28682. function sortDates(minDate, maxDate) {
  28683. if (props.unlinkPanels && maxDate) rightDate.value = (minDate?.year() || 0) === maxDate.year() ? maxDate.add(1, unit$1) : maxDate;
  28684. else rightDate.value = leftDate.value.add(1, unit$1);
  28685. }
  28686. const monthRangeDisabled = useFormDisabled();
  28687. (0, vue.watch)(() => props.visible, (visible) => {
  28688. if (!visible && rangeState.value.selecting) {
  28689. parseValue(props.parsedValue);
  28690. onSelect(false);
  28691. }
  28692. });
  28693. emit("set-picker-option", ["isValidValue", isValidRange]);
  28694. emit("set-picker-option", ["parseUserInput", parseUserInput]);
  28695. emit("set-picker-option", ["handleClear", handleClear]);
  28696. return (_ctx, _cache) => {
  28697. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([
  28698. (0, vue.unref)(ppNs).b(),
  28699. (0, vue.unref)(drpNs).b(),
  28700. (0, vue.unref)(ppNs).is("border", _ctx.border),
  28701. (0, vue.unref)(ppNs).is("disabled", (0, vue.unref)(monthRangeDisabled)),
  28702. {
  28703. "has-sidebar": Boolean(_ctx.$slots.sidebar) || hasShortcuts.value,
  28704. "single-panel": _ctx.singlePanel
  28705. }
  28706. ]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body-wrapper")) }, [
  28707. (0, vue.renderSlot)(_ctx.$slots, "sidebar", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar")) }),
  28708. hasShortcuts.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  28709. key: 0,
  28710. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar"))
  28711. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(shortcuts), (shortcut, key) => {
  28712. return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  28713. key,
  28714. type: "button",
  28715. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("shortcut")),
  28716. disabled: (0, vue.unref)(monthRangeDisabled),
  28717. onClick: ($event) => (0, vue.unref)(handleShortcutClick)(shortcut)
  28718. }, (0, vue.toDisplayString)(shortcut.text), 11, _hoisted_1$46);
  28719. }), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true),
  28720. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([
  28721. (0, vue.unref)(ppNs).e("content"),
  28722. (0, vue.unref)(drpNs).e("content"),
  28723. (0, vue.unref)(drpNs).is("left", !_ctx.singlePanel)
  28724. ]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
  28725. (0, vue.createElementVNode)("button", {
  28726. type: "button",
  28727. class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-left"]),
  28728. disabled: (0, vue.unref)(monthRangeDisabled),
  28729. onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(leftPrevYear) && (0, vue.unref)(leftPrevYear)(...args))
  28730. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28731. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
  28732. _: 1
  28733. })])], 10, _hoisted_2$28),
  28734. _ctx.unlinkPanels || _ctx.singlePanel ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  28735. key: 0,
  28736. type: "button",
  28737. disabled: !enableYearArrow.value || (0, vue.unref)(monthRangeDisabled),
  28738. class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableYearArrow.value || (0, vue.unref)(monthRangeDisabled))], "d-arrow-right"]),
  28739. onClick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(leftNextYear) && (0, vue.unref)(leftNextYear)(...args))
  28740. }, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28741. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
  28742. _: 1
  28743. })])], 10, _hoisted_3$12)) : (0, vue.createCommentVNode)("v-if", true),
  28744. (0, vue.createElementVNode)("div", null, (0, vue.toDisplayString)((0, vue.unref)(leftLabel)), 1)
  28745. ], 2), (0, vue.createVNode)(basic_month_table_default, {
  28746. "selection-mode": "range",
  28747. date: leftDate.value,
  28748. "min-date": (0, vue.unref)(minDate),
  28749. "max-date": (0, vue.unref)(maxDate),
  28750. "range-state": (0, vue.unref)(rangeState),
  28751. "disabled-date": (0, vue.unref)(disabledDate),
  28752. disabled: (0, vue.unref)(monthRangeDisabled),
  28753. "cell-class-name": (0, vue.unref)(cellClassName),
  28754. onChangerange: (0, vue.unref)(handleChangeRange),
  28755. onPick: handleRangePick,
  28756. onSelect: (0, vue.unref)(onSelect)
  28757. }, null, 8, [
  28758. "date",
  28759. "min-date",
  28760. "max-date",
  28761. "range-state",
  28762. "disabled-date",
  28763. "disabled",
  28764. "cell-class-name",
  28765. "onChangerange",
  28766. "onSelect"
  28767. ])], 2), !_ctx.singlePanel ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  28768. key: 0,
  28769. class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("content"), (0, vue.unref)(drpNs).e("content")], "is-right"])
  28770. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
  28771. _ctx.unlinkPanels ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  28772. key: 0,
  28773. type: "button",
  28774. disabled: !enableYearArrow.value || (0, vue.unref)(monthRangeDisabled),
  28775. class: (0, vue.normalizeClass)([[(0, vue.unref)(ppNs).e("icon-btn"), (0, vue.unref)(ppNs).is("disabled", !enableYearArrow.value || (0, vue.unref)(monthRangeDisabled))], "d-arrow-left"]),
  28776. onClick: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(rightPrevYear) && (0, vue.unref)(rightPrevYear)(...args))
  28777. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28778. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
  28779. _: 1
  28780. })])], 10, _hoisted_4$9)) : (0, vue.createCommentVNode)("v-if", true),
  28781. (0, vue.createElementVNode)("button", {
  28782. type: "button",
  28783. class: (0, vue.normalizeClass)([(0, vue.unref)(ppNs).e("icon-btn"), "d-arrow-right"]),
  28784. disabled: (0, vue.unref)(monthRangeDisabled),
  28785. onClick: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(rightNextYear) && (0, vue.unref)(rightNextYear)(...args))
  28786. }, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  28787. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
  28788. _: 1
  28789. })])], 10, _hoisted_5$6),
  28790. (0, vue.createElementVNode)("div", null, (0, vue.toDisplayString)((0, vue.unref)(rightLabel)), 1)
  28791. ], 2), (0, vue.createVNode)(basic_month_table_default, {
  28792. "selection-mode": "range",
  28793. date: rightDate.value,
  28794. "min-date": (0, vue.unref)(minDate),
  28795. "max-date": (0, vue.unref)(maxDate),
  28796. "range-state": (0, vue.unref)(rangeState),
  28797. "disabled-date": (0, vue.unref)(disabledDate),
  28798. disabled: (0, vue.unref)(monthRangeDisabled),
  28799. "cell-class-name": (0, vue.unref)(cellClassName),
  28800. onChangerange: (0, vue.unref)(handleChangeRange),
  28801. onPick: handleRangePick,
  28802. onSelect: (0, vue.unref)(onSelect)
  28803. }, null, 8, [
  28804. "date",
  28805. "min-date",
  28806. "max-date",
  28807. "range-state",
  28808. "disabled-date",
  28809. "disabled",
  28810. "cell-class-name",
  28811. "onChangerange",
  28812. "onSelect"
  28813. ])], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2)
  28814. ], 2)], 2);
  28815. };
  28816. }
  28817. });
  28818. //#endregion
  28819. //#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-month-range.vue
  28820. var panel_month_range_default = panel_month_range_vue_vue_type_script_setup_true_lang_default;
  28821. //#endregion
  28822. //#region ../../packages/components/date-picker-panel/src/props/panel-year-range.ts
  28823. const panelYearRangeProps = buildProps({ ...panelRangeSharedProps });
  28824. const panelYearRangeEmits = [
  28825. "pick",
  28826. "set-picker-option",
  28827. "calendar-change"
  28828. ];
  28829. //#endregion
  28830. //#region ../../packages/components/date-picker-panel/src/composables/use-year-range-header.ts
  28831. const useYearRangeHeader = ({ unlinkPanels, leftDate, rightDate }) => {
  28832. const leftPrevYear = () => {
  28833. leftDate.value = leftDate.value.subtract(10, "year");
  28834. if (!unlinkPanels.value) rightDate.value = rightDate.value.subtract(10, "year");
  28835. };
  28836. const rightNextYear = () => {
  28837. if (!unlinkPanels.value) leftDate.value = leftDate.value.add(10, "year");
  28838. rightDate.value = rightDate.value.add(10, "year");
  28839. };
  28840. const leftNextYear = () => {
  28841. leftDate.value = leftDate.value.add(10, "year");
  28842. };
  28843. const rightPrevYear = () => {
  28844. rightDate.value = rightDate.value.subtract(10, "year");
  28845. };
  28846. return {
  28847. leftPrevYear,
  28848. rightNextYear,
  28849. leftNextYear,
  28850. rightPrevYear,
  28851. leftLabel: (0, vue.computed)(() => {
  28852. const leftStartDate = Math.floor(leftDate.value.year() / 10) * 10;
  28853. return `${leftStartDate}-${leftStartDate + 9}`;
  28854. }),
  28855. rightLabel: (0, vue.computed)(() => {
  28856. const rightStartDate = Math.floor(rightDate.value.year() / 10) * 10;
  28857. return `${rightStartDate}-${rightStartDate + 9}`;
  28858. }),
  28859. leftYear: (0, vue.computed)(() => {
  28860. return Math.floor(leftDate.value.year() / 10) * 10 + 9;
  28861. }),
  28862. rightYear: (0, vue.computed)(() => {
  28863. return Math.floor(rightDate.value.year() / 10) * 10;
  28864. })
  28865. };
  28866. };
  28867. //#endregion
  28868. //#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-year-range.vue?vue&type=script&setup=true&lang.ts
  28869. const _hoisted_1$45 = ["disabled", "onClick"];
  28870. const _hoisted_2$27 = ["disabled"];
  28871. const _hoisted_3$11 = ["disabled"];
  28872. const _hoisted_4$8 = ["disabled"];
  28873. const _hoisted_5$5 = ["disabled"];
  28874. const step = 10;
  28875. const unit = "year";
  28876. var panel_year_range_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  28877. name: "DatePickerYearRange",
  28878. __name: "panel-year-range",
  28879. props: panelYearRangeProps,
  28880. emits: panelYearRangeEmits,
  28881. setup(__props, { emit: __emit }) {
  28882. const props = __props;
  28883. const emit = __emit;
  28884. const { lang } = useLocale();
  28885. const leftDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value));
  28886. const rightDate = (0, vue.ref)((0, import_dayjs_min.default)().locale(lang.value).add(step, unit));
  28887. const isDefaultFormat = (0, vue.inject)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, void 0);
  28888. const pickerBase = (0, vue.inject)(PICKER_BASE_INJECTION_KEY);
  28889. const { shortcuts, disabledDate, cellClassName } = pickerBase.props;
  28890. const format = (0, vue.toRef)(pickerBase.props, "format");
  28891. const defaultValue = (0, vue.toRef)(pickerBase.props, "defaultValue");
  28892. const { minDate, maxDate, rangeState, ppNs, drpNs, handleChangeRange, handleRangeConfirm, handleShortcutClick, onSelect, parseValue } = useRangePicker(props, {
  28893. defaultValue,
  28894. leftDate,
  28895. rightDate,
  28896. step,
  28897. unit,
  28898. sortDates
  28899. });
  28900. const { leftPrevYear, rightNextYear, leftNextYear, rightPrevYear, leftLabel, rightLabel, leftYear, rightYear } = useYearRangeHeader({
  28901. unlinkPanels: (0, vue.toRef)(props, "unlinkPanels"),
  28902. leftDate,
  28903. rightDate
  28904. });
  28905. const yearRangeDisabled = useFormDisabled();
  28906. const hasShortcuts = (0, vue.computed)(() => !!shortcuts.length);
  28907. const panelKls = (0, vue.computed)(() => [
  28908. ppNs.b(),
  28909. drpNs.b(),
  28910. ppNs.is("border", props.border),
  28911. ppNs.is("disabled", yearRangeDisabled.value),
  28912. {
  28913. "has-sidebar": Boolean((0, vue.useSlots)().sidebar) || hasShortcuts.value,
  28914. "single-panel": props.singlePanel
  28915. }
  28916. ]);
  28917. const leftPanelKls = (0, vue.computed)(() => {
  28918. return {
  28919. content: [
  28920. ppNs.e("content"),
  28921. drpNs.e("content"),
  28922. drpNs.is("left", !props.singlePanel)
  28923. ],
  28924. arrowLeftBtn: [ppNs.e("icon-btn"), "d-arrow-left"],
  28925. arrowRightBtn: [
  28926. ppNs.e("icon-btn"),
  28927. ppNs.is("disabled", !enableYearArrow.value || yearRangeDisabled.value),
  28928. "d-arrow-right"
  28929. ]
  28930. };
  28931. });
  28932. const rightPanelKls = (0, vue.computed)(() => {
  28933. return {
  28934. content: [
  28935. ppNs.e("content"),
  28936. drpNs.e("content"),
  28937. "is-right"
  28938. ],
  28939. arrowLeftBtn: [
  28940. ppNs.e("icon-btn"),
  28941. ppNs.is("disabled", !enableYearArrow.value || yearRangeDisabled.value),
  28942. "d-arrow-left"
  28943. ],
  28944. arrowRightBtn: [ppNs.e("icon-btn"), "d-arrow-right"]
  28945. };
  28946. });
  28947. const enableYearArrow = (0, vue.computed)(() => {
  28948. return props.singlePanel || props.unlinkPanels && rightYear.value > leftYear.value + 1;
  28949. });
  28950. const handleRangePick = (val, close = true) => {
  28951. const minDate_ = val.minDate;
  28952. const maxDate_ = val.maxDate;
  28953. if (maxDate.value === maxDate_ && minDate.value === minDate_) return;
  28954. emit("calendar-change", [minDate_.toDate(), maxDate_ && maxDate_.toDate()]);
  28955. maxDate.value = maxDate_;
  28956. minDate.value = minDate_;
  28957. if (!close) return;
  28958. handleRangeConfirm();
  28959. };
  28960. const parseUserInput = (value) => {
  28961. return correctlyParseUserInput(value, format.value, lang.value, isDefaultFormat);
  28962. };
  28963. const isValidValue = (date) => {
  28964. return isValidRange(date) && (disabledDate ? !disabledDate(date[0].toDate()) && !disabledDate(date[1].toDate()) : true);
  28965. };
  28966. const handleClear = () => {
  28967. let valueOnClear = null;
  28968. if (pickerBase?.emptyValues) valueOnClear = pickerBase.emptyValues.valueOnClear.value;
  28969. const defaultArr = getDefaultValue((0, vue.unref)(defaultValue), {
  28970. lang: (0, vue.unref)(lang),
  28971. step,
  28972. unit,
  28973. unlinkPanels: props.unlinkPanels
  28974. });
  28975. leftDate.value = defaultArr[0];
  28976. rightDate.value = defaultArr[1];
  28977. emit("pick", valueOnClear);
  28978. };
  28979. function sortDates(minDate, maxDate) {
  28980. if (props.unlinkPanels && maxDate) {
  28981. const minDateYear = minDate?.year() || 0;
  28982. const maxDateYear = maxDate.year();
  28983. rightDate.value = minDateYear + step > maxDateYear ? maxDate.add(step, unit) : maxDate;
  28984. } else rightDate.value = leftDate.value.add(step, unit);
  28985. }
  28986. (0, vue.watch)(() => props.visible, (visible) => {
  28987. if (!visible && rangeState.value.selecting) {
  28988. parseValue(props.parsedValue);
  28989. onSelect(false);
  28990. }
  28991. });
  28992. emit("set-picker-option", ["isValidValue", isValidValue]);
  28993. emit("set-picker-option", ["parseUserInput", parseUserInput]);
  28994. emit("set-picker-option", ["handleClear", handleClear]);
  28995. return (_ctx, _cache) => {
  28996. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)(panelKls.value) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body-wrapper")) }, [
  28997. (0, vue.renderSlot)(_ctx.$slots, "sidebar", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar")) }),
  28998. hasShortcuts.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  28999. key: 0,
  29000. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("sidebar"))
  29001. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(shortcuts), (shortcut, key) => {
  29002. return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  29003. key,
  29004. type: "button",
  29005. class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("shortcut")),
  29006. disabled: (0, vue.unref)(yearRangeDisabled),
  29007. onClick: ($event) => (0, vue.unref)(handleShortcutClick)(shortcut)
  29008. }, (0, vue.toDisplayString)(shortcut.text), 11, _hoisted_1$45);
  29009. }), 128))], 2)) : (0, vue.createCommentVNode)("v-if", true),
  29010. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ppNs).e("body")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(leftPanelKls.value.content) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
  29011. (0, vue.createElementVNode)("button", {
  29012. type: "button",
  29013. class: (0, vue.normalizeClass)(leftPanelKls.value.arrowLeftBtn),
  29014. disabled: (0, vue.unref)(yearRangeDisabled),
  29015. onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(leftPrevYear) && (0, vue.unref)(leftPrevYear)(...args))
  29016. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  29017. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
  29018. _: 1
  29019. })])], 10, _hoisted_2$27),
  29020. _ctx.unlinkPanels || _ctx.singlePanel ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  29021. key: 0,
  29022. type: "button",
  29023. disabled: !enableYearArrow.value || (0, vue.unref)(yearRangeDisabled),
  29024. class: (0, vue.normalizeClass)(leftPanelKls.value.arrowRightBtn),
  29025. onClick: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(leftNextYear) && (0, vue.unref)(leftNextYear)(...args))
  29026. }, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  29027. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
  29028. _: 1
  29029. })])], 10, _hoisted_3$11)) : (0, vue.createCommentVNode)("v-if", true),
  29030. (0, vue.createElementVNode)("div", null, (0, vue.toDisplayString)((0, vue.unref)(leftLabel)), 1)
  29031. ], 2), (0, vue.createVNode)(basic_year_table_default, {
  29032. "selection-mode": "range",
  29033. date: leftDate.value,
  29034. "min-date": (0, vue.unref)(minDate),
  29035. "max-date": (0, vue.unref)(maxDate),
  29036. "range-state": (0, vue.unref)(rangeState),
  29037. "disabled-date": (0, vue.unref)(disabledDate),
  29038. disabled: (0, vue.unref)(yearRangeDisabled),
  29039. "cell-class-name": (0, vue.unref)(cellClassName),
  29040. onChangerange: (0, vue.unref)(handleChangeRange),
  29041. onPick: handleRangePick,
  29042. onSelect: (0, vue.unref)(onSelect)
  29043. }, null, 8, [
  29044. "date",
  29045. "min-date",
  29046. "max-date",
  29047. "range-state",
  29048. "disabled-date",
  29049. "disabled",
  29050. "cell-class-name",
  29051. "onChangerange",
  29052. "onSelect"
  29053. ])], 2), !_ctx.singlePanel ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  29054. key: 0,
  29055. class: (0, vue.normalizeClass)(rightPanelKls.value.content)
  29056. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(drpNs).e("header")) }, [
  29057. _ctx.unlinkPanels ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  29058. key: 0,
  29059. type: "button",
  29060. disabled: !enableYearArrow.value || (0, vue.unref)(yearRangeDisabled),
  29061. class: (0, vue.normalizeClass)(rightPanelKls.value.arrowLeftBtn),
  29062. onClick: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(rightPrevYear) && (0, vue.unref)(rightPrevYear)(...args))
  29063. }, [(0, vue.renderSlot)(_ctx.$slots, "prev-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  29064. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_left_default))]),
  29065. _: 1
  29066. })])], 10, _hoisted_4$8)) : (0, vue.createCommentVNode)("v-if", true),
  29067. (0, vue.createElementVNode)("button", {
  29068. type: "button",
  29069. class: (0, vue.normalizeClass)(rightPanelKls.value.arrowRightBtn),
  29070. disabled: (0, vue.unref)(yearRangeDisabled),
  29071. onClick: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(rightNextYear) && (0, vue.unref)(rightNextYear)(...args))
  29072. }, [(0, vue.renderSlot)(_ctx.$slots, "next-year", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  29073. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(d_arrow_right_default))]),
  29074. _: 1
  29075. })])], 10, _hoisted_5$5),
  29076. (0, vue.createElementVNode)("div", null, (0, vue.toDisplayString)((0, vue.unref)(rightLabel)), 1)
  29077. ], 2), (0, vue.createVNode)(basic_year_table_default, {
  29078. "selection-mode": "range",
  29079. date: rightDate.value,
  29080. "min-date": (0, vue.unref)(minDate),
  29081. "max-date": (0, vue.unref)(maxDate),
  29082. "range-state": (0, vue.unref)(rangeState),
  29083. "disabled-date": (0, vue.unref)(disabledDate),
  29084. disabled: (0, vue.unref)(yearRangeDisabled),
  29085. "cell-class-name": (0, vue.unref)(cellClassName),
  29086. onChangerange: (0, vue.unref)(handleChangeRange),
  29087. onPick: handleRangePick,
  29088. onSelect: (0, vue.unref)(onSelect)
  29089. }, null, 8, [
  29090. "date",
  29091. "min-date",
  29092. "max-date",
  29093. "range-state",
  29094. "disabled-date",
  29095. "disabled",
  29096. "cell-class-name",
  29097. "onChangerange",
  29098. "onSelect"
  29099. ])], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2)
  29100. ], 2)], 2);
  29101. };
  29102. }
  29103. });
  29104. //#endregion
  29105. //#region ../../packages/components/date-picker-panel/src/date-picker-com/panel-year-range.vue
  29106. var panel_year_range_default = panel_year_range_vue_vue_type_script_setup_true_lang_default;
  29107. //#endregion
  29108. //#region ../../packages/components/date-picker-panel/src/panel-utils.ts
  29109. const getPanel = function(type) {
  29110. switch (type) {
  29111. case "daterange":
  29112. case "datetimerange": return panel_date_range_default;
  29113. case "monthrange": return panel_month_range_default;
  29114. case "yearrange": return panel_year_range_default;
  29115. default: return panel_date_pick_default;
  29116. }
  29117. };
  29118. //#endregion
  29119. //#region ../../packages/components/date-picker-panel/src/date-picker-panel.tsx
  29120. function _isSlot$7(s) {
  29121. return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
  29122. }
  29123. import_dayjs_min.default.extend(import_localeData.default);
  29124. import_dayjs_min.default.extend(import_advancedFormat.default);
  29125. import_dayjs_min.default.extend(import_customParseFormat.default);
  29126. import_dayjs_min.default.extend(import_weekOfYear.default);
  29127. import_dayjs_min.default.extend(import_weekYear.default);
  29128. import_dayjs_min.default.extend(import_dayOfYear.default);
  29129. import_dayjs_min.default.extend(import_isSameOrAfter.default);
  29130. import_dayjs_min.default.extend(import_isSameOrBefore.default);
  29131. var date_picker_panel_default = /* @__PURE__ */ (0, vue.defineComponent)({
  29132. name: "ElDatePickerPanel",
  29133. install: null,
  29134. inheritAttrs: false,
  29135. props: datePickerPanelProps,
  29136. emits: [
  29137. UPDATE_MODEL_EVENT,
  29138. "calendar-change",
  29139. "panel-change",
  29140. "visible-change",
  29141. "clear"
  29142. ],
  29143. setup(props, { slots, emit, attrs }) {
  29144. const ns = useNamespace("picker-panel");
  29145. if (isUndefined((0, vue.inject)("EP_PICKER_BASE", void 0))) (0, vue.provide)(PICKER_BASE_INJECTION_KEY, { props: (0, vue.reactive)({ ...(0, vue.toRefs)(props) }) });
  29146. (0, vue.provide)(ROOT_PICKER_INJECTION_KEY, {
  29147. slots,
  29148. pickerNs: ns
  29149. });
  29150. const { parsedValue, onCalendarChange, onPanelChange, onSetPickerOption, onPick } = (0, vue.inject)(ROOT_COMMON_PICKER_INJECTION_KEY, () => useCommonPicker(props, emit), true);
  29151. return () => {
  29152. return (0, vue.createVNode)(getPanel(props.type), (0, vue.mergeProps)(omit(attrs, "onPick"), props, {
  29153. "parsedValue": parsedValue.value,
  29154. "onSet-picker-option": onSetPickerOption,
  29155. "onCalendar-change": onCalendarChange,
  29156. "onPanel-change": onPanelChange,
  29157. "onClear": () => emit("clear"),
  29158. "onPick": onPick
  29159. }), _isSlot$7(slots) ? slots : { default: () => [slots] });
  29160. };
  29161. }
  29162. });
  29163. //#endregion
  29164. //#region ../../packages/components/date-picker-panel/index.ts
  29165. const ElDatePickerPanel = withInstall(date_picker_panel_default);
  29166. //#endregion
  29167. //#region ../../packages/components/date-picker/src/props.ts
  29168. const datePickerProps = buildProps({
  29169. ...timePickerDefaultProps,
  29170. type: {
  29171. type: definePropType(String),
  29172. default: "date"
  29173. }
  29174. });
  29175. //#endregion
  29176. //#region ../../packages/components/date-picker/src/date-picker.tsx
  29177. function _isSlot$6(s) {
  29178. return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
  29179. }
  29180. var date_picker_default = /* @__PURE__ */ (0, vue.defineComponent)({
  29181. name: "ElDatePicker",
  29182. install: null,
  29183. props: datePickerProps,
  29184. emits: [UPDATE_MODEL_EVENT],
  29185. setup(props, { expose, emit, slots }) {
  29186. (0, vue.provide)(ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY, (0, vue.computed)(() => {
  29187. return !props.format;
  29188. }));
  29189. (0, vue.provide)(PICKER_POPPER_OPTIONS_INJECTION_KEY, (0, vue.reactive)((0, vue.toRef)(props, "popperOptions")));
  29190. const commonPicker = (0, vue.ref)();
  29191. expose({
  29192. focus: () => {
  29193. commonPicker.value?.focus();
  29194. },
  29195. blur: () => {
  29196. commonPicker.value?.blur();
  29197. },
  29198. handleOpen: () => {
  29199. commonPicker.value?.handleOpen();
  29200. },
  29201. handleClose: () => {
  29202. commonPicker.value?.handleClose();
  29203. }
  29204. });
  29205. const onModelValueUpdated = (val) => {
  29206. emit(UPDATE_MODEL_EVENT, val);
  29207. };
  29208. return () => {
  29209. return (0, vue.createVNode)(picker_default, (0, vue.mergeProps)(props, {
  29210. "format": props.format ?? (DEFAULT_FORMATS_DATEPICKER[props.type] || "YYYY-MM-DD"),
  29211. "type": props.type,
  29212. "ref": commonPicker,
  29213. "onUpdate:modelValue": onModelValueUpdated
  29214. }), {
  29215. default: (scopedProps) => (0, vue.createVNode)(ElDatePickerPanel, (0, vue.mergeProps)({
  29216. "disabled": props.disabled,
  29217. "editable": props.editable,
  29218. "border": false
  29219. }, scopedProps), _isSlot$6(slots) ? slots : { default: () => [slots] }),
  29220. "range-separator": slots["range-separator"]
  29221. });
  29222. };
  29223. }
  29224. });
  29225. //#endregion
  29226. //#region ../../packages/components/date-picker/index.ts
  29227. const ElDatePicker = withInstall(date_picker_default);
  29228. //#endregion
  29229. //#region ../../packages/components/descriptions/src/description.ts
  29230. const descriptionProps = buildProps({
  29231. border: Boolean,
  29232. column: {
  29233. type: Number,
  29234. default: 3
  29235. },
  29236. direction: {
  29237. type: String,
  29238. values: ["horizontal", "vertical"],
  29239. default: "horizontal"
  29240. },
  29241. size: useSizeProp,
  29242. title: {
  29243. type: String,
  29244. default: ""
  29245. },
  29246. extra: {
  29247. type: String,
  29248. default: ""
  29249. },
  29250. labelWidth: { type: [String, Number] }
  29251. });
  29252. //#endregion
  29253. //#region ../../packages/components/descriptions/src/descriptions-row.ts
  29254. const descriptionsRowProps = buildProps({ row: {
  29255. type: definePropType(Array),
  29256. default: () => []
  29257. } });
  29258. //#endregion
  29259. //#region ../../packages/components/descriptions/src/token.ts
  29260. const descriptionsKey = Symbol("elDescriptions");
  29261. //#endregion
  29262. //#region ../../packages/components/descriptions/src/descriptions-cell.ts
  29263. var descriptions_cell_default = (0, vue.defineComponent)({
  29264. name: "ElDescriptionsCell",
  29265. props: {
  29266. cell: { type: Object },
  29267. tag: {
  29268. type: String,
  29269. default: "td"
  29270. },
  29271. type: { type: String }
  29272. },
  29273. setup() {
  29274. return { descriptions: (0, vue.inject)(descriptionsKey, {}) };
  29275. },
  29276. render() {
  29277. const item = getNormalizedProps(this.cell);
  29278. const directives = (this.cell?.dirs || []).map((dire) => {
  29279. const { dir, arg, modifiers, value } = dire;
  29280. return [
  29281. dir,
  29282. value,
  29283. arg,
  29284. modifiers
  29285. ];
  29286. });
  29287. const { border, direction } = this.descriptions;
  29288. const isVertical = direction === "vertical";
  29289. const renderLabel = () => this.cell?.children?.label?.() || item.label;
  29290. const renderContent = () => this.cell?.children?.default?.();
  29291. const span = item.span;
  29292. const rowspan = item.rowspan;
  29293. const align = item.align ? `is-${item.align}` : "";
  29294. const labelAlign = item.labelAlign ? `is-${item.labelAlign}` : align;
  29295. const className = item.className;
  29296. const labelClassName = item.labelClassName;
  29297. const style = {
  29298. width: addUnit(this.type === "label" ? item.labelWidth ?? this.descriptions.labelWidth ?? item.width : item.width),
  29299. minWidth: addUnit(item.minWidth)
  29300. };
  29301. const ns = useNamespace("descriptions");
  29302. switch (this.type) {
  29303. case "label": return (0, vue.withDirectives)((0, vue.h)(this.tag, {
  29304. style,
  29305. class: [
  29306. ns.e("cell"),
  29307. ns.e("label"),
  29308. ns.is("bordered-label", border),
  29309. ns.is("vertical-label", isVertical),
  29310. labelAlign,
  29311. labelClassName
  29312. ],
  29313. colSpan: isVertical ? span : 1,
  29314. rowspan: isVertical ? 1 : rowspan
  29315. }, renderLabel()), directives);
  29316. case "content": return (0, vue.withDirectives)((0, vue.h)(this.tag, {
  29317. style,
  29318. class: [
  29319. ns.e("cell"),
  29320. ns.e("content"),
  29321. ns.is("bordered-content", border),
  29322. ns.is("vertical-content", isVertical),
  29323. align,
  29324. className
  29325. ],
  29326. colSpan: isVertical ? span : span * 2 - 1,
  29327. rowspan: isVertical ? rowspan * 2 - 1 : rowspan
  29328. }, renderContent()), directives);
  29329. default: {
  29330. const label = renderLabel();
  29331. const labelStyle = {};
  29332. const width = addUnit(item.labelWidth ?? this.descriptions.labelWidth);
  29333. if (width) {
  29334. labelStyle.width = width;
  29335. labelStyle.display = "inline-block";
  29336. }
  29337. return (0, vue.withDirectives)((0, vue.h)("td", {
  29338. style,
  29339. class: [ns.e("cell"), align],
  29340. colSpan: span,
  29341. rowspan
  29342. }, [!isNil(label) ? (0, vue.h)("span", {
  29343. style: labelStyle,
  29344. class: [ns.e("label"), labelClassName]
  29345. }, label) : void 0, (0, vue.h)("span", { class: [ns.e("content"), className] }, renderContent())]), directives);
  29346. }
  29347. }
  29348. }
  29349. });
  29350. //#endregion
  29351. //#region ../../packages/components/descriptions/src/descriptions-row.vue?vue&type=script&setup=true&lang.ts
  29352. const _hoisted_1$44 = { key: 1 };
  29353. var descriptions_row_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  29354. name: "ElDescriptionsRow",
  29355. __name: "descriptions-row",
  29356. props: descriptionsRowProps,
  29357. setup(__props) {
  29358. const descriptions = (0, vue.inject)(descriptionsKey, {});
  29359. return (_ctx, _cache) => {
  29360. return (0, vue.unref)(descriptions).direction === "vertical" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createElementVNode)("tr", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.row, (cell, _index) => {
  29361. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(descriptions_cell_default), {
  29362. key: `tr1-${_index}`,
  29363. cell,
  29364. tag: "th",
  29365. type: "label"
  29366. }, null, 8, ["cell"]);
  29367. }), 128))]), (0, vue.createElementVNode)("tr", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.row, (cell, _index) => {
  29368. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(descriptions_cell_default), {
  29369. key: `tr2-${_index}`,
  29370. cell,
  29371. tag: "td",
  29372. type: "content"
  29373. }, null, 8, ["cell"]);
  29374. }), 128))])], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("tr", _hoisted_1$44, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.row, (cell, _index) => {
  29375. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: `tr3-${_index}` }, [(0, vue.unref)(descriptions).border ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createVNode)((0, vue.unref)(descriptions_cell_default), {
  29376. cell,
  29377. tag: "td",
  29378. type: "label"
  29379. }, null, 8, ["cell"]), (0, vue.createVNode)((0, vue.unref)(descriptions_cell_default), {
  29380. cell,
  29381. tag: "td",
  29382. type: "content"
  29383. }, null, 8, ["cell"])], 64)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(descriptions_cell_default), {
  29384. key: 1,
  29385. cell,
  29386. tag: "td",
  29387. type: "both"
  29388. }, null, 8, ["cell"]))], 64);
  29389. }), 128))]));
  29390. };
  29391. }
  29392. });
  29393. //#endregion
  29394. //#region ../../packages/components/descriptions/src/descriptions-row.vue
  29395. var descriptions_row_default = descriptions_row_vue_vue_type_script_setup_true_lang_default;
  29396. //#endregion
  29397. //#region ../../packages/components/descriptions/src/constants.ts
  29398. const COMPONENT_NAME$10 = "ElDescriptionsItem";
  29399. //#endregion
  29400. //#region ../../packages/components/descriptions/src/description.vue?vue&type=script&setup=true&lang.ts
  29401. var description_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  29402. name: "ElDescriptions",
  29403. __name: "description",
  29404. props: descriptionProps,
  29405. setup(__props) {
  29406. const props = __props;
  29407. const ns = useNamespace("descriptions");
  29408. const descriptionsSize = useFormSize();
  29409. const slots = (0, vue.useSlots)();
  29410. (0, vue.provide)(descriptionsKey, props);
  29411. const descriptionKls = (0, vue.computed)(() => [ns.b(), ns.m(descriptionsSize.value)]);
  29412. const filledNode = (node, span, count, isLast = false) => {
  29413. if (!node.props) node.props = {};
  29414. if (span > count) node.props.span = count;
  29415. if (isLast) node.props.span = span;
  29416. return node;
  29417. };
  29418. const getRows = () => {
  29419. if (!slots.default) return [];
  29420. const children = flattedChildren(slots.default()).filter((node) => node?.type?.name === COMPONENT_NAME$10);
  29421. const rows = [];
  29422. let temp = [];
  29423. let count = props.column;
  29424. let totalSpan = 0;
  29425. const rowspanTemp = [];
  29426. children.forEach((node, index) => {
  29427. const span = node.props?.span || 1;
  29428. const rowspan = node.props?.rowspan || 1;
  29429. const rowNo = rows.length;
  29430. rowspanTemp[rowNo] ||= 0;
  29431. if (rowspan > 1) for (let i = 1; i < rowspan; i++) {
  29432. rowspanTemp[rowNo + i] ||= 0;
  29433. rowspanTemp[rowNo + i]++;
  29434. totalSpan++;
  29435. }
  29436. if (rowspanTemp[rowNo] > 0) {
  29437. count -= rowspanTemp[rowNo];
  29438. rowspanTemp[rowNo] = 0;
  29439. }
  29440. if (index < children.length - 1) totalSpan += span > count ? count : span;
  29441. if (index === children.length - 1) {
  29442. const lastSpan = props.column - totalSpan % props.column;
  29443. temp.push(filledNode(node, lastSpan, count, true));
  29444. rows.push(temp);
  29445. return;
  29446. }
  29447. if (span < count) {
  29448. count -= span;
  29449. temp.push(node);
  29450. } else {
  29451. temp.push(filledNode(node, span, count));
  29452. rows.push(temp);
  29453. count = props.column;
  29454. temp = [];
  29455. }
  29456. });
  29457. return rows;
  29458. };
  29459. return (_ctx, _cache) => {
  29460. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)(descriptionKls.value) }, [__props.title || __props.extra || _ctx.$slots.title || _ctx.$slots.extra ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  29461. key: 0,
  29462. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("header"))
  29463. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")) }, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("extra")) }, [(0, vue.renderSlot)(_ctx.$slots, "extra", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.extra), 1)])], 2)], 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body")) }, [(0, vue.createElementVNode)("table", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("table"), (0, vue.unref)(ns).is("bordered", __props.border)]) }, [(0, vue.createElementVNode)("tbody", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(getRows(), (row, _index) => {
  29464. return (0, vue.openBlock)(), (0, vue.createBlock)(descriptions_row_default, {
  29465. key: _index,
  29466. row
  29467. }, null, 8, ["row"]);
  29468. }), 128))])], 2)], 2)], 2);
  29469. };
  29470. }
  29471. });
  29472. //#endregion
  29473. //#region ../../packages/components/descriptions/src/description.vue
  29474. var description_default = description_vue_vue_type_script_setup_true_lang_default;
  29475. //#endregion
  29476. //#region ../../packages/components/descriptions/src/description-item.ts
  29477. const descriptionItemProps = buildProps({
  29478. label: {
  29479. type: String,
  29480. default: ""
  29481. },
  29482. span: {
  29483. type: Number,
  29484. default: 1
  29485. },
  29486. rowspan: {
  29487. type: Number,
  29488. default: 1
  29489. },
  29490. width: {
  29491. type: [String, Number],
  29492. default: ""
  29493. },
  29494. minWidth: {
  29495. type: [String, Number],
  29496. default: ""
  29497. },
  29498. labelWidth: { type: [String, Number] },
  29499. align: {
  29500. type: String,
  29501. values: columnAlignment,
  29502. default: "left"
  29503. },
  29504. labelAlign: {
  29505. type: String,
  29506. values: columnAlignment
  29507. },
  29508. className: {
  29509. type: String,
  29510. default: ""
  29511. },
  29512. labelClassName: {
  29513. type: String,
  29514. default: ""
  29515. }
  29516. });
  29517. const DescriptionItem = (0, vue.defineComponent)({
  29518. name: COMPONENT_NAME$10,
  29519. props: descriptionItemProps
  29520. });
  29521. //#endregion
  29522. //#region ../../packages/components/descriptions/index.ts
  29523. const ElDescriptions = withInstall(description_default, { DescriptionsItem: DescriptionItem });
  29524. const ElDescriptionsItem = withNoopInstall(DescriptionItem);
  29525. //#endregion
  29526. //#region ../../packages/components/dialog/src/dialog-content.ts
  29527. const dialogContentProps = buildProps({
  29528. center: Boolean,
  29529. alignCenter: {
  29530. type: Boolean,
  29531. default: void 0
  29532. },
  29533. closeIcon: { type: iconPropType },
  29534. draggable: {
  29535. type: Boolean,
  29536. default: void 0
  29537. },
  29538. overflow: {
  29539. type: Boolean,
  29540. default: void 0
  29541. },
  29542. fullscreen: Boolean,
  29543. headerClass: String,
  29544. bodyClass: String,
  29545. footerClass: String,
  29546. showClose: {
  29547. type: Boolean,
  29548. default: true
  29549. },
  29550. title: {
  29551. type: String,
  29552. default: ""
  29553. },
  29554. ariaLevel: {
  29555. type: String,
  29556. default: "2"
  29557. }
  29558. });
  29559. const dialogContentEmits = { close: () => true };
  29560. const dialogContentPropsDefaults = {
  29561. alignCenter: void 0,
  29562. draggable: void 0,
  29563. overflow: void 0,
  29564. showClose: true,
  29565. title: "",
  29566. ariaLevel: "2"
  29567. };
  29568. //#endregion
  29569. //#region ../../packages/components/dialog/src/dialog.ts
  29570. const dialogProps = buildProps({
  29571. ...dialogContentProps,
  29572. appendToBody: Boolean,
  29573. appendTo: {
  29574. type: definePropType([String, Object]),
  29575. default: "body"
  29576. },
  29577. beforeClose: { type: definePropType(Function) },
  29578. destroyOnClose: Boolean,
  29579. closeOnClickModal: {
  29580. type: Boolean,
  29581. default: true
  29582. },
  29583. closeOnPressEscape: {
  29584. type: Boolean,
  29585. default: true
  29586. },
  29587. lockScroll: {
  29588. type: Boolean,
  29589. default: true
  29590. },
  29591. modal: {
  29592. type: Boolean,
  29593. default: true
  29594. },
  29595. modalPenetrable: Boolean,
  29596. openDelay: {
  29597. type: Number,
  29598. default: 0
  29599. },
  29600. closeDelay: {
  29601. type: Number,
  29602. default: 0
  29603. },
  29604. top: { type: String },
  29605. modelValue: Boolean,
  29606. modalClass: String,
  29607. headerClass: String,
  29608. bodyClass: String,
  29609. footerClass: String,
  29610. width: { type: [String, Number] },
  29611. zIndex: { type: Number },
  29612. trapFocus: Boolean,
  29613. headerAriaLevel: {
  29614. type: String,
  29615. default: "2"
  29616. },
  29617. transition: {
  29618. type: definePropType([String, Object]),
  29619. default: void 0
  29620. }
  29621. });
  29622. const dialogEmits = {
  29623. open: () => true,
  29624. opened: () => true,
  29625. close: () => true,
  29626. closed: () => true,
  29627. [UPDATE_MODEL_EVENT]: (value) => isBoolean(value),
  29628. openAutoFocus: () => true,
  29629. closeAutoFocus: () => true
  29630. };
  29631. const dialogContextKey = Symbol("dialogContextKey");
  29632. const dialogPropsDefaults = {
  29633. ...dialogContentPropsDefaults,
  29634. appendTo: "body",
  29635. closeOnClickModal: true,
  29636. closeOnPressEscape: true,
  29637. lockScroll: true,
  29638. modal: true,
  29639. openDelay: 0,
  29640. closeDelay: 0,
  29641. headerAriaLevel: "2",
  29642. transition: void 0
  29643. };
  29644. //#endregion
  29645. //#region ../../packages/components/overlay/src/overlay.ts
  29646. const overlayProps = buildProps({
  29647. mask: {
  29648. type: Boolean,
  29649. default: true
  29650. },
  29651. customMaskEvent: Boolean,
  29652. overlayClass: { type: definePropType([
  29653. String,
  29654. Array,
  29655. Object
  29656. ]) },
  29657. zIndex: { type: definePropType([String, Number]) }
  29658. });
  29659. const overlayEmits = { click: (evt) => evt instanceof MouseEvent };
  29660. const BLOCK = "overlay";
  29661. var overlay_default = (0, vue.defineComponent)({
  29662. name: "ElOverlay",
  29663. props: overlayProps,
  29664. emits: overlayEmits,
  29665. setup(props, { slots, emit }) {
  29666. const ns = useNamespace(BLOCK);
  29667. const onMaskClick = (e) => {
  29668. emit("click", e);
  29669. };
  29670. const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? void 0 : onMaskClick);
  29671. return () => {
  29672. return props.mask ? (0, vue.createVNode)("div", {
  29673. class: [ns.b(), props.overlayClass],
  29674. style: { zIndex: props.zIndex },
  29675. onClick,
  29676. onMousedown,
  29677. onMouseup
  29678. }, [(0, vue.renderSlot)(slots, "default")], 4 | 2 | 8, [
  29679. "onClick",
  29680. "onMouseup",
  29681. "onMousedown"
  29682. ]) : (0, vue.h)("div", {
  29683. class: props.overlayClass,
  29684. style: {
  29685. zIndex: props.zIndex,
  29686. position: "fixed",
  29687. top: "0px",
  29688. right: "0px",
  29689. bottom: "0px",
  29690. left: "0px"
  29691. }
  29692. }, [(0, vue.renderSlot)(slots, "default")]);
  29693. };
  29694. }
  29695. });
  29696. //#endregion
  29697. //#region ../../packages/components/overlay/index.ts
  29698. const ElOverlay = overlay_default;
  29699. //#endregion
  29700. //#region ../../packages/components/dialog/src/constants.ts
  29701. const dialogInjectionKey = Symbol("dialogInjectionKey");
  29702. const DEFAULT_DIALOG_TRANSITION = "dialog-fade";
  29703. //#endregion
  29704. //#region ../../packages/components/dialog/src/dialog-content.vue?vue&type=script&setup=true&lang.ts
  29705. const _hoisted_1$43 = ["aria-level"];
  29706. const _hoisted_2$26 = ["aria-label"];
  29707. const _hoisted_3$10 = ["id"];
  29708. var dialog_content_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  29709. name: "ElDialogContent",
  29710. __name: "dialog-content",
  29711. props: dialogContentProps,
  29712. emits: dialogContentEmits,
  29713. setup(__props, { expose: __expose }) {
  29714. const { t } = useLocale();
  29715. const { Close } = CloseComponents;
  29716. const props = __props;
  29717. const { dialogRef, headerRef, bodyId, ns, style } = (0, vue.inject)(dialogInjectionKey);
  29718. const { focusTrapRef } = (0, vue.inject)(FOCUS_TRAP_INJECTION_KEY);
  29719. const composedDialogRef = composeRefs(focusTrapRef, dialogRef);
  29720. const draggable = (0, vue.computed)(() => !!props.draggable);
  29721. const { resetPosition, updatePosition, isDragging } = useDraggable(dialogRef, headerRef, draggable, (0, vue.computed)(() => !!props.overflow));
  29722. const dialogKls = (0, vue.computed)(() => [
  29723. ns.b(),
  29724. ns.is("fullscreen", props.fullscreen),
  29725. ns.is("draggable", draggable.value),
  29726. ns.is("dragging", isDragging.value),
  29727. ns.is("align-center", !!props.alignCenter),
  29728. { [ns.m("center")]: props.center }
  29729. ]);
  29730. __expose({
  29731. resetPosition,
  29732. updatePosition
  29733. });
  29734. return (_ctx, _cache) => {
  29735. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  29736. ref: (0, vue.unref)(composedDialogRef),
  29737. class: (0, vue.normalizeClass)(dialogKls.value),
  29738. style: (0, vue.normalizeStyle)((0, vue.unref)(style)),
  29739. tabindex: "-1"
  29740. }, [
  29741. (0, vue.createElementVNode)("header", {
  29742. ref_key: "headerRef",
  29743. ref: headerRef,
  29744. class: (0, vue.normalizeClass)([
  29745. (0, vue.unref)(ns).e("header"),
  29746. __props.headerClass,
  29747. { "show-close": __props.showClose }
  29748. ])
  29749. }, [(0, vue.renderSlot)(_ctx.$slots, "header", {}, () => [(0, vue.createElementVNode)("span", {
  29750. role: "heading",
  29751. "aria-level": __props.ariaLevel,
  29752. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title"))
  29753. }, (0, vue.toDisplayString)(__props.title), 11, _hoisted_1$43)]), __props.showClose ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  29754. key: 0,
  29755. "aria-label": (0, vue.unref)(t)("el.dialog.close"),
  29756. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("headerbtn")),
  29757. type: "button",
  29758. onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("close"))
  29759. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")) }, {
  29760. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.closeIcon || (0, vue.unref)(Close))))]),
  29761. _: 1
  29762. }, 8, ["class"])], 10, _hoisted_2$26)) : (0, vue.createCommentVNode)("v-if", true)], 2),
  29763. (0, vue.createElementVNode)("div", {
  29764. id: (0, vue.unref)(bodyId),
  29765. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("body"), __props.bodyClass])
  29766. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 10, _hoisted_3$10),
  29767. _ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("footer", {
  29768. key: 0,
  29769. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("footer"), __props.footerClass])
  29770. }, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  29771. ], 6);
  29772. };
  29773. }
  29774. });
  29775. //#endregion
  29776. //#region ../../packages/components/dialog/src/dialog-content.vue
  29777. var dialog_content_default = dialog_content_vue_vue_type_script_setup_true_lang_default;
  29778. //#endregion
  29779. //#region ../../packages/components/dialog/src/use-dialog.ts
  29780. const COMPONENT_NAME$9 = "ElDialog";
  29781. const useDialog = (props, targetRef) => {
  29782. const emit = (0, vue.getCurrentInstance)().emit;
  29783. const { nextZIndex } = useZIndex();
  29784. let lastPosition = "";
  29785. const titleId = useId();
  29786. const bodyId = useId();
  29787. const visible = (0, vue.ref)(false);
  29788. const closed = (0, vue.ref)(false);
  29789. const rendered = (0, vue.ref)(false);
  29790. const zIndex = (0, vue.ref)(props.zIndex ?? nextZIndex());
  29791. const closing = (0, vue.ref)(false);
  29792. let openTimer = void 0;
  29793. let closeTimer = void 0;
  29794. const config = useGlobalConfig();
  29795. const namespace = (0, vue.computed)(() => config.value?.namespace ?? "el");
  29796. const globalConfig = (0, vue.computed)(() => config.value?.dialog);
  29797. const style = (0, vue.computed)(() => {
  29798. const style = {};
  29799. const varPrefix = `--${namespace.value}-dialog`;
  29800. if (!props.fullscreen) {
  29801. if (props.top) style[`${varPrefix}-margin-top`] = props.top;
  29802. const width = addUnit(props.width);
  29803. if (width) style[`${varPrefix}-width`] = width;
  29804. }
  29805. return style;
  29806. });
  29807. const _draggable = (0, vue.computed)(() => (props.draggable ?? globalConfig.value?.draggable ?? false) && !props.fullscreen);
  29808. const _alignCenter = (0, vue.computed)(() => props.alignCenter ?? globalConfig.value?.alignCenter ?? false);
  29809. const _overflow = (0, vue.computed)(() => props.overflow ?? globalConfig.value?.overflow ?? false);
  29810. const penetrable = (0, vue.computed)(() => props.modalPenetrable && !props.modal && !props.fullscreen);
  29811. const overlayDialogStyle = (0, vue.computed)(() => {
  29812. if (_alignCenter.value) return { display: "flex" };
  29813. return {};
  29814. });
  29815. const transitionConfig = (0, vue.computed)(() => {
  29816. const transition = props.transition ?? globalConfig.value?.transition ?? "dialog-fade";
  29817. const baseConfig = {
  29818. name: transition,
  29819. onAfterEnter: afterEnter,
  29820. onBeforeLeave: beforeLeave,
  29821. onAfterLeave: afterLeave
  29822. };
  29823. if (isObject$1(transition)) {
  29824. const config = { ...transition };
  29825. const _mergeHook = (userHook, defaultHook) => {
  29826. return (el) => {
  29827. if (isArray$1(userHook)) userHook.forEach((fn) => {
  29828. if (isFunction$1(fn)) fn(el);
  29829. });
  29830. else if (isFunction$1(userHook)) userHook(el);
  29831. defaultHook();
  29832. };
  29833. };
  29834. config.onAfterEnter = _mergeHook(config.onAfterEnter, afterEnter);
  29835. config.onBeforeLeave = _mergeHook(config.onBeforeLeave, beforeLeave);
  29836. config.onAfterLeave = _mergeHook(config.onAfterLeave, afterLeave);
  29837. if (!config.name) {
  29838. config.name = DEFAULT_DIALOG_TRANSITION;
  29839. /* @__PURE__ */ debugWarn(COMPONENT_NAME$9, `transition.name is missing when using object syntax, fallback to '${DEFAULT_DIALOG_TRANSITION}'`);
  29840. }
  29841. return config;
  29842. }
  29843. return baseConfig;
  29844. });
  29845. function afterEnter() {
  29846. emit("opened");
  29847. }
  29848. function afterLeave() {
  29849. emit("closed");
  29850. emit(UPDATE_MODEL_EVENT, false);
  29851. if (props.destroyOnClose) rendered.value = false;
  29852. closing.value = false;
  29853. }
  29854. function beforeLeave() {
  29855. closing.value = true;
  29856. emit("close");
  29857. }
  29858. function open() {
  29859. closeTimer?.();
  29860. openTimer?.();
  29861. if (props.openDelay && props.openDelay > 0) ({stop: openTimer} = useTimeoutFn(() => doOpen(), props.openDelay));
  29862. else doOpen();
  29863. }
  29864. function close() {
  29865. openTimer?.();
  29866. closeTimer?.();
  29867. if (props.closeDelay && props.closeDelay > 0) ({stop: closeTimer} = useTimeoutFn(() => doClose(), props.closeDelay));
  29868. else doClose();
  29869. }
  29870. function handleClose() {
  29871. function hide(shouldCancel) {
  29872. if (shouldCancel) return;
  29873. closed.value = true;
  29874. visible.value = false;
  29875. }
  29876. if (props.beforeClose) props.beforeClose(hide);
  29877. else close();
  29878. }
  29879. function onModalClick() {
  29880. if (props.closeOnClickModal) handleClose();
  29881. }
  29882. function doOpen() {
  29883. if (!isClient) return;
  29884. visible.value = true;
  29885. }
  29886. function doClose() {
  29887. visible.value = false;
  29888. }
  29889. function onOpenAutoFocus() {
  29890. emit("openAutoFocus");
  29891. }
  29892. function onCloseAutoFocus() {
  29893. emit("closeAutoFocus");
  29894. }
  29895. function onFocusoutPrevented(event) {
  29896. if (event.detail?.focusReason === "pointer") event.preventDefault();
  29897. }
  29898. if (props.lockScroll) useLockscreen(visible);
  29899. function onCloseRequested() {
  29900. if (props.closeOnPressEscape) handleClose();
  29901. }
  29902. function bringToFront() {
  29903. if (!visible.value || !penetrable.value || props.zIndex !== void 0) return;
  29904. zIndex.value = nextZIndex();
  29905. }
  29906. (0, vue.watch)(() => props.zIndex, () => {
  29907. zIndex.value = props.zIndex ?? nextZIndex();
  29908. });
  29909. (0, vue.watch)(() => props.modelValue, (val) => {
  29910. if (val) {
  29911. closed.value = false;
  29912. closing.value = false;
  29913. open();
  29914. rendered.value = true;
  29915. zIndex.value = props.zIndex ?? nextZIndex();
  29916. (0, vue.nextTick)(() => {
  29917. emit("open");
  29918. if (targetRef.value) {
  29919. targetRef.value.parentElement.scrollTop = 0;
  29920. targetRef.value.parentElement.scrollLeft = 0;
  29921. targetRef.value.scrollTop = 0;
  29922. }
  29923. });
  29924. } else if (visible.value) close();
  29925. });
  29926. (0, vue.watch)(() => props.fullscreen, (val) => {
  29927. if (!targetRef.value) return;
  29928. if (val) {
  29929. lastPosition = targetRef.value.style.transform;
  29930. targetRef.value.style.transform = "";
  29931. } else targetRef.value.style.transform = lastPosition;
  29932. });
  29933. (0, vue.onMounted)(() => {
  29934. if (props.modelValue) {
  29935. visible.value = true;
  29936. rendered.value = true;
  29937. open();
  29938. }
  29939. });
  29940. return {
  29941. afterEnter,
  29942. afterLeave,
  29943. beforeLeave,
  29944. handleClose,
  29945. onModalClick,
  29946. close,
  29947. doClose,
  29948. onOpenAutoFocus,
  29949. onCloseAutoFocus,
  29950. onCloseRequested,
  29951. onFocusoutPrevented,
  29952. bringToFront,
  29953. titleId,
  29954. bodyId,
  29955. closed,
  29956. style,
  29957. overlayDialogStyle,
  29958. rendered,
  29959. visible,
  29960. zIndex,
  29961. transitionConfig,
  29962. _draggable,
  29963. _alignCenter,
  29964. _overflow,
  29965. closing,
  29966. penetrable
  29967. };
  29968. };
  29969. //#endregion
  29970. //#region ../../packages/components/dialog/src/dialog.vue?vue&type=script&setup=true&lang.ts
  29971. const _hoisted_1$42 = [
  29972. "aria-label",
  29973. "aria-labelledby",
  29974. "aria-describedby"
  29975. ];
  29976. var dialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  29977. name: "ElDialog",
  29978. inheritAttrs: false,
  29979. __name: "dialog",
  29980. props: dialogProps,
  29981. emits: dialogEmits,
  29982. setup(__props, { expose: __expose }) {
  29983. const props = __props;
  29984. const slots = (0, vue.useSlots)();
  29985. useDeprecated({
  29986. scope: "el-dialog",
  29987. from: "the title slot",
  29988. replacement: "the header slot",
  29989. version: "3.0.0",
  29990. ref: "https://element-plus.org/en-US/component/dialog.html#slots"
  29991. }, (0, vue.computed)(() => !!slots.title));
  29992. const ns = useNamespace("dialog");
  29993. const dialogRef = (0, vue.ref)();
  29994. const headerRef = (0, vue.ref)();
  29995. const dialogContentRef = (0, vue.ref)();
  29996. const { visible, titleId, bodyId, style, overlayDialogStyle, rendered, transitionConfig, zIndex, _draggable, _alignCenter, _overflow, penetrable, handleClose, onModalClick, onOpenAutoFocus, onCloseAutoFocus, onCloseRequested, onFocusoutPrevented, bringToFront, closing } = useDialog(props, dialogRef);
  29997. (0, vue.provide)(dialogInjectionKey, {
  29998. dialogRef,
  29999. headerRef,
  30000. bodyId,
  30001. ns,
  30002. rendered,
  30003. style
  30004. });
  30005. const overlayEvent = useSameTarget(onModalClick);
  30006. const resetPosition = () => {
  30007. dialogContentRef.value?.resetPosition();
  30008. };
  30009. __expose({
  30010. visible,
  30011. dialogContentRef,
  30012. resetPosition,
  30013. handleClose
  30014. });
  30015. return (_ctx, _cache) => {
  30016. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Teleport, {
  30017. to: __props.appendTo,
  30018. disabled: __props.appendTo !== "body" ? false : !__props.appendToBody
  30019. }, [(0, vue.createVNode)(vue.Transition, (0, vue.mergeProps)((0, vue.unref)(transitionConfig), { persisted: "" }), {
  30020. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElOverlay), {
  30021. "custom-mask-event": "",
  30022. mask: __props.modal,
  30023. "overlay-class": [
  30024. __props.modalClass ?? "",
  30025. `${(0, vue.unref)(ns).namespace.value}-modal-dialog`,
  30026. (0, vue.unref)(ns).is("penetrable", (0, vue.unref)(penetrable))
  30027. ],
  30028. "z-index": (0, vue.unref)(zIndex)
  30029. }, {
  30030. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  30031. role: "dialog",
  30032. "aria-modal": "true",
  30033. "aria-label": __props.title || void 0,
  30034. "aria-labelledby": !__props.title ? (0, vue.unref)(titleId) : void 0,
  30035. "aria-describedby": (0, vue.unref)(bodyId),
  30036. class: (0, vue.normalizeClass)([`${(0, vue.unref)(ns).namespace.value}-overlay-dialog`, (0, vue.unref)(ns).is("closing", (0, vue.unref)(closing))]),
  30037. style: (0, vue.normalizeStyle)((0, vue.unref)(overlayDialogStyle)),
  30038. onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(overlayEvent).onClick && (0, vue.unref)(overlayEvent).onClick(...args)),
  30039. onMousedown: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(overlayEvent).onMousedown && (0, vue.unref)(overlayEvent).onMousedown(...args)),
  30040. onMouseup: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(overlayEvent).onMouseup && (0, vue.unref)(overlayEvent).onMouseup(...args))
  30041. }, [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
  30042. loop: "",
  30043. trapped: (0, vue.unref)(visible),
  30044. "focus-start-el": "container",
  30045. onFocusAfterTrapped: (0, vue.unref)(onOpenAutoFocus),
  30046. onFocusAfterReleased: (0, vue.unref)(onCloseAutoFocus),
  30047. onFocusoutPrevented: (0, vue.unref)(onFocusoutPrevented),
  30048. onReleaseRequested: (0, vue.unref)(onCloseRequested)
  30049. }, {
  30050. default: (0, vue.withCtx)(() => [(0, vue.unref)(rendered) ? ((0, vue.openBlock)(), (0, vue.createBlock)(dialog_content_default, (0, vue.mergeProps)({
  30051. key: 0,
  30052. ref_key: "dialogContentRef",
  30053. ref: dialogContentRef
  30054. }, _ctx.$attrs, {
  30055. center: __props.center,
  30056. "align-center": (0, vue.unref)(_alignCenter),
  30057. "close-icon": __props.closeIcon,
  30058. draggable: (0, vue.unref)(_draggable),
  30059. overflow: (0, vue.unref)(_overflow),
  30060. fullscreen: __props.fullscreen,
  30061. "header-class": __props.headerClass,
  30062. "body-class": __props.bodyClass,
  30063. "footer-class": __props.footerClass,
  30064. "show-close": __props.showClose,
  30065. title: __props.title,
  30066. "aria-level": __props.headerAriaLevel,
  30067. onClose: (0, vue.unref)(handleClose),
  30068. onMousedown: (0, vue.unref)(bringToFront)
  30069. }), (0, vue.createSlots)({
  30070. header: (0, vue.withCtx)(() => [!_ctx.$slots.title ? (0, vue.renderSlot)(_ctx.$slots, "header", {
  30071. key: 0,
  30072. close: (0, vue.unref)(handleClose),
  30073. titleId: (0, vue.unref)(titleId),
  30074. titleClass: (0, vue.unref)(ns).e("title")
  30075. }) : (0, vue.renderSlot)(_ctx.$slots, "title", { key: 1 })]),
  30076. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  30077. _: 2
  30078. }, [_ctx.$slots.footer ? {
  30079. name: "footer",
  30080. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "footer")]),
  30081. key: "0"
  30082. } : void 0]), 1040, [
  30083. "center",
  30084. "align-center",
  30085. "close-icon",
  30086. "draggable",
  30087. "overflow",
  30088. "fullscreen",
  30089. "header-class",
  30090. "body-class",
  30091. "footer-class",
  30092. "show-close",
  30093. "title",
  30094. "aria-level",
  30095. "onClose",
  30096. "onMousedown"
  30097. ])) : (0, vue.createCommentVNode)("v-if", true)]),
  30098. _: 3
  30099. }, 8, [
  30100. "trapped",
  30101. "onFocusAfterTrapped",
  30102. "onFocusAfterReleased",
  30103. "onFocusoutPrevented",
  30104. "onReleaseRequested"
  30105. ])], 46, _hoisted_1$42)]),
  30106. _: 3
  30107. }, 8, [
  30108. "mask",
  30109. "overlay-class",
  30110. "z-index"
  30111. ]), [[vue.vShow, (0, vue.unref)(visible)]])]),
  30112. _: 3
  30113. }, 16)], 8, ["to", "disabled"]);
  30114. };
  30115. }
  30116. });
  30117. //#endregion
  30118. //#region ../../packages/components/dialog/src/dialog.vue
  30119. var dialog_default = dialog_vue_vue_type_script_setup_true_lang_default;
  30120. //#endregion
  30121. //#region ../../packages/components/dialog/index.ts
  30122. const ElDialog = withInstall(dialog_default);
  30123. //#endregion
  30124. //#region ../../packages/components/divider/src/divider.ts
  30125. const dividerProps = buildProps({
  30126. direction: {
  30127. type: String,
  30128. values: ["horizontal", "vertical"],
  30129. default: "horizontal"
  30130. },
  30131. contentPosition: {
  30132. type: String,
  30133. values: [
  30134. "left",
  30135. "center",
  30136. "right"
  30137. ],
  30138. default: "center"
  30139. },
  30140. borderStyle: {
  30141. type: definePropType(String),
  30142. default: "solid"
  30143. }
  30144. });
  30145. //#endregion
  30146. //#region ../../packages/components/divider/src/divider.vue?vue&type=script&setup=true&lang.ts
  30147. var divider_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  30148. name: "ElDivider",
  30149. __name: "divider",
  30150. props: dividerProps,
  30151. setup(__props) {
  30152. const props = __props;
  30153. const ns = useNamespace("divider");
  30154. const dividerStyle = (0, vue.computed)(() => {
  30155. return ns.cssVar({ "border-style": props.borderStyle });
  30156. });
  30157. return (_ctx, _cache) => {
  30158. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  30159. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).m(__props.direction)]),
  30160. style: (0, vue.normalizeStyle)(dividerStyle.value),
  30161. role: "separator"
  30162. }, [_ctx.$slots.default && __props.direction !== "vertical" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  30163. key: 0,
  30164. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("text"), (0, vue.unref)(ns).is(__props.contentPosition)])
  30165. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)], 6);
  30166. };
  30167. }
  30168. });
  30169. //#endregion
  30170. //#region ../../packages/components/divider/src/divider.vue
  30171. var divider_default = divider_vue_vue_type_script_setup_true_lang_default;
  30172. //#endregion
  30173. //#region ../../packages/components/divider/index.ts
  30174. const ElDivider = withInstall(divider_default);
  30175. //#endregion
  30176. //#region ../../packages/components/drawer/src/drawer.ts
  30177. const drawerProps = buildProps({
  30178. ...dialogProps,
  30179. direction: {
  30180. type: String,
  30181. default: "rtl",
  30182. values: [
  30183. "ltr",
  30184. "rtl",
  30185. "ttb",
  30186. "btt"
  30187. ]
  30188. },
  30189. resizable: Boolean,
  30190. size: {
  30191. type: [String, Number],
  30192. default: "30%"
  30193. },
  30194. withHeader: {
  30195. type: Boolean,
  30196. default: true
  30197. },
  30198. modalFade: {
  30199. type: Boolean,
  30200. default: true
  30201. },
  30202. headerAriaLevel: {
  30203. type: String,
  30204. default: "2"
  30205. }
  30206. });
  30207. const drawerEmits = {
  30208. ...dialogEmits,
  30209. "resize-start": (evt, size) => evt instanceof MouseEvent && typeof size === "number",
  30210. resize: (evt, size) => evt instanceof MouseEvent && typeof size === "number",
  30211. "resize-end": (evt, size) => evt instanceof MouseEvent && typeof size === "number"
  30212. };
  30213. //#endregion
  30214. //#region ../../packages/components/drawer/src/composables/useResizable.ts
  30215. function useResizable(props, target, emit) {
  30216. const { width, height } = useWindowSize();
  30217. const isHorizontal = (0, vue.computed)(() => ["ltr", "rtl"].includes(props.direction));
  30218. const sign = (0, vue.computed)(() => ["ltr", "ttb"].includes(props.direction) ? 1 : -1);
  30219. const windowSize = (0, vue.computed)(() => isHorizontal.value ? width.value : height.value);
  30220. const getSize = (0, vue.computed)(() => {
  30221. return clamp$2(startSize.value + sign.value * offset.value, 4, windowSize.value);
  30222. });
  30223. const startSize = (0, vue.ref)(0);
  30224. const offset = (0, vue.ref)(0);
  30225. const isResizing = (0, vue.ref)(false);
  30226. const hasStartedDragging = (0, vue.ref)(false);
  30227. let startPos = [];
  30228. let cleanups = [];
  30229. const getActualSize = () => {
  30230. const drawerEl = target.value?.closest("[aria-modal=\"true\"]");
  30231. if (drawerEl) return isHorizontal.value ? drawerEl.offsetWidth : drawerEl.offsetHeight;
  30232. return 100;
  30233. };
  30234. (0, vue.watch)(() => [props.size, props.resizable], () => {
  30235. hasStartedDragging.value = false;
  30236. startSize.value = 0;
  30237. offset.value = 0;
  30238. onMouseUp();
  30239. });
  30240. const onMousedown = (e) => {
  30241. if (!props.resizable) return;
  30242. if (!hasStartedDragging.value) {
  30243. startSize.value = getActualSize();
  30244. hasStartedDragging.value = true;
  30245. }
  30246. startPos = [e.pageX, e.pageY];
  30247. isResizing.value = true;
  30248. emit("resize-start", e, startSize.value);
  30249. cleanups.push(useEventListener(window, "mouseup", onMouseUp), useEventListener(window, "mousemove", onMouseMove));
  30250. };
  30251. const onMouseMove = (e) => {
  30252. const { pageX, pageY } = e;
  30253. const offsetX = pageX - startPos[0];
  30254. const offsetY = pageY - startPos[1];
  30255. offset.value = isHorizontal.value ? offsetX : offsetY;
  30256. emit("resize", e, getSize.value);
  30257. };
  30258. const onMouseUp = (e) => {
  30259. if (!isResizing.value) return;
  30260. startPos = [];
  30261. startSize.value = getSize.value;
  30262. offset.value = 0;
  30263. isResizing.value = false;
  30264. cleanups.forEach((cleanup) => cleanup?.());
  30265. cleanups = [];
  30266. if (e) emit("resize-end", e, startSize.value);
  30267. };
  30268. const cleanup = useEventListener(target, "mousedown", onMousedown);
  30269. (0, vue.onBeforeUnmount)(() => {
  30270. cleanup();
  30271. onMouseUp();
  30272. });
  30273. return {
  30274. size: (0, vue.computed)(() => {
  30275. return hasStartedDragging.value ? `${getSize.value}px` : addUnit(props.size);
  30276. }),
  30277. isResizing,
  30278. isHorizontal
  30279. };
  30280. }
  30281. //#endregion
  30282. //#region ../../packages/components/drawer/src/drawer.vue?vue&type=script&setup=true&lang.ts
  30283. const _hoisted_1$41 = [
  30284. "aria-label",
  30285. "aria-labelledby",
  30286. "aria-describedby"
  30287. ];
  30288. const _hoisted_2$25 = ["id", "aria-level"];
  30289. const _hoisted_3$9 = ["aria-label"];
  30290. const _hoisted_4$7 = ["id"];
  30291. var drawer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  30292. name: "ElDrawer",
  30293. inheritAttrs: false,
  30294. __name: "drawer",
  30295. props: drawerProps,
  30296. emits: drawerEmits,
  30297. setup(__props, { expose: __expose, emit: __emit }) {
  30298. const props = __props;
  30299. const emit = __emit;
  30300. const slots = (0, vue.useSlots)();
  30301. useDeprecated({
  30302. scope: "el-drawer",
  30303. from: "the title slot",
  30304. replacement: "the header slot",
  30305. version: "3.0.0",
  30306. ref: "https://element-plus.org/en-US/component/drawer.html#slots"
  30307. }, (0, vue.computed)(() => !!slots.title));
  30308. const drawerRef = (0, vue.ref)();
  30309. const focusStartRef = (0, vue.ref)();
  30310. const draggerRef = (0, vue.ref)();
  30311. const ns = useNamespace("drawer");
  30312. const { t } = useLocale();
  30313. const { afterEnter, afterLeave, beforeLeave, visible, rendered, titleId, bodyId, zIndex, onModalClick, onOpenAutoFocus, onCloseAutoFocus, onFocusoutPrevented, onCloseRequested, handleClose } = useDialog(props, drawerRef);
  30314. const { isHorizontal, size, isResizing } = useResizable(props, draggerRef, emit);
  30315. const penetrable = (0, vue.computed)(() => props.modalPenetrable && !props.modal);
  30316. __expose({ handleClose });
  30317. return (_ctx, _cache) => {
  30318. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Teleport, {
  30319. to: __props.appendTo,
  30320. disabled: __props.appendTo !== "body" ? false : !__props.appendToBody
  30321. }, [(0, vue.createVNode)(vue.Transition, {
  30322. name: (0, vue.unref)(ns).b("fade"),
  30323. onAfterEnter: (0, vue.unref)(afterEnter),
  30324. onAfterLeave: (0, vue.unref)(afterLeave),
  30325. onBeforeLeave: (0, vue.unref)(beforeLeave),
  30326. persisted: ""
  30327. }, {
  30328. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElOverlay), {
  30329. mask: __props.modal,
  30330. "overlay-class": [
  30331. (0, vue.unref)(ns).is("drawer"),
  30332. __props.modalClass ?? "",
  30333. `${(0, vue.unref)(ns).namespace.value}-modal-drawer`,
  30334. (0, vue.unref)(ns).is("penetrable", penetrable.value)
  30335. ],
  30336. "z-index": (0, vue.unref)(zIndex),
  30337. onClick: (0, vue.unref)(onModalClick)
  30338. }, {
  30339. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
  30340. loop: "",
  30341. trapped: (0, vue.unref)(visible),
  30342. "focus-trap-el": drawerRef.value,
  30343. "focus-start-el": focusStartRef.value,
  30344. onFocusAfterTrapped: (0, vue.unref)(onOpenAutoFocus),
  30345. onFocusAfterReleased: (0, vue.unref)(onCloseAutoFocus),
  30346. onFocusoutPrevented: (0, vue.unref)(onFocusoutPrevented),
  30347. onReleaseRequested: (0, vue.unref)(onCloseRequested)
  30348. }, {
  30349. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", (0, vue.mergeProps)({
  30350. ref_key: "drawerRef",
  30351. ref: drawerRef,
  30352. "aria-modal": "true",
  30353. "aria-label": __props.title || void 0,
  30354. "aria-labelledby": !__props.title ? (0, vue.unref)(titleId) : void 0,
  30355. "aria-describedby": (0, vue.unref)(bodyId)
  30356. }, _ctx.$attrs, {
  30357. class: [
  30358. (0, vue.unref)(ns).b(),
  30359. __props.direction,
  30360. (0, vue.unref)(visible) && "open",
  30361. (0, vue.unref)(ns).is("dragging", (0, vue.unref)(isResizing))
  30362. ],
  30363. style: { [(0, vue.unref)(isHorizontal) ? "width" : "height"]: (0, vue.unref)(size) },
  30364. role: "dialog",
  30365. onClick: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"]))
  30366. }), [
  30367. (0, vue.createElementVNode)("span", {
  30368. ref_key: "focusStartRef",
  30369. ref: focusStartRef,
  30370. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("sr-focus")),
  30371. tabindex: "-1"
  30372. }, null, 2),
  30373. __props.withHeader ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("header", {
  30374. key: 0,
  30375. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("header"), __props.headerClass])
  30376. }, [!_ctx.$slots.title ? (0, vue.renderSlot)(_ctx.$slots, "header", {
  30377. key: 0,
  30378. close: (0, vue.unref)(handleClose),
  30379. titleId: (0, vue.unref)(titleId),
  30380. titleClass: (0, vue.unref)(ns).e("title")
  30381. }, () => [(0, vue.createElementVNode)("span", {
  30382. id: (0, vue.unref)(titleId),
  30383. role: "heading",
  30384. "aria-level": __props.headerAriaLevel,
  30385. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title"))
  30386. }, (0, vue.toDisplayString)(__props.title), 11, _hoisted_2$25)]) : (0, vue.renderSlot)(_ctx.$slots, "title", { key: 1 }, () => [(0, vue.createCommentVNode)(" DEPRECATED SLOT ")]), __props.showClose ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  30387. key: 2,
  30388. "aria-label": (0, vue.unref)(t)("el.drawer.close"),
  30389. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close-btn")),
  30390. type: "button",
  30391. onClick: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleClose) && (0, vue.unref)(handleClose)(...args))
  30392. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")) }, {
  30393. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
  30394. _: 1
  30395. }, 8, ["class"])], 10, _hoisted_3$9)) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true),
  30396. (0, vue.unref)(rendered) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  30397. key: 1,
  30398. id: (0, vue.unref)(bodyId),
  30399. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("body"), __props.bodyClass])
  30400. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 10, _hoisted_4$7)) : (0, vue.createCommentVNode)("v-if", true),
  30401. _ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  30402. key: 2,
  30403. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("footer"), __props.footerClass])
  30404. }, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  30405. __props.resizable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  30406. key: 3,
  30407. ref_key: "draggerRef",
  30408. ref: draggerRef,
  30409. style: (0, vue.normalizeStyle)({ zIndex: (0, vue.unref)(zIndex) }),
  30410. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("dragger"))
  30411. }, null, 6)) : (0, vue.createCommentVNode)("v-if", true)
  30412. ], 16, _hoisted_1$41)]),
  30413. _: 3
  30414. }, 8, [
  30415. "trapped",
  30416. "focus-trap-el",
  30417. "focus-start-el",
  30418. "onFocusAfterTrapped",
  30419. "onFocusAfterReleased",
  30420. "onFocusoutPrevented",
  30421. "onReleaseRequested"
  30422. ])]),
  30423. _: 3
  30424. }, 8, [
  30425. "mask",
  30426. "overlay-class",
  30427. "z-index",
  30428. "onClick"
  30429. ]), [[vue.vShow, (0, vue.unref)(visible)]])]),
  30430. _: 3
  30431. }, 8, [
  30432. "name",
  30433. "onAfterEnter",
  30434. "onAfterLeave",
  30435. "onBeforeLeave"
  30436. ])], 8, ["to", "disabled"]);
  30437. };
  30438. }
  30439. });
  30440. //#endregion
  30441. //#region ../../packages/components/drawer/src/drawer.vue
  30442. var drawer_default = drawer_vue_vue_type_script_setup_true_lang_default;
  30443. //#endregion
  30444. //#region ../../packages/components/drawer/index.ts
  30445. const ElDrawer = withInstall(drawer_default);
  30446. //#endregion
  30447. //#region ../../packages/components/collection/src/collection.vue?vue&type=script&lang.ts
  30448. var collection_vue_vue_type_script_lang_default = (0, vue.defineComponent)({ inheritAttrs: false });
  30449. //#endregion
  30450. //#region ../../packages/components/collection/src/collection.vue
  30451. function _sfc_render$15(_ctx, _cache, $props, $setup, $data, $options) {
  30452. return (0, vue.renderSlot)(_ctx.$slots, "default");
  30453. }
  30454. var collection_default = /* @__PURE__ */ _plugin_vue_export_helper_default(collection_vue_vue_type_script_lang_default, [["render", _sfc_render$15]]);
  30455. //#endregion
  30456. //#region ../../packages/components/collection/src/collection-item.vue?vue&type=script&lang.ts
  30457. var collection_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  30458. name: "ElCollectionItem",
  30459. inheritAttrs: false
  30460. });
  30461. //#endregion
  30462. //#region ../../packages/components/collection/src/collection-item.vue
  30463. function _sfc_render$14(_ctx, _cache, $props, $setup, $data, $options) {
  30464. return (0, vue.renderSlot)(_ctx.$slots, "default");
  30465. }
  30466. var collection_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(collection_item_vue_vue_type_script_lang_default, [["render", _sfc_render$14]]);
  30467. //#endregion
  30468. //#region ../../packages/components/collection/src/collection.ts
  30469. const COLLECTION_ITEM_SIGN = `data-el-collection-item`;
  30470. const createCollectionWithScope = (name) => {
  30471. const COLLECTION_NAME = `El${name}Collection`;
  30472. const COLLECTION_ITEM_NAME = `${COLLECTION_NAME}Item`;
  30473. const COLLECTION_INJECTION_KEY = Symbol(COLLECTION_NAME);
  30474. const COLLECTION_ITEM_INJECTION_KEY = Symbol(COLLECTION_ITEM_NAME);
  30475. return {
  30476. COLLECTION_INJECTION_KEY,
  30477. COLLECTION_ITEM_INJECTION_KEY,
  30478. ElCollection: Object.assign({}, collection_default, {
  30479. name: COLLECTION_NAME,
  30480. setup() {
  30481. const collectionRef = (0, vue.ref)();
  30482. const itemMap = /* @__PURE__ */ new Map();
  30483. const getItems = (() => {
  30484. const collectionEl = (0, vue.unref)(collectionRef);
  30485. if (!collectionEl) return [];
  30486. const orderedNodes = Array.from(collectionEl.querySelectorAll(`[${COLLECTION_ITEM_SIGN}]`));
  30487. return [...itemMap.values()].sort((a, b) => orderedNodes.indexOf(a.ref) - orderedNodes.indexOf(b.ref));
  30488. });
  30489. (0, vue.provide)(COLLECTION_INJECTION_KEY, {
  30490. itemMap,
  30491. getItems,
  30492. collectionRef
  30493. });
  30494. }
  30495. }),
  30496. ElCollectionItem: Object.assign({}, collection_item_default, {
  30497. name: COLLECTION_ITEM_NAME,
  30498. setup(_, { attrs }) {
  30499. const collectionItemRef = (0, vue.ref)();
  30500. const collectionInjection = (0, vue.inject)(COLLECTION_INJECTION_KEY, void 0);
  30501. (0, vue.provide)(COLLECTION_ITEM_INJECTION_KEY, { collectionItemRef });
  30502. (0, vue.onMounted)(() => {
  30503. const collectionItemEl = (0, vue.unref)(collectionItemRef);
  30504. if (collectionItemEl) collectionInjection.itemMap.set(collectionItemEl, {
  30505. ref: collectionItemEl,
  30506. ...attrs
  30507. });
  30508. });
  30509. (0, vue.onBeforeUnmount)(() => {
  30510. const collectionItemEl = (0, vue.unref)(collectionItemRef);
  30511. collectionInjection.itemMap.delete(collectionItemEl);
  30512. });
  30513. }
  30514. })
  30515. };
  30516. };
  30517. //#endregion
  30518. //#region ../../packages/components/roving-focus-group/src/roving-focus-group.ts
  30519. const rovingFocusGroupProps = buildProps({
  30520. style: {
  30521. type: definePropType([
  30522. String,
  30523. Array,
  30524. Object,
  30525. Boolean
  30526. ]),
  30527. default: void 0
  30528. },
  30529. currentTabId: { type: definePropType(String) },
  30530. defaultCurrentTabId: String,
  30531. loop: Boolean,
  30532. dir: {
  30533. type: String,
  30534. values: ["ltr", "rtl"],
  30535. default: "ltr"
  30536. },
  30537. orientation: { type: definePropType(String) },
  30538. onBlur: Function,
  30539. onFocus: Function,
  30540. onMousedown: Function
  30541. });
  30542. const { ElCollection, ElCollectionItem, COLLECTION_INJECTION_KEY, COLLECTION_ITEM_INJECTION_KEY } = createCollectionWithScope("RovingFocusGroup");
  30543. //#endregion
  30544. //#region ../../packages/components/roving-focus-group/src/tokens.ts
  30545. const ROVING_FOCUS_GROUP_INJECTION_KEY = Symbol("elRovingFocusGroup");
  30546. const ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY = Symbol("elRovingFocusGroupItem");
  30547. //#endregion
  30548. //#region ../../packages/components/roving-focus-group/src/utils.ts
  30549. const MAP_KEY_TO_FOCUS_INTENT = {
  30550. ArrowLeft: "prev",
  30551. ArrowUp: "prev",
  30552. ArrowRight: "next",
  30553. ArrowDown: "next",
  30554. PageUp: "first",
  30555. Home: "first",
  30556. PageDown: "last",
  30557. End: "last"
  30558. };
  30559. const getDirectionAwareKey = (key, dir) => {
  30560. if (dir !== "rtl") return key;
  30561. switch (key) {
  30562. case EVENT_CODE.right: return EVENT_CODE.left;
  30563. case EVENT_CODE.left: return EVENT_CODE.right;
  30564. default: return key;
  30565. }
  30566. };
  30567. const getFocusIntent = (event, orientation, dir) => {
  30568. const key = getDirectionAwareKey(getEventCode(event), dir);
  30569. if (orientation === "vertical" && [EVENT_CODE.left, EVENT_CODE.right].includes(key)) return void 0;
  30570. if (orientation === "horizontal" && [EVENT_CODE.up, EVENT_CODE.down].includes(key)) return void 0;
  30571. return MAP_KEY_TO_FOCUS_INTENT[key];
  30572. };
  30573. const reorderArray = (array, atIdx) => {
  30574. return array.map((_, idx) => array[(idx + atIdx) % array.length]);
  30575. };
  30576. const focusFirst = (elements) => {
  30577. const { activeElement: prevActive } = document;
  30578. for (const element of elements) {
  30579. if (element === prevActive) return;
  30580. element.focus();
  30581. if (prevActive !== document.activeElement) return;
  30582. }
  30583. };
  30584. //#endregion
  30585. //#region ../../packages/components/roving-focus-group/src/roving-focus-group-impl.vue?vue&type=script&lang.ts
  30586. const CURRENT_TAB_ID_CHANGE_EVT = "currentTabIdChange";
  30587. const ENTRY_FOCUS_EVT = "rovingFocusGroup.entryFocus";
  30588. const EVT_OPTS = {
  30589. bubbles: false,
  30590. cancelable: true
  30591. };
  30592. var roving_focus_group_impl_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  30593. name: "ElRovingFocusGroupImpl",
  30594. inheritAttrs: false,
  30595. props: rovingFocusGroupProps,
  30596. emits: [CURRENT_TAB_ID_CHANGE_EVT, "entryFocus"],
  30597. setup(props, { emit }) {
  30598. const currentTabbedId = (0, vue.ref)((props.currentTabId || props.defaultCurrentTabId) ?? null);
  30599. const isBackingOut = (0, vue.ref)(false);
  30600. const isClickFocus = (0, vue.ref)(false);
  30601. const rovingFocusGroupRef = (0, vue.ref)();
  30602. const { getItems } = (0, vue.inject)(COLLECTION_INJECTION_KEY, void 0);
  30603. const rovingFocusGroupRootStyle = (0, vue.computed)(() => {
  30604. return [{ outline: "none" }, props.style];
  30605. });
  30606. const onItemFocus = (tabbedId) => {
  30607. emit(CURRENT_TAB_ID_CHANGE_EVT, tabbedId);
  30608. };
  30609. const onItemShiftTab = () => {
  30610. isBackingOut.value = true;
  30611. };
  30612. const onMousedown = composeEventHandlers((e) => {
  30613. props.onMousedown?.(e);
  30614. }, () => {
  30615. isClickFocus.value = true;
  30616. });
  30617. const onFocus = composeEventHandlers((e) => {
  30618. props.onFocus?.(e);
  30619. }, (e) => {
  30620. const isKeyboardFocus = !(0, vue.unref)(isClickFocus);
  30621. const { target, currentTarget } = e;
  30622. if (target === currentTarget && isKeyboardFocus && !(0, vue.unref)(isBackingOut)) {
  30623. const entryFocusEvt = new Event(ENTRY_FOCUS_EVT, EVT_OPTS);
  30624. currentTarget?.dispatchEvent(entryFocusEvt);
  30625. if (!entryFocusEvt.defaultPrevented) {
  30626. const items = getItems().filter((item) => item.focusable);
  30627. focusFirst([
  30628. items.find((item) => item.active),
  30629. items.find((item) => item.id === (0, vue.unref)(currentTabbedId)),
  30630. ...items
  30631. ].filter(Boolean).map((item) => item.ref));
  30632. }
  30633. }
  30634. isClickFocus.value = false;
  30635. });
  30636. const onBlur = composeEventHandlers((e) => {
  30637. props.onBlur?.(e);
  30638. }, () => {
  30639. isBackingOut.value = false;
  30640. });
  30641. const handleEntryFocus = (...args) => {
  30642. emit("entryFocus", ...args);
  30643. };
  30644. const onKeydown = (e) => {
  30645. const focusIntent = getFocusIntent(e);
  30646. if (focusIntent) {
  30647. e.preventDefault();
  30648. let elements = getItems().filter((item) => item.focusable).map((item) => item.ref);
  30649. switch (focusIntent) {
  30650. case "last":
  30651. elements.reverse();
  30652. break;
  30653. case "prev":
  30654. case "next": {
  30655. if (focusIntent === "prev") elements.reverse();
  30656. const currentIdx = elements.indexOf(e.currentTarget);
  30657. elements = props.loop ? reorderArray(elements, currentIdx + 1) : elements.slice(currentIdx + 1);
  30658. break;
  30659. }
  30660. default: break;
  30661. }
  30662. (0, vue.nextTick)(() => {
  30663. focusFirst(elements);
  30664. });
  30665. }
  30666. };
  30667. (0, vue.provide)(ROVING_FOCUS_GROUP_INJECTION_KEY, {
  30668. currentTabbedId: (0, vue.readonly)(currentTabbedId),
  30669. loop: (0, vue.toRef)(props, "loop"),
  30670. tabIndex: (0, vue.computed)(() => {
  30671. return (0, vue.unref)(isBackingOut) ? -1 : 0;
  30672. }),
  30673. rovingFocusGroupRef,
  30674. rovingFocusGroupRootStyle,
  30675. orientation: (0, vue.toRef)(props, "orientation"),
  30676. dir: (0, vue.toRef)(props, "dir"),
  30677. onItemFocus,
  30678. onItemShiftTab,
  30679. onBlur,
  30680. onFocus,
  30681. onMousedown,
  30682. onKeydown
  30683. });
  30684. (0, vue.watch)(() => props.currentTabId, (val) => {
  30685. currentTabbedId.value = val ?? null;
  30686. });
  30687. useEventListener(rovingFocusGroupRef, ENTRY_FOCUS_EVT, handleEntryFocus);
  30688. }
  30689. });
  30690. //#endregion
  30691. //#region ../../packages/components/roving-focus-group/src/roving-focus-group-impl.vue
  30692. function _sfc_render$13(_ctx, _cache, $props, $setup, $data, $options) {
  30693. return (0, vue.renderSlot)(_ctx.$slots, "default");
  30694. }
  30695. var roving_focus_group_impl_default = /* @__PURE__ */ _plugin_vue_export_helper_default(roving_focus_group_impl_vue_vue_type_script_lang_default, [["render", _sfc_render$13]]);
  30696. //#endregion
  30697. //#region ../../packages/components/roving-focus-group/src/roving-focus-group.vue?vue&type=script&lang.ts
  30698. var roving_focus_group_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  30699. name: "ElRovingFocusGroup",
  30700. components: {
  30701. ElFocusGroupCollection: ElCollection,
  30702. ElRovingFocusGroupImpl: roving_focus_group_impl_default
  30703. }
  30704. });
  30705. //#endregion
  30706. //#region ../../packages/components/roving-focus-group/src/roving-focus-group.vue
  30707. function _sfc_render$12(_ctx, _cache, $props, $setup, $data, $options) {
  30708. const _component_el_roving_focus_group_impl = (0, vue.resolveComponent)("el-roving-focus-group-impl");
  30709. const _component_el_focus_group_collection = (0, vue.resolveComponent)("el-focus-group-collection");
  30710. return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_focus_group_collection, null, {
  30711. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_roving_focus_group_impl, (0, vue.normalizeProps)((0, vue.guardReactiveProps)(_ctx.$attrs)), {
  30712. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  30713. _: 3
  30714. }, 16)]),
  30715. _: 3
  30716. });
  30717. }
  30718. var roving_focus_group_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(roving_focus_group_vue_vue_type_script_lang_default, [["render", _sfc_render$12]]);
  30719. //#endregion
  30720. //#region ../../packages/components/roving-focus-group/src/roving-focus-item.vue?vue&type=script&lang.ts
  30721. var roving_focus_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  30722. components: { ElRovingFocusCollectionItem: ElCollectionItem },
  30723. props: {
  30724. focusable: {
  30725. type: Boolean,
  30726. default: true
  30727. },
  30728. active: Boolean
  30729. },
  30730. emits: [
  30731. "mousedown",
  30732. "focus",
  30733. "keydown"
  30734. ],
  30735. setup(props, { emit }) {
  30736. const { currentTabbedId, onItemFocus, onItemShiftTab, onKeydown } = (0, vue.inject)(ROVING_FOCUS_GROUP_INJECTION_KEY, void 0);
  30737. const id = useId();
  30738. const rovingFocusGroupItemRef = (0, vue.ref)();
  30739. const handleMousedown = composeEventHandlers((e) => {
  30740. emit("mousedown", e);
  30741. }, (e) => {
  30742. if (!props.focusable) e.preventDefault();
  30743. else onItemFocus((0, vue.unref)(id));
  30744. });
  30745. const handleFocus = composeEventHandlers((e) => {
  30746. emit("focus", e);
  30747. }, () => {
  30748. onItemFocus((0, vue.unref)(id));
  30749. });
  30750. const handleKeydown = composeEventHandlers((e) => {
  30751. emit("keydown", e);
  30752. }, (e) => {
  30753. const { shiftKey, target, currentTarget } = e;
  30754. if (getEventCode(e) === EVENT_CODE.tab && shiftKey) {
  30755. onItemShiftTab();
  30756. return;
  30757. }
  30758. if (target !== currentTarget) return;
  30759. onKeydown(e);
  30760. });
  30761. const isCurrentTab = (0, vue.computed)(() => currentTabbedId.value === (0, vue.unref)(id));
  30762. (0, vue.provide)(ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY, {
  30763. rovingFocusGroupItemRef,
  30764. tabIndex: (0, vue.computed)(() => (0, vue.unref)(isCurrentTab) ? 0 : -1),
  30765. handleMousedown,
  30766. handleFocus,
  30767. handleKeydown
  30768. });
  30769. return {
  30770. id,
  30771. handleKeydown,
  30772. handleFocus,
  30773. handleMousedown
  30774. };
  30775. }
  30776. });
  30777. //#endregion
  30778. //#region ../../packages/components/roving-focus-group/src/roving-focus-item.vue
  30779. function _sfc_render$11(_ctx, _cache, $props, $setup, $data, $options) {
  30780. const _component_el_roving_focus_collection_item = (0, vue.resolveComponent)("el-roving-focus-collection-item");
  30781. return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_roving_focus_collection_item, {
  30782. id: _ctx.id,
  30783. focusable: _ctx.focusable,
  30784. active: _ctx.active
  30785. }, {
  30786. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  30787. _: 3
  30788. }, 8, [
  30789. "id",
  30790. "focusable",
  30791. "active"
  30792. ]);
  30793. }
  30794. var roving_focus_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(roving_focus_item_vue_vue_type_script_lang_default, [["render", _sfc_render$11]]);
  30795. //#endregion
  30796. //#region ../../packages/components/roving-focus-group/index.ts
  30797. var roving_focus_group_default = roving_focus_group_default$1;
  30798. //#endregion
  30799. //#region ../../packages/components/dropdown/src/dropdown.ts
  30800. const dropdownProps = buildProps({
  30801. trigger: {
  30802. ...useTooltipTriggerProps.trigger,
  30803. type: definePropType([String, Array])
  30804. },
  30805. triggerKeys: {
  30806. type: definePropType(Array),
  30807. default: () => [
  30808. EVENT_CODE.enter,
  30809. EVENT_CODE.numpadEnter,
  30810. EVENT_CODE.space,
  30811. EVENT_CODE.down
  30812. ]
  30813. },
  30814. virtualTriggering: useTooltipTriggerProps.virtualTriggering,
  30815. virtualRef: useTooltipTriggerProps.virtualRef,
  30816. effect: {
  30817. ...useTooltipContentProps.effect,
  30818. default: "light"
  30819. },
  30820. type: { type: definePropType(String) },
  30821. placement: {
  30822. type: definePropType(String),
  30823. default: "bottom"
  30824. },
  30825. popperOptions: {
  30826. type: definePropType(Object),
  30827. default: () => ({})
  30828. },
  30829. id: String,
  30830. size: {
  30831. type: String,
  30832. default: ""
  30833. },
  30834. splitButton: Boolean,
  30835. hideOnClick: {
  30836. type: Boolean,
  30837. default: true
  30838. },
  30839. loop: {
  30840. type: Boolean,
  30841. default: true
  30842. },
  30843. showArrow: {
  30844. type: Boolean,
  30845. default: true
  30846. },
  30847. showTimeout: {
  30848. type: Number,
  30849. default: 150
  30850. },
  30851. hideTimeout: {
  30852. type: Number,
  30853. default: 150
  30854. },
  30855. tabindex: {
  30856. type: definePropType([Number, String]),
  30857. default: 0
  30858. },
  30859. maxHeight: {
  30860. type: definePropType([Number, String]),
  30861. default: ""
  30862. },
  30863. popperClass: useTooltipContentProps.popperClass,
  30864. popperStyle: useTooltipContentProps.popperStyle,
  30865. disabled: Boolean,
  30866. role: {
  30867. type: String,
  30868. values: roleTypes,
  30869. default: "menu"
  30870. },
  30871. buttonProps: { type: definePropType(Object) },
  30872. teleported: useTooltipContentProps.teleported,
  30873. appendTo: useTooltipContentProps.appendTo,
  30874. persistent: {
  30875. type: Boolean,
  30876. default: true
  30877. }
  30878. });
  30879. const dropdownItemProps = buildProps({
  30880. command: {
  30881. type: [
  30882. Object,
  30883. String,
  30884. Number
  30885. ],
  30886. default: () => ({})
  30887. },
  30888. disabled: Boolean,
  30889. divided: Boolean,
  30890. textValue: String,
  30891. icon: { type: iconPropType }
  30892. });
  30893. const dropdownMenuProps = buildProps({ onKeydown: { type: definePropType(Function) } });
  30894. const FIRST_KEYS = [
  30895. EVENT_CODE.down,
  30896. EVENT_CODE.pageDown,
  30897. EVENT_CODE.home
  30898. ];
  30899. const LAST_KEYS = [
  30900. EVENT_CODE.up,
  30901. EVENT_CODE.pageUp,
  30902. EVENT_CODE.end
  30903. ];
  30904. const FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];
  30905. //#endregion
  30906. //#region ../../packages/components/dropdown/src/tokens.ts
  30907. const DROPDOWN_INJECTION_KEY = Symbol("elDropdown");
  30908. const DROPDOWN_INSTANCE_INJECTION_KEY = "elDropdown";
  30909. //#endregion
  30910. //#region ../../packages/components/dropdown/src/dropdown.vue?vue&type=script&lang.ts
  30911. const { ButtonGroup: ElButtonGroup$1 } = ElButton;
  30912. var dropdown_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  30913. name: "ElDropdown",
  30914. components: {
  30915. ElButton,
  30916. ElButtonGroup: ElButtonGroup$1,
  30917. ElScrollbar,
  30918. ElTooltip,
  30919. ElRovingFocusGroup: roving_focus_group_default,
  30920. ElOnlyChild: OnlyChild,
  30921. ElIcon,
  30922. ArrowDown: arrow_down_default
  30923. },
  30924. props: dropdownProps,
  30925. emits: [
  30926. "visible-change",
  30927. "click",
  30928. "command"
  30929. ],
  30930. setup(props, { emit }) {
  30931. const _instance = (0, vue.getCurrentInstance)();
  30932. const ns = useNamespace("dropdown");
  30933. const { t } = useLocale();
  30934. const triggeringElementRef = (0, vue.ref)();
  30935. const referenceElementRef = (0, vue.ref)();
  30936. const popperRef = (0, vue.ref)();
  30937. const contentRef = (0, vue.ref)();
  30938. const scrollbar = (0, vue.ref)(null);
  30939. const currentTabId = (0, vue.ref)(null);
  30940. const isUsingKeyboard = (0, vue.ref)(false);
  30941. const wrapStyle = (0, vue.computed)(() => ({ maxHeight: addUnit(props.maxHeight) }));
  30942. const dropdownTriggerKls = (0, vue.computed)(() => [ns.m(dropdownSize.value)]);
  30943. const trigger = (0, vue.computed)(() => castArray$1(props.trigger));
  30944. const defaultTriggerId = useId().value;
  30945. const triggerId = (0, vue.computed)(() => props.id || defaultTriggerId);
  30946. function handleClick() {
  30947. popperRef.value?.onClose(void 0, 0);
  30948. }
  30949. function handleClose() {
  30950. popperRef.value?.onClose();
  30951. }
  30952. function handleOpen() {
  30953. popperRef.value?.onOpen();
  30954. }
  30955. const dropdownSize = useFormSize();
  30956. function commandHandler(...args) {
  30957. emit("command", ...args);
  30958. }
  30959. function onItemEnter() {}
  30960. function onItemLeave() {
  30961. const contentEl = (0, vue.unref)(contentRef);
  30962. trigger.value.includes("hover") && contentEl?.focus({ preventScroll: true });
  30963. currentTabId.value = null;
  30964. }
  30965. function handleCurrentTabIdChange(id) {
  30966. currentTabId.value = id;
  30967. }
  30968. function handleBeforeShowTooltip() {
  30969. emit("visible-change", true);
  30970. }
  30971. function handleShowTooltip(event) {
  30972. isUsingKeyboard.value = event?.type === "keydown";
  30973. contentRef.value?.focus();
  30974. }
  30975. function handleBeforeHideTooltip() {
  30976. emit("visible-change", false);
  30977. }
  30978. (0, vue.provide)(DROPDOWN_INJECTION_KEY, {
  30979. contentRef,
  30980. role: (0, vue.computed)(() => props.role),
  30981. triggerId,
  30982. isUsingKeyboard,
  30983. onItemEnter,
  30984. onItemLeave,
  30985. handleClose
  30986. });
  30987. (0, vue.provide)(DROPDOWN_INSTANCE_INJECTION_KEY, {
  30988. instance: _instance,
  30989. dropdownSize,
  30990. handleClick,
  30991. commandHandler,
  30992. trigger: (0, vue.toRef)(props, "trigger"),
  30993. hideOnClick: (0, vue.toRef)(props, "hideOnClick")
  30994. });
  30995. const handlerMainButtonClick = (event) => {
  30996. emit("click", event);
  30997. };
  30998. return {
  30999. t,
  31000. ns,
  31001. scrollbar,
  31002. wrapStyle,
  31003. dropdownTriggerKls,
  31004. dropdownSize,
  31005. triggerId,
  31006. currentTabId,
  31007. handleCurrentTabIdChange,
  31008. handlerMainButtonClick,
  31009. handleClose,
  31010. handleOpen,
  31011. handleBeforeShowTooltip,
  31012. handleShowTooltip,
  31013. handleBeforeHideTooltip,
  31014. popperRef,
  31015. contentRef,
  31016. triggeringElementRef,
  31017. referenceElementRef
  31018. };
  31019. }
  31020. });
  31021. //#endregion
  31022. //#region ../../packages/components/dropdown/src/dropdown.vue
  31023. function _sfc_render$10(_ctx, _cache, $props, $setup, $data, $options) {
  31024. const _component_el_roving_focus_group = (0, vue.resolveComponent)("el-roving-focus-group");
  31025. const _component_el_scrollbar = (0, vue.resolveComponent)("el-scrollbar");
  31026. const _component_el_only_child = (0, vue.resolveComponent)("el-only-child");
  31027. const _component_el_tooltip = (0, vue.resolveComponent)("el-tooltip");
  31028. const _component_el_button = (0, vue.resolveComponent)("el-button");
  31029. const _component_arrow_down = (0, vue.resolveComponent)("arrow-down");
  31030. const _component_el_icon = (0, vue.resolveComponent)("el-icon");
  31031. const _component_el_button_group = (0, vue.resolveComponent)("el-button-group");
  31032. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([_ctx.ns.b(), _ctx.ns.is("disabled", _ctx.disabled)]) }, [(0, vue.createVNode)(_component_el_tooltip, {
  31033. ref: "popperRef",
  31034. role: _ctx.role,
  31035. effect: _ctx.effect,
  31036. "fallback-placements": ["bottom", "top"],
  31037. "popper-options": _ctx.popperOptions,
  31038. "gpu-acceleration": false,
  31039. placement: _ctx.placement,
  31040. "popper-class": [_ctx.ns.e("popper"), _ctx.popperClass],
  31041. "popper-style": _ctx.popperStyle,
  31042. trigger: _ctx.trigger,
  31043. "trigger-keys": _ctx.triggerKeys,
  31044. "trigger-target-el": _ctx.contentRef,
  31045. "show-arrow": _ctx.showArrow,
  31046. "show-after": _ctx.trigger === "hover" ? _ctx.showTimeout : 0,
  31047. "hide-after": _ctx.trigger === "hover" ? _ctx.hideTimeout : 0,
  31048. "virtual-ref": _ctx.virtualRef ?? _ctx.triggeringElementRef,
  31049. "virtual-triggering": _ctx.virtualTriggering || _ctx.splitButton,
  31050. disabled: _ctx.disabled,
  31051. transition: `${_ctx.ns.namespace.value}-zoom-in-top`,
  31052. teleported: _ctx.teleported,
  31053. "append-to": _ctx.appendTo,
  31054. pure: "",
  31055. "focus-on-target": "",
  31056. persistent: _ctx.persistent,
  31057. onBeforeShow: _ctx.handleBeforeShowTooltip,
  31058. onShow: _ctx.handleShowTooltip,
  31059. onBeforeHide: _ctx.handleBeforeHideTooltip
  31060. }, (0, vue.createSlots)({
  31061. content: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_scrollbar, {
  31062. ref: "scrollbar",
  31063. "wrap-style": _ctx.wrapStyle,
  31064. tag: "div",
  31065. "view-class": _ctx.ns.e("list")
  31066. }, {
  31067. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_roving_focus_group, {
  31068. loop: _ctx.loop,
  31069. "current-tab-id": _ctx.currentTabId,
  31070. orientation: "horizontal",
  31071. onCurrentTabIdChange: _ctx.handleCurrentTabIdChange
  31072. }, {
  31073. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "dropdown")]),
  31074. _: 3
  31075. }, 8, [
  31076. "loop",
  31077. "current-tab-id",
  31078. "onCurrentTabIdChange"
  31079. ])]),
  31080. _: 3
  31081. }, 8, ["wrap-style", "view-class"])]),
  31082. _: 2
  31083. }, [!_ctx.splitButton ? {
  31084. name: "default",
  31085. fn: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_only_child, {
  31086. id: _ctx.triggerId,
  31087. ref: "triggeringElementRef",
  31088. role: "button",
  31089. tabindex: _ctx.tabindex
  31090. }, {
  31091. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  31092. _: 3
  31093. }, 8, ["id", "tabindex"])]),
  31094. key: "0"
  31095. } : void 0]), 1032, [
  31096. "role",
  31097. "effect",
  31098. "popper-options",
  31099. "placement",
  31100. "popper-class",
  31101. "popper-style",
  31102. "trigger",
  31103. "trigger-keys",
  31104. "trigger-target-el",
  31105. "show-arrow",
  31106. "show-after",
  31107. "hide-after",
  31108. "virtual-ref",
  31109. "virtual-triggering",
  31110. "disabled",
  31111. "transition",
  31112. "teleported",
  31113. "append-to",
  31114. "persistent",
  31115. "onBeforeShow",
  31116. "onShow",
  31117. "onBeforeHide"
  31118. ]), _ctx.splitButton ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_button_group, { key: 0 }, {
  31119. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_button, (0, vue.mergeProps)({ ref: "referenceElementRef" }, _ctx.buttonProps, {
  31120. size: _ctx.dropdownSize,
  31121. type: _ctx.type,
  31122. disabled: _ctx.disabled,
  31123. tabindex: _ctx.tabindex,
  31124. onClick: _ctx.handlerMainButtonClick
  31125. }), {
  31126. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  31127. _: 3
  31128. }, 16, [
  31129. "size",
  31130. "type",
  31131. "disabled",
  31132. "tabindex",
  31133. "onClick"
  31134. ]), (0, vue.createVNode)(_component_el_button, (0, vue.mergeProps)({
  31135. id: _ctx.triggerId,
  31136. ref: "triggeringElementRef"
  31137. }, _ctx.buttonProps, {
  31138. role: "button",
  31139. size: _ctx.dropdownSize,
  31140. type: _ctx.type,
  31141. class: _ctx.ns.e("caret-button"),
  31142. disabled: _ctx.disabled,
  31143. tabindex: _ctx.tabindex,
  31144. "aria-label": _ctx.t("el.dropdown.toggleDropdown")
  31145. }), {
  31146. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_icon, { class: (0, vue.normalizeClass)(_ctx.ns.e("icon")) }, {
  31147. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_arrow_down)]),
  31148. _: 1
  31149. }, 8, ["class"])]),
  31150. _: 1
  31151. }, 16, [
  31152. "id",
  31153. "size",
  31154. "type",
  31155. "class",
  31156. "disabled",
  31157. "tabindex",
  31158. "aria-label"
  31159. ])]),
  31160. _: 3
  31161. })) : (0, vue.createCommentVNode)("v-if", true)], 2);
  31162. }
  31163. var dropdown_default = /* @__PURE__ */ _plugin_vue_export_helper_default(dropdown_vue_vue_type_script_lang_default, [["render", _sfc_render$10]]);
  31164. //#endregion
  31165. //#region ../../packages/components/dropdown/src/dropdown-item-impl.vue?vue&type=script&lang.ts
  31166. var dropdown_item_impl_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  31167. name: "DropdownItemImpl",
  31168. components: { ElIcon },
  31169. props: dropdownItemProps,
  31170. emits: [
  31171. "pointermove",
  31172. "pointerleave",
  31173. "click",
  31174. "clickimpl"
  31175. ],
  31176. setup(_, { emit }) {
  31177. const ns = useNamespace("dropdown");
  31178. const { role: menuRole } = (0, vue.inject)(DROPDOWN_INJECTION_KEY, void 0);
  31179. const { collectionItemRef: rovingFocusCollectionItemRef } = (0, vue.inject)(COLLECTION_ITEM_INJECTION_KEY, void 0);
  31180. const { rovingFocusGroupItemRef, tabIndex, handleFocus, handleKeydown: handleItemKeydown, handleMousedown } = (0, vue.inject)(ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY, void 0);
  31181. const itemRef = composeRefs(rovingFocusCollectionItemRef, rovingFocusGroupItemRef);
  31182. const role = (0, vue.computed)(() => {
  31183. if (menuRole.value === "menu") return "menuitem";
  31184. else if (menuRole.value === "navigation") return "link";
  31185. return "button";
  31186. });
  31187. const handleKeydown = composeEventHandlers((e) => {
  31188. const code = getEventCode(e);
  31189. if ([
  31190. EVENT_CODE.enter,
  31191. EVENT_CODE.numpadEnter,
  31192. EVENT_CODE.space
  31193. ].includes(code)) {
  31194. e.preventDefault();
  31195. e.stopImmediatePropagation();
  31196. emit("clickimpl", e);
  31197. return true;
  31198. }
  31199. }, handleItemKeydown);
  31200. return {
  31201. ns,
  31202. itemRef,
  31203. dataset: { [COLLECTION_ITEM_SIGN]: "" },
  31204. role,
  31205. tabIndex,
  31206. handleFocus,
  31207. handleKeydown,
  31208. handleMousedown
  31209. };
  31210. }
  31211. });
  31212. //#endregion
  31213. //#region ../../packages/components/dropdown/src/dropdown-item-impl.vue
  31214. const _hoisted_1$40 = [
  31215. "aria-disabled",
  31216. "tabindex",
  31217. "role"
  31218. ];
  31219. function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
  31220. const _component_el_icon = (0, vue.resolveComponent)("el-icon");
  31221. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [_ctx.divided ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  31222. key: 0,
  31223. role: "separator",
  31224. class: (0, vue.normalizeClass)(_ctx.ns.bem("menu", "item", "divided"))
  31225. }, null, 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("li", (0, vue.mergeProps)({ ref: _ctx.itemRef }, {
  31226. ..._ctx.dataset,
  31227. ..._ctx.$attrs
  31228. }, {
  31229. "aria-disabled": _ctx.disabled,
  31230. class: [_ctx.ns.be("menu", "item"), _ctx.ns.is("disabled", _ctx.disabled)],
  31231. tabindex: _ctx.tabIndex,
  31232. role: _ctx.role,
  31233. onClick: _cache[0] || (_cache[0] = (e) => _ctx.$emit("clickimpl", e)),
  31234. onFocus: _cache[1] || (_cache[1] = (...args) => _ctx.handleFocus && _ctx.handleFocus(...args)),
  31235. onKeydown: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.handleKeydown && _ctx.handleKeydown(...args), ["self"])),
  31236. onMousedown: _cache[3] || (_cache[3] = (...args) => _ctx.handleMousedown && _ctx.handleMousedown(...args)),
  31237. onPointermove: _cache[4] || (_cache[4] = (e) => _ctx.$emit("pointermove", e)),
  31238. onPointerleave: _cache[5] || (_cache[5] = (e) => _ctx.$emit("pointerleave", e))
  31239. }), [_ctx.icon || _ctx.$slots.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, { key: 0 }, {
  31240. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.icon)))])]),
  31241. _: 3
  31242. })) : (0, vue.createCommentVNode)("v-if", true), (0, vue.renderSlot)(_ctx.$slots, "default")], 16, _hoisted_1$40)], 64);
  31243. }
  31244. var dropdown_item_impl_default = /* @__PURE__ */ _plugin_vue_export_helper_default(dropdown_item_impl_vue_vue_type_script_lang_default, [["render", _sfc_render$9]]);
  31245. //#endregion
  31246. //#region ../../packages/components/dropdown/src/useDropdown.ts
  31247. const useDropdown = () => {
  31248. const elDropdown = (0, vue.inject)(DROPDOWN_INSTANCE_INJECTION_KEY, {});
  31249. return {
  31250. elDropdown,
  31251. _elDropdownSize: (0, vue.computed)(() => elDropdown?.dropdownSize)
  31252. };
  31253. };
  31254. //#endregion
  31255. //#region ../../packages/components/dropdown/src/dropdown-item.vue?vue&type=script&lang.ts
  31256. var dropdown_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  31257. name: "ElDropdownItem",
  31258. components: {
  31259. ElRovingFocusItem: roving_focus_item_default,
  31260. ElDropdownItemImpl: dropdown_item_impl_default
  31261. },
  31262. inheritAttrs: false,
  31263. props: dropdownItemProps,
  31264. emits: [
  31265. "pointermove",
  31266. "pointerleave",
  31267. "click"
  31268. ],
  31269. setup(props, { emit, attrs }) {
  31270. const { elDropdown } = useDropdown();
  31271. const _instance = (0, vue.getCurrentInstance)();
  31272. const { onItemEnter, onItemLeave } = (0, vue.inject)(DROPDOWN_INJECTION_KEY, void 0);
  31273. const handlePointerMove = composeEventHandlers((e) => {
  31274. emit("pointermove", e);
  31275. return e.defaultPrevented;
  31276. }, whenMouse((e) => {
  31277. if (props.disabled) {
  31278. onItemLeave(e);
  31279. return;
  31280. }
  31281. const target = e.currentTarget;
  31282. if (target === document.activeElement || target.contains(document.activeElement)) return;
  31283. onItemEnter(e);
  31284. if (!e.defaultPrevented) target?.focus({ preventScroll: true });
  31285. }));
  31286. const handlePointerLeave = composeEventHandlers((e) => {
  31287. emit("pointerleave", e);
  31288. return e.defaultPrevented;
  31289. }, whenMouse(onItemLeave));
  31290. return {
  31291. handleClick: composeEventHandlers((e) => {
  31292. if (props.disabled) return;
  31293. emit("click", e);
  31294. return e.type !== "keydown" && e.defaultPrevented;
  31295. }, (e) => {
  31296. if (props.disabled) {
  31297. e.stopImmediatePropagation();
  31298. return;
  31299. }
  31300. if (elDropdown?.hideOnClick?.value) elDropdown.handleClick?.();
  31301. elDropdown.commandHandler?.(props.command, _instance, e);
  31302. }),
  31303. handlePointerMove,
  31304. handlePointerLeave,
  31305. propsAndAttrs: (0, vue.computed)(() => ({
  31306. ...props,
  31307. ...attrs
  31308. }))
  31309. };
  31310. }
  31311. });
  31312. //#endregion
  31313. //#region ../../packages/components/dropdown/src/dropdown-item.vue
  31314. function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
  31315. const _component_el_dropdown_item_impl = (0, vue.resolveComponent)("el-dropdown-item-impl");
  31316. const _component_el_roving_focus_item = (0, vue.resolveComponent)("el-roving-focus-item");
  31317. return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_roving_focus_item, { focusable: !_ctx.disabled }, {
  31318. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_dropdown_item_impl, (0, vue.mergeProps)(_ctx.propsAndAttrs, {
  31319. onPointerleave: _ctx.handlePointerLeave,
  31320. onPointermove: _ctx.handlePointerMove,
  31321. onClickimpl: _ctx.handleClick
  31322. }), (0, vue.createSlots)({
  31323. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  31324. _: 2
  31325. }, [_ctx.$slots.icon ? {
  31326. name: "icon",
  31327. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "icon")]),
  31328. key: "0"
  31329. } : void 0]), 1040, [
  31330. "onPointerleave",
  31331. "onPointermove",
  31332. "onClickimpl"
  31333. ])]),
  31334. _: 3
  31335. }, 8, ["focusable"]);
  31336. }
  31337. var dropdown_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(dropdown_item_vue_vue_type_script_lang_default, [["render", _sfc_render$8]]);
  31338. //#endregion
  31339. //#region ../../packages/components/dropdown/src/dropdown-menu.vue?vue&type=script&lang.ts
  31340. var dropdown_menu_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  31341. name: "ElDropdownMenu",
  31342. props: dropdownMenuProps,
  31343. setup(props) {
  31344. const ns = useNamespace("dropdown");
  31345. const { _elDropdownSize } = useDropdown();
  31346. const size = _elDropdownSize.value;
  31347. const { contentRef, role, triggerId, isUsingKeyboard, handleClose } = (0, vue.inject)(DROPDOWN_INJECTION_KEY, void 0);
  31348. const { rovingFocusGroupRef, rovingFocusGroupRootStyle, onBlur, onFocus, onKeydown, onMousedown } = (0, vue.inject)(ROVING_FOCUS_GROUP_INJECTION_KEY, void 0);
  31349. const { collectionRef: rovingFocusGroupCollectionRef } = (0, vue.inject)(COLLECTION_INJECTION_KEY, void 0);
  31350. const dropdownKls = (0, vue.computed)(() => {
  31351. return [ns.b("menu"), ns.bm("menu", size?.value)];
  31352. });
  31353. const dropdownListWrapperRef = composeRefs(contentRef, rovingFocusGroupRef, rovingFocusGroupCollectionRef);
  31354. const handleKeydown = composeEventHandlers((e) => {
  31355. props.onKeydown?.(e);
  31356. }, (e) => {
  31357. const { currentTarget, target } = e;
  31358. const code = getEventCode(e);
  31359. if (currentTarget.contains(target)) {}
  31360. if (EVENT_CODE.tab === code) return handleClose();
  31361. onKeydown(e);
  31362. });
  31363. function handleFocus(e) {
  31364. isUsingKeyboard.value && onFocus(e);
  31365. }
  31366. return {
  31367. size,
  31368. rovingFocusGroupRootStyle,
  31369. dropdownKls,
  31370. role,
  31371. triggerId,
  31372. dropdownListWrapperRef,
  31373. handleKeydown,
  31374. onBlur,
  31375. handleFocus,
  31376. onMousedown
  31377. };
  31378. }
  31379. });
  31380. //#endregion
  31381. //#region ../../packages/components/dropdown/src/dropdown-menu.vue
  31382. const _hoisted_1$39 = ["role", "aria-labelledby"];
  31383. function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
  31384. return (0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
  31385. ref: _ctx.dropdownListWrapperRef,
  31386. class: (0, vue.normalizeClass)(_ctx.dropdownKls),
  31387. style: (0, vue.normalizeStyle)(_ctx.rovingFocusGroupRootStyle),
  31388. tabindex: -1,
  31389. role: _ctx.role,
  31390. "aria-labelledby": _ctx.triggerId,
  31391. onFocusin: _cache[0] || (_cache[0] = (...args) => _ctx.handleFocus && _ctx.handleFocus(...args)),
  31392. onFocusout: _cache[1] || (_cache[1] = (...args) => _ctx.onBlur && _ctx.onBlur(...args)),
  31393. onKeydown: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.handleKeydown && _ctx.handleKeydown(...args), ["self"])),
  31394. onMousedown: _cache[3] || (_cache[3] = (0, vue.withModifiers)((...args) => _ctx.onMousedown && _ctx.onMousedown(...args), ["self"]))
  31395. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 46, _hoisted_1$39);
  31396. }
  31397. var dropdown_menu_default = /* @__PURE__ */ _plugin_vue_export_helper_default(dropdown_menu_vue_vue_type_script_lang_default, [["render", _sfc_render$7]]);
  31398. //#endregion
  31399. //#region ../../packages/components/dropdown/index.ts
  31400. const ElDropdown = withInstall(dropdown_default, {
  31401. DropdownItem: dropdown_item_default,
  31402. DropdownMenu: dropdown_menu_default
  31403. });
  31404. const ElDropdownItem = withNoopInstall(dropdown_item_default);
  31405. const ElDropdownMenu = withNoopInstall(dropdown_menu_default);
  31406. //#endregion
  31407. //#region ../../packages/components/empty/src/empty.ts
  31408. const emptyProps = buildProps({
  31409. image: {
  31410. type: String,
  31411. default: ""
  31412. },
  31413. imageSize: Number,
  31414. description: {
  31415. type: String,
  31416. default: ""
  31417. }
  31418. });
  31419. //#endregion
  31420. //#region ../../packages/components/empty/src/img-empty.vue?vue&type=script&setup=true&lang.ts
  31421. const _hoisted_1$38 = {
  31422. viewBox: "0 0 79 86",
  31423. version: "1.1",
  31424. xmlns: "http://www.w3.org/2000/svg",
  31425. "xmlns:xlink": "http://www.w3.org/1999/xlink"
  31426. };
  31427. const _hoisted_2$24 = ["id"];
  31428. const _hoisted_3$8 = ["stop-color"];
  31429. const _hoisted_4$6 = ["stop-color"];
  31430. const _hoisted_5$4 = ["id"];
  31431. const _hoisted_6$1 = ["stop-color"];
  31432. const _hoisted_7 = ["stop-color"];
  31433. const _hoisted_8 = ["id"];
  31434. const _hoisted_9 = {
  31435. stroke: "none",
  31436. "stroke-width": "1",
  31437. fill: "none",
  31438. "fill-rule": "evenodd"
  31439. };
  31440. const _hoisted_10 = { transform: "translate(-1268.000000, -535.000000)" };
  31441. const _hoisted_11 = { transform: "translate(1268.000000, 535.000000)" };
  31442. const _hoisted_12 = ["fill"];
  31443. const _hoisted_13 = ["fill"];
  31444. const _hoisted_14 = { transform: "translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)" };
  31445. const _hoisted_15 = ["fill"];
  31446. const _hoisted_16 = ["fill"];
  31447. const _hoisted_17 = ["fill"];
  31448. const _hoisted_18 = ["fill"];
  31449. const _hoisted_19 = ["fill"];
  31450. const _hoisted_20 = { transform: "translate(53.000000, 45.000000)" };
  31451. const _hoisted_21 = ["fill", "xlink:href"];
  31452. const _hoisted_22 = ["fill", "mask"];
  31453. const _hoisted_23 = ["fill"];
  31454. var img_empty_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  31455. name: "ImgEmpty",
  31456. __name: "img-empty",
  31457. setup(__props) {
  31458. const ns = useNamespace("empty");
  31459. const id = useId();
  31460. return (_ctx, _cache) => {
  31461. return (0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_1$38, [(0, vue.createElementVNode)("defs", null, [
  31462. (0, vue.createElementVNode)("linearGradient", {
  31463. id: `linearGradient-1-${(0, vue.unref)(id)}`,
  31464. x1: "38.8503086%",
  31465. y1: "0%",
  31466. x2: "61.1496914%",
  31467. y2: "100%"
  31468. }, [(0, vue.createElementVNode)("stop", {
  31469. "stop-color": `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-1")})`,
  31470. offset: "0%"
  31471. }, null, 8, _hoisted_3$8), (0, vue.createElementVNode)("stop", {
  31472. "stop-color": `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-4")})`,
  31473. offset: "100%"
  31474. }, null, 8, _hoisted_4$6)], 8, _hoisted_2$24),
  31475. (0, vue.createElementVNode)("linearGradient", {
  31476. id: `linearGradient-2-${(0, vue.unref)(id)}`,
  31477. x1: "0%",
  31478. y1: "9.5%",
  31479. x2: "100%",
  31480. y2: "90.5%"
  31481. }, [(0, vue.createElementVNode)("stop", {
  31482. "stop-color": `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-1")})`,
  31483. offset: "0%"
  31484. }, null, 8, _hoisted_6$1), (0, vue.createElementVNode)("stop", {
  31485. "stop-color": `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-6")})`,
  31486. offset: "100%"
  31487. }, null, 8, _hoisted_7)], 8, _hoisted_5$4),
  31488. (0, vue.createElementVNode)("rect", {
  31489. id: `path-3-${(0, vue.unref)(id)}`,
  31490. x: "0",
  31491. y: "0",
  31492. width: "17",
  31493. height: "36"
  31494. }, null, 8, _hoisted_8)
  31495. ]), (0, vue.createElementVNode)("g", _hoisted_9, [(0, vue.createElementVNode)("g", _hoisted_10, [(0, vue.createElementVNode)("g", _hoisted_11, [
  31496. (0, vue.createElementVNode)("path", {
  31497. d: "M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",
  31498. fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-3")})`
  31499. }, null, 8, _hoisted_12),
  31500. (0, vue.createElementVNode)("polygon", {
  31501. fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-7")})`,
  31502. transform: "translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",
  31503. points: "13 58 53 58 42 45 2 45"
  31504. }, null, 8, _hoisted_13),
  31505. (0, vue.createElementVNode)("g", _hoisted_14, [
  31506. (0, vue.createElementVNode)("polygon", {
  31507. fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-7")})`,
  31508. transform: "translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",
  31509. points: "2.84078316e-14 3 18 3 23 7 5 7"
  31510. }, null, 8, _hoisted_15),
  31511. (0, vue.createElementVNode)("polygon", {
  31512. fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-5")})`,
  31513. points: "-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"
  31514. }, null, 8, _hoisted_16),
  31515. (0, vue.createElementVNode)("rect", {
  31516. fill: `url(#linearGradient-1-${(0, vue.unref)(id)})`,
  31517. transform: "translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",
  31518. x: "38",
  31519. y: "7",
  31520. width: "17",
  31521. height: "36"
  31522. }, null, 8, _hoisted_17),
  31523. (0, vue.createElementVNode)("polygon", {
  31524. fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-2")})`,
  31525. transform: "translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",
  31526. points: "24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"
  31527. }, null, 8, _hoisted_18)
  31528. ]),
  31529. (0, vue.createElementVNode)("rect", {
  31530. fill: `url(#linearGradient-2-${(0, vue.unref)(id)})`,
  31531. x: "13",
  31532. y: "45",
  31533. width: "40",
  31534. height: "36"
  31535. }, null, 8, _hoisted_19),
  31536. (0, vue.createElementVNode)("g", _hoisted_20, [(0, vue.createElementVNode)("use", {
  31537. fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-8")})`,
  31538. transform: "translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ",
  31539. "xlink:href": `#path-3-${(0, vue.unref)(id)}`
  31540. }, null, 8, _hoisted_21), (0, vue.createElementVNode)("polygon", {
  31541. fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-9")})`,
  31542. mask: `url(#mask-4-${(0, vue.unref)(id)})`,
  31543. transform: "translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",
  31544. points: "7 0 24 0 20 18 7 16.5"
  31545. }, null, 8, _hoisted_22)]),
  31546. (0, vue.createElementVNode)("polygon", {
  31547. fill: `var(${(0, vue.unref)(ns).cssVarBlockName("fill-color-2")})`,
  31548. transform: "translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",
  31549. points: "62 45 79 45 70 58 53 58"
  31550. }, null, 8, _hoisted_23)
  31551. ])])])]);
  31552. };
  31553. }
  31554. });
  31555. //#endregion
  31556. //#region ../../packages/components/empty/src/img-empty.vue
  31557. var img_empty_default = img_empty_vue_vue_type_script_setup_true_lang_default;
  31558. //#endregion
  31559. //#region ../../packages/components/empty/src/empty.vue?vue&type=script&setup=true&lang.ts
  31560. const _hoisted_1$37 = ["src"];
  31561. const _hoisted_2$23 = { key: 1 };
  31562. var empty_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  31563. name: "ElEmpty",
  31564. __name: "empty",
  31565. props: emptyProps,
  31566. setup(__props) {
  31567. const props = __props;
  31568. const { t } = useLocale();
  31569. const ns = useNamespace("empty");
  31570. const emptyDescription = (0, vue.computed)(() => props.description || t("el.table.emptyText"));
  31571. const imageStyle = (0, vue.computed)(() => ({ width: addUnit(props.imageSize) }));
  31572. return (_ctx, _cache) => {
  31573. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [
  31574. (0, vue.createElementVNode)("div", {
  31575. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("image")),
  31576. style: (0, vue.normalizeStyle)(imageStyle.value)
  31577. }, [__props.image ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
  31578. key: 0,
  31579. src: __props.image,
  31580. ondragstart: "return false"
  31581. }, null, 8, _hoisted_1$37)) : (0, vue.renderSlot)(_ctx.$slots, "image", { key: 1 }, () => [(0, vue.createVNode)(img_empty_default)])], 6),
  31582. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("description")) }, [_ctx.$slots.description ? (0, vue.renderSlot)(_ctx.$slots, "description", { key: 0 }) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", _hoisted_2$23, (0, vue.toDisplayString)(emptyDescription.value), 1))], 2),
  31583. _ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  31584. key: 0,
  31585. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("bottom"))
  31586. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  31587. ], 2);
  31588. };
  31589. }
  31590. });
  31591. //#endregion
  31592. //#region ../../packages/components/empty/src/empty.vue
  31593. var empty_default = empty_vue_vue_type_script_setup_true_lang_default;
  31594. //#endregion
  31595. //#region ../../packages/components/empty/index.ts
  31596. const ElEmpty = withInstall(empty_default);
  31597. //#endregion
  31598. //#region ../../packages/components/image/src/image.ts
  31599. const imageProps = buildProps({
  31600. hideOnClickModal: Boolean,
  31601. src: {
  31602. type: String,
  31603. default: ""
  31604. },
  31605. fit: {
  31606. type: String,
  31607. values: [
  31608. "",
  31609. "contain",
  31610. "cover",
  31611. "fill",
  31612. "none",
  31613. "scale-down"
  31614. ],
  31615. default: ""
  31616. },
  31617. loading: {
  31618. type: String,
  31619. values: ["eager", "lazy"]
  31620. },
  31621. lazy: Boolean,
  31622. scrollContainer: { type: definePropType([String, Object]) },
  31623. previewSrcList: {
  31624. type: definePropType(Array),
  31625. default: () => mutable([])
  31626. },
  31627. previewTeleported: Boolean,
  31628. zIndex: { type: Number },
  31629. initialIndex: {
  31630. type: Number,
  31631. default: 0
  31632. },
  31633. infinite: {
  31634. type: Boolean,
  31635. default: true
  31636. },
  31637. closeOnPressEscape: {
  31638. type: Boolean,
  31639. default: true
  31640. },
  31641. zoomRate: {
  31642. type: Number,
  31643. default: 1.2
  31644. },
  31645. scale: {
  31646. type: Number,
  31647. default: 1
  31648. },
  31649. minScale: {
  31650. type: Number,
  31651. default: .2
  31652. },
  31653. maxScale: {
  31654. type: Number,
  31655. default: 7
  31656. },
  31657. showProgress: Boolean,
  31658. crossorigin: { type: definePropType(String) }
  31659. });
  31660. const imageEmits = {
  31661. load: (evt) => evt instanceof Event,
  31662. error: (evt) => evt instanceof Event,
  31663. switch: (val) => isNumber(val),
  31664. close: () => true,
  31665. show: () => true
  31666. };
  31667. //#endregion
  31668. //#region ../../packages/components/image-viewer/src/image-viewer.ts
  31669. const imageViewerProps = buildProps({
  31670. urlList: {
  31671. type: definePropType(Array),
  31672. default: () => mutable([])
  31673. },
  31674. zIndex: { type: Number },
  31675. initialIndex: {
  31676. type: Number,
  31677. default: 0
  31678. },
  31679. infinite: {
  31680. type: Boolean,
  31681. default: true
  31682. },
  31683. hideOnClickModal: Boolean,
  31684. teleported: Boolean,
  31685. closeOnPressEscape: {
  31686. type: Boolean,
  31687. default: true
  31688. },
  31689. zoomRate: {
  31690. type: Number,
  31691. default: 1.2
  31692. },
  31693. scale: {
  31694. type: Number,
  31695. default: 1
  31696. },
  31697. minScale: {
  31698. type: Number,
  31699. default: .2
  31700. },
  31701. maxScale: {
  31702. type: Number,
  31703. default: 7
  31704. },
  31705. showProgress: Boolean,
  31706. crossorigin: { type: definePropType(String) }
  31707. });
  31708. const imageViewerEmits = {
  31709. close: () => true,
  31710. error: (evt) => evt instanceof Event,
  31711. switch: (index) => isNumber(index),
  31712. rotate: (deg) => isNumber(deg)
  31713. };
  31714. //#endregion
  31715. //#region ../../packages/components/image-viewer/src/image-viewer.vue?vue&type=script&setup=true&lang.ts
  31716. const _hoisted_1$36 = ["src", "crossorigin"];
  31717. var image_viewer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  31718. name: "ElImageViewer",
  31719. __name: "image-viewer",
  31720. props: imageViewerProps,
  31721. emits: imageViewerEmits,
  31722. setup(__props, { expose: __expose, emit: __emit }) {
  31723. const modes = {
  31724. CONTAIN: {
  31725. name: "contain",
  31726. icon: (0, vue.markRaw)(full_screen_default)
  31727. },
  31728. ORIGINAL: {
  31729. name: "original",
  31730. icon: (0, vue.markRaw)(scale_to_original_default)
  31731. }
  31732. };
  31733. const props = __props;
  31734. const emit = __emit;
  31735. let stopWheelListener;
  31736. const { t } = useLocale();
  31737. const ns = useNamespace("image-viewer");
  31738. const { nextZIndex } = useZIndex();
  31739. const wrapper = (0, vue.ref)();
  31740. const imgRef = (0, vue.ref)();
  31741. const scopeEventListener = (0, vue.effectScope)();
  31742. const scaleClamped = (0, vue.computed)(() => {
  31743. const { scale, minScale, maxScale } = props;
  31744. return clamp$2(scale, minScale, maxScale);
  31745. });
  31746. const loading = (0, vue.ref)(true);
  31747. const loadError = (0, vue.ref)(false);
  31748. const visible = (0, vue.ref)(false);
  31749. const activeIndex = (0, vue.ref)(props.initialIndex);
  31750. const mode = (0, vue.shallowRef)(modes.CONTAIN);
  31751. const transform = (0, vue.ref)({
  31752. scale: scaleClamped.value,
  31753. deg: 0,
  31754. offsetX: 0,
  31755. offsetY: 0,
  31756. enableTransition: false
  31757. });
  31758. const zIndex = (0, vue.ref)(props.zIndex ?? nextZIndex());
  31759. useLockscreen(visible, { ns });
  31760. const isSingle = (0, vue.computed)(() => {
  31761. const { urlList } = props;
  31762. return urlList.length <= 1;
  31763. });
  31764. const isFirst = (0, vue.computed)(() => activeIndex.value === 0);
  31765. const isLast = (0, vue.computed)(() => activeIndex.value === props.urlList.length - 1);
  31766. const currentImg = (0, vue.computed)(() => props.urlList[activeIndex.value]);
  31767. const arrowPrevKls = (0, vue.computed)(() => [
  31768. ns.e("btn"),
  31769. ns.e("prev"),
  31770. ns.is("disabled", !props.infinite && isFirst.value)
  31771. ]);
  31772. const arrowNextKls = (0, vue.computed)(() => [
  31773. ns.e("btn"),
  31774. ns.e("next"),
  31775. ns.is("disabled", !props.infinite && isLast.value)
  31776. ]);
  31777. const imgStyle = (0, vue.computed)(() => {
  31778. const { scale, deg, offsetX, offsetY, enableTransition } = transform.value;
  31779. let translateX = offsetX / scale;
  31780. let translateY = offsetY / scale;
  31781. const radian = deg * Math.PI / 180;
  31782. const cosRadian = Math.cos(radian);
  31783. const sinRadian = Math.sin(radian);
  31784. translateX = translateX * cosRadian + translateY * sinRadian;
  31785. translateY = translateY * cosRadian - offsetX / scale * sinRadian;
  31786. const style = {
  31787. transform: `scale(${scale}) rotate(${deg}deg) translate(${translateX}px, ${translateY}px)`,
  31788. transition: enableTransition ? "transform .3s" : ""
  31789. };
  31790. if (mode.value.name === modes.CONTAIN.name) style.maxWidth = style.maxHeight = "100%";
  31791. return style;
  31792. });
  31793. const progress = (0, vue.computed)(() => `${activeIndex.value + 1} / ${props.urlList.length}`);
  31794. function hide() {
  31795. unregisterEventListener();
  31796. stopWheelListener?.();
  31797. visible.value = false;
  31798. emit("close");
  31799. }
  31800. function registerEventListener() {
  31801. const keydownHandler = throttle((e) => {
  31802. switch (getEventCode(e)) {
  31803. case EVENT_CODE.esc:
  31804. props.closeOnPressEscape && hide();
  31805. break;
  31806. case EVENT_CODE.space:
  31807. toggleMode();
  31808. break;
  31809. case EVENT_CODE.left:
  31810. prev();
  31811. break;
  31812. case EVENT_CODE.up:
  31813. handleActions("zoomIn");
  31814. break;
  31815. case EVENT_CODE.right:
  31816. next();
  31817. break;
  31818. case EVENT_CODE.down:
  31819. handleActions("zoomOut");
  31820. break;
  31821. }
  31822. });
  31823. const mousewheelHandler = throttle((e) => {
  31824. handleActions((e.deltaY || e.deltaX) < 0 ? "zoomIn" : "zoomOut", {
  31825. zoomRate: props.zoomRate,
  31826. enableTransition: false
  31827. });
  31828. });
  31829. scopeEventListener.run(() => {
  31830. useEventListener(document, "keydown", keydownHandler);
  31831. useEventListener(wrapper, "wheel", mousewheelHandler);
  31832. });
  31833. }
  31834. function unregisterEventListener() {
  31835. scopeEventListener.stop();
  31836. }
  31837. function handleImgLoad() {
  31838. loading.value = false;
  31839. }
  31840. function handleImgError(e) {
  31841. loadError.value = true;
  31842. loading.value = false;
  31843. emit("error", e);
  31844. e.target.alt = t("el.image.error");
  31845. }
  31846. function handleMouseDown(e) {
  31847. if (loading.value || e.button !== 0 || !wrapper.value) return;
  31848. transform.value.enableTransition = false;
  31849. const { offsetX, offsetY } = transform.value;
  31850. const startX = e.pageX;
  31851. const startY = e.pageY;
  31852. const dragHandler = throttle((ev) => {
  31853. transform.value = {
  31854. ...transform.value,
  31855. offsetX: offsetX + ev.pageX - startX,
  31856. offsetY: offsetY + ev.pageY - startY
  31857. };
  31858. });
  31859. const removeMousemove = useEventListener(document, "mousemove", dragHandler);
  31860. const removeMouseup = useEventListener(document, "mouseup", () => {
  31861. removeMousemove();
  31862. removeMouseup();
  31863. });
  31864. e.preventDefault();
  31865. }
  31866. function handleTouchStart(e) {
  31867. if (loading.value || !wrapper.value || e.touches.length !== 1) return;
  31868. transform.value.enableTransition = false;
  31869. const { offsetX, offsetY } = transform.value;
  31870. const { pageX: startX, pageY: startY } = e.touches[0];
  31871. const dragHandler = throttle((ev) => {
  31872. const targetTouch = ev.touches[0];
  31873. transform.value = {
  31874. ...transform.value,
  31875. offsetX: offsetX + targetTouch.pageX - startX,
  31876. offsetY: offsetY + targetTouch.pageY - startY
  31877. };
  31878. });
  31879. const removeTouchmove = useEventListener(document, "touchmove", dragHandler);
  31880. const removeTouchend = useEventListener(document, "touchend", () => {
  31881. removeTouchmove();
  31882. removeTouchend();
  31883. });
  31884. e.preventDefault();
  31885. }
  31886. function reset() {
  31887. transform.value = {
  31888. scale: scaleClamped.value,
  31889. deg: 0,
  31890. offsetX: 0,
  31891. offsetY: 0,
  31892. enableTransition: false
  31893. };
  31894. }
  31895. function toggleMode() {
  31896. if (loading.value || loadError.value) return;
  31897. const modeNames = keysOf(modes);
  31898. const modeValues = Object.values(modes);
  31899. const currentMode = mode.value.name;
  31900. mode.value = modes[modeNames[(modeValues.findIndex((i) => i.name === currentMode) + 1) % modeNames.length]];
  31901. reset();
  31902. }
  31903. function setActiveItem(index) {
  31904. loadError.value = false;
  31905. const len = props.urlList.length;
  31906. activeIndex.value = (index + len) % len;
  31907. }
  31908. function prev() {
  31909. if (isFirst.value && !props.infinite) return;
  31910. setActiveItem(activeIndex.value - 1);
  31911. }
  31912. function next() {
  31913. if (isLast.value && !props.infinite) return;
  31914. setActiveItem(activeIndex.value + 1);
  31915. }
  31916. function handleActions(action, options = {}) {
  31917. if (loading.value || loadError.value) return;
  31918. const { minScale, maxScale } = props;
  31919. const { zoomRate, rotateDeg, enableTransition } = {
  31920. zoomRate: props.zoomRate,
  31921. rotateDeg: 90,
  31922. enableTransition: true,
  31923. ...options
  31924. };
  31925. switch (action) {
  31926. case "zoomOut":
  31927. if (transform.value.scale > minScale) transform.value.scale = Number.parseFloat((transform.value.scale / zoomRate).toFixed(3));
  31928. break;
  31929. case "zoomIn":
  31930. if (transform.value.scale < maxScale) transform.value.scale = Number.parseFloat((transform.value.scale * zoomRate).toFixed(3));
  31931. break;
  31932. case "clockwise":
  31933. transform.value.deg += rotateDeg;
  31934. emit("rotate", transform.value.deg);
  31935. break;
  31936. case "anticlockwise":
  31937. transform.value.deg -= rotateDeg;
  31938. emit("rotate", transform.value.deg);
  31939. break;
  31940. }
  31941. transform.value.enableTransition = enableTransition;
  31942. }
  31943. function onFocusoutPrevented(event) {
  31944. if (event.detail?.focusReason === "pointer") event.preventDefault();
  31945. }
  31946. function onCloseRequested() {
  31947. if (props.closeOnPressEscape) hide();
  31948. }
  31949. function wheelHandler(e) {
  31950. if (!e.ctrlKey) return;
  31951. if (e.deltaY < 0) {
  31952. e.preventDefault();
  31953. return false;
  31954. } else if (e.deltaY > 0) {
  31955. e.preventDefault();
  31956. return false;
  31957. }
  31958. }
  31959. (0, vue.watch)(() => scaleClamped.value, (val) => {
  31960. transform.value.scale = val;
  31961. });
  31962. (0, vue.watch)(currentImg, () => {
  31963. (0, vue.nextTick)(() => {
  31964. if (!imgRef.value?.complete) loading.value = true;
  31965. });
  31966. });
  31967. (0, vue.watch)(activeIndex, (val) => {
  31968. reset();
  31969. emit("switch", val);
  31970. });
  31971. (0, vue.onMounted)(() => {
  31972. visible.value = true;
  31973. registerEventListener();
  31974. stopWheelListener = useEventListener("wheel", wheelHandler, { passive: false });
  31975. });
  31976. __expose({ setActiveItem });
  31977. return (_ctx, _cache) => {
  31978. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Teleport, {
  31979. to: "body",
  31980. disabled: !__props.teleported
  31981. }, [(0, vue.createVNode)(vue.Transition, {
  31982. name: "viewer-fade",
  31983. appear: ""
  31984. }, {
  31985. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  31986. ref_key: "wrapper",
  31987. ref: wrapper,
  31988. tabindex: -1,
  31989. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("wrapper")),
  31990. style: (0, vue.normalizeStyle)({ zIndex: zIndex.value })
  31991. }, [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
  31992. loop: "",
  31993. trapped: "",
  31994. "focus-trap-el": wrapper.value,
  31995. "focus-start-el": "container",
  31996. onFocusoutPrevented,
  31997. onReleaseRequested: onCloseRequested
  31998. }, {
  31999. default: (0, vue.withCtx)(() => [
  32000. (0, vue.createElementVNode)("div", {
  32001. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("mask")),
  32002. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(($event) => __props.hideOnClickModal && hide(), ["self"]))
  32003. }, null, 2),
  32004. (0, vue.createCommentVNode)(" CLOSE "),
  32005. (0, vue.createElementVNode)("span", {
  32006. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("btn"), (0, vue.unref)(ns).e("close")]),
  32007. onClick: hide
  32008. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  32009. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
  32010. _: 1
  32011. })], 2),
  32012. (0, vue.createCommentVNode)(" ARROW "),
  32013. !isSingle.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createElementVNode)("span", {
  32014. class: (0, vue.normalizeClass)(arrowPrevKls.value),
  32015. onClick: prev
  32016. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  32017. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
  32018. _: 1
  32019. })], 2), (0, vue.createElementVNode)("span", {
  32020. class: (0, vue.normalizeClass)(arrowNextKls.value),
  32021. onClick: next
  32022. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  32023. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
  32024. _: 1
  32025. })], 2)], 64)) : (0, vue.createCommentVNode)("v-if", true),
  32026. _ctx.$slots.progress || __props.showProgress ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  32027. key: 1,
  32028. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("btn"), (0, vue.unref)(ns).e("progress")])
  32029. }, [(0, vue.renderSlot)(_ctx.$slots, "progress", {
  32030. activeIndex: activeIndex.value,
  32031. total: __props.urlList.length
  32032. }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(progress.value), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  32033. (0, vue.createCommentVNode)(" ACTIONS "),
  32034. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("btn"), (0, vue.unref)(ns).e("actions")]) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("actions__inner")) }, [(0, vue.renderSlot)(_ctx.$slots, "toolbar", {
  32035. actions: handleActions,
  32036. prev,
  32037. next,
  32038. reset: toggleMode,
  32039. activeIndex: activeIndex.value,
  32040. setActiveItem
  32041. }, () => [
  32042. (0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: _cache[1] || (_cache[1] = ($event) => handleActions("zoomOut")) }, {
  32043. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(zoom_out_default))]),
  32044. _: 1
  32045. }),
  32046. (0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: _cache[2] || (_cache[2] = ($event) => handleActions("zoomIn")) }, {
  32047. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(zoom_in_default))]),
  32048. _: 1
  32049. }),
  32050. (0, vue.createElementVNode)("i", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("actions__divider")) }, null, 2),
  32051. (0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: toggleMode }, {
  32052. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(mode.value.icon)))]),
  32053. _: 1
  32054. }),
  32055. (0, vue.createElementVNode)("i", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("actions__divider")) }, null, 2),
  32056. (0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: _cache[3] || (_cache[3] = ($event) => handleActions("anticlockwise")) }, {
  32057. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(refresh_left_default))]),
  32058. _: 1
  32059. }),
  32060. (0, vue.createVNode)((0, vue.unref)(ElIcon), { onClick: _cache[4] || (_cache[4] = ($event) => handleActions("clockwise")) }, {
  32061. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(refresh_right_default))]),
  32062. _: 1
  32063. })
  32064. ])], 2)], 2),
  32065. (0, vue.createCommentVNode)(" CANVAS "),
  32066. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("canvas")) }, [loadError.value && _ctx.$slots["viewer-error"] ? (0, vue.renderSlot)(_ctx.$slots, "viewer-error", {
  32067. key: 0,
  32068. activeIndex: activeIndex.value,
  32069. src: currentImg.value
  32070. }) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
  32071. ref_key: "imgRef",
  32072. ref: imgRef,
  32073. key: currentImg.value,
  32074. src: currentImg.value,
  32075. style: (0, vue.normalizeStyle)(imgStyle.value),
  32076. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("img")),
  32077. crossorigin: __props.crossorigin,
  32078. onLoad: handleImgLoad,
  32079. onError: handleImgError,
  32080. onMousedown: handleMouseDown,
  32081. onTouchstart: handleTouchStart
  32082. }, null, 46, _hoisted_1$36))], 2),
  32083. (0, vue.renderSlot)(_ctx.$slots, "default")
  32084. ]),
  32085. _: 3
  32086. }, 8, ["focus-trap-el"])], 6)]),
  32087. _: 3
  32088. })], 8, ["disabled"]);
  32089. };
  32090. }
  32091. });
  32092. //#endregion
  32093. //#region ../../packages/components/image-viewer/src/image-viewer.vue
  32094. var image_viewer_default = image_viewer_vue_vue_type_script_setup_true_lang_default;
  32095. //#endregion
  32096. //#region ../../packages/components/image-viewer/index.ts
  32097. const ElImageViewer = withInstall(image_viewer_default);
  32098. //#endregion
  32099. //#region ../../packages/components/image/src/image.vue?vue&type=script&setup=true&lang.ts
  32100. const _hoisted_1$35 = [
  32101. "src",
  32102. "loading",
  32103. "crossorigin"
  32104. ];
  32105. const _hoisted_2$22 = { key: 0 };
  32106. var image_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  32107. name: "ElImage",
  32108. inheritAttrs: false,
  32109. __name: "image",
  32110. props: imageProps,
  32111. emits: imageEmits,
  32112. setup(__props, { expose: __expose, emit: __emit }) {
  32113. const props = __props;
  32114. const emit = __emit;
  32115. const { t } = useLocale();
  32116. const ns = useNamespace("image");
  32117. const rawAttrs = (0, vue.useAttrs)();
  32118. const containerAttrs = (0, vue.computed)(() => {
  32119. return fromPairs(Object.entries(rawAttrs).filter(([key]) => /^(data-|on[A-Z])/i.test(key) || ["id", "style"].includes(key)));
  32120. });
  32121. const imgAttrs = useAttrs({
  32122. excludeListeners: true,
  32123. excludeKeys: (0, vue.computed)(() => {
  32124. return Object.keys(containerAttrs.value);
  32125. })
  32126. });
  32127. const imageSrc = (0, vue.ref)();
  32128. const hasLoadError = (0, vue.ref)(false);
  32129. const isLoading = (0, vue.ref)(true);
  32130. const showViewer = (0, vue.ref)(false);
  32131. const container = (0, vue.ref)();
  32132. const _scrollContainer = (0, vue.ref)();
  32133. const supportLoading = isClient && "loading" in HTMLImageElement.prototype;
  32134. let stopScrollListener;
  32135. const imageKls = (0, vue.computed)(() => [
  32136. ns.e("inner"),
  32137. preview.value && ns.e("preview"),
  32138. isLoading.value && ns.is("loading")
  32139. ]);
  32140. const imageStyle = (0, vue.computed)(() => {
  32141. const { fit } = props;
  32142. if (isClient && fit) return { objectFit: fit };
  32143. return {};
  32144. });
  32145. const preview = (0, vue.computed)(() => {
  32146. const { previewSrcList } = props;
  32147. return isArray$1(previewSrcList) && previewSrcList.length > 0;
  32148. });
  32149. const imageIndex = (0, vue.computed)(() => {
  32150. const { previewSrcList, initialIndex } = props;
  32151. let previewIndex = initialIndex;
  32152. if (initialIndex > previewSrcList.length - 1) previewIndex = 0;
  32153. return previewIndex;
  32154. });
  32155. const isManual = (0, vue.computed)(() => {
  32156. if (props.loading === "eager") return false;
  32157. return !supportLoading && props.loading === "lazy" || props.lazy;
  32158. });
  32159. const loadImage = () => {
  32160. if (!isClient) return;
  32161. isLoading.value = true;
  32162. hasLoadError.value = false;
  32163. imageSrc.value = props.src;
  32164. };
  32165. function handleLoad(event) {
  32166. isLoading.value = false;
  32167. hasLoadError.value = false;
  32168. emit("load", event);
  32169. }
  32170. function handleError(event) {
  32171. isLoading.value = false;
  32172. hasLoadError.value = true;
  32173. emit("error", event);
  32174. }
  32175. function handleLazyLoad(isIntersecting) {
  32176. if (isIntersecting) {
  32177. loadImage();
  32178. removeLazyLoadListener();
  32179. }
  32180. }
  32181. const lazyLoadHandler = useThrottleFn(handleLazyLoad, 200, true);
  32182. async function addLazyLoadListener() {
  32183. if (!isClient) return;
  32184. await (0, vue.nextTick)();
  32185. const { scrollContainer } = props;
  32186. if (isElement$1(scrollContainer)) _scrollContainer.value = scrollContainer;
  32187. else if (isString(scrollContainer) && scrollContainer !== "") _scrollContainer.value = document.querySelector(scrollContainer) ?? void 0;
  32188. else if (container.value) {
  32189. const scrollContainer = getScrollContainer(container.value);
  32190. _scrollContainer.value = isWindow(scrollContainer) ? void 0 : scrollContainer;
  32191. }
  32192. const { stop } = useIntersectionObserver(container, ([entry]) => {
  32193. lazyLoadHandler(entry.isIntersecting);
  32194. }, { root: _scrollContainer });
  32195. stopScrollListener = stop;
  32196. }
  32197. function removeLazyLoadListener() {
  32198. if (!isClient || !lazyLoadHandler) return;
  32199. stopScrollListener?.();
  32200. _scrollContainer.value = void 0;
  32201. stopScrollListener = void 0;
  32202. }
  32203. function clickHandler() {
  32204. if (!preview.value) return;
  32205. showViewer.value = true;
  32206. emit("show");
  32207. }
  32208. function closeViewer() {
  32209. showViewer.value = false;
  32210. emit("close");
  32211. }
  32212. function switchViewer(val) {
  32213. emit("switch", val);
  32214. }
  32215. (0, vue.watch)(() => props.src, () => {
  32216. if (isManual.value) {
  32217. isLoading.value = true;
  32218. hasLoadError.value = false;
  32219. removeLazyLoadListener();
  32220. addLazyLoadListener();
  32221. } else loadImage();
  32222. });
  32223. (0, vue.onMounted)(() => {
  32224. if (isManual.value) addLazyLoadListener();
  32225. else loadImage();
  32226. });
  32227. __expose({ showPreview: clickHandler });
  32228. return (_ctx, _cache) => {
  32229. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
  32230. ref_key: "container",
  32231. ref: container
  32232. }, containerAttrs.value, { class: [(0, vue.unref)(ns).b(), _ctx.$attrs.class] }), [hasLoadError.value ? (0, vue.renderSlot)(_ctx.$slots, "error", { key: 0 }, () => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("error")) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.image.error")), 3)]) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [imageSrc.value !== void 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", (0, vue.mergeProps)({ key: 0 }, (0, vue.unref)(imgAttrs), {
  32233. src: imageSrc.value,
  32234. loading: __props.loading,
  32235. style: imageStyle.value,
  32236. class: imageKls.value,
  32237. crossorigin: __props.crossorigin,
  32238. onClick: clickHandler,
  32239. onLoad: handleLoad,
  32240. onError: handleError
  32241. }), null, 16, _hoisted_1$35)) : (0, vue.createCommentVNode)("v-if", true), isLoading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  32242. key: 1,
  32243. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("wrapper"))
  32244. }, [(0, vue.renderSlot)(_ctx.$slots, "placeholder", {}, () => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("placeholder")) }, null, 2)])], 2)) : (0, vue.createCommentVNode)("v-if", true)], 64)), preview.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [showViewer.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElImageViewer), {
  32245. key: 0,
  32246. "z-index": __props.zIndex,
  32247. "initial-index": imageIndex.value,
  32248. infinite: __props.infinite,
  32249. "zoom-rate": __props.zoomRate,
  32250. "min-scale": __props.minScale,
  32251. "max-scale": __props.maxScale,
  32252. "show-progress": __props.showProgress,
  32253. "url-list": __props.previewSrcList,
  32254. scale: __props.scale,
  32255. crossorigin: __props.crossorigin,
  32256. "hide-on-click-modal": __props.hideOnClickModal,
  32257. teleported: __props.previewTeleported,
  32258. "close-on-press-escape": __props.closeOnPressEscape,
  32259. onClose: closeViewer,
  32260. onSwitch: switchViewer
  32261. }, (0, vue.createSlots)({
  32262. toolbar: (0, vue.withCtx)((toolbar) => [(0, vue.renderSlot)(_ctx.$slots, "toolbar", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(toolbar)))]),
  32263. default: (0, vue.withCtx)(() => [_ctx.$slots.viewer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$22, [(0, vue.renderSlot)(_ctx.$slots, "viewer")])) : (0, vue.createCommentVNode)("v-if", true)]),
  32264. _: 2
  32265. }, [_ctx.$slots.progress ? {
  32266. name: "progress",
  32267. fn: (0, vue.withCtx)((progress) => [(0, vue.renderSlot)(_ctx.$slots, "progress", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(progress)))]),
  32268. key: "0"
  32269. } : void 0, _ctx.$slots["viewer-error"] ? {
  32270. name: "viewer-error",
  32271. fn: (0, vue.withCtx)((viewerError) => [(0, vue.renderSlot)(_ctx.$slots, "viewer-error", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(viewerError)))]),
  32272. key: "1"
  32273. } : void 0]), 1032, [
  32274. "z-index",
  32275. "initial-index",
  32276. "infinite",
  32277. "zoom-rate",
  32278. "min-scale",
  32279. "max-scale",
  32280. "show-progress",
  32281. "url-list",
  32282. "scale",
  32283. "crossorigin",
  32284. "hide-on-click-modal",
  32285. "teleported",
  32286. "close-on-press-escape"
  32287. ])) : (0, vue.createCommentVNode)("v-if", true)], 64)) : (0, vue.createCommentVNode)("v-if", true)], 16);
  32288. };
  32289. }
  32290. });
  32291. //#endregion
  32292. //#region ../../packages/components/image/src/image.vue
  32293. var image_default = image_vue_vue_type_script_setup_true_lang_default;
  32294. //#endregion
  32295. //#region ../../packages/components/image/index.ts
  32296. const ElImage = withInstall(image_default);
  32297. //#endregion
  32298. //#region ../../packages/components/input-number/src/input-number.ts
  32299. const inputNumberProps = buildProps({
  32300. id: {
  32301. type: String,
  32302. default: void 0
  32303. },
  32304. step: {
  32305. type: Number,
  32306. default: 1
  32307. },
  32308. stepStrictly: Boolean,
  32309. max: {
  32310. type: Number,
  32311. default: Number.MAX_SAFE_INTEGER
  32312. },
  32313. min: {
  32314. type: Number,
  32315. default: Number.MIN_SAFE_INTEGER
  32316. },
  32317. modelValue: { type: [Number, null] },
  32318. readonly: Boolean,
  32319. disabled: {
  32320. type: Boolean,
  32321. default: void 0
  32322. },
  32323. size: useSizeProp,
  32324. controls: {
  32325. type: Boolean,
  32326. default: true
  32327. },
  32328. controlsPosition: {
  32329. type: String,
  32330. default: "",
  32331. values: ["", "right"]
  32332. },
  32333. valueOnClear: {
  32334. type: definePropType([
  32335. String,
  32336. Number,
  32337. null
  32338. ]),
  32339. validator: (val) => val === null || isNumber(val) || ["min", "max"].includes(val),
  32340. default: null
  32341. },
  32342. name: String,
  32343. placeholder: String,
  32344. precision: {
  32345. type: Number,
  32346. validator: (val) => val >= 0 && val === Number.parseInt(`${val}`, 10)
  32347. },
  32348. validateEvent: {
  32349. type: Boolean,
  32350. default: true
  32351. },
  32352. ...useAriaProps(["ariaLabel"]),
  32353. inputmode: {
  32354. type: definePropType(String),
  32355. default: void 0
  32356. },
  32357. align: {
  32358. type: definePropType(String),
  32359. default: "center"
  32360. },
  32361. disabledScientific: Boolean,
  32362. formatter: { type: Function },
  32363. parser: { type: Function },
  32364. tabindex: {
  32365. type: [String, Number],
  32366. default: 0
  32367. }
  32368. });
  32369. const inputNumberEmits = {
  32370. [CHANGE_EVENT]: (cur, prev) => prev !== cur,
  32371. blur: (e) => e instanceof FocusEvent,
  32372. focus: (e) => e instanceof FocusEvent,
  32373. [INPUT_EVENT]: (val) => isNumber(val) || isNil(val),
  32374. [UPDATE_MODEL_EVENT]: (val) => isNumber(val) || isNil(val)
  32375. };
  32376. //#endregion
  32377. //#region ../../packages/components/input-number/src/input-number.vue?vue&type=script&setup=true&lang.ts
  32378. const _hoisted_1$34 = ["aria-label"];
  32379. const _hoisted_2$21 = ["aria-label"];
  32380. var input_number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  32381. name: "ElInputNumber",
  32382. __name: "input-number",
  32383. props: inputNumberProps,
  32384. emits: inputNumberEmits,
  32385. setup(__props, { expose: __expose, emit: __emit }) {
  32386. const props = __props;
  32387. const emit = __emit;
  32388. const { t } = useLocale();
  32389. const ns = useNamespace("input-number");
  32390. const input = (0, vue.ref)();
  32391. const data = (0, vue.reactive)({
  32392. currentValue: props.modelValue,
  32393. userInput: null
  32394. });
  32395. const { formItem } = useFormItem();
  32396. const minDisabled = (0, vue.computed)(() => isNumber(props.modelValue) && props.modelValue <= props.min);
  32397. const maxDisabled = (0, vue.computed)(() => isNumber(props.modelValue) && props.modelValue >= props.max);
  32398. const numPrecision = (0, vue.computed)(() => {
  32399. const stepPrecision = getPrecision(props.step);
  32400. if (!isUndefined(props.precision)) {
  32401. if (stepPrecision > props.precision) /* @__PURE__ */ debugWarn("InputNumber", "precision should not be less than the decimal places of step");
  32402. return props.precision;
  32403. } else return Math.max(getPrecision(props.modelValue), stepPrecision);
  32404. });
  32405. const controlsAtRight = (0, vue.computed)(() => {
  32406. return props.controls && props.controlsPosition === "right";
  32407. });
  32408. const inputNumberSize = useFormSize();
  32409. const inputNumberDisabled = useFormDisabled();
  32410. const displayValue = (0, vue.computed)(() => {
  32411. if (data.userInput !== null) return data.userInput;
  32412. let currentValue = data.currentValue;
  32413. if (isNil(currentValue)) return "";
  32414. if (isNumber(currentValue)) {
  32415. if (Number.isNaN(currentValue)) return "";
  32416. if (!isUndefined(props.precision)) currentValue = currentValue.toFixed(props.precision);
  32417. }
  32418. return currentValue;
  32419. });
  32420. const toPrecision = (num, pre) => {
  32421. if (isUndefined(pre)) pre = numPrecision.value;
  32422. if (pre === 0) return Math.round(num);
  32423. let snum = String(num);
  32424. const pointPos = snum.indexOf(".");
  32425. if (pointPos === -1) return num;
  32426. if (!snum.replace(".", "").split("")[pointPos + pre]) return num;
  32427. const length = snum.length;
  32428. if (snum.charAt(length - 1) === "5") snum = `${snum.slice(0, Math.max(0, length - 1))}6`;
  32429. return Number.parseFloat(Number(snum).toFixed(pre));
  32430. };
  32431. const getPrecision = (value) => {
  32432. if (isNil(value)) return 0;
  32433. const valueString = value.toString();
  32434. const dotPosition = valueString.indexOf(".");
  32435. let precision = 0;
  32436. if (dotPosition !== -1) precision = valueString.length - dotPosition - 1;
  32437. return precision;
  32438. };
  32439. const ensurePrecision = (val, coefficient = 1) => {
  32440. if (!isNumber(val)) return data.currentValue;
  32441. if (val >= Number.MAX_SAFE_INTEGER && coefficient === 1) {
  32442. /* @__PURE__ */ debugWarn("InputNumber", "The value has reached the maximum safe integer limit.");
  32443. return val;
  32444. } else if (val <= Number.MIN_SAFE_INTEGER && coefficient === -1) {
  32445. /* @__PURE__ */ debugWarn("InputNumber", "The value has reached the minimum safe integer limit.");
  32446. return val;
  32447. }
  32448. return toPrecision(val + props.step * coefficient);
  32449. };
  32450. const handleKeydown = (event) => {
  32451. const code = getEventCode(event);
  32452. const key = getEventKey(event);
  32453. if (props.disabledScientific && ["e", "E"].includes(key)) {
  32454. event.preventDefault();
  32455. return;
  32456. }
  32457. switch (code) {
  32458. case EVENT_CODE.up:
  32459. event.preventDefault();
  32460. increase();
  32461. break;
  32462. case EVENT_CODE.down:
  32463. event.preventDefault();
  32464. decrease();
  32465. break;
  32466. }
  32467. };
  32468. const increase = () => {
  32469. if (props.readonly || inputNumberDisabled.value || maxDisabled.value) return;
  32470. setCurrentValue(ensurePrecision(Number(displayValue.value) || 0));
  32471. emit(INPUT_EVENT, data.currentValue);
  32472. setCurrentValueToModelValue();
  32473. };
  32474. const decrease = () => {
  32475. if (props.readonly || inputNumberDisabled.value || minDisabled.value) return;
  32476. setCurrentValue(ensurePrecision(Number(displayValue.value) || 0, -1));
  32477. emit(INPUT_EVENT, data.currentValue);
  32478. setCurrentValueToModelValue();
  32479. };
  32480. const verifyValue = (value, update) => {
  32481. const { max, min, step, precision, stepStrictly, valueOnClear } = props;
  32482. if (max < min) throwError("InputNumber", "min should not be greater than max.");
  32483. let newVal = !value ? Number(value) : Number.parseFloat(String(value));
  32484. if (isNil(value) || Number.isNaN(newVal)) return null;
  32485. if (value === "") {
  32486. if (valueOnClear === null) return null;
  32487. newVal = isString(valueOnClear) ? {
  32488. min,
  32489. max
  32490. }[valueOnClear] : valueOnClear;
  32491. }
  32492. if (stepStrictly) {
  32493. newVal = toPrecision(Math.round(toPrecision(newVal / step)) * step, precision);
  32494. if (newVal !== value) update && emit("update:modelValue", newVal);
  32495. }
  32496. if (!isUndefined(precision)) newVal = toPrecision(newVal, precision);
  32497. if (newVal > max || newVal < min) {
  32498. newVal = newVal > max ? max : min;
  32499. update && emit("update:modelValue", newVal);
  32500. }
  32501. return newVal;
  32502. };
  32503. const setCurrentValue = (value, emitChange = true) => {
  32504. const oldVal = data.currentValue;
  32505. const newVal = verifyValue(value);
  32506. if (!emitChange) {
  32507. emit(UPDATE_MODEL_EVENT, newVal);
  32508. return;
  32509. }
  32510. data.userInput = null;
  32511. if (oldVal === newVal && value) return;
  32512. emit(UPDATE_MODEL_EVENT, newVal);
  32513. if (oldVal !== newVal) emit(CHANGE_EVENT, newVal, oldVal);
  32514. if (props.validateEvent) formItem?.validate?.("change").catch(NOOP);
  32515. data.currentValue = newVal;
  32516. };
  32517. const handleInput = (value) => {
  32518. data.userInput = value;
  32519. let newVal = value === "" ? null : Number.parseFloat(value);
  32520. if (Number.isNaN(newVal)) newVal = null;
  32521. emit(INPUT_EVENT, newVal);
  32522. setCurrentValue(newVal, false);
  32523. };
  32524. const handleInputChange = (value) => {
  32525. const newVal = value !== "" ? Number.parseFloat(value) : "";
  32526. if (isNumber(newVal) && !Number.isNaN(newVal) || props.formatter && Number.isNaN(newVal) || newVal === "") setCurrentValue(newVal);
  32527. setCurrentValueToModelValue();
  32528. data.userInput = null;
  32529. };
  32530. const focus = () => {
  32531. input.value?.focus?.();
  32532. };
  32533. const blur = () => {
  32534. input.value?.blur?.();
  32535. };
  32536. const handleFocus = (event) => {
  32537. emit("focus", event);
  32538. };
  32539. const handleBlur = (event) => {
  32540. data.userInput = null;
  32541. if (data.currentValue === null && input.value?.input) input.value.input.value = props.formatter?.("") ?? "";
  32542. emit("blur", event);
  32543. if (props.validateEvent) formItem?.validate?.("blur").catch(NOOP);
  32544. };
  32545. const setCurrentValueToModelValue = () => {
  32546. if (data.currentValue !== props.modelValue) data.currentValue = props.modelValue;
  32547. };
  32548. const handleWheel = (e) => {
  32549. if (document.activeElement === e.target) e.preventDefault();
  32550. };
  32551. (0, vue.watch)(() => props.modelValue, (value, oldValue) => {
  32552. const newValue = verifyValue(value, true);
  32553. if (data.userInput === null && newValue !== oldValue) data.currentValue = newValue;
  32554. }, { immediate: true });
  32555. (0, vue.watch)(() => props.precision, () => {
  32556. data.currentValue = verifyValue(props.modelValue);
  32557. });
  32558. (0, vue.onMounted)(() => {
  32559. const { min, max, modelValue } = props;
  32560. const innerInput = input.value?.input;
  32561. innerInput.setAttribute("role", "spinbutton");
  32562. if (Number.isFinite(max)) innerInput.setAttribute("aria-valuemax", String(max));
  32563. else innerInput.removeAttribute("aria-valuemax");
  32564. if (Number.isFinite(min)) innerInput.setAttribute("aria-valuemin", String(min));
  32565. else innerInput.removeAttribute("aria-valuemin");
  32566. innerInput.setAttribute("aria-valuenow", data.currentValue || data.currentValue === 0 ? String(data.currentValue) : "");
  32567. innerInput.setAttribute("aria-disabled", String(inputNumberDisabled.value));
  32568. if (!isNumber(modelValue) && modelValue != null) {
  32569. let val = Number(modelValue);
  32570. if (Number.isNaN(val)) val = null;
  32571. emit(UPDATE_MODEL_EVENT, val);
  32572. }
  32573. innerInput.addEventListener("wheel", handleWheel, { passive: false });
  32574. });
  32575. (0, vue.onUpdated)(() => {
  32576. (input.value?.input)?.setAttribute("aria-valuenow", `${data.currentValue ?? ""}`);
  32577. });
  32578. __expose({
  32579. focus,
  32580. blur
  32581. });
  32582. return (_ctx, _cache) => {
  32583. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  32584. class: (0, vue.normalizeClass)([
  32585. (0, vue.unref)(ns).b(),
  32586. (0, vue.unref)(ns).m((0, vue.unref)(inputNumberSize)),
  32587. (0, vue.unref)(ns).is("disabled", (0, vue.unref)(inputNumberDisabled)),
  32588. (0, vue.unref)(ns).is("without-controls", !__props.controls),
  32589. (0, vue.unref)(ns).is("controls-right", controlsAtRight.value),
  32590. (0, vue.unref)(ns).is(__props.align, !!__props.align)
  32591. ]),
  32592. onDragstart: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["prevent"]))
  32593. }, [
  32594. __props.controls ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  32595. key: 0,
  32596. role: "button",
  32597. "aria-label": (0, vue.unref)(t)("el.inputNumber.decrease"),
  32598. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("decrease"), (0, vue.unref)(ns).is("disabled", minDisabled.value)]),
  32599. onKeydown: (0, vue.withKeys)(decrease, ["enter"])
  32600. }, [(0, vue.renderSlot)(_ctx.$slots, "decrease-icon", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  32601. default: (0, vue.withCtx)(() => [controlsAtRight.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(arrow_down_default), { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(minus_default), { key: 1 }))]),
  32602. _: 1
  32603. })])], 42, _hoisted_1$34)), [[(0, vue.unref)(vRepeatClick), decrease]]) : (0, vue.createCommentVNode)("v-if", true),
  32604. __props.controls ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  32605. key: 1,
  32606. role: "button",
  32607. "aria-label": (0, vue.unref)(t)("el.inputNumber.increase"),
  32608. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("increase"), (0, vue.unref)(ns).is("disabled", maxDisabled.value)]),
  32609. onKeydown: (0, vue.withKeys)(increase, ["enter"])
  32610. }, [(0, vue.renderSlot)(_ctx.$slots, "increase-icon", {}, () => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  32611. default: (0, vue.withCtx)(() => [controlsAtRight.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(arrow_up_default), { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(plus_default), { key: 1 }))]),
  32612. _: 1
  32613. })])], 42, _hoisted_2$21)), [[(0, vue.unref)(vRepeatClick), increase]]) : (0, vue.createCommentVNode)("v-if", true),
  32614. (0, vue.createVNode)((0, vue.unref)(ElInput), {
  32615. id: __props.id,
  32616. ref_key: "input",
  32617. ref: input,
  32618. type: __props.formatter ? "text" : "number",
  32619. step: __props.step,
  32620. "model-value": displayValue.value,
  32621. placeholder: __props.placeholder,
  32622. readonly: __props.readonly,
  32623. disabled: (0, vue.unref)(inputNumberDisabled),
  32624. size: (0, vue.unref)(inputNumberSize),
  32625. max: __props.max,
  32626. min: __props.min,
  32627. name: __props.name,
  32628. "aria-label": __props.ariaLabel,
  32629. "validate-event": false,
  32630. inputmode: __props.inputmode,
  32631. formatter: __props.formatter,
  32632. parser: __props.parser,
  32633. tabindex: __props.tabindex,
  32634. onKeydown: handleKeydown,
  32635. onBlur: handleBlur,
  32636. onFocus: handleFocus,
  32637. onInput: handleInput,
  32638. onChange: handleInputChange
  32639. }, (0, vue.createSlots)({ _: 2 }, [_ctx.$slots.prefix ? {
  32640. name: "prefix",
  32641. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "prefix")]),
  32642. key: "0"
  32643. } : void 0, _ctx.$slots.suffix ? {
  32644. name: "suffix",
  32645. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "suffix")]),
  32646. key: "1"
  32647. } : void 0]), 1032, [
  32648. "id",
  32649. "type",
  32650. "step",
  32651. "model-value",
  32652. "placeholder",
  32653. "readonly",
  32654. "disabled",
  32655. "size",
  32656. "max",
  32657. "min",
  32658. "name",
  32659. "aria-label",
  32660. "inputmode",
  32661. "formatter",
  32662. "parser",
  32663. "tabindex"
  32664. ])
  32665. ], 34);
  32666. };
  32667. }
  32668. });
  32669. //#endregion
  32670. //#region ../../packages/components/input-number/src/input-number.vue
  32671. var input_number_default = input_number_vue_vue_type_script_setup_true_lang_default;
  32672. //#endregion
  32673. //#region ../../packages/components/input-number/index.ts
  32674. const ElInputNumber = withInstall(input_number_default);
  32675. //#endregion
  32676. //#region ../../packages/components/input-tag/src/input-tag.ts
  32677. const inputTagProps = buildProps({
  32678. modelValue: { type: definePropType(Array) },
  32679. max: Number,
  32680. tagType: {
  32681. ...tagProps.type,
  32682. default: "info"
  32683. },
  32684. tagEffect: tagProps.effect,
  32685. effect: {
  32686. type: definePropType(String),
  32687. default: "light"
  32688. },
  32689. trigger: {
  32690. type: definePropType(String),
  32691. default: EVENT_CODE.enter
  32692. },
  32693. draggable: Boolean,
  32694. delimiter: {
  32695. type: [String, RegExp],
  32696. default: ""
  32697. },
  32698. size: useSizeProp,
  32699. clearable: Boolean,
  32700. clearIcon: {
  32701. type: iconPropType,
  32702. default: circle_close_default
  32703. },
  32704. disabled: {
  32705. type: Boolean,
  32706. default: void 0
  32707. },
  32708. validateEvent: {
  32709. type: Boolean,
  32710. default: true
  32711. },
  32712. readonly: Boolean,
  32713. autofocus: Boolean,
  32714. id: {
  32715. type: String,
  32716. default: void 0
  32717. },
  32718. tabindex: {
  32719. type: [String, Number],
  32720. default: 0
  32721. },
  32722. maxlength: { type: [String, Number] },
  32723. minlength: { type: [String, Number] },
  32724. placeholder: String,
  32725. autocomplete: {
  32726. type: definePropType(String),
  32727. default: "off"
  32728. },
  32729. saveOnBlur: {
  32730. type: Boolean,
  32731. default: true
  32732. },
  32733. collapseTags: Boolean,
  32734. collapseTagsTooltip: Boolean,
  32735. maxCollapseTags: {
  32736. type: Number,
  32737. default: 1
  32738. },
  32739. ariaLabel: String
  32740. });
  32741. const inputTagEmits = {
  32742. [UPDATE_MODEL_EVENT]: (value) => isArray$1(value) || isUndefined(value),
  32743. [CHANGE_EVENT]: (value) => isArray$1(value) || isUndefined(value),
  32744. [INPUT_EVENT]: (value) => isString(value),
  32745. "add-tag": (value) => isString(value) || isArray$1(value),
  32746. "remove-tag": (value, index) => isString(value) && isNumber(index),
  32747. "drag-tag": (oldIndex, newIndex, value) => isNumber(oldIndex) && isNumber(newIndex) && isString(value),
  32748. focus: (evt) => evt instanceof FocusEvent,
  32749. blur: (evt) => evt instanceof FocusEvent,
  32750. clear: () => true
  32751. };
  32752. //#endregion
  32753. //#region ../../packages/components/input-tag/src/composables/use-drag-tag.ts
  32754. function useDragTag({ wrapperRef, handleDragged, afterDragged }) {
  32755. const ns = useNamespace("input-tag");
  32756. const dropIndicatorRef = (0, vue.shallowRef)();
  32757. const showDropIndicator = (0, vue.ref)(false);
  32758. let draggingIndex;
  32759. let draggingTag;
  32760. let dropIndex;
  32761. let dropType;
  32762. function getTagClassName(index) {
  32763. return `.${ns.e("inner")} .${ns.namespace.value}-tag:nth-child(${index + 1})`;
  32764. }
  32765. function handleDragStart(event, index) {
  32766. draggingIndex = index;
  32767. draggingTag = wrapperRef.value.querySelector(getTagClassName(index));
  32768. if (draggingTag) draggingTag.style.opacity = "0.5";
  32769. event.dataTransfer.effectAllowed = "move";
  32770. }
  32771. function handleDragOver(event, index) {
  32772. dropIndex = index;
  32773. event.preventDefault();
  32774. event.dataTransfer.dropEffect = "move";
  32775. if (isUndefined(draggingIndex) || draggingIndex === index) {
  32776. showDropIndicator.value = false;
  32777. return;
  32778. }
  32779. const dropPosition = wrapperRef.value.querySelector(getTagClassName(index)).getBoundingClientRect();
  32780. const dropPrev = !(draggingIndex + 1 === index);
  32781. const dropNext = !(draggingIndex - 1 === index);
  32782. const distance = event.clientX - dropPosition.left;
  32783. const prevPercent = dropPrev ? dropNext ? .5 : 1 : -1;
  32784. const nextPercent = dropNext ? dropPrev ? .5 : 0 : 1;
  32785. if (distance <= dropPosition.width * prevPercent) dropType = "before";
  32786. else if (distance > dropPosition.width * nextPercent) dropType = "after";
  32787. else dropType = void 0;
  32788. const innerEl = wrapperRef.value.querySelector(`.${ns.e("inner")}`);
  32789. const innerPosition = innerEl.getBoundingClientRect();
  32790. const gap = Number.parseFloat(getStyle(innerEl, "gap")) / 2;
  32791. const indicatorTop = dropPosition.top - innerPosition.top;
  32792. let indicatorLeft = -9999;
  32793. if (dropType === "before") indicatorLeft = Math.max(dropPosition.left - innerPosition.left - gap, Math.floor(-gap / 2));
  32794. else if (dropType === "after") {
  32795. const left = dropPosition.right - innerPosition.left;
  32796. indicatorLeft = left + (innerPosition.width === left ? Math.floor(gap / 2) : gap);
  32797. }
  32798. setStyle(dropIndicatorRef.value, {
  32799. top: `${indicatorTop}px`,
  32800. left: `${indicatorLeft}px`
  32801. });
  32802. showDropIndicator.value = !!dropType;
  32803. }
  32804. function handleDragEnd(event) {
  32805. event.preventDefault();
  32806. if (draggingTag) draggingTag.style.opacity = "";
  32807. if (dropType && !isUndefined(draggingIndex) && !isUndefined(dropIndex) && draggingIndex !== dropIndex) handleDragged(draggingIndex, dropIndex, dropType);
  32808. showDropIndicator.value = false;
  32809. draggingIndex = void 0;
  32810. draggingTag = null;
  32811. dropIndex = void 0;
  32812. dropType = void 0;
  32813. afterDragged?.();
  32814. }
  32815. return {
  32816. dropIndicatorRef,
  32817. showDropIndicator,
  32818. handleDragStart,
  32819. handleDragOver,
  32820. handleDragEnd
  32821. };
  32822. }
  32823. //#endregion
  32824. //#region ../../packages/components/input-tag/src/composables/use-hovering.ts
  32825. function useHovering() {
  32826. const hovering = (0, vue.ref)(false);
  32827. const handleMouseEnter = () => {
  32828. hovering.value = true;
  32829. };
  32830. const handleMouseLeave = () => {
  32831. hovering.value = false;
  32832. };
  32833. return {
  32834. hovering,
  32835. handleMouseEnter,
  32836. handleMouseLeave
  32837. };
  32838. }
  32839. //#endregion
  32840. //#region ../../packages/components/input-tag/src/composables/use-input-tag.ts
  32841. function useInputTag({ props, emit, formItem }) {
  32842. const disabled = useFormDisabled();
  32843. const size = useFormSize();
  32844. const inputRef = (0, vue.shallowRef)();
  32845. const inputValue = (0, vue.ref)();
  32846. const tagTooltipRef = (0, vue.ref)();
  32847. const tagSize = (0, vue.computed)(() => {
  32848. return ["small"].includes(size.value) ? "small" : "default";
  32849. });
  32850. const placeholder = (0, vue.computed)(() => {
  32851. return props.modelValue?.length ? void 0 : props.placeholder;
  32852. });
  32853. const closable = (0, vue.computed)(() => !(props.readonly || disabled.value));
  32854. const inputLimit = (0, vue.computed)(() => {
  32855. return isUndefined(props.max) ? false : (props.modelValue?.length ?? 0) >= props.max;
  32856. });
  32857. const showTagList = (0, vue.computed)(() => {
  32858. return props.collapseTags ? props.modelValue?.slice(0, props.maxCollapseTags) : props.modelValue;
  32859. });
  32860. const collapseTagList = (0, vue.computed)(() => {
  32861. return props.collapseTags ? props.modelValue?.slice(props.maxCollapseTags) : [];
  32862. });
  32863. const addTagsEmit = (value) => {
  32864. const list = [...props.modelValue ?? [], ...castArray$1(value)];
  32865. emit(UPDATE_MODEL_EVENT, list);
  32866. emit(CHANGE_EVENT, list);
  32867. emit("add-tag", value);
  32868. inputValue.value = void 0;
  32869. };
  32870. const getDelimitedTags = (input) => {
  32871. const parts = input.split(props.delimiter);
  32872. const tags = parts.length > 1 ? parts.map((val) => val.trim()).filter(Boolean) : [];
  32873. if (props.max) {
  32874. const maxInsert = props.max - (props.modelValue?.length ?? 0);
  32875. tags.splice(maxInsert);
  32876. }
  32877. return tags.length === 1 ? tags[0] : tags;
  32878. };
  32879. const handlePaste = (event) => {
  32880. const pasted = event.clipboardData?.getData("text");
  32881. if (props.readonly || inputLimit.value || !props.delimiter || !pasted) return;
  32882. const { selectionStart = 0, selectionEnd = 0, value } = event.target;
  32883. const nextValue = value.slice(0, selectionStart) + pasted + value.slice(selectionEnd);
  32884. const tags = getDelimitedTags(nextValue);
  32885. if (tags.length) {
  32886. addTagsEmit(tags);
  32887. emit(INPUT_EVENT, nextValue);
  32888. event.preventDefault();
  32889. }
  32890. };
  32891. const handleInput = (event) => {
  32892. if (inputLimit.value) {
  32893. inputValue.value = void 0;
  32894. return;
  32895. }
  32896. if (isComposing.value) return;
  32897. if (props.delimiter && inputValue.value) {
  32898. const tags = getDelimitedTags(inputValue.value);
  32899. if (tags.length) addTagsEmit(tags);
  32900. }
  32901. emit(INPUT_EVENT, event.target.value);
  32902. };
  32903. const handleKeydown = (event) => {
  32904. if (isComposing.value) return;
  32905. switch (getEventCode(event)) {
  32906. case props.trigger:
  32907. event.preventDefault();
  32908. event.stopPropagation();
  32909. handleAddTag();
  32910. break;
  32911. case EVENT_CODE.numpadEnter:
  32912. if (props.trigger === EVENT_CODE.enter) {
  32913. event.preventDefault();
  32914. event.stopPropagation();
  32915. handleAddTag();
  32916. }
  32917. break;
  32918. case EVENT_CODE.backspace:
  32919. if (!inputValue.value && props.modelValue?.length) {
  32920. event.preventDefault();
  32921. event.stopPropagation();
  32922. handleRemoveTag(props.modelValue.length - 1);
  32923. }
  32924. break;
  32925. }
  32926. };
  32927. const handleKeyup = (event) => {
  32928. if (isComposing.value || !isAndroid()) return;
  32929. switch (getEventCode(event)) {
  32930. case EVENT_CODE.space:
  32931. if (props.trigger === EVENT_CODE.space) {
  32932. event.preventDefault();
  32933. event.stopPropagation();
  32934. handleAddTag();
  32935. }
  32936. break;
  32937. }
  32938. };
  32939. const handleAddTag = () => {
  32940. const value = inputValue.value?.trim();
  32941. if (!value || inputLimit.value) return;
  32942. addTagsEmit(value);
  32943. };
  32944. const handleRemoveTag = (index) => {
  32945. const value = (props.modelValue ?? []).slice();
  32946. const [item] = value.splice(index, 1);
  32947. emit(UPDATE_MODEL_EVENT, value);
  32948. emit(CHANGE_EVENT, value);
  32949. emit("remove-tag", item, index);
  32950. };
  32951. const handleClear = () => {
  32952. inputValue.value = void 0;
  32953. emit(UPDATE_MODEL_EVENT, void 0);
  32954. emit(CHANGE_EVENT, void 0);
  32955. emit("clear");
  32956. };
  32957. const handleDragged = (draggingIndex, dropIndex, type) => {
  32958. const value = (props.modelValue ?? []).slice();
  32959. const [draggedItem] = value.splice(draggingIndex, 1);
  32960. const step = dropIndex > draggingIndex && type === "before" ? -1 : dropIndex < draggingIndex && type === "after" ? 1 : 0;
  32961. value.splice(dropIndex + step, 0, draggedItem);
  32962. emit(UPDATE_MODEL_EVENT, value);
  32963. emit(CHANGE_EVENT, value);
  32964. emit("drag-tag", draggingIndex, dropIndex + step, draggedItem);
  32965. };
  32966. const focus = () => {
  32967. inputRef.value?.focus();
  32968. };
  32969. const blur = () => {
  32970. inputRef.value?.blur();
  32971. };
  32972. const { wrapperRef, isFocused } = useFocusController(inputRef, {
  32973. disabled,
  32974. beforeBlur(event) {
  32975. return tagTooltipRef.value?.isFocusInsideContent(event);
  32976. },
  32977. afterBlur() {
  32978. if (props.saveOnBlur) handleAddTag();
  32979. else inputValue.value = void 0;
  32980. if (props.validateEvent) formItem?.validate?.("blur").catch(NOOP);
  32981. }
  32982. });
  32983. const { isComposing, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd } = useComposition({ afterComposition: handleInput });
  32984. (0, vue.watch)(() => props.modelValue, () => {
  32985. if (props.validateEvent) formItem?.validate?.(CHANGE_EVENT).catch(NOOP);
  32986. });
  32987. return {
  32988. inputRef,
  32989. wrapperRef,
  32990. tagTooltipRef,
  32991. isFocused,
  32992. isComposing,
  32993. inputValue,
  32994. size,
  32995. tagSize,
  32996. placeholder,
  32997. closable,
  32998. disabled,
  32999. inputLimit,
  33000. showTagList,
  33001. collapseTagList,
  33002. handleDragged,
  33003. handlePaste,
  33004. handleInput,
  33005. handleKeydown,
  33006. handleKeyup,
  33007. handleAddTag,
  33008. handleRemoveTag,
  33009. handleClear,
  33010. handleCompositionStart,
  33011. handleCompositionUpdate,
  33012. handleCompositionEnd,
  33013. focus,
  33014. blur
  33015. };
  33016. }
  33017. //#endregion
  33018. //#region ../../packages/components/input-tag/src/composables/use-input-tag-dom.ts
  33019. function useInputTagDom({ props, isFocused, hovering, disabled, inputValue, size, validateState, validateIcon, needStatusIcon }) {
  33020. const attrs = (0, vue.useAttrs)();
  33021. const slots = (0, vue.useSlots)();
  33022. const ns = useNamespace("input-tag");
  33023. const nsInput = useNamespace("input");
  33024. const collapseItemRef = (0, vue.ref)();
  33025. const innerRef = (0, vue.ref)();
  33026. const containerKls = (0, vue.computed)(() => [
  33027. ns.b(),
  33028. ns.is("focused", isFocused.value),
  33029. ns.is("hovering", hovering.value),
  33030. ns.is("disabled", disabled.value),
  33031. ns.m(size.value),
  33032. ns.e("wrapper"),
  33033. attrs.class
  33034. ]);
  33035. const containerStyle = (0, vue.computed)(() => [attrs.style]);
  33036. const innerKls = (0, vue.computed)(() => [
  33037. ns.e("inner"),
  33038. ns.is("draggable", props.draggable),
  33039. ns.is("left-space", !props.modelValue?.length && !slots.prefix),
  33040. ns.is("right-space", !props.modelValue?.length && !showSuffix.value)
  33041. ]);
  33042. const showClear = (0, vue.computed)(() => {
  33043. return props.clearable && !disabled.value && !props.readonly && (props.modelValue?.length || inputValue.value) && (isFocused.value || hovering.value);
  33044. });
  33045. const showSuffix = (0, vue.computed)(() => {
  33046. return slots.suffix || showClear.value || validateState.value && validateIcon.value && needStatusIcon.value;
  33047. });
  33048. const states = (0, vue.reactive)({
  33049. innerWidth: 0,
  33050. collapseItemWidth: 0
  33051. });
  33052. const getGapWidth = () => {
  33053. if (!innerRef.value) return 0;
  33054. const style = window.getComputedStyle(innerRef.value);
  33055. return Number.parseFloat(style.gap || "6px");
  33056. };
  33057. const resetInnerWidth = () => {
  33058. states.innerWidth = Number.parseFloat(window.getComputedStyle(innerRef.value).width);
  33059. };
  33060. const resetCollapseItemWidth = () => {
  33061. states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width;
  33062. };
  33063. const tagStyle = (0, vue.computed)(() => {
  33064. if (!props.collapseTags) return {};
  33065. const gapWidth = getGapWidth();
  33066. const inputSlotWidth = gapWidth + 11;
  33067. const maxWidth = collapseItemRef.value && props.maxCollapseTags === 1 ? states.innerWidth - states.collapseItemWidth - gapWidth - inputSlotWidth : states.innerWidth - inputSlotWidth;
  33068. return { maxWidth: `${Math.max(maxWidth, 0)}px` };
  33069. });
  33070. useResizeObserver(innerRef, resetInnerWidth);
  33071. useResizeObserver(collapseItemRef, resetCollapseItemWidth);
  33072. return {
  33073. ns,
  33074. nsInput,
  33075. containerKls,
  33076. containerStyle,
  33077. innerKls,
  33078. showClear,
  33079. showSuffix,
  33080. tagStyle,
  33081. collapseItemRef,
  33082. innerRef
  33083. };
  33084. }
  33085. //#endregion
  33086. //#region ../../packages/components/input-tag/src/input-tag.vue?vue&type=script&setup=true&lang.ts
  33087. const _hoisted_1$33 = [
  33088. "id",
  33089. "minlength",
  33090. "maxlength",
  33091. "disabled",
  33092. "readonly",
  33093. "autocomplete",
  33094. "tabindex",
  33095. "placeholder",
  33096. "autofocus",
  33097. "ariaLabel"
  33098. ];
  33099. const _hoisted_2$20 = ["textContent"];
  33100. var input_tag_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  33101. name: "ElInputTag",
  33102. inheritAttrs: false,
  33103. __name: "input-tag",
  33104. props: inputTagProps,
  33105. emits: inputTagEmits,
  33106. setup(__props, { expose: __expose, emit: __emit }) {
  33107. const props = __props;
  33108. const emit = __emit;
  33109. const attrs = useAttrs();
  33110. const slots = (0, vue.useSlots)();
  33111. const { form, formItem } = useFormItem();
  33112. const { inputId } = useFormItemInputId(props, { formItemContext: formItem });
  33113. const needStatusIcon = (0, vue.computed)(() => form?.statusIcon ?? false);
  33114. const validateState = (0, vue.computed)(() => formItem?.validateState || "");
  33115. const validateIcon = (0, vue.computed)(() => {
  33116. return validateState.value && ValidateComponentsMap[validateState.value];
  33117. });
  33118. const { inputRef, wrapperRef, tagTooltipRef, isFocused, inputValue, size, tagSize, placeholder, closable, disabled, showTagList, collapseTagList, handleDragged, handlePaste, handleInput, handleKeydown, handleKeyup, handleRemoveTag, handleClear, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd, focus, blur } = useInputTag({
  33119. props,
  33120. emit,
  33121. formItem
  33122. });
  33123. const { hovering, handleMouseEnter, handleMouseLeave } = useHovering();
  33124. const { calculatorRef, inputStyle } = useCalcInputWidth();
  33125. const { dropIndicatorRef, showDropIndicator, handleDragStart, handleDragOver, handleDragEnd } = useDragTag({
  33126. wrapperRef,
  33127. handleDragged,
  33128. afterDragged: focus
  33129. });
  33130. const { ns, nsInput, containerKls, containerStyle, innerKls, showClear, showSuffix, tagStyle, collapseItemRef, innerRef } = useInputTagDom({
  33131. props,
  33132. hovering,
  33133. isFocused,
  33134. inputValue,
  33135. disabled,
  33136. size,
  33137. validateState,
  33138. validateIcon,
  33139. needStatusIcon
  33140. });
  33141. __expose({
  33142. focus,
  33143. blur
  33144. });
  33145. return (_ctx, _cache) => {
  33146. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  33147. ref_key: "wrapperRef",
  33148. ref: wrapperRef,
  33149. class: (0, vue.normalizeClass)((0, vue.unref)(containerKls)),
  33150. style: (0, vue.normalizeStyle)((0, vue.unref)(containerStyle)),
  33151. onMouseenter: _cache[9] || (_cache[9] = (...args) => (0, vue.unref)(handleMouseEnter) && (0, vue.unref)(handleMouseEnter)(...args)),
  33152. onMouseleave: _cache[10] || (_cache[10] = (...args) => (0, vue.unref)(handleMouseLeave) && (0, vue.unref)(handleMouseLeave)(...args))
  33153. }, [
  33154. (0, vue.unref)(slots).prefix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  33155. key: 0,
  33156. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("prefix"))
  33157. }, [(0, vue.renderSlot)(_ctx.$slots, "prefix")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  33158. (0, vue.createElementVNode)("div", {
  33159. ref_key: "innerRef",
  33160. ref: innerRef,
  33161. class: (0, vue.normalizeClass)((0, vue.unref)(innerKls))
  33162. }, [
  33163. ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(showTagList), (item, index) => {
  33164. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTag), {
  33165. key: index,
  33166. size: (0, vue.unref)(tagSize),
  33167. closable: (0, vue.unref)(closable),
  33168. type: __props.tagType,
  33169. effect: __props.tagEffect,
  33170. draggable: (0, vue.unref)(closable) && __props.draggable,
  33171. style: (0, vue.normalizeStyle)((0, vue.unref)(tagStyle)),
  33172. "disable-transitions": "",
  33173. onClose: ($event) => (0, vue.unref)(handleRemoveTag)(index),
  33174. onDragstart: (event) => (0, vue.unref)(handleDragStart)(event, index),
  33175. onDragover: (event) => (0, vue.unref)(handleDragOver)(event, index),
  33176. onDragend: (0, vue.unref)(handleDragEnd),
  33177. onDrop: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
  33178. }, {
  33179. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "tag", {
  33180. value: item,
  33181. index
  33182. }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item), 1)])]),
  33183. _: 2
  33184. }, 1032, [
  33185. "size",
  33186. "closable",
  33187. "type",
  33188. "effect",
  33189. "draggable",
  33190. "style",
  33191. "onClose",
  33192. "onDragstart",
  33193. "onDragover",
  33194. "onDragend"
  33195. ]);
  33196. }), 128)),
  33197. __props.collapseTags && __props.modelValue && __props.modelValue.length > __props.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
  33198. key: 0,
  33199. ref_key: "tagTooltipRef",
  33200. ref: tagTooltipRef,
  33201. disabled: !__props.collapseTagsTooltip,
  33202. "fallback-placements": [
  33203. "bottom",
  33204. "top",
  33205. "right",
  33206. "left"
  33207. ],
  33208. effect: __props.effect,
  33209. placement: "bottom"
  33210. }, {
  33211. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  33212. ref_key: "collapseItemRef",
  33213. ref: collapseItemRef,
  33214. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("collapse-tag"))
  33215. }, [(0, vue.createVNode)((0, vue.unref)(ElTag), {
  33216. closable: false,
  33217. size: (0, vue.unref)(tagSize),
  33218. type: __props.tagType,
  33219. effect: __props.tagEffect,
  33220. "disable-transitions": ""
  33221. }, {
  33222. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)(" + " + (0, vue.toDisplayString)(__props.modelValue.length - __props.maxCollapseTags), 1)]),
  33223. _: 1
  33224. }, 8, [
  33225. "size",
  33226. "type",
  33227. "effect"
  33228. ])], 2)]),
  33229. content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input-tag-list")) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(collapseTagList), (item, index) => {
  33230. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTag), {
  33231. key: index,
  33232. size: (0, vue.unref)(tagSize),
  33233. closable: (0, vue.unref)(closable),
  33234. type: __props.tagType,
  33235. effect: __props.tagEffect,
  33236. "disable-transitions": "",
  33237. onClose: ($event) => (0, vue.unref)(handleRemoveTag)(index + __props.maxCollapseTags)
  33238. }, {
  33239. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "tag", {
  33240. value: item,
  33241. index: index + __props.maxCollapseTags
  33242. }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item), 1)])]),
  33243. _: 2
  33244. }, 1032, [
  33245. "size",
  33246. "closable",
  33247. "type",
  33248. "effect",
  33249. "onClose"
  33250. ]);
  33251. }), 128))], 2)]),
  33252. _: 3
  33253. }, 8, ["disabled", "effect"])) : (0, vue.createCommentVNode)("v-if", true),
  33254. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input-wrapper")) }, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", (0, vue.mergeProps)({
  33255. id: (0, vue.unref)(inputId),
  33256. ref_key: "inputRef",
  33257. ref: inputRef,
  33258. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => (0, vue.isRef)(inputValue) ? inputValue.value = $event : null)
  33259. }, (0, vue.unref)(attrs), {
  33260. type: "text",
  33261. minlength: __props.minlength,
  33262. maxlength: __props.maxlength,
  33263. disabled: (0, vue.unref)(disabled),
  33264. readonly: __props.readonly,
  33265. autocomplete: __props.autocomplete,
  33266. tabindex: __props.tabindex,
  33267. placeholder: (0, vue.unref)(placeholder),
  33268. autofocus: __props.autofocus,
  33269. ariaLabel: __props.ariaLabel,
  33270. class: (0, vue.unref)(ns).e("input"),
  33271. style: (0, vue.unref)(inputStyle),
  33272. onCompositionstart: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(handleCompositionStart) && (0, vue.unref)(handleCompositionStart)(...args)),
  33273. onCompositionupdate: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(handleCompositionUpdate) && (0, vue.unref)(handleCompositionUpdate)(...args)),
  33274. onCompositionend: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleCompositionEnd) && (0, vue.unref)(handleCompositionEnd)(...args)),
  33275. onPaste: _cache[5] || (_cache[5] = (...args) => (0, vue.unref)(handlePaste) && (0, vue.unref)(handlePaste)(...args)),
  33276. onInput: _cache[6] || (_cache[6] = (...args) => (0, vue.unref)(handleInput) && (0, vue.unref)(handleInput)(...args)),
  33277. onKeydown: _cache[7] || (_cache[7] = (...args) => (0, vue.unref)(handleKeydown) && (0, vue.unref)(handleKeydown)(...args)),
  33278. onKeyup: _cache[8] || (_cache[8] = (...args) => (0, vue.unref)(handleKeyup) && (0, vue.unref)(handleKeyup)(...args))
  33279. }), null, 16, _hoisted_1$33), [[vue.vModelText, (0, vue.unref)(inputValue)]]), (0, vue.createElementVNode)("span", {
  33280. ref_key: "calculatorRef",
  33281. ref: calculatorRef,
  33282. "aria-hidden": "true",
  33283. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input-calculator")),
  33284. textContent: (0, vue.toDisplayString)((0, vue.unref)(inputValue))
  33285. }, null, 10, _hoisted_2$20)], 2),
  33286. (0, vue.withDirectives)((0, vue.createElementVNode)("div", {
  33287. ref_key: "dropIndicatorRef",
  33288. ref: dropIndicatorRef,
  33289. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("drop-indicator"))
  33290. }, null, 2), [[vue.vShow, (0, vue.unref)(showDropIndicator)]])
  33291. ], 2),
  33292. (0, vue.unref)(showSuffix) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  33293. key: 1,
  33294. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("suffix"))
  33295. }, [
  33296. (0, vue.renderSlot)(_ctx.$slots, "suffix"),
  33297. (0, vue.unref)(showClear) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  33298. key: 0,
  33299. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), (0, vue.unref)(ns).e("clear")]),
  33300. onMousedown: (0, vue.withModifiers)((0, vue.unref)(NOOP), ["prevent"]),
  33301. onClick: (0, vue.unref)(handleClear)
  33302. }, {
  33303. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.clearIcon)))]),
  33304. _: 1
  33305. }, 8, [
  33306. "class",
  33307. "onMousedown",
  33308. "onClick"
  33309. ])) : (0, vue.createCommentVNode)("v-if", true),
  33310. validateState.value && validateIcon.value && needStatusIcon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  33311. key: 1,
  33312. class: (0, vue.normalizeClass)([
  33313. (0, vue.unref)(nsInput).e("icon"),
  33314. (0, vue.unref)(nsInput).e("validateIcon"),
  33315. (0, vue.unref)(nsInput).is("loading", validateState.value === "validating")
  33316. ])
  33317. }, {
  33318. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(validateIcon.value)))]),
  33319. _: 1
  33320. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
  33321. ], 2)) : (0, vue.createCommentVNode)("v-if", true)
  33322. ], 38);
  33323. };
  33324. }
  33325. });
  33326. //#endregion
  33327. //#region ../../packages/components/input-tag/src/input-tag.vue
  33328. var input_tag_default = input_tag_vue_vue_type_script_setup_true_lang_default;
  33329. //#endregion
  33330. //#region ../../packages/components/input-tag/index.ts
  33331. const ElInputTag = withInstall(input_tag_default);
  33332. //#endregion
  33333. //#region ../../packages/components/input-otp/src/input-otp.ts
  33334. const inputOtpEmits = {
  33335. [UPDATE_MODEL_EVENT]: (value) => isString(value),
  33336. [CHANGE_EVENT]: (value) => isString(value),
  33337. finish: (value) => isString(value),
  33338. focus: (eve) => eve instanceof FocusEvent,
  33339. blur: (eve) => eve instanceof FocusEvent
  33340. };
  33341. //#endregion
  33342. //#region ../../packages/components/input-otp/src/input-otp.vue?vue&type=script&setup=true&lang.ts
  33343. const _hoisted_1$32 = [
  33344. "id",
  33345. "aria-label",
  33346. "aria-labelledby"
  33347. ];
  33348. const _hoisted_2$19 = [
  33349. "value",
  33350. "type",
  33351. "disabled",
  33352. "readonly",
  33353. "inputmode",
  33354. "aria-label",
  33355. "onClick",
  33356. "onKeydown",
  33357. "onInput"
  33358. ];
  33359. var input_otp_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  33360. name: "ElInputOtp",
  33361. __name: "input-otp",
  33362. props: {
  33363. modelValue: {
  33364. type: [String, Number],
  33365. required: false
  33366. },
  33367. length: {
  33368. type: Number,
  33369. required: false,
  33370. default: 6
  33371. },
  33372. validator: {
  33373. type: Function,
  33374. required: false,
  33375. default: () => true
  33376. },
  33377. inputmode: {
  33378. type: null,
  33379. required: false
  33380. },
  33381. type: {
  33382. type: String,
  33383. required: false,
  33384. default: "outlined"
  33385. },
  33386. size: {
  33387. type: null,
  33388. required: false,
  33389. default: "default"
  33390. },
  33391. mask: {
  33392. type: Boolean,
  33393. required: false
  33394. },
  33395. disabled: {
  33396. type: Boolean,
  33397. required: false,
  33398. default: void 0
  33399. },
  33400. readonly: {
  33401. type: Boolean,
  33402. required: false
  33403. },
  33404. id: {
  33405. type: String,
  33406. required: false
  33407. },
  33408. validateEvent: {
  33409. type: Boolean,
  33410. required: false,
  33411. default: true
  33412. },
  33413. separator: {
  33414. type: [
  33415. String,
  33416. Object,
  33417. Function
  33418. ],
  33419. required: false
  33420. },
  33421. ariaLabel: {
  33422. type: String,
  33423. required: false
  33424. }
  33425. },
  33426. emits: inputOtpEmits,
  33427. setup(__props, { expose: __expose, emit: __emit }) {
  33428. const props = __props;
  33429. const emit = __emit;
  33430. const initialValue = (0, vue.computed)(() => {
  33431. const value = String(props.modelValue ?? "");
  33432. return Array.from({ length: props.length }, (_, i) => value.charAt(i));
  33433. });
  33434. const separators = (0, vue.computed)(() => {
  33435. const { separator } = props;
  33436. const _separator = isFunction$1(separator) ? separator : () => separator;
  33437. return Array.from({ length: props.length - 1 }, (_, i) => _separator(i));
  33438. });
  33439. const innerValue = (0, vue.ref)(initialValue.value);
  33440. const isFocused = (0, vue.ref)(false);
  33441. const inputRefs = (0, vue.ref)([]);
  33442. const ns = useNamespace("input-otp");
  33443. const { t } = useLocale();
  33444. const { formItem } = useFormItem();
  33445. const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem });
  33446. const disabled = useFormDisabled();
  33447. let modelValueOnFocus = props.modelValue;
  33448. const getFirstIndex = (maxIndex) => {
  33449. const index = innerValue.value.findIndex((char, i) => !char && i <= maxIndex);
  33450. return index === -1 ? maxIndex : index;
  33451. };
  33452. const handleFocus = (event) => {
  33453. if (inputRefs.value?.includes(event.relatedTarget)) return;
  33454. isFocused.value = true;
  33455. emit("focus", event);
  33456. };
  33457. const handleBlur = (event) => {
  33458. if (inputRefs.value?.includes(event.relatedTarget)) return;
  33459. isFocused.value = false;
  33460. emit("blur", event);
  33461. if (props.validateEvent) formItem?.validate?.("blur").catch(NOOP);
  33462. };
  33463. const updateModelValue = (emitFinish = true) => {
  33464. const value = innerValue.value.join("").slice(0, props.length);
  33465. if (value !== props.modelValue) {
  33466. emit(UPDATE_MODEL_EVENT, value);
  33467. if (emitFinish && value.length === props.length) emit("finish", value);
  33468. }
  33469. };
  33470. const handleKeydown = (event, index) => {
  33471. const code = getEventCode(event);
  33472. let preventDefault = true;
  33473. switch (code) {
  33474. case EVENT_CODE.backspace:
  33475. if (props.readonly) break;
  33476. innerValue.value[index] = "";
  33477. focus(index - 1);
  33478. updateModelValue();
  33479. break;
  33480. case EVENT_CODE.delete:
  33481. if (props.readonly) break;
  33482. innerValue.value[index] = "";
  33483. focus(index);
  33484. updateModelValue();
  33485. break;
  33486. case EVENT_CODE.up:
  33487. case EVENT_CODE.left:
  33488. focus(index - 1);
  33489. break;
  33490. case EVENT_CODE.down:
  33491. case EVENT_CODE.right:
  33492. focus(index + 1);
  33493. break;
  33494. default: preventDefault = false;
  33495. }
  33496. if (preventDefault) event.preventDefault();
  33497. };
  33498. const handleInput = (event, index) => {
  33499. const target = event.target;
  33500. const targetIndex = getFirstIndex(index);
  33501. let focusIndex = targetIndex + 1;
  33502. let value = target.value;
  33503. if (value.length > 1) {
  33504. const chars = castValues(value, targetIndex);
  33505. target.value = innerValue.value[index] ?? "";
  33506. chars.forEach((char, i) => innerValue.value[targetIndex + i] = char);
  33507. focus(targetIndex + chars.length);
  33508. updateModelValue();
  33509. return;
  33510. }
  33511. if (!props.validator(value, targetIndex)) {
  33512. target.value = innerValue.value[index] ?? "";
  33513. value = target.value;
  33514. focusIndex = targetIndex;
  33515. }
  33516. innerValue.value[targetIndex] = value;
  33517. if (targetIndex !== index) target.value = innerValue.value[index] ?? "";
  33518. focus(focusIndex);
  33519. updateModelValue();
  33520. };
  33521. const castValues = (value, startIndex = 0) => {
  33522. const chars = `${value ?? ""}`.split("");
  33523. const result = [];
  33524. for (const char of chars) {
  33525. if (result.length + startIndex >= props.length) break;
  33526. if (props.validator(char, result.length + startIndex)) result.push(char);
  33527. }
  33528. return result;
  33529. };
  33530. const focus = (index = 0) => {
  33531. const focusIndex = clamp$2(index, 0, props.length - 1);
  33532. const target = inputRefs.value?.[focusIndex];
  33533. if (document.activeElement !== target) target?.focus();
  33534. rAF(() => {
  33535. if (!props.readonly && document.activeElement === target) target?.select();
  33536. });
  33537. };
  33538. const blur = () => {
  33539. (inputRefs.value?.find((input) => document.activeElement === input))?.blur();
  33540. };
  33541. (0, vue.watch)(() => props.modelValue, () => {
  33542. innerValue.value = initialValue.value;
  33543. if (props.validateEvent) formItem?.validate?.("change").catch(NOOP);
  33544. });
  33545. (0, vue.watch)(() => props.length, () => {
  33546. innerValue.value = initialValue.value;
  33547. updateModelValue(false);
  33548. });
  33549. (0, vue.watch)(isFocused, (value) => {
  33550. if (value) {
  33551. modelValueOnFocus = props.modelValue;
  33552. return;
  33553. }
  33554. if (modelValueOnFocus !== props.modelValue) emit(CHANGE_EVENT, props.modelValue);
  33555. });
  33556. __expose({
  33557. inputRefs,
  33558. focus,
  33559. blur
  33560. });
  33561. return (_ctx, _cache) => {
  33562. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  33563. id: (0, vue.unref)(inputId),
  33564. class: (0, vue.normalizeClass)([
  33565. (0, vue.unref)(ns).b(),
  33566. (0, vue.unref)(ns).m(__props.size),
  33567. (0, vue.unref)(ns).m(__props.type),
  33568. (0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled))
  33569. ]),
  33570. role: "group",
  33571. "aria-label": !(0, vue.unref)(isLabeledByFormItem) ? __props.ariaLabel || (0, vue.unref)(t)("el.inputOTP.groupLabel") : void 0,
  33572. "aria-labelledby": (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(formItem)?.labelId : void 0
  33573. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.length, (_, index) => {
  33574. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: index }, [(0, vue.createElementVNode)("label", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input-field")) }, [(0, vue.createElementVNode)("input", {
  33575. ref_for: true,
  33576. ref_key: "inputRefs",
  33577. ref: inputRefs,
  33578. value: innerValue.value[index],
  33579. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input")),
  33580. type: __props.mask ? "password" : "text",
  33581. disabled: (0, vue.unref)(disabled),
  33582. readonly: __props.readonly,
  33583. inputmode: __props.inputmode,
  33584. autocomplete: "one-time-code",
  33585. "aria-label": (0, vue.unref)(t)("el.inputOTP.defaultLabel", { index: index + 1 }),
  33586. onFocus: handleFocus,
  33587. onBlur: handleBlur,
  33588. onClick: ($event) => focus(index),
  33589. onKeydown: ($event) => handleKeydown($event, index),
  33590. onInput: ($event) => handleInput($event, index)
  33591. }, null, 42, _hoisted_2$19)], 2), (_ctx.$slots.separator || separators.value[index]) && index < __props.length - 1 ? (0, vue.renderSlot)(_ctx.$slots, "separator", {
  33592. key: 0,
  33593. index
  33594. }, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(() => separators.value[index])))]) : (0, vue.createCommentVNode)("v-if", true)], 64);
  33595. }), 128))], 10, _hoisted_1$32);
  33596. };
  33597. }
  33598. });
  33599. //#endregion
  33600. //#region ../../packages/components/input-otp/src/input-otp.vue
  33601. var input_otp_default = input_otp_vue_vue_type_script_setup_true_lang_default;
  33602. //#endregion
  33603. //#region ../../packages/components/input-otp/index.ts
  33604. const ElInputOtp = withInstall(input_otp_default);
  33605. //#endregion
  33606. //#region ../../packages/components/link/src/link.ts
  33607. const linkProps = buildProps({
  33608. type: {
  33609. type: String,
  33610. values: [
  33611. "primary",
  33612. "success",
  33613. "warning",
  33614. "info",
  33615. "danger",
  33616. "default"
  33617. ],
  33618. default: void 0
  33619. },
  33620. underline: {
  33621. type: [Boolean, String],
  33622. values: [
  33623. true,
  33624. false,
  33625. "always",
  33626. "never",
  33627. "hover"
  33628. ],
  33629. default: void 0
  33630. },
  33631. disabled: Boolean,
  33632. href: {
  33633. type: String,
  33634. default: ""
  33635. },
  33636. target: {
  33637. type: String,
  33638. default: "_self"
  33639. },
  33640. icon: { type: iconPropType }
  33641. });
  33642. const linkEmits = { click: (evt) => evt instanceof MouseEvent };
  33643. //#endregion
  33644. //#region ../../packages/components/link/src/link.vue?vue&type=script&setup=true&lang.ts
  33645. const _hoisted_1$31 = ["href", "target"];
  33646. var link_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  33647. name: "ElLink",
  33648. __name: "link",
  33649. props: linkProps,
  33650. emits: linkEmits,
  33651. setup(__props, { emit: __emit }) {
  33652. const props = __props;
  33653. const emit = __emit;
  33654. const globalConfig = useGlobalConfig("link");
  33655. useDeprecated({
  33656. scope: "el-link",
  33657. from: "The underline option (boolean)",
  33658. replacement: "'always' | 'hover' | 'never'",
  33659. version: "3.0.0",
  33660. ref: "https://element-plus.org/en-US/component/link.html#underline"
  33661. }, (0, vue.computed)(() => isBoolean(props.underline)));
  33662. const ns = useNamespace("link");
  33663. const linkKls = (0, vue.computed)(() => [
  33664. ns.b(),
  33665. ns.m(props.type ?? globalConfig.value?.type ?? "default"),
  33666. ns.is("disabled", props.disabled),
  33667. ns.is("underline", underline.value === "always"),
  33668. ns.is("hover-underline", underline.value === "hover" && !props.disabled)
  33669. ]);
  33670. const underline = (0, vue.computed)(() => {
  33671. if (isBoolean(props.underline)) return props.underline ? "hover" : "never";
  33672. else return props.underline ?? globalConfig.value?.underline ?? "hover";
  33673. });
  33674. function handleClick(event) {
  33675. if (!props.disabled) emit("click", event);
  33676. }
  33677. return (_ctx, _cache) => {
  33678. return (0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
  33679. class: (0, vue.normalizeClass)(linkKls.value),
  33680. href: __props.disabled || !__props.href ? void 0 : __props.href,
  33681. target: __props.disabled || !__props.href ? void 0 : __props.target,
  33682. onClick: handleClick
  33683. }, [
  33684. __props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  33685. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
  33686. _: 1
  33687. })) : (0, vue.createCommentVNode)("v-if", true),
  33688. _ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  33689. key: 1,
  33690. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner"))
  33691. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  33692. _ctx.$slots.icon ? (0, vue.renderSlot)(_ctx.$slots, "icon", { key: 2 }) : (0, vue.createCommentVNode)("v-if", true)
  33693. ], 10, _hoisted_1$31);
  33694. };
  33695. }
  33696. });
  33697. //#endregion
  33698. //#region ../../packages/components/link/src/link.vue
  33699. var link_default = link_vue_vue_type_script_setup_true_lang_default;
  33700. //#endregion
  33701. //#region ../../packages/components/link/index.ts
  33702. const ElLink = withInstall(link_default);
  33703. //#endregion
  33704. //#region ../../packages/components/menu/src/utils/submenu.ts
  33705. var SubMenu = class {
  33706. constructor(parent, domNode) {
  33707. this.parent = parent;
  33708. this.domNode = domNode;
  33709. this.subIndex = 0;
  33710. this.subMenuItems = this.domNode.querySelectorAll("li");
  33711. this.addListeners();
  33712. }
  33713. gotoSubIndex(idx) {
  33714. if (idx === this.subMenuItems.length) idx = 0;
  33715. else if (idx < 0) idx = this.subMenuItems.length - 1;
  33716. this.subMenuItems[idx].focus();
  33717. this.subIndex = idx;
  33718. }
  33719. addListeners() {
  33720. const parentNode = this.parent.domNode;
  33721. this.subMenuItems.forEach((el) => {
  33722. el.addEventListener("keydown", (event) => {
  33723. const code = getEventCode(event);
  33724. let prevDef = false;
  33725. switch (code) {
  33726. case EVENT_CODE.down:
  33727. this.gotoSubIndex(this.subIndex + 1);
  33728. prevDef = true;
  33729. break;
  33730. case EVENT_CODE.up:
  33731. this.gotoSubIndex(this.subIndex - 1);
  33732. prevDef = true;
  33733. break;
  33734. case EVENT_CODE.tab:
  33735. triggerEvent(parentNode, "mouseleave");
  33736. break;
  33737. case EVENT_CODE.enter:
  33738. case EVENT_CODE.numpadEnter:
  33739. case EVENT_CODE.space:
  33740. prevDef = true;
  33741. event.currentTarget.click();
  33742. break;
  33743. }
  33744. if (prevDef) {
  33745. event.preventDefault();
  33746. event.stopPropagation();
  33747. }
  33748. return false;
  33749. });
  33750. });
  33751. }
  33752. };
  33753. //#endregion
  33754. //#region ../../packages/components/menu/src/utils/menu-item.ts
  33755. var MenuItem = class {
  33756. constructor(domNode, namespace) {
  33757. this.domNode = domNode;
  33758. this.submenu = null;
  33759. this.init(namespace);
  33760. }
  33761. init(namespace) {
  33762. this.domNode.setAttribute("tabindex", "0");
  33763. const menuChild = this.domNode.querySelector(`.${namespace}-menu`);
  33764. if (menuChild) this.submenu = new SubMenu(this, menuChild);
  33765. this.addListeners();
  33766. }
  33767. addListeners() {
  33768. this.domNode.addEventListener("keydown", (event) => {
  33769. const code = getEventCode(event);
  33770. let prevDef = false;
  33771. switch (code) {
  33772. case EVENT_CODE.down:
  33773. triggerEvent(event.currentTarget, "mouseenter");
  33774. this.submenu?.gotoSubIndex(0);
  33775. prevDef = true;
  33776. break;
  33777. case EVENT_CODE.up:
  33778. triggerEvent(event.currentTarget, "mouseenter");
  33779. this.submenu?.gotoSubIndex(this.submenu.subMenuItems.length - 1);
  33780. prevDef = true;
  33781. break;
  33782. case EVENT_CODE.tab:
  33783. triggerEvent(event.currentTarget, "mouseleave");
  33784. break;
  33785. case EVENT_CODE.enter:
  33786. case EVENT_CODE.numpadEnter:
  33787. case EVENT_CODE.space:
  33788. prevDef = true;
  33789. event.currentTarget.click();
  33790. break;
  33791. }
  33792. if (prevDef) event.preventDefault();
  33793. });
  33794. }
  33795. };
  33796. //#endregion
  33797. //#region ../../packages/components/menu/src/utils/menu-bar.ts
  33798. var Menu = class {
  33799. constructor(domNode, namespace) {
  33800. this.domNode = domNode;
  33801. this.init(namespace);
  33802. }
  33803. init(namespace) {
  33804. const menuChildren = this.domNode.childNodes;
  33805. Array.from(menuChildren).forEach((child) => {
  33806. if (child.nodeType === 1) new MenuItem(child, namespace);
  33807. });
  33808. }
  33809. };
  33810. //#endregion
  33811. //#region ../../packages/components/menu/src/menu-collapse-transition.vue?vue&type=script&setup=true&lang.ts
  33812. var menu_collapse_transition_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  33813. name: "ElMenuCollapseTransition",
  33814. __name: "menu-collapse-transition",
  33815. setup(__props) {
  33816. const ns = useNamespace("menu");
  33817. const listeners = {
  33818. onBeforeEnter: (el) => el.style.opacity = "0.2",
  33819. onEnter(el, done) {
  33820. addClass(el, `${ns.namespace.value}-opacity-transition`);
  33821. el.style.opacity = "1";
  33822. done();
  33823. },
  33824. onAfterEnter(el) {
  33825. removeClass(el, `${ns.namespace.value}-opacity-transition`);
  33826. el.style.opacity = "";
  33827. },
  33828. onBeforeLeave(el) {
  33829. if (!el.dataset) el.dataset = {};
  33830. if (hasClass(el, ns.m("collapse"))) {
  33831. removeClass(el, ns.m("collapse"));
  33832. el.dataset.oldOverflow = el.style.overflow;
  33833. el.dataset.scrollWidth = el.clientWidth.toString();
  33834. addClass(el, ns.m("collapse"));
  33835. } else {
  33836. addClass(el, ns.m("collapse"));
  33837. el.dataset.oldOverflow = el.style.overflow;
  33838. el.dataset.scrollWidth = el.clientWidth.toString();
  33839. removeClass(el, ns.m("collapse"));
  33840. }
  33841. el.style.width = `${el.scrollWidth}px`;
  33842. el.style.overflow = "hidden";
  33843. },
  33844. onLeave(el) {
  33845. addClass(el, "horizontal-collapse-transition");
  33846. el.style.width = `${el.dataset.scrollWidth}px`;
  33847. }
  33848. };
  33849. return (_ctx, _cache) => {
  33850. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, (0, vue.mergeProps)({ mode: "out-in" }, listeners), {
  33851. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  33852. _: 3
  33853. }, 16);
  33854. };
  33855. }
  33856. });
  33857. //#endregion
  33858. //#region ../../packages/components/menu/src/menu-collapse-transition.vue
  33859. var menu_collapse_transition_default = menu_collapse_transition_vue_vue_type_script_setup_true_lang_default;
  33860. //#endregion
  33861. //#region ../../packages/components/menu/src/use-menu.ts
  33862. function useMenu(instance, currentIndex) {
  33863. const indexPath = (0, vue.computed)(() => {
  33864. let parent = instance.parent;
  33865. const path = [currentIndex.value];
  33866. while (parent.type.name !== "ElMenu") {
  33867. if (parent.props.index) path.unshift(parent.props.index);
  33868. parent = parent.parent;
  33869. }
  33870. return path;
  33871. });
  33872. return {
  33873. parentMenu: (0, vue.computed)(() => {
  33874. let parent = instance.parent;
  33875. while (parent && !["ElMenu", "ElSubMenu"].includes(parent.type.name)) parent = parent.parent;
  33876. return parent;
  33877. }),
  33878. indexPath
  33879. };
  33880. }
  33881. //#endregion
  33882. //#region ../../packages/components/menu/src/use-menu-color.ts
  33883. function useMenuColor(props) {
  33884. return (0, vue.computed)(() => {
  33885. const color = props.backgroundColor;
  33886. return color ? new TinyColor(color).shade(20).toString() : "";
  33887. });
  33888. }
  33889. //#endregion
  33890. //#region ../../packages/components/menu/src/use-menu-css-var.ts
  33891. const useMenuCssVar = (props, level) => {
  33892. const ns = useNamespace("menu");
  33893. return (0, vue.computed)(() => ns.cssVarBlock({
  33894. "text-color": props.textColor || "",
  33895. "hover-text-color": props.textColor || "",
  33896. "bg-color": props.backgroundColor || "",
  33897. "hover-bg-color": useMenuColor(props).value || "",
  33898. "active-color": props.activeTextColor || "",
  33899. level: `${level}`
  33900. }));
  33901. };
  33902. //#endregion
  33903. //#region ../../packages/components/menu/src/tokens.ts
  33904. const MENU_INJECTION_KEY = "rootMenu";
  33905. const SUB_MENU_INJECTION_KEY = "subMenu:";
  33906. //#endregion
  33907. //#region ../../packages/components/menu/src/sub-menu.ts
  33908. const subMenuProps = buildProps({
  33909. index: {
  33910. type: String,
  33911. required: true
  33912. },
  33913. showTimeout: Number,
  33914. hideTimeout: Number,
  33915. popperClass: String,
  33916. popperStyle: { type: definePropType([String, Object]) },
  33917. disabled: Boolean,
  33918. teleported: {
  33919. type: Boolean,
  33920. default: void 0
  33921. },
  33922. popperOffset: Number,
  33923. expandCloseIcon: { type: iconPropType },
  33924. expandOpenIcon: { type: iconPropType },
  33925. collapseCloseIcon: { type: iconPropType },
  33926. collapseOpenIcon: { type: iconPropType }
  33927. });
  33928. const COMPONENT_NAME$8 = "ElSubMenu";
  33929. var sub_menu_default = (0, vue.defineComponent)({
  33930. name: COMPONENT_NAME$8,
  33931. props: subMenuProps,
  33932. setup(props, { slots, expose }) {
  33933. const instance = (0, vue.getCurrentInstance)();
  33934. const { indexPath, parentMenu } = useMenu(instance, (0, vue.computed)(() => props.index));
  33935. const nsMenu = useNamespace("menu");
  33936. const nsSubMenu = useNamespace("sub-menu");
  33937. const rootMenu = (0, vue.inject)(MENU_INJECTION_KEY);
  33938. if (!rootMenu) throwError(COMPONENT_NAME$8, "can not inject root menu");
  33939. const subMenu = (0, vue.inject)(`${SUB_MENU_INJECTION_KEY}${parentMenu.value.uid}`);
  33940. if (!subMenu) throwError(COMPONENT_NAME$8, "can not inject sub menu");
  33941. const items = (0, vue.ref)({});
  33942. const subMenus = (0, vue.ref)({});
  33943. let timeout;
  33944. const mouseInChild = (0, vue.ref)(false);
  33945. const verticalTitleRef = (0, vue.ref)();
  33946. const vPopper = (0, vue.ref)();
  33947. const isFirstLevel = (0, vue.computed)(() => subMenu.level === 0);
  33948. const currentPlacement = (0, vue.computed)(() => mode.value === "horizontal" && isFirstLevel.value ? "bottom-start" : "right-start");
  33949. const subMenuTitleIcon = (0, vue.computed)(() => {
  33950. if (mode.value === "horizontal" && isFirstLevel.value || mode.value === "vertical" && !rootMenu.props.collapse) {
  33951. if (props.expandCloseIcon && props.expandOpenIcon) return opened.value ? props.expandOpenIcon : props.expandCloseIcon;
  33952. return arrow_down_default;
  33953. } else {
  33954. if (props.collapseCloseIcon && props.collapseOpenIcon) return opened.value ? props.collapseOpenIcon : props.collapseCloseIcon;
  33955. return arrow_right_default;
  33956. }
  33957. });
  33958. const appendToBody = (0, vue.computed)(() => {
  33959. const value = props.teleported;
  33960. return isUndefined(value) ? isFirstLevel.value : value;
  33961. });
  33962. const menuTransitionName = (0, vue.computed)(() => rootMenu.props.collapse ? `${nsMenu.namespace.value}-zoom-in-left` : `${nsMenu.namespace.value}-zoom-in-top`);
  33963. const fallbackPlacements = (0, vue.computed)(() => mode.value === "horizontal" && isFirstLevel.value ? [
  33964. "bottom-start",
  33965. "bottom-end",
  33966. "top-start",
  33967. "top-end",
  33968. "right-start",
  33969. "left-start"
  33970. ] : [
  33971. "right-start",
  33972. "right",
  33973. "right-end",
  33974. "left-start",
  33975. "bottom-start",
  33976. "bottom-end",
  33977. "top-start",
  33978. "top-end"
  33979. ]);
  33980. const opened = (0, vue.computed)(() => rootMenu.openedMenus.includes(props.index));
  33981. const active = (0, vue.computed)(() => [...Object.values(items.value), ...Object.values(subMenus.value)].some(({ active }) => active));
  33982. const mode = (0, vue.computed)(() => rootMenu.props.mode);
  33983. const persistent = (0, vue.computed)(() => rootMenu.props.persistent);
  33984. const item = (0, vue.reactive)({
  33985. index: props.index,
  33986. indexPath,
  33987. active
  33988. });
  33989. const ulStyle = useMenuCssVar(rootMenu.props, subMenu.level + 1);
  33990. const subMenuPopperOffset = (0, vue.computed)(() => props.popperOffset ?? rootMenu.props.popperOffset);
  33991. const subMenuPopperClass = (0, vue.computed)(() => props.popperClass ?? rootMenu.props.popperClass);
  33992. const subMenuPopperStyle = (0, vue.computed)(() => props.popperStyle ?? rootMenu.props.popperStyle);
  33993. const subMenuShowTimeout = (0, vue.computed)(() => props.showTimeout ?? rootMenu.props.showTimeout);
  33994. const subMenuHideTimeout = (0, vue.computed)(() => props.hideTimeout ?? rootMenu.props.hideTimeout);
  33995. const doDestroy = () => vPopper.value?.popperRef?.popperInstanceRef?.destroy();
  33996. const handleCollapseToggle = (value) => {
  33997. if (!value) doDestroy();
  33998. };
  33999. const handleClick = () => {
  34000. if (rootMenu.props.menuTrigger === "hover" && rootMenu.props.mode === "horizontal" || rootMenu.props.collapse && rootMenu.props.mode === "vertical" || props.disabled) return;
  34001. rootMenu.handleSubMenuClick({
  34002. index: props.index,
  34003. indexPath: indexPath.value,
  34004. active: active.value
  34005. });
  34006. };
  34007. const handleMouseenter = (event, showTimeout = subMenuShowTimeout.value) => {
  34008. if (event.type === "focus") return;
  34009. if (rootMenu.props.menuTrigger === "click" && rootMenu.props.mode === "horizontal" || !rootMenu.props.collapse && rootMenu.props.mode === "vertical" || props.disabled) {
  34010. subMenu.mouseInChild.value = true;
  34011. return;
  34012. }
  34013. subMenu.mouseInChild.value = true;
  34014. timeout?.();
  34015. ({stop: timeout} = useTimeoutFn(() => {
  34016. rootMenu.openMenu(props.index, indexPath.value);
  34017. }, showTimeout));
  34018. if (appendToBody.value) parentMenu.value.vnode.el?.dispatchEvent(new MouseEvent("mouseenter"));
  34019. if (event.type === "mouseenter" && event.target) (0, vue.nextTick)(() => {
  34020. focusElement(event.target, { preventScroll: true });
  34021. });
  34022. };
  34023. const handleMouseleave = (deepDispatch = false) => {
  34024. if (rootMenu.props.menuTrigger === "click" && rootMenu.props.mode === "horizontal" || !rootMenu.props.collapse && rootMenu.props.mode === "vertical") {
  34025. subMenu.mouseInChild.value = false;
  34026. return;
  34027. }
  34028. timeout?.();
  34029. subMenu.mouseInChild.value = false;
  34030. ({stop: timeout} = useTimeoutFn(() => !mouseInChild.value && rootMenu.closeMenu(props.index, indexPath.value), subMenuHideTimeout.value));
  34031. if (appendToBody.value && deepDispatch) subMenu.handleMouseleave?.(true);
  34032. };
  34033. (0, vue.watch)(() => rootMenu.props.collapse, (value) => handleCollapseToggle(Boolean(value)));
  34034. {
  34035. const addSubMenu = (item) => {
  34036. subMenus.value[item.index] = item;
  34037. };
  34038. const removeSubMenu = (item) => {
  34039. delete subMenus.value[item.index];
  34040. };
  34041. (0, vue.provide)(`${SUB_MENU_INJECTION_KEY}${instance.uid}`, {
  34042. addSubMenu,
  34043. removeSubMenu,
  34044. handleMouseleave,
  34045. mouseInChild,
  34046. level: subMenu.level + 1
  34047. });
  34048. }
  34049. expose({ opened });
  34050. (0, vue.onMounted)(() => {
  34051. rootMenu.addSubMenu(item);
  34052. subMenu.addSubMenu(item);
  34053. });
  34054. (0, vue.onBeforeUnmount)(() => {
  34055. subMenu.removeSubMenu(item);
  34056. rootMenu.removeSubMenu(item);
  34057. });
  34058. return () => {
  34059. const titleTag = [slots.title?.(), (0, vue.h)(ElIcon, {
  34060. class: nsSubMenu.e("icon-arrow"),
  34061. style: { transform: opened.value ? props.expandCloseIcon && props.expandOpenIcon || props.collapseCloseIcon && props.collapseOpenIcon && rootMenu.props.collapse ? "none" : "rotateZ(180deg)" : "none" }
  34062. }, { default: () => isString(subMenuTitleIcon.value) ? (0, vue.h)(instance.appContext.components[subMenuTitleIcon.value]) : (0, vue.h)(subMenuTitleIcon.value) })];
  34063. const child = rootMenu.isMenuPopup ? (0, vue.h)(ElTooltip, {
  34064. ref: vPopper,
  34065. visible: opened.value,
  34066. effect: "light",
  34067. pure: true,
  34068. offset: subMenuPopperOffset.value,
  34069. showArrow: false,
  34070. persistent: persistent.value,
  34071. popperClass: subMenuPopperClass.value,
  34072. popperStyle: subMenuPopperStyle.value,
  34073. placement: currentPlacement.value,
  34074. teleported: appendToBody.value,
  34075. fallbackPlacements: fallbackPlacements.value,
  34076. transition: menuTransitionName.value,
  34077. gpuAcceleration: false
  34078. }, {
  34079. content: () => (0, vue.h)("div", {
  34080. class: [
  34081. nsMenu.m(mode.value),
  34082. nsMenu.m("popup-container"),
  34083. subMenuPopperClass.value
  34084. ],
  34085. onMouseenter: (evt) => handleMouseenter(evt, 100),
  34086. onMouseleave: () => handleMouseleave(true),
  34087. onFocus: (evt) => handleMouseenter(evt, 100)
  34088. }, [(0, vue.h)("ul", {
  34089. class: [
  34090. nsMenu.b(),
  34091. nsMenu.m("popup"),
  34092. nsMenu.m(`popup-${currentPlacement.value}`)
  34093. ],
  34094. style: ulStyle.value
  34095. }, [slots.default?.()])]),
  34096. default: () => (0, vue.h)("div", {
  34097. class: nsSubMenu.e("title"),
  34098. onClick: handleClick
  34099. }, titleTag)
  34100. }) : (0, vue.h)(vue.Fragment, {}, [(0, vue.h)("div", {
  34101. class: nsSubMenu.e("title"),
  34102. ref: verticalTitleRef,
  34103. onClick: handleClick
  34104. }, titleTag), (0, vue.h)(ElCollapseTransition, {}, { default: () => (0, vue.withDirectives)((0, vue.h)("ul", {
  34105. role: "menu",
  34106. class: [nsMenu.b(), nsMenu.m("inline")],
  34107. style: ulStyle.value
  34108. }, [slots.default?.()]), [[vue.vShow, opened.value]]) })]);
  34109. return (0, vue.h)("li", {
  34110. class: [
  34111. nsSubMenu.b(),
  34112. nsSubMenu.is("active", active.value),
  34113. nsSubMenu.is("opened", opened.value),
  34114. nsSubMenu.is("disabled", props.disabled)
  34115. ],
  34116. role: "menuitem",
  34117. ariaHaspopup: true,
  34118. ariaExpanded: opened.value,
  34119. onMouseenter: handleMouseenter,
  34120. onMouseleave: () => handleMouseleave(),
  34121. onFocus: handleMouseenter
  34122. }, [child]);
  34123. };
  34124. }
  34125. });
  34126. //#endregion
  34127. //#region ../../packages/components/menu/src/menu.ts
  34128. const menuProps = buildProps({
  34129. mode: {
  34130. type: String,
  34131. values: ["horizontal", "vertical"],
  34132. default: "vertical"
  34133. },
  34134. defaultActive: {
  34135. type: String,
  34136. default: ""
  34137. },
  34138. defaultOpeneds: {
  34139. type: definePropType(Array),
  34140. default: () => mutable([])
  34141. },
  34142. uniqueOpened: Boolean,
  34143. router: Boolean,
  34144. menuTrigger: {
  34145. type: String,
  34146. values: ["hover", "click"],
  34147. default: "hover"
  34148. },
  34149. collapse: Boolean,
  34150. backgroundColor: String,
  34151. textColor: String,
  34152. activeTextColor: String,
  34153. closeOnClickOutside: Boolean,
  34154. collapseTransition: {
  34155. type: Boolean,
  34156. default: true
  34157. },
  34158. ellipsis: {
  34159. type: Boolean,
  34160. default: true
  34161. },
  34162. popperOffset: {
  34163. type: Number,
  34164. default: 6
  34165. },
  34166. ellipsisIcon: {
  34167. type: iconPropType,
  34168. default: () => more_default
  34169. },
  34170. popperEffect: {
  34171. type: definePropType(String),
  34172. default: "dark"
  34173. },
  34174. popperClass: String,
  34175. popperStyle: { type: definePropType([String, Object]) },
  34176. showTimeout: {
  34177. type: Number,
  34178. default: 300
  34179. },
  34180. hideTimeout: {
  34181. type: Number,
  34182. default: 300
  34183. },
  34184. persistent: {
  34185. type: Boolean,
  34186. default: true
  34187. }
  34188. });
  34189. const checkIndexPath = (indexPath) => isArray$1(indexPath) && indexPath.every((path) => isString(path));
  34190. const menuEmits = {
  34191. close: (index, indexPath) => isString(index) && checkIndexPath(indexPath),
  34192. open: (index, indexPath) => isString(index) && checkIndexPath(indexPath),
  34193. select: (index, indexPath, item, routerResult) => isString(index) && checkIndexPath(indexPath) && isObject$1(item) && (isUndefined(routerResult) || routerResult instanceof Promise)
  34194. };
  34195. const DEFAULT_MORE_ITEM_WIDTH = 64;
  34196. var menu_default = (0, vue.defineComponent)({
  34197. name: "ElMenu",
  34198. props: menuProps,
  34199. emits: menuEmits,
  34200. setup(props, { emit, slots, expose }) {
  34201. const instance = (0, vue.getCurrentInstance)();
  34202. const router = instance.appContext.config.globalProperties.$router;
  34203. const menu = (0, vue.ref)();
  34204. const subMenu = (0, vue.ref)();
  34205. const nsMenu = useNamespace("menu");
  34206. const nsSubMenu = useNamespace("sub-menu");
  34207. let moreItemWidth = DEFAULT_MORE_ITEM_WIDTH;
  34208. const sliceIndex = (0, vue.ref)(-1);
  34209. const openedMenus = (0, vue.ref)(props.defaultOpeneds && !props.collapse ? props.defaultOpeneds.slice(0) : []);
  34210. const activeIndex = (0, vue.ref)(props.defaultActive);
  34211. const items = (0, vue.ref)({});
  34212. const subMenus = (0, vue.ref)({});
  34213. const isMenuPopup = (0, vue.computed)(() => props.mode === "horizontal" || props.mode === "vertical" && props.collapse);
  34214. const initMenu = () => {
  34215. const activeItem = activeIndex.value && items.value[activeIndex.value];
  34216. if (!activeItem || props.mode === "horizontal" || props.collapse) return;
  34217. activeItem.indexPath.forEach((index) => {
  34218. const subMenu = subMenus.value[index];
  34219. subMenu && openMenu(index, subMenu.indexPath);
  34220. });
  34221. };
  34222. const openMenu = (index, indexPath) => {
  34223. if (openedMenus.value.includes(index)) return;
  34224. if (props.uniqueOpened) openedMenus.value = openedMenus.value.filter((index) => indexPath.includes(index));
  34225. openedMenus.value.push(index);
  34226. emit("open", index, indexPath);
  34227. };
  34228. const close = (index) => {
  34229. const i = openedMenus.value.indexOf(index);
  34230. if (i !== -1) openedMenus.value.splice(i, 1);
  34231. };
  34232. const closeMenu = (index, indexPath) => {
  34233. close(index);
  34234. emit("close", index, indexPath);
  34235. };
  34236. const handleSubMenuClick = ({ index, indexPath }) => {
  34237. openedMenus.value.includes(index) ? closeMenu(index, indexPath) : openMenu(index, indexPath);
  34238. };
  34239. const handleMenuItemClick = (menuItem) => {
  34240. if (props.mode === "horizontal" || props.collapse) openedMenus.value = [];
  34241. const { index, indexPath } = menuItem;
  34242. if (isNil(index) || isNil(indexPath)) return;
  34243. if (props.router && router) {
  34244. const route = menuItem.route || index;
  34245. const routerResult = router.push(route).then((res) => {
  34246. if (!res) activeIndex.value = index;
  34247. return res;
  34248. });
  34249. emit("select", index, indexPath, {
  34250. index,
  34251. indexPath,
  34252. route
  34253. }, routerResult);
  34254. } else {
  34255. activeIndex.value = index;
  34256. emit("select", index, indexPath, {
  34257. index,
  34258. indexPath
  34259. });
  34260. }
  34261. };
  34262. const updateActiveIndex = (val) => {
  34263. const itemsInData = items.value;
  34264. activeIndex.value = (itemsInData[val] || activeIndex.value && itemsInData[activeIndex.value] || itemsInData[props.defaultActive])?.index ?? val;
  34265. };
  34266. const calcMenuItemWidth = (menuItem) => {
  34267. const computedStyle = getComputedStyle(menuItem);
  34268. const marginLeft = Number.parseInt(computedStyle.marginLeft, 10);
  34269. const marginRight = Number.parseInt(computedStyle.marginRight, 10);
  34270. return menuItem.offsetWidth + marginLeft + marginRight || 0;
  34271. };
  34272. const calcSliceIndex = () => {
  34273. if (!menu.value) return -1;
  34274. const items = Array.from(menu.value.childNodes).filter((item) => item.nodeName !== "#comment" && (item.nodeName !== "#text" || item.nodeValue));
  34275. const computedMenuStyle = getComputedStyle(menu.value);
  34276. const paddingLeft = Number.parseInt(computedMenuStyle.paddingLeft, 10);
  34277. const paddingRight = Number.parseInt(computedMenuStyle.paddingRight, 10);
  34278. const menuWidth = menu.value.clientWidth - paddingLeft - paddingRight;
  34279. let calcWidth = 0;
  34280. let sliceIndex = 0;
  34281. items.forEach((item, index) => {
  34282. calcWidth += calcMenuItemWidth(item);
  34283. if (calcWidth <= menuWidth - moreItemWidth) sliceIndex = index + 1;
  34284. });
  34285. return sliceIndex === items.length ? -1 : sliceIndex;
  34286. };
  34287. const getIndexPath = (index) => subMenus.value[index].indexPath;
  34288. const debounce = (fn, wait = 33.34) => {
  34289. let timer;
  34290. return () => {
  34291. timer && clearTimeout(timer);
  34292. timer = setTimeout(() => {
  34293. fn();
  34294. }, wait);
  34295. };
  34296. };
  34297. let isFirstTimeRender = true;
  34298. const handleResize = () => {
  34299. const el = unrefElement(subMenu);
  34300. if (el) moreItemWidth = calcMenuItemWidth(el) || DEFAULT_MORE_ITEM_WIDTH;
  34301. if (sliceIndex.value === calcSliceIndex()) return;
  34302. const callback = () => {
  34303. sliceIndex.value = -1;
  34304. (0, vue.nextTick)(() => {
  34305. sliceIndex.value = calcSliceIndex();
  34306. });
  34307. };
  34308. isFirstTimeRender ? callback() : debounce(callback)();
  34309. isFirstTimeRender = false;
  34310. };
  34311. (0, vue.watch)(() => props.defaultActive, (currentActive) => {
  34312. if (!items.value[currentActive]) activeIndex.value = "";
  34313. updateActiveIndex(currentActive);
  34314. });
  34315. (0, vue.watch)(() => props.collapse, (value) => {
  34316. if (value) openedMenus.value = [];
  34317. });
  34318. (0, vue.watch)(items.value, initMenu);
  34319. let resizeStopper;
  34320. (0, vue.watchEffect)(() => {
  34321. if (props.mode === "horizontal" && props.ellipsis) resizeStopper = useResizeObserver(menu, handleResize).stop;
  34322. else resizeStopper?.();
  34323. });
  34324. const mouseInChild = (0, vue.ref)(false);
  34325. {
  34326. const addSubMenu = (item) => {
  34327. subMenus.value[item.index] = item;
  34328. };
  34329. const removeSubMenu = (item) => {
  34330. delete subMenus.value[item.index];
  34331. };
  34332. const addMenuItem = (item) => {
  34333. items.value[item.index] = item;
  34334. };
  34335. const removeMenuItem = (item) => {
  34336. delete items.value[item.index];
  34337. };
  34338. (0, vue.provide)(MENU_INJECTION_KEY, (0, vue.reactive)({
  34339. props,
  34340. openedMenus,
  34341. items,
  34342. subMenus,
  34343. activeIndex,
  34344. isMenuPopup,
  34345. addMenuItem,
  34346. removeMenuItem,
  34347. addSubMenu,
  34348. removeSubMenu,
  34349. openMenu,
  34350. closeMenu,
  34351. handleMenuItemClick,
  34352. handleSubMenuClick
  34353. }));
  34354. (0, vue.provide)(`${SUB_MENU_INJECTION_KEY}${instance.uid}`, {
  34355. addSubMenu,
  34356. removeSubMenu,
  34357. mouseInChild,
  34358. level: 0
  34359. });
  34360. }
  34361. (0, vue.onMounted)(() => {
  34362. if (props.mode === "horizontal") new Menu(instance.vnode.el, nsMenu.namespace.value);
  34363. });
  34364. {
  34365. const open = (index) => {
  34366. const { indexPath } = subMenus.value[index];
  34367. indexPath.forEach((i) => openMenu(i, indexPath));
  34368. };
  34369. expose({
  34370. open,
  34371. close,
  34372. updateActiveIndex,
  34373. handleResize
  34374. });
  34375. }
  34376. const ulStyle = useMenuCssVar(props, 0);
  34377. return () => {
  34378. let slot = slots.default?.() ?? [];
  34379. const vShowMore = [];
  34380. if (props.mode === "horizontal" && menu.value) {
  34381. const originalSlot = flattedChildren(slot).filter((vnode) => {
  34382. return vnode?.shapeFlag !== 8;
  34383. });
  34384. const slotDefault = sliceIndex.value === -1 ? originalSlot : originalSlot.slice(0, sliceIndex.value);
  34385. const slotMore = sliceIndex.value === -1 ? [] : originalSlot.slice(sliceIndex.value);
  34386. if (slotMore?.length && props.ellipsis) {
  34387. slot = slotDefault;
  34388. vShowMore.push((0, vue.h)(sub_menu_default, {
  34389. ref: subMenu,
  34390. index: "sub-menu-more",
  34391. class: nsSubMenu.e("hide-arrow"),
  34392. popperOffset: props.popperOffset
  34393. }, {
  34394. title: () => (0, vue.h)(ElIcon, { class: nsSubMenu.e("icon-more") }, { default: () => (0, vue.h)(props.ellipsisIcon) }),
  34395. default: () => slotMore
  34396. }));
  34397. }
  34398. }
  34399. const directives = props.closeOnClickOutside ? [[ClickOutside, () => {
  34400. if (!openedMenus.value.length) return;
  34401. if (!mouseInChild.value) {
  34402. openedMenus.value.forEach((openedMenu) => emit("close", openedMenu, getIndexPath(openedMenu)));
  34403. openedMenus.value = [];
  34404. }
  34405. }]] : [];
  34406. const vMenu = (0, vue.withDirectives)((0, vue.h)("ul", {
  34407. key: String(props.collapse),
  34408. role: "menubar",
  34409. ref: menu,
  34410. style: ulStyle.value,
  34411. class: {
  34412. [nsMenu.b()]: true,
  34413. [nsMenu.m(props.mode)]: true,
  34414. [nsMenu.m("collapse")]: props.collapse
  34415. }
  34416. }, [...slot, ...vShowMore]), directives);
  34417. if (props.collapseTransition && props.mode === "vertical") return (0, vue.h)(menu_collapse_transition_default, () => vMenu);
  34418. return vMenu;
  34419. };
  34420. }
  34421. });
  34422. //#endregion
  34423. //#region ../../packages/components/menu/src/menu-item.ts
  34424. const menuItemProps = buildProps({
  34425. index: {
  34426. type: String,
  34427. required: true
  34428. },
  34429. route: { type: definePropType([String, Object]) },
  34430. disabled: Boolean
  34431. });
  34432. const menuItemEmits = { click: (item) => isString(item.index) && isArray$1(item.indexPath) };
  34433. //#endregion
  34434. //#region ../../packages/components/menu/src/menu-item.vue?vue&type=script&setup=true&lang.ts
  34435. const COMPONENT_NAME$7 = "ElMenuItem";
  34436. var menu_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  34437. name: COMPONENT_NAME$7,
  34438. __name: "menu-item",
  34439. props: menuItemProps,
  34440. emits: menuItemEmits,
  34441. setup(__props, { expose: __expose, emit: __emit }) {
  34442. const props = __props;
  34443. const emit = __emit;
  34444. const instance = (0, vue.getCurrentInstance)();
  34445. const rootMenu = (0, vue.inject)(MENU_INJECTION_KEY);
  34446. const nsMenu = useNamespace("menu");
  34447. const nsMenuItem = useNamespace("menu-item");
  34448. if (!rootMenu) throwError(COMPONENT_NAME$7, "can not inject root menu");
  34449. const { parentMenu, indexPath } = useMenu(instance, (0, vue.toRef)(props, "index"));
  34450. const subMenu = (0, vue.inject)(`${SUB_MENU_INJECTION_KEY}${parentMenu.value.uid}`);
  34451. if (!subMenu) throwError(COMPONENT_NAME$7, "can not inject sub menu");
  34452. const active = (0, vue.computed)(() => props.index === rootMenu.activeIndex);
  34453. const item = (0, vue.reactive)({
  34454. index: props.index,
  34455. indexPath,
  34456. active
  34457. });
  34458. const handleClick = () => {
  34459. if (!props.disabled) {
  34460. rootMenu.handleMenuItemClick({
  34461. index: props.index,
  34462. indexPath: indexPath.value,
  34463. route: props.route
  34464. });
  34465. emit("click", item);
  34466. }
  34467. };
  34468. (0, vue.onMounted)(() => {
  34469. subMenu.addSubMenu(item);
  34470. rootMenu.addMenuItem(item);
  34471. });
  34472. (0, vue.onBeforeUnmount)(() => {
  34473. subMenu.removeSubMenu(item);
  34474. rootMenu.removeMenuItem(item);
  34475. });
  34476. __expose({
  34477. parentMenu,
  34478. rootMenu,
  34479. active,
  34480. nsMenu,
  34481. nsMenuItem,
  34482. handleClick
  34483. });
  34484. return (_ctx, _cache) => {
  34485. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  34486. class: (0, vue.normalizeClass)([
  34487. (0, vue.unref)(nsMenuItem).b(),
  34488. (0, vue.unref)(nsMenuItem).is("active", active.value),
  34489. (0, vue.unref)(nsMenuItem).is("disabled", __props.disabled)
  34490. ]),
  34491. role: "menuitem",
  34492. tabindex: "-1",
  34493. onClick: handleClick
  34494. }, [(0, vue.unref)(parentMenu).type.name === "ElMenu" && (0, vue.unref)(rootMenu).props.collapse && _ctx.$slots.title ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), {
  34495. key: 0,
  34496. effect: (0, vue.unref)(rootMenu).props.popperEffect,
  34497. placement: "right",
  34498. "fallback-placements": ["left"],
  34499. "popper-class": (0, vue.unref)(rootMenu).props.popperClass,
  34500. "popper-style": (0, vue.unref)(rootMenu).props.popperStyle,
  34501. persistent: (0, vue.unref)(rootMenu).props.persistent,
  34502. "focus-on-target": ""
  34503. }, {
  34504. content: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "title")]),
  34505. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(nsMenu).be("tooltip", "trigger")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)]),
  34506. _: 3
  34507. }, 8, [
  34508. "effect",
  34509. "popper-class",
  34510. "popper-style",
  34511. "persistent"
  34512. ])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.renderSlot)(_ctx.$slots, "default"), (0, vue.renderSlot)(_ctx.$slots, "title")], 64))], 2);
  34513. };
  34514. }
  34515. });
  34516. //#endregion
  34517. //#region ../../packages/components/menu/src/menu-item.vue
  34518. var menu_item_default = menu_item_vue_vue_type_script_setup_true_lang_default;
  34519. //#endregion
  34520. //#region ../../packages/components/menu/src/menu-item-group.ts
  34521. const menuItemGroupProps = { title: String };
  34522. //#endregion
  34523. //#region ../../packages/components/menu/src/menu-item-group.vue?vue&type=script&setup=true&lang.ts
  34524. var menu_item_group_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  34525. name: "ElMenuItemGroup",
  34526. __name: "menu-item-group",
  34527. props: menuItemGroupProps,
  34528. setup(__props) {
  34529. const ns = useNamespace("menu-item-group");
  34530. return (_ctx, _cache) => {
  34531. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")) }, [!_ctx.$slots.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)], 64)) : (0, vue.renderSlot)(_ctx.$slots, "title", { key: 1 })], 2), (0, vue.createElementVNode)("ul", null, [(0, vue.renderSlot)(_ctx.$slots, "default")])], 2);
  34532. };
  34533. }
  34534. });
  34535. //#endregion
  34536. //#region ../../packages/components/menu/src/menu-item-group.vue
  34537. var menu_item_group_default = menu_item_group_vue_vue_type_script_setup_true_lang_default;
  34538. //#endregion
  34539. //#region ../../packages/components/menu/index.ts
  34540. const ElMenu = withInstall(menu_default, {
  34541. MenuItem: menu_item_default,
  34542. MenuItemGroup: menu_item_group_default,
  34543. SubMenu: sub_menu_default
  34544. });
  34545. const ElMenuItem = withNoopInstall(menu_item_default);
  34546. const ElMenuItemGroup = withNoopInstall(menu_item_group_default);
  34547. const ElSubMenu = withNoopInstall(sub_menu_default);
  34548. //#endregion
  34549. //#region ../../packages/components/page-header/src/page-header.ts
  34550. const pageHeaderProps = buildProps({
  34551. icon: {
  34552. type: iconPropType,
  34553. default: () => back_default
  34554. },
  34555. title: String,
  34556. content: {
  34557. type: String,
  34558. default: ""
  34559. }
  34560. });
  34561. const pageHeaderEmits = { back: () => true };
  34562. //#endregion
  34563. //#region ../../packages/components/page-header/src/page-header.vue?vue&type=script&setup=true&lang.ts
  34564. const _hoisted_1$30 = ["aria-label"];
  34565. var page_header_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  34566. name: "ElPageHeader",
  34567. __name: "page-header",
  34568. props: pageHeaderProps,
  34569. emits: pageHeaderEmits,
  34570. setup(__props, { emit: __emit }) {
  34571. const emit = __emit;
  34572. const { t } = useLocale();
  34573. const ns = useNamespace("page-header");
  34574. function handleClick() {
  34575. emit("back");
  34576. }
  34577. return (_ctx, _cache) => {
  34578. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([
  34579. (0, vue.unref)(ns).b(),
  34580. (0, vue.unref)(ns).is("contentful", !!_ctx.$slots.default),
  34581. {
  34582. [(0, vue.unref)(ns).m("has-breadcrumb")]: !!_ctx.$slots.breadcrumb,
  34583. [(0, vue.unref)(ns).m("has-extra")]: !!_ctx.$slots.extra
  34584. }
  34585. ]) }, [
  34586. _ctx.$slots.breadcrumb ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  34587. key: 0,
  34588. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("breadcrumb"))
  34589. }, [(0, vue.renderSlot)(_ctx.$slots, "breadcrumb")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  34590. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("header")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("left")) }, [
  34591. (0, vue.createElementVNode)("div", {
  34592. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("back")),
  34593. role: "button",
  34594. tabindex: "0",
  34595. onClick: handleClick
  34596. }, [__props.icon || _ctx.$slots.icon ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  34597. key: 0,
  34598. "aria-label": __props.title || (0, vue.unref)(t)("el.pageHeader.title"),
  34599. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon"))
  34600. }, [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [__props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  34601. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
  34602. _: 1
  34603. })) : (0, vue.createCommentVNode)("v-if", true)])], 10, _hoisted_1$30)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")) }, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title || (0, vue.unref)(t)("el.pageHeader.title")), 1)])], 2)], 2),
  34604. (0, vue.createVNode)((0, vue.unref)(ElDivider), { direction: "vertical" }),
  34605. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [(0, vue.renderSlot)(_ctx.$slots, "content", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.content), 1)])], 2)
  34606. ], 2), _ctx.$slots.extra ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  34607. key: 0,
  34608. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("extra"))
  34609. }, [(0, vue.renderSlot)(_ctx.$slots, "extra")], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2),
  34610. _ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  34611. key: 1,
  34612. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("main"))
  34613. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  34614. ], 2);
  34615. };
  34616. }
  34617. });
  34618. //#endregion
  34619. //#region ../../packages/components/page-header/src/page-header.vue
  34620. var page_header_default = page_header_vue_vue_type_script_setup_true_lang_default;
  34621. //#endregion
  34622. //#region ../../packages/components/page-header/index.ts
  34623. const ElPageHeader = withInstall(page_header_default);
  34624. //#endregion
  34625. //#region ../../packages/components/pagination/src/constants.ts
  34626. const elPaginationKey = Symbol("elPaginationKey");
  34627. //#endregion
  34628. //#region ../../packages/components/pagination/src/components/prev.ts
  34629. const paginationPrevProps = buildProps({
  34630. disabled: Boolean,
  34631. currentPage: {
  34632. type: Number,
  34633. default: 1
  34634. },
  34635. prevText: { type: String },
  34636. prevIcon: { type: iconPropType }
  34637. });
  34638. const paginationPrevEmits = { click: (evt) => evt instanceof MouseEvent };
  34639. //#endregion
  34640. //#region ../../packages/components/pagination/src/components/prev.vue?vue&type=script&setup=true&lang.ts
  34641. const _hoisted_1$29 = [
  34642. "disabled",
  34643. "aria-label",
  34644. "aria-disabled"
  34645. ];
  34646. const _hoisted_2$18 = { key: 0 };
  34647. var prev_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  34648. name: "ElPaginationPrev",
  34649. __name: "prev",
  34650. props: paginationPrevProps,
  34651. emits: paginationPrevEmits,
  34652. setup(__props) {
  34653. const props = __props;
  34654. const { t } = useLocale();
  34655. const internalDisabled = (0, vue.computed)(() => props.disabled || props.currentPage <= 1);
  34656. return (_ctx, _cache) => {
  34657. return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  34658. type: "button",
  34659. class: "btn-prev",
  34660. disabled: internalDisabled.value,
  34661. "aria-label": _ctx.prevText || (0, vue.unref)(t)("el.pagination.prev"),
  34662. "aria-disabled": internalDisabled.value,
  34663. onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("click", $event))
  34664. }, [_ctx.prevText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$18, (0, vue.toDisplayString)(_ctx.prevText), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
  34665. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.prevIcon)))]),
  34666. _: 1
  34667. }))], 8, _hoisted_1$29);
  34668. };
  34669. }
  34670. });
  34671. //#endregion
  34672. //#region ../../packages/components/pagination/src/components/prev.vue
  34673. var prev_default = prev_vue_vue_type_script_setup_true_lang_default;
  34674. //#endregion
  34675. //#region ../../packages/components/pagination/src/components/next.ts
  34676. const paginationNextProps = buildProps({
  34677. disabled: Boolean,
  34678. currentPage: {
  34679. type: Number,
  34680. default: 1
  34681. },
  34682. pageCount: {
  34683. type: Number,
  34684. default: 50
  34685. },
  34686. nextText: { type: String },
  34687. nextIcon: { type: iconPropType }
  34688. });
  34689. //#endregion
  34690. //#region ../../packages/components/pagination/src/components/next.vue?vue&type=script&setup=true&lang.ts
  34691. const _hoisted_1$28 = [
  34692. "disabled",
  34693. "aria-label",
  34694. "aria-disabled"
  34695. ];
  34696. const _hoisted_2$17 = { key: 0 };
  34697. var next_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  34698. name: "ElPaginationNext",
  34699. __name: "next",
  34700. props: paginationNextProps,
  34701. emits: ["click"],
  34702. setup(__props) {
  34703. const props = __props;
  34704. const { t } = useLocale();
  34705. const internalDisabled = (0, vue.computed)(() => props.disabled || props.currentPage === props.pageCount || props.pageCount === 0);
  34706. return (_ctx, _cache) => {
  34707. return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  34708. type: "button",
  34709. class: "btn-next",
  34710. disabled: internalDisabled.value,
  34711. "aria-label": _ctx.nextText || (0, vue.unref)(t)("el.pagination.next"),
  34712. "aria-disabled": internalDisabled.value,
  34713. onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("click", $event))
  34714. }, [_ctx.nextText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$17, (0, vue.toDisplayString)(_ctx.nextText), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
  34715. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.nextIcon)))]),
  34716. _: 1
  34717. }))], 8, _hoisted_1$28);
  34718. };
  34719. }
  34720. });
  34721. //#endregion
  34722. //#region ../../packages/components/pagination/src/components/next.vue
  34723. var next_default = next_vue_vue_type_script_setup_true_lang_default;
  34724. //#endregion
  34725. //#region ../../packages/components/pagination/src/usePagination.ts
  34726. const usePagination = () => (0, vue.inject)(elPaginationKey, {});
  34727. //#endregion
  34728. //#region ../../packages/components/pagination/src/components/sizes.ts
  34729. const paginationSizesProps = buildProps({
  34730. pageSize: {
  34731. type: Number,
  34732. required: true
  34733. },
  34734. pageSizes: {
  34735. type: definePropType(Array),
  34736. default: () => mutable([
  34737. 10,
  34738. 20,
  34739. 30,
  34740. 40,
  34741. 50,
  34742. 100
  34743. ])
  34744. },
  34745. popperClass: { type: String },
  34746. popperStyle: { type: definePropType([String, Object]) },
  34747. disabled: Boolean,
  34748. teleported: Boolean,
  34749. size: {
  34750. type: String,
  34751. values: componentSizes
  34752. },
  34753. appendSizeTo: String
  34754. });
  34755. //#endregion
  34756. //#region ../../packages/components/pagination/src/components/sizes.vue?vue&type=script&setup=true&lang.ts
  34757. var sizes_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  34758. name: "ElPaginationSizes",
  34759. __name: "sizes",
  34760. props: paginationSizesProps,
  34761. emits: ["page-size-change"],
  34762. setup(__props, { emit: __emit }) {
  34763. const props = __props;
  34764. const emit = __emit;
  34765. const { t } = useLocale();
  34766. const ns = useNamespace("pagination");
  34767. const pagination = usePagination();
  34768. const innerPageSize = (0, vue.ref)(props.pageSize);
  34769. (0, vue.watch)(() => props.pageSizes, (newVal, oldVal) => {
  34770. if (isEqual$1(newVal, oldVal)) return;
  34771. if (isArray$1(newVal)) emit("page-size-change", newVal.includes(props.pageSize) ? props.pageSize : props.pageSizes[0]);
  34772. });
  34773. (0, vue.watch)(() => props.pageSize, (newVal) => {
  34774. innerPageSize.value = newVal;
  34775. });
  34776. const innerPageSizes = (0, vue.computed)(() => props.pageSizes);
  34777. function handleChange(val) {
  34778. if (val !== innerPageSize.value) {
  34779. innerPageSize.value = val;
  34780. pagination.handleSizeChange?.(Number(val));
  34781. }
  34782. }
  34783. return (_ctx, _cache) => {
  34784. return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("sizes")) }, [(0, vue.createVNode)((0, vue.unref)(ElSelect), {
  34785. "model-value": innerPageSize.value,
  34786. disabled: _ctx.disabled,
  34787. "popper-class": _ctx.popperClass,
  34788. "popper-style": _ctx.popperStyle,
  34789. size: _ctx.size,
  34790. teleported: _ctx.teleported,
  34791. "validate-event": false,
  34792. "append-to": _ctx.appendSizeTo,
  34793. onChange: handleChange
  34794. }, {
  34795. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(innerPageSizes.value, (item) => {
  34796. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElOption), {
  34797. key: item,
  34798. value: item,
  34799. label: item + (0, vue.unref)(t)("el.pagination.pagesize")
  34800. }, null, 8, ["value", "label"]);
  34801. }), 128))]),
  34802. _: 1
  34803. }, 8, [
  34804. "model-value",
  34805. "disabled",
  34806. "popper-class",
  34807. "popper-style",
  34808. "size",
  34809. "teleported",
  34810. "append-to"
  34811. ])], 2);
  34812. };
  34813. }
  34814. });
  34815. //#endregion
  34816. //#region ../../packages/components/pagination/src/components/sizes.vue
  34817. var sizes_default = sizes_vue_vue_type_script_setup_true_lang_default;
  34818. //#endregion
  34819. //#region ../../packages/components/pagination/src/components/jumper.ts
  34820. const paginationJumperProps = buildProps({ size: {
  34821. type: String,
  34822. values: componentSizes
  34823. } });
  34824. //#endregion
  34825. //#region ../../packages/components/pagination/src/components/jumper.vue?vue&type=script&setup=true&lang.ts
  34826. const _hoisted_1$27 = ["disabled"];
  34827. var jumper_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  34828. name: "ElPaginationJumper",
  34829. __name: "jumper",
  34830. props: paginationJumperProps,
  34831. setup(__props) {
  34832. const { t } = useLocale();
  34833. const ns = useNamespace("pagination");
  34834. const { pageCount, disabled, currentPage, changeEvent } = usePagination();
  34835. const userInput = (0, vue.ref)();
  34836. const innerValue = (0, vue.computed)(() => userInput.value ?? currentPage?.value);
  34837. function handleInput(val) {
  34838. userInput.value = val ? +val : "";
  34839. }
  34840. function handleChange(val) {
  34841. val = Math.trunc(+val);
  34842. changeEvent?.(val);
  34843. userInput.value = void 0;
  34844. }
  34845. return (_ctx, _cache) => {
  34846. return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  34847. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("jump")),
  34848. disabled: (0, vue.unref)(disabled)
  34849. }, [
  34850. (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("goto")]) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.pagination.goto")), 3),
  34851. (0, vue.createVNode)((0, vue.unref)(ElInput), {
  34852. size: _ctx.size,
  34853. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("editor"), (0, vue.unref)(ns).is("in-pagination")]),
  34854. min: 1,
  34855. max: (0, vue.unref)(pageCount),
  34856. disabled: (0, vue.unref)(disabled),
  34857. "model-value": innerValue.value,
  34858. "validate-event": false,
  34859. "aria-label": (0, vue.unref)(t)("el.pagination.page"),
  34860. type: "number",
  34861. "onUpdate:modelValue": handleInput,
  34862. onChange: handleChange
  34863. }, null, 8, [
  34864. "size",
  34865. "class",
  34866. "max",
  34867. "disabled",
  34868. "model-value",
  34869. "aria-label"
  34870. ]),
  34871. (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("classifier")]) }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.pagination.pageClassifier")), 3)
  34872. ], 10, _hoisted_1$27);
  34873. };
  34874. }
  34875. });
  34876. //#endregion
  34877. //#region ../../packages/components/pagination/src/components/jumper.vue
  34878. var jumper_default = jumper_vue_vue_type_script_setup_true_lang_default;
  34879. //#endregion
  34880. //#region ../../packages/components/pagination/src/components/total.ts
  34881. const paginationTotalProps = buildProps({ total: {
  34882. type: Number,
  34883. default: 1e3
  34884. } });
  34885. //#endregion
  34886. //#region ../../packages/components/pagination/src/components/total.vue?vue&type=script&setup=true&lang.ts
  34887. const _hoisted_1$26 = ["disabled"];
  34888. var total_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  34889. name: "ElPaginationTotal",
  34890. __name: "total",
  34891. props: paginationTotalProps,
  34892. setup(__props) {
  34893. const { t } = useLocale();
  34894. const ns = useNamespace("pagination");
  34895. const { disabled } = usePagination();
  34896. return (_ctx, _cache) => {
  34897. return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  34898. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("total")),
  34899. disabled: (0, vue.unref)(disabled)
  34900. }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.pagination.total", { total: _ctx.total })), 11, _hoisted_1$26);
  34901. };
  34902. }
  34903. });
  34904. //#endregion
  34905. //#region ../../packages/components/pagination/src/components/total.vue
  34906. var total_default = total_vue_vue_type_script_setup_true_lang_default;
  34907. //#endregion
  34908. //#region ../../packages/components/pagination/src/components/pager.ts
  34909. const paginationPagerProps = buildProps({
  34910. currentPage: {
  34911. type: Number,
  34912. default: 1
  34913. },
  34914. pageCount: {
  34915. type: Number,
  34916. required: true
  34917. },
  34918. pagerCount: {
  34919. type: Number,
  34920. default: 7
  34921. },
  34922. disabled: Boolean
  34923. });
  34924. //#endregion
  34925. //#region ../../packages/components/pagination/src/components/pager.vue?vue&type=script&setup=true&lang.ts
  34926. const _hoisted_1$25 = [
  34927. "aria-current",
  34928. "aria-label",
  34929. "tabindex"
  34930. ];
  34931. const _hoisted_2$16 = ["tabindex", "aria-label"];
  34932. const _hoisted_3$7 = [
  34933. "aria-current",
  34934. "aria-label",
  34935. "tabindex"
  34936. ];
  34937. const _hoisted_4$5 = ["tabindex", "aria-label"];
  34938. const _hoisted_5$3 = [
  34939. "aria-current",
  34940. "aria-label",
  34941. "tabindex"
  34942. ];
  34943. var pager_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  34944. name: "ElPaginationPager",
  34945. __name: "pager",
  34946. props: paginationPagerProps,
  34947. emits: [CHANGE_EVENT],
  34948. setup(__props, { emit: __emit }) {
  34949. const props = __props;
  34950. const emit = __emit;
  34951. const nsPager = useNamespace("pager");
  34952. const nsIcon = useNamespace("icon");
  34953. const { t } = useLocale();
  34954. const showPrevMore = (0, vue.ref)(false);
  34955. const showNextMore = (0, vue.ref)(false);
  34956. const quickPrevHover = (0, vue.ref)(false);
  34957. const quickNextHover = (0, vue.ref)(false);
  34958. const quickPrevFocus = (0, vue.ref)(false);
  34959. const quickNextFocus = (0, vue.ref)(false);
  34960. const pagers = (0, vue.computed)(() => {
  34961. const pagerCount = props.pagerCount;
  34962. const halfPagerCount = (pagerCount - 1) / 2;
  34963. const currentPage = Number(props.currentPage);
  34964. const pageCount = Number(props.pageCount);
  34965. let showPrevMore = false;
  34966. let showNextMore = false;
  34967. if (pageCount > pagerCount) {
  34968. if (currentPage > pagerCount - halfPagerCount) showPrevMore = true;
  34969. if (currentPage < pageCount - halfPagerCount) showNextMore = true;
  34970. }
  34971. const array = [];
  34972. if (showPrevMore && !showNextMore) {
  34973. const startPage = pageCount - (pagerCount - 2);
  34974. for (let i = startPage; i < pageCount; i++) array.push(i);
  34975. } else if (!showPrevMore && showNextMore) for (let i = 2; i < pagerCount; i++) array.push(i);
  34976. else if (showPrevMore && showNextMore) {
  34977. const offset = Math.floor(pagerCount / 2) - 1;
  34978. for (let i = currentPage - offset; i <= currentPage + offset; i++) array.push(i);
  34979. } else for (let i = 2; i < pageCount; i++) array.push(i);
  34980. return array;
  34981. });
  34982. const prevMoreKls = (0, vue.computed)(() => [
  34983. "more",
  34984. "btn-quickprev",
  34985. nsIcon.b(),
  34986. nsPager.is("disabled", props.disabled)
  34987. ]);
  34988. const nextMoreKls = (0, vue.computed)(() => [
  34989. "more",
  34990. "btn-quicknext",
  34991. nsIcon.b(),
  34992. nsPager.is("disabled", props.disabled)
  34993. ]);
  34994. const tabindex = (0, vue.computed)(() => props.disabled ? -1 : 0);
  34995. (0, vue.watch)(() => [
  34996. props.pageCount,
  34997. props.pagerCount,
  34998. props.currentPage
  34999. ], ([pageCount, pagerCount, currentPage]) => {
  35000. const halfPagerCount = (pagerCount - 1) / 2;
  35001. let showPrev = false;
  35002. let showNext = false;
  35003. if (pageCount > pagerCount) {
  35004. showPrev = currentPage > pagerCount - halfPagerCount;
  35005. showNext = currentPage < pageCount - halfPagerCount;
  35006. }
  35007. quickPrevHover.value &&= showPrev;
  35008. quickNextHover.value &&= showNext;
  35009. showPrevMore.value = showPrev;
  35010. showNextMore.value = showNext;
  35011. }, { immediate: true });
  35012. function onMouseEnter(forward = false) {
  35013. if (props.disabled) return;
  35014. if (forward) quickPrevHover.value = true;
  35015. else quickNextHover.value = true;
  35016. }
  35017. function onFocus(forward = false) {
  35018. if (forward) quickPrevFocus.value = true;
  35019. else quickNextFocus.value = true;
  35020. }
  35021. function onEnter(e) {
  35022. const target = e.target;
  35023. if (target.tagName.toLowerCase() === "li" && Array.from(target.classList).includes("number")) {
  35024. const newPage = Number(target.textContent);
  35025. if (newPage !== props.currentPage) emit(CHANGE_EVENT, newPage);
  35026. } else if (target.tagName.toLowerCase() === "li" && Array.from(target.classList).includes("more")) onPagerClick(e);
  35027. }
  35028. function onPagerClick(event) {
  35029. const target = event.target;
  35030. if (target.tagName.toLowerCase() === "ul" || props.disabled) return;
  35031. let newPage = Number(target.textContent);
  35032. const pageCount = props.pageCount;
  35033. const currentPage = props.currentPage;
  35034. const pagerCountOffset = props.pagerCount - 2;
  35035. if (target.className.includes("more")) {
  35036. if (target.className.includes("quickprev")) newPage = currentPage - pagerCountOffset;
  35037. else if (target.className.includes("quicknext")) newPage = currentPage + pagerCountOffset;
  35038. }
  35039. if (!Number.isNaN(+newPage)) {
  35040. if (newPage < 1) newPage = 1;
  35041. if (newPage > pageCount) newPage = pageCount;
  35042. }
  35043. if (newPage !== currentPage) emit(CHANGE_EVENT, newPage);
  35044. }
  35045. return (_ctx, _cache) => {
  35046. return (0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
  35047. class: (0, vue.normalizeClass)((0, vue.unref)(nsPager).b()),
  35048. onClick: onPagerClick,
  35049. onKeyup: (0, vue.withKeys)(onEnter, ["enter"])
  35050. }, [
  35051. _ctx.pageCount > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  35052. key: 0,
  35053. class: (0, vue.normalizeClass)([[(0, vue.unref)(nsPager).is("active", _ctx.currentPage === 1), (0, vue.unref)(nsPager).is("disabled", _ctx.disabled)], "number"]),
  35054. "aria-current": _ctx.currentPage === 1,
  35055. "aria-label": (0, vue.unref)(t)("el.pagination.currentPage", { pager: 1 }),
  35056. tabindex: tabindex.value
  35057. }, " 1 ", 10, _hoisted_1$25)) : (0, vue.createCommentVNode)("v-if", true),
  35058. showPrevMore.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  35059. key: 1,
  35060. class: (0, vue.normalizeClass)(prevMoreKls.value),
  35061. tabindex: tabindex.value,
  35062. "aria-label": (0, vue.unref)(t)("el.pagination.prevPages", { pager: _ctx.pagerCount - 2 }),
  35063. onMouseenter: _cache[0] || (_cache[0] = ($event) => onMouseEnter(true)),
  35064. onMouseleave: _cache[1] || (_cache[1] = ($event) => quickPrevHover.value = false),
  35065. onFocus: _cache[2] || (_cache[2] = ($event) => onFocus(true)),
  35066. onBlur: _cache[3] || (_cache[3] = ($event) => quickPrevFocus.value = false)
  35067. }, [(quickPrevHover.value || quickPrevFocus.value) && !_ctx.disabled ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(d_arrow_left_default), { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(more_filled_default), { key: 1 }))], 42, _hoisted_2$16)) : (0, vue.createCommentVNode)("v-if", true),
  35068. ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(pagers.value, (pager) => {
  35069. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  35070. key: pager,
  35071. class: (0, vue.normalizeClass)([[(0, vue.unref)(nsPager).is("active", _ctx.currentPage === pager), (0, vue.unref)(nsPager).is("disabled", _ctx.disabled)], "number"]),
  35072. "aria-current": _ctx.currentPage === pager,
  35073. "aria-label": (0, vue.unref)(t)("el.pagination.currentPage", { pager }),
  35074. tabindex: tabindex.value
  35075. }, (0, vue.toDisplayString)(pager), 11, _hoisted_3$7);
  35076. }), 128)),
  35077. showNextMore.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  35078. key: 2,
  35079. class: (0, vue.normalizeClass)(nextMoreKls.value),
  35080. tabindex: tabindex.value,
  35081. "aria-label": (0, vue.unref)(t)("el.pagination.nextPages", { pager: _ctx.pagerCount - 2 }),
  35082. onMouseenter: _cache[4] || (_cache[4] = ($event) => onMouseEnter()),
  35083. onMouseleave: _cache[5] || (_cache[5] = ($event) => quickNextHover.value = false),
  35084. onFocus: _cache[6] || (_cache[6] = ($event) => onFocus()),
  35085. onBlur: _cache[7] || (_cache[7] = ($event) => quickNextFocus.value = false)
  35086. }, [(quickNextHover.value || quickNextFocus.value) && !_ctx.disabled ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(d_arrow_right_default), { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(more_filled_default), { key: 1 }))], 42, _hoisted_4$5)) : (0, vue.createCommentVNode)("v-if", true),
  35087. _ctx.pageCount > 1 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  35088. key: 3,
  35089. class: (0, vue.normalizeClass)([[(0, vue.unref)(nsPager).is("active", _ctx.currentPage === _ctx.pageCount), (0, vue.unref)(nsPager).is("disabled", _ctx.disabled)], "number"]),
  35090. "aria-current": _ctx.currentPage === _ctx.pageCount,
  35091. "aria-label": (0, vue.unref)(t)("el.pagination.currentPage", { pager: _ctx.pageCount }),
  35092. tabindex: tabindex.value
  35093. }, (0, vue.toDisplayString)(_ctx.pageCount), 11, _hoisted_5$3)) : (0, vue.createCommentVNode)("v-if", true)
  35094. ], 34);
  35095. };
  35096. }
  35097. });
  35098. //#endregion
  35099. //#region ../../packages/components/pagination/src/components/pager.vue
  35100. var pager_default = pager_vue_vue_type_script_setup_true_lang_default;
  35101. //#endregion
  35102. //#region ../../packages/components/pagination/src/pagination.ts
  35103. const isAbsent = (v) => typeof v !== "number";
  35104. const paginationProps = buildProps({
  35105. pageSize: Number,
  35106. defaultPageSize: Number,
  35107. total: Number,
  35108. pageCount: Number,
  35109. pagerCount: {
  35110. type: Number,
  35111. validator: (value) => {
  35112. return isNumber(value) && Math.trunc(value) === value && value > 4 && value < 22 && value % 2 === 1;
  35113. },
  35114. default: 7
  35115. },
  35116. currentPage: Number,
  35117. defaultCurrentPage: Number,
  35118. layout: {
  35119. type: String,
  35120. default: [
  35121. "prev",
  35122. "pager",
  35123. "next",
  35124. "jumper",
  35125. "->",
  35126. "total"
  35127. ].join(", ")
  35128. },
  35129. pageSizes: {
  35130. type: definePropType(Array),
  35131. default: () => mutable([
  35132. 10,
  35133. 20,
  35134. 30,
  35135. 40,
  35136. 50,
  35137. 100
  35138. ])
  35139. },
  35140. popperClass: {
  35141. type: String,
  35142. default: ""
  35143. },
  35144. popperStyle: { type: definePropType([String, Object]) },
  35145. prevText: {
  35146. type: String,
  35147. default: ""
  35148. },
  35149. prevIcon: {
  35150. type: iconPropType,
  35151. default: () => arrow_left_default
  35152. },
  35153. nextText: {
  35154. type: String,
  35155. default: ""
  35156. },
  35157. nextIcon: {
  35158. type: iconPropType,
  35159. default: () => arrow_right_default
  35160. },
  35161. teleported: {
  35162. type: Boolean,
  35163. default: true
  35164. },
  35165. small: Boolean,
  35166. size: useSizeProp,
  35167. background: Boolean,
  35168. disabled: Boolean,
  35169. hideOnSinglePage: Boolean,
  35170. appendSizeTo: String
  35171. });
  35172. const paginationEmits = {
  35173. "update:current-page": (val) => isNumber(val),
  35174. "update:page-size": (val) => isNumber(val),
  35175. "size-change": (val) => isNumber(val),
  35176. change: (currentPage, pageSize) => isNumber(currentPage) && isNumber(pageSize),
  35177. "current-change": (val) => isNumber(val),
  35178. "prev-click": (val) => isNumber(val),
  35179. "next-click": (val) => isNumber(val)
  35180. };
  35181. const componentName = "ElPagination";
  35182. var pagination_default = (0, vue.defineComponent)({
  35183. name: componentName,
  35184. props: paginationProps,
  35185. emits: paginationEmits,
  35186. setup(props, { emit, slots }) {
  35187. const { t } = useLocale();
  35188. const ns = useNamespace("pagination");
  35189. const vnodeProps = (0, vue.getCurrentInstance)().vnode.props || {};
  35190. const _globalSize = useGlobalSize();
  35191. const _size = (0, vue.computed)(() => props.small ? "small" : props.size ?? _globalSize.value);
  35192. useDeprecated({
  35193. from: "small",
  35194. replacement: "size",
  35195. version: "3.0.0",
  35196. scope: "el-pagination",
  35197. ref: "https://element-plus.org/zh-CN/component/pagination.html"
  35198. }, (0, vue.computed)(() => !!props.small));
  35199. const hasCurrentPageListener = "onUpdate:currentPage" in vnodeProps || "onUpdate:current-page" in vnodeProps || "onCurrentChange" in vnodeProps;
  35200. const hasPageSizeListener = "onUpdate:pageSize" in vnodeProps || "onUpdate:page-size" in vnodeProps || "onSizeChange" in vnodeProps;
  35201. const assertValidUsage = (0, vue.computed)(() => {
  35202. if (isAbsent(props.total) && isAbsent(props.pageCount)) return false;
  35203. if (!isAbsent(props.currentPage) && !hasCurrentPageListener) return false;
  35204. if (props.layout.includes("sizes")) {
  35205. if (!isAbsent(props.pageCount)) {
  35206. if (!hasPageSizeListener) return false;
  35207. } else if (!isAbsent(props.total)) {
  35208. if (!isAbsent(props.pageSize)) {
  35209. if (!hasPageSizeListener) return false;
  35210. }
  35211. }
  35212. }
  35213. return true;
  35214. });
  35215. const innerPageSize = (0, vue.ref)(isAbsent(props.defaultPageSize) ? 10 : props.defaultPageSize);
  35216. const innerCurrentPage = (0, vue.ref)(isAbsent(props.defaultCurrentPage) ? 1 : props.defaultCurrentPage);
  35217. const pageSizeBridge = (0, vue.computed)({
  35218. get() {
  35219. return isAbsent(props.pageSize) ? innerPageSize.value : props.pageSize;
  35220. },
  35221. set(v) {
  35222. if (isAbsent(props.pageSize)) innerPageSize.value = v;
  35223. if (hasPageSizeListener) {
  35224. emit("update:page-size", v);
  35225. emit("size-change", v);
  35226. }
  35227. }
  35228. });
  35229. const pageCountBridge = (0, vue.computed)(() => {
  35230. let pageCount = 0;
  35231. if (!isAbsent(props.pageCount)) pageCount = props.pageCount;
  35232. else if (!isAbsent(props.total)) pageCount = Math.max(1, Math.ceil(props.total / pageSizeBridge.value));
  35233. return pageCount;
  35234. });
  35235. const currentPageBridge = (0, vue.computed)({
  35236. get() {
  35237. return isAbsent(props.currentPage) ? innerCurrentPage.value : props.currentPage;
  35238. },
  35239. set(v) {
  35240. let newCurrentPage = v;
  35241. if (v < 1) newCurrentPage = 1;
  35242. else if (v > pageCountBridge.value) newCurrentPage = pageCountBridge.value;
  35243. if (isAbsent(props.currentPage)) innerCurrentPage.value = newCurrentPage;
  35244. if (hasCurrentPageListener) {
  35245. emit("update:current-page", newCurrentPage);
  35246. emit("current-change", newCurrentPage);
  35247. }
  35248. }
  35249. });
  35250. (0, vue.watch)(pageCountBridge, (val) => {
  35251. if (currentPageBridge.value > val) currentPageBridge.value = val;
  35252. });
  35253. (0, vue.watch)([currentPageBridge, pageSizeBridge], (value) => {
  35254. emit(CHANGE_EVENT, ...value);
  35255. }, { flush: "post" });
  35256. function handleCurrentChange(val) {
  35257. currentPageBridge.value = val;
  35258. }
  35259. function handleSizeChange(val) {
  35260. pageSizeBridge.value = val;
  35261. const newPageCount = pageCountBridge.value;
  35262. if (currentPageBridge.value > newPageCount) currentPageBridge.value = newPageCount;
  35263. }
  35264. function prev() {
  35265. if (props.disabled) return;
  35266. currentPageBridge.value -= 1;
  35267. emit("prev-click", currentPageBridge.value);
  35268. }
  35269. function next() {
  35270. if (props.disabled) return;
  35271. currentPageBridge.value += 1;
  35272. emit("next-click", currentPageBridge.value);
  35273. }
  35274. function addClass(element, cls) {
  35275. if (element) {
  35276. if (!element.props) element.props = {};
  35277. element.props.class = [element.props.class, cls].join(" ");
  35278. }
  35279. }
  35280. (0, vue.provide)(elPaginationKey, {
  35281. pageCount: pageCountBridge,
  35282. disabled: (0, vue.computed)(() => props.disabled),
  35283. currentPage: currentPageBridge,
  35284. changeEvent: handleCurrentChange,
  35285. handleSizeChange
  35286. });
  35287. return () => {
  35288. if (!assertValidUsage.value) {
  35289. /* @__PURE__ */ debugWarn(componentName, t("el.pagination.deprecationWarning"));
  35290. return null;
  35291. }
  35292. if (!props.layout) return null;
  35293. if (props.hideOnSinglePage && pageCountBridge.value <= 1) return null;
  35294. const rootChildren = [];
  35295. const rightWrapperChildren = [];
  35296. const rightWrapperRoot = (0, vue.h)("div", { class: ns.e("rightwrapper") }, rightWrapperChildren);
  35297. const TEMPLATE_MAP = {
  35298. prev: (0, vue.h)(prev_default, {
  35299. disabled: props.disabled,
  35300. currentPage: currentPageBridge.value,
  35301. prevText: props.prevText,
  35302. prevIcon: props.prevIcon,
  35303. onClick: prev
  35304. }),
  35305. jumper: (0, vue.h)(jumper_default, { size: _size.value }),
  35306. pager: (0, vue.h)(pager_default, {
  35307. currentPage: currentPageBridge.value,
  35308. pageCount: pageCountBridge.value,
  35309. pagerCount: props.pagerCount,
  35310. onChange: handleCurrentChange,
  35311. disabled: props.disabled
  35312. }),
  35313. next: (0, vue.h)(next_default, {
  35314. disabled: props.disabled,
  35315. currentPage: currentPageBridge.value,
  35316. pageCount: pageCountBridge.value,
  35317. nextText: props.nextText,
  35318. nextIcon: props.nextIcon,
  35319. onClick: next
  35320. }),
  35321. sizes: (0, vue.h)(sizes_default, {
  35322. pageSize: pageSizeBridge.value,
  35323. pageSizes: props.pageSizes,
  35324. popperClass: props.popperClass,
  35325. popperStyle: props.popperStyle,
  35326. disabled: props.disabled,
  35327. teleported: props.teleported,
  35328. size: _size.value,
  35329. appendSizeTo: props.appendSizeTo
  35330. }),
  35331. slot: slots?.default?.() ?? null,
  35332. total: (0, vue.h)(total_default, { total: isAbsent(props.total) ? 0 : props.total })
  35333. };
  35334. const components = props.layout.split(",").map((item) => item.trim());
  35335. let haveRightWrapper = false;
  35336. components.forEach((c) => {
  35337. if (c === "->") {
  35338. haveRightWrapper = true;
  35339. return;
  35340. }
  35341. if (!haveRightWrapper) rootChildren.push(TEMPLATE_MAP[c]);
  35342. else rightWrapperChildren.push(TEMPLATE_MAP[c]);
  35343. });
  35344. addClass(rootChildren[0], ns.is("first"));
  35345. addClass(rootChildren[rootChildren.length - 1], ns.is("last"));
  35346. if (haveRightWrapper && rightWrapperChildren.length > 0) {
  35347. addClass(rightWrapperChildren[0], ns.is("first"));
  35348. addClass(rightWrapperChildren[rightWrapperChildren.length - 1], ns.is("last"));
  35349. rootChildren.push(rightWrapperRoot);
  35350. }
  35351. return (0, vue.h)("div", { class: [
  35352. ns.b(),
  35353. ns.is("background", props.background),
  35354. ns.m(_size.value)
  35355. ] }, rootChildren);
  35356. };
  35357. }
  35358. });
  35359. //#endregion
  35360. //#region ../../packages/components/pagination/index.ts
  35361. const ElPagination = withInstall(pagination_default);
  35362. //#endregion
  35363. //#region ../../packages/components/popconfirm/src/popconfirm.ts
  35364. const popconfirmProps = buildProps({
  35365. title: String,
  35366. confirmButtonText: String,
  35367. cancelButtonText: String,
  35368. confirmButtonType: {
  35369. type: String,
  35370. values: buttonTypes,
  35371. default: "primary"
  35372. },
  35373. cancelButtonType: {
  35374. type: String,
  35375. values: buttonTypes,
  35376. default: "text"
  35377. },
  35378. icon: {
  35379. type: iconPropType,
  35380. default: () => question_filled_default
  35381. },
  35382. iconColor: {
  35383. type: String,
  35384. default: "#f90"
  35385. },
  35386. hideIcon: Boolean,
  35387. hideAfter: {
  35388. type: Number,
  35389. default: 200
  35390. },
  35391. effect: {
  35392. ...useTooltipContentProps.effect,
  35393. default: "light"
  35394. },
  35395. teleported: useTooltipContentProps.teleported,
  35396. persistent: useTooltipContentProps.persistent,
  35397. width: {
  35398. type: [String, Number],
  35399. default: 150
  35400. },
  35401. virtualTriggering: useTooltipTriggerProps.virtualTriggering,
  35402. virtualRef: useTooltipTriggerProps.virtualRef
  35403. });
  35404. const popconfirmEmits = {
  35405. confirm: (e) => e instanceof MouseEvent,
  35406. cancel: (e) => e instanceof MouseEvent
  35407. };
  35408. //#endregion
  35409. //#region ../../packages/components/popconfirm/src/popconfirm.vue?vue&type=script&setup=true&lang.ts
  35410. var popconfirm_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  35411. name: "ElPopconfirm",
  35412. __name: "popconfirm",
  35413. props: popconfirmProps,
  35414. emits: popconfirmEmits,
  35415. setup(__props, { expose: __expose, emit: __emit }) {
  35416. const props = __props;
  35417. const emit = __emit;
  35418. const { t } = useLocale();
  35419. const ns = useNamespace("popconfirm");
  35420. const tooltipRef = (0, vue.ref)();
  35421. const rootRef = (0, vue.ref)();
  35422. const popperRef = (0, vue.computed)(() => {
  35423. return (0, vue.unref)(tooltipRef)?.popperRef;
  35424. });
  35425. const showPopper = () => {
  35426. rootRef.value?.focus?.();
  35427. };
  35428. const hidePopper = () => {
  35429. tooltipRef.value?.onClose?.();
  35430. };
  35431. const style = (0, vue.computed)(() => {
  35432. return { width: addUnit(props.width) };
  35433. });
  35434. const confirm = (e) => {
  35435. emit("confirm", e);
  35436. hidePopper();
  35437. };
  35438. const cancel = (e) => {
  35439. emit("cancel", e);
  35440. hidePopper();
  35441. };
  35442. const finalConfirmButtonText = (0, vue.computed)(() => props.confirmButtonText || t("el.popconfirm.confirmButtonText"));
  35443. const finalCancelButtonText = (0, vue.computed)(() => props.cancelButtonText || t("el.popconfirm.cancelButtonText"));
  35444. __expose({
  35445. popperRef,
  35446. hide: hidePopper
  35447. });
  35448. return (_ctx, _cache) => {
  35449. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), (0, vue.mergeProps)({
  35450. ref_key: "tooltipRef",
  35451. ref: tooltipRef,
  35452. trigger: "click",
  35453. effect: __props.effect
  35454. }, _ctx.$attrs, {
  35455. "virtual-triggering": __props.virtualTriggering,
  35456. "virtual-ref": __props.virtualRef,
  35457. "popper-class": `${(0, vue.unref)(ns).namespace.value}-popover`,
  35458. "popper-style": style.value,
  35459. teleported: __props.teleported,
  35460. "fallback-placements": [
  35461. "bottom",
  35462. "top",
  35463. "right",
  35464. "left"
  35465. ],
  35466. "hide-after": __props.hideAfter,
  35467. persistent: __props.persistent,
  35468. loop: "",
  35469. onShow: showPopper
  35470. }), {
  35471. content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  35472. ref_key: "rootRef",
  35473. ref: rootRef,
  35474. tabindex: "-1",
  35475. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b())
  35476. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("main")) }, [!__props.hideIcon && __props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  35477. key: 0,
  35478. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon")),
  35479. style: (0, vue.normalizeStyle)({ color: __props.iconColor })
  35480. }, {
  35481. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
  35482. _: 1
  35483. }, 8, ["class", "style"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(__props.title), 1)], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("action")) }, [(0, vue.renderSlot)(_ctx.$slots, "actions", {
  35484. confirm,
  35485. cancel
  35486. }, () => [(0, vue.createVNode)((0, vue.unref)(ElButton), {
  35487. size: "small",
  35488. type: __props.cancelButtonType === "text" ? "" : __props.cancelButtonType,
  35489. text: __props.cancelButtonType === "text",
  35490. onClick: cancel
  35491. }, {
  35492. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(finalCancelButtonText.value), 1)]),
  35493. _: 1
  35494. }, 8, ["type", "text"]), (0, vue.createVNode)((0, vue.unref)(ElButton), {
  35495. size: "small",
  35496. type: __props.confirmButtonType === "text" ? "" : __props.confirmButtonType,
  35497. text: __props.confirmButtonType === "text",
  35498. onClick: confirm
  35499. }, {
  35500. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(finalConfirmButtonText.value), 1)]),
  35501. _: 1
  35502. }, 8, ["type", "text"])])], 2)], 2)]),
  35503. default: (0, vue.withCtx)(() => [_ctx.$slots.reference ? (0, vue.renderSlot)(_ctx.$slots, "reference", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true)]),
  35504. _: 3
  35505. }, 16, [
  35506. "effect",
  35507. "virtual-triggering",
  35508. "virtual-ref",
  35509. "popper-class",
  35510. "popper-style",
  35511. "teleported",
  35512. "hide-after",
  35513. "persistent"
  35514. ]);
  35515. };
  35516. }
  35517. });
  35518. //#endregion
  35519. //#region ../../packages/components/popconfirm/src/popconfirm.vue
  35520. var popconfirm_default = popconfirm_vue_vue_type_script_setup_true_lang_default;
  35521. //#endregion
  35522. //#region ../../packages/components/popconfirm/index.ts
  35523. const ElPopconfirm = withInstall(popconfirm_default);
  35524. //#endregion
  35525. //#region ../../packages/components/popover/src/popover.ts
  35526. const popoverProps = buildProps({
  35527. trigger: useTooltipTriggerProps.trigger,
  35528. triggerKeys: useTooltipTriggerProps.triggerKeys,
  35529. placement: dropdownProps.placement,
  35530. disabled: useTooltipTriggerProps.disabled,
  35531. visible: useTooltipContentProps.visible,
  35532. transition: useTooltipContentProps.transition,
  35533. popperOptions: dropdownProps.popperOptions,
  35534. tabindex: dropdownProps.tabindex,
  35535. content: useTooltipContentProps.content,
  35536. popperStyle: useTooltipContentProps.popperStyle,
  35537. popperClass: useTooltipContentProps.popperClass,
  35538. enterable: {
  35539. ...useTooltipContentProps.enterable,
  35540. default: true
  35541. },
  35542. effect: {
  35543. ...useTooltipContentProps.effect,
  35544. default: "light"
  35545. },
  35546. teleported: useTooltipContentProps.teleported,
  35547. appendTo: useTooltipContentProps.appendTo,
  35548. title: String,
  35549. width: {
  35550. type: [String, Number],
  35551. default: 150
  35552. },
  35553. offset: {
  35554. type: Number,
  35555. default: void 0
  35556. },
  35557. showAfter: {
  35558. type: Number,
  35559. default: 0
  35560. },
  35561. hideAfter: {
  35562. type: Number,
  35563. default: 200
  35564. },
  35565. autoClose: {
  35566. type: Number,
  35567. default: 0
  35568. },
  35569. showArrow: {
  35570. type: Boolean,
  35571. default: true
  35572. },
  35573. persistent: {
  35574. type: Boolean,
  35575. default: true
  35576. },
  35577. "onUpdate:visible": { type: Function }
  35578. });
  35579. const popoverEmits = {
  35580. "update:visible": (value) => isBoolean(value),
  35581. "before-enter": () => true,
  35582. "before-leave": () => true,
  35583. "after-enter": () => true,
  35584. "after-leave": () => true
  35585. };
  35586. const popoverPropsDefaults = {
  35587. trigger: "hover",
  35588. triggerKeys: () => [
  35589. EVENT_CODE.enter,
  35590. EVENT_CODE.numpadEnter,
  35591. EVENT_CODE.space
  35592. ],
  35593. placement: "bottom",
  35594. visible: null,
  35595. popperOptions: () => ({}),
  35596. tabindex: 0,
  35597. content: "",
  35598. popperStyle: void 0,
  35599. enterable: true,
  35600. effect: "light",
  35601. teleported: true,
  35602. width: 150,
  35603. offset: void 0,
  35604. showAfter: 0,
  35605. hideAfter: 200,
  35606. autoClose: 0,
  35607. showArrow: true,
  35608. persistent: true
  35609. };
  35610. //#endregion
  35611. //#region ../../packages/components/popover/src/popover.vue?vue&type=script&setup=true&lang.ts
  35612. const updateEventKeyRaw = `onUpdate:visible`;
  35613. var popover_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  35614. name: "ElPopover",
  35615. __name: "popover",
  35616. props: popoverProps,
  35617. emits: popoverEmits,
  35618. setup(__props, { expose: __expose, emit: __emit }) {
  35619. const props = __props;
  35620. const emit = __emit;
  35621. const onUpdateVisible = (0, vue.computed)(() => {
  35622. return props[updateEventKeyRaw];
  35623. });
  35624. const ns = useNamespace("popover");
  35625. const tooltipRef = (0, vue.ref)();
  35626. const popperRef = (0, vue.computed)(() => {
  35627. return (0, vue.unref)(tooltipRef)?.popperRef;
  35628. });
  35629. const style = (0, vue.computed)(() => {
  35630. return [{ width: addUnit(props.width) }, props.popperStyle];
  35631. });
  35632. const kls = (0, vue.computed)(() => {
  35633. return [
  35634. ns.b(),
  35635. props.popperClass,
  35636. { [ns.m("plain")]: !!props.content }
  35637. ];
  35638. });
  35639. const gpuAcceleration = (0, vue.computed)(() => {
  35640. return props.transition === `${ns.namespace.value}-fade-in-linear`;
  35641. });
  35642. const hide = () => {
  35643. tooltipRef.value?.hide();
  35644. };
  35645. const beforeEnter = () => {
  35646. emit("before-enter");
  35647. };
  35648. const beforeLeave = () => {
  35649. emit("before-leave");
  35650. };
  35651. const afterEnter = () => {
  35652. emit("after-enter");
  35653. };
  35654. const afterLeave = () => {
  35655. emit("update:visible", false);
  35656. emit("after-leave");
  35657. };
  35658. __expose({
  35659. popperRef,
  35660. hide
  35661. });
  35662. return (_ctx, _cache) => {
  35663. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElTooltip), (0, vue.mergeProps)({
  35664. ref_key: "tooltipRef",
  35665. ref: tooltipRef
  35666. }, _ctx.$attrs, {
  35667. trigger: __props.trigger,
  35668. "trigger-keys": __props.triggerKeys,
  35669. placement: __props.placement,
  35670. disabled: __props.disabled,
  35671. visible: __props.visible,
  35672. transition: __props.transition,
  35673. "popper-options": __props.popperOptions,
  35674. tabindex: __props.tabindex,
  35675. content: __props.content,
  35676. offset: __props.offset,
  35677. "show-after": __props.showAfter,
  35678. "hide-after": __props.hideAfter,
  35679. "auto-close": __props.autoClose,
  35680. "show-arrow": __props.showArrow,
  35681. "aria-label": __props.title,
  35682. effect: __props.effect,
  35683. enterable: __props.enterable,
  35684. "popper-class": kls.value,
  35685. "popper-style": style.value,
  35686. teleported: __props.teleported,
  35687. "append-to": __props.appendTo,
  35688. persistent: __props.persistent,
  35689. "gpu-acceleration": gpuAcceleration.value,
  35690. "onUpdate:visible": onUpdateVisible.value,
  35691. onBeforeShow: beforeEnter,
  35692. onBeforeHide: beforeLeave,
  35693. onShow: afterEnter,
  35694. onHide: afterLeave
  35695. }), {
  35696. content: (0, vue.withCtx)(() => [__props.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  35697. key: 0,
  35698. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")),
  35699. role: "title"
  35700. }, (0, vue.toDisplayString)(__props.title), 3)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.renderSlot)(_ctx.$slots, "default", { hide }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.content), 1)])]),
  35701. default: (0, vue.withCtx)(() => [_ctx.$slots.reference ? (0, vue.renderSlot)(_ctx.$slots, "reference", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true)]),
  35702. _: 3
  35703. }, 16, [
  35704. "trigger",
  35705. "trigger-keys",
  35706. "placement",
  35707. "disabled",
  35708. "visible",
  35709. "transition",
  35710. "popper-options",
  35711. "tabindex",
  35712. "content",
  35713. "offset",
  35714. "show-after",
  35715. "hide-after",
  35716. "auto-close",
  35717. "show-arrow",
  35718. "aria-label",
  35719. "effect",
  35720. "enterable",
  35721. "popper-class",
  35722. "popper-style",
  35723. "teleported",
  35724. "append-to",
  35725. "persistent",
  35726. "gpu-acceleration",
  35727. "onUpdate:visible"
  35728. ]);
  35729. };
  35730. }
  35731. });
  35732. //#endregion
  35733. //#region ../../packages/components/popover/src/popover.vue
  35734. var popover_default = popover_vue_vue_type_script_setup_true_lang_default;
  35735. //#endregion
  35736. //#region ../../packages/components/popover/src/directive.ts
  35737. const attachEvents = (el, binding) => {
  35738. const popover = (binding.arg || binding.value)?.popperRef;
  35739. if (popover) popover.triggerRef = el;
  35740. };
  35741. var directive_default = {
  35742. mounted(el, binding) {
  35743. attachEvents(el, binding);
  35744. },
  35745. updated(el, binding) {
  35746. attachEvents(el, binding);
  35747. }
  35748. };
  35749. const VPopover = "popover";
  35750. //#endregion
  35751. //#region ../../packages/components/popover/index.ts
  35752. const ElPopoverDirective = withInstallDirective(directive_default, VPopover);
  35753. const ElPopover = withInstall(popover_default, { directive: ElPopoverDirective });
  35754. //#endregion
  35755. //#region ../../packages/components/progress/src/progress.ts
  35756. const progressProps = buildProps({
  35757. type: {
  35758. type: String,
  35759. default: "line",
  35760. values: [
  35761. "line",
  35762. "circle",
  35763. "dashboard"
  35764. ]
  35765. },
  35766. percentage: {
  35767. type: Number,
  35768. default: 0,
  35769. validator: (val) => val >= 0 && val <= 100
  35770. },
  35771. status: {
  35772. type: String,
  35773. default: "",
  35774. values: [
  35775. "",
  35776. "success",
  35777. "exception",
  35778. "warning"
  35779. ]
  35780. },
  35781. indeterminate: Boolean,
  35782. duration: {
  35783. type: Number,
  35784. default: 3
  35785. },
  35786. strokeWidth: {
  35787. type: Number,
  35788. default: 6
  35789. },
  35790. strokeLinecap: {
  35791. type: definePropType(String),
  35792. default: "round"
  35793. },
  35794. textInside: Boolean,
  35795. width: {
  35796. type: Number,
  35797. default: 126
  35798. },
  35799. showText: {
  35800. type: Boolean,
  35801. default: true
  35802. },
  35803. color: {
  35804. type: definePropType([
  35805. String,
  35806. Array,
  35807. Function
  35808. ]),
  35809. default: ""
  35810. },
  35811. striped: Boolean,
  35812. stripedFlow: Boolean,
  35813. format: {
  35814. type: definePropType(Function),
  35815. default: (percentage) => `${percentage}%`
  35816. }
  35817. });
  35818. //#endregion
  35819. //#region ../../packages/components/progress/src/progress.vue?vue&type=script&setup=true&lang.ts
  35820. const _hoisted_1$24 = ["aria-valuenow"];
  35821. const _hoisted_2$15 = { viewBox: "0 0 100 100" };
  35822. const _hoisted_3$6 = [
  35823. "d",
  35824. "stroke",
  35825. "stroke-linecap",
  35826. "stroke-width"
  35827. ];
  35828. const _hoisted_4$4 = [
  35829. "d",
  35830. "stroke",
  35831. "opacity",
  35832. "stroke-linecap",
  35833. "stroke-width"
  35834. ];
  35835. const _hoisted_5$2 = { key: 0 };
  35836. var progress_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  35837. name: "ElProgress",
  35838. __name: "progress",
  35839. props: progressProps,
  35840. setup(__props) {
  35841. const STATUS_COLOR_MAP = {
  35842. success: "#13ce66",
  35843. exception: "#ff4949",
  35844. warning: "#e6a23c",
  35845. default: "#20a0ff"
  35846. };
  35847. const props = __props;
  35848. const ns = useNamespace("progress");
  35849. const barStyle = (0, vue.computed)(() => {
  35850. const barStyle = {
  35851. width: `${props.percentage}%`,
  35852. animationDuration: `${props.duration}s`
  35853. };
  35854. const color = getCurrentColor(props.percentage);
  35855. if (color.includes("gradient")) barStyle.background = color;
  35856. else barStyle.backgroundColor = color;
  35857. return barStyle;
  35858. });
  35859. const relativeStrokeWidth = (0, vue.computed)(() => (props.strokeWidth / props.width * 100).toFixed(1));
  35860. const radius = (0, vue.computed)(() => {
  35861. if (["circle", "dashboard"].includes(props.type)) return Number.parseInt(`${50 - Number.parseFloat(relativeStrokeWidth.value) / 2}`, 10);
  35862. return 0;
  35863. });
  35864. const trackPath = (0, vue.computed)(() => {
  35865. const r = radius.value;
  35866. const isDashboard = props.type === "dashboard";
  35867. return `
  35868. M 50 50
  35869. m 0 ${isDashboard ? "" : "-"}${r}
  35870. a ${r} ${r} 0 1 1 0 ${isDashboard ? "-" : ""}${r * 2}
  35871. a ${r} ${r} 0 1 1 0 ${isDashboard ? "" : "-"}${r * 2}
  35872. `;
  35873. });
  35874. const perimeter = (0, vue.computed)(() => 2 * Math.PI * radius.value);
  35875. const rate = (0, vue.computed)(() => props.type === "dashboard" ? .75 : 1);
  35876. const strokeDashoffset = (0, vue.computed)(() => {
  35877. return `${-1 * perimeter.value * (1 - rate.value) / 2}px`;
  35878. });
  35879. const trailPathStyle = (0, vue.computed)(() => ({
  35880. strokeDasharray: `${perimeter.value * rate.value}px, ${perimeter.value}px`,
  35881. strokeDashoffset: strokeDashoffset.value
  35882. }));
  35883. const circlePathStyle = (0, vue.computed)(() => ({
  35884. strokeDasharray: `${perimeter.value * rate.value * (props.percentage / 100)}px, ${perimeter.value}px`,
  35885. strokeDashoffset: strokeDashoffset.value,
  35886. transition: "stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"
  35887. }));
  35888. const stroke = (0, vue.computed)(() => {
  35889. let ret;
  35890. if (props.color) ret = getCurrentColor(props.percentage);
  35891. else ret = STATUS_COLOR_MAP[props.status] || STATUS_COLOR_MAP.default;
  35892. return ret;
  35893. });
  35894. const statusIcon = (0, vue.computed)(() => {
  35895. if (props.status === "warning") return warning_filled_default;
  35896. if (props.type === "line") return props.status === "success" ? circle_check_default : circle_close_default;
  35897. else return props.status === "success" ? check_default : close_default;
  35898. });
  35899. const progressTextSize = (0, vue.computed)(() => {
  35900. return props.type === "line" ? 12 + props.strokeWidth * .4 : props.width * .111111 + 2;
  35901. });
  35902. const content = (0, vue.computed)(() => props.format(props.percentage));
  35903. function getColors(color) {
  35904. const span = 100 / color.length;
  35905. return color.map((seriesColor, index) => {
  35906. if (isString(seriesColor)) return {
  35907. color: seriesColor,
  35908. percentage: (index + 1) * span
  35909. };
  35910. return seriesColor;
  35911. }).sort((a, b) => a.percentage - b.percentage);
  35912. }
  35913. const getCurrentColor = (percentage) => {
  35914. const { color } = props;
  35915. if (isFunction$1(color)) return color(percentage);
  35916. else if (isString(color)) return color;
  35917. else {
  35918. const colors = getColors(color);
  35919. for (const color of colors) if (color.percentage > percentage) return color.color;
  35920. return colors[colors.length - 1]?.color;
  35921. }
  35922. };
  35923. return (_ctx, _cache) => {
  35924. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  35925. class: (0, vue.normalizeClass)([
  35926. (0, vue.unref)(ns).b(),
  35927. (0, vue.unref)(ns).m(__props.type),
  35928. (0, vue.unref)(ns).is(__props.status),
  35929. {
  35930. [(0, vue.unref)(ns).m("without-text")]: !__props.showText,
  35931. [(0, vue.unref)(ns).m("text-inside")]: __props.textInside
  35932. }
  35933. ]),
  35934. role: "progressbar",
  35935. "aria-valuenow": __props.percentage,
  35936. "aria-valuemin": "0",
  35937. "aria-valuemax": "100"
  35938. }, [__props.type === "line" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  35939. key: 0,
  35940. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("bar"))
  35941. }, [(0, vue.createElementVNode)("div", {
  35942. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("bar", "outer")),
  35943. style: (0, vue.normalizeStyle)({ height: `${__props.strokeWidth}px` })
  35944. }, [(0, vue.createElementVNode)("div", {
  35945. class: (0, vue.normalizeClass)([
  35946. (0, vue.unref)(ns).be("bar", "inner"),
  35947. { [(0, vue.unref)(ns).bem("bar", "inner", "indeterminate")]: __props.indeterminate },
  35948. { [(0, vue.unref)(ns).bem("bar", "inner", "striped")]: __props.striped },
  35949. { [(0, vue.unref)(ns).bem("bar", "inner", "striped-flow")]: __props.stripedFlow }
  35950. ]),
  35951. style: (0, vue.normalizeStyle)(barStyle.value)
  35952. }, [(__props.showText || _ctx.$slots.default) && __props.textInside ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  35953. key: 0,
  35954. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("bar", "innerText"))
  35955. }, [(0, vue.renderSlot)(_ctx.$slots, "default", { percentage: __props.percentage }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(content.value), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true)], 6)], 6)], 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  35956. key: 1,
  35957. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("circle")),
  35958. style: (0, vue.normalizeStyle)({
  35959. height: `${__props.width}px`,
  35960. width: `${__props.width}px`
  35961. })
  35962. }, [((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_2$15, [(0, vue.createElementVNode)("path", {
  35963. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("circle", "track")),
  35964. d: trackPath.value,
  35965. stroke: `var(${(0, vue.unref)(ns).cssVarName("fill-color-light")}, #e5e9f2)`,
  35966. "stroke-linecap": __props.strokeLinecap,
  35967. "stroke-width": relativeStrokeWidth.value,
  35968. fill: "none",
  35969. style: (0, vue.normalizeStyle)(trailPathStyle.value)
  35970. }, null, 14, _hoisted_3$6), (0, vue.createElementVNode)("path", {
  35971. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("circle", "path")),
  35972. d: trackPath.value,
  35973. stroke: stroke.value,
  35974. fill: "none",
  35975. opacity: __props.percentage ? 1 : 0,
  35976. "stroke-linecap": __props.strokeLinecap,
  35977. "stroke-width": relativeStrokeWidth.value,
  35978. style: (0, vue.normalizeStyle)(circlePathStyle.value)
  35979. }, null, 14, _hoisted_4$4)]))], 6)), (__props.showText || _ctx.$slots.default) && !__props.textInside ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  35980. key: 2,
  35981. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("text")),
  35982. style: (0, vue.normalizeStyle)({ fontSize: `${progressTextSize.value}px` })
  35983. }, [(0, vue.renderSlot)(_ctx.$slots, "default", { percentage: __props.percentage }, () => [!__props.status ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_5$2, (0, vue.toDisplayString)(content.value), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 1 }, {
  35984. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(statusIcon.value)))]),
  35985. _: 1
  35986. }))])], 6)) : (0, vue.createCommentVNode)("v-if", true)], 10, _hoisted_1$24);
  35987. };
  35988. }
  35989. });
  35990. //#endregion
  35991. //#region ../../packages/components/progress/src/progress.vue
  35992. var progress_default = progress_vue_vue_type_script_setup_true_lang_default;
  35993. //#endregion
  35994. //#region ../../packages/components/progress/index.ts
  35995. const ElProgress = withInstall(progress_default);
  35996. //#endregion
  35997. //#region ../../packages/components/rate/src/rate.ts
  35998. const rateProps = buildProps({
  35999. modelValue: {
  36000. type: Number,
  36001. default: 0
  36002. },
  36003. id: {
  36004. type: String,
  36005. default: void 0
  36006. },
  36007. lowThreshold: {
  36008. type: Number,
  36009. default: 2
  36010. },
  36011. highThreshold: {
  36012. type: Number,
  36013. default: 4
  36014. },
  36015. max: {
  36016. type: Number,
  36017. default: 5
  36018. },
  36019. colors: {
  36020. type: definePropType([Array, Object]),
  36021. default: () => mutable([
  36022. "",
  36023. "",
  36024. ""
  36025. ])
  36026. },
  36027. voidColor: {
  36028. type: String,
  36029. default: ""
  36030. },
  36031. disabledVoidColor: {
  36032. type: String,
  36033. default: ""
  36034. },
  36035. icons: {
  36036. type: definePropType([Array, Object]),
  36037. default: () => [
  36038. star_filled_default,
  36039. star_filled_default,
  36040. star_filled_default
  36041. ]
  36042. },
  36043. voidIcon: {
  36044. type: iconPropType,
  36045. default: () => star_default
  36046. },
  36047. disabledVoidIcon: {
  36048. type: iconPropType,
  36049. default: () => star_filled_default
  36050. },
  36051. disabled: {
  36052. type: Boolean,
  36053. default: void 0
  36054. },
  36055. allowHalf: Boolean,
  36056. showText: Boolean,
  36057. showScore: Boolean,
  36058. textColor: {
  36059. type: String,
  36060. default: ""
  36061. },
  36062. texts: {
  36063. type: definePropType(Array),
  36064. default: () => mutable([
  36065. "Extremely bad",
  36066. "Disappointed",
  36067. "Fair",
  36068. "Satisfied",
  36069. "Surprise"
  36070. ])
  36071. },
  36072. scoreTemplate: {
  36073. type: String,
  36074. default: "{value}"
  36075. },
  36076. size: useSizeProp,
  36077. clearable: Boolean,
  36078. ...useAriaProps(["ariaLabel"])
  36079. });
  36080. const rateEmits = {
  36081. [CHANGE_EVENT]: (value) => isNumber(value),
  36082. [UPDATE_MODEL_EVENT]: (value) => isNumber(value)
  36083. };
  36084. //#endregion
  36085. //#region ../../packages/components/rate/src/rate.vue?vue&type=script&setup=true&lang.ts
  36086. const _hoisted_1$23 = [
  36087. "id",
  36088. "aria-label",
  36089. "aria-labelledby",
  36090. "aria-valuenow",
  36091. "aria-valuetext",
  36092. "aria-valuemax",
  36093. "tabindex",
  36094. "aria-disabled"
  36095. ];
  36096. const _hoisted_2$14 = ["onMousemove", "onClick"];
  36097. var rate_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  36098. name: "ElRate",
  36099. __name: "rate",
  36100. props: rateProps,
  36101. emits: rateEmits,
  36102. setup(__props, { expose: __expose, emit: __emit }) {
  36103. function getValueFromMap(value, map) {
  36104. const isExcludedObject = (val) => isObject$1(val);
  36105. const matchedValue = map[Object.keys(map).map((key) => +key).filter((key) => {
  36106. const val = map[key];
  36107. return (isExcludedObject(val) ? val.excluded : false) ? value < key : value <= key;
  36108. }).sort((a, b) => a - b)[0]];
  36109. return isExcludedObject(matchedValue) && matchedValue.value || matchedValue;
  36110. }
  36111. const props = __props;
  36112. const emit = __emit;
  36113. const formItemContext = (0, vue.inject)(formItemContextKey, void 0);
  36114. const rateSize = useFormSize();
  36115. const ns = useNamespace("rate");
  36116. const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext });
  36117. const currentValue = (0, vue.ref)(clamp$1(props.modelValue, 0, props.max));
  36118. const hoverIndex = (0, vue.ref)(-1);
  36119. const pointerAtLeftHalf = (0, vue.ref)(true);
  36120. const iconRefs = (0, vue.ref)([]);
  36121. const iconClientWidths = (0, vue.computed)(() => iconRefs.value.map((icon) => icon.$el.clientWidth));
  36122. const rateClasses = (0, vue.computed)(() => [ns.b(), ns.m(rateSize.value)]);
  36123. const rateDisabled = useFormDisabled();
  36124. const rateStyles = (0, vue.computed)(() => {
  36125. return ns.cssVarBlock({
  36126. "void-color": props.voidColor,
  36127. "disabled-void-color": props.disabledVoidColor,
  36128. "fill-color": activeColor.value
  36129. });
  36130. });
  36131. const text = (0, vue.computed)(() => {
  36132. let result = "";
  36133. if (props.showScore) result = props.scoreTemplate.replace(/\{\s*value\s*\}/, rateDisabled.value ? `${props.modelValue}` : `${currentValue.value}`);
  36134. else if (props.showText) result = props.texts[Math.ceil(currentValue.value) - 1];
  36135. return result;
  36136. });
  36137. const valueDecimal = (0, vue.computed)(() => props.modelValue * 100 - Math.floor(props.modelValue) * 100);
  36138. const colorMap = (0, vue.computed)(() => isArray$1(props.colors) ? {
  36139. [props.lowThreshold]: props.colors[0],
  36140. [props.highThreshold]: {
  36141. value: props.colors[1],
  36142. excluded: true
  36143. },
  36144. [props.max]: props.colors[2]
  36145. } : props.colors);
  36146. const activeColor = (0, vue.computed)(() => {
  36147. const color = getValueFromMap(currentValue.value, colorMap.value);
  36148. return isObject$1(color) ? "" : color;
  36149. });
  36150. const decimalStyle = (0, vue.computed)(() => {
  36151. let width = "";
  36152. if (rateDisabled.value) width = `${valueDecimal.value}%`;
  36153. else if (props.allowHalf) width = "50%";
  36154. return {
  36155. color: activeColor.value,
  36156. width
  36157. };
  36158. });
  36159. const componentMap = (0, vue.computed)(() => {
  36160. let icons = isArray$1(props.icons) ? [...props.icons] : { ...props.icons };
  36161. icons = (0, vue.markRaw)(icons);
  36162. return isArray$1(icons) ? {
  36163. [props.lowThreshold]: icons[0],
  36164. [props.highThreshold]: {
  36165. value: icons[1],
  36166. excluded: true
  36167. },
  36168. [props.max]: icons[2]
  36169. } : icons;
  36170. });
  36171. const decimalIconComponent = (0, vue.computed)(() => getValueFromMap(props.modelValue, componentMap.value));
  36172. const voidComponent = (0, vue.computed)(() => rateDisabled.value ? isString(props.disabledVoidIcon) ? props.disabledVoidIcon : (0, vue.markRaw)(props.disabledVoidIcon) : isString(props.voidIcon) ? props.voidIcon : (0, vue.markRaw)(props.voidIcon));
  36173. const activeComponent = (0, vue.computed)(() => getValueFromMap(currentValue.value, componentMap.value));
  36174. function showDecimalIcon(item) {
  36175. const showWhenDisabled = rateDisabled.value && valueDecimal.value > 0 && item - 1 < props.modelValue && item > props.modelValue;
  36176. const showWhenAllowHalf = props.allowHalf && pointerAtLeftHalf.value && item - .5 <= currentValue.value && item > currentValue.value;
  36177. return showWhenDisabled || showWhenAllowHalf;
  36178. }
  36179. function emitValue(value) {
  36180. if (props.clearable && value === props.modelValue) value = 0;
  36181. emit(UPDATE_MODEL_EVENT, value);
  36182. if (props.modelValue !== value) emit(CHANGE_EVENT, value);
  36183. }
  36184. function selectValue(value) {
  36185. if (rateDisabled.value) return;
  36186. if (props.allowHalf && pointerAtLeftHalf.value) emitValue(currentValue.value);
  36187. else emitValue(value);
  36188. }
  36189. function handleKey(e) {
  36190. if (rateDisabled.value) return;
  36191. const code = getEventCode(e);
  36192. const step = props.allowHalf ? .5 : 1;
  36193. let _currentValue = currentValue.value;
  36194. switch (code) {
  36195. case EVENT_CODE.up:
  36196. case EVENT_CODE.right:
  36197. _currentValue += step;
  36198. break;
  36199. case EVENT_CODE.left:
  36200. case EVENT_CODE.down:
  36201. _currentValue -= step;
  36202. break;
  36203. }
  36204. _currentValue = clamp$1(_currentValue, 0, props.max);
  36205. if (_currentValue === currentValue.value) return;
  36206. e.stopPropagation();
  36207. e.preventDefault();
  36208. emit(UPDATE_MODEL_EVENT, _currentValue);
  36209. emit(CHANGE_EVENT, _currentValue);
  36210. return _currentValue;
  36211. }
  36212. function setCurrentValue(value, event) {
  36213. if (rateDisabled.value) return;
  36214. if (props.allowHalf && event) {
  36215. pointerAtLeftHalf.value = event.offsetX * 2 <= iconClientWidths.value[value - 1];
  36216. currentValue.value = pointerAtLeftHalf.value ? value - .5 : value;
  36217. } else currentValue.value = value;
  36218. hoverIndex.value = value;
  36219. }
  36220. function resetCurrentValue() {
  36221. if (rateDisabled.value) return;
  36222. if (props.allowHalf) pointerAtLeftHalf.value = props.modelValue !== Math.floor(props.modelValue);
  36223. currentValue.value = clamp$1(props.modelValue, 0, props.max);
  36224. hoverIndex.value = -1;
  36225. }
  36226. (0, vue.watch)(() => props.modelValue, (val) => {
  36227. currentValue.value = clamp$1(val, 0, props.max);
  36228. pointerAtLeftHalf.value = props.modelValue !== Math.floor(props.modelValue);
  36229. });
  36230. if (!props.modelValue) emit(UPDATE_MODEL_EVENT, 0);
  36231. __expose({
  36232. setCurrentValue,
  36233. resetCurrentValue
  36234. });
  36235. return (_ctx, _cache) => {
  36236. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  36237. id: (0, vue.unref)(inputId),
  36238. class: (0, vue.normalizeClass)([rateClasses.value, (0, vue.unref)(ns).is("disabled", (0, vue.unref)(rateDisabled))]),
  36239. role: "slider",
  36240. "aria-label": !(0, vue.unref)(isLabeledByFormItem) ? __props.ariaLabel || "rating" : void 0,
  36241. "aria-labelledby": (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(formItemContext)?.labelId : void 0,
  36242. "aria-valuenow": currentValue.value,
  36243. "aria-valuetext": text.value || void 0,
  36244. "aria-valuemin": "0",
  36245. "aria-valuemax": __props.max,
  36246. style: (0, vue.normalizeStyle)(rateStyles.value),
  36247. tabindex: (0, vue.unref)(rateDisabled) ? void 0 : 0,
  36248. "aria-disabled": (0, vue.unref)(rateDisabled),
  36249. onKeydown: handleKey
  36250. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.max, (item, key) => {
  36251. return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  36252. key,
  36253. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item")),
  36254. onMousemove: ($event) => setCurrentValue(item, $event),
  36255. onMouseleave: resetCurrentValue,
  36256. onClick: ($event) => selectValue(item)
  36257. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), {
  36258. ref_for: true,
  36259. ref_key: "iconRefs",
  36260. ref: iconRefs,
  36261. class: (0, vue.normalizeClass)([
  36262. (0, vue.unref)(ns).e("icon"),
  36263. { hover: hoverIndex.value === item },
  36264. (0, vue.unref)(ns).is("active", item <= currentValue.value),
  36265. (0, vue.unref)(ns).is("focus-visible", item === Math.ceil(currentValue.value || 1))
  36266. ])
  36267. }, {
  36268. default: (0, vue.withCtx)(() => [
  36269. (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(activeComponent.value), null, null, 512)), [[vue.vShow, !showDecimalIcon(item) && item <= currentValue.value]]),
  36270. (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(voidComponent.value), null, null, 512)), [[vue.vShow, !showDecimalIcon(item) && item > currentValue.value]]),
  36271. (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(voidComponent.value), { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).em("decimal", "box")]) }, null, 8, ["class"])), [[vue.vShow, showDecimalIcon(item)]]),
  36272. (0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElIcon), {
  36273. style: (0, vue.normalizeStyle)(decimalStyle.value),
  36274. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), (0, vue.unref)(ns).e("decimal")])
  36275. }, {
  36276. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(decimalIconComponent.value)))]),
  36277. _: 1
  36278. }, 8, ["style", "class"]), [[vue.vShow, showDecimalIcon(item)]])
  36279. ]),
  36280. _: 2
  36281. }, 1032, ["class"])], 42, _hoisted_2$14);
  36282. }), 128)), __props.showText || __props.showScore ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  36283. key: 0,
  36284. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("text")),
  36285. style: (0, vue.normalizeStyle)({ color: __props.textColor })
  36286. }, (0, vue.toDisplayString)(text.value), 7)) : (0, vue.createCommentVNode)("v-if", true)], 46, _hoisted_1$23);
  36287. };
  36288. }
  36289. });
  36290. //#endregion
  36291. //#region ../../packages/components/rate/src/rate.vue
  36292. var rate_default = rate_vue_vue_type_script_setup_true_lang_default;
  36293. //#endregion
  36294. //#region ../../packages/components/rate/index.ts
  36295. const ElRate = withInstall(rate_default);
  36296. //#endregion
  36297. //#region ../../packages/components/result/src/result.ts
  36298. const IconMap = {
  36299. primary: "icon-primary",
  36300. success: "icon-success",
  36301. warning: "icon-warning",
  36302. error: "icon-error",
  36303. info: "icon-info"
  36304. };
  36305. const IconComponentMap = {
  36306. [IconMap.primary]: info_filled_default,
  36307. [IconMap.success]: circle_check_filled_default,
  36308. [IconMap.warning]: warning_filled_default,
  36309. [IconMap.error]: circle_close_filled_default,
  36310. [IconMap.info]: info_filled_default
  36311. };
  36312. const resultProps = buildProps({
  36313. title: {
  36314. type: String,
  36315. default: ""
  36316. },
  36317. subTitle: {
  36318. type: String,
  36319. default: ""
  36320. },
  36321. icon: {
  36322. type: String,
  36323. values: [
  36324. "primary",
  36325. "success",
  36326. "warning",
  36327. "info",
  36328. "error"
  36329. ],
  36330. default: "info"
  36331. }
  36332. });
  36333. //#endregion
  36334. //#region ../../packages/components/result/src/result.vue?vue&type=script&setup=true&lang.ts
  36335. var result_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  36336. name: "ElResult",
  36337. __name: "result",
  36338. props: resultProps,
  36339. setup(__props) {
  36340. const props = __props;
  36341. const ns = useNamespace("result");
  36342. const resultIcon = (0, vue.computed)(() => {
  36343. const icon = props.icon;
  36344. const iconClass = icon && IconMap[icon] ? IconMap[icon] : "icon-info";
  36345. return {
  36346. class: iconClass,
  36347. component: IconComponentMap[iconClass] || IconComponentMap["icon-info"]
  36348. };
  36349. });
  36350. return (_ctx, _cache) => {
  36351. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [
  36352. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon")) }, [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [resultIcon.value.component ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(resultIcon.value.component), {
  36353. key: 0,
  36354. class: (0, vue.normalizeClass)(resultIcon.value.class)
  36355. }, null, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)])], 2),
  36356. __props.title || _ctx.$slots.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  36357. key: 0,
  36358. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title"))
  36359. }, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createElementVNode)("p", null, (0, vue.toDisplayString)(__props.title), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  36360. __props.subTitle || _ctx.$slots["sub-title"] ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  36361. key: 1,
  36362. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("subtitle"))
  36363. }, [(0, vue.renderSlot)(_ctx.$slots, "sub-title", {}, () => [(0, vue.createElementVNode)("p", null, (0, vue.toDisplayString)(__props.subTitle), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  36364. _ctx.$slots.extra ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  36365. key: 2,
  36366. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("extra"))
  36367. }, [(0, vue.renderSlot)(_ctx.$slots, "extra")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  36368. ], 2);
  36369. };
  36370. }
  36371. });
  36372. //#endregion
  36373. //#region ../../packages/components/result/src/result.vue
  36374. var result_default = result_vue_vue_type_script_setup_true_lang_default;
  36375. //#endregion
  36376. //#region ../../packages/components/result/index.ts
  36377. const ElResult = withInstall(result_default);
  36378. //#endregion
  36379. //#region ../../packages/components/select-v2/src/group-item.vue?vue&type=script&lang.ts
  36380. var group_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  36381. props: {
  36382. item: {
  36383. type: Object,
  36384. required: true
  36385. },
  36386. style: { type: Object },
  36387. height: Number
  36388. },
  36389. setup() {
  36390. return { ns: useNamespace("select") };
  36391. }
  36392. });
  36393. //#endregion
  36394. //#region ../../packages/components/select-v2/src/group-item.vue
  36395. function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
  36396. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  36397. class: (0, vue.normalizeClass)(_ctx.ns.be("group", "title")),
  36398. style: (0, vue.normalizeStyle)({
  36399. ..._ctx.style,
  36400. lineHeight: `${_ctx.height}px`
  36401. })
  36402. }, (0, vue.toDisplayString)(_ctx.item.label), 7);
  36403. }
  36404. var group_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(group_item_vue_vue_type_script_lang_default, [["render", _sfc_render$6]]);
  36405. //#endregion
  36406. //#region ../../packages/components/select-v2/src/useOption.ts
  36407. function useOption(props, { emit }) {
  36408. return {
  36409. hoverItem: () => {
  36410. if (!props.disabled) emit("hover", props.index);
  36411. },
  36412. selectOptionClick: () => {
  36413. if (!props.disabled) emit("select", props.item, props.index);
  36414. }
  36415. };
  36416. }
  36417. //#endregion
  36418. //#region ../../packages/components/select-v2/src/defaults.ts
  36419. const selectV2Props = buildProps({
  36420. allowCreate: Boolean,
  36421. autocomplete: {
  36422. type: definePropType(String),
  36423. default: "none"
  36424. },
  36425. automaticDropdown: Boolean,
  36426. clearable: Boolean,
  36427. clearIcon: {
  36428. type: iconPropType,
  36429. default: circle_close_default
  36430. },
  36431. effect: {
  36432. type: definePropType(String),
  36433. default: "light"
  36434. },
  36435. collapseTags: Boolean,
  36436. collapseTagsTooltip: Boolean,
  36437. tagTooltip: {
  36438. type: definePropType(Object),
  36439. default: () => ({})
  36440. },
  36441. maxCollapseTags: {
  36442. type: Number,
  36443. default: 1
  36444. },
  36445. defaultFirstOption: Boolean,
  36446. disabled: {
  36447. type: Boolean,
  36448. default: void 0
  36449. },
  36450. estimatedOptionHeight: {
  36451. type: Number,
  36452. default: void 0
  36453. },
  36454. filterable: Boolean,
  36455. filterMethod: { type: definePropType(Function) },
  36456. height: {
  36457. type: Number,
  36458. default: 274
  36459. },
  36460. itemHeight: {
  36461. type: Number,
  36462. default: 34
  36463. },
  36464. id: String,
  36465. loading: Boolean,
  36466. loadingText: String,
  36467. modelValue: {
  36468. type: definePropType([
  36469. Array,
  36470. String,
  36471. Number,
  36472. Boolean,
  36473. Object
  36474. ]),
  36475. default: void 0
  36476. },
  36477. multiple: Boolean,
  36478. multipleLimit: {
  36479. type: Number,
  36480. default: 0
  36481. },
  36482. name: String,
  36483. noDataText: String,
  36484. noMatchText: String,
  36485. remoteMethod: { type: definePropType(Function) },
  36486. reserveKeyword: {
  36487. type: Boolean,
  36488. default: true
  36489. },
  36490. options: {
  36491. type: definePropType(Array),
  36492. required: true
  36493. },
  36494. placeholder: { type: String },
  36495. teleported: useTooltipContentProps.teleported,
  36496. persistent: {
  36497. type: Boolean,
  36498. default: true
  36499. },
  36500. popperClass: useTooltipContentProps.popperClass,
  36501. popperStyle: useTooltipContentProps.popperStyle,
  36502. popperOptions: {
  36503. type: definePropType(Object),
  36504. default: () => ({})
  36505. },
  36506. remote: Boolean,
  36507. debounce: {
  36508. type: Number,
  36509. default: 300
  36510. },
  36511. size: useSizeProp,
  36512. props: {
  36513. type: definePropType(Object),
  36514. default: () => defaultProps$2
  36515. },
  36516. valueKey: {
  36517. type: String,
  36518. default: "value"
  36519. },
  36520. scrollbarAlwaysOn: Boolean,
  36521. validateEvent: {
  36522. type: Boolean,
  36523. default: true
  36524. },
  36525. offset: {
  36526. type: Number,
  36527. default: 12
  36528. },
  36529. remoteShowSuffix: Boolean,
  36530. showArrow: {
  36531. type: Boolean,
  36532. default: true
  36533. },
  36534. placement: {
  36535. type: definePropType(String),
  36536. values: Ee,
  36537. default: "bottom-start"
  36538. },
  36539. fallbackPlacements: {
  36540. type: definePropType(Array),
  36541. default: [
  36542. "bottom-start",
  36543. "top-start",
  36544. "right",
  36545. "left"
  36546. ]
  36547. },
  36548. tagType: {
  36549. ...tagProps.type,
  36550. default: "info"
  36551. },
  36552. tagEffect: {
  36553. ...tagProps.effect,
  36554. default: "light"
  36555. },
  36556. tabindex: {
  36557. type: [String, Number],
  36558. default: 0
  36559. },
  36560. appendTo: useTooltipContentProps.appendTo,
  36561. fitInputWidth: {
  36562. type: [Boolean, Number],
  36563. default: true,
  36564. validator(val) {
  36565. return isBoolean(val) || isNumber(val);
  36566. }
  36567. },
  36568. suffixIcon: {
  36569. type: iconPropType,
  36570. default: arrow_down_default
  36571. },
  36572. ...useEmptyValuesProps,
  36573. ...useAriaProps(["ariaLabel"])
  36574. });
  36575. const optionV2Props = buildProps({
  36576. data: Array,
  36577. disabled: Boolean,
  36578. hovering: Boolean,
  36579. item: {
  36580. type: definePropType(Object),
  36581. required: true
  36582. },
  36583. index: Number,
  36584. style: Object,
  36585. selected: Boolean,
  36586. created: Boolean
  36587. });
  36588. const selectV2Emits = {
  36589. [UPDATE_MODEL_EVENT]: (val) => true,
  36590. [CHANGE_EVENT]: (val) => true,
  36591. "end-reached": scrollbarEmits["end-reached"],
  36592. "remove-tag": (val) => true,
  36593. "visible-change": (visible) => true,
  36594. focus: (evt) => evt instanceof FocusEvent,
  36595. blur: (evt) => evt instanceof FocusEvent,
  36596. clear: () => true
  36597. };
  36598. const optionV2Emits = {
  36599. hover: (index) => isNumber(index),
  36600. select: (val, index) => true
  36601. };
  36602. //#endregion
  36603. //#region ../../packages/components/select-v2/src/token.ts
  36604. const selectV2InjectionKey = Symbol("ElSelectV2Injection");
  36605. //#endregion
  36606. //#region ../../packages/components/select-v2/src/option-item.vue?vue&type=script&lang.ts
  36607. var option_item_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  36608. props: optionV2Props,
  36609. emits: optionV2Emits,
  36610. setup(props, { emit }) {
  36611. const select = (0, vue.inject)(selectV2InjectionKey);
  36612. const ns = useNamespace("select");
  36613. const mouseMoveEventName = isIOS ? null : "mousemove";
  36614. const { hoverItem, selectOptionClick } = useOption(props, { emit });
  36615. const { getLabel } = useProps(select.props);
  36616. const contentId = select.contentId;
  36617. const handleMousedown = (event) => {
  36618. let target = event.target;
  36619. const currentTarget = event.currentTarget;
  36620. while (target && target !== currentTarget) {
  36621. if (isFocusable(target)) return;
  36622. target = target.parentElement;
  36623. }
  36624. event.preventDefault();
  36625. };
  36626. return {
  36627. ns,
  36628. contentId,
  36629. mouseMoveEventName,
  36630. hoverItem,
  36631. handleMousedown,
  36632. selectOptionClick,
  36633. getLabel
  36634. };
  36635. }
  36636. });
  36637. //#endregion
  36638. //#region ../../packages/components/select-v2/src/option-item.vue
  36639. const _hoisted_1$22 = [
  36640. "id",
  36641. "aria-selected",
  36642. "aria-disabled"
  36643. ];
  36644. function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
  36645. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", (0, vue.mergeProps)({
  36646. id: `${_ctx.contentId}-${_ctx.index}`,
  36647. role: "option",
  36648. "aria-selected": _ctx.selected,
  36649. "aria-disabled": _ctx.disabled || void 0,
  36650. style: _ctx.style,
  36651. class: [
  36652. _ctx.ns.be("dropdown", "item"),
  36653. _ctx.ns.is("selected", _ctx.selected),
  36654. _ctx.ns.is("disabled", _ctx.disabled),
  36655. _ctx.ns.is("created", _ctx.created),
  36656. _ctx.ns.is("hovering", _ctx.hovering)
  36657. ]
  36658. }, { [(0, vue.toHandlerKey)(_ctx.mouseMoveEventName)]: _cache[0] || (_cache[0] = (...args) => _ctx.hoverItem && _ctx.hoverItem(...args)) }, {
  36659. onMousedown: _cache[1] || (_cache[1] = (...args) => _ctx.handleMousedown && _ctx.handleMousedown(...args)),
  36660. onClick: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.selectOptionClick && _ctx.selectOptionClick(...args), ["stop"]))
  36661. }), [(0, vue.renderSlot)(_ctx.$slots, "default", {
  36662. item: _ctx.item,
  36663. index: _ctx.index,
  36664. disabled: _ctx.disabled
  36665. }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.getLabel(_ctx.item)), 1)])], 16, _hoisted_1$22);
  36666. }
  36667. var option_item_default = /* @__PURE__ */ _plugin_vue_export_helper_default(option_item_vue_vue_type_script_lang_default, [["render", _sfc_render$5]]);
  36668. //#endregion
  36669. //#region ../../packages/components/select-v2/src/select-dropdown.tsx
  36670. const props = {
  36671. loading: Boolean,
  36672. data: {
  36673. type: Array,
  36674. required: true
  36675. },
  36676. hoveringIndex: Number,
  36677. width: Number,
  36678. id: String,
  36679. ariaLabel: String
  36680. };
  36681. var select_dropdown_default = /* @__PURE__ */ (0, vue.defineComponent)({
  36682. name: "ElSelectDropdown",
  36683. props,
  36684. emits: { "end-reached": scrollbarEmits["end-reached"] },
  36685. setup(props, { slots, expose, emit }) {
  36686. const select = (0, vue.inject)(selectV2InjectionKey);
  36687. const ns = useNamespace("select");
  36688. const { getLabel, getValue, getDisabled } = useProps(select.props);
  36689. const cachedHeights = (0, vue.ref)([]);
  36690. const listRef = (0, vue.ref)();
  36691. const size = (0, vue.computed)(() => props.data.length);
  36692. (0, vue.watch)(() => size.value, () => {
  36693. select.tooltipRef.value?.updatePopper?.();
  36694. });
  36695. const isSized = (0, vue.computed)(() => isUndefined(select.props.estimatedOptionHeight));
  36696. const listProps = (0, vue.computed)(() => {
  36697. if (isSized.value) return { itemSize: select.props.itemHeight };
  36698. return {
  36699. estimatedSize: select.props.estimatedOptionHeight,
  36700. itemSize: (idx) => cachedHeights.value[idx]
  36701. };
  36702. });
  36703. const contains = (arr = [], target) => {
  36704. const { props: { valueKey } } = select;
  36705. if (!isObject$1(target)) return arr.includes(target);
  36706. return arr && arr.some((item) => {
  36707. return (0, vue.toRaw)(get(item, valueKey)) === get(target, valueKey);
  36708. });
  36709. };
  36710. const isEqual = (selected, target) => {
  36711. if (!isObject$1(target)) return selected === target;
  36712. else {
  36713. const { valueKey } = select.props;
  36714. return get(selected, valueKey) === get(target, valueKey);
  36715. }
  36716. };
  36717. const isItemSelected = (modelValue, target) => {
  36718. if (select.props.multiple) return contains(modelValue, getValue(target));
  36719. return isEqual(modelValue, getValue(target));
  36720. };
  36721. const isItemDisabled = (modelValue, selected) => {
  36722. const { disabled, multiple, multipleLimit } = select.props;
  36723. return disabled || !selected && (multiple ? multipleLimit > 0 && modelValue.length >= multipleLimit : false);
  36724. };
  36725. const isItemHovering = (target) => props.hoveringIndex === target;
  36726. const scrollToItem = (index) => {
  36727. const list = listRef.value;
  36728. if (list) list.scrollToItem(index);
  36729. };
  36730. const resetScrollTop = () => {
  36731. const list = listRef.value;
  36732. if (list) list.resetScrollTop();
  36733. };
  36734. expose({
  36735. listRef,
  36736. isSized,
  36737. isItemDisabled,
  36738. isItemHovering,
  36739. isItemSelected,
  36740. scrollToItem,
  36741. resetScrollTop
  36742. });
  36743. const Item = (itemProps) => {
  36744. const { index, data, style } = itemProps;
  36745. const sized = (0, vue.unref)(isSized);
  36746. const { itemSize, estimatedSize } = (0, vue.unref)(listProps);
  36747. const { modelValue } = select.props;
  36748. const { onSelect, onHover } = select;
  36749. const item = data[index];
  36750. if (item.type === "Group") return (0, vue.createVNode)(group_item_default, {
  36751. "item": item,
  36752. "style": style,
  36753. "height": sized ? itemSize : estimatedSize
  36754. }, null);
  36755. const isSelected = isItemSelected(modelValue, item);
  36756. const isDisabled = isItemDisabled(modelValue, isSelected);
  36757. const isHovering = isItemHovering(index);
  36758. return (0, vue.createVNode)(option_item_default, (0, vue.mergeProps)(itemProps, {
  36759. "selected": isSelected,
  36760. "disabled": getDisabled(item) || isDisabled,
  36761. "created": !!item.created,
  36762. "hovering": isHovering,
  36763. "item": item,
  36764. "onSelect": onSelect,
  36765. "onHover": onHover
  36766. }), { default: (props) => slots.default?.(props) || (0, vue.createVNode)("span", null, [getLabel(item)]) });
  36767. };
  36768. const { onKeyboardNavigate, onKeyboardSelect } = select;
  36769. const onForward = () => {
  36770. onKeyboardNavigate("forward");
  36771. };
  36772. const onBackward = () => {
  36773. onKeyboardNavigate("backward");
  36774. };
  36775. const onKeydown = (e) => {
  36776. const code = getEventCode(e);
  36777. const { tab, esc, down, up, enter, numpadEnter } = EVENT_CODE;
  36778. if ([
  36779. esc,
  36780. down,
  36781. up,
  36782. enter,
  36783. numpadEnter
  36784. ].includes(code)) {
  36785. e.preventDefault();
  36786. e.stopPropagation();
  36787. }
  36788. switch (code) {
  36789. case tab:
  36790. case esc: break;
  36791. case down:
  36792. onForward();
  36793. break;
  36794. case up:
  36795. onBackward();
  36796. break;
  36797. case enter:
  36798. case numpadEnter:
  36799. onKeyboardSelect();
  36800. break;
  36801. }
  36802. };
  36803. const onEndReached = (direction) => {
  36804. emit("end-reached", direction);
  36805. };
  36806. return () => {
  36807. const { data, width } = props;
  36808. const { height, multiple, scrollbarAlwaysOn } = select.props;
  36809. const isScrollbarAlwaysOn = isIOS ? true : scrollbarAlwaysOn;
  36810. const List = (0, vue.unref)(isSized) ? FixedSizeList : DynamicSizeList;
  36811. return (0, vue.createVNode)("div", {
  36812. "class": [ns.b("dropdown"), ns.is("multiple", multiple)],
  36813. "style": { width: `${width}px` }
  36814. }, [
  36815. slots.header?.(),
  36816. slots.loading?.() || slots.empty?.() || (0, vue.createVNode)(List, (0, vue.mergeProps)({ "ref": listRef }, (0, vue.unref)(listProps), {
  36817. "className": ns.be("dropdown", "list"),
  36818. "scrollbarAlwaysOn": isScrollbarAlwaysOn,
  36819. "data": data,
  36820. "height": height,
  36821. "width": width,
  36822. "total": data.length,
  36823. "innerElement": "ul",
  36824. "innerProps": {
  36825. id: props.id,
  36826. role: "listbox",
  36827. "aria-label": props.ariaLabel,
  36828. "aria-orientation": "vertical"
  36829. },
  36830. "onEndReached": onEndReached,
  36831. "onKeydown": onKeydown
  36832. }), { default: (props) => (0, vue.createVNode)(Item, props, null) }),
  36833. slots.footer?.()
  36834. ]);
  36835. };
  36836. }
  36837. });
  36838. //#endregion
  36839. //#region ../../packages/components/select-v2/src/useAllowCreate.ts
  36840. function useAllowCreate(props, states) {
  36841. const { aliasProps, getLabel, getValue } = useProps(props);
  36842. const createOptionCount = (0, vue.ref)(0);
  36843. const cachedSelectedOption = (0, vue.ref)();
  36844. const enableAllowCreateMode = (0, vue.computed)(() => {
  36845. return props.allowCreate && props.filterable;
  36846. });
  36847. (0, vue.watch)(() => props.options, (options) => {
  36848. const optionLabelsSet = new Set(options.map((option) => getLabel(option)));
  36849. states.createdOptions = states.createdOptions.filter((createdOption) => !optionLabelsSet.has(getLabel(createdOption)));
  36850. });
  36851. function hasExistingOption(query) {
  36852. const hasOption = (option) => getLabel(option) === query;
  36853. return props.options && props.options.some(hasOption) || states.createdOptions.some(hasOption);
  36854. }
  36855. function selectNewOption(option) {
  36856. if (!enableAllowCreateMode.value) return;
  36857. if (props.multiple && option.created) createOptionCount.value++;
  36858. else cachedSelectedOption.value = option;
  36859. }
  36860. function createNewOption(query) {
  36861. if (enableAllowCreateMode.value) if (query && query.length > 0) {
  36862. if (hasExistingOption(query)) {
  36863. states.createdOptions = states.createdOptions.filter((createdOption) => getLabel(createdOption) !== states.previousQuery);
  36864. return;
  36865. }
  36866. const newOption = {
  36867. [aliasProps.value.value]: query,
  36868. [aliasProps.value.label]: query,
  36869. created: true,
  36870. [aliasProps.value.disabled]: false
  36871. };
  36872. if (states.createdOptions.length >= createOptionCount.value) states.createdOptions[createOptionCount.value] = newOption;
  36873. else states.createdOptions.push(newOption);
  36874. } else if (props.multiple) states.createdOptions.length = createOptionCount.value;
  36875. else {
  36876. const selectedOption = cachedSelectedOption.value;
  36877. states.createdOptions.length = 0;
  36878. if (selectedOption && selectedOption.created) states.createdOptions.push(selectedOption);
  36879. }
  36880. }
  36881. function removeNewOption(option) {
  36882. if (!enableAllowCreateMode.value || !option || !option.created || option.created && props.reserveKeyword && states.inputValue === getLabel(option)) return;
  36883. const idx = states.createdOptions.findIndex((it) => getValue(it) === getValue(option));
  36884. if (~idx) {
  36885. states.createdOptions.splice(idx, 1);
  36886. createOptionCount.value--;
  36887. }
  36888. }
  36889. function clearAllNewOption() {
  36890. if (enableAllowCreateMode.value) {
  36891. states.createdOptions.length = 0;
  36892. createOptionCount.value = 0;
  36893. }
  36894. }
  36895. return {
  36896. createNewOption,
  36897. removeNewOption,
  36898. selectNewOption,
  36899. clearAllNewOption
  36900. };
  36901. }
  36902. //#endregion
  36903. //#region ../../packages/components/select-v2/src/useSelect.ts
  36904. const useSelect$1 = (props, emit) => {
  36905. const { t } = useLocale();
  36906. const slots = (0, vue.useSlots)();
  36907. const nsSelect = useNamespace("select");
  36908. const nsInput = useNamespace("input");
  36909. const { form: elForm, formItem: elFormItem } = useFormItem();
  36910. const { inputId } = useFormItemInputId(props, { formItemContext: elFormItem });
  36911. const { aliasProps, getLabel, getValue, getDisabled, getOptions } = useProps(props);
  36912. const { valueOnClear, isEmptyValue } = useEmptyValues(props);
  36913. const states = (0, vue.reactive)({
  36914. inputValue: "",
  36915. cachedOptions: [],
  36916. createdOptions: [],
  36917. hoveringIndex: -1,
  36918. inputHovering: false,
  36919. selectionWidth: 0,
  36920. collapseItemWidth: 0,
  36921. previousQuery: null,
  36922. previousValue: void 0,
  36923. selectedLabel: "",
  36924. menuVisibleOnFocus: false,
  36925. isBeforeHide: false
  36926. });
  36927. const popperSize = (0, vue.ref)(-1);
  36928. const debouncing = (0, vue.ref)(false);
  36929. const selectRef = (0, vue.ref)();
  36930. const selectionRef = (0, vue.ref)();
  36931. const tooltipRef = (0, vue.ref)();
  36932. const tagTooltipRef = (0, vue.ref)();
  36933. const inputRef = (0, vue.ref)();
  36934. const prefixRef = (0, vue.ref)();
  36935. const suffixRef = (0, vue.ref)();
  36936. const menuRef = (0, vue.ref)();
  36937. const tagMenuRef = (0, vue.ref)();
  36938. const collapseItemRef = (0, vue.ref)();
  36939. const { isComposing, handleCompositionStart, handleCompositionEnd, handleCompositionUpdate } = useComposition({ afterComposition: (e) => onInput(e) });
  36940. const selectDisabled = useFormDisabled();
  36941. const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {
  36942. disabled: selectDisabled,
  36943. afterFocus() {
  36944. if (props.automaticDropdown && !expanded.value) {
  36945. expanded.value = true;
  36946. states.menuVisibleOnFocus = true;
  36947. }
  36948. },
  36949. beforeBlur(event) {
  36950. return tooltipRef.value?.isFocusInsideContent(event) || tagTooltipRef.value?.isFocusInsideContent(event);
  36951. },
  36952. afterBlur() {
  36953. expanded.value = false;
  36954. states.menuVisibleOnFocus = false;
  36955. if (props.validateEvent) elFormItem?.validate?.("blur").catch(NOOP);
  36956. }
  36957. });
  36958. const allOptions = (0, vue.computed)(() => filterOptions(""));
  36959. const hasOptions = (0, vue.computed)(() => {
  36960. if (props.loading) return false;
  36961. return props.options.length > 0 || states.createdOptions.length > 0;
  36962. });
  36963. const filteredOptions = (0, vue.ref)([]);
  36964. const expanded = (0, vue.ref)(false);
  36965. const needStatusIcon = (0, vue.computed)(() => elForm?.statusIcon ?? false);
  36966. const popupHeight = (0, vue.computed)(() => {
  36967. const totalHeight = filteredOptions.value.length * props.itemHeight;
  36968. return totalHeight > props.height ? props.height : totalHeight;
  36969. });
  36970. const hasModelValue = (0, vue.computed)(() => {
  36971. return props.multiple ? isArray$1(props.modelValue) && props.modelValue.length > 0 : !isEmptyValue(props.modelValue);
  36972. });
  36973. const showClearBtn = (0, vue.computed)(() => {
  36974. return props.clearable && !selectDisabled.value && hasModelValue.value && (isFocused.value || states.inputHovering);
  36975. });
  36976. const iconComponent = (0, vue.computed)(() => props.remote && props.filterable && !props.remoteShowSuffix ? "" : props.suffixIcon);
  36977. const iconReverse = (0, vue.computed)(() => iconComponent.value && nsSelect.is("reverse", expanded.value));
  36978. const validateState = (0, vue.computed)(() => elFormItem?.validateState || "");
  36979. const validateIcon = (0, vue.computed)(() => {
  36980. if (!validateState.value) return;
  36981. return ValidateComponentsMap[validateState.value];
  36982. });
  36983. const debounce = (0, vue.computed)(() => props.remote ? props.debounce : 0);
  36984. const isRemoteSearchEmpty = (0, vue.computed)(() => props.remote && !states.inputValue && !hasOptions.value);
  36985. const emptyText = (0, vue.computed)(() => {
  36986. if (props.loading) return props.loadingText || t("el.select.loading");
  36987. else {
  36988. if (props.filterable && states.inputValue && hasOptions.value && filteredOptions.value.length === 0) return props.noMatchText || t("el.select.noMatch");
  36989. if (!hasOptions.value) return props.noDataText || t("el.select.noData");
  36990. }
  36991. return null;
  36992. });
  36993. const isFilterMethodValid = (0, vue.computed)(() => props.filterable && isFunction$1(props.filterMethod));
  36994. const isRemoteMethodValid = (0, vue.computed)(() => props.filterable && props.remote && isFunction$1(props.remoteMethod));
  36995. const filterOptions = (query) => {
  36996. const regexp = new RegExp(escapeStringRegexp(query), "i");
  36997. const isValidOption = (o) => {
  36998. if (isFilterMethodValid.value || isRemoteMethodValid.value) return true;
  36999. return query ? regexp.test(getLabel(o) || "") : true;
  37000. };
  37001. if (props.loading) return [];
  37002. return [...states.createdOptions, ...props.options].reduce((all, item) => {
  37003. const options = getOptions(item);
  37004. if (isArray$1(options)) {
  37005. const filtered = options.filter(isValidOption);
  37006. if (filtered.length > 0) all.push({
  37007. label: getLabel(item),
  37008. type: "Group"
  37009. }, ...filtered);
  37010. } else if (props.remote || isValidOption(item)) all.push(item);
  37011. return all;
  37012. }, []);
  37013. };
  37014. const updateOptions = () => {
  37015. filteredOptions.value = filterOptions(states.inputValue);
  37016. };
  37017. const allOptionsValueMap = (0, vue.computed)(() => {
  37018. const valueMap = /* @__PURE__ */ new Map();
  37019. allOptions.value.forEach((option, index) => {
  37020. valueMap.set(getValueKey(getValue(option)), {
  37021. option,
  37022. index
  37023. });
  37024. });
  37025. return valueMap;
  37026. });
  37027. const filteredOptionsValueMap = (0, vue.computed)(() => {
  37028. const valueMap = /* @__PURE__ */ new Map();
  37029. filteredOptions.value.forEach((option, index) => {
  37030. valueMap.set(getValueKey(getValue(option)), {
  37031. option,
  37032. index
  37033. });
  37034. });
  37035. return valueMap;
  37036. });
  37037. const optionsAllDisabled = (0, vue.computed)(() => filteredOptions.value.every((option) => getDisabled(option)));
  37038. const selectSize = useFormSize();
  37039. const collapseTagSize = (0, vue.computed)(() => "small" === selectSize.value ? "small" : "default");
  37040. const calculatePopperSize = () => {
  37041. if (isNumber(props.fitInputWidth)) {
  37042. popperSize.value = props.fitInputWidth;
  37043. return;
  37044. }
  37045. const width = selectRef.value?.offsetWidth || 200;
  37046. if (!props.fitInputWidth && hasOptions.value) (0, vue.nextTick)(() => {
  37047. popperSize.value = Math.max(width, calculateLabelMaxWidth());
  37048. });
  37049. else popperSize.value = width;
  37050. };
  37051. const calculateLabelMaxWidth = () => {
  37052. const ctx = document.createElement("canvas").getContext("2d");
  37053. const selector = nsSelect.be("dropdown", "item");
  37054. const dropdownItemEl = (menuRef.value?.listRef?.innerRef || document).querySelector(`.${selector}`);
  37055. if (dropdownItemEl === null || ctx === null) return 0;
  37056. const style = getComputedStyle(dropdownItemEl);
  37057. const padding = Number.parseFloat(style.paddingLeft) + Number.parseFloat(style.paddingRight);
  37058. ctx.font = `bold ${style.font.replace(new RegExp(`\\b${style.fontWeight}\\b`), "")}`;
  37059. return filteredOptions.value.reduce((max, option) => {
  37060. const metrics = ctx.measureText(getLabel(option));
  37061. return Math.max(metrics.width, max);
  37062. }, 0) + padding;
  37063. };
  37064. const getGapWidth = () => {
  37065. if (!selectionRef.value) return 0;
  37066. const style = window.getComputedStyle(selectionRef.value);
  37067. return Number.parseFloat(style.gap || "6px");
  37068. };
  37069. const tagStyle = (0, vue.computed)(() => {
  37070. const gapWidth = getGapWidth();
  37071. const inputSlotWidth = props.filterable ? gapWidth + 11 : 0;
  37072. return { maxWidth: `${collapseItemRef.value && props.maxCollapseTags === 1 ? states.selectionWidth - states.collapseItemWidth - gapWidth - inputSlotWidth : states.selectionWidth - inputSlotWidth}px` };
  37073. });
  37074. const collapseTagStyle = (0, vue.computed)(() => {
  37075. return { maxWidth: `${states.selectionWidth}px` };
  37076. });
  37077. const shouldShowPlaceholder = (0, vue.computed)(() => {
  37078. if (isArray$1(props.modelValue)) return props.modelValue.length === 0 && !states.inputValue;
  37079. return props.filterable ? !states.inputValue : true;
  37080. });
  37081. const currentPlaceholder = (0, vue.computed)(() => {
  37082. const _placeholder = props.placeholder ?? t("el.select.placeholder");
  37083. return props.multiple || !hasModelValue.value ? _placeholder : states.selectedLabel;
  37084. });
  37085. const popperRef = (0, vue.computed)(() => tooltipRef.value?.popperRef?.contentRef);
  37086. const indexRef = (0, vue.computed)(() => {
  37087. if (props.multiple) {
  37088. const len = props.modelValue.length;
  37089. if (len > 0 && filteredOptionsValueMap.value.has(props.modelValue[len - 1])) {
  37090. const { index } = filteredOptionsValueMap.value.get(props.modelValue[len - 1]);
  37091. return index;
  37092. }
  37093. } else if (!isEmptyValue(props.modelValue) && filteredOptionsValueMap.value.has(props.modelValue)) {
  37094. const { index } = filteredOptionsValueMap.value.get(props.modelValue);
  37095. return index;
  37096. }
  37097. return -1;
  37098. });
  37099. const dropdownMenuVisible = (0, vue.computed)({
  37100. get() {
  37101. return expanded.value && (props.loading || !isRemoteSearchEmpty.value || props.remote && !!slots.empty) && (!debouncing.value || !isEmpty(states.previousQuery) || hasOptions.value);
  37102. },
  37103. set(val) {
  37104. expanded.value = val;
  37105. }
  37106. });
  37107. const showTagList = (0, vue.computed)(() => {
  37108. if (!props.multiple) return [];
  37109. return props.collapseTags ? states.cachedOptions.slice(0, props.maxCollapseTags) : states.cachedOptions;
  37110. });
  37111. const collapseTagList = (0, vue.computed)(() => {
  37112. if (!props.multiple) return [];
  37113. return props.collapseTags ? states.cachedOptions.slice(props.maxCollapseTags) : [];
  37114. });
  37115. const { createNewOption, removeNewOption, selectNewOption, clearAllNewOption } = useAllowCreate(props, states);
  37116. const toggleMenu = (event) => {
  37117. if (selectDisabled.value || props.filterable && expanded.value && event && !suffixRef.value?.contains(event.target)) return;
  37118. if (states.menuVisibleOnFocus) states.menuVisibleOnFocus = false;
  37119. else expanded.value = !expanded.value;
  37120. };
  37121. const onInputChange = () => {
  37122. if (states.inputValue.length > 0 && !expanded.value) expanded.value = true;
  37123. createNewOption(states.inputValue);
  37124. (0, vue.nextTick)(() => {
  37125. handleQueryChange(states.inputValue);
  37126. });
  37127. };
  37128. const debouncedOnInputChange = useDebounceFn(() => {
  37129. onInputChange();
  37130. debouncing.value = false;
  37131. }, debounce);
  37132. const handleQueryChange = (val) => {
  37133. if (states.previousQuery === val || isComposing.value) return;
  37134. states.previousQuery = val;
  37135. if (props.filterable && isFunction$1(props.filterMethod)) props.filterMethod(val);
  37136. else if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) props.remoteMethod(val);
  37137. if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptions.value.length) (0, vue.nextTick)(checkDefaultFirstOption);
  37138. else (0, vue.nextTick)(updateHoveringIndex);
  37139. };
  37140. const checkDefaultFirstOption = () => {
  37141. const optionsInDropdown = filteredOptions.value.filter((n) => !n.disabled && n.type !== "Group");
  37142. const userCreatedOption = optionsInDropdown.find((n) => n.created);
  37143. const firstOriginOption = optionsInDropdown[0];
  37144. states.hoveringIndex = getValueIndex(filteredOptions.value, userCreatedOption || firstOriginOption);
  37145. };
  37146. const emitChange = (val) => {
  37147. if (!isEqual$1(props.modelValue, val)) emit(CHANGE_EVENT, val);
  37148. };
  37149. const update = (val) => {
  37150. emit(UPDATE_MODEL_EVENT, val);
  37151. emitChange(val);
  37152. states.previousValue = props.multiple ? String(val) : val;
  37153. (0, vue.nextTick)(() => {
  37154. if (props.multiple && isArray$1(props.modelValue)) {
  37155. const cachedOptions = states.cachedOptions.slice();
  37156. const selectedOptions = props.modelValue.map((value) => getOption(value, cachedOptions));
  37157. if (!isEqual$1(states.cachedOptions, selectedOptions)) states.cachedOptions = selectedOptions;
  37158. } else initStates(true);
  37159. });
  37160. };
  37161. const getValueIndex = (arr = [], value) => {
  37162. if (!isObject$1(value)) return arr.indexOf(value);
  37163. const valueKey = props.valueKey;
  37164. let index = -1;
  37165. arr.some((item, i) => {
  37166. if (get(item, valueKey) === get(value, valueKey)) {
  37167. index = i;
  37168. return true;
  37169. }
  37170. return false;
  37171. });
  37172. return index;
  37173. };
  37174. const getValueKey = (item) => {
  37175. return isObject$1(item) ? get(item, props.valueKey) : item;
  37176. };
  37177. const handleResize = () => {
  37178. calculatePopperSize();
  37179. };
  37180. const onEndReached = (direction) => {
  37181. emit("end-reached", direction);
  37182. };
  37183. const resetSelectionWidth = () => {
  37184. states.selectionWidth = Number.parseFloat(window.getComputedStyle(selectionRef.value).width);
  37185. };
  37186. const resetCollapseItemWidth = () => {
  37187. states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width;
  37188. };
  37189. const updateTooltip = () => {
  37190. tooltipRef.value?.updatePopper?.();
  37191. };
  37192. const updateTagTooltip = () => {
  37193. tagTooltipRef.value?.updatePopper?.();
  37194. };
  37195. const onSelect = (option) => {
  37196. const optionValue = getValue(option);
  37197. if (props.multiple) {
  37198. let selectedOptions = props.modelValue.slice();
  37199. const index = getValueIndex(selectedOptions, optionValue);
  37200. if (index > -1) {
  37201. selectedOptions = [...selectedOptions.slice(0, index), ...selectedOptions.slice(index + 1)];
  37202. states.cachedOptions.splice(index, 1);
  37203. removeNewOption(option);
  37204. } else if (props.multipleLimit <= 0 || selectedOptions.length < props.multipleLimit) {
  37205. selectedOptions = [...selectedOptions, optionValue];
  37206. states.cachedOptions.push(option);
  37207. selectNewOption(option);
  37208. }
  37209. update(selectedOptions);
  37210. if (option.created) handleQueryChange("");
  37211. if (props.filterable && (option.created || !props.reserveKeyword)) states.inputValue = "";
  37212. } else {
  37213. states.selectedLabel = getLabel(option);
  37214. !isEqual$1(props.modelValue, optionValue) && update(optionValue);
  37215. expanded.value = false;
  37216. selectNewOption(option);
  37217. if (!option.created) clearAllNewOption();
  37218. }
  37219. focus();
  37220. };
  37221. const deleteTag = (event, option) => {
  37222. let selectedOptions = props.modelValue.slice();
  37223. const index = getValueIndex(selectedOptions, getValue(option));
  37224. if (index > -1 && !selectDisabled.value) {
  37225. selectedOptions = [...props.modelValue.slice(0, index), ...props.modelValue.slice(index + 1)];
  37226. states.cachedOptions.splice(index, 1);
  37227. update(selectedOptions);
  37228. emit("remove-tag", getValue(option));
  37229. removeNewOption(option);
  37230. }
  37231. event.stopPropagation();
  37232. focus();
  37233. };
  37234. const focus = () => {
  37235. inputRef.value?.focus();
  37236. };
  37237. const blur = () => {
  37238. if (expanded.value) {
  37239. expanded.value = false;
  37240. (0, vue.nextTick)(() => inputRef.value?.blur());
  37241. return;
  37242. }
  37243. inputRef.value?.blur();
  37244. };
  37245. const handleEsc = () => {
  37246. if (states.inputValue.length > 0) states.inputValue = "";
  37247. else expanded.value = false;
  37248. };
  37249. const getLastNotDisabledIndex = (value) => findLastIndex(value, (it) => !states.cachedOptions.some((option) => getValue(option) === it && getDisabled(option)));
  37250. const handleDel = (e) => {
  37251. const code = getEventCode(e);
  37252. if (!props.multiple) return;
  37253. if (code === EVENT_CODE.delete) return;
  37254. if (states.inputValue.length === 0) {
  37255. e.preventDefault();
  37256. const selected = props.modelValue.slice();
  37257. const lastNotDisabledIndex = getLastNotDisabledIndex(selected);
  37258. if (lastNotDisabledIndex < 0) return;
  37259. const removeTagValue = selected[lastNotDisabledIndex];
  37260. selected.splice(lastNotDisabledIndex, 1);
  37261. const option = states.cachedOptions[lastNotDisabledIndex];
  37262. states.cachedOptions.splice(lastNotDisabledIndex, 1);
  37263. removeNewOption(option);
  37264. update(selected);
  37265. emit("remove-tag", removeTagValue);
  37266. }
  37267. };
  37268. const handleClear = () => {
  37269. let emptyValue;
  37270. if (isArray$1(props.modelValue)) emptyValue = [];
  37271. else emptyValue = valueOnClear.value;
  37272. states.selectedLabel = "";
  37273. expanded.value = false;
  37274. update(emptyValue);
  37275. emit("clear");
  37276. clearAllNewOption();
  37277. focus();
  37278. };
  37279. const onKeyboardNavigate = (direction, hoveringIndex = void 0) => {
  37280. const options = filteredOptions.value;
  37281. if (!["forward", "backward"].includes(direction) || selectDisabled.value || options.length <= 0 || optionsAllDisabled.value || isComposing.value) return;
  37282. if (!expanded.value) return toggleMenu();
  37283. if (isUndefined(hoveringIndex)) hoveringIndex = states.hoveringIndex;
  37284. let newIndex = -1;
  37285. if (direction === "forward") {
  37286. newIndex = hoveringIndex + 1;
  37287. if (newIndex >= options.length) newIndex = 0;
  37288. } else if (direction === "backward") {
  37289. newIndex = hoveringIndex - 1;
  37290. if (newIndex < 0 || newIndex >= options.length) newIndex = options.length - 1;
  37291. }
  37292. const option = options[newIndex];
  37293. if (getDisabled(option) || option.type === "Group") return onKeyboardNavigate(direction, newIndex);
  37294. else {
  37295. states.hoveringIndex = newIndex;
  37296. scrollToItem(newIndex);
  37297. }
  37298. };
  37299. const onKeyboardSelect = () => {
  37300. if (!expanded.value) return toggleMenu();
  37301. else if (~states.hoveringIndex && filteredOptions.value[states.hoveringIndex]) onSelect(filteredOptions.value[states.hoveringIndex]);
  37302. };
  37303. const onHoverOption = (idx) => {
  37304. states.hoveringIndex = idx ?? -1;
  37305. };
  37306. const updateHoveringIndex = () => {
  37307. if (!props.multiple) states.hoveringIndex = filteredOptions.value.findIndex((item) => {
  37308. return getValueKey(getValue(item)) === getValueKey(props.modelValue);
  37309. });
  37310. else {
  37311. const length = props.modelValue.length;
  37312. if (length > 0) {
  37313. const lastValue = props.modelValue[length - 1];
  37314. states.hoveringIndex = filteredOptions.value.findIndex((item) => getValueKey(lastValue) === getValueKey(getValue(item)));
  37315. } else states.hoveringIndex = -1;
  37316. }
  37317. };
  37318. const onInput = (event) => {
  37319. states.inputValue = event.target.value;
  37320. if (props.remote) {
  37321. debouncing.value = true;
  37322. debouncedOnInputChange();
  37323. } else return onInputChange();
  37324. };
  37325. const handleClickOutside = (event) => {
  37326. expanded.value = false;
  37327. if (isFocused.value) handleBlur(new FocusEvent("blur", event));
  37328. };
  37329. const handleMenuEnter = () => {
  37330. states.isBeforeHide = false;
  37331. return (0, vue.nextTick)(() => {
  37332. if (~indexRef.value) scrollToItem(indexRef.value);
  37333. });
  37334. };
  37335. const scrollToItem = (index) => {
  37336. menuRef.value.scrollToItem(index);
  37337. };
  37338. const getOption = (value, cachedOptions) => {
  37339. const selectValue = getValueKey(value);
  37340. if (allOptionsValueMap.value.has(selectValue)) {
  37341. const { option } = allOptionsValueMap.value.get(selectValue);
  37342. return option;
  37343. }
  37344. if (cachedOptions && cachedOptions.length) {
  37345. const option = cachedOptions.find((option) => getValueKey(getValue(option)) === selectValue);
  37346. if (option) return option;
  37347. }
  37348. return {
  37349. [aliasProps.value.value]: value,
  37350. [aliasProps.value.label]: value
  37351. };
  37352. };
  37353. const getIndex = (option) => allOptionsValueMap.value.get(getValue(option))?.index ?? -1;
  37354. const initStates = (needUpdateSelectedLabel = false) => {
  37355. if (props.multiple) if (props.modelValue.length > 0) {
  37356. const cachedOptions = states.cachedOptions.slice();
  37357. states.cachedOptions.length = 0;
  37358. states.previousValue = props.modelValue.toString();
  37359. for (const value of props.modelValue) {
  37360. const option = getOption(value, cachedOptions);
  37361. states.cachedOptions.push(option);
  37362. }
  37363. } else {
  37364. states.cachedOptions = [];
  37365. states.previousValue = void 0;
  37366. }
  37367. else if (hasModelValue.value) {
  37368. states.previousValue = props.modelValue;
  37369. const options = filteredOptions.value;
  37370. const selectedItemIndex = options.findIndex((option) => getValueKey(getValue(option)) === getValueKey(props.modelValue));
  37371. if (~selectedItemIndex) states.selectedLabel = getLabel(options[selectedItemIndex]);
  37372. else if (!states.selectedLabel || needUpdateSelectedLabel) states.selectedLabel = getValueKey(props.modelValue);
  37373. } else {
  37374. states.selectedLabel = "";
  37375. states.previousValue = void 0;
  37376. }
  37377. clearAllNewOption();
  37378. calculatePopperSize();
  37379. };
  37380. (0, vue.watch)(() => props.fitInputWidth, () => {
  37381. calculatePopperSize();
  37382. });
  37383. (0, vue.watch)(expanded, (val) => {
  37384. if (val) {
  37385. if (!props.persistent) calculatePopperSize();
  37386. handleQueryChange("");
  37387. } else {
  37388. states.inputValue = "";
  37389. states.previousQuery = null;
  37390. states.isBeforeHide = true;
  37391. states.menuVisibleOnFocus = false;
  37392. createNewOption("");
  37393. }
  37394. });
  37395. (0, vue.watch)(() => props.modelValue, (val, oldVal) => {
  37396. if (!val || isArray$1(val) && val.length === 0 || props.multiple && !isEqual$1(val.toString(), states.previousValue) || !props.multiple && getValueKey(val) !== getValueKey(states.previousValue)) initStates(true);
  37397. if (!isEqual$1(val, oldVal) && props.validateEvent) elFormItem?.validate?.("change").catch(NOOP);
  37398. }, { deep: true });
  37399. (0, vue.watch)(() => props.options, () => {
  37400. const input = inputRef.value;
  37401. if (!input || input && document.activeElement !== input) initStates();
  37402. }, {
  37403. deep: true,
  37404. flush: "post"
  37405. });
  37406. (0, vue.watch)(() => filteredOptions.value, () => {
  37407. calculatePopperSize();
  37408. return menuRef.value && (0, vue.nextTick)(menuRef.value.resetScrollTop);
  37409. });
  37410. (0, vue.watchEffect)(() => {
  37411. if (states.isBeforeHide) return;
  37412. updateOptions();
  37413. });
  37414. (0, vue.watchEffect)(() => {
  37415. const { valueKey, options } = props;
  37416. const duplicateValue = /* @__PURE__ */ new Map();
  37417. for (const item of options) {
  37418. const optionValue = getValue(item);
  37419. let v = optionValue;
  37420. if (isObject$1(v)) v = get(optionValue, valueKey);
  37421. if (duplicateValue.get(v)) {
  37422. /* @__PURE__ */ debugWarn("ElSelectV2", `The option values you provided seem to be duplicated, which may cause some problems, please check.`);
  37423. break;
  37424. } else duplicateValue.set(v, true);
  37425. }
  37426. });
  37427. (0, vue.onMounted)(() => {
  37428. initStates();
  37429. });
  37430. useResizeObserver(selectRef, handleResize);
  37431. useResizeObserver(selectionRef, resetSelectionWidth);
  37432. useResizeObserver(wrapperRef, updateTooltip);
  37433. useResizeObserver(tagMenuRef, updateTagTooltip);
  37434. useResizeObserver(collapseItemRef, resetCollapseItemWidth);
  37435. let stop;
  37436. (0, vue.watch)(() => dropdownMenuVisible.value, (newVal) => {
  37437. if (newVal) stop = useResizeObserver(menuRef, updateTooltip).stop;
  37438. else {
  37439. stop?.();
  37440. stop = void 0;
  37441. }
  37442. emit("visible-change", newVal);
  37443. });
  37444. return {
  37445. inputId,
  37446. collapseTagSize,
  37447. currentPlaceholder,
  37448. expanded,
  37449. emptyText,
  37450. popupHeight,
  37451. debounce,
  37452. allOptions,
  37453. allOptionsValueMap,
  37454. filteredOptions,
  37455. iconComponent,
  37456. iconReverse,
  37457. tagStyle,
  37458. collapseTagStyle,
  37459. popperSize,
  37460. dropdownMenuVisible,
  37461. hasModelValue,
  37462. shouldShowPlaceholder,
  37463. selectDisabled,
  37464. selectSize,
  37465. needStatusIcon,
  37466. showClearBtn,
  37467. states,
  37468. isFocused,
  37469. nsSelect,
  37470. nsInput,
  37471. inputRef,
  37472. menuRef,
  37473. tagMenuRef,
  37474. tooltipRef,
  37475. tagTooltipRef,
  37476. selectRef,
  37477. wrapperRef,
  37478. selectionRef,
  37479. prefixRef,
  37480. suffixRef,
  37481. collapseItemRef,
  37482. popperRef,
  37483. validateState,
  37484. validateIcon,
  37485. showTagList,
  37486. collapseTagList,
  37487. debouncedOnInputChange,
  37488. deleteTag,
  37489. getLabel,
  37490. getValue,
  37491. getDisabled,
  37492. getValueKey,
  37493. getIndex,
  37494. handleClear,
  37495. handleClickOutside,
  37496. handleDel,
  37497. handleEsc,
  37498. focus,
  37499. blur,
  37500. handleMenuEnter,
  37501. handleResize,
  37502. resetSelectionWidth,
  37503. updateTooltip,
  37504. updateTagTooltip,
  37505. updateOptions,
  37506. toggleMenu,
  37507. scrollTo: scrollToItem,
  37508. onInput,
  37509. onKeyboardNavigate,
  37510. onKeyboardSelect,
  37511. onEndReached,
  37512. onSelect,
  37513. onHover: onHoverOption,
  37514. handleCompositionStart,
  37515. handleCompositionEnd,
  37516. handleCompositionUpdate
  37517. };
  37518. };
  37519. //#endregion
  37520. //#region ../../packages/components/select-v2/src/select.vue?vue&type=script&lang.ts
  37521. var select_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  37522. name: "ElSelectV2",
  37523. components: {
  37524. ElSelectMenu: select_dropdown_default,
  37525. ElTag,
  37526. ElTooltip,
  37527. ElIcon
  37528. },
  37529. directives: { ClickOutside },
  37530. props: selectV2Props,
  37531. emits: selectV2Emits,
  37532. setup(props, { emit }) {
  37533. const modelValue = (0, vue.computed)(() => {
  37534. const { modelValue: rawModelValue, multiple } = props;
  37535. const fallback = multiple ? [] : void 0;
  37536. if (isArray$1(rawModelValue)) return multiple ? rawModelValue : fallback;
  37537. return multiple ? fallback : rawModelValue;
  37538. });
  37539. const API = useSelect$1((0, vue.reactive)({
  37540. ...(0, vue.toRefs)(props),
  37541. modelValue
  37542. }), emit);
  37543. const { calculatorRef, inputStyle } = useCalcInputWidth();
  37544. const contentId = useId();
  37545. (0, vue.provide)(selectV2InjectionKey, {
  37546. props: (0, vue.reactive)({
  37547. ...(0, vue.toRefs)(props),
  37548. height: API.popupHeight,
  37549. modelValue
  37550. }),
  37551. expanded: API.expanded,
  37552. tooltipRef: API.tooltipRef,
  37553. contentId,
  37554. onSelect: API.onSelect,
  37555. onHover: API.onHover,
  37556. onKeyboardNavigate: API.onKeyboardNavigate,
  37557. onKeyboardSelect: API.onKeyboardSelect
  37558. });
  37559. const selectedLabel = (0, vue.computed)(() => {
  37560. if (!props.multiple) return API.states.selectedLabel;
  37561. return API.states.cachedOptions.map((i) => API.getLabel(i));
  37562. });
  37563. return {
  37564. ...API,
  37565. modelValue,
  37566. selectedLabel,
  37567. calculatorRef,
  37568. inputStyle,
  37569. contentId,
  37570. BORDER_HORIZONTAL_WIDTH: 2
  37571. };
  37572. }
  37573. });
  37574. //#endregion
  37575. //#region ../../packages/components/select-v2/src/select.vue
  37576. const _hoisted_1$21 = [
  37577. "id",
  37578. "value",
  37579. "autocomplete",
  37580. "tabindex",
  37581. "aria-expanded",
  37582. "aria-label",
  37583. "disabled",
  37584. "aria-controls",
  37585. "aria-activedescendant",
  37586. "readonly",
  37587. "name"
  37588. ];
  37589. const _hoisted_2$13 = ["textContent"];
  37590. const _hoisted_3$5 = { key: 1 };
  37591. function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
  37592. const _component_el_tag = (0, vue.resolveComponent)("el-tag");
  37593. const _component_el_tooltip = (0, vue.resolveComponent)("el-tooltip");
  37594. const _component_el_icon = (0, vue.resolveComponent)("el-icon");
  37595. const _component_el_select_menu = (0, vue.resolveComponent)("el-select-menu");
  37596. const _directive_click_outside = (0, vue.resolveDirective)("click-outside");
  37597. return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  37598. ref: "selectRef",
  37599. class: (0, vue.normalizeClass)([_ctx.nsSelect.b(), _ctx.nsSelect.m(_ctx.selectSize)]),
  37600. onMouseenter: _cache[15] || (_cache[15] = ($event) => _ctx.states.inputHovering = true),
  37601. onMouseleave: _cache[16] || (_cache[16] = ($event) => _ctx.states.inputHovering = false)
  37602. }, [(0, vue.createVNode)(_component_el_tooltip, {
  37603. ref: "tooltipRef",
  37604. visible: _ctx.dropdownMenuVisible,
  37605. teleported: _ctx.teleported,
  37606. "popper-class": [_ctx.nsSelect.e("popper"), _ctx.popperClass],
  37607. "popper-style": _ctx.popperStyle,
  37608. "gpu-acceleration": false,
  37609. "stop-popper-mouse-event": false,
  37610. "popper-options": _ctx.popperOptions,
  37611. "fallback-placements": _ctx.fallbackPlacements,
  37612. effect: _ctx.effect,
  37613. placement: _ctx.placement,
  37614. pure: "",
  37615. transition: `${_ctx.nsSelect.namespace.value}-zoom-in-top`,
  37616. trigger: "click",
  37617. persistent: _ctx.persistent,
  37618. "append-to": _ctx.appendTo,
  37619. "show-arrow": _ctx.showArrow,
  37620. offset: _ctx.offset,
  37621. onBeforeShow: _ctx.handleMenuEnter,
  37622. onHide: _cache[14] || (_cache[14] = ($event) => _ctx.states.isBeforeHide = false)
  37623. }, {
  37624. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  37625. ref: "wrapperRef",
  37626. class: (0, vue.normalizeClass)([
  37627. _ctx.nsSelect.e("wrapper"),
  37628. _ctx.nsSelect.is("focused", _ctx.isFocused),
  37629. _ctx.nsSelect.is("hovering", _ctx.states.inputHovering),
  37630. _ctx.nsSelect.is("filterable", _ctx.filterable),
  37631. _ctx.nsSelect.is("disabled", _ctx.selectDisabled)
  37632. ]),
  37633. onClick: _cache[11] || (_cache[11] = (0, vue.withModifiers)((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["prevent"]))
  37634. }, [
  37635. _ctx.$slots.prefix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  37636. key: 0,
  37637. ref: "prefixRef",
  37638. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("prefix"))
  37639. }, [(0, vue.renderSlot)(_ctx.$slots, "prefix")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  37640. (0, vue.createElementVNode)("div", {
  37641. ref: "selectionRef",
  37642. class: (0, vue.normalizeClass)([_ctx.nsSelect.e("selection"), _ctx.nsSelect.is("near", _ctx.multiple && !_ctx.$slots.prefix && !!_ctx.modelValue.length)])
  37643. }, [
  37644. _ctx.multiple ? (0, vue.renderSlot)(_ctx.$slots, "tag", {
  37645. key: 0,
  37646. data: _ctx.states.cachedOptions,
  37647. deleteTag: _ctx.deleteTag,
  37648. selectDisabled: _ctx.selectDisabled
  37649. }, () => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.showTagList, (item) => {
  37650. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  37651. key: _ctx.getValueKey(_ctx.getValue(item)),
  37652. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
  37653. }, [(0, vue.createVNode)(_component_el_tag, {
  37654. closable: !_ctx.selectDisabled && !_ctx.getDisabled(item),
  37655. size: _ctx.collapseTagSize,
  37656. type: _ctx.tagType,
  37657. effect: _ctx.tagEffect,
  37658. "disable-transitions": "",
  37659. style: (0, vue.normalizeStyle)(_ctx.tagStyle),
  37660. onClose: ($event) => _ctx.deleteTag($event, item)
  37661. }, {
  37662. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "label", {
  37663. index: _ctx.getIndex(item),
  37664. label: _ctx.getLabel(item),
  37665. value: _ctx.getValue(item)
  37666. }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(_ctx.getLabel(item)), 1)])], 2)]),
  37667. _: 2
  37668. }, 1032, [
  37669. "closable",
  37670. "size",
  37671. "type",
  37672. "effect",
  37673. "style",
  37674. "onClose"
  37675. ])], 2);
  37676. }), 128)), _ctx.collapseTags && _ctx.states.cachedOptions.length > _ctx.maxCollapseTags ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tooltip, {
  37677. key: 0,
  37678. ref: "tagTooltipRef",
  37679. disabled: _ctx.dropdownMenuVisible || !_ctx.collapseTagsTooltip,
  37680. "fallback-placements": _ctx.tagTooltip?.fallbackPlacements ?? [
  37681. "bottom",
  37682. "top",
  37683. "right",
  37684. "left"
  37685. ],
  37686. effect: _ctx.tagTooltip?.effect ?? _ctx.effect,
  37687. placement: _ctx.tagTooltip?.placement ?? "bottom",
  37688. "popper-class": _ctx.tagTooltip?.popperClass ?? _ctx.popperClass,
  37689. "popper-style": _ctx.tagTooltip?.popperStyle ?? _ctx.popperStyle,
  37690. teleported: _ctx.tagTooltip?.teleported ?? _ctx.teleported,
  37691. "append-to": _ctx.tagTooltip?.appendTo ?? _ctx.appendTo,
  37692. "popper-options": _ctx.tagTooltip?.popperOptions ?? _ctx.popperOptions,
  37693. transition: _ctx.tagTooltip?.transition,
  37694. "show-after": _ctx.tagTooltip?.showAfter,
  37695. "hide-after": _ctx.tagTooltip?.hideAfter,
  37696. "auto-close": _ctx.tagTooltip?.autoClose,
  37697. offset: _ctx.tagTooltip?.offset
  37698. }, {
  37699. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  37700. ref: "collapseItemRef",
  37701. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
  37702. }, [(0, vue.createVNode)(_component_el_tag, {
  37703. closable: false,
  37704. size: _ctx.collapseTagSize,
  37705. type: _ctx.tagType,
  37706. effect: _ctx.tagEffect,
  37707. style: (0, vue.normalizeStyle)(_ctx.collapseTagStyle),
  37708. "disable-transitions": ""
  37709. }, {
  37710. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, " + " + (0, vue.toDisplayString)(_ctx.states.cachedOptions.length - _ctx.maxCollapseTags), 3)]),
  37711. _: 1
  37712. }, 8, [
  37713. "size",
  37714. "type",
  37715. "effect",
  37716. "style"
  37717. ])], 2)]),
  37718. content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  37719. ref: "tagMenuRef",
  37720. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selection"))
  37721. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.collapseTagList, (selected) => {
  37722. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  37723. key: _ctx.getValueKey(_ctx.getValue(selected)),
  37724. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("selected-item"))
  37725. }, [(0, vue.createVNode)(_component_el_tag, {
  37726. class: "in-tooltip",
  37727. closable: !_ctx.selectDisabled && !_ctx.getDisabled(selected),
  37728. size: _ctx.collapseTagSize,
  37729. type: _ctx.tagType,
  37730. effect: _ctx.tagEffect,
  37731. "disable-transitions": "",
  37732. onClose: ($event) => _ctx.deleteTag($event, selected)
  37733. }, {
  37734. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.nsSelect.e("tags-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "label", {
  37735. index: _ctx.getIndex(selected),
  37736. label: _ctx.getLabel(selected),
  37737. value: _ctx.getValue(selected)
  37738. }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(_ctx.getLabel(selected)), 1)])], 2)]),
  37739. _: 2
  37740. }, 1032, [
  37741. "closable",
  37742. "size",
  37743. "type",
  37744. "effect",
  37745. "onClose"
  37746. ])], 2);
  37747. }), 128))], 2)]),
  37748. _: 3
  37749. }, 8, [
  37750. "disabled",
  37751. "fallback-placements",
  37752. "effect",
  37753. "placement",
  37754. "popper-class",
  37755. "popper-style",
  37756. "teleported",
  37757. "append-to",
  37758. "popper-options",
  37759. "transition",
  37760. "show-after",
  37761. "hide-after",
  37762. "auto-close",
  37763. "offset"
  37764. ])) : (0, vue.createCommentVNode)("v-if", true)]) : (0, vue.createCommentVNode)("v-if", true),
  37765. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([
  37766. _ctx.nsSelect.e("selected-item"),
  37767. _ctx.nsSelect.e("input-wrapper"),
  37768. _ctx.nsSelect.is("hidden", !_ctx.filterable || _ctx.selectDisabled || _ctx.multiple && !_ctx.states.inputValue && !_ctx.isFocused)
  37769. ]) }, [(0, vue.createElementVNode)("input", {
  37770. id: _ctx.inputId,
  37771. ref: "inputRef",
  37772. value: _ctx.states.inputValue,
  37773. style: (0, vue.normalizeStyle)(_ctx.inputStyle),
  37774. autocomplete: _ctx.autocomplete,
  37775. tabindex: _ctx.tabindex,
  37776. "aria-autocomplete": "none",
  37777. "aria-haspopup": "listbox",
  37778. autocapitalize: "off",
  37779. "aria-expanded": _ctx.expanded,
  37780. "aria-label": _ctx.ariaLabel,
  37781. class: (0, vue.normalizeClass)([_ctx.nsSelect.e("input"), _ctx.nsSelect.is(_ctx.selectSize)]),
  37782. disabled: _ctx.selectDisabled,
  37783. role: "combobox",
  37784. "aria-controls": _ctx.contentId,
  37785. "aria-activedescendant": _ctx.states.hoveringIndex >= 0 ? `${_ctx.contentId}-${_ctx.states.hoveringIndex}` : "",
  37786. readonly: !_ctx.filterable,
  37787. spellcheck: "false",
  37788. type: "text",
  37789. name: _ctx.name,
  37790. onInput: _cache[0] || (_cache[0] = (...args) => _ctx.onInput && _ctx.onInput(...args)),
  37791. onChange: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"])),
  37792. onCompositionstart: _cache[2] || (_cache[2] = (...args) => _ctx.handleCompositionStart && _ctx.handleCompositionStart(...args)),
  37793. onCompositionupdate: _cache[3] || (_cache[3] = (...args) => _ctx.handleCompositionUpdate && _ctx.handleCompositionUpdate(...args)),
  37794. onCompositionend: _cache[4] || (_cache[4] = (...args) => _ctx.handleCompositionEnd && _ctx.handleCompositionEnd(...args)),
  37795. onKeydown: [
  37796. _cache[5] || (_cache[5] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.onKeyboardNavigate("backward"), ["stop", "prevent"]), ["up"])),
  37797. _cache[6] || (_cache[6] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.onKeyboardNavigate("forward"), ["stop", "prevent"]), ["down"])),
  37798. _cache[7] || (_cache[7] = (0, vue.withKeys)((0, vue.withModifiers)((...args) => _ctx.onKeyboardSelect && _ctx.onKeyboardSelect(...args), ["stop", "prevent"]), ["enter"])),
  37799. _cache[8] || (_cache[8] = (0, vue.withKeys)((0, vue.withModifiers)((...args) => _ctx.handleEsc && _ctx.handleEsc(...args), ["stop", "prevent"]), ["esc"])),
  37800. _cache[9] || (_cache[9] = (0, vue.withKeys)((0, vue.withModifiers)((...args) => _ctx.handleDel && _ctx.handleDel(...args), ["stop"]), ["delete"]))
  37801. ],
  37802. onClick: _cache[10] || (_cache[10] = (0, vue.withModifiers)((...args) => _ctx.toggleMenu && _ctx.toggleMenu(...args), ["stop"]))
  37803. }, null, 46, _hoisted_1$21), _ctx.filterable ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  37804. key: 0,
  37805. ref: "calculatorRef",
  37806. "aria-hidden": "true",
  37807. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("input-calculator")),
  37808. textContent: (0, vue.toDisplayString)(_ctx.states.inputValue)
  37809. }, null, 10, _hoisted_2$13)) : (0, vue.createCommentVNode)("v-if", true)], 2),
  37810. _ctx.shouldShowPlaceholder ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  37811. key: 1,
  37812. class: (0, vue.normalizeClass)([
  37813. _ctx.nsSelect.e("selected-item"),
  37814. _ctx.nsSelect.e("placeholder"),
  37815. _ctx.nsSelect.is("transparent", !_ctx.hasModelValue || _ctx.expanded && !_ctx.states.inputValue)
  37816. ])
  37817. }, [_ctx.hasModelValue ? (0, vue.renderSlot)(_ctx.$slots, "label", {
  37818. key: 0,
  37819. index: _ctx.allOptionsValueMap.get(_ctx.modelValue)?.index ?? -1,
  37820. label: _ctx.currentPlaceholder,
  37821. value: _ctx.modelValue
  37822. }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.currentPlaceholder), 1)]) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_3$5, (0, vue.toDisplayString)(_ctx.currentPlaceholder), 1))], 2)) : (0, vue.createCommentVNode)("v-if", true)
  37823. ], 2),
  37824. (0, vue.createElementVNode)("div", {
  37825. ref: "suffixRef",
  37826. class: (0, vue.normalizeClass)(_ctx.nsSelect.e("suffix"))
  37827. }, [
  37828. _ctx.iconComponent ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  37829. key: 0,
  37830. class: (0, vue.normalizeClass)([
  37831. _ctx.nsSelect.e("caret"),
  37832. _ctx.nsInput.e("icon"),
  37833. _ctx.iconReverse
  37834. ])
  37835. }, {
  37836. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.iconComponent)))]),
  37837. _: 1
  37838. }, 8, ["class"])), [[vue.vShow, !_ctx.showClearBtn]]) : (0, vue.createCommentVNode)("v-if", true),
  37839. _ctx.showClearBtn && _ctx.clearIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  37840. key: 1,
  37841. class: (0, vue.normalizeClass)([
  37842. _ctx.nsSelect.e("caret"),
  37843. _ctx.nsInput.e("icon"),
  37844. _ctx.nsSelect.e("clear")
  37845. ]),
  37846. onClick: (0, vue.withModifiers)(_ctx.handleClear, ["prevent", "stop"])
  37847. }, {
  37848. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.clearIcon)))]),
  37849. _: 1
  37850. }, 8, ["class", "onClick"])) : (0, vue.createCommentVNode)("v-if", true),
  37851. _ctx.validateState && _ctx.validateIcon && _ctx.needStatusIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  37852. key: 2,
  37853. class: (0, vue.normalizeClass)([
  37854. _ctx.nsInput.e("icon"),
  37855. _ctx.nsInput.e("validateIcon"),
  37856. _ctx.nsInput.is("loading", _ctx.validateState === "validating")
  37857. ])
  37858. }, {
  37859. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.validateIcon)))]),
  37860. _: 1
  37861. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
  37862. ], 2)
  37863. ], 2)]),
  37864. content: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_select_menu, {
  37865. id: _ctx.contentId,
  37866. ref: "menuRef",
  37867. data: _ctx.filteredOptions,
  37868. width: _ctx.popperSize - _ctx.BORDER_HORIZONTAL_WIDTH,
  37869. "hovering-index": _ctx.states.hoveringIndex,
  37870. "scrollbar-always-on": _ctx.scrollbarAlwaysOn,
  37871. "aria-label": _ctx.ariaLabel,
  37872. onEndReached: _ctx.onEndReached
  37873. }, (0, vue.createSlots)({
  37874. default: (0, vue.withCtx)((scope) => [(0, vue.renderSlot)(_ctx.$slots, "default", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(scope)))]),
  37875. _: 2
  37876. }, [
  37877. _ctx.$slots.header ? {
  37878. name: "header",
  37879. fn: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  37880. class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "header")),
  37881. onClick: _cache[12] || (_cache[12] = (0, vue.withModifiers)(() => {}, ["stop"]))
  37882. }, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)]),
  37883. key: "0"
  37884. } : void 0,
  37885. _ctx.$slots.loading && _ctx.loading ? {
  37886. name: "loading",
  37887. fn: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "loading")) }, [(0, vue.renderSlot)(_ctx.$slots, "loading")], 2)]),
  37888. key: "1"
  37889. } : _ctx.loading || _ctx.filteredOptions.length === 0 ? {
  37890. name: "empty",
  37891. fn: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "empty")) }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.emptyText), 1)])], 2)]),
  37892. key: "2"
  37893. } : void 0,
  37894. _ctx.$slots.footer ? {
  37895. name: "footer",
  37896. fn: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  37897. class: (0, vue.normalizeClass)(_ctx.nsSelect.be("dropdown", "footer")),
  37898. onClick: _cache[13] || (_cache[13] = (0, vue.withModifiers)(() => {}, ["stop"]))
  37899. }, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)]),
  37900. key: "3"
  37901. } : void 0
  37902. ]), 1032, [
  37903. "id",
  37904. "data",
  37905. "width",
  37906. "hovering-index",
  37907. "scrollbar-always-on",
  37908. "aria-label",
  37909. "onEndReached"
  37910. ])]),
  37911. _: 3
  37912. }, 8, [
  37913. "visible",
  37914. "teleported",
  37915. "popper-class",
  37916. "popper-style",
  37917. "popper-options",
  37918. "fallback-placements",
  37919. "effect",
  37920. "placement",
  37921. "transition",
  37922. "persistent",
  37923. "append-to",
  37924. "show-arrow",
  37925. "offset",
  37926. "onBeforeShow"
  37927. ])], 34)), [[
  37928. _directive_click_outside,
  37929. _ctx.handleClickOutside,
  37930. _ctx.popperRef
  37931. ]]);
  37932. }
  37933. var select_default = /* @__PURE__ */ _plugin_vue_export_helper_default(select_vue_vue_type_script_lang_default, [["render", _sfc_render$4]]);
  37934. //#endregion
  37935. //#region ../../packages/components/select-v2/index.ts
  37936. const ElSelectV2 = withInstall(select_default);
  37937. //#endregion
  37938. //#region ../../packages/components/skeleton/src/skeleton.ts
  37939. const skeletonProps = buildProps({
  37940. animated: Boolean,
  37941. count: {
  37942. type: Number,
  37943. default: 1
  37944. },
  37945. rows: {
  37946. type: Number,
  37947. default: 3
  37948. },
  37949. loading: {
  37950. type: Boolean,
  37951. default: true
  37952. },
  37953. throttle: { type: definePropType([Number, Object]) }
  37954. });
  37955. //#endregion
  37956. //#region ../../packages/components/skeleton/src/skeleton-item.ts
  37957. const skeletonItemProps = buildProps({ variant: {
  37958. type: String,
  37959. values: [
  37960. "circle",
  37961. "rect",
  37962. "h1",
  37963. "h3",
  37964. "text",
  37965. "caption",
  37966. "p",
  37967. "image",
  37968. "button"
  37969. ],
  37970. default: "text"
  37971. } });
  37972. //#endregion
  37973. //#region ../../packages/components/skeleton/src/skeleton-item.vue?vue&type=script&setup=true&lang.ts
  37974. var skeleton_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  37975. name: "ElSkeletonItem",
  37976. __name: "skeleton-item",
  37977. props: skeletonItemProps,
  37978. setup(__props) {
  37979. const ns = useNamespace("skeleton");
  37980. return (_ctx, _cache) => {
  37981. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("item"), (0, vue.unref)(ns).e(__props.variant)]) }, [__props.variant === "image" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(picture_filled_default), { key: 0 })) : (0, vue.createCommentVNode)("v-if", true)], 2);
  37982. };
  37983. }
  37984. });
  37985. //#endregion
  37986. //#region ../../packages/components/skeleton/src/skeleton-item.vue
  37987. var skeleton_item_default = skeleton_item_vue_vue_type_script_setup_true_lang_default;
  37988. //#endregion
  37989. //#region ../../packages/components/skeleton/src/skeleton.vue?vue&type=script&setup=true&lang.ts
  37990. var skeleton_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  37991. name: "ElSkeleton",
  37992. __name: "skeleton",
  37993. props: skeletonProps,
  37994. setup(__props, { expose: __expose }) {
  37995. const props = __props;
  37996. const ns = useNamespace("skeleton");
  37997. const uiLoading = useThrottleRender((0, vue.toRef)(props, "loading"), props.throttle);
  37998. __expose({ uiLoading });
  37999. return (_ctx, _cache) => {
  38000. return (0, vue.unref)(uiLoading) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
  38001. key: 0,
  38002. class: [(0, vue.unref)(ns).b(), (0, vue.unref)(ns).is("animated", __props.animated)]
  38003. }, _ctx.$attrs), [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.count, (i) => {
  38004. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: i }, [(0, vue.unref)(uiLoading) ? (0, vue.renderSlot)(_ctx.$slots, "template", { key: i }, () => [(0, vue.createVNode)(skeleton_item_default, {
  38005. class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("first")),
  38006. variant: "p"
  38007. }, null, 8, ["class"]), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.rows, (item) => {
  38008. return (0, vue.openBlock)(), (0, vue.createBlock)(skeleton_item_default, {
  38009. key: item,
  38010. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("paragraph"), (0, vue.unref)(ns).is("last", item === __props.rows && __props.rows > 1)]),
  38011. variant: "p"
  38012. }, null, 8, ["class"]);
  38013. }), 128))]) : (0, vue.createCommentVNode)("v-if", true)], 64);
  38014. }), 128))], 16)) : (0, vue.renderSlot)(_ctx.$slots, "default", (0, vue.normalizeProps)((0, vue.mergeProps)({ key: 1 }, _ctx.$attrs)));
  38015. };
  38016. }
  38017. });
  38018. //#endregion
  38019. //#region ../../packages/components/skeleton/src/skeleton.vue
  38020. var skeleton_default = skeleton_vue_vue_type_script_setup_true_lang_default;
  38021. //#endregion
  38022. //#region ../../packages/components/skeleton/index.ts
  38023. const ElSkeleton = withInstall(skeleton_default, { SkeletonItem: skeleton_item_default });
  38024. const ElSkeletonItem = withNoopInstall(skeleton_item_default);
  38025. //#endregion
  38026. //#region ../../packages/components/slider/src/constants.ts
  38027. const sliderContextKey = Symbol("sliderContextKey");
  38028. //#endregion
  38029. //#region ../../packages/components/slider/src/slider.ts
  38030. const sliderProps = buildProps({
  38031. modelValue: {
  38032. type: definePropType([Number, Array]),
  38033. default: 0
  38034. },
  38035. id: {
  38036. type: String,
  38037. default: void 0
  38038. },
  38039. min: {
  38040. type: Number,
  38041. default: 0
  38042. },
  38043. max: {
  38044. type: Number,
  38045. default: 100
  38046. },
  38047. step: {
  38048. type: definePropType([Number, String]),
  38049. default: 1
  38050. },
  38051. showInput: Boolean,
  38052. showInputControls: {
  38053. type: Boolean,
  38054. default: true
  38055. },
  38056. size: useSizeProp,
  38057. inputSize: useSizeProp,
  38058. showStops: Boolean,
  38059. showTooltip: {
  38060. type: Boolean,
  38061. default: true
  38062. },
  38063. formatTooltip: {
  38064. type: definePropType(Function),
  38065. default: void 0
  38066. },
  38067. disabled: {
  38068. type: Boolean,
  38069. default: void 0
  38070. },
  38071. range: Boolean,
  38072. vertical: Boolean,
  38073. height: String,
  38074. rangeStartLabel: {
  38075. type: String,
  38076. default: void 0
  38077. },
  38078. rangeEndLabel: {
  38079. type: String,
  38080. default: void 0
  38081. },
  38082. formatValueText: {
  38083. type: definePropType(Function),
  38084. default: void 0
  38085. },
  38086. tooltipClass: {
  38087. type: String,
  38088. default: void 0
  38089. },
  38090. placement: {
  38091. type: String,
  38092. values: Ee,
  38093. default: "top"
  38094. },
  38095. marks: { type: definePropType(Object) },
  38096. validateEvent: {
  38097. type: Boolean,
  38098. default: true
  38099. },
  38100. persistent: {
  38101. type: Boolean,
  38102. default: true
  38103. },
  38104. ...useAriaProps(["ariaLabel"])
  38105. });
  38106. const isValidValue$1 = (value) => isNumber(value) || isArray$1(value) && value.every(isNumber);
  38107. const sliderEmits = {
  38108. [UPDATE_MODEL_EVENT]: isValidValue$1,
  38109. [INPUT_EVENT]: isValidValue$1,
  38110. [CHANGE_EVENT]: isValidValue$1
  38111. };
  38112. //#endregion
  38113. //#region ../../packages/components/slider/src/composables/use-lifecycle.ts
  38114. const useLifecycle = (props, initData, resetSize) => {
  38115. const sliderWrapper = (0, vue.ref)();
  38116. (0, vue.onMounted)(async () => {
  38117. if (props.range) {
  38118. if (isArray$1(props.modelValue)) {
  38119. initData.firstValue = Math.max(props.min, props.modelValue[0]);
  38120. initData.secondValue = Math.min(props.max, props.modelValue[1]);
  38121. } else {
  38122. initData.firstValue = props.min;
  38123. initData.secondValue = props.max;
  38124. }
  38125. initData.oldValue = [initData.firstValue, initData.secondValue];
  38126. } else {
  38127. if (!isNumber(props.modelValue) || Number.isNaN(props.modelValue)) initData.firstValue = props.min;
  38128. else initData.firstValue = Math.min(props.max, Math.max(props.min, props.modelValue));
  38129. initData.oldValue = initData.firstValue;
  38130. }
  38131. useEventListener(window, "resize", resetSize);
  38132. await (0, vue.nextTick)();
  38133. resetSize();
  38134. });
  38135. return { sliderWrapper };
  38136. };
  38137. //#endregion
  38138. //#region ../../packages/components/slider/src/composables/use-marks.ts
  38139. const useMarks = (props) => {
  38140. const markList = (0, vue.computed)(() => {
  38141. if (!props.marks) return [];
  38142. return Object.keys(props.marks).map(Number.parseFloat).sort((a, b) => a - b).filter((point) => point <= props.max && point >= props.min).map((point) => ({
  38143. point,
  38144. position: (point - props.min) * 100 / (props.max - props.min),
  38145. mark: props.marks[point]
  38146. }));
  38147. });
  38148. (0, vue.watchEffect)(() => {
  38149. if (props.step === "mark" && !props.marks) /* @__PURE__ */ debugWarn("ElSlider", "marks prop must be provided when step is mark");
  38150. if (props.marks) {
  38151. const keys = Object.keys(props.marks);
  38152. const validPoints = markList.value.map((m) => m.point);
  38153. const invalidKeys = keys.filter((key) => {
  38154. const parsed = Number.parseFloat(key);
  38155. return Number.isNaN(parsed) || !validPoints.includes(parsed);
  38156. });
  38157. if (invalidKeys.length > 0) /* @__PURE__ */ debugWarn("ElSlider", `Some marks keys are invalid (not a number or out of [min, max]): [${invalidKeys.map((k) => `'${k}'`).join(", ")}] and will be ignored.`);
  38158. }
  38159. });
  38160. return markList;
  38161. };
  38162. //#endregion
  38163. //#region ../../packages/components/slider/src/composables/use-slide.ts
  38164. const useSlide = (props, initData, emit) => {
  38165. const { formItem: elFormItem } = useFormItem();
  38166. const slider = (0, vue.shallowRef)();
  38167. const firstButton = (0, vue.ref)();
  38168. const secondButton = (0, vue.ref)();
  38169. const buttonRefs = {
  38170. firstButton,
  38171. secondButton
  38172. };
  38173. const sliderDisabled = useFormDisabled();
  38174. const minValue = (0, vue.computed)(() => {
  38175. return Math.min(initData.firstValue, initData.secondValue);
  38176. });
  38177. const maxValue = (0, vue.computed)(() => {
  38178. return Math.max(initData.firstValue, initData.secondValue);
  38179. });
  38180. const barSize = (0, vue.computed)(() => {
  38181. return props.range ? `${100 * (maxValue.value - minValue.value) / (props.max - props.min)}%` : `${100 * (initData.firstValue - props.min) / (props.max - props.min)}%`;
  38182. });
  38183. const barStart = (0, vue.computed)(() => {
  38184. return props.range ? `${100 * (minValue.value - props.min) / (props.max - props.min)}%` : "0%";
  38185. });
  38186. const runwayStyle = (0, vue.computed)(() => {
  38187. return props.vertical ? { height: props.height } : {};
  38188. });
  38189. const barStyle = (0, vue.computed)(() => {
  38190. return props.vertical ? {
  38191. height: barSize.value,
  38192. bottom: barStart.value
  38193. } : {
  38194. width: barSize.value,
  38195. left: barStart.value
  38196. };
  38197. });
  38198. const resetSize = () => {
  38199. if (slider.value) initData.sliderSize = slider.value.getBoundingClientRect()[props.vertical ? "height" : "width"];
  38200. };
  38201. const getButtonRefByPercent = (percent) => {
  38202. const targetValue = props.min + percent * (props.max - props.min) / 100;
  38203. if (!props.range) return firstButton;
  38204. let buttonRefName;
  38205. if (Math.abs(minValue.value - targetValue) < Math.abs(maxValue.value - targetValue)) buttonRefName = initData.firstValue < initData.secondValue ? "firstButton" : "secondButton";
  38206. else buttonRefName = initData.firstValue > initData.secondValue ? "firstButton" : "secondButton";
  38207. return buttonRefs[buttonRefName];
  38208. };
  38209. const setPosition = (percent) => {
  38210. const buttonRef = getButtonRefByPercent(percent);
  38211. buttonRef.value.setPosition(percent);
  38212. return buttonRef;
  38213. };
  38214. const setFirstValue = (firstValue) => {
  38215. initData.firstValue = firstValue ?? props.min;
  38216. _emit(props.range ? [minValue.value, maxValue.value] : firstValue ?? props.min);
  38217. };
  38218. const setSecondValue = (secondValue) => {
  38219. initData.secondValue = secondValue;
  38220. if (props.range) _emit([minValue.value, maxValue.value]);
  38221. };
  38222. const _emit = (val) => {
  38223. emit(UPDATE_MODEL_EVENT, val);
  38224. emit(INPUT_EVENT, val);
  38225. };
  38226. const emitChange = async () => {
  38227. await (0, vue.nextTick)();
  38228. emit(CHANGE_EVENT, props.range ? [minValue.value, maxValue.value] : props.modelValue);
  38229. };
  38230. const handleSliderPointerEvent = (event) => {
  38231. if (sliderDisabled.value || initData.dragging) return;
  38232. resetSize();
  38233. let newPercent = 0;
  38234. if (props.vertical) {
  38235. const clientY = event.touches?.item(0)?.clientY ?? event.clientY;
  38236. newPercent = (slider.value.getBoundingClientRect().bottom - clientY) / initData.sliderSize * 100;
  38237. } else newPercent = ((event.touches?.item(0)?.clientX ?? event.clientX) - slider.value.getBoundingClientRect().left) / initData.sliderSize * 100;
  38238. if (newPercent < 0 || newPercent > 100) return;
  38239. return setPosition(newPercent);
  38240. };
  38241. const onSliderWrapperPrevent = (event) => {
  38242. if (buttonRefs["firstButton"].value?.dragging || buttonRefs["secondButton"].value?.dragging) event.preventDefault();
  38243. };
  38244. const onSliderDown = async (event) => {
  38245. const buttonRef = handleSliderPointerEvent(event);
  38246. if (buttonRef) {
  38247. await (0, vue.nextTick)();
  38248. buttonRef.value.onButtonDown(event);
  38249. }
  38250. };
  38251. const onSliderClick = (event) => {
  38252. if (handleSliderPointerEvent(event)) emitChange();
  38253. };
  38254. const onSliderMarkerDown = (position) => {
  38255. if (sliderDisabled.value || initData.dragging) return;
  38256. if (setPosition(position)) emitChange();
  38257. };
  38258. return {
  38259. elFormItem,
  38260. slider,
  38261. firstButton,
  38262. secondButton,
  38263. sliderDisabled,
  38264. minValue,
  38265. maxValue,
  38266. runwayStyle,
  38267. barStyle,
  38268. resetSize,
  38269. setPosition,
  38270. emitChange,
  38271. onSliderWrapperPrevent,
  38272. onSliderClick,
  38273. onSliderDown,
  38274. onSliderMarkerDown,
  38275. setFirstValue,
  38276. setSecondValue
  38277. };
  38278. };
  38279. //#endregion
  38280. //#region ../../packages/components/slider/src/composables/use-slider-button.ts
  38281. const useTooltip = (props, formatTooltip, showTooltip) => {
  38282. const tooltip = (0, vue.ref)();
  38283. const tooltipVisible = (0, vue.ref)(false);
  38284. const enableFormat = (0, vue.computed)(() => {
  38285. return formatTooltip.value instanceof Function;
  38286. });
  38287. return {
  38288. tooltip,
  38289. tooltipVisible,
  38290. formatValue: (0, vue.computed)(() => {
  38291. return enableFormat.value && formatTooltip.value(props.modelValue) || props.modelValue;
  38292. }),
  38293. displayTooltip: debounce(() => {
  38294. showTooltip.value && (tooltipVisible.value = true);
  38295. }, 50),
  38296. hideTooltip: debounce(() => {
  38297. showTooltip.value && (tooltipVisible.value = false);
  38298. }, 50)
  38299. };
  38300. };
  38301. const useSliderButton = (props, initData, emit) => {
  38302. const { disabled, min, max, step, showTooltip, persistent, precision, sliderSize, formatTooltip, emitChange, resetSize, updateDragging, markList } = (0, vue.inject)(sliderContextKey);
  38303. const { tooltip, tooltipVisible, formatValue, displayTooltip, hideTooltip } = useTooltip(props, formatTooltip, showTooltip);
  38304. const button = (0, vue.ref)();
  38305. const currentPosition = (0, vue.computed)(() => {
  38306. return `${(props.modelValue - min.value) / (max.value - min.value) * 100}%`;
  38307. });
  38308. const wrapperStyle = (0, vue.computed)(() => {
  38309. return props.vertical ? { bottom: currentPosition.value } : { left: currentPosition.value };
  38310. });
  38311. const shouldMoveToMark = (0, vue.computed)(() => {
  38312. return step.value === "mark" && markList.value.length > 0;
  38313. });
  38314. const handleMouseEnter = () => {
  38315. initData.hovering = true;
  38316. displayTooltip();
  38317. };
  38318. const handleMouseLeave = () => {
  38319. initData.hovering = false;
  38320. if (!initData.dragging) hideTooltip();
  38321. };
  38322. const onButtonDown = (event) => {
  38323. if (disabled.value) return;
  38324. event.preventDefault();
  38325. onDragStart(event);
  38326. window.addEventListener("mousemove", onDragging);
  38327. window.addEventListener("touchmove", onDragging);
  38328. window.addEventListener("mouseup", onDragEnd);
  38329. window.addEventListener("touchend", onDragEnd);
  38330. window.addEventListener("contextmenu", onDragEnd);
  38331. button.value.focus();
  38332. };
  38333. const incrementPosition = (amount) => {
  38334. if (disabled.value) return;
  38335. initData.newPosition = Number.parseFloat(currentPosition.value) + amount / (max.value - min.value) * 100;
  38336. setPosition(initData.newPosition);
  38337. emitChange();
  38338. };
  38339. const moveToMark = (amount) => {
  38340. if (disabled.value || !markList.value.length) return;
  38341. const current = props.modelValue;
  38342. const epsilon = Number.EPSILON;
  38343. const stride = Math.abs(amount);
  38344. let target;
  38345. if (amount > 0) {
  38346. const startIndex = markList.value.findIndex((m) => m.point > current + epsilon);
  38347. if (startIndex !== -1) {
  38348. const targetIndex = Math.min(startIndex + stride - 1, markList.value.length - 1);
  38349. target = markList.value[targetIndex].point;
  38350. }
  38351. } else {
  38352. let startIndex = -1;
  38353. for (let i = markList.value.length - 1; i >= 0; i--) if (markList.value[i].point < current - epsilon) {
  38354. startIndex = i;
  38355. break;
  38356. }
  38357. if (startIndex !== -1) {
  38358. const targetIndex = Math.max(startIndex - (stride - 1), 0);
  38359. target = markList.value[targetIndex].point;
  38360. }
  38361. }
  38362. if (target !== void 0 && target !== current) {
  38363. setPosition((target - min.value) / (max.value - min.value) * 100);
  38364. emitChange();
  38365. }
  38366. };
  38367. const onLeftKeyDown = () => {
  38368. if (shouldMoveToMark.value) moveToMark(-1);
  38369. else if (isNumber(step.value)) incrementPosition(-step.value);
  38370. };
  38371. const onRightKeyDown = () => {
  38372. if (shouldMoveToMark.value) moveToMark(1);
  38373. else if (isNumber(step.value)) incrementPosition(step.value);
  38374. };
  38375. const onPageDownKeyDown = () => {
  38376. if (shouldMoveToMark.value) moveToMark(-4);
  38377. else if (isNumber(step.value)) incrementPosition(-step.value * 4);
  38378. };
  38379. const onPageUpKeyDown = () => {
  38380. if (shouldMoveToMark.value) moveToMark(4);
  38381. else if (isNumber(step.value)) incrementPosition(step.value * 4);
  38382. };
  38383. const onHomeKeyDown = () => {
  38384. if (disabled.value) return;
  38385. setPosition(0);
  38386. emitChange();
  38387. };
  38388. const onEndKeyDown = () => {
  38389. if (disabled.value) return;
  38390. setPosition(100);
  38391. emitChange();
  38392. };
  38393. const onKeyDown = (event) => {
  38394. const code = getEventCode(event);
  38395. let isPreventDefault = true;
  38396. switch (code) {
  38397. case EVENT_CODE.left:
  38398. case EVENT_CODE.down:
  38399. onLeftKeyDown();
  38400. break;
  38401. case EVENT_CODE.right:
  38402. case EVENT_CODE.up:
  38403. onRightKeyDown();
  38404. break;
  38405. case EVENT_CODE.home:
  38406. onHomeKeyDown();
  38407. break;
  38408. case EVENT_CODE.end:
  38409. onEndKeyDown();
  38410. break;
  38411. case EVENT_CODE.pageDown:
  38412. onPageDownKeyDown();
  38413. break;
  38414. case EVENT_CODE.pageUp:
  38415. onPageUpKeyDown();
  38416. break;
  38417. default:
  38418. isPreventDefault = false;
  38419. break;
  38420. }
  38421. isPreventDefault && event.preventDefault();
  38422. };
  38423. const getClientXY = (event) => {
  38424. let clientX;
  38425. let clientY;
  38426. if (event.type.startsWith("touch")) {
  38427. clientY = event.touches[0].clientY;
  38428. clientX = event.touches[0].clientX;
  38429. } else {
  38430. clientY = event.clientY;
  38431. clientX = event.clientX;
  38432. }
  38433. return {
  38434. clientX,
  38435. clientY
  38436. };
  38437. };
  38438. const onDragStart = (event) => {
  38439. initData.dragging = true;
  38440. initData.isClick = true;
  38441. const { clientX, clientY } = getClientXY(event);
  38442. if (props.vertical) initData.startY = clientY;
  38443. else initData.startX = clientX;
  38444. initData.startPosition = Number.parseFloat(currentPosition.value);
  38445. initData.newPosition = initData.startPosition;
  38446. };
  38447. const onDragging = (event) => {
  38448. if (initData.dragging) {
  38449. initData.isClick = false;
  38450. displayTooltip();
  38451. resetSize();
  38452. let diff;
  38453. const { clientX, clientY } = getClientXY(event);
  38454. if (props.vertical) {
  38455. initData.currentY = clientY;
  38456. diff = (initData.startY - initData.currentY) / sliderSize.value * 100;
  38457. } else {
  38458. initData.currentX = clientX;
  38459. diff = (initData.currentX - initData.startX) / sliderSize.value * 100;
  38460. }
  38461. initData.newPosition = initData.startPosition + diff;
  38462. setPosition(initData.newPosition);
  38463. }
  38464. };
  38465. const onDragEnd = () => {
  38466. if (initData.dragging) {
  38467. setTimeout(() => {
  38468. initData.dragging = false;
  38469. if (!initData.hovering) hideTooltip();
  38470. if (!initData.isClick) setPosition(initData.newPosition);
  38471. emitChange();
  38472. }, 0);
  38473. window.removeEventListener("mousemove", onDragging);
  38474. window.removeEventListener("touchmove", onDragging);
  38475. window.removeEventListener("mouseup", onDragEnd);
  38476. window.removeEventListener("touchend", onDragEnd);
  38477. window.removeEventListener("contextmenu", onDragEnd);
  38478. }
  38479. };
  38480. const setPosition = async (newPosition) => {
  38481. if (newPosition === null || Number.isNaN(+newPosition)) return;
  38482. newPosition = clamp$1(newPosition, 0, 100);
  38483. let value;
  38484. if (step.value === "mark") if (markList.value.length === 0) value = newPosition <= 50 ? min.value : max.value;
  38485. else value = markList.value.reduce((prev, curr) => {
  38486. return Math.abs(curr.position - newPosition) < Math.abs(prev.position - newPosition) ? curr : prev;
  38487. }).point;
  38488. else {
  38489. const fullSteps = Math.floor((max.value - min.value) / step.value);
  38490. const fullRangePercentage = fullSteps * step.value / (max.value - min.value) * 100;
  38491. const threshold = fullRangePercentage + (100 - fullRangePercentage) / 2;
  38492. if (newPosition < fullRangePercentage) {
  38493. const valueBetween = fullRangePercentage / fullSteps;
  38494. const steps = Math.round(newPosition / valueBetween);
  38495. value = min.value + steps * step.value;
  38496. } else if (newPosition < threshold) value = min.value + fullSteps * step.value;
  38497. else value = max.value;
  38498. value = Number.parseFloat(value.toFixed(precision.value));
  38499. }
  38500. if (value !== props.modelValue) emit(UPDATE_MODEL_EVENT, value);
  38501. if (!initData.dragging && props.modelValue !== initData.oldValue) initData.oldValue = props.modelValue;
  38502. await (0, vue.nextTick)();
  38503. initData.dragging && displayTooltip();
  38504. tooltip.value.updatePopper();
  38505. };
  38506. (0, vue.watch)(() => initData.dragging, (val) => {
  38507. updateDragging(val);
  38508. });
  38509. useEventListener(button, "touchstart", onButtonDown, { passive: false });
  38510. return {
  38511. disabled,
  38512. button,
  38513. tooltip,
  38514. tooltipVisible,
  38515. showTooltip,
  38516. persistent,
  38517. wrapperStyle,
  38518. formatValue,
  38519. handleMouseEnter,
  38520. handleMouseLeave,
  38521. onButtonDown,
  38522. onKeyDown,
  38523. setPosition
  38524. };
  38525. };
  38526. //#endregion
  38527. //#region ../../packages/components/slider/src/composables/use-stops.ts
  38528. const useStops = (props, initData, minValue, maxValue) => {
  38529. const stops = (0, vue.computed)(() => {
  38530. if (!props.showStops || props.min > props.max) return [];
  38531. if (props.step === "mark" || props.step === 0) {
  38532. if (props.step === 0) /* @__PURE__ */ debugWarn("ElSlider", "step should not be 0.");
  38533. return [];
  38534. }
  38535. const stopCount = Math.ceil((props.max - props.min) / props.step);
  38536. const stepWidth = 100 * props.step / (props.max - props.min);
  38537. const result = Array.from({ length: stopCount - 1 }).map((_, index) => (index + 1) * stepWidth);
  38538. if (props.range) return result.filter((step) => {
  38539. return step < 100 * (minValue.value - props.min) / (props.max - props.min) || step > 100 * (maxValue.value - props.min) / (props.max - props.min);
  38540. });
  38541. else return result.filter((step) => step > 100 * (initData.firstValue - props.min) / (props.max - props.min));
  38542. });
  38543. const getStopStyle = (position) => {
  38544. return props.vertical ? { bottom: `${position}%` } : { left: `${position}%` };
  38545. };
  38546. return {
  38547. stops,
  38548. getStopStyle
  38549. };
  38550. };
  38551. //#endregion
  38552. //#region ../../packages/components/slider/src/composables/use-watch.ts
  38553. const useWatch = (props, initData, minValue, maxValue, emit, elFormItem) => {
  38554. const _emit = (val) => {
  38555. emit(UPDATE_MODEL_EVENT, val);
  38556. emit(INPUT_EVENT, val);
  38557. };
  38558. const valueChanged = () => {
  38559. if (props.range) return ![minValue.value, maxValue.value].every((item, index) => item === initData.oldValue[index]);
  38560. else return props.modelValue !== initData.oldValue;
  38561. };
  38562. const setValues = () => {
  38563. if (props.min > props.max) throwError("Slider", "min should not be greater than max.");
  38564. const val = props.modelValue;
  38565. if (props.range && isArray$1(val)) if (val[1] < props.min) _emit([props.min, props.min]);
  38566. else if (val[0] > props.max) _emit([props.max, props.max]);
  38567. else if (val[0] < props.min) _emit([props.min, val[1]]);
  38568. else if (val[1] > props.max) _emit([val[0], props.max]);
  38569. else {
  38570. initData.firstValue = val[0];
  38571. initData.secondValue = val[1];
  38572. if (valueChanged()) {
  38573. if (props.validateEvent) elFormItem?.validate?.("change").catch(NOOP);
  38574. initData.oldValue = val.slice();
  38575. }
  38576. }
  38577. else if (!props.range && isNumber(val) && !Number.isNaN(val)) if (val < props.min) _emit(props.min);
  38578. else if (val > props.max) _emit(props.max);
  38579. else {
  38580. initData.firstValue = val;
  38581. if (valueChanged()) {
  38582. if (props.validateEvent) elFormItem?.validate?.("change").catch(NOOP);
  38583. initData.oldValue = val;
  38584. }
  38585. }
  38586. };
  38587. setValues();
  38588. (0, vue.watch)(() => initData.dragging, (val) => {
  38589. if (!val) setValues();
  38590. });
  38591. (0, vue.watch)(() => props.modelValue, (val, oldVal) => {
  38592. if (initData.dragging || isArray$1(val) && isArray$1(oldVal) && val.every((item, index) => item === oldVal[index]) && initData.firstValue === val[0] && initData.secondValue === val[1]) return;
  38593. setValues();
  38594. }, { deep: true });
  38595. (0, vue.watch)(() => [props.min, props.max], () => {
  38596. setValues();
  38597. });
  38598. };
  38599. //#endregion
  38600. //#region ../../packages/components/slider/src/button.ts
  38601. const sliderButtonProps = buildProps({
  38602. modelValue: {
  38603. type: Number,
  38604. default: 0
  38605. },
  38606. vertical: Boolean,
  38607. tooltipClass: String,
  38608. placement: {
  38609. type: String,
  38610. values: Ee,
  38611. default: "top"
  38612. }
  38613. });
  38614. const sliderButtonEmits = { [UPDATE_MODEL_EVENT]: (value) => isNumber(value) };
  38615. //#endregion
  38616. //#region ../../packages/components/slider/src/button.vue?vue&type=script&setup=true&lang.ts
  38617. const _hoisted_1$20 = ["tabindex"];
  38618. var button_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  38619. name: "ElSliderButton",
  38620. __name: "button",
  38621. props: sliderButtonProps,
  38622. emits: sliderButtonEmits,
  38623. setup(__props, { expose: __expose, emit: __emit }) {
  38624. const props = __props;
  38625. const emit = __emit;
  38626. const ns = useNamespace("slider");
  38627. const initData = (0, vue.reactive)({
  38628. hovering: false,
  38629. dragging: false,
  38630. isClick: false,
  38631. startX: 0,
  38632. currentX: 0,
  38633. startY: 0,
  38634. currentY: 0,
  38635. startPosition: 0,
  38636. newPosition: 0,
  38637. oldValue: props.modelValue
  38638. });
  38639. const tooltipPersistent = (0, vue.computed)(() => !showTooltip.value ? false : persistent.value);
  38640. const { disabled, button, tooltip, showTooltip, persistent, tooltipVisible, wrapperStyle, formatValue, handleMouseEnter, handleMouseLeave, onButtonDown, onKeyDown, setPosition } = useSliderButton(props, initData, emit);
  38641. const { hovering, dragging } = (0, vue.toRefs)(initData);
  38642. __expose({
  38643. onButtonDown,
  38644. onKeyDown,
  38645. setPosition,
  38646. hovering,
  38647. dragging
  38648. });
  38649. return (_ctx, _cache) => {
  38650. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  38651. ref_key: "button",
  38652. ref: button,
  38653. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("button-wrapper"), {
  38654. hover: (0, vue.unref)(hovering),
  38655. dragging: (0, vue.unref)(dragging)
  38656. }]),
  38657. style: (0, vue.normalizeStyle)((0, vue.unref)(wrapperStyle)),
  38658. tabindex: (0, vue.unref)(disabled) ? void 0 : 0,
  38659. onMouseenter: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(handleMouseEnter) && (0, vue.unref)(handleMouseEnter)(...args)),
  38660. onMouseleave: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleMouseLeave) && (0, vue.unref)(handleMouseLeave)(...args)),
  38661. onMousedown: _cache[2] || (_cache[2] = (...args) => (0, vue.unref)(onButtonDown) && (0, vue.unref)(onButtonDown)(...args)),
  38662. onFocus: _cache[3] || (_cache[3] = (...args) => (0, vue.unref)(handleMouseEnter) && (0, vue.unref)(handleMouseEnter)(...args)),
  38663. onBlur: _cache[4] || (_cache[4] = (...args) => (0, vue.unref)(handleMouseLeave) && (0, vue.unref)(handleMouseLeave)(...args)),
  38664. onKeydown: _cache[5] || (_cache[5] = (...args) => (0, vue.unref)(onKeyDown) && (0, vue.unref)(onKeyDown)(...args))
  38665. }, [(0, vue.createVNode)((0, vue.unref)(ElTooltip), {
  38666. ref_key: "tooltip",
  38667. ref: tooltip,
  38668. visible: (0, vue.unref)(tooltipVisible),
  38669. placement: _ctx.placement,
  38670. "fallback-placements": [
  38671. "top",
  38672. "bottom",
  38673. "right",
  38674. "left"
  38675. ],
  38676. "stop-popper-mouse-event": false,
  38677. "popper-class": _ctx.tooltipClass,
  38678. disabled: !(0, vue.unref)(showTooltip),
  38679. persistent: tooltipPersistent.value
  38680. }, {
  38681. content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(formatValue)), 1)]),
  38682. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("button"), {
  38683. hover: (0, vue.unref)(hovering),
  38684. dragging: (0, vue.unref)(dragging)
  38685. }]) }, null, 2)]),
  38686. _: 1
  38687. }, 8, [
  38688. "visible",
  38689. "placement",
  38690. "popper-class",
  38691. "disabled",
  38692. "persistent"
  38693. ])], 46, _hoisted_1$20);
  38694. };
  38695. }
  38696. });
  38697. //#endregion
  38698. //#region ../../packages/components/slider/src/button.vue
  38699. var button_default = button_vue_vue_type_script_setup_true_lang_default;
  38700. //#endregion
  38701. //#region ../../packages/components/slider/src/marker.ts
  38702. const sliderMarkerProps = buildProps({ mark: {
  38703. type: definePropType([String, Object]),
  38704. default: void 0
  38705. } });
  38706. var marker_default = (0, vue.defineComponent)({
  38707. name: "ElSliderMarker",
  38708. props: sliderMarkerProps,
  38709. setup(props) {
  38710. const ns = useNamespace("slider");
  38711. const label = (0, vue.computed)(() => {
  38712. return isString(props.mark) ? props.mark : props.mark.label;
  38713. });
  38714. const style = (0, vue.computed)(() => isString(props.mark) ? void 0 : props.mark.style);
  38715. return () => (0, vue.h)("div", {
  38716. class: ns.e("marks-text"),
  38717. style: style.value
  38718. }, label.value);
  38719. }
  38720. });
  38721. //#endregion
  38722. //#region ../../packages/components/slider/src/slider.vue?vue&type=script&setup=true&lang.ts
  38723. const _hoisted_1$19 = [
  38724. "id",
  38725. "role",
  38726. "aria-label",
  38727. "aria-labelledby"
  38728. ];
  38729. const _hoisted_2$12 = { key: 1 };
  38730. var slider_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  38731. name: "ElSlider",
  38732. __name: "slider",
  38733. props: sliderProps,
  38734. emits: sliderEmits,
  38735. setup(__props, { expose: __expose, emit: __emit }) {
  38736. const props = __props;
  38737. const emit = __emit;
  38738. const ns = useNamespace("slider");
  38739. const { t } = useLocale();
  38740. const initData = (0, vue.reactive)({
  38741. firstValue: 0,
  38742. secondValue: 0,
  38743. oldValue: 0,
  38744. dragging: false,
  38745. sliderSize: 1
  38746. });
  38747. const { elFormItem, slider, firstButton, secondButton, sliderDisabled, minValue, maxValue, runwayStyle, barStyle, resetSize, emitChange, onSliderWrapperPrevent, onSliderClick, onSliderDown, onSliderMarkerDown, setFirstValue, setSecondValue } = useSlide(props, initData, emit);
  38748. const { stops, getStopStyle } = useStops(props, initData, minValue, maxValue);
  38749. const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: elFormItem });
  38750. const sliderWrapperSize = useFormSize();
  38751. const sliderInputSize = (0, vue.computed)(() => props.inputSize || sliderWrapperSize.value);
  38752. const renderInput = (0, vue.computed)(() => {
  38753. return props.showInput && !props.range && props.step !== "mark";
  38754. });
  38755. const groupLabel = (0, vue.computed)(() => {
  38756. return props.ariaLabel || t("el.slider.defaultLabel", {
  38757. min: props.min,
  38758. max: props.max
  38759. });
  38760. });
  38761. const firstButtonLabel = (0, vue.computed)(() => {
  38762. if (props.range) return props.rangeStartLabel || t("el.slider.defaultRangeStartLabel");
  38763. else return groupLabel.value;
  38764. });
  38765. const firstValueText = (0, vue.computed)(() => {
  38766. return props.formatValueText ? props.formatValueText(firstValue.value) : `${firstValue.value}`;
  38767. });
  38768. const secondButtonLabel = (0, vue.computed)(() => {
  38769. return props.rangeEndLabel || t("el.slider.defaultRangeEndLabel");
  38770. });
  38771. const secondValueText = (0, vue.computed)(() => {
  38772. return props.formatValueText ? props.formatValueText(secondValue.value) : `${secondValue.value}`;
  38773. });
  38774. const sliderKls = (0, vue.computed)(() => [
  38775. ns.b(),
  38776. ns.m(sliderWrapperSize.value),
  38777. ns.is("vertical", props.vertical),
  38778. { [ns.m("with-input")]: renderInput.value }
  38779. ]);
  38780. const markList = useMarks(props);
  38781. useWatch(props, initData, minValue, maxValue, emit, elFormItem);
  38782. const sliderInputStep = (0, vue.computed)(() => {
  38783. return isNumber(props.step) ? props.step : 1;
  38784. });
  38785. const precision = (0, vue.computed)(() => {
  38786. const stepValue = isNumber(props.step) ? props.step : 1;
  38787. const precisions = [
  38788. props.min,
  38789. props.max,
  38790. stepValue
  38791. ].map((item) => {
  38792. const decimal = `${item}`.split(".")[1];
  38793. return decimal ? decimal.length : 0;
  38794. });
  38795. return Math.max.apply(null, precisions);
  38796. });
  38797. const { sliderWrapper } = useLifecycle(props, initData, resetSize);
  38798. const { firstValue, secondValue, sliderSize } = (0, vue.toRefs)(initData);
  38799. const updateDragging = (val) => {
  38800. initData.dragging = val;
  38801. };
  38802. useEventListener(sliderWrapper, "touchstart", onSliderWrapperPrevent, { passive: false });
  38803. useEventListener(sliderWrapper, "touchmove", onSliderWrapperPrevent, { passive: false });
  38804. (0, vue.provide)(sliderContextKey, {
  38805. ...(0, vue.toRefs)(props),
  38806. sliderSize,
  38807. disabled: sliderDisabled,
  38808. precision,
  38809. markList,
  38810. emitChange,
  38811. resetSize,
  38812. updateDragging
  38813. });
  38814. __expose({ onSliderClick });
  38815. return (_ctx, _cache) => {
  38816. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  38817. id: _ctx.range ? (0, vue.unref)(inputId) : void 0,
  38818. ref_key: "sliderWrapper",
  38819. ref: sliderWrapper,
  38820. class: (0, vue.normalizeClass)(sliderKls.value),
  38821. role: _ctx.range ? "group" : void 0,
  38822. "aria-label": _ctx.range && !(0, vue.unref)(isLabeledByFormItem) ? groupLabel.value : void 0,
  38823. "aria-labelledby": _ctx.range && (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(elFormItem)?.labelId : void 0
  38824. }, [(0, vue.createElementVNode)("div", {
  38825. ref_key: "slider",
  38826. ref: slider,
  38827. class: (0, vue.normalizeClass)([
  38828. (0, vue.unref)(ns).e("runway"),
  38829. { "show-input": renderInput.value },
  38830. (0, vue.unref)(ns).is("disabled", (0, vue.unref)(sliderDisabled))
  38831. ]),
  38832. style: (0, vue.normalizeStyle)((0, vue.unref)(runwayStyle)),
  38833. onMousedown: _cache[0] || (_cache[0] = (...args) => (0, vue.unref)(onSliderDown) && (0, vue.unref)(onSliderDown)(...args)),
  38834. onTouchstartPassive: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(onSliderDown) && (0, vue.unref)(onSliderDown)(...args))
  38835. }, [
  38836. (0, vue.createElementVNode)("div", {
  38837. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("bar")),
  38838. style: (0, vue.normalizeStyle)((0, vue.unref)(barStyle))
  38839. }, null, 6),
  38840. (0, vue.createVNode)(button_default, {
  38841. id: !_ctx.range ? (0, vue.unref)(inputId) : void 0,
  38842. ref_key: "firstButton",
  38843. ref: firstButton,
  38844. "model-value": (0, vue.unref)(firstValue),
  38845. vertical: _ctx.vertical,
  38846. "tooltip-class": _ctx.tooltipClass,
  38847. placement: _ctx.placement,
  38848. role: "slider",
  38849. "aria-label": _ctx.range || !(0, vue.unref)(isLabeledByFormItem) ? firstButtonLabel.value : void 0,
  38850. "aria-labelledby": !_ctx.range && (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(elFormItem)?.labelId : void 0,
  38851. "aria-valuemin": _ctx.min,
  38852. "aria-valuemax": _ctx.range ? (0, vue.unref)(secondValue) : _ctx.max,
  38853. "aria-valuenow": (0, vue.unref)(firstValue),
  38854. "aria-valuetext": firstValueText.value,
  38855. "aria-orientation": _ctx.vertical ? "vertical" : "horizontal",
  38856. "aria-disabled": (0, vue.unref)(sliderDisabled),
  38857. "onUpdate:modelValue": (0, vue.unref)(setFirstValue)
  38858. }, null, 8, [
  38859. "id",
  38860. "model-value",
  38861. "vertical",
  38862. "tooltip-class",
  38863. "placement",
  38864. "aria-label",
  38865. "aria-labelledby",
  38866. "aria-valuemin",
  38867. "aria-valuemax",
  38868. "aria-valuenow",
  38869. "aria-valuetext",
  38870. "aria-orientation",
  38871. "aria-disabled",
  38872. "onUpdate:modelValue"
  38873. ]),
  38874. _ctx.range ? ((0, vue.openBlock)(), (0, vue.createBlock)(button_default, {
  38875. key: 0,
  38876. ref_key: "secondButton",
  38877. ref: secondButton,
  38878. "model-value": (0, vue.unref)(secondValue),
  38879. vertical: _ctx.vertical,
  38880. "tooltip-class": _ctx.tooltipClass,
  38881. placement: _ctx.placement,
  38882. role: "slider",
  38883. "aria-label": secondButtonLabel.value,
  38884. "aria-valuemin": (0, vue.unref)(firstValue),
  38885. "aria-valuemax": _ctx.max,
  38886. "aria-valuenow": (0, vue.unref)(secondValue),
  38887. "aria-valuetext": secondValueText.value,
  38888. "aria-orientation": _ctx.vertical ? "vertical" : "horizontal",
  38889. "aria-disabled": (0, vue.unref)(sliderDisabled),
  38890. "onUpdate:modelValue": (0, vue.unref)(setSecondValue)
  38891. }, null, 8, [
  38892. "model-value",
  38893. "vertical",
  38894. "tooltip-class",
  38895. "placement",
  38896. "aria-label",
  38897. "aria-valuemin",
  38898. "aria-valuemax",
  38899. "aria-valuenow",
  38900. "aria-valuetext",
  38901. "aria-orientation",
  38902. "aria-disabled",
  38903. "onUpdate:modelValue"
  38904. ])) : (0, vue.createCommentVNode)("v-if", true),
  38905. _ctx.showStops ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$12, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(stops), (item, key) => {
  38906. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  38907. key,
  38908. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("stop")),
  38909. style: (0, vue.normalizeStyle)((0, vue.unref)(getStopStyle)(item))
  38910. }, null, 6);
  38911. }), 128))])) : (0, vue.createCommentVNode)("v-if", true),
  38912. (0, vue.unref)(markList).length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [(0, vue.createElementVNode)("div", null, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(markList), (item, key) => {
  38913. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  38914. key,
  38915. style: (0, vue.normalizeStyle)((0, vue.unref)(getStopStyle)(item.position)),
  38916. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("stop"), (0, vue.unref)(ns).e("marks-stop")])
  38917. }, null, 6);
  38918. }), 128))]), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("marks")) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(markList), (item, key) => {
  38919. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(marker_default), {
  38920. key,
  38921. mark: item.mark,
  38922. style: (0, vue.normalizeStyle)((0, vue.unref)(getStopStyle)(item.position)),
  38923. onMousedown: (0, vue.withModifiers)(($event) => (0, vue.unref)(onSliderMarkerDown)(item.position), ["stop"])
  38924. }, null, 8, [
  38925. "mark",
  38926. "style",
  38927. "onMousedown"
  38928. ]);
  38929. }), 128))], 2)], 64)) : (0, vue.createCommentVNode)("v-if", true)
  38930. ], 38), renderInput.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElInputNumber), {
  38931. key: 0,
  38932. ref: "input",
  38933. "model-value": (0, vue.unref)(firstValue),
  38934. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input")),
  38935. step: sliderInputStep.value,
  38936. disabled: (0, vue.unref)(sliderDisabled),
  38937. controls: _ctx.showInputControls,
  38938. min: _ctx.min,
  38939. max: _ctx.max,
  38940. precision: precision.value,
  38941. size: sliderInputSize.value,
  38942. "onUpdate:modelValue": (0, vue.unref)(setFirstValue),
  38943. onChange: (0, vue.unref)(emitChange)
  38944. }, null, 8, [
  38945. "model-value",
  38946. "class",
  38947. "step",
  38948. "disabled",
  38949. "controls",
  38950. "min",
  38951. "max",
  38952. "precision",
  38953. "size",
  38954. "onUpdate:modelValue",
  38955. "onChange"
  38956. ])) : (0, vue.createCommentVNode)("v-if", true)], 10, _hoisted_1$19);
  38957. };
  38958. }
  38959. });
  38960. //#endregion
  38961. //#region ../../packages/components/slider/src/slider.vue
  38962. var slider_default = slider_vue_vue_type_script_setup_true_lang_default;
  38963. //#endregion
  38964. //#region ../../packages/components/slider/index.ts
  38965. const ElSlider = withInstall(slider_default);
  38966. //#endregion
  38967. //#region ../../packages/components/space/src/item.ts
  38968. const spaceItemProps = buildProps({ prefixCls: { type: String } });
  38969. const SpaceItem = (0, vue.defineComponent)({
  38970. name: "ElSpaceItem",
  38971. props: spaceItemProps,
  38972. setup(props, { slots }) {
  38973. const ns = useNamespace("space");
  38974. const classes = (0, vue.computed)(() => `${props.prefixCls || ns.b()}__item`);
  38975. return () => (0, vue.h)("div", { class: classes.value }, (0, vue.renderSlot)(slots, "default"));
  38976. }
  38977. });
  38978. //#endregion
  38979. //#region ../../packages/components/space/src/use-space.ts
  38980. const SIZE_MAP = {
  38981. small: 8,
  38982. default: 12,
  38983. large: 16
  38984. };
  38985. function useSpace(props) {
  38986. const ns = useNamespace("space");
  38987. const classes = (0, vue.computed)(() => [
  38988. ns.b(),
  38989. ns.m(props.direction),
  38990. props.class
  38991. ]);
  38992. const horizontalSize = (0, vue.ref)(0);
  38993. const verticalSize = (0, vue.ref)(0);
  38994. const containerStyle = (0, vue.computed)(() => {
  38995. return [
  38996. props.wrap || props.fill ? { flexWrap: "wrap" } : {},
  38997. { alignItems: props.alignment },
  38998. {
  38999. rowGap: `${verticalSize.value}px`,
  39000. columnGap: `${horizontalSize.value}px`
  39001. },
  39002. props.style
  39003. ];
  39004. });
  39005. const itemStyle = (0, vue.computed)(() => {
  39006. return props.fill ? {
  39007. flexGrow: 1,
  39008. minWidth: `${props.fillRatio}%`
  39009. } : {};
  39010. });
  39011. (0, vue.watchEffect)(() => {
  39012. const { size = "small", wrap, direction: dir, fill } = props;
  39013. if (isArray$1(size)) {
  39014. const [h = 0, v = 0] = size;
  39015. horizontalSize.value = h;
  39016. verticalSize.value = v;
  39017. } else {
  39018. let val;
  39019. if (isNumber(size)) val = size;
  39020. else val = SIZE_MAP[size || "small"] || SIZE_MAP.small;
  39021. if ((wrap || fill) && dir === "horizontal") horizontalSize.value = verticalSize.value = val;
  39022. else if (dir === "horizontal") {
  39023. horizontalSize.value = val;
  39024. verticalSize.value = 0;
  39025. } else {
  39026. verticalSize.value = val;
  39027. horizontalSize.value = 0;
  39028. }
  39029. }
  39030. });
  39031. return {
  39032. classes,
  39033. containerStyle,
  39034. itemStyle
  39035. };
  39036. }
  39037. //#endregion
  39038. //#region ../../packages/components/space/src/space.ts
  39039. const spaceProps = buildProps({
  39040. direction: {
  39041. type: String,
  39042. values: ["horizontal", "vertical"],
  39043. default: "horizontal"
  39044. },
  39045. class: {
  39046. type: definePropType([
  39047. String,
  39048. Object,
  39049. Array
  39050. ]),
  39051. default: ""
  39052. },
  39053. style: {
  39054. type: definePropType([
  39055. String,
  39056. Array,
  39057. Object,
  39058. Boolean
  39059. ]),
  39060. default: ""
  39061. },
  39062. alignment: {
  39063. type: definePropType(String),
  39064. default: "center"
  39065. },
  39066. prefixCls: { type: String },
  39067. spacer: {
  39068. type: definePropType([
  39069. Object,
  39070. String,
  39071. Number,
  39072. Array
  39073. ]),
  39074. default: null,
  39075. validator: (val) => (0, vue.isVNode)(val) || isNumber(val) || isString(val)
  39076. },
  39077. wrap: Boolean,
  39078. fill: Boolean,
  39079. fillRatio: {
  39080. type: Number,
  39081. default: 100
  39082. },
  39083. size: {
  39084. type: [
  39085. String,
  39086. Array,
  39087. Number
  39088. ],
  39089. values: componentSizes,
  39090. validator: (val) => {
  39091. return isNumber(val) || isArray$1(val) && val.length === 2 && val.every(isNumber);
  39092. }
  39093. }
  39094. });
  39095. const Space = (0, vue.defineComponent)({
  39096. name: "ElSpace",
  39097. props: spaceProps,
  39098. setup(props, { slots }) {
  39099. const { classes, containerStyle, itemStyle } = useSpace(props);
  39100. function extractChildren(children, parentKey = "", extractedChildren = []) {
  39101. const { prefixCls } = props;
  39102. children.forEach((child, loopKey) => {
  39103. if (isFragment(child)) {
  39104. if (isArray$1(child.children)) child.children.forEach((nested, key) => {
  39105. if (isFragment(nested) && isArray$1(nested.children)) extractChildren(nested.children, `${parentKey + key}-`, extractedChildren);
  39106. else if ((0, vue.isVNode)(nested) && nested?.type === vue.Comment) extractedChildren.push(nested);
  39107. else extractedChildren.push((0, vue.createVNode)(SpaceItem, {
  39108. style: itemStyle.value,
  39109. prefixCls,
  39110. key: `nested-${parentKey + key}`
  39111. }, { default: () => [nested] }, 8 | 4, ["style", "prefixCls"]));
  39112. });
  39113. } else if (isValidElementNode(child)) extractedChildren.push((0, vue.createVNode)(SpaceItem, {
  39114. style: itemStyle.value,
  39115. prefixCls,
  39116. key: `LoopKey${parentKey + loopKey}`
  39117. }, { default: () => [child] }, 8 | 4, ["style", "prefixCls"]));
  39118. });
  39119. return extractedChildren;
  39120. }
  39121. return () => {
  39122. const { spacer, direction } = props;
  39123. const children = (0, vue.renderSlot)(slots, "default", { key: 0 }, () => []);
  39124. if ((children.children ?? []).length === 0) return null;
  39125. if (isArray$1(children.children)) {
  39126. let extractedChildren = extractChildren(children.children);
  39127. if (spacer) {
  39128. const len = extractedChildren.length - 1;
  39129. extractedChildren = extractedChildren.reduce((acc, child, idx) => {
  39130. const children = [...acc, child];
  39131. if (idx !== len) children.push((0, vue.createVNode)("span", {
  39132. style: [itemStyle.value, direction === "vertical" ? "width: 100%" : null],
  39133. key: idx
  39134. }, [(0, vue.isVNode)(spacer) ? spacer : (0, vue.createTextVNode)(spacer, 1)], 4));
  39135. return children;
  39136. }, []);
  39137. }
  39138. return (0, vue.createVNode)("div", {
  39139. class: classes.value,
  39140. style: containerStyle.value
  39141. }, extractedChildren, 4 | 2);
  39142. }
  39143. return children.children;
  39144. };
  39145. }
  39146. });
  39147. //#endregion
  39148. //#region ../../packages/components/space/index.ts
  39149. const ElSpace = withInstall(Space);
  39150. //#endregion
  39151. //#region ../../packages/components/statistic/src/statistic.ts
  39152. const statisticProps = buildProps({
  39153. decimalSeparator: {
  39154. type: String,
  39155. default: "."
  39156. },
  39157. groupSeparator: {
  39158. type: String,
  39159. default: ","
  39160. },
  39161. precision: {
  39162. type: Number,
  39163. default: 0
  39164. },
  39165. formatter: Function,
  39166. value: {
  39167. type: definePropType([Number, Object]),
  39168. default: 0
  39169. },
  39170. prefix: String,
  39171. suffix: String,
  39172. title: String,
  39173. valueStyle: {
  39174. type: definePropType([
  39175. String,
  39176. Object,
  39177. Array,
  39178. Boolean
  39179. ]),
  39180. default: void 0
  39181. }
  39182. });
  39183. //#endregion
  39184. //#region ../../packages/components/statistic/src/statistic.vue?vue&type=script&setup=true&lang.ts
  39185. var statistic_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  39186. name: "ElStatistic",
  39187. __name: "statistic",
  39188. props: statisticProps,
  39189. setup(__props, { expose: __expose }) {
  39190. const props = __props;
  39191. const ns = useNamespace("statistic");
  39192. const displayValue = (0, vue.computed)(() => {
  39193. const { value, formatter, precision, decimalSeparator, groupSeparator } = props;
  39194. if (isFunction$1(formatter)) return formatter(value);
  39195. if (!isNumber(value) || Number.isNaN(value)) return value;
  39196. let [integer, decimal = ""] = String(value).split(".");
  39197. decimal = decimal.padEnd(precision, "0").slice(0, precision > 0 ? precision : 0);
  39198. integer = integer.replace(/\B(?=(\d{3})+(?!\d))/g, groupSeparator);
  39199. return [integer, decimal].join(decimal ? decimalSeparator : "");
  39200. });
  39201. __expose({ displayValue });
  39202. return (_ctx, _cache) => {
  39203. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [_ctx.$slots.title || __props.title ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39204. key: 0,
  39205. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("head"))
  39206. }, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [
  39207. _ctx.$slots.prefix || __props.prefix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39208. key: 0,
  39209. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("prefix"))
  39210. }, [(0, vue.renderSlot)(_ctx.$slots, "prefix", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(__props.prefix), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  39211. (0, vue.createElementVNode)("span", {
  39212. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("number")),
  39213. style: (0, vue.normalizeStyle)(__props.valueStyle)
  39214. }, (0, vue.toDisplayString)(displayValue.value), 7),
  39215. _ctx.$slots.suffix || __props.suffix ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39216. key: 1,
  39217. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("suffix"))
  39218. }, [(0, vue.renderSlot)(_ctx.$slots, "suffix", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(__props.suffix), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true)
  39219. ], 2)], 2);
  39220. };
  39221. }
  39222. });
  39223. //#endregion
  39224. //#region ../../packages/components/statistic/src/statistic.vue
  39225. var statistic_default = statistic_vue_vue_type_script_setup_true_lang_default;
  39226. //#endregion
  39227. //#region ../../packages/components/statistic/index.ts
  39228. const ElStatistic = withInstall(statistic_default);
  39229. //#endregion
  39230. //#region ../../packages/components/countdown/src/countdown.ts
  39231. const countdownProps = buildProps({
  39232. format: {
  39233. type: String,
  39234. default: "HH:mm:ss"
  39235. },
  39236. prefix: String,
  39237. suffix: String,
  39238. title: String,
  39239. value: {
  39240. type: definePropType([Number, Object]),
  39241. default: 0
  39242. },
  39243. valueStyle: {
  39244. type: definePropType([
  39245. String,
  39246. Object,
  39247. Array,
  39248. Boolean
  39249. ]),
  39250. default: void 0
  39251. }
  39252. });
  39253. const countdownEmits = {
  39254. finish: () => true,
  39255. [CHANGE_EVENT]: (value) => isNumber(value)
  39256. };
  39257. //#endregion
  39258. //#region ../../packages/components/countdown/src/utils.ts
  39259. const timeUnits$1 = [
  39260. ["Y", 1e3 * 60 * 60 * 24 * 365],
  39261. ["M", 1e3 * 60 * 60 * 24 * 30],
  39262. ["D", 1e3 * 60 * 60 * 24],
  39263. ["H", 1e3 * 60 * 60],
  39264. ["m", 1e3 * 60],
  39265. ["s", 1e3],
  39266. ["S", 1]
  39267. ];
  39268. const getTime = (value) => {
  39269. return isNumber(value) ? new Date(value).getTime() : value.valueOf();
  39270. };
  39271. const formatTime$1 = (timestamp, format) => {
  39272. let timeLeft = timestamp;
  39273. return timeUnits$1.reduce((current, [name, unit]) => {
  39274. const replaceRegex = new RegExp(`${name}+(?![^\\[\\]]*\\])`, "g");
  39275. if (replaceRegex.test(current)) {
  39276. const value = Math.floor(timeLeft / unit);
  39277. timeLeft -= value * unit;
  39278. return current.replace(replaceRegex, (match) => String(value).padStart(match.length, "0"));
  39279. }
  39280. return current;
  39281. }, format).replace(/\[([^\]]*)]/g, "$1");
  39282. };
  39283. //#endregion
  39284. //#region ../../packages/components/countdown/src/countdown.vue?vue&type=script&setup=true&lang.ts
  39285. var countdown_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  39286. name: "ElCountdown",
  39287. __name: "countdown",
  39288. props: countdownProps,
  39289. emits: countdownEmits,
  39290. setup(__props, { expose: __expose, emit: __emit }) {
  39291. const props = __props;
  39292. const emit = __emit;
  39293. let timer;
  39294. const rawValue = (0, vue.ref)(0);
  39295. const displayValue = (0, vue.computed)(() => formatTime$1(rawValue.value, props.format));
  39296. const formatter = (val) => formatTime$1(val, props.format);
  39297. const stopTimer = () => {
  39298. if (timer) {
  39299. cAF(timer);
  39300. timer = void 0;
  39301. }
  39302. };
  39303. const startTimer = () => {
  39304. const timestamp = getTime(props.value);
  39305. const frameFunc = () => {
  39306. let diff = timestamp - Date.now();
  39307. emit(CHANGE_EVENT, diff);
  39308. if (diff <= 0) {
  39309. diff = 0;
  39310. stopTimer();
  39311. emit("finish");
  39312. } else timer = rAF(frameFunc);
  39313. rawValue.value = diff;
  39314. };
  39315. timer = rAF(frameFunc);
  39316. };
  39317. (0, vue.onMounted)(() => {
  39318. rawValue.value = getTime(props.value) - Date.now();
  39319. (0, vue.watch)(() => [props.value, props.format], () => {
  39320. stopTimer();
  39321. startTimer();
  39322. }, { immediate: true });
  39323. });
  39324. (0, vue.onBeforeUnmount)(() => {
  39325. stopTimer();
  39326. });
  39327. __expose({ displayValue });
  39328. return (_ctx, _cache) => {
  39329. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElStatistic), {
  39330. value: rawValue.value,
  39331. title: __props.title,
  39332. prefix: __props.prefix,
  39333. suffix: __props.suffix,
  39334. "value-style": __props.valueStyle,
  39335. formatter
  39336. }, (0, vue.createSlots)({ _: 2 }, [(0, vue.renderList)(_ctx.$slots, (_, name) => {
  39337. return {
  39338. name,
  39339. fn: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, name)])
  39340. };
  39341. })]), 1032, [
  39342. "value",
  39343. "title",
  39344. "prefix",
  39345. "suffix",
  39346. "value-style"
  39347. ]);
  39348. };
  39349. }
  39350. });
  39351. //#endregion
  39352. //#region ../../packages/components/countdown/src/countdown.vue
  39353. var countdown_default = countdown_vue_vue_type_script_setup_true_lang_default;
  39354. //#endregion
  39355. //#region ../../packages/components/countdown/index.ts
  39356. const ElCountdown = withInstall(countdown_default);
  39357. //#endregion
  39358. //#region ../../packages/components/steps/src/steps.ts
  39359. const stepsProps = buildProps({
  39360. space: {
  39361. type: [Number, String],
  39362. default: ""
  39363. },
  39364. active: {
  39365. type: Number,
  39366. default: 0
  39367. },
  39368. direction: {
  39369. type: String,
  39370. default: "horizontal",
  39371. values: ["horizontal", "vertical"]
  39372. },
  39373. alignCenter: { type: Boolean },
  39374. simple: { type: Boolean },
  39375. finishStatus: {
  39376. type: String,
  39377. values: [
  39378. "wait",
  39379. "process",
  39380. "finish",
  39381. "error",
  39382. "success"
  39383. ],
  39384. default: "finish"
  39385. },
  39386. processStatus: {
  39387. type: String,
  39388. values: [
  39389. "wait",
  39390. "process",
  39391. "finish",
  39392. "error",
  39393. "success"
  39394. ],
  39395. default: "process"
  39396. }
  39397. });
  39398. const stepsEmits = { [CHANGE_EVENT]: (newVal, oldVal) => [newVal, oldVal].every(isNumber) };
  39399. //#endregion
  39400. //#region ../../packages/components/steps/src/tokens.ts
  39401. const STEPS_INJECTION_KEY = "ElSteps";
  39402. //#endregion
  39403. //#region ../../packages/components/steps/src/steps.vue?vue&type=script&setup=true&lang.ts
  39404. var steps_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  39405. name: "ElSteps",
  39406. __name: "steps",
  39407. props: stepsProps,
  39408. emits: stepsEmits,
  39409. setup(__props, { emit: __emit }) {
  39410. const props = __props;
  39411. const emit = __emit;
  39412. const ns = useNamespace("steps");
  39413. const { children: steps, addChild: addStep, removeChild: removeStep, ChildrenSorter: StepsSorter } = useOrderedChildren((0, vue.getCurrentInstance)(), "ElStep");
  39414. (0, vue.watch)(steps, () => {
  39415. steps.value.forEach((instance, index) => {
  39416. instance.setIndex(index);
  39417. });
  39418. });
  39419. (0, vue.provide)(STEPS_INJECTION_KEY, {
  39420. props,
  39421. steps,
  39422. addStep,
  39423. removeStep
  39424. });
  39425. (0, vue.watch)(() => props.active, (newVal, oldVal) => {
  39426. emit(CHANGE_EVENT, newVal, oldVal);
  39427. });
  39428. return (_ctx, _cache) => {
  39429. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).m(__props.simple ? "simple" : __props.direction)]) }, [(0, vue.renderSlot)(_ctx.$slots, "default"), (0, vue.createVNode)((0, vue.unref)(StepsSorter))], 2);
  39430. };
  39431. }
  39432. });
  39433. //#endregion
  39434. //#region ../../packages/components/steps/src/steps.vue
  39435. var steps_default$1 = steps_vue_vue_type_script_setup_true_lang_default;
  39436. //#endregion
  39437. //#region ../../packages/components/steps/src/item.ts
  39438. const stepProps = buildProps({
  39439. title: {
  39440. type: String,
  39441. default: ""
  39442. },
  39443. icon: { type: iconPropType },
  39444. description: {
  39445. type: String,
  39446. default: ""
  39447. },
  39448. status: {
  39449. type: String,
  39450. values: [
  39451. "",
  39452. "wait",
  39453. "process",
  39454. "finish",
  39455. "error",
  39456. "success"
  39457. ],
  39458. default: ""
  39459. }
  39460. });
  39461. //#endregion
  39462. //#region ../../packages/components/steps/src/item.vue?vue&type=script&setup=true&lang.ts
  39463. var item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  39464. name: "ElStep",
  39465. __name: "item",
  39466. props: stepProps,
  39467. setup(__props) {
  39468. const props = __props;
  39469. const ns = useNamespace("step");
  39470. const index = (0, vue.ref)(-1);
  39471. const lineStyle = (0, vue.ref)({});
  39472. const internalStatus = (0, vue.ref)("");
  39473. const parent = (0, vue.inject)(STEPS_INJECTION_KEY);
  39474. const currentInstance = (0, vue.getCurrentInstance)();
  39475. let stepDiff = 0;
  39476. let beforeActive = 0;
  39477. (0, vue.onMounted)(() => {
  39478. (0, vue.watch)([
  39479. () => parent.props.active,
  39480. () => parent.props.processStatus,
  39481. () => parent.props.finishStatus
  39482. ], ([active], [oldActive]) => {
  39483. beforeActive = oldActive || 0;
  39484. stepDiff = active - beforeActive;
  39485. updateStatus(active);
  39486. }, { immediate: true });
  39487. });
  39488. const currentStatus = (0, vue.computed)(() => {
  39489. return props.status || internalStatus.value;
  39490. });
  39491. const prevInternalStatus = (0, vue.computed)(() => {
  39492. const prevStep = parent.steps.value[index.value - 1];
  39493. return prevStep ? prevStep.internalStatus.value : "wait";
  39494. });
  39495. const isCenter = (0, vue.computed)(() => {
  39496. return parent.props.alignCenter;
  39497. });
  39498. const isVertical = (0, vue.computed)(() => {
  39499. return parent.props.direction === "vertical";
  39500. });
  39501. const isSimple = (0, vue.computed)(() => {
  39502. return parent.props.simple;
  39503. });
  39504. const stepsCount = (0, vue.computed)(() => {
  39505. return parent.steps.value.length;
  39506. });
  39507. const isLast = (0, vue.computed)(() => {
  39508. return parent.steps.value[stepsCount.value - 1]?.uid === currentInstance.uid;
  39509. });
  39510. const space = (0, vue.computed)(() => {
  39511. return isSimple.value ? "" : parent.props.space;
  39512. });
  39513. const containerKls = (0, vue.computed)(() => {
  39514. return [
  39515. ns.b(),
  39516. ns.is(isSimple.value ? "simple" : parent.props.direction),
  39517. ns.is("flex", isLast.value && !space.value && !isCenter.value),
  39518. ns.is("center", isCenter.value && !isVertical.value && !isSimple.value)
  39519. ];
  39520. });
  39521. const style = (0, vue.computed)(() => {
  39522. const style = { flexBasis: isNumber(space.value) ? `${space.value}px` : space.value ? space.value : `${100 / (stepsCount.value - (isCenter.value ? 0 : 1))}%` };
  39523. if (isVertical.value) return style;
  39524. if (isLast.value) style.maxWidth = `${100 / stepsCount.value}%`;
  39525. return style;
  39526. });
  39527. const setIndex = (val) => {
  39528. index.value = val;
  39529. };
  39530. const calcProgress = (status) => {
  39531. const isWait = status === "wait";
  39532. const style = { transitionDelay: `${Math.abs(stepDiff) === 1 ? 0 : stepDiff > 0 ? (index.value + 1 - beforeActive) * 150 : -(index.value + 1 - parent.props.active) * 150}ms` };
  39533. const step = status === parent.props.processStatus || isWait ? 0 : 100;
  39534. style.borderWidth = step && !isSimple.value ? "1px" : 0;
  39535. style[parent.props.direction === "vertical" ? "height" : "width"] = `${step}%`;
  39536. lineStyle.value = style;
  39537. };
  39538. const updateStatus = (activeIndex) => {
  39539. if (activeIndex > index.value) internalStatus.value = parent.props.finishStatus;
  39540. else if (activeIndex === index.value && prevInternalStatus.value !== "error") internalStatus.value = parent.props.processStatus;
  39541. else internalStatus.value = "wait";
  39542. const prevChild = parent.steps.value[index.value - 1];
  39543. if (prevChild) prevChild.calcProgress(internalStatus.value);
  39544. };
  39545. const stepItemState = {
  39546. uid: currentInstance.uid,
  39547. getVnode: () => currentInstance.vnode,
  39548. currentStatus,
  39549. internalStatus,
  39550. setIndex,
  39551. calcProgress
  39552. };
  39553. parent.addStep(stepItemState);
  39554. (0, vue.onBeforeUnmount)(() => {
  39555. parent.removeStep(stepItemState);
  39556. });
  39557. return (_ctx, _cache) => {
  39558. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39559. style: (0, vue.normalizeStyle)(style.value),
  39560. class: (0, vue.normalizeClass)(containerKls.value)
  39561. }, [
  39562. (0, vue.createCommentVNode)(" icon & line "),
  39563. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("head"), (0, vue.unref)(ns).is(currentStatus.value)]) }, [!isSimple.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39564. key: 0,
  39565. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("line"))
  39566. }, [(0, vue.createElementVNode)("i", {
  39567. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("line-inner")),
  39568. style: (0, vue.normalizeStyle)(lineStyle.value)
  39569. }, null, 6)], 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), (0, vue.unref)(ns).is(__props.icon || _ctx.$slots.icon ? "icon" : "text")]) }, [(0, vue.renderSlot)(_ctx.$slots, "icon", {}, () => [__props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  39570. key: 0,
  39571. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon-inner"))
  39572. }, {
  39573. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
  39574. _: 1
  39575. }, 8, ["class"])) : currentStatus.value === "success" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  39576. key: 1,
  39577. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon-inner"), (0, vue.unref)(ns).is("status")])
  39578. }, {
  39579. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(check_default))]),
  39580. _: 1
  39581. }, 8, ["class"])) : currentStatus.value === "error" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  39582. key: 2,
  39583. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon-inner"), (0, vue.unref)(ns).is("status")])
  39584. }, {
  39585. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
  39586. _: 1
  39587. }, 8, ["class"])) : !isSimple.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39588. key: 3,
  39589. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon-inner"))
  39590. }, (0, vue.toDisplayString)(index.value + 1), 3)) : (0, vue.createCommentVNode)("v-if", true)])], 2)], 2),
  39591. (0, vue.createCommentVNode)(" title & description "),
  39592. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("main")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("title"), (0, vue.unref)(ns).is(currentStatus.value)]) }, [(0, vue.renderSlot)(_ctx.$slots, "title", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 2), isSimple.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39593. key: 0,
  39594. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("arrow"))
  39595. }, null, 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39596. key: 1,
  39597. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("description"), (0, vue.unref)(ns).is(currentStatus.value)])
  39598. }, [(0, vue.renderSlot)(_ctx.$slots, "description", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.description), 1)])], 2))], 2)
  39599. ], 6);
  39600. };
  39601. }
  39602. });
  39603. //#endregion
  39604. //#region ../../packages/components/steps/src/item.vue
  39605. var item_default = item_vue_vue_type_script_setup_true_lang_default;
  39606. //#endregion
  39607. //#region ../../packages/components/steps/index.ts
  39608. const ElSteps = withInstall(steps_default$1, { Step: item_default });
  39609. const ElStep = withNoopInstall(item_default);
  39610. //#endregion
  39611. //#region ../../packages/components/switch/src/switch.ts
  39612. const switchProps = buildProps({
  39613. modelValue: {
  39614. type: [
  39615. Boolean,
  39616. String,
  39617. Number
  39618. ],
  39619. default: false
  39620. },
  39621. disabled: {
  39622. type: Boolean,
  39623. default: void 0
  39624. },
  39625. loading: Boolean,
  39626. size: {
  39627. type: String,
  39628. validator: isValidComponentSize
  39629. },
  39630. width: {
  39631. type: [String, Number],
  39632. default: ""
  39633. },
  39634. inlinePrompt: Boolean,
  39635. inactiveActionIcon: { type: iconPropType },
  39636. activeActionIcon: { type: iconPropType },
  39637. activeIcon: { type: iconPropType },
  39638. inactiveIcon: { type: iconPropType },
  39639. activeText: {
  39640. type: String,
  39641. default: ""
  39642. },
  39643. inactiveText: {
  39644. type: String,
  39645. default: ""
  39646. },
  39647. activeValue: {
  39648. type: [
  39649. Boolean,
  39650. String,
  39651. Number
  39652. ],
  39653. default: true
  39654. },
  39655. inactiveValue: {
  39656. type: [
  39657. Boolean,
  39658. String,
  39659. Number
  39660. ],
  39661. default: false
  39662. },
  39663. name: {
  39664. type: String,
  39665. default: ""
  39666. },
  39667. validateEvent: {
  39668. type: Boolean,
  39669. default: true
  39670. },
  39671. beforeChange: { type: definePropType(Function) },
  39672. id: String,
  39673. tabindex: { type: [String, Number] },
  39674. ...useAriaProps(["ariaLabel"])
  39675. });
  39676. const switchEmits = {
  39677. [UPDATE_MODEL_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val),
  39678. [CHANGE_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val),
  39679. [INPUT_EVENT]: (val) => isBoolean(val) || isString(val) || isNumber(val)
  39680. };
  39681. //#endregion
  39682. //#region ../../packages/components/switch/src/switch.vue?vue&type=script&setup=true&lang.ts
  39683. const _hoisted_1$18 = [
  39684. "id",
  39685. "aria-checked",
  39686. "aria-disabled",
  39687. "aria-label",
  39688. "name",
  39689. "true-value",
  39690. "false-value",
  39691. "disabled",
  39692. "tabindex"
  39693. ];
  39694. const _hoisted_2$11 = ["aria-hidden"];
  39695. const _hoisted_3$4 = { key: 1 };
  39696. const _hoisted_4$3 = { key: 1 };
  39697. const _hoisted_5$1 = ["aria-hidden"];
  39698. const COMPONENT_NAME$6 = "ElSwitch";
  39699. var switch_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  39700. name: COMPONENT_NAME$6,
  39701. __name: "switch",
  39702. props: switchProps,
  39703. emits: switchEmits,
  39704. setup(__props, { expose: __expose, emit: __emit }) {
  39705. const props = __props;
  39706. const emit = __emit;
  39707. const { formItem } = useFormItem();
  39708. const switchSize = useFormSize();
  39709. const ns = useNamespace("switch");
  39710. const { inputId } = useFormItemInputId(props, { formItemContext: formItem });
  39711. const switchDisabled = useFormDisabled((0, vue.computed)(() => {
  39712. if (props.loading) return true;
  39713. }));
  39714. const isControlled = (0, vue.ref)(props.modelValue !== false);
  39715. const input = (0, vue.shallowRef)();
  39716. const switchKls = (0, vue.computed)(() => [
  39717. ns.b(),
  39718. ns.m(switchSize.value),
  39719. ns.is("disabled", switchDisabled.value),
  39720. ns.is("checked", checked.value)
  39721. ]);
  39722. const labelLeftKls = (0, vue.computed)(() => [
  39723. ns.e("label"),
  39724. ns.em("label", "left"),
  39725. ns.is("active", !checked.value)
  39726. ]);
  39727. const labelRightKls = (0, vue.computed)(() => [
  39728. ns.e("label"),
  39729. ns.em("label", "right"),
  39730. ns.is("active", checked.value)
  39731. ]);
  39732. const coreStyle = (0, vue.computed)(() => ({ width: addUnit(props.width) }));
  39733. (0, vue.watch)(() => props.modelValue, () => {
  39734. isControlled.value = true;
  39735. });
  39736. const actualValue = (0, vue.computed)(() => {
  39737. return isControlled.value ? props.modelValue : false;
  39738. });
  39739. const checked = (0, vue.computed)(() => actualValue.value === props.activeValue);
  39740. if (![props.activeValue, props.inactiveValue].includes(actualValue.value)) {
  39741. /* @__PURE__ */ debugWarn(COMPONENT_NAME$6, "model-value must be active-value or inactive-value");
  39742. emit(UPDATE_MODEL_EVENT, props.inactiveValue);
  39743. emit(CHANGE_EVENT, props.inactiveValue);
  39744. emit(INPUT_EVENT, props.inactiveValue);
  39745. }
  39746. (0, vue.watch)(checked, (val) => {
  39747. input.value.checked = val;
  39748. if (props.validateEvent) formItem?.validate?.("change").catch(NOOP);
  39749. });
  39750. const handleChange = () => {
  39751. const val = checked.value ? props.inactiveValue : props.activeValue;
  39752. emit(UPDATE_MODEL_EVENT, val);
  39753. emit(CHANGE_EVENT, val);
  39754. emit(INPUT_EVENT, val);
  39755. (0, vue.nextTick)(() => {
  39756. input.value.checked = checked.value;
  39757. });
  39758. };
  39759. const switchValue = () => {
  39760. if (switchDisabled.value) return;
  39761. const { beforeChange } = props;
  39762. if (!beforeChange) {
  39763. handleChange();
  39764. return;
  39765. }
  39766. const shouldChange = beforeChange();
  39767. if (![isPromise(shouldChange), isBoolean(shouldChange)].includes(true)) throwError(COMPONENT_NAME$6, "beforeChange must return type `Promise<boolean>` or `boolean`");
  39768. if (isPromise(shouldChange)) shouldChange.then((result) => {
  39769. if (result) handleChange();
  39770. }).catch((e) => {
  39771. /* @__PURE__ */ debugWarn(COMPONENT_NAME$6, `some error occurred: ${e}`);
  39772. });
  39773. else if (shouldChange) handleChange();
  39774. };
  39775. const focus = () => {
  39776. input.value?.focus?.();
  39777. };
  39778. (0, vue.onMounted)(() => {
  39779. input.value.checked = checked.value;
  39780. });
  39781. __expose({
  39782. focus,
  39783. checked
  39784. });
  39785. return (_ctx, _cache) => {
  39786. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39787. class: (0, vue.normalizeClass)(switchKls.value),
  39788. onClick: (0, vue.withModifiers)(switchValue, ["prevent"])
  39789. }, [
  39790. (0, vue.createElementVNode)("input", {
  39791. id: (0, vue.unref)(inputId),
  39792. ref_key: "input",
  39793. ref: input,
  39794. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input")),
  39795. type: "checkbox",
  39796. role: "switch",
  39797. "aria-checked": checked.value,
  39798. "aria-disabled": (0, vue.unref)(switchDisabled),
  39799. "aria-label": __props.ariaLabel,
  39800. name: __props.name,
  39801. "true-value": __props.activeValue,
  39802. "false-value": __props.inactiveValue,
  39803. disabled: (0, vue.unref)(switchDisabled),
  39804. tabindex: __props.tabindex,
  39805. onChange: handleChange,
  39806. onKeydown: (0, vue.withKeys)(switchValue, ["enter"])
  39807. }, null, 42, _hoisted_1$18),
  39808. !__props.inlinePrompt && (__props.inactiveIcon || __props.inactiveText || _ctx.$slots.inactive) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  39809. key: 0,
  39810. class: (0, vue.normalizeClass)(labelLeftKls.value)
  39811. }, [(0, vue.renderSlot)(_ctx.$slots, "inactive", {}, () => [__props.inactiveIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  39812. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.inactiveIcon)))]),
  39813. _: 1
  39814. })) : (0, vue.createCommentVNode)("v-if", true), !__props.inactiveIcon && __props.inactiveText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  39815. key: 1,
  39816. "aria-hidden": checked.value
  39817. }, (0, vue.toDisplayString)(__props.inactiveText), 9, _hoisted_2$11)) : (0, vue.createCommentVNode)("v-if", true)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  39818. (0, vue.createElementVNode)("span", {
  39819. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("core")),
  39820. style: (0, vue.normalizeStyle)(coreStyle.value)
  39821. }, [__props.inlinePrompt ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39822. key: 0,
  39823. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner"))
  39824. }, [!checked.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39825. key: 0,
  39826. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner-wrapper"))
  39827. }, [(0, vue.renderSlot)(_ctx.$slots, "inactive", {}, () => [__props.inactiveIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  39828. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.inactiveIcon)))]),
  39829. _: 1
  39830. })) : (0, vue.createCommentVNode)("v-if", true), !__props.inactiveIcon && __props.inactiveText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_3$4, (0, vue.toDisplayString)(__props.inactiveText), 1)) : (0, vue.createCommentVNode)("v-if", true)])], 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  39831. key: 1,
  39832. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner-wrapper"))
  39833. }, [(0, vue.renderSlot)(_ctx.$slots, "active", {}, () => [__props.activeIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  39834. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.activeIcon)))]),
  39835. _: 1
  39836. })) : (0, vue.createCommentVNode)("v-if", true), !__props.activeIcon && __props.activeText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_4$3, (0, vue.toDisplayString)(__props.activeText), 1)) : (0, vue.createCommentVNode)("v-if", true)])], 2))], 2)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("action")) }, [__props.loading ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  39837. key: 0,
  39838. class: (0, vue.normalizeClass)((0, vue.unref)(ns).is("loading"))
  39839. }, {
  39840. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(loading_default))]),
  39841. _: 1
  39842. }, 8, ["class"])) : checked.value ? (0, vue.renderSlot)(_ctx.$slots, "active-action", { key: 1 }, () => [__props.activeActionIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  39843. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.activeActionIcon)))]),
  39844. _: 1
  39845. })) : (0, vue.createCommentVNode)("v-if", true)]) : !checked.value ? (0, vue.renderSlot)(_ctx.$slots, "inactive-action", { key: 2 }, () => [__props.inactiveActionIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  39846. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.inactiveActionIcon)))]),
  39847. _: 1
  39848. })) : (0, vue.createCommentVNode)("v-if", true)]) : (0, vue.createCommentVNode)("v-if", true)], 2)], 6),
  39849. !__props.inlinePrompt && (__props.activeIcon || __props.activeText || _ctx.$slots.active) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  39850. key: 1,
  39851. class: (0, vue.normalizeClass)(labelRightKls.value)
  39852. }, [(0, vue.renderSlot)(_ctx.$slots, "active", {}, () => [__props.activeIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), { key: 0 }, {
  39853. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.activeIcon)))]),
  39854. _: 1
  39855. })) : (0, vue.createCommentVNode)("v-if", true), !__props.activeIcon && __props.activeText ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  39856. key: 1,
  39857. "aria-hidden": !checked.value
  39858. }, (0, vue.toDisplayString)(__props.activeText), 9, _hoisted_5$1)) : (0, vue.createCommentVNode)("v-if", true)])], 2)) : (0, vue.createCommentVNode)("v-if", true)
  39859. ], 2);
  39860. };
  39861. }
  39862. });
  39863. //#endregion
  39864. //#region ../../packages/components/switch/src/switch.vue
  39865. var switch_default = switch_vue_vue_type_script_setup_true_lang_default;
  39866. //#endregion
  39867. //#region ../../packages/components/switch/index.ts
  39868. const ElSwitch = withInstall(switch_default);
  39869. //#endregion
  39870. //#region ../../packages/components/table/src/table/defaults.ts
  39871. const tableProps = {
  39872. data: {
  39873. type: Array,
  39874. default: () => []
  39875. },
  39876. size: useSizeProp,
  39877. width: [String, Number],
  39878. height: [String, Number],
  39879. maxHeight: [String, Number],
  39880. fit: {
  39881. type: Boolean,
  39882. default: true
  39883. },
  39884. stripe: Boolean,
  39885. border: Boolean,
  39886. rowKey: [String, Function],
  39887. showHeader: {
  39888. type: Boolean,
  39889. default: true
  39890. },
  39891. showSummary: Boolean,
  39892. sumText: String,
  39893. summaryMethod: Function,
  39894. rowClassName: [String, Function],
  39895. rowStyle: [Object, Function],
  39896. cellClassName: [String, Function],
  39897. cellStyle: [Object, Function],
  39898. headerRowClassName: [String, Function],
  39899. headerRowStyle: [Object, Function],
  39900. headerCellClassName: [String, Function],
  39901. headerCellStyle: [Object, Function],
  39902. highlightCurrentRow: Boolean,
  39903. currentRowKey: [String, Number],
  39904. emptyText: String,
  39905. expandRowKeys: Array,
  39906. defaultExpandAll: Boolean,
  39907. rowExpandable: { type: Function },
  39908. defaultSort: Object,
  39909. tooltipEffect: String,
  39910. tooltipOptions: Object,
  39911. spanMethod: Function,
  39912. selectOnIndeterminate: {
  39913. type: Boolean,
  39914. default: true
  39915. },
  39916. indent: {
  39917. type: Number,
  39918. default: 16
  39919. },
  39920. treeProps: {
  39921. type: Object,
  39922. default: () => {
  39923. return {
  39924. hasChildren: "hasChildren",
  39925. children: "children",
  39926. checkStrictly: false
  39927. };
  39928. }
  39929. },
  39930. lazy: Boolean,
  39931. load: Function,
  39932. style: {
  39933. type: [
  39934. String,
  39935. Object,
  39936. Array,
  39937. Boolean
  39938. ],
  39939. default: () => ({})
  39940. },
  39941. className: {
  39942. type: String,
  39943. default: ""
  39944. },
  39945. tableLayout: {
  39946. type: String,
  39947. default: "fixed"
  39948. },
  39949. scrollbarAlwaysOn: Boolean,
  39950. flexible: Boolean,
  39951. showOverflowTooltip: {
  39952. type: [Boolean, Object],
  39953. default: void 0
  39954. },
  39955. tooltipFormatter: Function,
  39956. appendFilterPanelTo: String,
  39957. scrollbarTabindex: {
  39958. type: [Number, String],
  39959. default: void 0
  39960. },
  39961. allowDragLastColumn: {
  39962. type: Boolean,
  39963. default: true
  39964. },
  39965. preserveExpandedContent: Boolean,
  39966. nativeScrollbar: Boolean
  39967. };
  39968. //#endregion
  39969. //#region ../../packages/components/table/src/util.ts
  39970. let tableIdSeed = 1;
  39971. let columnIdSeed = 1;
  39972. const createTableId = (namespace) => `${namespace}-table_${tableIdSeed++}`;
  39973. const createTableColumnId = (parentId) => `${parentId}_column_${columnIdSeed++}`;
  39974. const getCell = function(event) {
  39975. return event.target?.closest("td");
  39976. };
  39977. const orderBy = function(array, sortKey, reverse, sortMethod, sortBy) {
  39978. if (!sortKey && !sortMethod && (!sortBy || isArray$1(sortBy) && !sortBy.length)) return array;
  39979. if (isString(reverse)) reverse = reverse === "descending" ? -1 : 1;
  39980. else reverse = reverse && reverse < 0 ? -1 : 1;
  39981. const getKey = sortMethod ? null : function(value, index) {
  39982. if (sortBy) return flatMap(castArray$1(sortBy), (by) => {
  39983. if (isString(by)) return get(value, by);
  39984. else return by(value, index, array);
  39985. });
  39986. if (sortKey !== "$key") {
  39987. if (isObject$1(value) && "$value" in value) value = value.$value;
  39988. }
  39989. return [isObject$1(value) ? sortKey ? get(value, sortKey) : null : value];
  39990. };
  39991. const compare = function(a, b) {
  39992. if (sortMethod) return sortMethod(a.value, b.value);
  39993. for (let i = 0, len = a.key?.length ?? 0; i < len; i++) {
  39994. if (a.key?.[i] < b.key?.[i]) return -1;
  39995. if (a.key?.[i] > b.key?.[i]) return 1;
  39996. }
  39997. return 0;
  39998. };
  39999. return array.map((value, index) => {
  40000. return {
  40001. value,
  40002. index,
  40003. key: getKey ? getKey(value, index) : null
  40004. };
  40005. }).sort((a, b) => {
  40006. let order = compare(a, b);
  40007. if (!order) order = a.index - b.index;
  40008. return order * +reverse;
  40009. }).map((item) => item.value);
  40010. };
  40011. const getColumnById = function(table, columnId) {
  40012. let column = null;
  40013. table.columns.forEach((item) => {
  40014. if (item.id === columnId) column = item;
  40015. });
  40016. return column;
  40017. };
  40018. const getColumnByKey = function(table, columnKey) {
  40019. let column = null;
  40020. for (let i = 0; i < table.columns.length; i++) {
  40021. const item = table.columns[i];
  40022. if (item.columnKey === columnKey) {
  40023. column = item;
  40024. break;
  40025. }
  40026. }
  40027. if (!column) throwError("ElTable", `No column matching with column-key: ${columnKey}`);
  40028. return column;
  40029. };
  40030. const getColumnByCell = function(table, cell, namespace) {
  40031. const matches = (cell.className || "").match(new RegExp(`${namespace}-table_[^\\s]+`, "gm"));
  40032. if (matches) return getColumnById(table, matches[0]);
  40033. return null;
  40034. };
  40035. const getRowIdentity = (row, rowKey) => {
  40036. if (!row) throw new Error("Row is required when get row identity");
  40037. if (isString(rowKey)) {
  40038. if (!rowKey.includes(".")) return `${row[rowKey]}`;
  40039. const key = rowKey.split(".");
  40040. let current = row;
  40041. for (const element of key) current = current[element];
  40042. return `${current}`;
  40043. } else if (isFunction$1(rowKey)) return rowKey.call(null, row);
  40044. return "";
  40045. };
  40046. const getKeysMap = function(array, rowKey, flatten = false, childrenKey = "children") {
  40047. const data = array || [];
  40048. const arrayMap = {};
  40049. data.forEach((row, index) => {
  40050. arrayMap[getRowIdentity(row, rowKey)] = {
  40051. row,
  40052. index
  40053. };
  40054. if (flatten) {
  40055. const children = row[childrenKey];
  40056. if (isArray$1(children)) Object.assign(arrayMap, getKeysMap(children, rowKey, true, childrenKey));
  40057. }
  40058. });
  40059. return arrayMap;
  40060. };
  40061. function mergeOptions(defaults, config) {
  40062. const options = {};
  40063. let key;
  40064. for (key in defaults) options[key] = defaults[key];
  40065. for (key in config) if (hasOwn(config, key)) {
  40066. const value = config[key];
  40067. if (!isUndefined(value)) options[key] = value;
  40068. }
  40069. return options;
  40070. }
  40071. function parseWidth(width) {
  40072. if (width === "") return width;
  40073. if (!isUndefined(width)) {
  40074. width = Number.parseInt(width, 10);
  40075. if (Number.isNaN(width)) width = "";
  40076. }
  40077. return width;
  40078. }
  40079. function parseMinWidth(minWidth) {
  40080. if (minWidth === "") return minWidth;
  40081. if (!isUndefined(minWidth)) {
  40082. minWidth = parseWidth(minWidth);
  40083. if (Number.isNaN(minWidth)) minWidth = 80;
  40084. }
  40085. return minWidth;
  40086. }
  40087. function parseHeight(height) {
  40088. if (isNumber(height)) return height;
  40089. if (isString(height)) if (/^\d+(?:px)?$/.test(height)) return Number.parseInt(height, 10);
  40090. else return height;
  40091. return null;
  40092. }
  40093. function compose(...funcs) {
  40094. if (funcs.length === 0) return (arg) => arg;
  40095. if (funcs.length === 1) return funcs[0];
  40096. return funcs.reduce((a, b) => (...args) => a(b(...args)));
  40097. }
  40098. function toggleRowStatus(statusArr, row, newVal, tableTreeProps, selectable, rowIndex, rowKey) {
  40099. let _rowIndex = rowIndex ?? 0;
  40100. let changed = false;
  40101. const getIndex = () => {
  40102. if (!rowKey) return statusArr.indexOf(row);
  40103. const id = getRowIdentity(row, rowKey);
  40104. return statusArr.findIndex((item) => getRowIdentity(item, rowKey) === id);
  40105. };
  40106. const index = getIndex();
  40107. const included = index !== -1;
  40108. const isRowSelectable = selectable?.call(null, row, _rowIndex);
  40109. const toggleStatus = (type) => {
  40110. if (type === "add") statusArr.push(row);
  40111. else statusArr.splice(index, 1);
  40112. changed = true;
  40113. };
  40114. const getChildrenCount = (row) => {
  40115. let count = 0;
  40116. const children = tableTreeProps?.children && row[tableTreeProps.children];
  40117. if (children && isArray$1(children)) {
  40118. count += children.length;
  40119. children.forEach((item) => {
  40120. count += getChildrenCount(item);
  40121. });
  40122. }
  40123. return count;
  40124. };
  40125. if (!selectable || isRowSelectable) if (isBoolean(newVal)) {
  40126. if (newVal && !included) toggleStatus("add");
  40127. else if (!newVal && included) toggleStatus("remove");
  40128. } else included ? toggleStatus("remove") : toggleStatus("add");
  40129. if (!tableTreeProps?.checkStrictly && tableTreeProps?.children && isArray$1(row[tableTreeProps.children])) row[tableTreeProps.children].forEach((item) => {
  40130. const childChanged = toggleRowStatus(statusArr, item, newVal ?? !included, tableTreeProps, selectable, _rowIndex + 1, rowKey);
  40131. _rowIndex += getChildrenCount(item) + 1;
  40132. if (childChanged) changed = childChanged;
  40133. });
  40134. return changed;
  40135. }
  40136. function walkTreeNode(root, cb, childrenKey = "children", lazyKey = "hasChildren", lazy = false) {
  40137. const isNil = (array) => !(isArray$1(array) && array.length);
  40138. function _walker(parent, children, level) {
  40139. cb(parent, children, level);
  40140. children.forEach((item) => {
  40141. if (item[lazyKey] && lazy) {
  40142. cb(item, null, level + 1);
  40143. return;
  40144. }
  40145. const children = item[childrenKey];
  40146. if (!isNil(children)) _walker(item, children, level + 1);
  40147. });
  40148. }
  40149. root.forEach((item) => {
  40150. if (item[lazyKey] && lazy) {
  40151. cb(item, null, 0);
  40152. return;
  40153. }
  40154. const children = item[childrenKey];
  40155. if (!isNil(children)) _walker(item, children, 0);
  40156. });
  40157. }
  40158. const getTableOverflowTooltipProps = (props, innerText, row, column) => {
  40159. const tooltipFormatterContent = isFunction$1(column?.tooltipFormatter) ? column.tooltipFormatter({
  40160. row,
  40161. column,
  40162. cellValue: getProp(row, column.property).value
  40163. }) : void 0;
  40164. if ((0, vue.isVNode)(tooltipFormatterContent)) return {
  40165. slotContent: tooltipFormatterContent,
  40166. content: null,
  40167. strategy: "fixed",
  40168. ...props
  40169. };
  40170. return {
  40171. slotContent: null,
  40172. content: tooltipFormatterContent ?? innerText,
  40173. strategy: "fixed",
  40174. ...props
  40175. };
  40176. };
  40177. let removePopper = null;
  40178. function createTablePopper(props, popperContent, row, column, trigger, table) {
  40179. const tableOverflowTooltipProps = getTableOverflowTooltipProps(props, popperContent, row, column);
  40180. const mergedProps = {
  40181. ...tableOverflowTooltipProps,
  40182. slotContent: void 0
  40183. };
  40184. if (removePopper?.trigger === trigger) {
  40185. const comp = removePopper.vm?.component;
  40186. merge(comp?.props, mergedProps);
  40187. if (comp && tableOverflowTooltipProps.slotContent) comp.slots.content = () => [tableOverflowTooltipProps.slotContent];
  40188. return;
  40189. }
  40190. removePopper?.();
  40191. const parentNode = table?.refs.tableWrapper;
  40192. const ns = parentNode?.dataset.prefix;
  40193. const vm = (0, vue.createVNode)(ElTooltip, {
  40194. virtualTriggering: true,
  40195. virtualRef: trigger,
  40196. appendTo: parentNode,
  40197. placement: "top",
  40198. transition: "none",
  40199. offset: 0,
  40200. hideAfter: 0,
  40201. ...mergedProps
  40202. }, tableOverflowTooltipProps.slotContent ? { content: () => tableOverflowTooltipProps.slotContent } : void 0);
  40203. vm.appContext = {
  40204. ...table.appContext,
  40205. ...table
  40206. };
  40207. const container = document.createElement("div");
  40208. (0, vue.render)(vm, container);
  40209. vm.component.exposed.onOpen();
  40210. const scrollContainer = parentNode?.querySelector(`.${ns}-scrollbar__wrap`);
  40211. removePopper = () => {
  40212. if (vm.component?.exposed?.onClose) vm.component.exposed.onClose();
  40213. (0, vue.render)(null, container);
  40214. const currentRemovePopper = removePopper;
  40215. scrollContainer?.removeEventListener("scroll", currentRemovePopper);
  40216. currentRemovePopper.trigger = void 0;
  40217. currentRemovePopper.vm = void 0;
  40218. removePopper = null;
  40219. };
  40220. removePopper.trigger = trigger ?? void 0;
  40221. removePopper.vm = vm;
  40222. scrollContainer?.addEventListener("scroll", removePopper);
  40223. }
  40224. function getCurrentColumns(column) {
  40225. if (column.children) return flatMap(column.children, getCurrentColumns);
  40226. else return [column];
  40227. }
  40228. function getColSpan(colSpan, column) {
  40229. return colSpan + column.colSpan;
  40230. }
  40231. const isFixedColumn = (index, fixed, store, realColumns) => {
  40232. let start = 0;
  40233. let after = index;
  40234. const columns = store.states.columns.value;
  40235. if (realColumns) {
  40236. const curColumns = getCurrentColumns(realColumns[index]);
  40237. start = columns.slice(0, columns.indexOf(curColumns[0])).reduce(getColSpan, 0);
  40238. after = start + curColumns.reduce(getColSpan, 0) - 1;
  40239. } else start = index;
  40240. let fixedLayout;
  40241. switch (fixed) {
  40242. case "left":
  40243. if (after < store.states.fixedLeafColumnsLength.value) fixedLayout = "left";
  40244. break;
  40245. case "right":
  40246. if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) fixedLayout = "right";
  40247. break;
  40248. default: if (after < store.states.fixedLeafColumnsLength.value) fixedLayout = "left";
  40249. else if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) fixedLayout = "right";
  40250. }
  40251. return fixedLayout ? {
  40252. direction: fixedLayout,
  40253. start,
  40254. after
  40255. } : {};
  40256. };
  40257. const getFixedColumnsClass = (namespace, index, fixed, store, realColumns, offset = 0) => {
  40258. const classes = [];
  40259. const { direction, start, after } = isFixedColumn(index, fixed, store, realColumns);
  40260. if (direction) {
  40261. const isLeft = direction === "left";
  40262. classes.push(`${namespace}-fixed-column--${direction}`);
  40263. if (isLeft && after + offset === store.states.fixedLeafColumnsLength.value - 1) classes.push("is-last-column");
  40264. else if (!isLeft && start - offset === store.states.columns.value.length - store.states.rightFixedLeafColumnsLength.value) classes.push("is-first-column");
  40265. }
  40266. return classes;
  40267. };
  40268. function getOffset(offset, column) {
  40269. return offset + (isNull(column.realWidth) || Number.isNaN(column.realWidth) ? Number(column.width) : column.realWidth);
  40270. }
  40271. const getFixedColumnOffset = (index, fixed, store, realColumns) => {
  40272. const { direction, start = 0, after = 0 } = isFixedColumn(index, fixed, store, realColumns);
  40273. if (!direction) return;
  40274. const styles = {};
  40275. const isLeft = direction === "left";
  40276. const columns = store.states.columns.value;
  40277. if (isLeft) styles.left = columns.slice(0, start).reduce(getOffset, 0);
  40278. else styles.right = columns.slice(after + 1).reverse().reduce(getOffset, 0);
  40279. return styles;
  40280. };
  40281. const ensurePosition = (style, key) => {
  40282. if (!style) return;
  40283. if (!Number.isNaN(style[key])) style[key] = `${style[key]}px`;
  40284. };
  40285. function ensureValidVNode(vnodes) {
  40286. return vnodes.some((child) => {
  40287. if (!(0, vue.isVNode)(child)) return true;
  40288. if (child.type === vue.Comment) return false;
  40289. if (child.type === vue.Fragment && !ensureValidVNode(child.children)) return false;
  40290. return true;
  40291. }) ? vnodes : null;
  40292. }
  40293. //#endregion
  40294. //#region ../../packages/components/table/src/store/expand.ts
  40295. function useExpand(watcherData) {
  40296. const instance = (0, vue.getCurrentInstance)();
  40297. const defaultExpandAll = (0, vue.ref)(false);
  40298. const expandRows = (0, vue.ref)([]);
  40299. const canRowExpand = (row, index) => {
  40300. const expandableFn = instance.store.states.rowExpandable.value;
  40301. return expandableFn?.(row, index) ?? true;
  40302. };
  40303. const updateExpandRows = () => {
  40304. const data = watcherData.data.value || [];
  40305. const rowKey = watcherData.rowKey.value;
  40306. if (defaultExpandAll.value) expandRows.value = instance.store.states.rowExpandable.value ? data.filter(canRowExpand) : data.slice();
  40307. else if (rowKey) {
  40308. const expandRowsMap = getKeysMap(expandRows.value, rowKey);
  40309. expandRows.value = data.filter((row, index) => {
  40310. return !!expandRowsMap[getRowIdentity(row, rowKey)] && canRowExpand(row, index);
  40311. });
  40312. } else expandRows.value = [];
  40313. };
  40314. const toggleRowExpansion = (row, expanded) => {
  40315. const rowIndex = (watcherData.data.value || []).indexOf(row);
  40316. if (rowIndex > -1 && !canRowExpand(row, rowIndex)) return;
  40317. if (toggleRowStatus(expandRows.value, row, expanded, void 0, void 0, void 0, watcherData.rowKey.value)) instance.emit("expand-change", row, expandRows.value.slice());
  40318. };
  40319. const setExpandRowKeys = (rowKeys) => {
  40320. instance.store.assertRowKey();
  40321. const data = watcherData.data.value || [];
  40322. const rowKey = watcherData.rowKey.value;
  40323. const keysMap = getKeysMap(data, rowKey);
  40324. expandRows.value = rowKeys.reduce((prev, cur) => {
  40325. const info = keysMap[cur];
  40326. if (info && canRowExpand(info.row, info.index)) prev.push(info.row);
  40327. return prev;
  40328. }, []);
  40329. };
  40330. const isRowExpanded = (row) => {
  40331. const rowKey = watcherData.rowKey.value;
  40332. if (rowKey) return !!getKeysMap(expandRows.value, rowKey)[getRowIdentity(row, rowKey)];
  40333. return expandRows.value.includes(row);
  40334. };
  40335. return {
  40336. updateExpandRows,
  40337. toggleRowExpansion,
  40338. setExpandRowKeys,
  40339. isRowExpanded,
  40340. states: {
  40341. expandRows,
  40342. defaultExpandAll
  40343. }
  40344. };
  40345. }
  40346. //#endregion
  40347. //#region ../../packages/components/table/src/store/current.ts
  40348. function useCurrent(watcherData) {
  40349. const instance = (0, vue.getCurrentInstance)();
  40350. const _currentRowKey = (0, vue.ref)(null);
  40351. const currentRow = (0, vue.ref)(null);
  40352. const setCurrentRowKey = (key) => {
  40353. instance.store.assertRowKey();
  40354. _currentRowKey.value = key;
  40355. setCurrentRowByKey(key);
  40356. };
  40357. const restoreCurrentRowKey = () => {
  40358. _currentRowKey.value = null;
  40359. };
  40360. const setCurrentRowByKey = (key) => {
  40361. const { data, rowKey } = watcherData;
  40362. const oldCurrentRow = currentRow.value;
  40363. let _currentRow = null;
  40364. if (rowKey.value) _currentRow = ((0, vue.unref)(data) || []).find((item) => getRowIdentity(item, rowKey.value) === key) ?? null;
  40365. currentRow.value = _currentRow ?? null;
  40366. instance.emit("current-change", currentRow.value, oldCurrentRow);
  40367. };
  40368. const updateCurrentRow = (_currentRow) => {
  40369. const oldCurrentRow = currentRow.value;
  40370. if (_currentRow && _currentRow !== oldCurrentRow) {
  40371. currentRow.value = _currentRow;
  40372. instance.emit("current-change", currentRow.value, oldCurrentRow);
  40373. return;
  40374. }
  40375. if (!_currentRow && oldCurrentRow) {
  40376. currentRow.value = null;
  40377. instance.emit("current-change", null, oldCurrentRow);
  40378. }
  40379. };
  40380. const updateCurrentRowData = () => {
  40381. const rowKey = watcherData.rowKey.value;
  40382. const data = watcherData.data.value || [];
  40383. const oldCurrentRow = currentRow.value;
  40384. if (oldCurrentRow && !data.includes(oldCurrentRow)) if (rowKey) setCurrentRowByKey(getRowIdentity(oldCurrentRow, rowKey));
  40385. else {
  40386. currentRow.value = null;
  40387. instance.emit("current-change", null, oldCurrentRow);
  40388. }
  40389. else if (_currentRowKey.value) {
  40390. setCurrentRowByKey(_currentRowKey.value);
  40391. restoreCurrentRowKey();
  40392. }
  40393. };
  40394. return {
  40395. setCurrentRowKey,
  40396. restoreCurrentRowKey,
  40397. setCurrentRowByKey,
  40398. updateCurrentRow,
  40399. updateCurrentRowData,
  40400. states: {
  40401. _currentRowKey,
  40402. currentRow
  40403. }
  40404. };
  40405. }
  40406. //#endregion
  40407. //#region ../../packages/components/table/src/store/tree.ts
  40408. function useTree$2(watcherData) {
  40409. const expandRowKeys = (0, vue.ref)([]);
  40410. const treeData = (0, vue.ref)({});
  40411. const indent = (0, vue.ref)(16);
  40412. const lazy = (0, vue.ref)(false);
  40413. const lazyTreeNodeMap = (0, vue.ref)({});
  40414. const lazyColumnIdentifier = (0, vue.ref)("hasChildren");
  40415. const childrenColumnName = (0, vue.ref)("children");
  40416. const checkStrictly = (0, vue.ref)(false);
  40417. const instance = (0, vue.getCurrentInstance)();
  40418. const normalizedData = (0, vue.computed)(() => {
  40419. if (!watcherData.rowKey.value) return {};
  40420. return normalize(watcherData.data.value || []);
  40421. });
  40422. const normalizedLazyNode = (0, vue.computed)(() => {
  40423. const rowKey = watcherData.rowKey.value;
  40424. const keys = Object.keys(lazyTreeNodeMap.value);
  40425. const res = {};
  40426. if (!keys.length) return res;
  40427. keys.forEach((key) => {
  40428. if (lazyTreeNodeMap.value[key].length) {
  40429. const item = { children: [] };
  40430. lazyTreeNodeMap.value[key].forEach((row) => {
  40431. const currentRowKey = getRowIdentity(row, rowKey);
  40432. item.children.push(currentRowKey);
  40433. if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) res[currentRowKey] = { children: [] };
  40434. });
  40435. res[key] = item;
  40436. }
  40437. });
  40438. return res;
  40439. });
  40440. const normalize = (data) => {
  40441. const rowKey = watcherData.rowKey.value;
  40442. const res = {};
  40443. walkTreeNode(data, (parent, children, level) => {
  40444. const parentId = getRowIdentity(parent, rowKey);
  40445. if (isArray$1(children)) res[parentId] = {
  40446. children: children.map((row) => getRowIdentity(row, rowKey)),
  40447. level
  40448. };
  40449. else if (lazy.value) res[parentId] = {
  40450. children: [],
  40451. lazy: true,
  40452. level
  40453. };
  40454. }, childrenColumnName.value, lazyColumnIdentifier.value, lazy.value);
  40455. return res;
  40456. };
  40457. const updateTreeData = (ifChangeExpandRowKeys = false, ifExpandAll) => {
  40458. ifExpandAll ||= instance.store?.states.defaultExpandAll.value;
  40459. const nested = normalizedData.value;
  40460. const normalizedLazyNode_ = normalizedLazyNode.value;
  40461. const keys = Object.keys(nested);
  40462. const newTreeData = {};
  40463. if (keys.length) {
  40464. const oldTreeData = (0, vue.unref)(treeData);
  40465. const rootLazyRowKeys = [];
  40466. const getExpanded = (oldValue, key) => {
  40467. if (ifChangeExpandRowKeys) if (expandRowKeys.value) return ifExpandAll || expandRowKeys.value.includes(key);
  40468. else return !!(ifExpandAll || oldValue?.expanded);
  40469. else {
  40470. const included = ifExpandAll || expandRowKeys.value && expandRowKeys.value.includes(key);
  40471. return !!(oldValue?.expanded || included);
  40472. }
  40473. };
  40474. keys.forEach((key) => {
  40475. const oldValue = oldTreeData[key];
  40476. const newValue = { ...nested[key] };
  40477. newValue.expanded = getExpanded(oldValue, key);
  40478. if (newValue.lazy) {
  40479. const { loaded = false, loading = false } = oldValue || {};
  40480. newValue.loaded = !!loaded;
  40481. newValue.loading = !!loading;
  40482. rootLazyRowKeys.push(key);
  40483. }
  40484. newTreeData[key] = newValue;
  40485. });
  40486. const lazyKeys = Object.keys(normalizedLazyNode_);
  40487. if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) lazyKeys.forEach((key) => {
  40488. const oldValue = oldTreeData[key];
  40489. const lazyNodeChildren = normalizedLazyNode_[key].children;
  40490. if (rootLazyRowKeys.includes(key)) {
  40491. if (newTreeData[key].children?.length !== 0) throw new Error("[ElTable]children must be an empty array.");
  40492. newTreeData[key].children = lazyNodeChildren;
  40493. } else {
  40494. const { loaded = false, loading = false } = oldValue || {};
  40495. newTreeData[key] = {
  40496. lazy: true,
  40497. loaded: !!loaded,
  40498. loading: !!loading,
  40499. expanded: getExpanded(oldValue, key),
  40500. children: lazyNodeChildren,
  40501. level: void 0
  40502. };
  40503. }
  40504. });
  40505. }
  40506. treeData.value = newTreeData;
  40507. instance.store?.updateTableScrollY();
  40508. };
  40509. (0, vue.watch)(() => expandRowKeys.value, () => {
  40510. updateTreeData(true);
  40511. }, { deep: true });
  40512. (0, vue.watch)(() => normalizedData.value, () => {
  40513. updateTreeData();
  40514. });
  40515. (0, vue.watch)(() => normalizedLazyNode.value, () => {
  40516. updateTreeData();
  40517. });
  40518. const updateTreeExpandKeys = (value) => {
  40519. expandRowKeys.value = value;
  40520. updateTreeData();
  40521. };
  40522. const isUseLazy = (data) => {
  40523. return lazy.value && data && "loaded" in data && !data.loaded;
  40524. };
  40525. const toggleTreeExpansion = (row, expanded) => {
  40526. instance.store.assertRowKey();
  40527. const rowKey = watcherData.rowKey.value;
  40528. const id = getRowIdentity(row, rowKey);
  40529. const data = id && treeData.value[id];
  40530. if (id && data && "expanded" in data) {
  40531. const oldExpanded = data.expanded;
  40532. expanded = isUndefined(expanded) ? !data.expanded : expanded;
  40533. treeData.value[id].expanded = expanded;
  40534. if (oldExpanded !== expanded) instance.emit("expand-change", row, expanded);
  40535. expanded && isUseLazy(data) && loadData(row, id, data);
  40536. instance.store.updateTableScrollY();
  40537. }
  40538. };
  40539. const loadOrToggle = (row) => {
  40540. instance.store.assertRowKey();
  40541. const rowKey = watcherData.rowKey.value;
  40542. const id = getRowIdentity(row, rowKey);
  40543. const data = treeData.value[id];
  40544. if (isUseLazy(data)) loadData(row, id, data);
  40545. else toggleTreeExpansion(row, void 0);
  40546. };
  40547. const loadData = (row, key, treeNode) => {
  40548. const { load } = instance.props;
  40549. if (load && !treeData.value[key].loaded) {
  40550. treeData.value[key].loading = true;
  40551. load(row, treeNode, (data) => {
  40552. if (!isArray$1(data)) throw new TypeError("[ElTable] data must be an array");
  40553. treeData.value[key].loading = false;
  40554. treeData.value[key].loaded = true;
  40555. treeData.value[key].expanded = true;
  40556. if (data.length) lazyTreeNodeMap.value = {
  40557. ...lazyTreeNodeMap.value,
  40558. [key]: data
  40559. };
  40560. instance.emit("expand-change", row, true);
  40561. });
  40562. }
  40563. };
  40564. const updateKeyChildren = (key, data) => {
  40565. const { lazy, rowKey } = instance.props;
  40566. if (!lazy) return;
  40567. if (!rowKey) throw new Error("[Table] rowKey is required in updateKeyChild");
  40568. if (lazyTreeNodeMap.value[key]) lazyTreeNodeMap.value = {
  40569. ...lazyTreeNodeMap.value,
  40570. [key]: data
  40571. };
  40572. };
  40573. return {
  40574. loadData,
  40575. loadOrToggle,
  40576. toggleTreeExpansion,
  40577. updateTreeExpandKeys,
  40578. updateTreeData,
  40579. updateKeyChildren,
  40580. normalize,
  40581. states: {
  40582. expandRowKeys,
  40583. treeData,
  40584. indent,
  40585. lazy,
  40586. lazyTreeNodeMap,
  40587. lazyColumnIdentifier,
  40588. childrenColumnName,
  40589. checkStrictly
  40590. }
  40591. };
  40592. }
  40593. //#endregion
  40594. //#region ../../packages/components/table/src/store/watcher.ts
  40595. const sortData = (data, states) => {
  40596. const sortingColumn = states.sortingColumn;
  40597. if (!sortingColumn || isString(sortingColumn.sortable)) return data;
  40598. return orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy);
  40599. };
  40600. const doFlattenColumns = (columns) => {
  40601. const result = [];
  40602. columns.forEach((column) => {
  40603. if (column.children && column.children.length > 0) result.push.apply(result, doFlattenColumns(column.children));
  40604. else result.push(column);
  40605. });
  40606. return result;
  40607. };
  40608. function useWatcher$1() {
  40609. const instance = (0, vue.getCurrentInstance)();
  40610. const { size: tableSize } = (0, vue.toRefs)(instance.proxy?.$props);
  40611. const rowKey = (0, vue.ref)(null);
  40612. const data = (0, vue.ref)([]);
  40613. const _data = (0, vue.ref)([]);
  40614. const isComplex = (0, vue.ref)(false);
  40615. const _columns = (0, vue.ref)([]);
  40616. const originColumns = (0, vue.ref)([]);
  40617. const columns = (0, vue.ref)([]);
  40618. const fixedColumns = (0, vue.ref)([]);
  40619. const rightFixedColumns = (0, vue.ref)([]);
  40620. const leafColumns = (0, vue.ref)([]);
  40621. const fixedLeafColumns = (0, vue.ref)([]);
  40622. const rightFixedLeafColumns = (0, vue.ref)([]);
  40623. const updateOrderFns = [];
  40624. const leafColumnsLength = (0, vue.ref)(0);
  40625. const fixedLeafColumnsLength = (0, vue.ref)(0);
  40626. const rightFixedLeafColumnsLength = (0, vue.ref)(0);
  40627. const isAllSelected = (0, vue.ref)(false);
  40628. const selection = (0, vue.ref)([]);
  40629. const selectionIndeterminate = (0, vue.ref)({});
  40630. const reserveSelection = (0, vue.ref)(false);
  40631. const selectOnIndeterminate = (0, vue.ref)(false);
  40632. const selectable = (0, vue.ref)(null);
  40633. const rowExpandable = (0, vue.ref)(null);
  40634. const filters = (0, vue.ref)({});
  40635. const filteredData = (0, vue.ref)(null);
  40636. const sortingColumn = (0, vue.ref)(null);
  40637. const sortProp = (0, vue.ref)(null);
  40638. const sortOrder = (0, vue.ref)(null);
  40639. const hoverRow = (0, vue.ref)(null);
  40640. let halfSelection = [];
  40641. const selectedMap = (0, vue.computed)(() => {
  40642. return rowKey.value ? getKeysMap(selection.value, rowKey.value) : void 0;
  40643. });
  40644. const getRowChildren = (row) => {
  40645. const { childrenColumnName, lazyTreeNodeMap } = instance.store.states;
  40646. const inlineChildren = row[childrenColumnName.value] ?? [];
  40647. if (!rowKey.value) return inlineChildren;
  40648. const id = getRowIdentity(row, rowKey.value);
  40649. return [...lazyTreeNodeMap.value?.[id] ?? [], ...inlineChildren];
  40650. };
  40651. (0, vue.watch)(data, () => {
  40652. if (instance.state) {
  40653. scheduleLayout(false);
  40654. if (instance.props.tableLayout === "auto") instance.refs.tableHeaderRef?.updateFixedColumnStyle();
  40655. }
  40656. }, { deep: true });
  40657. const assertRowKey = () => {
  40658. if (!rowKey.value) throw new Error("[ElTable] prop row-key is required");
  40659. };
  40660. const updateChildFixed = (column) => {
  40661. column.children?.forEach((childColumn) => {
  40662. childColumn.fixed = column.fixed;
  40663. updateChildFixed(childColumn);
  40664. });
  40665. };
  40666. const updateColumns = () => {
  40667. _columns.value.forEach((column) => {
  40668. updateChildFixed(column);
  40669. });
  40670. fixedColumns.value = _columns.value.filter((column) => [true, "left"].includes(column.fixed));
  40671. const selectColumn = _columns.value.find((column) => column.type === "selection");
  40672. let selectColFixLeft;
  40673. if (selectColumn && selectColumn.fixed !== "right" && !fixedColumns.value.includes(selectColumn)) {
  40674. if (_columns.value.indexOf(selectColumn) === 0 && fixedColumns.value.length) {
  40675. fixedColumns.value.unshift(selectColumn);
  40676. selectColFixLeft = true;
  40677. }
  40678. }
  40679. rightFixedColumns.value = _columns.value.filter((column) => column.fixed === "right");
  40680. const notFixedColumns = _columns.value.filter((column) => (selectColFixLeft ? column.type !== "selection" : true) && !column.fixed);
  40681. originColumns.value = Array.from(fixedColumns.value).concat(notFixedColumns).concat(rightFixedColumns.value);
  40682. const leafColumns = doFlattenColumns(notFixedColumns);
  40683. const fixedLeafColumns = doFlattenColumns(fixedColumns.value);
  40684. const rightFixedLeafColumns = doFlattenColumns(rightFixedColumns.value);
  40685. leafColumnsLength.value = leafColumns.length;
  40686. fixedLeafColumnsLength.value = fixedLeafColumns.length;
  40687. rightFixedLeafColumnsLength.value = rightFixedLeafColumns.length;
  40688. columns.value = Array.from(fixedLeafColumns).concat(leafColumns).concat(rightFixedLeafColumns);
  40689. isComplex.value = fixedColumns.value.length > 0 || rightFixedColumns.value.length > 0;
  40690. };
  40691. const scheduleLayout = (needUpdateColumns, immediate = false) => {
  40692. if (needUpdateColumns) updateColumns();
  40693. if (immediate) instance.state.doLayout();
  40694. else instance.state.debouncedUpdateLayout();
  40695. };
  40696. const isSelected = (row) => {
  40697. if (selectedMap.value) return !!selectedMap.value[getRowIdentity(row, rowKey.value)];
  40698. else return selection.value.includes(row);
  40699. };
  40700. const rowIndexMap = (0, vue.computed)(() => {
  40701. const map = /* @__PURE__ */ new Map();
  40702. if (!rowKey.value || !selectable.value) return map;
  40703. let index = 0;
  40704. const _traverse = (rows) => {
  40705. if (!isArray$1(rows)) return;
  40706. rows.forEach((row) => {
  40707. const id = getRowIdentity(row, rowKey.value);
  40708. map.set(id, index);
  40709. index += 1;
  40710. const children = getRowChildren(row);
  40711. if (children.length) _traverse(children);
  40712. });
  40713. };
  40714. _traverse(data.value || []);
  40715. return map;
  40716. });
  40717. const updateSelectionByChildren = (options = {}) => {
  40718. const { emitChange = true } = options;
  40719. if (treeStates.checkStrictly.value || !rowKey.value) {
  40720. selectionIndeterminate.value = {};
  40721. halfSelection = [];
  40722. return;
  40723. }
  40724. const rowKeyValue = rowKey.value;
  40725. const rowIndexMapValue = options.rowIndexMap ?? rowIndexMap.value;
  40726. const selectableFn = selectable.value;
  40727. const rowIdCache = /* @__PURE__ */ new WeakMap();
  40728. const getCachedRowId = (row) => {
  40729. const cachedId = rowIdCache.get(row);
  40730. if (cachedId) return cachedId;
  40731. const id = getRowIdentity(row, rowKeyValue);
  40732. rowIdCache.set(row, id);
  40733. return id;
  40734. };
  40735. const indeterminateMap = {};
  40736. const nextHalfSelection = [];
  40737. const selectedIdSet = new Set(selection.value.map((row) => getCachedRowId(row)));
  40738. const rowsToAdd = [];
  40739. let selectionChanged = false;
  40740. const _updateSelectionForRow = (row, id, selected) => {
  40741. const isRowSelected = selectedIdSet.has(id);
  40742. if (selected && !isRowSelected) {
  40743. rowsToAdd.push(row);
  40744. selectedIdSet.add(id);
  40745. selectionChanged = true;
  40746. } else if (!selected && isRowSelected) {
  40747. selectedIdSet.delete(id);
  40748. selectionChanged = true;
  40749. }
  40750. };
  40751. const _walk = (rows) => {
  40752. let selectedCount = 0;
  40753. let selectableCount = 0;
  40754. if (!isArray$1(rows)) return {
  40755. selectedCount,
  40756. selectableCount
  40757. };
  40758. rows.forEach((row) => {
  40759. const id = getCachedRowId(row);
  40760. const children = getRowChildren(row);
  40761. let childSelectedCount = 0;
  40762. let childSelectableCount = 0;
  40763. if (children.length) {
  40764. const childResult = _walk(children);
  40765. childSelectedCount = childResult.selectedCount;
  40766. childSelectableCount = childResult.selectableCount;
  40767. }
  40768. const rowSelectable = selectableFn ? selectableFn.call(null, row, rowIndexMapValue.get(id) ?? 0) : true;
  40769. if (rowSelectable) {
  40770. if (childSelectableCount > 0) {
  40771. const allSelected = childSelectedCount === childSelectableCount;
  40772. if (!allSelected && !(childSelectedCount === 0)) {
  40773. indeterminateMap[id] = true;
  40774. nextHalfSelection.push(row);
  40775. }
  40776. _updateSelectionForRow(row, id, allSelected);
  40777. }
  40778. }
  40779. if (rowSelectable) {
  40780. selectableCount += 1;
  40781. if (selectedIdSet.has(id)) selectedCount += 1;
  40782. }
  40783. selectedCount += childSelectedCount;
  40784. selectableCount += childSelectableCount;
  40785. });
  40786. return {
  40787. selectedCount,
  40788. selectableCount
  40789. };
  40790. };
  40791. _walk(data.value || []);
  40792. if (selectionChanged) {
  40793. const nextSelection = selection.value.filter((row) => selectedIdSet.has(getCachedRowId(row)));
  40794. rowsToAdd.forEach((row) => {
  40795. if (!selectedIdSet.has(getCachedRowId(row))) return;
  40796. nextSelection.push(row);
  40797. });
  40798. selection.value = nextSelection;
  40799. }
  40800. selectionIndeterminate.value = indeterminateMap;
  40801. halfSelection = nextHalfSelection;
  40802. if (selectionChanged && emitChange) instance.emit("selection-change", selection.value ? selection.value.slice() : []);
  40803. };
  40804. const clearSelection = () => {
  40805. isAllSelected.value = false;
  40806. const oldSelection = selection.value;
  40807. selection.value = [];
  40808. selectionIndeterminate.value = {};
  40809. halfSelection = [];
  40810. if (oldSelection.length) instance.emit("selection-change", []);
  40811. };
  40812. const cleanSelection = () => {
  40813. let deleted;
  40814. if (rowKey.value) {
  40815. deleted = [];
  40816. const childrenKey = instance?.store?.states?.childrenColumnName.value;
  40817. const dataMap = getKeysMap(data.value, rowKey.value, true, childrenKey);
  40818. const { lazyTreeNodeMap } = instance.store.states;
  40819. if (lazyTreeNodeMap.value) Object.entries(lazyTreeNodeMap.value).forEach(([parentId, lazyRows]) => {
  40820. if (dataMap[parentId]) lazyRows.forEach((row) => {
  40821. const id = getRowIdentity(row, rowKey.value);
  40822. if (!dataMap[id]) dataMap[id] = {
  40823. row,
  40824. index: -1
  40825. };
  40826. });
  40827. });
  40828. for (const key in selectedMap.value) if (hasOwn(selectedMap.value, key) && !dataMap[key]) deleted.push(selectedMap.value[key].row);
  40829. } else deleted = selection.value.filter((item) => !data.value.includes(item));
  40830. if (deleted.length) {
  40831. const newSelection = selection.value.filter((item) => !deleted.includes(item));
  40832. selection.value = newSelection;
  40833. updateSelectionByChildren({ emitChange: false });
  40834. instance.emit("selection-change", [...newSelection]);
  40835. }
  40836. };
  40837. const getSelectionRows = () => {
  40838. return (selection.value || []).slice();
  40839. };
  40840. const getHalfSelectionRows = () => {
  40841. return halfSelection.slice();
  40842. };
  40843. const cascadeToLazyChildren = (row, selected, rowIndexMap) => {
  40844. if (!rowKey.value || treeStates.checkStrictly.value || !treeStates.lazy.value) return;
  40845. const { lazyTreeNodeMap, childrenColumnName } = instance.store.states;
  40846. const id = getRowIdentity(row, rowKey.value);
  40847. const lazyChildren = lazyTreeNodeMap.value?.[id] ?? [];
  40848. const inlineChildren = row[childrenColumnName.value] ?? [];
  40849. const treeProps = {
  40850. children: childrenColumnName.value,
  40851. checkStrictly: false
  40852. };
  40853. for (const child of lazyChildren) {
  40854. const childIndex = rowIndexMap.get(getRowIdentity(child, rowKey.value)) ?? 0;
  40855. toggleRowStatus(selection.value, child, selected, treeProps, selectable.value, childIndex, rowKey.value);
  40856. cascadeToLazyChildren(child, selected, rowIndexMap);
  40857. }
  40858. for (const child of inlineChildren) cascadeToLazyChildren(child, selected, rowIndexMap);
  40859. };
  40860. const toggleRowSelection = (row, selected, emitChange = true, ignoreSelectable = false) => {
  40861. const treeProps = {
  40862. children: instance?.store?.states?.childrenColumnName.value,
  40863. checkStrictly: instance?.store?.states?.checkStrictly.value
  40864. };
  40865. if (toggleRowStatus(selection.value, row, selected, treeProps, ignoreSelectable ? void 0 : selectable.value, data.value.indexOf(row), rowKey.value)) {
  40866. if (treeStates.lazy.value && !treeStates.checkStrictly.value) {
  40867. cascadeToLazyChildren(row, selected ?? isSelected(row), rowIndexMap.value);
  40868. updateSelectionByChildren({
  40869. emitChange: false,
  40870. rowIndexMap: rowIndexMap.value
  40871. });
  40872. } else updateSelectionByChildren({ emitChange: false });
  40873. const newSelection = (selection.value || []).slice();
  40874. if (emitChange) instance.emit("select", newSelection, row);
  40875. instance.emit("selection-change", newSelection);
  40876. }
  40877. };
  40878. const _toggleAllSelection = () => {
  40879. const value = selectOnIndeterminate.value ? !isAllSelected.value : !(isAllSelected.value || selection.value.length);
  40880. isAllSelected.value = value;
  40881. let selectionChanged = false;
  40882. let childrenCount = 0;
  40883. const rowKey = instance?.store?.states?.rowKey.value;
  40884. const { childrenColumnName } = instance.store.states;
  40885. const treeProps = {
  40886. children: childrenColumnName.value,
  40887. checkStrictly: false
  40888. };
  40889. data.value.forEach((row, index) => {
  40890. const rowIndex = index + childrenCount;
  40891. if (toggleRowStatus(selection.value, row, value, treeProps, selectable.value, rowIndex, rowKey)) selectionChanged = true;
  40892. childrenCount += getChildrenCount(getRowIdentity(row, rowKey));
  40893. });
  40894. const rowIndexMapVal = rowIndexMap.value;
  40895. if (treeStates.lazy.value && !treeStates.checkStrictly.value && rowKey) for (const lazyRows of Object.values(treeStates.lazyTreeNodeMap.value)) for (const child of lazyRows) {
  40896. const childIndex = rowIndexMapVal.get(getRowIdentity(child, rowKey)) ?? 0;
  40897. if (toggleRowStatus(selection.value, child, value, treeProps, selectable.value, childIndex, rowKey)) selectionChanged = true;
  40898. cascadeToLazyChildren(child, value, rowIndexMapVal);
  40899. }
  40900. updateSelectionByChildren({
  40901. emitChange: false,
  40902. rowIndexMap: rowIndexMapVal
  40903. });
  40904. if (selectionChanged) instance.emit("selection-change", selection.value ? [...selection.value] : []);
  40905. instance.emit("select-all", (selection.value || []).slice());
  40906. };
  40907. const updateAllSelected = () => {
  40908. if (data.value?.length === 0) {
  40909. isAllSelected.value = false;
  40910. return;
  40911. }
  40912. let rowIndex = 0;
  40913. let selectedCount = 0;
  40914. const checkSelectedStatus = (rows) => {
  40915. for (const row of rows) {
  40916. const isRowSelectable = selectable.value && selectable.value.call(null, row, rowIndex);
  40917. if (!isSelected(row)) {
  40918. if (!selectable.value || isRowSelectable) return false;
  40919. } else selectedCount++;
  40920. rowIndex++;
  40921. const children = getRowChildren(row);
  40922. if (children.length && !checkSelectedStatus(children)) return false;
  40923. }
  40924. return true;
  40925. };
  40926. const isAllSelected_ = checkSelectedStatus(data.value || []);
  40927. isAllSelected.value = selectedCount === 0 ? false : isAllSelected_;
  40928. };
  40929. const getRowIndeterminate = (row) => {
  40930. if (!rowKey.value) return false;
  40931. const id = getRowIdentity(row, rowKey.value);
  40932. return !!selectionIndeterminate.value[id];
  40933. };
  40934. const getChildrenCount = (rowKey) => {
  40935. if (!instance || !instance.store) return 0;
  40936. const { treeData } = instance.store.states;
  40937. let count = 0;
  40938. const children = treeData.value[rowKey]?.children;
  40939. if (children) {
  40940. count += children.length;
  40941. children.forEach((childKey) => {
  40942. count += getChildrenCount(childKey);
  40943. });
  40944. }
  40945. return count;
  40946. };
  40947. const updateFilters = (column, values) => {
  40948. const filters_ = {};
  40949. castArray$1(column).forEach((col) => {
  40950. filters.value[col.id] = values;
  40951. filters_[col.columnKey || col.id] = values;
  40952. });
  40953. return filters_;
  40954. };
  40955. const updateSort = (column, prop, order) => {
  40956. if (sortingColumn.value && sortingColumn.value !== column) sortingColumn.value.order = null;
  40957. sortingColumn.value = column;
  40958. sortProp.value = prop;
  40959. sortOrder.value = order;
  40960. };
  40961. const execFilter = () => {
  40962. let sourceData = (0, vue.unref)(_data);
  40963. Object.keys(filters.value).forEach((columnId) => {
  40964. const values = filters.value[columnId];
  40965. if (!values || values.length === 0) return;
  40966. const column = getColumnById({ columns: columns.value }, columnId);
  40967. if (column && column.filterMethod) sourceData = sourceData.filter((row) => {
  40968. return values.some((value) => column.filterMethod.call(null, value, row, column));
  40969. });
  40970. });
  40971. filteredData.value = sourceData;
  40972. };
  40973. const execSort = () => {
  40974. data.value = sortData(filteredData.value ?? [], {
  40975. sortingColumn: sortingColumn.value,
  40976. sortProp: sortProp.value,
  40977. sortOrder: sortOrder.value
  40978. });
  40979. };
  40980. const execQuery = (ignore = void 0) => {
  40981. if (!ignore?.filter) execFilter();
  40982. execSort();
  40983. };
  40984. const clearFilter = (columnKeys) => {
  40985. const { tableHeaderRef } = instance.refs;
  40986. if (!tableHeaderRef) return;
  40987. const panels = Object.assign({}, tableHeaderRef.filterPanels);
  40988. const keys = Object.keys(panels);
  40989. if (!keys.length) return;
  40990. if (isString(columnKeys)) columnKeys = [columnKeys];
  40991. if (isArray$1(columnKeys)) {
  40992. const columns_ = columnKeys.map((key) => getColumnByKey({ columns: columns.value }, key));
  40993. keys.forEach((key) => {
  40994. const column = columns_.find((col) => col.id === key);
  40995. if (column) column.filteredValue = [];
  40996. });
  40997. instance.store.commit("filterChange", {
  40998. column: columns_,
  40999. values: [],
  41000. silent: true,
  41001. multi: true
  41002. });
  41003. } else {
  41004. keys.forEach((key) => {
  41005. const column = columns.value.find((col) => col.id === key);
  41006. if (column) column.filteredValue = [];
  41007. });
  41008. filters.value = {};
  41009. instance.store.commit("filterChange", {
  41010. column: {},
  41011. values: [],
  41012. silent: true
  41013. });
  41014. }
  41015. };
  41016. const clearSort = () => {
  41017. if (!sortingColumn.value) return;
  41018. updateSort(null, null, null);
  41019. instance.store.commit("changeSortCondition", { silent: true });
  41020. };
  41021. const { setExpandRowKeys, toggleRowExpansion, updateExpandRows, states: expandStates, isRowExpanded } = useExpand({
  41022. data,
  41023. rowKey
  41024. });
  41025. const { updateTreeExpandKeys, toggleTreeExpansion, updateTreeData, updateKeyChildren, loadOrToggle, states: treeStates } = useTree$2({
  41026. data,
  41027. rowKey
  41028. });
  41029. const { updateCurrentRowData, updateCurrentRow, setCurrentRowKey, states: currentData } = useCurrent({
  41030. data,
  41031. rowKey
  41032. });
  41033. const setExpandRowKeysAdapter = (val) => {
  41034. setExpandRowKeys(val);
  41035. updateTreeExpandKeys(val);
  41036. };
  41037. const toggleRowExpansionAdapter = (row, expanded) => {
  41038. if (columns.value.some(({ type }) => type === "expand")) toggleRowExpansion(row, expanded);
  41039. else toggleTreeExpansion(row, expanded);
  41040. };
  41041. (0, vue.watch)(() => treeStates.checkStrictly.value, (value) => {
  41042. if (value) {
  41043. selectionIndeterminate.value = {};
  41044. halfSelection = [];
  41045. } else updateSelectionByChildren({ emitChange: false });
  41046. updateAllSelected();
  41047. });
  41048. (0, vue.watch)(() => treeStates.lazyTreeNodeMap.value, () => {
  41049. if (!treeStates.lazy.value || treeStates.checkStrictly.value || !rowKey.value) return;
  41050. const rowIndexMapVal = rowIndexMap.value;
  41051. const prevLen = selection.value.length;
  41052. for (const parentId of Object.keys(treeStates.lazyTreeNodeMap.value)) {
  41053. if (!selectedMap.value?.[parentId]) continue;
  41054. cascadeToLazyChildren(selectedMap.value[parentId].row, true, rowIndexMapVal);
  41055. }
  41056. const cascadeChanged = selection.value.length !== prevLen;
  41057. updateSelectionByChildren({
  41058. emitChange: !cascadeChanged,
  41059. rowIndexMap: rowIndexMapVal
  41060. });
  41061. updateAllSelected();
  41062. if (cascadeChanged) instance.emit("selection-change", [...selection.value]);
  41063. });
  41064. return {
  41065. assertRowKey,
  41066. updateColumns,
  41067. scheduleLayout,
  41068. isSelected,
  41069. clearSelection,
  41070. cleanSelection,
  41071. getSelectionRows,
  41072. getHalfSelectionRows,
  41073. toggleRowSelection,
  41074. _toggleAllSelection,
  41075. toggleAllSelection: null,
  41076. updateAllSelected,
  41077. updateSelectionByChildren,
  41078. getRowIndeterminate,
  41079. updateFilters,
  41080. updateCurrentRow,
  41081. updateSort,
  41082. execFilter,
  41083. execSort,
  41084. execQuery,
  41085. clearFilter,
  41086. clearSort,
  41087. toggleRowExpansion,
  41088. setExpandRowKeysAdapter,
  41089. setCurrentRowKey,
  41090. toggleRowExpansionAdapter,
  41091. isRowExpanded,
  41092. updateExpandRows,
  41093. updateCurrentRowData,
  41094. loadOrToggle,
  41095. updateTreeData,
  41096. updateKeyChildren,
  41097. states: {
  41098. tableSize,
  41099. rowKey,
  41100. data,
  41101. _data,
  41102. isComplex,
  41103. _columns,
  41104. originColumns,
  41105. columns,
  41106. fixedColumns,
  41107. rightFixedColumns,
  41108. leafColumns,
  41109. fixedLeafColumns,
  41110. rightFixedLeafColumns,
  41111. updateOrderFns,
  41112. leafColumnsLength,
  41113. fixedLeafColumnsLength,
  41114. rightFixedLeafColumnsLength,
  41115. isAllSelected,
  41116. selection,
  41117. selectionIndeterminate,
  41118. reserveSelection,
  41119. selectOnIndeterminate,
  41120. selectable,
  41121. rowExpandable,
  41122. filters,
  41123. filteredData,
  41124. sortingColumn,
  41125. sortProp,
  41126. sortOrder,
  41127. hoverRow,
  41128. ...expandStates,
  41129. ...treeStates,
  41130. ...currentData
  41131. }
  41132. };
  41133. }
  41134. //#endregion
  41135. //#region ../../packages/components/table/src/store/index.ts
  41136. function replaceColumn(array, column) {
  41137. return array.map((item) => {
  41138. if (item.id === column.id) return column;
  41139. else if (item.children?.length) item.children = replaceColumn(item.children, column);
  41140. return item;
  41141. });
  41142. }
  41143. function sortColumn(array) {
  41144. array.forEach((item) => {
  41145. item.no = item.getColumnIndex?.();
  41146. if (item.children?.length) sortColumn(item.children);
  41147. });
  41148. array.sort((cur, pre) => cur.no - pre.no);
  41149. }
  41150. function useStore() {
  41151. const instance = (0, vue.getCurrentInstance)();
  41152. const watcher = useWatcher$1();
  41153. const ns = useNamespace("table");
  41154. const { t } = useLocale();
  41155. const mutations = {
  41156. setData(states, data) {
  41157. const dataInstanceChanged = (0, vue.unref)(states._data) !== data;
  41158. states.data.value = data;
  41159. states._data.value = data;
  41160. instance.store.execQuery();
  41161. instance.store.updateCurrentRowData();
  41162. instance.store.updateExpandRows();
  41163. instance.store.updateTreeData(instance.store.states.defaultExpandAll.value);
  41164. if ((0, vue.unref)(states.reserveSelection)) instance.store.assertRowKey();
  41165. else if (dataInstanceChanged) instance.store.clearSelection();
  41166. else instance.store.cleanSelection();
  41167. instance.store.updateSelectionByChildren({ emitChange: false });
  41168. instance.store.updateAllSelected();
  41169. if (instance.$ready) instance.store.scheduleLayout();
  41170. },
  41171. insertColumn(states, column, parent, updateColumnOrder) {
  41172. const array = (0, vue.unref)(states._columns);
  41173. let newColumns = [];
  41174. if (!parent) {
  41175. array.push(column);
  41176. newColumns = array;
  41177. } else {
  41178. if (parent && !parent.children) parent.children = [];
  41179. parent.children?.push(column);
  41180. newColumns = replaceColumn(array, parent);
  41181. }
  41182. sortColumn(newColumns);
  41183. states._columns.value = newColumns;
  41184. states.updateOrderFns.push(updateColumnOrder);
  41185. if (column.type === "selection") {
  41186. states.selectable.value = column.selectable;
  41187. states.reserveSelection.value = column.reserveSelection;
  41188. }
  41189. if (instance.$ready) {
  41190. instance.store.updateColumns();
  41191. instance.store.scheduleLayout();
  41192. }
  41193. },
  41194. updateColumnOrder(states, column) {
  41195. if (column.getColumnIndex?.() === column.no) return;
  41196. sortColumn(states._columns.value);
  41197. if (instance.$ready) instance.store.updateColumns();
  41198. },
  41199. removeColumn(states, column, parent, updateColumnOrder) {
  41200. const array = (0, vue.unref)(states._columns) || [];
  41201. if (parent) {
  41202. parent.children?.splice(parent.children.findIndex((item) => item.id === column.id), 1);
  41203. (0, vue.nextTick)(() => {
  41204. if (parent.children?.length === 0) delete parent.children;
  41205. });
  41206. states._columns.value = replaceColumn(array, parent);
  41207. } else {
  41208. const index = array.indexOf(column);
  41209. if (index > -1) {
  41210. array.splice(index, 1);
  41211. states._columns.value = array;
  41212. }
  41213. }
  41214. const updateFnIndex = states.updateOrderFns.indexOf(updateColumnOrder);
  41215. updateFnIndex > -1 && states.updateOrderFns.splice(updateFnIndex, 1);
  41216. if (instance.$ready) {
  41217. instance.store.updateColumns();
  41218. instance.store.scheduleLayout();
  41219. }
  41220. },
  41221. sort(states, options) {
  41222. const { prop, order, init } = options;
  41223. if (prop) {
  41224. const column = (0, vue.unref)(states.columns).find((column) => column.property === prop);
  41225. if (column) {
  41226. column.order = order;
  41227. instance.store.updateSort(column, prop, order);
  41228. instance.store.commit("changeSortCondition", { init });
  41229. }
  41230. }
  41231. },
  41232. changeSortCondition(states, options) {
  41233. const { sortingColumn, sortProp, sortOrder } = states;
  41234. const columnValue = (0, vue.unref)(sortingColumn), propValue = (0, vue.unref)(sortProp), orderValue = (0, vue.unref)(sortOrder);
  41235. if (isNull(orderValue)) {
  41236. states.sortingColumn.value = null;
  41237. states.sortProp.value = null;
  41238. }
  41239. instance.store.execQuery({ filter: true });
  41240. if (!options || !(options.silent || options.init)) instance.emit("sort-change", {
  41241. column: columnValue,
  41242. prop: propValue,
  41243. order: orderValue
  41244. });
  41245. instance.store.updateTableScrollY();
  41246. },
  41247. filterChange(_states, options) {
  41248. const { column, values, silent } = options;
  41249. const newFilters = instance.store.updateFilters(column, values);
  41250. instance.store.execQuery();
  41251. if (!silent) instance.emit("filter-change", newFilters);
  41252. instance.store.updateTableScrollY();
  41253. },
  41254. toggleAllSelection() {
  41255. instance.store.toggleAllSelection?.();
  41256. },
  41257. rowSelectedChanged(_states, row) {
  41258. instance.store.toggleRowSelection(row);
  41259. instance.store.updateAllSelected();
  41260. },
  41261. setHoverRow(states, row) {
  41262. states.hoverRow.value = row;
  41263. },
  41264. setCurrentRow(_states, row) {
  41265. instance.store.updateCurrentRow(row);
  41266. }
  41267. };
  41268. const commit = function(name, ...args) {
  41269. const mutations = instance.store.mutations;
  41270. if (mutations[name]) mutations[name].apply(instance, [instance.store.states, ...args]);
  41271. else throw new Error(`Action not found: ${name}`);
  41272. };
  41273. const updateTableScrollY = function() {
  41274. (0, vue.nextTick)(() => instance.layout.updateScrollY.apply(instance.layout));
  41275. };
  41276. return {
  41277. ns,
  41278. t,
  41279. ...watcher,
  41280. mutations,
  41281. commit,
  41282. updateTableScrollY
  41283. };
  41284. }
  41285. //#endregion
  41286. //#region ../../packages/components/table/src/store/helper.ts
  41287. const InitialStateMap = {
  41288. rowKey: "rowKey",
  41289. defaultExpandAll: "defaultExpandAll",
  41290. rowExpandable: "rowExpandable",
  41291. selectOnIndeterminate: "selectOnIndeterminate",
  41292. indent: "indent",
  41293. lazy: "lazy",
  41294. ["treeProps.hasChildren"]: {
  41295. key: "lazyColumnIdentifier",
  41296. default: "hasChildren"
  41297. },
  41298. ["treeProps.children"]: {
  41299. key: "childrenColumnName",
  41300. default: "children"
  41301. },
  41302. ["treeProps.checkStrictly"]: {
  41303. key: "checkStrictly",
  41304. default: false
  41305. }
  41306. };
  41307. function createStore(table, props) {
  41308. if (!table) throw new Error("Table is required.");
  41309. const store = useStore();
  41310. store.toggleAllSelection = debounce(store._toggleAllSelection, 10);
  41311. Object.keys(InitialStateMap).forEach((key) => {
  41312. handleValue(getArrKeysValue(props, key), key, store);
  41313. });
  41314. proxyTableProps(store, props);
  41315. return store;
  41316. }
  41317. function proxyTableProps(store, props) {
  41318. Object.keys(InitialStateMap).forEach((key) => {
  41319. (0, vue.watch)(() => getArrKeysValue(props, key), (value) => {
  41320. handleValue(value, key, store);
  41321. });
  41322. });
  41323. }
  41324. function handleValue(value, propsKey, store) {
  41325. let newVal = value;
  41326. let storeKey = InitialStateMap[propsKey];
  41327. if (isObject$1(storeKey)) {
  41328. newVal = newVal || storeKey.default;
  41329. storeKey = storeKey.key;
  41330. }
  41331. store.states[storeKey].value = newVal;
  41332. }
  41333. function getArrKeysValue(props, key) {
  41334. if (key.includes(".")) {
  41335. const keyList = key.split(".");
  41336. let value = props;
  41337. keyList.forEach((k) => {
  41338. value = value[k];
  41339. });
  41340. return value;
  41341. } else return props[key];
  41342. }
  41343. //#endregion
  41344. //#region ../../packages/components/table/src/table-layout.ts
  41345. var TableLayout = class {
  41346. constructor(options) {
  41347. this.observers = [];
  41348. this.table = null;
  41349. this.store = null;
  41350. this.columns = [];
  41351. this.fit = true;
  41352. this.showHeader = true;
  41353. this.heightMap = {};
  41354. this.height = (0, vue.ref)(null);
  41355. this.scrollX = (0, vue.ref)(false);
  41356. this.scrollY = (0, vue.ref)(false);
  41357. this.bodyWidth = (0, vue.ref)(null);
  41358. this.fixedWidth = (0, vue.ref)(null);
  41359. this.rightFixedWidth = (0, vue.ref)(null);
  41360. this.gutterWidth = 0;
  41361. for (const name in options) if (hasOwn(options, name)) if ((0, vue.isRef)(this[name])) this[name].value = options[name];
  41362. else this[name] = options[name];
  41363. if (!this.table) throw new Error("Table is required for Table Layout");
  41364. if (!this.store) throw new Error("Store is required for Table Layout");
  41365. }
  41366. updateScrollY() {
  41367. const height = this.height.value;
  41368. if (isNull(height)) return false;
  41369. const scrollBarRef = this.table.refs.scrollBarRef;
  41370. if (this.table.vnode.el && scrollBarRef?.wrapRef) {
  41371. let scrollY = true;
  41372. const prevScrollY = this.scrollY.value;
  41373. scrollY = scrollBarRef.wrapRef.scrollHeight > scrollBarRef.wrapRef.clientHeight;
  41374. this.scrollY.value = scrollY;
  41375. return prevScrollY !== scrollY;
  41376. }
  41377. return false;
  41378. }
  41379. setHeight(value, prop = "height") {
  41380. if (!isClient) return;
  41381. const el = this.table.vnode.el;
  41382. value = parseHeight(value);
  41383. this.height.value = Number(value);
  41384. this.heightMap[prop] = value;
  41385. if (!el && (value || value === 0)) {
  41386. (0, vue.nextTick)(() => {
  41387. if (this.heightMap[prop] === value) this.setHeight(value, prop);
  41388. });
  41389. return;
  41390. }
  41391. if (el && isNumber(value)) {
  41392. el.style[prop] = `${value}px`;
  41393. this.updateElsHeight();
  41394. } else if (el && isString(value)) {
  41395. el.style[prop] = value;
  41396. this.updateElsHeight();
  41397. }
  41398. }
  41399. setMaxHeight(value) {
  41400. this.setHeight(value, "max-height");
  41401. }
  41402. getFlattenColumns() {
  41403. const flattenColumns = [];
  41404. this.table.store.states.columns.value.forEach((column) => {
  41405. if (column.isColumnGroup) flattenColumns.push.apply(flattenColumns, column.columns);
  41406. else flattenColumns.push(column);
  41407. });
  41408. return flattenColumns;
  41409. }
  41410. updateElsHeight() {
  41411. this.updateScrollY();
  41412. this.notifyObservers("scrollable");
  41413. }
  41414. headerDisplayNone(elm) {
  41415. if (!elm) return true;
  41416. let headerChild = elm;
  41417. while (headerChild.tagName !== "DIV") {
  41418. if (getComputedStyle(headerChild).display === "none") return true;
  41419. headerChild = headerChild.parentElement;
  41420. }
  41421. return false;
  41422. }
  41423. updateColumnsWidth() {
  41424. if (!isClient) return;
  41425. const fit = this.fit;
  41426. const bodyWidth = this.table.vnode.el?.clientWidth;
  41427. let bodyMinWidth = 0;
  41428. const flattenColumns = this.getFlattenColumns();
  41429. const flexColumns = flattenColumns.filter((column) => !isNumber(column.width));
  41430. flattenColumns.forEach((column) => {
  41431. if (isNumber(column.width) && column.realWidth) column.realWidth = null;
  41432. });
  41433. if (flexColumns.length > 0 && fit) {
  41434. flattenColumns.forEach((column) => {
  41435. bodyMinWidth += Number(column.width || column.minWidth || 80);
  41436. });
  41437. if (bodyMinWidth <= bodyWidth) {
  41438. this.scrollX.value = false;
  41439. const totalFlexWidth = bodyWidth - bodyMinWidth;
  41440. if (flexColumns.length === 1) flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth;
  41441. else {
  41442. const flexWidthPerPixel = totalFlexWidth / flexColumns.reduce((prev, column) => prev + Number(column.minWidth || 80), 0);
  41443. let noneFirstWidth = 0;
  41444. flexColumns.forEach((column, index) => {
  41445. if (index === 0) return;
  41446. const flexWidth = Math.floor(Number(column.minWidth || 80) * flexWidthPerPixel);
  41447. noneFirstWidth += flexWidth;
  41448. column.realWidth = Number(column.minWidth || 80) + flexWidth;
  41449. });
  41450. flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth;
  41451. }
  41452. } else {
  41453. this.scrollX.value = true;
  41454. flexColumns.forEach((column) => {
  41455. column.realWidth = Number(column.minWidth);
  41456. });
  41457. }
  41458. this.bodyWidth.value = Math.max(bodyMinWidth, bodyWidth);
  41459. this.table.state.resizeState.value.width = this.bodyWidth.value;
  41460. } else {
  41461. flattenColumns.forEach((column) => {
  41462. if (!column.width && !column.minWidth) column.realWidth = 80;
  41463. else column.realWidth = Number(column.width || column.minWidth);
  41464. bodyMinWidth += column.realWidth;
  41465. });
  41466. this.scrollX.value = bodyMinWidth > bodyWidth;
  41467. this.bodyWidth.value = bodyMinWidth;
  41468. }
  41469. const fixedColumns = this.store.states.fixedColumns.value;
  41470. if (fixedColumns.length > 0) {
  41471. let fixedWidth = 0;
  41472. fixedColumns.forEach((column) => {
  41473. fixedWidth += Number(column.realWidth || column.width);
  41474. });
  41475. this.fixedWidth.value = fixedWidth;
  41476. }
  41477. const rightFixedColumns = this.store.states.rightFixedColumns.value;
  41478. if (rightFixedColumns.length > 0) {
  41479. let rightFixedWidth = 0;
  41480. rightFixedColumns.forEach((column) => {
  41481. rightFixedWidth += Number(column.realWidth || column.width);
  41482. });
  41483. this.rightFixedWidth.value = rightFixedWidth;
  41484. }
  41485. this.notifyObservers("columns");
  41486. }
  41487. addObserver(observer) {
  41488. this.observers.push(observer);
  41489. }
  41490. removeObserver(observer) {
  41491. const index = this.observers.indexOf(observer);
  41492. if (index !== -1) this.observers.splice(index, 1);
  41493. }
  41494. notifyObservers(event) {
  41495. this.observers.forEach((observer) => {
  41496. switch (event) {
  41497. case "columns":
  41498. observer.state?.onColumnsChange(this);
  41499. break;
  41500. case "scrollable":
  41501. observer.state?.onScrollableChange(this);
  41502. break;
  41503. default: throw new Error(`Table Layout don't have event ${event}.`);
  41504. }
  41505. });
  41506. }
  41507. };
  41508. //#endregion
  41509. //#region ../../packages/components/table/src/filter-panel.vue?vue&type=script&lang.ts
  41510. var filter_panel_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  41511. name: "ElTableFilterPanel",
  41512. components: {
  41513. ElCheckbox,
  41514. ElCheckboxGroup,
  41515. ElScrollbar,
  41516. ElTooltip,
  41517. ElIcon,
  41518. ArrowDown: arrow_down_default,
  41519. ArrowUp: arrow_up_default
  41520. },
  41521. props: {
  41522. placement: {
  41523. type: String,
  41524. default: "bottom-start"
  41525. },
  41526. store: { type: Object },
  41527. column: { type: Object },
  41528. upDataColumn: { type: Function },
  41529. appendTo: useTooltipContentProps.appendTo
  41530. },
  41531. setup(props) {
  41532. const instance = (0, vue.getCurrentInstance)();
  41533. const { t } = useLocale();
  41534. const ns = useNamespace("table-filter");
  41535. const parent = instance?.parent;
  41536. if (props.column && !parent.filterPanels.value[props.column.id]) parent.filterPanels.value[props.column.id] = instance;
  41537. const tooltipRef = (0, vue.ref)(null);
  41538. const rootRef = (0, vue.ref)(null);
  41539. const checkedIndex = (0, vue.ref)(0);
  41540. const filters = (0, vue.computed)(() => {
  41541. return props.column && props.column.filters;
  41542. });
  41543. const filterClassName = (0, vue.computed)(() => {
  41544. if (props.column && props.column.filterClassName) return `${ns.b()} ${props.column.filterClassName}`;
  41545. return ns.b();
  41546. });
  41547. const filterValue = (0, vue.computed)({
  41548. get: () => (props.column?.filteredValue || [])[0],
  41549. set: (value) => {
  41550. if (filteredValue.value) if (!isPropAbsent(value)) filteredValue.value.splice(0, 1, value);
  41551. else filteredValue.value.splice(0, 1);
  41552. }
  41553. });
  41554. const filteredValue = (0, vue.computed)({
  41555. get() {
  41556. if (props.column) return props.column.filteredValue || [];
  41557. return [];
  41558. },
  41559. set(value) {
  41560. if (props.column) props.upDataColumn?.("filteredValue", value);
  41561. }
  41562. });
  41563. const multiple = (0, vue.computed)(() => {
  41564. if (props.column) return props.column.filterMultiple;
  41565. return true;
  41566. });
  41567. const isActive = (filter) => {
  41568. return filter.value === filterValue.value;
  41569. };
  41570. const hidden = () => {
  41571. tooltipRef.value?.onClose();
  41572. };
  41573. const handleConfirm = () => {
  41574. confirmFilter(filteredValue.value);
  41575. hidden();
  41576. };
  41577. const handleReset = () => {
  41578. filteredValue.value = [];
  41579. confirmFilter(filteredValue.value);
  41580. hidden();
  41581. };
  41582. const handleSelect = (_filterValue, index) => {
  41583. filterValue.value = _filterValue;
  41584. checkedIndex.value = index;
  41585. if (!isPropAbsent(_filterValue)) confirmFilter(filteredValue.value);
  41586. else confirmFilter([]);
  41587. hidden();
  41588. };
  41589. const confirmFilter = (filteredValue) => {
  41590. props.store?.commit("filterChange", {
  41591. column: props.column,
  41592. values: filteredValue
  41593. });
  41594. props.store?.updateAllSelected();
  41595. };
  41596. const handleShowTooltip = () => {
  41597. rootRef.value?.focus();
  41598. !multiple.value && initCheckedIndex();
  41599. if (props.column) props.upDataColumn?.("filterOpened", true);
  41600. };
  41601. const handleHideTooltip = () => {
  41602. if (props.column) props.upDataColumn?.("filterOpened", false);
  41603. };
  41604. const initCheckedIndex = () => {
  41605. if (isPropAbsent(filterValue)) {
  41606. checkedIndex.value = 0;
  41607. return;
  41608. }
  41609. const idx = (filters.value || []).findIndex((item) => {
  41610. return item.value === filterValue.value;
  41611. });
  41612. checkedIndex.value = idx >= 0 ? idx + 1 : 0;
  41613. };
  41614. const handleKeydown = (event) => {
  41615. const code = getEventCode(event);
  41616. const len = (filters.value ? filters.value.length : 0) + 1;
  41617. let index = checkedIndex.value;
  41618. let isPreventDefault = true;
  41619. switch (code) {
  41620. case EVENT_CODE.down:
  41621. case EVENT_CODE.right:
  41622. index = (index + 1) % len;
  41623. break;
  41624. case EVENT_CODE.up:
  41625. case EVENT_CODE.left:
  41626. index = (index - 1 + len) % len;
  41627. break;
  41628. case EVENT_CODE.tab:
  41629. hidden();
  41630. isPreventDefault = false;
  41631. break;
  41632. case EVENT_CODE.enter:
  41633. case EVENT_CODE.space:
  41634. if (index === 0) handleSelect(null, 0);
  41635. else {
  41636. const item = (filters.value || [])[index - 1];
  41637. item.value && handleSelect(item.value, index);
  41638. }
  41639. break;
  41640. default:
  41641. isPreventDefault = false;
  41642. break;
  41643. }
  41644. isPreventDefault && event.preventDefault();
  41645. checkedIndex.value = index;
  41646. rootRef.value?.querySelector(`.${ns.e("list-item")}:nth-child(${index + 1})`)?.focus();
  41647. };
  41648. return {
  41649. multiple,
  41650. filterClassName,
  41651. filteredValue,
  41652. filterValue,
  41653. filters,
  41654. handleConfirm,
  41655. handleReset,
  41656. handleSelect,
  41657. isPropAbsent,
  41658. isActive,
  41659. t,
  41660. ns,
  41661. tooltipRef,
  41662. rootRef,
  41663. checkedIndex,
  41664. handleShowTooltip,
  41665. handleHideTooltip,
  41666. handleKeydown
  41667. };
  41668. }
  41669. });
  41670. //#endregion
  41671. //#region ../../packages/components/table/src/filter-panel.vue
  41672. const _hoisted_1$17 = ["disabled"];
  41673. const _hoisted_2$10 = ["tabindex", "aria-checked"];
  41674. const _hoisted_3$3 = [
  41675. "tabindex",
  41676. "aria-checked",
  41677. "onClick"
  41678. ];
  41679. const _hoisted_4$2 = ["aria-label"];
  41680. function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
  41681. const _component_el_checkbox = (0, vue.resolveComponent)("el-checkbox");
  41682. const _component_el_checkbox_group = (0, vue.resolveComponent)("el-checkbox-group");
  41683. const _component_el_scrollbar = (0, vue.resolveComponent)("el-scrollbar");
  41684. const _component_arrow_up = (0, vue.resolveComponent)("arrow-up");
  41685. const _component_arrow_down = (0, vue.resolveComponent)("arrow-down");
  41686. const _component_el_icon = (0, vue.resolveComponent)("el-icon");
  41687. const _component_el_tooltip = (0, vue.resolveComponent)("el-tooltip");
  41688. return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tooltip, {
  41689. ref: "tooltipRef",
  41690. offset: 0,
  41691. placement: _ctx.placement,
  41692. "show-arrow": false,
  41693. trigger: "click",
  41694. role: "dialog",
  41695. teleported: "",
  41696. effect: "light",
  41697. pure: "",
  41698. loop: "",
  41699. "popper-class": _ctx.filterClassName,
  41700. persistent: "",
  41701. "append-to": _ctx.appendTo,
  41702. onShow: _ctx.handleShowTooltip,
  41703. onHide: _ctx.handleHideTooltip
  41704. }, {
  41705. content: (0, vue.withCtx)(() => [_ctx.multiple ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  41706. key: 0,
  41707. ref: "rootRef",
  41708. tabindex: "-1",
  41709. class: (0, vue.normalizeClass)(_ctx.ns.e("multiple"))
  41710. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("content")) }, [(0, vue.createVNode)(_component_el_scrollbar, { "wrap-class": _ctx.ns.e("wrap") }, {
  41711. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_el_checkbox_group, {
  41712. modelValue: _ctx.filteredValue,
  41713. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.filteredValue = $event),
  41714. class: (0, vue.normalizeClass)(_ctx.ns.e("checkbox-group"))
  41715. }, {
  41716. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.filters, (filter) => {
  41717. return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_checkbox, {
  41718. key: filter.value,
  41719. value: filter.value
  41720. }, {
  41721. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(filter.text), 1)]),
  41722. _: 2
  41723. }, 1032, ["value"]);
  41724. }), 128))]),
  41725. _: 1
  41726. }, 8, ["modelValue", "class"])]),
  41727. _: 1
  41728. }, 8, ["wrap-class"])], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("bottom")) }, [(0, vue.createElementVNode)("button", {
  41729. class: (0, vue.normalizeClass)(_ctx.ns.is("disabled", _ctx.filteredValue.length === 0)),
  41730. disabled: _ctx.filteredValue.length === 0,
  41731. type: "button",
  41732. onClick: _cache[1] || (_cache[1] = (...args) => _ctx.handleConfirm && _ctx.handleConfirm(...args))
  41733. }, (0, vue.toDisplayString)(_ctx.t("el.table.confirmFilter")), 11, _hoisted_1$17), (0, vue.createElementVNode)("button", {
  41734. type: "button",
  41735. onClick: _cache[2] || (_cache[2] = (...args) => _ctx.handleReset && _ctx.handleReset(...args))
  41736. }, (0, vue.toDisplayString)(_ctx.t("el.table.resetFilter")), 1)], 2)], 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
  41737. key: 1,
  41738. ref: "rootRef",
  41739. tabindex: "-1",
  41740. role: "radiogroup",
  41741. class: (0, vue.normalizeClass)(_ctx.ns.e("list")),
  41742. onKeydown: _cache[4] || (_cache[4] = (...args) => _ctx.handleKeydown && _ctx.handleKeydown(...args))
  41743. }, [(0, vue.createElementVNode)("li", {
  41744. role: "radio",
  41745. class: (0, vue.normalizeClass)([_ctx.ns.e("list-item"), _ctx.ns.is("active", _ctx.isPropAbsent(_ctx.filterValue))]),
  41746. tabindex: _ctx.checkedIndex === 0 ? 0 : -1,
  41747. "aria-checked": _ctx.isPropAbsent(_ctx.filterValue),
  41748. onClick: _cache[3] || (_cache[3] = ($event) => _ctx.handleSelect(null, 0))
  41749. }, (0, vue.toDisplayString)(_ctx.t("el.table.clearFilter")), 11, _hoisted_2$10), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.filters, (filter, idx) => {
  41750. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  41751. key: filter.value,
  41752. role: "radio",
  41753. class: (0, vue.normalizeClass)([_ctx.ns.e("list-item"), _ctx.ns.is("active", _ctx.isActive(filter))]),
  41754. tabindex: _ctx.checkedIndex === idx + 1 ? 0 : -1,
  41755. "aria-checked": _ctx.isActive(filter),
  41756. onClick: ($event) => _ctx.handleSelect(filter.value, idx + 1)
  41757. }, (0, vue.toDisplayString)(filter.text), 11, _hoisted_3$3);
  41758. }), 128))], 34))]),
  41759. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("button", {
  41760. type: "button",
  41761. class: (0, vue.normalizeClass)(`${_ctx.ns.namespace.value}-table__column-filter-trigger`),
  41762. "aria-label": _ctx.t("el.table.filterLabel", { column: _ctx.column?.label || "" })
  41763. }, [(0, vue.createVNode)(_component_el_icon, null, {
  41764. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "filter-icon", {}, () => [_ctx.column?.filterOpened ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_arrow_up, { key: 0 })) : ((0, vue.openBlock)(), (0, vue.createBlock)(_component_arrow_down, { key: 1 }))])]),
  41765. _: 3
  41766. })], 10, _hoisted_4$2)]),
  41767. _: 3
  41768. }, 8, [
  41769. "placement",
  41770. "popper-class",
  41771. "append-to",
  41772. "onShow",
  41773. "onHide"
  41774. ]);
  41775. }
  41776. var filter_panel_default = /* @__PURE__ */ _plugin_vue_export_helper_default(filter_panel_vue_vue_type_script_lang_default, [["render", _sfc_render$3]]);
  41777. //#endregion
  41778. //#region ../../packages/components/table/src/layout-observer.ts
  41779. function useLayoutObserver(root) {
  41780. const instance = (0, vue.getCurrentInstance)();
  41781. (0, vue.onBeforeMount)(() => {
  41782. tableLayout.value.addObserver(instance);
  41783. });
  41784. (0, vue.onMounted)(() => {
  41785. onColumnsChange(tableLayout.value);
  41786. onScrollableChange(tableLayout.value);
  41787. });
  41788. (0, vue.onUpdated)(() => {
  41789. onColumnsChange(tableLayout.value);
  41790. onScrollableChange(tableLayout.value);
  41791. });
  41792. (0, vue.onUnmounted)(() => {
  41793. tableLayout.value.removeObserver(instance);
  41794. });
  41795. const tableLayout = (0, vue.computed)(() => {
  41796. const layout = root.layout;
  41797. if (!layout) throw new Error("Can not find table layout.");
  41798. return layout;
  41799. });
  41800. const onColumnsChange = (layout) => {
  41801. const cols = root.vnode.el?.querySelectorAll("colgroup > col") || [];
  41802. if (!cols.length) return;
  41803. const flattenColumns = layout.getFlattenColumns();
  41804. const columnsMap = {};
  41805. flattenColumns.forEach((column) => {
  41806. columnsMap[column.id] = column;
  41807. });
  41808. for (let i = 0, j = cols.length; i < j; i++) {
  41809. const col = cols[i];
  41810. const column = columnsMap[col.getAttribute("name")];
  41811. if (column) col.setAttribute("width", column.realWidth || column.width);
  41812. }
  41813. };
  41814. const onScrollableChange = (layout) => {
  41815. const cols = root.vnode.el?.querySelectorAll("colgroup > col[name=gutter]") || [];
  41816. for (let i = 0, j = cols.length; i < j; i++) cols[i].setAttribute("width", layout.scrollY.value ? layout.gutterWidth : "0");
  41817. const ths = root.vnode.el?.querySelectorAll("th.gutter") || [];
  41818. for (let i = 0, j = ths.length; i < j; i++) {
  41819. const th = ths[i];
  41820. th.style.width = layout.scrollY.value ? `${layout.gutterWidth}px` : "0";
  41821. th.style.display = layout.scrollY.value ? "" : "none";
  41822. }
  41823. };
  41824. return {
  41825. tableLayout: tableLayout.value,
  41826. onColumnsChange,
  41827. onScrollableChange
  41828. };
  41829. }
  41830. //#endregion
  41831. //#region ../../packages/components/table/src/tokens.ts
  41832. const TABLE_INJECTION_KEY = Symbol("ElTable");
  41833. //#endregion
  41834. //#region ../../packages/components/table/src/table-header/event-helper.ts
  41835. function useEvent(props, emit) {
  41836. const instance = (0, vue.getCurrentInstance)();
  41837. const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
  41838. const handleFilterClick = (event) => {
  41839. event.stopPropagation();
  41840. };
  41841. const handleHeaderClick = (event, column) => {
  41842. if (!column.filters && column.sortable) handleSortClick(event, column, false);
  41843. else if (column.filterable && !column.sortable) handleFilterClick(event);
  41844. parent?.emit("header-click", column, event);
  41845. };
  41846. const handleHeaderContextMenu = (event, column) => {
  41847. parent?.emit("header-contextmenu", column, event);
  41848. };
  41849. const draggingColumn = (0, vue.ref)(null);
  41850. const dragging = (0, vue.ref)(false);
  41851. const dragState = (0, vue.ref)();
  41852. const handleMouseDown = (event, column) => {
  41853. if (!isClient) return;
  41854. if (column.children && column.children.length > 0) return;
  41855. /* istanbul ignore if */
  41856. if (draggingColumn.value && props.border && draggingColumn.value.id === column.id) {
  41857. dragging.value = true;
  41858. const table = parent;
  41859. emit("set-drag-visible", true);
  41860. const tableLeft = (table?.vnode.el)?.getBoundingClientRect().left;
  41861. const columnEl = instance?.vnode?.el?.querySelector(`th.${column.id}`);
  41862. const columnRect = columnEl.getBoundingClientRect();
  41863. const minLeft = columnRect.left - tableLeft + 30;
  41864. addClass(columnEl, "noclick");
  41865. dragState.value = {
  41866. startMouseLeft: event.clientX,
  41867. startLeft: columnRect.right - tableLeft,
  41868. startColumnLeft: columnRect.left - tableLeft,
  41869. tableLeft
  41870. };
  41871. const resizeProxy = table?.refs.resizeProxy;
  41872. resizeProxy.style.left = `${dragState.value.startLeft}px`;
  41873. document.onselectstart = function() {
  41874. return false;
  41875. };
  41876. document.ondragstart = function() {
  41877. return false;
  41878. };
  41879. const handleMouseMove = (event) => {
  41880. const deltaLeft = event.clientX - dragState.value.startMouseLeft;
  41881. const proxyLeft = dragState.value.startLeft + deltaLeft;
  41882. resizeProxy.style.left = `${Math.max(minLeft, proxyLeft)}px`;
  41883. };
  41884. const handleMouseUp = () => {
  41885. if (dragging.value) {
  41886. const { startColumnLeft, startLeft } = dragState.value;
  41887. column.width = column.realWidth = Number.parseInt(resizeProxy.style.left, 10) - startColumnLeft;
  41888. table?.emit("header-dragend", column.width, startLeft - startColumnLeft, column, event);
  41889. requestAnimationFrame(() => {
  41890. props.store.scheduleLayout(false, true);
  41891. });
  41892. document.body.style.cursor = "";
  41893. dragging.value = false;
  41894. draggingColumn.value = null;
  41895. dragState.value = void 0;
  41896. emit("set-drag-visible", false);
  41897. }
  41898. document.removeEventListener("mousemove", handleMouseMove);
  41899. document.removeEventListener("mouseup", handleMouseUp);
  41900. document.onselectstart = null;
  41901. document.ondragstart = null;
  41902. setTimeout(() => {
  41903. removeClass(columnEl, "noclick");
  41904. }, 0);
  41905. };
  41906. document.addEventListener("mousemove", handleMouseMove);
  41907. document.addEventListener("mouseup", handleMouseUp);
  41908. }
  41909. };
  41910. const handleMouseMove = (event, column) => {
  41911. if (!props.border || column.children && column.children.length > 0) return;
  41912. const el = event.target;
  41913. const target = isElement$1(el) ? el.closest("th") : null;
  41914. if (!target) return;
  41915. const isSortable = hasClass(target, "is-sortable");
  41916. if (isSortable) {
  41917. const cursor = dragging.value ? "col-resize" : "";
  41918. target.style.cursor = cursor;
  41919. const caret = target.querySelector(".caret-wrapper");
  41920. if (caret) caret.style.cursor = cursor;
  41921. }
  41922. if (!column.resizable || dragging.value) {
  41923. draggingColumn.value = null;
  41924. return;
  41925. }
  41926. const rect = target.getBoundingClientRect();
  41927. const isLastTh = target.parentNode?.lastElementChild === target;
  41928. const allowDrag = props.allowDragLastColumn || !isLastTh;
  41929. const isResizeHandleActive = rect.width > 12 && rect.right - event.clientX < 8 && allowDrag;
  41930. const cursor = isResizeHandleActive ? "col-resize" : "";
  41931. document.body.style.cursor = cursor;
  41932. draggingColumn.value = isResizeHandleActive ? column : null;
  41933. if (isSortable) target.style.cursor = cursor;
  41934. };
  41935. const handleMouseOut = () => {
  41936. if (!isClient || dragging.value) return;
  41937. document.body.style.cursor = "";
  41938. };
  41939. const toggleOrder = ({ order, sortOrders }) => {
  41940. if (order === "") return sortOrders[0];
  41941. const index = sortOrders.indexOf(order || null);
  41942. return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1];
  41943. };
  41944. const handleSortClick = (event, column, givenOrder) => {
  41945. event.stopPropagation();
  41946. const order = column.order === givenOrder ? null : givenOrder || toggleOrder(column);
  41947. const target = event.target?.closest("th");
  41948. if (target) {
  41949. if (hasClass(target, "noclick")) {
  41950. removeClass(target, "noclick");
  41951. return;
  41952. }
  41953. }
  41954. if (!column.sortable) return;
  41955. const clickTarget = event.currentTarget;
  41956. if (["ascending", "descending"].some((str) => hasClass(clickTarget, str) && !column.sortOrders.includes(str))) return;
  41957. const states = props.store.states;
  41958. let sortProp = states.sortProp.value;
  41959. let sortOrder;
  41960. const sortingColumn = states.sortingColumn.value;
  41961. if (sortingColumn !== column || sortingColumn === column && isNull(sortingColumn.order)) {
  41962. if (sortingColumn) sortingColumn.order = null;
  41963. states.sortingColumn.value = column;
  41964. sortProp = column.property ?? null;
  41965. }
  41966. if (!order) sortOrder = column.order = null;
  41967. else sortOrder = column.order = order;
  41968. states.sortProp.value = sortProp;
  41969. states.sortOrder.value = sortOrder;
  41970. parent?.store.commit("changeSortCondition");
  41971. };
  41972. return {
  41973. handleHeaderClick,
  41974. handleHeaderContextMenu,
  41975. handleMouseDown,
  41976. handleMouseMove,
  41977. handleMouseOut,
  41978. handleSortClick,
  41979. handleFilterClick
  41980. };
  41981. }
  41982. //#endregion
  41983. //#region ../../packages/components/table/src/table-header/style.helper.ts
  41984. function useStyle$2(props) {
  41985. const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
  41986. const ns = useNamespace("table");
  41987. const getHeaderRowStyle = (rowIndex) => {
  41988. const headerRowStyle = parent?.props.headerRowStyle;
  41989. if (isFunction$1(headerRowStyle)) return headerRowStyle.call(null, { rowIndex });
  41990. return headerRowStyle;
  41991. };
  41992. const getHeaderRowClass = (rowIndex) => {
  41993. const classes = [];
  41994. const headerRowClassName = parent?.props.headerRowClassName;
  41995. if (isString(headerRowClassName)) classes.push(headerRowClassName);
  41996. else if (isFunction$1(headerRowClassName)) classes.push(headerRowClassName.call(null, { rowIndex }));
  41997. return classes.join(" ");
  41998. };
  41999. const getHeaderCellStyle = (rowIndex, columnIndex, row, column) => {
  42000. let headerCellStyles = parent?.props.headerCellStyle ?? {};
  42001. if (isFunction$1(headerCellStyles)) headerCellStyles = headerCellStyles.call(null, {
  42002. rowIndex,
  42003. columnIndex,
  42004. row,
  42005. column
  42006. });
  42007. const fixedStyle = getFixedColumnOffset(columnIndex, column.fixed, props.store, row);
  42008. ensurePosition(fixedStyle, "left");
  42009. ensurePosition(fixedStyle, "right");
  42010. return Object.assign({}, headerCellStyles, fixedStyle);
  42011. };
  42012. const getHeaderCellClass = (rowIndex, columnIndex, row, column) => {
  42013. const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, column.fixed, props.store, row);
  42014. const classes = [
  42015. column.id,
  42016. column.order,
  42017. column.headerAlign,
  42018. column.className,
  42019. column.labelClassName,
  42020. ...fixedClasses
  42021. ];
  42022. if (!column.children) classes.push("is-leaf");
  42023. if (column.sortable) classes.push("is-sortable");
  42024. const headerCellClassName = parent?.props.headerCellClassName;
  42025. if (isString(headerCellClassName)) classes.push(headerCellClassName);
  42026. else if (isFunction$1(headerCellClassName)) classes.push(headerCellClassName.call(null, {
  42027. rowIndex,
  42028. columnIndex,
  42029. row,
  42030. column
  42031. }));
  42032. classes.push(ns.e("cell"));
  42033. return classes.filter((className) => Boolean(className)).join(" ");
  42034. };
  42035. return {
  42036. getHeaderRowStyle,
  42037. getHeaderRowClass,
  42038. getHeaderCellStyle,
  42039. getHeaderCellClass
  42040. };
  42041. }
  42042. //#endregion
  42043. //#region ../../packages/components/table/src/table-header/utils-helper.ts
  42044. const getAllColumns = (columns) => {
  42045. const result = [];
  42046. columns.forEach((column) => {
  42047. if (column.children) {
  42048. result.push(column);
  42049. result.push.apply(result, getAllColumns(column.children));
  42050. } else result.push(column);
  42051. });
  42052. return result;
  42053. };
  42054. const convertToRows = (originColumns) => {
  42055. let maxLevel = 1;
  42056. const traverse = (column, parent) => {
  42057. if (parent) {
  42058. column.level = parent.level + 1;
  42059. if (maxLevel < column.level) maxLevel = column.level;
  42060. }
  42061. if (column.children) {
  42062. let colSpan = 0;
  42063. column.children.forEach((subColumn) => {
  42064. traverse(subColumn, column);
  42065. colSpan += subColumn.colSpan;
  42066. });
  42067. column.colSpan = colSpan;
  42068. } else column.colSpan = 1;
  42069. };
  42070. originColumns.forEach((column) => {
  42071. column.level = 1;
  42072. traverse(column, void 0);
  42073. });
  42074. const rows = [];
  42075. for (let i = 0; i < maxLevel; i++) rows.push([]);
  42076. getAllColumns(originColumns).forEach((column) => {
  42077. if (!column.children) column.rowSpan = maxLevel - column.level + 1;
  42078. else {
  42079. column.rowSpan = 1;
  42080. column.children.forEach((col) => col.isSubColumn = true);
  42081. }
  42082. rows[column.level - 1].push(column);
  42083. });
  42084. return rows;
  42085. };
  42086. function useUtils$1(props) {
  42087. const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
  42088. const columnRows = (0, vue.computed)(() => {
  42089. return convertToRows(props.store.states.originColumns.value);
  42090. });
  42091. const isGroup = (0, vue.computed)(() => {
  42092. const result = columnRows.value.length > 1;
  42093. if (result && parent) parent.state.isGroup.value = true;
  42094. return result;
  42095. });
  42096. const toggleAllSelection = (event) => {
  42097. event.stopPropagation();
  42098. parent?.store.commit("toggleAllSelection");
  42099. };
  42100. return {
  42101. isGroup,
  42102. toggleAllSelection,
  42103. columnRows
  42104. };
  42105. }
  42106. //#endregion
  42107. //#region ../../packages/components/table/src/table-header/index.ts
  42108. var table_header_default = (0, vue.defineComponent)({
  42109. name: "ElTableHeader",
  42110. components: { ElCheckbox },
  42111. props: {
  42112. fixed: {
  42113. type: String,
  42114. default: ""
  42115. },
  42116. store: {
  42117. required: true,
  42118. type: Object
  42119. },
  42120. border: Boolean,
  42121. defaultSort: {
  42122. type: Object,
  42123. default: () => {
  42124. return {
  42125. prop: "",
  42126. order: ""
  42127. };
  42128. }
  42129. },
  42130. appendFilterPanelTo: { type: String },
  42131. allowDragLastColumn: { type: Boolean }
  42132. },
  42133. setup(props, { emit }) {
  42134. const instance = (0, vue.getCurrentInstance)();
  42135. const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
  42136. const ns = useNamespace("table");
  42137. const filterPanels = (0, vue.ref)({});
  42138. const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent);
  42139. const isTableLayoutAuto = parent?.props.tableLayout === "auto";
  42140. const saveIndexSelection = (0, vue.reactive)(/* @__PURE__ */ new Map());
  42141. const theadRef = (0, vue.ref)();
  42142. let delayId;
  42143. const updateFixedColumnStyle = () => {
  42144. delayId = setTimeout(() => {
  42145. if (saveIndexSelection.size > 0) {
  42146. saveIndexSelection.forEach((column, key) => {
  42147. const el = theadRef.value.querySelector(`.${key.replace(/\s/g, ".")}`);
  42148. if (el) column.width = el.getBoundingClientRect().width || column.width;
  42149. });
  42150. saveIndexSelection.clear();
  42151. }
  42152. });
  42153. };
  42154. (0, vue.watch)(saveIndexSelection, updateFixedColumnStyle);
  42155. (0, vue.onBeforeUnmount)(() => {
  42156. if (delayId) {
  42157. clearTimeout(delayId);
  42158. delayId = void 0;
  42159. }
  42160. });
  42161. (0, vue.onMounted)(async () => {
  42162. await (0, vue.nextTick)();
  42163. await (0, vue.nextTick)();
  42164. const { prop, order } = props.defaultSort;
  42165. parent?.store.commit("sort", {
  42166. prop,
  42167. order,
  42168. init: true
  42169. });
  42170. updateFixedColumnStyle();
  42171. });
  42172. const { handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleMouseOut, handleSortClick, handleFilterClick } = useEvent(props, emit);
  42173. const { getHeaderRowStyle, getHeaderRowClass, getHeaderCellStyle, getHeaderCellClass } = useStyle$2(props);
  42174. const { isGroup, toggleAllSelection, columnRows } = useUtils$1(props);
  42175. const { t } = useLocale();
  42176. instance.state = {
  42177. onColumnsChange,
  42178. onScrollableChange
  42179. };
  42180. instance.filterPanels = filterPanels;
  42181. return {
  42182. ns,
  42183. t,
  42184. filterPanels,
  42185. onColumnsChange,
  42186. onScrollableChange,
  42187. columnRows,
  42188. getHeaderRowClass,
  42189. getHeaderRowStyle,
  42190. getHeaderCellClass,
  42191. getHeaderCellStyle,
  42192. handleHeaderClick,
  42193. handleHeaderContextMenu,
  42194. handleMouseDown,
  42195. handleMouseMove,
  42196. handleMouseOut,
  42197. handleSortClick,
  42198. handleFilterClick,
  42199. isGroup,
  42200. toggleAllSelection,
  42201. saveIndexSelection,
  42202. isTableLayoutAuto,
  42203. theadRef,
  42204. updateFixedColumnStyle
  42205. };
  42206. },
  42207. render() {
  42208. const { ns, t, isGroup, columnRows, getHeaderCellStyle, getHeaderCellClass, getHeaderRowClass, getHeaderRowStyle, handleHeaderClick, handleHeaderContextMenu, handleMouseDown, handleMouseMove, handleSortClick, handleMouseOut, store, $parent, saveIndexSelection, isTableLayoutAuto } = this;
  42209. let rowSpan = 1;
  42210. return (0, vue.h)("thead", {
  42211. ref: "theadRef",
  42212. class: ns.is("group", isGroup)
  42213. }, columnRows.map((subColumns, rowIndex) => (0, vue.h)("tr", {
  42214. class: getHeaderRowClass(rowIndex),
  42215. key: rowIndex,
  42216. style: getHeaderRowStyle(rowIndex)
  42217. }, subColumns.map((column, cellIndex) => {
  42218. if (column.rowSpan > rowSpan) rowSpan = column.rowSpan;
  42219. const _class = getHeaderCellClass(rowIndex, cellIndex, subColumns, column);
  42220. if (isTableLayoutAuto && column.fixed) saveIndexSelection.set(_class, column);
  42221. return (0, vue.h)("th", {
  42222. class: _class,
  42223. colspan: column.colSpan,
  42224. key: `${column.id}-thead`,
  42225. rowspan: column.rowSpan,
  42226. scope: column.colSpan > 1 ? "colgroup" : "col",
  42227. ariaSort: column.sortable ? column.order : void 0,
  42228. style: getHeaderCellStyle(rowIndex, cellIndex, subColumns, column),
  42229. onClick: ($event) => {
  42230. if ($event.currentTarget?.classList.contains("noclick")) return;
  42231. handleHeaderClick($event, column);
  42232. },
  42233. onContextmenu: ($event) => handleHeaderContextMenu($event, column),
  42234. onMousedown: ($event) => handleMouseDown($event, column),
  42235. onMousemove: ($event) => handleMouseMove($event, column),
  42236. onMouseout: handleMouseOut
  42237. }, [(0, vue.h)("div", { class: ["cell", column.filteredValue && column.filteredValue.length > 0 ? "highlight" : ""] }, [
  42238. column.renderHeader ? column.renderHeader({
  42239. column,
  42240. $index: cellIndex,
  42241. store,
  42242. _self: $parent
  42243. }) : column.label,
  42244. column.sortable && (0, vue.h)("button", {
  42245. type: "button",
  42246. class: "caret-wrapper",
  42247. "aria-label": t("el.table.sortLabel", { column: column.label || "" }),
  42248. onClick: ($event) => handleSortClick($event, column)
  42249. }, [(0, vue.h)("i", {
  42250. onClick: ($event) => handleSortClick($event, column, "ascending"),
  42251. class: "sort-caret ascending"
  42252. }), (0, vue.h)("i", {
  42253. onClick: ($event) => handleSortClick($event, column, "descending"),
  42254. class: "sort-caret descending"
  42255. })]),
  42256. column.filterable && (0, vue.h)(filter_panel_default, {
  42257. store,
  42258. placement: column.filterPlacement || "bottom-start",
  42259. appendTo: $parent?.appendFilterPanelTo,
  42260. column,
  42261. upDataColumn: (key, value) => {
  42262. column[key] = value;
  42263. }
  42264. }, { "filter-icon": () => column.renderFilterIcon ? column.renderFilterIcon({ filterOpened: column.filterOpened }) : null })
  42265. ])]);
  42266. }))));
  42267. }
  42268. });
  42269. //#endregion
  42270. //#region ../../packages/components/table/src/table-body/events-helper.ts
  42271. function useEvents(props) {
  42272. const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
  42273. const tooltipContent = (0, vue.ref)("");
  42274. const tooltipTrigger = (0, vue.ref)((0, vue.h)("div"));
  42275. const handleEvent = (event, row, name) => {
  42276. const table = parent;
  42277. const cell = getCell(event);
  42278. let column = null;
  42279. const namespace = table?.vnode.el?.dataset.prefix;
  42280. if (cell) {
  42281. column = getColumnByCell({ columns: props.store?.states.columns.value ?? [] }, cell, namespace);
  42282. if (column) table?.emit(`cell-${name}`, row, column, cell, event);
  42283. }
  42284. table?.emit(`row-${name}`, row, column, event);
  42285. };
  42286. const handleDoubleClick = (event, row) => {
  42287. handleEvent(event, row, "dblclick");
  42288. };
  42289. const handleClick = (event, row) => {
  42290. props.store?.commit("setCurrentRow", row);
  42291. handleEvent(event, row, "click");
  42292. };
  42293. const handleContextMenu = (event, row) => {
  42294. handleEvent(event, row, "contextmenu");
  42295. };
  42296. const handleMouseEnter = debounce((index) => {
  42297. props.store?.commit("setHoverRow", index);
  42298. }, 30);
  42299. const handleMouseLeave = debounce(() => {
  42300. props.store?.commit("setHoverRow", null);
  42301. }, 30);
  42302. const getPadding = (el) => {
  42303. const style = window.getComputedStyle(el, null);
  42304. return {
  42305. left: Number.parseInt(style.paddingLeft, 10) || 0,
  42306. right: Number.parseInt(style.paddingRight, 10) || 0,
  42307. top: Number.parseInt(style.paddingTop, 10) || 0,
  42308. bottom: Number.parseInt(style.paddingBottom, 10) || 0
  42309. };
  42310. };
  42311. const toggleRowClassByCell = (rowSpan, event, toggle) => {
  42312. let node = (event?.target)?.parentNode;
  42313. while (rowSpan > 1) {
  42314. node = node?.nextSibling;
  42315. if (!node || node.nodeName !== "TR") break;
  42316. toggle(node, "hover-row hover-fixed-row");
  42317. rowSpan--;
  42318. }
  42319. };
  42320. const handleCellMouseEnter = (event, row, tooltipOptions) => {
  42321. if (!parent) return;
  42322. const table = parent;
  42323. const cell = getCell(event);
  42324. const namespace = table?.vnode.el?.dataset.prefix;
  42325. let column = null;
  42326. if (cell) {
  42327. column = getColumnByCell({ columns: props.store?.states.columns.value ?? [] }, cell, namespace);
  42328. if (!column) return;
  42329. if (cell.rowSpan > 1) toggleRowClassByCell(cell.rowSpan, event, addClass);
  42330. const hoverState = table.hoverState = {
  42331. cell,
  42332. column,
  42333. row
  42334. };
  42335. table?.emit("cell-mouse-enter", hoverState.row, hoverState.column, hoverState.cell, event);
  42336. }
  42337. if (!tooltipOptions) {
  42338. if (removePopper?.trigger === cell) removePopper?.();
  42339. return;
  42340. }
  42341. const cellChild = event.target.querySelector(".cell");
  42342. if (!(hasClass(cellChild, `${namespace}-tooltip`) && cellChild.childNodes.length && cellChild.textContent?.trim())) return;
  42343. const range = document.createRange();
  42344. range.setStart(cellChild, 0);
  42345. range.setEnd(cellChild, cellChild.childNodes.length);
  42346. const { width: rangeWidth, height: rangeHeight } = range.getBoundingClientRect();
  42347. const { width: cellChildWidth, height: cellChildHeight } = cellChild.getBoundingClientRect();
  42348. const { top, left, right, bottom } = getPadding(cellChild);
  42349. const horizontalPadding = left + right;
  42350. const verticalPadding = top + bottom;
  42351. if (isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) || isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) || isGreaterThan(cellChild.scrollWidth, cellChildWidth)) createTablePopper(tooltipOptions, (cell?.innerText || cell?.textContent) ?? "", row, column, cell, table);
  42352. else if (removePopper?.trigger === cell) removePopper?.();
  42353. };
  42354. const handleCellMouseLeave = (event) => {
  42355. const cell = getCell(event);
  42356. if (!cell) return;
  42357. if (cell.rowSpan > 1) toggleRowClassByCell(cell.rowSpan, event, removeClass);
  42358. const oldHoverState = parent?.hoverState;
  42359. parent?.emit("cell-mouse-leave", oldHoverState?.row, oldHoverState?.column, oldHoverState?.cell, event);
  42360. };
  42361. return {
  42362. handleDoubleClick,
  42363. handleClick,
  42364. handleContextMenu,
  42365. handleMouseEnter,
  42366. handleMouseLeave,
  42367. handleCellMouseEnter,
  42368. handleCellMouseLeave,
  42369. tooltipContent,
  42370. tooltipTrigger
  42371. };
  42372. }
  42373. //#endregion
  42374. //#region ../../packages/components/table/src/table-body/styles-helper.ts
  42375. function useStyles$1(props) {
  42376. const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
  42377. const ns = useNamespace("table");
  42378. const getRowStyle = (row, rowIndex) => {
  42379. const rowStyle = parent?.props.rowStyle;
  42380. if (isFunction$1(rowStyle)) return rowStyle.call(null, {
  42381. row,
  42382. rowIndex
  42383. });
  42384. return rowStyle || null;
  42385. };
  42386. const getRowClass = (row, rowIndex, displayIndex) => {
  42387. const classes = [ns.e("row")];
  42388. if (parent?.props.highlightCurrentRow && row === props.store?.states.currentRow.value) classes.push("current-row");
  42389. if (props.stripe && displayIndex % 2 === 1) classes.push(ns.em("row", "striped"));
  42390. const rowClassName = parent?.props.rowClassName;
  42391. if (isString(rowClassName)) classes.push(rowClassName);
  42392. else if (isFunction$1(rowClassName)) classes.push(rowClassName.call(null, {
  42393. row,
  42394. rowIndex
  42395. }));
  42396. return classes;
  42397. };
  42398. const getCellStyle = (rowIndex, columnIndex, row, column) => {
  42399. const cellStyle = parent?.props.cellStyle;
  42400. let cellStyles = cellStyle ?? {};
  42401. if (isFunction$1(cellStyle)) cellStyles = cellStyle.call(null, {
  42402. rowIndex,
  42403. columnIndex,
  42404. row,
  42405. column
  42406. });
  42407. const fixedStyle = getFixedColumnOffset(columnIndex, props?.fixed, props.store);
  42408. ensurePosition(fixedStyle, "left");
  42409. ensurePosition(fixedStyle, "right");
  42410. return Object.assign({}, cellStyles, fixedStyle);
  42411. };
  42412. const getCellClass = (rowIndex, columnIndex, row, column, offset) => {
  42413. const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, props?.fixed, props.store, void 0, offset);
  42414. const classes = [
  42415. column.id,
  42416. column.align,
  42417. column.className,
  42418. ...fixedClasses
  42419. ];
  42420. const cellClassName = parent?.props.cellClassName;
  42421. if (isString(cellClassName)) classes.push(cellClassName);
  42422. else if (isFunction$1(cellClassName)) classes.push(cellClassName.call(null, {
  42423. rowIndex,
  42424. columnIndex,
  42425. row,
  42426. column
  42427. }));
  42428. classes.push(ns.e("cell"));
  42429. return classes.filter((className) => Boolean(className)).join(" ");
  42430. };
  42431. const getSpan = (row, column, rowIndex, columnIndex) => {
  42432. let rowspan = 1;
  42433. let colspan = 1;
  42434. const fn = parent?.props.spanMethod;
  42435. if (isFunction$1(fn)) {
  42436. const result = fn({
  42437. row,
  42438. column,
  42439. rowIndex,
  42440. columnIndex
  42441. });
  42442. if (isArray$1(result)) {
  42443. rowspan = result[0];
  42444. colspan = result[1];
  42445. } else if (isObject$1(result)) {
  42446. rowspan = result.rowspan;
  42447. colspan = result.colspan;
  42448. }
  42449. }
  42450. return {
  42451. rowspan,
  42452. colspan
  42453. };
  42454. };
  42455. const getColspanRealWidth = (columns, colspan, index) => {
  42456. if (colspan < 1) return columns[index].realWidth;
  42457. const widthArr = columns.map(({ realWidth, width }) => realWidth || width).slice(index, index + colspan);
  42458. return Number(widthArr.reduce((acc, width) => Number(acc) + Number(width), -1));
  42459. };
  42460. return {
  42461. getRowStyle,
  42462. getRowClass,
  42463. getCellStyle,
  42464. getCellClass,
  42465. getSpan,
  42466. getColspanRealWidth
  42467. };
  42468. }
  42469. //#endregion
  42470. //#region ../../packages/components/table/src/table-body/td-wrapper.vue?vue&type=script&setup=true&lang.ts
  42471. const _hoisted_1$16 = ["colspan", "rowspan"];
  42472. var td_wrapper_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  42473. name: "TableTdWrapper",
  42474. __name: "td-wrapper",
  42475. props: {
  42476. colspan: {
  42477. type: Number,
  42478. default: 1
  42479. },
  42480. rowspan: {
  42481. type: Number,
  42482. default: 1
  42483. }
  42484. },
  42485. setup(__props) {
  42486. return (_ctx, _cache) => {
  42487. return (0, vue.openBlock)(), (0, vue.createElementBlock)("td", {
  42488. colspan: __props.colspan,
  42489. rowspan: __props.rowspan
  42490. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 8, _hoisted_1$16);
  42491. };
  42492. }
  42493. });
  42494. //#endregion
  42495. //#region ../../packages/components/table/src/table-body/td-wrapper.vue
  42496. var td_wrapper_default = td_wrapper_vue_vue_type_script_setup_true_lang_default;
  42497. //#endregion
  42498. //#region ../../packages/components/table/src/table-body/render-helper.ts
  42499. function useRender$1(props) {
  42500. const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
  42501. const ns = useNamespace("table");
  42502. const { handleDoubleClick, handleClick, handleContextMenu, handleMouseEnter, handleMouseLeave, handleCellMouseEnter, handleCellMouseLeave, tooltipContent, tooltipTrigger } = useEvents(props);
  42503. const { getRowStyle, getRowClass, getCellStyle, getCellClass, getSpan, getColspanRealWidth } = useStyles$1(props);
  42504. let displayIndex = -1;
  42505. const firstDefaultColumnIndex = (0, vue.computed)(() => {
  42506. return props.store?.states.columns.value.findIndex(({ type }) => type === "default");
  42507. });
  42508. const getKeyOfRow = (row, index) => {
  42509. const rowKey = (parent?.props)?.rowKey;
  42510. if (rowKey) return getRowIdentity(row, rowKey);
  42511. return index;
  42512. };
  42513. const rowRender = (row, $index, treeRowData, expanded = false) => {
  42514. const { tooltipEffect, tooltipOptions, store } = props;
  42515. const { indent, columns } = store.states;
  42516. const rowClasses = [];
  42517. let display = true;
  42518. if (treeRowData) {
  42519. rowClasses.push(ns.em("row", `level-${treeRowData.level}`));
  42520. display = !!treeRowData.display;
  42521. }
  42522. if ($index === 0) displayIndex = -1;
  42523. if (props.stripe && display) displayIndex++;
  42524. rowClasses.push(...getRowClass(row, $index, displayIndex));
  42525. return (0, vue.h)("tr", {
  42526. style: [display ? null : { display: "none" }, getRowStyle(row, $index)],
  42527. class: rowClasses,
  42528. key: getKeyOfRow(row, $index),
  42529. onDblclick: ($event) => handleDoubleClick($event, row),
  42530. onClick: ($event) => handleClick($event, row),
  42531. onContextmenu: ($event) => handleContextMenu($event, row),
  42532. onMouseenter: () => handleMouseEnter($index),
  42533. onMouseleave: handleMouseLeave
  42534. }, columns.value.map((column, cellIndex) => {
  42535. const { rowspan, colspan } = getSpan(row, column, $index, cellIndex);
  42536. if (!rowspan || !colspan) return null;
  42537. const columnData = Object.assign({}, column);
  42538. columnData.realWidth = getColspanRealWidth(columns.value, colspan, cellIndex);
  42539. const data = {
  42540. store,
  42541. _self: props.context || parent,
  42542. column: columnData,
  42543. row,
  42544. $index,
  42545. cellIndex,
  42546. expanded
  42547. };
  42548. if (cellIndex === firstDefaultColumnIndex.value && treeRowData) {
  42549. data.treeNode = {
  42550. indent: treeRowData.level && treeRowData.level * indent.value,
  42551. level: treeRowData.level
  42552. };
  42553. if (isBoolean(treeRowData.expanded)) {
  42554. data.treeNode.expanded = treeRowData.expanded;
  42555. if ("loading" in treeRowData) data.treeNode.loading = treeRowData.loading;
  42556. if ("noLazyChildren" in treeRowData) data.treeNode.noLazyChildren = treeRowData.noLazyChildren;
  42557. }
  42558. }
  42559. const baseKey = `${getKeyOfRow(row, $index)},${cellIndex}`;
  42560. const patchKey = columnData.columnKey || columnData.rawColumnKey || "";
  42561. const mergedTooltipOptions = column.showOverflowTooltip && merge({ effect: tooltipEffect }, tooltipOptions, column.showOverflowTooltip);
  42562. return (0, vue.h)(td_wrapper_default, {
  42563. style: getCellStyle($index, cellIndex, row, column),
  42564. class: getCellClass($index, cellIndex, row, column, colspan - 1),
  42565. key: `${patchKey}${baseKey}`,
  42566. rowspan,
  42567. colspan,
  42568. onMouseenter: ($event) => handleCellMouseEnter($event, row, mergedTooltipOptions),
  42569. onMouseleave: handleCellMouseLeave
  42570. }, { default: () => cellChildren(cellIndex, column, data) });
  42571. }));
  42572. };
  42573. const cellChildren = (_cellIndex, column, data) => {
  42574. return column.renderCell(data);
  42575. };
  42576. const wrappedRowRender = (row, $index) => {
  42577. const store = props.store;
  42578. const { isRowExpanded, assertRowKey } = store;
  42579. const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states;
  42580. const columns = store.states.columns.value;
  42581. if (columns.some(({ type }) => type === "expand")) {
  42582. const expanded = isRowExpanded(row);
  42583. const tr = rowRender(row, $index, void 0, expanded);
  42584. const renderExpanded = parent?.renderExpanded;
  42585. if (!renderExpanded) {
  42586. console.error("[Element Error]renderExpanded is required.");
  42587. return tr;
  42588. }
  42589. const rows = [[tr]];
  42590. if (parent.props.preserveExpandedContent || expanded) rows[0].push((0, vue.h)("tr", {
  42591. key: `expanded-row__${tr.key}`,
  42592. style: { display: expanded ? "" : "none" }
  42593. }, [(0, vue.h)("td", {
  42594. colspan: columns.length,
  42595. class: `${ns.e("cell")} ${ns.e("expanded-cell")}`
  42596. }, [renderExpanded({
  42597. row,
  42598. $index,
  42599. store,
  42600. expanded
  42601. })])]));
  42602. return rows;
  42603. } else if (Object.keys(treeData.value).length) {
  42604. assertRowKey();
  42605. const key = getRowIdentity(row, rowKey.value);
  42606. let cur = treeData.value[key];
  42607. let treeRowData = null;
  42608. if (cur) {
  42609. treeRowData = {
  42610. expanded: cur.expanded,
  42611. level: cur.level,
  42612. display: true,
  42613. noLazyChildren: void 0,
  42614. loading: void 0
  42615. };
  42616. if (isBoolean(cur.lazy)) {
  42617. if (treeRowData && isBoolean(cur.loaded) && cur.loaded) treeRowData.noLazyChildren = !(cur.children && cur.children.length);
  42618. treeRowData.loading = cur.loading;
  42619. }
  42620. }
  42621. const tmp = [rowRender(row, $index, treeRowData ?? void 0)];
  42622. if (cur) {
  42623. let i = 0;
  42624. const traverse = (children, parent) => {
  42625. if (!(children && children.length && parent)) return;
  42626. children.forEach((node) => {
  42627. const innerTreeRowData = {
  42628. display: parent.display && parent.expanded,
  42629. level: parent.level + 1,
  42630. expanded: false,
  42631. noLazyChildren: false,
  42632. loading: false
  42633. };
  42634. const childKey = getRowIdentity(node, rowKey.value);
  42635. if (isPropAbsent(childKey)) throw new Error("For nested data item, row-key is required.");
  42636. cur = { ...treeData.value[childKey] };
  42637. if (cur) {
  42638. innerTreeRowData.expanded = cur.expanded;
  42639. cur.level = cur.level || innerTreeRowData.level;
  42640. cur.display = !!(cur.expanded && innerTreeRowData.display);
  42641. if (isBoolean(cur.lazy)) {
  42642. if (isBoolean(cur.loaded) && cur.loaded) innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length);
  42643. innerTreeRowData.loading = cur.loading;
  42644. }
  42645. }
  42646. i++;
  42647. tmp.push(rowRender(node, $index + i, innerTreeRowData));
  42648. if (cur) traverse(lazyTreeNodeMap.value[childKey] || node[childrenColumnName.value], cur);
  42649. });
  42650. };
  42651. cur.display = true;
  42652. traverse(lazyTreeNodeMap.value[key] || row[childrenColumnName.value], cur);
  42653. }
  42654. return tmp;
  42655. } else return rowRender(row, $index, void 0);
  42656. };
  42657. return {
  42658. wrappedRowRender,
  42659. tooltipContent,
  42660. tooltipTrigger
  42661. };
  42662. }
  42663. //#endregion
  42664. //#region ../../packages/components/table/src/table-body/defaults.ts
  42665. const defaultProps$1 = {
  42666. store: {
  42667. required: true,
  42668. type: Object
  42669. },
  42670. stripe: Boolean,
  42671. tooltipEffect: String,
  42672. tooltipOptions: { type: Object },
  42673. context: {
  42674. default: () => ({}),
  42675. type: Object
  42676. },
  42677. rowClassName: [String, Function],
  42678. rowStyle: [Object, Function],
  42679. fixed: {
  42680. type: String,
  42681. default: ""
  42682. },
  42683. highlight: Boolean
  42684. };
  42685. //#endregion
  42686. //#region ../../packages/components/table/src/table-body/index.ts
  42687. var table_body_default = (0, vue.defineComponent)({
  42688. name: "ElTableBody",
  42689. props: defaultProps$1,
  42690. setup(props) {
  42691. const instance = (0, vue.getCurrentInstance)();
  42692. const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
  42693. const ns = useNamespace("table");
  42694. const { wrappedRowRender, tooltipContent, tooltipTrigger } = useRender$1(props);
  42695. const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent);
  42696. const hoveredCellList = [];
  42697. (0, vue.watch)(props.store?.states.hoverRow, (newVal, oldVal) => {
  42698. const el = instance?.vnode.el;
  42699. const rows = Array.from(el?.children || []).filter((e) => e?.classList.contains(`${ns.e("row")}`));
  42700. let rowNum = newVal;
  42701. const childNodes = rows[rowNum]?.childNodes;
  42702. if (childNodes?.length) {
  42703. let control = 0;
  42704. Array.from(childNodes).reduce((acc, item, index) => {
  42705. if (childNodes[index]?.colSpan > 1) control = childNodes[index]?.colSpan;
  42706. if (item.nodeName !== "TD" && control === 0) acc.push(index);
  42707. control > 0 && control--;
  42708. return acc;
  42709. }, []).forEach((rowIndex) => {
  42710. rowNum = newVal;
  42711. while (rowNum > 0) {
  42712. const preChildNodes = rows[rowNum - 1]?.childNodes;
  42713. if (preChildNodes[rowIndex] && preChildNodes[rowIndex].nodeName === "TD" && preChildNodes[rowIndex].rowSpan > 1) {
  42714. addClass(preChildNodes[rowIndex], "hover-cell");
  42715. hoveredCellList.push(preChildNodes[rowIndex]);
  42716. break;
  42717. }
  42718. rowNum--;
  42719. }
  42720. });
  42721. } else {
  42722. hoveredCellList.forEach((item) => removeClass(item, "hover-cell"));
  42723. hoveredCellList.length = 0;
  42724. }
  42725. if (!props.store?.states.isComplex.value || !isClient) return;
  42726. rAF(() => {
  42727. const oldRow = rows[oldVal];
  42728. const newRow = rows[newVal];
  42729. if (oldRow && !oldRow.classList.contains("hover-fixed-row")) removeClass(oldRow, "hover-row");
  42730. if (newRow) addClass(newRow, "hover-row");
  42731. });
  42732. });
  42733. (0, vue.onUnmounted)(() => {
  42734. removePopper?.();
  42735. });
  42736. return {
  42737. ns,
  42738. onColumnsChange,
  42739. onScrollableChange,
  42740. wrappedRowRender,
  42741. tooltipContent,
  42742. tooltipTrigger
  42743. };
  42744. },
  42745. render() {
  42746. const { wrappedRowRender, store } = this;
  42747. return (0, vue.h)("tbody", { tabIndex: -1 }, [(store?.states.data.value || []).reduce((acc, row) => {
  42748. return acc.concat(wrappedRowRender(row, acc.length));
  42749. }, [])]);
  42750. }
  42751. });
  42752. //#endregion
  42753. //#region ../../packages/components/table/src/table-footer/mapState-helper.ts
  42754. function useMapState() {
  42755. const store = (0, vue.inject)(TABLE_INJECTION_KEY)?.store;
  42756. return {
  42757. leftFixedLeafCount: (0, vue.computed)(() => {
  42758. return store?.states.fixedLeafColumnsLength.value ?? 0;
  42759. }),
  42760. rightFixedLeafCount: (0, vue.computed)(() => {
  42761. return store?.states.rightFixedColumns.value.length ?? 0;
  42762. }),
  42763. columnsCount: (0, vue.computed)(() => {
  42764. return store?.states.columns.value.length ?? 0;
  42765. }),
  42766. leftFixedCount: (0, vue.computed)(() => {
  42767. return store?.states.fixedColumns.value.length ?? 0;
  42768. }),
  42769. rightFixedCount: (0, vue.computed)(() => {
  42770. return store?.states.rightFixedColumns.value.length ?? 0;
  42771. }),
  42772. columns: (0, vue.computed)(() => store?.states.columns.value ?? [])
  42773. };
  42774. }
  42775. //#endregion
  42776. //#region ../../packages/components/table/src/table-footer/style-helper.ts
  42777. function useStyle$1(props) {
  42778. const { columns } = useMapState();
  42779. const ns = useNamespace("table");
  42780. const getCellClasses = (columns, cellIndex) => {
  42781. const column = columns[cellIndex];
  42782. const classes = [
  42783. ns.e("cell"),
  42784. column.id,
  42785. column.align,
  42786. column.labelClassName,
  42787. ...getFixedColumnsClass(ns.b(), cellIndex, column.fixed, props.store)
  42788. ];
  42789. if (column.className) classes.push(column.className);
  42790. if (!column.children) classes.push(ns.is("leaf"));
  42791. return classes;
  42792. };
  42793. const getCellStyles = (column, cellIndex) => {
  42794. const fixedStyle = getFixedColumnOffset(cellIndex, column.fixed, props.store);
  42795. ensurePosition(fixedStyle, "left");
  42796. ensurePosition(fixedStyle, "right");
  42797. return fixedStyle;
  42798. };
  42799. return {
  42800. getCellClasses,
  42801. getCellStyles,
  42802. columns
  42803. };
  42804. }
  42805. //#endregion
  42806. //#region ../../packages/components/table/src/table-footer/index.ts
  42807. var table_footer_default = (0, vue.defineComponent)({
  42808. name: "ElTableFooter",
  42809. props: {
  42810. fixed: {
  42811. type: String,
  42812. default: ""
  42813. },
  42814. store: {
  42815. required: true,
  42816. type: Object
  42817. },
  42818. summaryMethod: Function,
  42819. sumText: String,
  42820. border: Boolean,
  42821. defaultSort: {
  42822. type: Object,
  42823. default: () => {
  42824. return {
  42825. prop: "",
  42826. order: ""
  42827. };
  42828. }
  42829. }
  42830. },
  42831. setup(props) {
  42832. const parent = (0, vue.inject)(TABLE_INJECTION_KEY);
  42833. const ns = useNamespace("table");
  42834. const { getCellClasses, getCellStyles, columns } = useStyle$1(props);
  42835. const { onScrollableChange, onColumnsChange } = useLayoutObserver(parent);
  42836. return {
  42837. ns,
  42838. onScrollableChange,
  42839. onColumnsChange,
  42840. getCellClasses,
  42841. getCellStyles,
  42842. columns
  42843. };
  42844. },
  42845. render() {
  42846. const { columns, getCellStyles, getCellClasses, summaryMethod, sumText } = this;
  42847. const data = this.store.states.data.value;
  42848. let sums = [];
  42849. if (summaryMethod) sums = summaryMethod({
  42850. columns,
  42851. data
  42852. });
  42853. else columns.forEach((column, index) => {
  42854. if (index === 0) {
  42855. sums[index] = sumText;
  42856. return;
  42857. }
  42858. const values = data.map((item) => Number(item[column.property]));
  42859. const precisions = [];
  42860. let notNumber = true;
  42861. values.forEach((value) => {
  42862. if (!Number.isNaN(+value)) {
  42863. notNumber = false;
  42864. const decimal = `${value}`.split(".")[1];
  42865. precisions.push(decimal ? decimal.length : 0);
  42866. }
  42867. });
  42868. const precision = Math.max.apply(null, precisions);
  42869. if (!notNumber) sums[index] = values.reduce((prev, curr) => {
  42870. const value = Number(curr);
  42871. if (!Number.isNaN(+value)) return Number.parseFloat((prev + curr).toFixed(Math.min(precision, 20)));
  42872. else return prev;
  42873. }, 0);
  42874. else sums[index] = "";
  42875. });
  42876. return (0, vue.h)((0, vue.h)("tfoot", [(0, vue.h)("tr", {}, [...columns.map((column, cellIndex) => (0, vue.h)("td", {
  42877. key: cellIndex,
  42878. colspan: column.colSpan,
  42879. rowspan: column.rowSpan,
  42880. class: getCellClasses(columns, cellIndex),
  42881. style: getCellStyles(column, cellIndex)
  42882. }, [(0, vue.h)("div", { class: ["cell", column.labelClassName] }, [sums[cellIndex]])]))])]));
  42883. }
  42884. });
  42885. //#endregion
  42886. //#region ../../packages/components/table/src/table/utils-helper.ts
  42887. function useUtils(store) {
  42888. const setCurrentRow = (row) => {
  42889. store.commit("setCurrentRow", row);
  42890. };
  42891. const getSelectionRows = () => {
  42892. return store.getSelectionRows();
  42893. };
  42894. const getHalfSelectionRows = () => {
  42895. return store.getHalfSelectionRows();
  42896. };
  42897. const toggleRowSelection = (row, selected, ignoreSelectable = true) => {
  42898. store.toggleRowSelection(row, selected, false, ignoreSelectable);
  42899. store.updateAllSelected();
  42900. };
  42901. const clearSelection = () => {
  42902. store.clearSelection();
  42903. };
  42904. const clearFilter = (columnKeys) => {
  42905. store.clearFilter(columnKeys);
  42906. };
  42907. const toggleAllSelection = () => {
  42908. store.commit("toggleAllSelection");
  42909. };
  42910. const toggleRowExpansion = (row, expanded) => {
  42911. store.toggleRowExpansionAdapter(row, expanded);
  42912. };
  42913. const clearSort = () => {
  42914. store.clearSort();
  42915. };
  42916. const sort = (prop, order) => {
  42917. store.commit("sort", {
  42918. prop,
  42919. order
  42920. });
  42921. };
  42922. const updateKeyChildren = (key, data) => {
  42923. store.updateKeyChildren(key, data);
  42924. };
  42925. return {
  42926. setCurrentRow,
  42927. getSelectionRows,
  42928. getHalfSelectionRows,
  42929. toggleRowSelection,
  42930. clearSelection,
  42931. clearFilter,
  42932. toggleAllSelection,
  42933. toggleRowExpansion,
  42934. clearSort,
  42935. sort,
  42936. updateKeyChildren
  42937. };
  42938. }
  42939. //#endregion
  42940. //#region ../../packages/components/table/src/table/style-helper.ts
  42941. function useStyle(props, layout, store, table) {
  42942. const isHidden = (0, vue.ref)(false);
  42943. const renderExpanded = (0, vue.ref)(null);
  42944. const resizeProxyVisible = (0, vue.ref)(false);
  42945. const setDragVisible = (visible) => {
  42946. resizeProxyVisible.value = visible;
  42947. };
  42948. const resizeState = (0, vue.ref)({
  42949. width: null,
  42950. height: null,
  42951. headerHeight: null
  42952. });
  42953. const isGroup = (0, vue.ref)(false);
  42954. const scrollbarViewStyle = {
  42955. display: "inline-block",
  42956. verticalAlign: "middle"
  42957. };
  42958. const tableWidth = (0, vue.ref)();
  42959. const tableScrollHeight = (0, vue.ref)(0);
  42960. const bodyScrollHeight = (0, vue.ref)(0);
  42961. const headerScrollHeight = (0, vue.ref)(0);
  42962. const footerScrollHeight = (0, vue.ref)(0);
  42963. const appendScrollHeight = (0, vue.ref)(0);
  42964. (0, vue.watch)(() => props.height, (value) => {
  42965. layout.setHeight(value ?? null);
  42966. }, { immediate: true });
  42967. (0, vue.watch)(() => props.maxHeight, (value) => {
  42968. layout.setMaxHeight(value ?? null);
  42969. }, { immediate: true });
  42970. (0, vue.watch)(() => [props.currentRowKey, store.states.rowKey], ([currentRowKey, rowKey]) => {
  42971. if (!(0, vue.unref)(rowKey) || !(0, vue.unref)(currentRowKey)) return;
  42972. store.setCurrentRowKey(`${currentRowKey}`);
  42973. }, { immediate: true });
  42974. (0, vue.watch)(() => props.data, (data) => {
  42975. table.store.commit("setData", data);
  42976. }, {
  42977. immediate: true,
  42978. deep: true
  42979. });
  42980. (0, vue.watchEffect)(() => {
  42981. if (props.expandRowKeys) store.setExpandRowKeysAdapter(props.expandRowKeys);
  42982. });
  42983. const handleMouseLeave = () => {
  42984. table.store.commit("setHoverRow", null);
  42985. if (table.hoverState) table.hoverState = null;
  42986. };
  42987. const handleHeaderFooterMousewheel = (_event, data) => {
  42988. const { pixelX, pixelY } = data;
  42989. if (Math.abs(pixelX) >= Math.abs(pixelY)) table.refs.bodyWrapper.scrollLeft += data.pixelX / 5;
  42990. };
  42991. const shouldUpdateHeight = (0, vue.computed)(() => {
  42992. return props.height || props.maxHeight || store.states.fixedColumns.value.length > 0 || store.states.rightFixedColumns.value.length > 0;
  42993. });
  42994. const tableBodyStyles = (0, vue.computed)(() => {
  42995. return { width: layout.bodyWidth.value ? `${layout.bodyWidth.value}px` : "" };
  42996. });
  42997. const doLayout = () => {
  42998. if (shouldUpdateHeight.value) layout.updateElsHeight();
  42999. layout.updateColumnsWidth();
  43000. if (typeof window === "undefined") return;
  43001. requestAnimationFrame(syncPosition);
  43002. };
  43003. (0, vue.onMounted)(async () => {
  43004. await (0, vue.nextTick)();
  43005. store.updateColumns();
  43006. bindEvents();
  43007. requestAnimationFrame(doLayout);
  43008. const el = table.vnode.el;
  43009. const tableHeader = table.refs.headerWrapper;
  43010. if (props.flexible && el && el.parentElement) el.parentElement.style.minWidth = "0";
  43011. resizeState.value = {
  43012. width: tableWidth.value = el.offsetWidth,
  43013. height: el.offsetHeight,
  43014. headerHeight: props.showHeader && tableHeader ? tableHeader.offsetHeight : null
  43015. };
  43016. store.states.columns.value.forEach((column) => {
  43017. if (column.filteredValue && column.filteredValue.length) table.store.commit("filterChange", {
  43018. column,
  43019. values: column.filteredValue,
  43020. silent: true
  43021. });
  43022. });
  43023. table.$ready = true;
  43024. });
  43025. const setScrollClassByEl = (el, className) => {
  43026. if (!el) return;
  43027. const classList = Array.from(el.classList).filter((item) => !item.startsWith("is-scrolling-"));
  43028. classList.push(layout.scrollX.value ? className : "is-scrolling-none");
  43029. el.className = classList.join(" ");
  43030. };
  43031. const setScrollClass = (className) => {
  43032. const { tableWrapper } = table.refs;
  43033. setScrollClassByEl(tableWrapper, className);
  43034. };
  43035. const hasScrollClass = (className) => {
  43036. const { tableWrapper } = table.refs;
  43037. return !!(tableWrapper && tableWrapper.classList.contains(className));
  43038. };
  43039. const syncPosition = function() {
  43040. if (!table.refs.scrollBarRef) return;
  43041. if (!layout.scrollX.value) {
  43042. const scrollingNoneClass = "is-scrolling-none";
  43043. if (!hasScrollClass(scrollingNoneClass)) setScrollClass(scrollingNoneClass);
  43044. return;
  43045. }
  43046. const scrollContainer = table.refs.scrollBarRef.wrapRef;
  43047. if (!scrollContainer) return;
  43048. const { scrollLeft, offsetWidth, scrollWidth } = scrollContainer;
  43049. const { headerWrapper, footerWrapper } = table.refs;
  43050. if (headerWrapper) headerWrapper.scrollLeft = scrollLeft;
  43051. if (footerWrapper) footerWrapper.scrollLeft = scrollLeft;
  43052. if (scrollLeft >= scrollWidth - offsetWidth - 1) setScrollClass("is-scrolling-right");
  43053. else if (scrollLeft === 0) setScrollClass("is-scrolling-left");
  43054. else setScrollClass("is-scrolling-middle");
  43055. };
  43056. const bindEvents = () => {
  43057. if (!table.refs.scrollBarRef) return;
  43058. if (table.refs.scrollBarRef.wrapRef) useEventListener(table.refs.scrollBarRef.wrapRef, "scroll", syncPosition, { passive: true });
  43059. if (props.fit) useResizeObserver(table.vnode.el, resizeListener);
  43060. else useEventListener(window, "resize", resizeListener);
  43061. useResizeObserver(table.refs.tableInnerWrapper, () => {
  43062. resizeListener();
  43063. table.refs?.scrollBarRef?.update();
  43064. });
  43065. };
  43066. const resizeListener = () => {
  43067. const el = table.vnode.el;
  43068. if (!table.$ready || !el) return;
  43069. let shouldUpdateLayout = false;
  43070. const { width: oldWidth, height: oldHeight, headerHeight: oldHeaderHeight } = resizeState.value;
  43071. const width = tableWidth.value = el.offsetWidth;
  43072. if (oldWidth !== width) shouldUpdateLayout = true;
  43073. const height = el.offsetHeight;
  43074. if ((props.height || shouldUpdateHeight.value) && oldHeight !== height) shouldUpdateLayout = true;
  43075. const tableHeader = props.tableLayout === "fixed" ? table.refs.headerWrapper : table.refs.tableHeaderRef?.$el;
  43076. if (props.showHeader && tableHeader?.offsetHeight !== oldHeaderHeight) shouldUpdateLayout = true;
  43077. tableScrollHeight.value = table.refs.tableWrapper?.scrollHeight || 0;
  43078. headerScrollHeight.value = tableHeader?.scrollHeight || 0;
  43079. footerScrollHeight.value = table.refs.footerWrapper?.offsetHeight || 0;
  43080. appendScrollHeight.value = table.refs.appendWrapper?.offsetHeight || 0;
  43081. bodyScrollHeight.value = tableScrollHeight.value - headerScrollHeight.value - footerScrollHeight.value - appendScrollHeight.value;
  43082. if (shouldUpdateLayout) {
  43083. resizeState.value = {
  43084. width,
  43085. height,
  43086. headerHeight: props.showHeader && tableHeader?.offsetHeight || 0
  43087. };
  43088. doLayout();
  43089. }
  43090. };
  43091. const tableSize = useFormSize();
  43092. const bodyWidth = (0, vue.computed)(() => {
  43093. const { bodyWidth: bodyWidth_, scrollY, gutterWidth } = layout;
  43094. return bodyWidth_.value ? `${bodyWidth_.value - (scrollY.value ? gutterWidth : 0)}px` : "";
  43095. });
  43096. const tableLayout = (0, vue.computed)(() => {
  43097. if (props.maxHeight) return "fixed";
  43098. return props.tableLayout;
  43099. });
  43100. return {
  43101. isHidden,
  43102. renderExpanded,
  43103. setDragVisible,
  43104. isGroup,
  43105. handleMouseLeave,
  43106. handleHeaderFooterMousewheel,
  43107. tableSize,
  43108. emptyBlockStyle: (0, vue.computed)(() => {
  43109. if (props.data && props.data.length) return;
  43110. let height = "100%";
  43111. if (props.height && bodyScrollHeight.value) height = `${bodyScrollHeight.value}px`;
  43112. const width = tableWidth.value;
  43113. return {
  43114. width: width ? `${width}px` : "",
  43115. height
  43116. };
  43117. }),
  43118. resizeProxyVisible,
  43119. bodyWidth,
  43120. resizeState,
  43121. doLayout,
  43122. tableBodyStyles,
  43123. tableLayout,
  43124. scrollbarViewStyle,
  43125. scrollbarStyle: (0, vue.computed)(() => {
  43126. if (props.height) return { height: "100%" };
  43127. if (props.maxHeight) if (!Number.isNaN(Number(props.maxHeight))) return { maxHeight: `${+props.maxHeight - headerScrollHeight.value - footerScrollHeight.value}px` };
  43128. else return { maxHeight: `calc(${props.maxHeight} - ${headerScrollHeight.value + footerScrollHeight.value}px)` };
  43129. return {};
  43130. })
  43131. };
  43132. }
  43133. //#endregion
  43134. //#region ../../packages/components/table/src/table/key-render-helper.ts
  43135. function useKeyRender(table) {
  43136. let observer;
  43137. const initWatchDom = () => {
  43138. const columnsWrapper = table.vnode.el.querySelector(".hidden-columns");
  43139. const config = {
  43140. childList: true,
  43141. subtree: true
  43142. };
  43143. const updateOrderFns = table.store.states.updateOrderFns;
  43144. observer = new MutationObserver(() => {
  43145. updateOrderFns.forEach((fn) => fn());
  43146. });
  43147. observer.observe(columnsWrapper, config);
  43148. };
  43149. (0, vue.onMounted)(() => {
  43150. initWatchDom();
  43151. });
  43152. (0, vue.onUnmounted)(() => {
  43153. observer?.disconnect();
  43154. });
  43155. }
  43156. //#endregion
  43157. //#region ../../packages/components/table/src/h-helper.ts
  43158. function hColgroup(props) {
  43159. const isAuto = props.tableLayout === "auto";
  43160. let columns = props.columns || [];
  43161. if (isAuto) {
  43162. if (columns.every(({ width }) => isUndefined(width))) columns = [];
  43163. }
  43164. const getPropsData = (column) => {
  43165. const propsData = {
  43166. key: `${props.tableLayout}_${column.id}`,
  43167. style: {},
  43168. name: void 0
  43169. };
  43170. if (isAuto) propsData.style = { width: `${column.width}px` };
  43171. else propsData.name = column.id;
  43172. return propsData;
  43173. };
  43174. return (0, vue.h)("colgroup", {}, columns.map((column) => (0, vue.h)("col", getPropsData(column))));
  43175. }
  43176. hColgroup.props = ["columns", "tableLayout"];
  43177. //#endregion
  43178. //#region ../../packages/components/table/src/composables/use-scrollbar.ts
  43179. const useScrollbar$1 = () => {
  43180. const scrollBarRef = (0, vue.ref)();
  43181. const scrollTo = (options, yCoord) => {
  43182. const scrollbar = scrollBarRef.value;
  43183. if (scrollbar) scrollbar.scrollTo(options, yCoord);
  43184. };
  43185. const setScrollPosition = (position, offset) => {
  43186. const scrollbar = scrollBarRef.value;
  43187. if (scrollbar && isNumber(offset) && ["Top", "Left"].includes(position)) scrollbar[`setScroll${position}`](offset);
  43188. };
  43189. const setScrollTop = (top) => setScrollPosition("Top", top);
  43190. const setScrollLeft = (left) => setScrollPosition("Left", left);
  43191. return {
  43192. scrollBarRef,
  43193. scrollTo,
  43194. setScrollTop,
  43195. setScrollLeft
  43196. };
  43197. };
  43198. //#endregion
  43199. //#region ../../packages/components/table/src/table.vue?vue&type=script&setup=true&lang.ts
  43200. const _hoisted_1$15 = ["data-prefix"];
  43201. const _hoisted_2$9 = {
  43202. ref: "hiddenColumns",
  43203. class: "hidden-columns"
  43204. };
  43205. var table_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  43206. name: "ElTable",
  43207. __name: "table",
  43208. props: tableProps,
  43209. emits: [
  43210. "select",
  43211. "select-all",
  43212. "selection-change",
  43213. "cell-mouse-enter",
  43214. "cell-mouse-leave",
  43215. "cell-dblclick",
  43216. "cell-contextmenu",
  43217. "cell-click",
  43218. "row-dblclick",
  43219. "row-click",
  43220. "row-contextmenu",
  43221. "header-click",
  43222. "header-contextmenu",
  43223. "sort-change",
  43224. "filter-change",
  43225. "current-change",
  43226. "header-dragend",
  43227. "expand-change",
  43228. "scroll"
  43229. ],
  43230. setup(__props, { expose: __expose }) {
  43231. const props = __props;
  43232. const { t } = useLocale();
  43233. const ns = useNamespace("table");
  43234. const globalConfig = useGlobalConfig("table");
  43235. const table = (0, vue.getCurrentInstance)();
  43236. (0, vue.provide)(TABLE_INJECTION_KEY, table);
  43237. const store = createStore(table, props);
  43238. table.store = store;
  43239. const layout = new TableLayout({
  43240. store: table.store,
  43241. table,
  43242. fit: props.fit,
  43243. showHeader: props.showHeader
  43244. });
  43245. table.layout = layout;
  43246. const isEmpty = (0, vue.computed)(() => (store.states.data.value || []).length === 0);
  43247. const { setCurrentRow, getSelectionRows, getHalfSelectionRows, toggleRowSelection, clearSelection, clearFilter, toggleAllSelection, toggleRowExpansion, clearSort, sort, updateKeyChildren } = useUtils(store);
  43248. const { isHidden, renderExpanded, setDragVisible, isGroup, handleMouseLeave, handleHeaderFooterMousewheel, tableSize, emptyBlockStyle, resizeProxyVisible, bodyWidth, resizeState, doLayout, tableBodyStyles, tableLayout, scrollbarViewStyle, scrollbarStyle } = useStyle(props, layout, store, table);
  43249. const { scrollBarRef, scrollTo, setScrollLeft, setScrollTop } = useScrollbar$1();
  43250. const debouncedUpdateLayout = debounce(doLayout, 50);
  43251. const tableId = createTableId(ns.namespace.value);
  43252. const context = table;
  43253. table.tableId = tableId;
  43254. table.state = {
  43255. isGroup,
  43256. resizeState,
  43257. doLayout,
  43258. debouncedUpdateLayout
  43259. };
  43260. const computedSumText = (0, vue.computed)(() => props.sumText ?? t("el.table.sumText"));
  43261. const computedEmptyText = (0, vue.computed)(() => {
  43262. return props.emptyText ?? t("el.table.emptyText");
  43263. });
  43264. const computedTooltipEffect = (0, vue.computed)(() => props.tooltipEffect ?? globalConfig.value?.tooltipEffect);
  43265. const computedTooltipOptions = (0, vue.computed)(() => props.tooltipOptions ?? globalConfig.value?.tooltipOptions);
  43266. const columns = (0, vue.computed)(() => {
  43267. return convertToRows(store.states.originColumns.value)[0];
  43268. });
  43269. useKeyRender(table);
  43270. (0, vue.onBeforeUnmount)(() => {
  43271. debouncedUpdateLayout.cancel();
  43272. });
  43273. __expose({
  43274. ns,
  43275. layout,
  43276. store,
  43277. columns,
  43278. handleHeaderFooterMousewheel,
  43279. handleMouseLeave,
  43280. tableId,
  43281. tableSize,
  43282. isHidden,
  43283. isEmpty,
  43284. renderExpanded,
  43285. resizeProxyVisible,
  43286. resizeState,
  43287. isGroup,
  43288. bodyWidth,
  43289. tableBodyStyles,
  43290. emptyBlockStyle,
  43291. debouncedUpdateLayout,
  43292. setCurrentRow,
  43293. getSelectionRows,
  43294. getHalfSelectionRows,
  43295. toggleRowSelection,
  43296. clearSelection,
  43297. clearFilter,
  43298. toggleAllSelection,
  43299. toggleRowExpansion,
  43300. clearSort,
  43301. doLayout,
  43302. sort,
  43303. updateKeyChildren,
  43304. t,
  43305. setDragVisible,
  43306. context,
  43307. computedSumText,
  43308. computedEmptyText,
  43309. computedTooltipEffect,
  43310. computedTooltipOptions,
  43311. tableLayout,
  43312. scrollbarViewStyle,
  43313. scrollbarStyle,
  43314. scrollBarRef,
  43315. scrollTo,
  43316. setScrollLeft,
  43317. setScrollTop,
  43318. allowDragLastColumn: props.allowDragLastColumn
  43319. });
  43320. return (_ctx, _cache) => {
  43321. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  43322. ref: "tableWrapper",
  43323. class: (0, vue.normalizeClass)([
  43324. {
  43325. [(0, vue.unref)(ns).m("fit")]: __props.fit,
  43326. [(0, vue.unref)(ns).m("striped")]: __props.stripe,
  43327. [(0, vue.unref)(ns).m("border")]: __props.border || (0, vue.unref)(isGroup),
  43328. [(0, vue.unref)(ns).m("hidden")]: (0, vue.unref)(isHidden),
  43329. [(0, vue.unref)(ns).m("group")]: (0, vue.unref)(isGroup),
  43330. [(0, vue.unref)(ns).m("fluid-height")]: __props.maxHeight,
  43331. [(0, vue.unref)(ns).m("scrollable-x")]: (0, vue.unref)(layout).scrollX.value,
  43332. [(0, vue.unref)(ns).m("scrollable-y")]: (0, vue.unref)(layout).scrollY.value,
  43333. [(0, vue.unref)(ns).m("enable-row-hover")]: !(0, vue.unref)(store).states.isComplex.value,
  43334. [(0, vue.unref)(ns).m("enable-row-transition")]: ((0, vue.unref)(store).states.data.value || []).length !== 0 && ((0, vue.unref)(store).states.data.value || []).length < 100,
  43335. "has-footer": __props.showSummary
  43336. },
  43337. (0, vue.unref)(ns).m((0, vue.unref)(tableSize)),
  43338. __props.className,
  43339. (0, vue.unref)(ns).b(),
  43340. (0, vue.unref)(ns).m(`layout-${(0, vue.unref)(tableLayout)}`)
  43341. ]),
  43342. style: (0, vue.normalizeStyle)(__props.style),
  43343. "data-prefix": (0, vue.unref)(ns).namespace.value,
  43344. onMouseleave: _cache[1] || (_cache[1] = (...args) => (0, vue.unref)(handleMouseLeave) && (0, vue.unref)(handleMouseLeave)(...args))
  43345. }, [(0, vue.createElementVNode)("div", {
  43346. ref: "tableInnerWrapper",
  43347. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("inner-wrapper"))
  43348. }, [
  43349. (0, vue.createElementVNode)("div", _hoisted_2$9, [(0, vue.renderSlot)(_ctx.$slots, "default")], 512),
  43350. __props.showHeader && (0, vue.unref)(tableLayout) === "fixed" ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  43351. key: 0,
  43352. ref: "headerWrapper",
  43353. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("header-wrapper"))
  43354. }, [(0, vue.createElementVNode)("table", {
  43355. ref: "tableHeader",
  43356. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("header")),
  43357. style: (0, vue.normalizeStyle)((0, vue.unref)(tableBodyStyles)),
  43358. border: "0",
  43359. cellpadding: "0",
  43360. cellspacing: "0"
  43361. }, [(0, vue.createVNode)((0, vue.unref)(hColgroup), {
  43362. columns: (0, vue.unref)(store).states.columns.value,
  43363. "table-layout": (0, vue.unref)(tableLayout)
  43364. }, null, 8, ["columns", "table-layout"]), (0, vue.createVNode)((0, vue.unref)(table_header_default), {
  43365. ref: "tableHeaderRef",
  43366. border: __props.border,
  43367. "default-sort": __props.defaultSort,
  43368. store: (0, vue.unref)(store),
  43369. "append-filter-panel-to": __props.appendFilterPanelTo,
  43370. "allow-drag-last-column": __props.allowDragLastColumn,
  43371. onSetDragVisible: (0, vue.unref)(setDragVisible)
  43372. }, null, 8, [
  43373. "border",
  43374. "default-sort",
  43375. "store",
  43376. "append-filter-panel-to",
  43377. "allow-drag-last-column",
  43378. "onSetDragVisible"
  43379. ])], 6)], 2)), [[(0, vue.unref)(Mousewheel), (0, vue.unref)(handleHeaderFooterMousewheel)]]) : (0, vue.createCommentVNode)("v-if", true),
  43380. (0, vue.createElementVNode)("div", {
  43381. ref: "bodyWrapper",
  43382. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body-wrapper"))
  43383. }, [(0, vue.createVNode)((0, vue.unref)(ElScrollbar), {
  43384. ref_key: "scrollBarRef",
  43385. ref: scrollBarRef,
  43386. "view-style": (0, vue.unref)(scrollbarViewStyle),
  43387. "wrap-style": (0, vue.unref)(scrollbarStyle),
  43388. always: __props.scrollbarAlwaysOn,
  43389. tabindex: __props.scrollbarTabindex,
  43390. native: __props.nativeScrollbar,
  43391. onScroll: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("scroll", $event))
  43392. }, {
  43393. default: (0, vue.withCtx)(() => [
  43394. (0, vue.createElementVNode)("table", {
  43395. ref: "tableBody",
  43396. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body")),
  43397. cellspacing: "0",
  43398. cellpadding: "0",
  43399. border: "0",
  43400. style: (0, vue.normalizeStyle)({
  43401. width: (0, vue.unref)(bodyWidth),
  43402. tableLayout: (0, vue.unref)(tableLayout)
  43403. })
  43404. }, [
  43405. (0, vue.createVNode)((0, vue.unref)(hColgroup), {
  43406. columns: (0, vue.unref)(store).states.columns.value,
  43407. "table-layout": (0, vue.unref)(tableLayout)
  43408. }, null, 8, ["columns", "table-layout"]),
  43409. __props.showHeader && (0, vue.unref)(tableLayout) === "auto" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(table_header_default), {
  43410. key: 0,
  43411. ref: "tableHeaderRef",
  43412. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body-header")),
  43413. border: __props.border,
  43414. "default-sort": __props.defaultSort,
  43415. store: (0, vue.unref)(store),
  43416. "append-filter-panel-to": __props.appendFilterPanelTo,
  43417. onSetDragVisible: (0, vue.unref)(setDragVisible)
  43418. }, null, 8, [
  43419. "class",
  43420. "border",
  43421. "default-sort",
  43422. "store",
  43423. "append-filter-panel-to",
  43424. "onSetDragVisible"
  43425. ])) : (0, vue.createCommentVNode)("v-if", true),
  43426. (0, vue.createVNode)((0, vue.unref)(table_body_default), {
  43427. context: (0, vue.unref)(context),
  43428. highlight: __props.highlightCurrentRow,
  43429. "row-class-name": __props.rowClassName,
  43430. "tooltip-effect": computedTooltipEffect.value,
  43431. "tooltip-options": computedTooltipOptions.value,
  43432. "row-style": __props.rowStyle,
  43433. store: (0, vue.unref)(store),
  43434. stripe: __props.stripe
  43435. }, null, 8, [
  43436. "context",
  43437. "highlight",
  43438. "row-class-name",
  43439. "tooltip-effect",
  43440. "tooltip-options",
  43441. "row-style",
  43442. "store",
  43443. "stripe"
  43444. ]),
  43445. __props.showSummary && (0, vue.unref)(tableLayout) === "auto" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(table_footer_default), {
  43446. key: 1,
  43447. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body-footer")),
  43448. border: __props.border,
  43449. "default-sort": __props.defaultSort,
  43450. store: (0, vue.unref)(store),
  43451. "sum-text": computedSumText.value,
  43452. "summary-method": __props.summaryMethod
  43453. }, null, 8, [
  43454. "class",
  43455. "border",
  43456. "default-sort",
  43457. "store",
  43458. "sum-text",
  43459. "summary-method"
  43460. ])) : (0, vue.createCommentVNode)("v-if", true)
  43461. ], 6),
  43462. isEmpty.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  43463. key: 0,
  43464. ref: "emptyBlock",
  43465. style: (0, vue.normalizeStyle)((0, vue.unref)(emptyBlockStyle)),
  43466. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-block"))
  43467. }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text")) }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(computedEmptyText.value), 1)])], 2)], 6)) : (0, vue.createCommentVNode)("v-if", true),
  43468. _ctx.$slots.append ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  43469. key: 1,
  43470. ref: "appendWrapper",
  43471. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("append-wrapper"))
  43472. }, [(0, vue.renderSlot)(_ctx.$slots, "append")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  43473. ]),
  43474. _: 3
  43475. }, 8, [
  43476. "view-style",
  43477. "wrap-style",
  43478. "always",
  43479. "tabindex",
  43480. "native"
  43481. ])], 2),
  43482. __props.showSummary && (0, vue.unref)(tableLayout) === "fixed" ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  43483. key: 1,
  43484. ref: "footerWrapper",
  43485. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("footer-wrapper"))
  43486. }, [(0, vue.createElementVNode)("table", {
  43487. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("footer")),
  43488. cellspacing: "0",
  43489. cellpadding: "0",
  43490. border: "0",
  43491. style: (0, vue.normalizeStyle)((0, vue.unref)(tableBodyStyles))
  43492. }, [(0, vue.createVNode)((0, vue.unref)(hColgroup), {
  43493. columns: (0, vue.unref)(store).states.columns.value,
  43494. "table-layout": (0, vue.unref)(tableLayout)
  43495. }, null, 8, ["columns", "table-layout"]), (0, vue.createVNode)((0, vue.unref)(table_footer_default), {
  43496. border: __props.border,
  43497. "default-sort": __props.defaultSort,
  43498. store: (0, vue.unref)(store),
  43499. "sum-text": computedSumText.value,
  43500. "summary-method": __props.summaryMethod
  43501. }, null, 8, [
  43502. "border",
  43503. "default-sort",
  43504. "store",
  43505. "sum-text",
  43506. "summary-method"
  43507. ])], 6)], 2)), [[vue.vShow, !isEmpty.value], [(0, vue.unref)(Mousewheel), (0, vue.unref)(handleHeaderFooterMousewheel)]]) : (0, vue.createCommentVNode)("v-if", true),
  43508. __props.border || (0, vue.unref)(isGroup) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  43509. key: 2,
  43510. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("border-left-patch"))
  43511. }, null, 2)) : (0, vue.createCommentVNode)("v-if", true)
  43512. ], 2), (0, vue.withDirectives)((0, vue.createElementVNode)("div", {
  43513. ref: "resizeProxy",
  43514. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("column-resize-proxy"))
  43515. }, null, 2), [[vue.vShow, (0, vue.unref)(resizeProxyVisible)]])], 46, _hoisted_1$15);
  43516. };
  43517. }
  43518. });
  43519. //#endregion
  43520. //#region ../../packages/components/table/src/table.vue
  43521. var table_default = table_vue_vue_type_script_setup_true_lang_default;
  43522. //#endregion
  43523. //#region ../../packages/components/table/src/table-column/defaults.ts
  43524. const tableColumnProps = {
  43525. type: {
  43526. type: String,
  43527. default: "default"
  43528. },
  43529. label: String,
  43530. className: String,
  43531. labelClassName: String,
  43532. property: String,
  43533. prop: String,
  43534. width: {
  43535. type: [String, Number],
  43536. default: ""
  43537. },
  43538. minWidth: {
  43539. type: [String, Number],
  43540. default: ""
  43541. },
  43542. renderHeader: Function,
  43543. sortable: {
  43544. type: [Boolean, String],
  43545. default: false
  43546. },
  43547. sortMethod: Function,
  43548. sortBy: [
  43549. String,
  43550. Function,
  43551. Array
  43552. ],
  43553. resizable: {
  43554. type: Boolean,
  43555. default: true
  43556. },
  43557. columnKey: String,
  43558. align: String,
  43559. headerAlign: String,
  43560. showOverflowTooltip: {
  43561. type: [Boolean, Object],
  43562. default: void 0
  43563. },
  43564. tooltipFormatter: Function,
  43565. fixed: [Boolean, String],
  43566. formatter: Function,
  43567. selectable: Function,
  43568. reserveSelection: Boolean,
  43569. filterMethod: Function,
  43570. filteredValue: Array,
  43571. filters: Array,
  43572. filterPlacement: String,
  43573. filterMultiple: {
  43574. type: Boolean,
  43575. default: true
  43576. },
  43577. filterClassName: String,
  43578. index: [Number, Function],
  43579. sortOrders: {
  43580. type: Array,
  43581. default: () => {
  43582. return [
  43583. "ascending",
  43584. "descending",
  43585. null
  43586. ];
  43587. },
  43588. validator: (val) => {
  43589. return val.every((order) => [
  43590. "ascending",
  43591. "descending",
  43592. null
  43593. ].includes(order));
  43594. }
  43595. }
  43596. };
  43597. //#endregion
  43598. //#region ../../packages/components/table/src/config.ts
  43599. const defaultClassNames = {
  43600. selection: "table-column--selection",
  43601. expand: "table__expand-column"
  43602. };
  43603. const cellStarts = {
  43604. default: { order: "" },
  43605. selection: {
  43606. width: 48,
  43607. minWidth: 48,
  43608. realWidth: 48,
  43609. order: ""
  43610. },
  43611. expand: {
  43612. width: 48,
  43613. minWidth: 48,
  43614. realWidth: 48,
  43615. order: ""
  43616. },
  43617. index: {
  43618. width: 48,
  43619. minWidth: 48,
  43620. realWidth: 48,
  43621. order: ""
  43622. }
  43623. };
  43624. const getDefaultClassName = (type) => {
  43625. return defaultClassNames[type] || "";
  43626. };
  43627. const cellForced = {
  43628. selection: {
  43629. renderHeader({ store }) {
  43630. function isDisabled() {
  43631. return store.states.data.value && store.states.data.value.length === 0;
  43632. }
  43633. return (0, vue.h)(ElCheckbox, {
  43634. disabled: isDisabled(),
  43635. size: store.states.tableSize.value,
  43636. indeterminate: store.states.selection.value.length > 0 && !store.states.isAllSelected.value,
  43637. "onUpdate:modelValue": store.toggleAllSelection ?? void 0,
  43638. modelValue: store.states.isAllSelected.value,
  43639. ariaLabel: store.t("el.table.selectAllLabel")
  43640. });
  43641. },
  43642. renderCell({ row, column, store, $index }) {
  43643. return (0, vue.h)(ElCheckbox, {
  43644. disabled: column.selectable ? !column.selectable.call(null, row, $index) : false,
  43645. size: store.states.tableSize.value,
  43646. onChange: () => {
  43647. store.commit("rowSelectedChanged", row);
  43648. },
  43649. onClick: (event) => event.stopPropagation(),
  43650. modelValue: store.isSelected(row),
  43651. indeterminate: store.getRowIndeterminate(row),
  43652. ariaLabel: store.t("el.table.selectRowLabel")
  43653. });
  43654. },
  43655. sortable: false,
  43656. resizable: false
  43657. },
  43658. index: {
  43659. renderHeader({ column }) {
  43660. return column.label || "#";
  43661. },
  43662. renderCell({ column, $index }) {
  43663. let i = $index + 1;
  43664. const index = column.index;
  43665. if (isNumber(index)) i = $index + index;
  43666. else if (isFunction$1(index)) i = index($index);
  43667. return (0, vue.h)("div", {}, [i]);
  43668. },
  43669. sortable: false
  43670. },
  43671. expand: {
  43672. renderHeader({ column }) {
  43673. return column.label || "";
  43674. },
  43675. renderCell({ column, row, store, expanded, $index }) {
  43676. const { ns } = store;
  43677. const classes = [ns.e("expand-icon")];
  43678. if (!column.renderExpand && expanded) classes.push(ns.em("expand-icon", "expanded"));
  43679. const callback = function(e) {
  43680. e.stopPropagation();
  43681. store.toggleRowExpansion(row);
  43682. };
  43683. const isRowExpandable = store.states.rowExpandable.value?.(row, $index) ?? true;
  43684. if (!isRowExpandable) classes.push(ns.is("disabled"));
  43685. return (0, vue.h)("button", {
  43686. type: "button",
  43687. disabled: !isRowExpandable,
  43688. "aria-label": store.t(expanded ? "el.table.collapseRowLabel" : "el.table.expandRowLabel"),
  43689. "aria-expanded": expanded,
  43690. class: classes,
  43691. onClick: callback
  43692. }, { default: () => {
  43693. if (column.renderExpand) return [column.renderExpand({
  43694. expanded,
  43695. expandable: isRowExpandable
  43696. })];
  43697. return [(0, vue.h)(ElIcon, null, { default: () => {
  43698. return [(0, vue.h)(arrow_right_default)];
  43699. } })];
  43700. } });
  43701. },
  43702. sortable: false,
  43703. resizable: false
  43704. }
  43705. };
  43706. function defaultRenderCell({ row, column, $index }) {
  43707. const property = column.property;
  43708. const value = property && getProp(row, property).value;
  43709. if (column && column.formatter) return column.formatter(row, column, value, $index);
  43710. return value?.toString?.() || "";
  43711. }
  43712. function treeCellPrefix({ row, treeNode, store }, createPlaceholder = false) {
  43713. const { ns } = store;
  43714. if (!treeNode) {
  43715. if (createPlaceholder) return [(0, vue.h)("span", { class: ns.e("placeholder") })];
  43716. return null;
  43717. }
  43718. const ele = [];
  43719. const callback = function(e) {
  43720. e.stopPropagation();
  43721. if (treeNode.loading) return;
  43722. store.loadOrToggle(row);
  43723. };
  43724. if (treeNode.indent) ele.push((0, vue.h)("span", {
  43725. class: ns.e("indent"),
  43726. style: { "padding-left": `${treeNode.indent}px` }
  43727. }));
  43728. if (isBoolean(treeNode.expanded) && !treeNode.noLazyChildren) {
  43729. const expandClasses = [ns.e("expand-icon"), treeNode.expanded ? ns.em("expand-icon", "expanded") : ""];
  43730. let icon = arrow_right_default;
  43731. if (treeNode.loading) icon = loading_default;
  43732. ele.push((0, vue.h)("button", {
  43733. type: "button",
  43734. "aria-label": store.t(treeNode.expanded ? "el.table.collapseRowLabel" : "el.table.expandRowLabel"),
  43735. "aria-expanded": treeNode.expanded,
  43736. class: expandClasses,
  43737. onClick: callback
  43738. }, { default: () => {
  43739. return [(0, vue.h)(ElIcon, { class: ns.is("loading", treeNode.loading) }, { default: () => [(0, vue.h)(icon)] })];
  43740. } }));
  43741. } else ele.push((0, vue.h)("span", { class: ns.e("placeholder") }));
  43742. return ele;
  43743. }
  43744. //#endregion
  43745. //#region ../../packages/components/table/src/table-column/watcher-helper.ts
  43746. function getAllAliases(props, aliases) {
  43747. return props.reduce((prev, cur) => {
  43748. prev[cur] = cur;
  43749. return prev;
  43750. }, aliases);
  43751. }
  43752. function useWatcher(owner, props_) {
  43753. const instance = (0, vue.getCurrentInstance)();
  43754. const registerComplexWatchers = () => {
  43755. const props = ["fixed"];
  43756. const aliases = {
  43757. realWidth: "width",
  43758. realMinWidth: "minWidth"
  43759. };
  43760. const allAliases = getAllAliases(props, aliases);
  43761. Object.keys(allAliases).forEach((key) => {
  43762. const columnKey = aliases[key];
  43763. if (hasOwn(props_, columnKey)) (0, vue.watch)(() => props_[columnKey], (newVal) => {
  43764. let value = newVal;
  43765. if (columnKey === "width" && key === "realWidth") value = parseWidth(newVal);
  43766. if (columnKey === "minWidth" && key === "realMinWidth") value = parseMinWidth(newVal);
  43767. instance.columnConfig.value[columnKey] = value;
  43768. instance.columnConfig.value[key] = value;
  43769. const updateColumns = columnKey === "fixed";
  43770. owner.value.store.scheduleLayout(updateColumns);
  43771. });
  43772. });
  43773. };
  43774. const registerNormalWatchers = () => {
  43775. const props = [
  43776. "label",
  43777. "filters",
  43778. "filterMultiple",
  43779. "filteredValue",
  43780. "sortable",
  43781. "index",
  43782. "formatter",
  43783. "className",
  43784. "labelClassName",
  43785. "filterClassName",
  43786. "showOverflowTooltip",
  43787. "tooltipFormatter",
  43788. "resizable"
  43789. ];
  43790. const parentProps = ["showOverflowTooltip"];
  43791. const aliases = {
  43792. property: "prop",
  43793. align: "realAlign",
  43794. headerAlign: "realHeaderAlign"
  43795. };
  43796. const allAliases = getAllAliases(props, aliases);
  43797. Object.keys(allAliases).forEach((key) => {
  43798. const columnKey = aliases[key];
  43799. if (hasOwn(props_, columnKey)) (0, vue.watch)(() => props_[columnKey], (newVal) => {
  43800. instance.columnConfig.value[key] = newVal;
  43801. if (key === "filters" || key === "filterMethod") instance.columnConfig.value["filterable"] = !!(instance.columnConfig.value["filters"] || instance.columnConfig.value["filterMethod"]);
  43802. });
  43803. });
  43804. parentProps.forEach((key) => {
  43805. if (hasOwn(owner.value.props, key)) (0, vue.watch)(() => owner.value.props[key], (newVal) => {
  43806. if (instance.columnConfig.value.type === "selection") return;
  43807. if (!isUndefined(props_[key])) return;
  43808. instance.columnConfig.value[key] = newVal;
  43809. });
  43810. });
  43811. const globalConfig = useGlobalConfig("table");
  43812. if (globalConfig.value && hasOwn(globalConfig.value, "showOverflowTooltip")) (0, vue.watch)(() => globalConfig.value?.showOverflowTooltip, (newVal) => {
  43813. if (instance.columnConfig.value.type === "selection") return;
  43814. if (!isUndefined(props_.showOverflowTooltip) || !isUndefined(owner.value.props.showOverflowTooltip)) return;
  43815. instance.columnConfig.value.showOverflowTooltip = newVal;
  43816. });
  43817. };
  43818. return {
  43819. registerComplexWatchers,
  43820. registerNormalWatchers
  43821. };
  43822. }
  43823. //#endregion
  43824. //#region ../../packages/components/table/src/table-column/render-helper.ts
  43825. function useRender(props, slots, owner) {
  43826. const instance = (0, vue.getCurrentInstance)();
  43827. const columnId = (0, vue.ref)("");
  43828. const isSubColumn = (0, vue.ref)(false);
  43829. const realAlign = (0, vue.ref)();
  43830. const realHeaderAlign = (0, vue.ref)();
  43831. const ns = useNamespace("table");
  43832. (0, vue.watchEffect)(() => {
  43833. realAlign.value = props.align ? `is-${props.align}` : null;
  43834. realAlign.value;
  43835. });
  43836. (0, vue.watchEffect)(() => {
  43837. realHeaderAlign.value = props.headerAlign ? `is-${props.headerAlign}` : realAlign.value;
  43838. realHeaderAlign.value;
  43839. });
  43840. const columnOrTableParent = (0, vue.computed)(() => {
  43841. let parent = instance.vnode.vParent || instance.parent;
  43842. while (parent && !parent.tableId && !parent.columnId) parent = parent.vnode.vParent || parent.parent;
  43843. return parent;
  43844. });
  43845. const hasTreeColumn = (0, vue.computed)(() => {
  43846. const { store } = instance.parent;
  43847. if (!store) return false;
  43848. const { treeData } = store.states;
  43849. const treeDataValue = treeData.value;
  43850. return treeDataValue && Object.keys(treeDataValue).length > 0;
  43851. });
  43852. const realWidth = (0, vue.ref)(parseWidth(props.width));
  43853. const realMinWidth = (0, vue.ref)(parseMinWidth(props.minWidth));
  43854. const setColumnWidth = (column) => {
  43855. if (realWidth.value) column.width = realWidth.value;
  43856. if (realMinWidth.value) column.minWidth = realMinWidth.value;
  43857. if (!realWidth.value && realMinWidth.value) column.width = void 0;
  43858. if (!column.minWidth) column.minWidth = 80;
  43859. column.realWidth = Number(isUndefined(column.width) ? column.minWidth : column.width);
  43860. return column;
  43861. };
  43862. const setColumnForcedProps = (column) => {
  43863. const type = column.type;
  43864. const source = cellForced[type] || {};
  43865. Object.keys(source).forEach((prop) => {
  43866. const value = source[prop];
  43867. if (prop !== "className" && !isUndefined(value)) column[prop] = value;
  43868. });
  43869. const className = getDefaultClassName(type);
  43870. if (className) {
  43871. const forceClass = `${(0, vue.unref)(ns.namespace)}-${className}`;
  43872. column.className = column.className ? `${column.className} ${forceClass}` : forceClass;
  43873. }
  43874. return column;
  43875. };
  43876. const checkSubColumn = (children) => {
  43877. if (isArray$1(children)) children.forEach((child) => check(child));
  43878. else check(children);
  43879. function check(item) {
  43880. if (item?.type?.name === "ElTableColumn") item.vParent = instance;
  43881. }
  43882. };
  43883. const setColumnRenders = (column) => {
  43884. if (props.renderHeader) /* @__PURE__ */ debugWarn("TableColumn", "Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header.");
  43885. else if (column.type !== "selection") column.renderHeader = (scope) => {
  43886. instance.columnConfig.value["label"];
  43887. if (slots.header) {
  43888. const slotResult = slots.header(scope);
  43889. if (ensureValidVNode(slotResult)) return (0, vue.h)(vue.Fragment, slotResult);
  43890. }
  43891. return (0, vue.createTextVNode)(column.label);
  43892. };
  43893. if (slots["filter-icon"]) column.renderFilterIcon = (scope) => {
  43894. return (0, vue.renderSlot)(slots, "filter-icon", scope);
  43895. };
  43896. if (slots.expand) column.renderExpand = (scope) => {
  43897. return (0, vue.renderSlot)(slots, "expand", scope);
  43898. };
  43899. let originRenderCell = column.renderCell;
  43900. if (column.type === "expand") {
  43901. column.renderCell = (data) => (0, vue.h)("div", { class: "cell" }, [originRenderCell(data)]);
  43902. owner.value.renderExpanded = (row) => {
  43903. return slots.default ? slots.default(row) : slots.default;
  43904. };
  43905. } else {
  43906. originRenderCell = originRenderCell || defaultRenderCell;
  43907. column.renderCell = (data) => {
  43908. let children = null;
  43909. if (slots.default) {
  43910. const vnodes = slots.default(data);
  43911. children = vnodes.some((v) => v.type !== vue.Comment) ? vnodes : originRenderCell(data);
  43912. } else children = originRenderCell(data);
  43913. const { columns } = owner.value.store.states;
  43914. const firstUserColumnIndex = columns.value.findIndex((item) => item.type === "default");
  43915. const prefix = treeCellPrefix(data, hasTreeColumn.value && data.cellIndex === firstUserColumnIndex);
  43916. const props = {
  43917. class: "cell",
  43918. style: {}
  43919. };
  43920. if (column.showOverflowTooltip) {
  43921. props.class = `${props.class} ${(0, vue.unref)(ns.namespace)}-tooltip`;
  43922. props.style = { width: `${(data.column.realWidth || Number(data.column.width)) - 1}px` };
  43923. }
  43924. checkSubColumn(children);
  43925. return (0, vue.h)("div", props, [prefix, children]);
  43926. };
  43927. }
  43928. return column;
  43929. };
  43930. const getPropsData = (...propsKey) => {
  43931. return propsKey.reduce((prev, cur) => {
  43932. if (isArray$1(cur)) cur.forEach((key) => {
  43933. prev[key] = props[key];
  43934. });
  43935. return prev;
  43936. }, {});
  43937. };
  43938. const getColumnElIndex = (children, child) => {
  43939. return Array.prototype.indexOf.call(children, child);
  43940. };
  43941. const updateColumnOrder = () => {
  43942. owner.value.store.commit("updateColumnOrder", instance.columnConfig.value);
  43943. };
  43944. return {
  43945. columnId,
  43946. realAlign,
  43947. isSubColumn,
  43948. realHeaderAlign,
  43949. columnOrTableParent,
  43950. setColumnWidth,
  43951. setColumnForcedProps,
  43952. setColumnRenders,
  43953. getPropsData,
  43954. getColumnElIndex,
  43955. updateColumnOrder
  43956. };
  43957. }
  43958. //#endregion
  43959. //#region ../../packages/components/table/src/table-column/index.vue?vue&type=script&setup=true&lang.ts
  43960. var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  43961. name: "ElTableColumn",
  43962. __name: "index",
  43963. props: tableColumnProps,
  43964. setup(__props) {
  43965. const props = __props;
  43966. const slots = (0, vue.useSlots)();
  43967. const instance = (0, vue.getCurrentInstance)();
  43968. const globalConfig = useGlobalConfig("table");
  43969. const columnConfig = (0, vue.ref)({});
  43970. const owner = (0, vue.computed)(() => {
  43971. let parent = instance.parent;
  43972. while (parent && !parent.tableId) parent = parent.parent;
  43973. return parent;
  43974. });
  43975. const { registerNormalWatchers, registerComplexWatchers } = useWatcher(owner, props);
  43976. const { columnId, isSubColumn, realHeaderAlign, columnOrTableParent, setColumnWidth, setColumnForcedProps, setColumnRenders, getPropsData, getColumnElIndex, realAlign, updateColumnOrder } = useRender(props, slots, owner);
  43977. const parent = columnOrTableParent.value;
  43978. columnId.value = createTableColumnId("tableId" in parent ? parent.tableId : parent.columnId);
  43979. (0, vue.onBeforeMount)(() => {
  43980. isSubColumn.value = owner.value !== parent;
  43981. const type = props.type || "default";
  43982. const sortable = props.sortable === "" ? true : props.sortable;
  43983. const showOverflowTooltip = type === "selection" ? false : isUndefined(props.showOverflowTooltip) ? parent.props.showOverflowTooltip ?? globalConfig.value?.showOverflowTooltip : props.showOverflowTooltip;
  43984. const tooltipFormatter = isUndefined(props.tooltipFormatter) ? parent.props.tooltipFormatter ?? globalConfig.value?.tooltipFormatter : props.tooltipFormatter;
  43985. const defaults = {
  43986. ...cellStarts[type],
  43987. id: columnId.value,
  43988. type,
  43989. property: props.prop || props.property,
  43990. align: realAlign,
  43991. headerAlign: realHeaderAlign,
  43992. showOverflowTooltip,
  43993. tooltipFormatter,
  43994. filterable: props.filters || props.filterMethod,
  43995. filteredValue: [],
  43996. filterPlacement: "",
  43997. filterClassName: "",
  43998. isColumnGroup: false,
  43999. isSubColumn: false,
  44000. filterOpened: false,
  44001. sortable,
  44002. index: props.index,
  44003. rawColumnKey: instance.vnode.key
  44004. };
  44005. let column = getPropsData([
  44006. "columnKey",
  44007. "label",
  44008. "className",
  44009. "labelClassName",
  44010. "type",
  44011. "renderHeader",
  44012. "formatter",
  44013. "fixed",
  44014. "resizable"
  44015. ], [
  44016. "sortMethod",
  44017. "sortBy",
  44018. "sortOrders"
  44019. ], ["selectable", "reserveSelection"], [
  44020. "filterMethod",
  44021. "filters",
  44022. "filterMultiple",
  44023. "filterOpened",
  44024. "filteredValue",
  44025. "filterPlacement",
  44026. "filterClassName"
  44027. ]);
  44028. column = mergeOptions(defaults, column);
  44029. column = compose(setColumnRenders, setColumnWidth, setColumnForcedProps)(column);
  44030. columnConfig.value = column;
  44031. registerNormalWatchers();
  44032. registerComplexWatchers();
  44033. });
  44034. (0, vue.onMounted)(() => {
  44035. const parent = columnOrTableParent.value;
  44036. const children = isSubColumn.value ? parent.vnode.el?.children : parent.refs.hiddenColumns?.children;
  44037. const getColumnIndex = () => getColumnElIndex(children || [], instance.vnode.el);
  44038. columnConfig.value.getColumnIndex = getColumnIndex;
  44039. getColumnIndex() > -1 && owner.value.store.commit("insertColumn", columnConfig.value, isSubColumn.value ? "columnConfig" in parent && parent.columnConfig.value : null, updateColumnOrder);
  44040. });
  44041. (0, vue.onBeforeUnmount)(() => {
  44042. const getColumnIndex = columnConfig.value.getColumnIndex;
  44043. (getColumnIndex ? getColumnIndex() : -1) > -1 && owner.value.store.commit("removeColumn", columnConfig.value, isSubColumn.value ? "columnConfig" in parent && parent.columnConfig.value : null, updateColumnOrder);
  44044. });
  44045. instance.columnId = columnId.value;
  44046. instance.columnConfig = columnConfig;
  44047. const TableColumnRenderer = () => {
  44048. try {
  44049. const renderDefault = slots.default?.({
  44050. row: {},
  44051. column: {},
  44052. $index: -1
  44053. });
  44054. const children = [];
  44055. if (isArray$1(renderDefault)) {
  44056. for (const childNode of renderDefault) if (childNode.type?.name === "ElTableColumn" || childNode.shapeFlag & 2) children.push(childNode);
  44057. else if (childNode.type === vue.Fragment && isArray$1(childNode.children)) childNode.children.forEach((vnode) => {
  44058. if (vnode?.patchFlag !== 1024 && !isString(vnode?.children)) children.push(vnode);
  44059. });
  44060. }
  44061. return (0, vue.h)("div", children);
  44062. } catch {
  44063. return (0, vue.h)("div", []);
  44064. }
  44065. };
  44066. return (_ctx, _cache) => {
  44067. return (0, vue.openBlock)(), (0, vue.createBlock)(TableColumnRenderer);
  44068. };
  44069. }
  44070. });
  44071. //#endregion
  44072. //#region ../../packages/components/table/src/table-column/index.vue
  44073. var table_column_default$1 = index_vue_vue_type_script_setup_true_lang_default;
  44074. //#endregion
  44075. //#region ../../packages/components/table/src/table-column/index.ts
  44076. var table_column_default = table_column_default$1;
  44077. //#endregion
  44078. //#region ../../packages/components/table/src/tableColumn.ts
  44079. var tableColumn_default = table_column_default;
  44080. //#endregion
  44081. //#region ../../packages/components/table/index.ts
  44082. const ElTable = withInstall(table_default, { TableColumn: tableColumn_default });
  44083. const ElTableColumn = withNoopInstall(tableColumn_default);
  44084. //#endregion
  44085. //#region ../../packages/components/table-v2/src/constants.ts
  44086. let SortOrder = /* @__PURE__ */ function(SortOrder) {
  44087. SortOrder["ASC"] = "asc";
  44088. SortOrder["DESC"] = "desc";
  44089. return SortOrder;
  44090. }({});
  44091. let Alignment = /* @__PURE__ */ function(Alignment) {
  44092. Alignment["LEFT"] = "left";
  44093. Alignment["CENTER"] = "center";
  44094. Alignment["RIGHT"] = "right";
  44095. return Alignment;
  44096. }({});
  44097. let FixedDir = /* @__PURE__ */ function(FixedDir) {
  44098. FixedDir["LEFT"] = "left";
  44099. FixedDir["RIGHT"] = "right";
  44100. return FixedDir;
  44101. }({});
  44102. const oppositeOrderMap = {
  44103. ["asc"]: "desc",
  44104. ["desc"]: "asc"
  44105. };
  44106. //#endregion
  44107. //#region ../../packages/components/table-v2/src/private.ts
  44108. const placeholderSign = Symbol("placeholder");
  44109. //#endregion
  44110. //#region ../../packages/components/table-v2/src/composables/utils.ts
  44111. const calcColumnStyle = (column, fixedColumn, fixed) => {
  44112. const flex = {
  44113. flexGrow: 0,
  44114. flexShrink: 0,
  44115. ...fixed ? {} : {
  44116. flexGrow: column.flexGrow ?? 0,
  44117. flexShrink: column.flexShrink ?? 1
  44118. }
  44119. };
  44120. const style = {
  44121. ...column.style ?? {},
  44122. ...flex,
  44123. flexBasis: "auto",
  44124. width: column.width
  44125. };
  44126. if (!fixedColumn) {
  44127. if (column.maxWidth) style.maxWidth = column.maxWidth;
  44128. if (column.minWidth) style.minWidth = column.minWidth;
  44129. }
  44130. return style;
  44131. };
  44132. //#endregion
  44133. //#region ../../packages/components/table-v2/src/composables/use-columns.ts
  44134. function useColumns(props, columns, fixed) {
  44135. const _columns = (0, vue.computed)(() => (0, vue.unref)(columns).map((column, index) => ({
  44136. ...column,
  44137. key: column.key ?? column.dataKey ?? index
  44138. })));
  44139. const visibleColumns = (0, vue.computed)(() => {
  44140. return (0, vue.unref)(_columns).filter((column) => !column.hidden);
  44141. });
  44142. const fixedColumnsOnLeft = (0, vue.computed)(() => (0, vue.unref)(visibleColumns).filter((column) => column.fixed === "left" || column.fixed === true));
  44143. const fixedColumnsOnRight = (0, vue.computed)(() => (0, vue.unref)(visibleColumns).filter((column) => column.fixed === "right"));
  44144. const normalColumns = (0, vue.computed)(() => (0, vue.unref)(visibleColumns).filter((column) => !column.fixed));
  44145. const mainColumns = (0, vue.computed)(() => {
  44146. const ret = [];
  44147. (0, vue.unref)(fixedColumnsOnLeft).forEach((column) => {
  44148. ret.push({
  44149. ...column,
  44150. placeholderSign
  44151. });
  44152. });
  44153. (0, vue.unref)(normalColumns).forEach((column) => {
  44154. ret.push(column);
  44155. });
  44156. (0, vue.unref)(fixedColumnsOnRight).forEach((column) => {
  44157. ret.push({
  44158. ...column,
  44159. placeholderSign
  44160. });
  44161. });
  44162. return ret;
  44163. });
  44164. const hasFixedColumns = (0, vue.computed)(() => {
  44165. return (0, vue.unref)(fixedColumnsOnLeft).length || (0, vue.unref)(fixedColumnsOnRight).length;
  44166. });
  44167. const columnsStyles = (0, vue.computed)(() => {
  44168. return (0, vue.unref)(_columns).reduce((style, column) => {
  44169. style[column.key] = calcColumnStyle(column, (0, vue.unref)(fixed), props.fixed);
  44170. return style;
  44171. }, {});
  44172. });
  44173. const columnsTotalWidth = (0, vue.computed)(() => {
  44174. return (0, vue.unref)(visibleColumns).reduce((width, column) => width + column.width, 0);
  44175. });
  44176. const getColumn = (key) => {
  44177. return (0, vue.unref)(_columns).find((column) => column.key === key);
  44178. };
  44179. const getColumnStyle = (key) => {
  44180. return (0, vue.unref)(columnsStyles)[key];
  44181. };
  44182. const updateColumnWidth = (column, width) => {
  44183. column.width = width;
  44184. };
  44185. function onColumnSorted(e) {
  44186. const { key } = e.currentTarget.dataset;
  44187. if (!key) return;
  44188. const { sortState, sortBy } = props;
  44189. let order = "asc";
  44190. if (isObject$1(sortState)) order = oppositeOrderMap[sortState[key]];
  44191. else order = oppositeOrderMap[sortBy.order];
  44192. props.onColumnSort?.({
  44193. column: getColumn(key),
  44194. key,
  44195. order
  44196. });
  44197. }
  44198. return {
  44199. columns: _columns,
  44200. columnsStyles,
  44201. columnsTotalWidth,
  44202. fixedColumnsOnLeft,
  44203. fixedColumnsOnRight,
  44204. hasFixedColumns,
  44205. mainColumns,
  44206. normalColumns,
  44207. visibleColumns,
  44208. getColumn,
  44209. getColumnStyle,
  44210. updateColumnWidth,
  44211. onColumnSorted
  44212. };
  44213. }
  44214. //#endregion
  44215. //#region ../../packages/components/table-v2/src/composables/use-scrollbar.ts
  44216. const useScrollbar = (props, { mainTableRef, leftTableRef, rightTableRef, onMaybeEndReached }) => {
  44217. const scrollPos = (0, vue.ref)({
  44218. scrollLeft: 0,
  44219. scrollTop: 0
  44220. });
  44221. function doScroll(params) {
  44222. const { scrollTop } = params;
  44223. mainTableRef.value?.scrollTo(params);
  44224. leftTableRef.value?.scrollToTop(scrollTop);
  44225. rightTableRef.value?.scrollToTop(scrollTop);
  44226. }
  44227. function scrollTo(params) {
  44228. scrollPos.value = params;
  44229. doScroll(params);
  44230. }
  44231. function scrollToTop(scrollTop) {
  44232. scrollPos.value.scrollTop = scrollTop;
  44233. doScroll((0, vue.unref)(scrollPos));
  44234. }
  44235. function scrollToLeft(scrollLeft) {
  44236. scrollPos.value.scrollLeft = scrollLeft;
  44237. mainTableRef.value?.scrollTo?.((0, vue.unref)(scrollPos));
  44238. }
  44239. function onScroll(params) {
  44240. scrollTo(params);
  44241. props.onScroll?.(params);
  44242. }
  44243. function onVerticalScroll({ scrollTop }) {
  44244. const { scrollTop: currentScrollTop } = (0, vue.unref)(scrollPos);
  44245. if (scrollTop !== currentScrollTop) scrollToTop(scrollTop);
  44246. }
  44247. function scrollToRow(row, strategy = "auto") {
  44248. mainTableRef.value?.scrollToRow(row, strategy);
  44249. }
  44250. (0, vue.watch)(() => (0, vue.unref)(scrollPos).scrollTop, (cur, prev) => {
  44251. if (cur > prev) onMaybeEndReached();
  44252. });
  44253. return {
  44254. scrollPos,
  44255. scrollTo,
  44256. scrollToLeft,
  44257. scrollToTop,
  44258. scrollToRow,
  44259. onScroll,
  44260. onVerticalScroll
  44261. };
  44262. };
  44263. //#endregion
  44264. //#region ../../packages/components/table-v2/src/composables/use-row.ts
  44265. const useRow = (props, { mainTableRef, leftTableRef, rightTableRef, tableInstance, ns, isScrolling }) => {
  44266. const vm = (0, vue.getCurrentInstance)();
  44267. const { emit } = vm;
  44268. const isResetting = (0, vue.shallowRef)(false);
  44269. const expandedRowKeys = (0, vue.ref)(props.defaultExpandedRowKeys || []);
  44270. const lastRenderedRowIndex = (0, vue.ref)(-1);
  44271. const resetIndex = (0, vue.shallowRef)(null);
  44272. const rowHeights = (0, vue.ref)({});
  44273. const pendingRowHeights = (0, vue.ref)({});
  44274. const leftTableHeights = (0, vue.shallowRef)({});
  44275. const mainTableHeights = (0, vue.shallowRef)({});
  44276. const rightTableHeights = (0, vue.shallowRef)({});
  44277. const isDynamic = (0, vue.computed)(() => isNumber(props.estimatedRowHeight));
  44278. function onRowsRendered(params) {
  44279. props.onRowsRendered?.(params);
  44280. if (params.rowCacheEnd > (0, vue.unref)(lastRenderedRowIndex)) lastRenderedRowIndex.value = params.rowCacheEnd;
  44281. }
  44282. function onRowHovered({ hovered, rowKey }) {
  44283. if (isScrolling.value) return;
  44284. tableInstance.vnode.el.querySelectorAll(`[rowkey="${String(rowKey)}"]`).forEach((row) => {
  44285. if (hovered) row.classList.add(ns.is("hovered"));
  44286. else row.classList.remove(ns.is("hovered"));
  44287. });
  44288. }
  44289. function onRowExpanded({ expanded, rowData, rowIndex, rowKey }) {
  44290. const _expandedRowKeys = [...(0, vue.unref)(expandedRowKeys)];
  44291. const currentKeyIndex = _expandedRowKeys.indexOf(rowKey);
  44292. if (expanded) {
  44293. if (currentKeyIndex === -1) _expandedRowKeys.push(rowKey);
  44294. } else if (currentKeyIndex > -1) _expandedRowKeys.splice(currentKeyIndex, 1);
  44295. expandedRowKeys.value = _expandedRowKeys;
  44296. emit("update:expandedRowKeys", _expandedRowKeys);
  44297. props.onRowExpand?.({
  44298. expanded,
  44299. rowData,
  44300. rowIndex,
  44301. rowKey
  44302. });
  44303. props.onExpandedRowsChange?.(_expandedRowKeys);
  44304. if (tableInstance.vnode.el.querySelector(`.${ns.is("hovered")}[rowkey="${String(rowKey)}"]`)) (0, vue.nextTick)(() => onRowHovered({
  44305. hovered: true,
  44306. rowKey
  44307. }));
  44308. }
  44309. const flushingRowHeights = debounce(() => {
  44310. isResetting.value = true;
  44311. rowHeights.value = {
  44312. ...(0, vue.unref)(rowHeights),
  44313. ...(0, vue.unref)(pendingRowHeights)
  44314. };
  44315. resetAfterIndex((0, vue.unref)(resetIndex), false);
  44316. pendingRowHeights.value = {};
  44317. resetIndex.value = null;
  44318. mainTableRef.value?.forceUpdate();
  44319. leftTableRef.value?.forceUpdate();
  44320. rightTableRef.value?.forceUpdate();
  44321. vm.proxy?.$forceUpdate();
  44322. isResetting.value = false;
  44323. }, 0);
  44324. function resetAfterIndex(index, forceUpdate = false) {
  44325. if (!(0, vue.unref)(isDynamic)) return;
  44326. [
  44327. mainTableRef,
  44328. leftTableRef,
  44329. rightTableRef
  44330. ].forEach((tableRef) => {
  44331. const table = (0, vue.unref)(tableRef);
  44332. if (table) table.resetAfterRowIndex(index, forceUpdate);
  44333. });
  44334. }
  44335. function resetHeights(rowKey, height, rowIdx) {
  44336. const resetIdx = (0, vue.unref)(resetIndex);
  44337. if (resetIdx === null) resetIndex.value = rowIdx;
  44338. else if (resetIdx > rowIdx) resetIndex.value = rowIdx;
  44339. pendingRowHeights.value[rowKey] = height;
  44340. }
  44341. function onRowHeightChange({ rowKey, height, rowIndex }, fixedDir) {
  44342. if (!fixedDir) mainTableHeights.value[rowKey] = height;
  44343. else if (fixedDir === "right") rightTableHeights.value[rowKey] = height;
  44344. else leftTableHeights.value[rowKey] = height;
  44345. const maximumHeight = Math.max(...[
  44346. leftTableHeights,
  44347. rightTableHeights,
  44348. mainTableHeights
  44349. ].map((records) => records.value[rowKey] || 0));
  44350. if ((0, vue.unref)(rowHeights)[rowKey] !== maximumHeight) {
  44351. resetHeights(rowKey, maximumHeight, rowIndex);
  44352. flushingRowHeights();
  44353. }
  44354. }
  44355. return {
  44356. expandedRowKeys,
  44357. lastRenderedRowIndex,
  44358. isDynamic,
  44359. isResetting,
  44360. rowHeights,
  44361. resetAfterIndex,
  44362. onRowExpanded,
  44363. onRowHovered,
  44364. onRowsRendered,
  44365. onRowHeightChange
  44366. };
  44367. };
  44368. //#endregion
  44369. //#region ../../packages/components/table-v2/src/composables/use-data.ts
  44370. const useData = (props, { expandedRowKeys, lastRenderedRowIndex, resetAfterIndex }) => {
  44371. const depthMap = (0, vue.ref)({});
  44372. const flattenedData = (0, vue.computed)(() => {
  44373. const depths = {};
  44374. const { data, rowKey } = props;
  44375. const _expandedRowKeys = (0, vue.unref)(expandedRowKeys);
  44376. if (!_expandedRowKeys || !_expandedRowKeys.length) return data;
  44377. const array = [];
  44378. const keysSet = /* @__PURE__ */ new Set();
  44379. _expandedRowKeys.forEach((x) => keysSet.add(x));
  44380. let copy = data.slice();
  44381. copy.forEach((x) => depths[x[rowKey]] = 0);
  44382. while (copy.length > 0) {
  44383. const item = copy.shift();
  44384. array.push(item);
  44385. if (keysSet.has(item[rowKey]) && isArray$1(item.children) && item.children.length > 0) {
  44386. copy = [...item.children, ...copy];
  44387. item.children.forEach((child) => depths[child[rowKey]] = depths[item[rowKey]] + 1);
  44388. }
  44389. }
  44390. depthMap.value = depths;
  44391. return array;
  44392. });
  44393. const data = (0, vue.computed)(() => {
  44394. const { data, expandColumnKey } = props;
  44395. return expandColumnKey ? (0, vue.unref)(flattenedData) : data;
  44396. });
  44397. (0, vue.watch)(data, (val, prev) => {
  44398. if (val !== prev) {
  44399. lastRenderedRowIndex.value = -1;
  44400. resetAfterIndex(0, true);
  44401. }
  44402. });
  44403. return {
  44404. data,
  44405. depthMap
  44406. };
  44407. };
  44408. //#endregion
  44409. //#region ../../packages/components/table-v2/src/utils.ts
  44410. const sumReducer = (sum, num) => sum + num;
  44411. const sum = (listLike) => {
  44412. return isArray$1(listLike) ? listLike.reduce(sumReducer, 0) : listLike;
  44413. };
  44414. const tryCall = (fLike, params, defaultRet = {}) => {
  44415. return isFunction$1(fLike) ? fLike(params) : fLike ?? defaultRet;
  44416. };
  44417. const enforceUnit = (style) => {
  44418. [
  44419. "width",
  44420. "maxWidth",
  44421. "minWidth",
  44422. "height"
  44423. ].forEach((key) => {
  44424. style[key] = addUnit(style[key]);
  44425. });
  44426. return style;
  44427. };
  44428. const componentToSlot = (ComponentLike) => (0, vue.isVNode)(ComponentLike) ? (props) => (0, vue.h)(ComponentLike, props) : ComponentLike;
  44429. //#endregion
  44430. //#region ../../packages/components/table-v2/src/composables/use-styles.ts
  44431. const useStyles = (props, { columnsTotalWidth, rowsHeight, fixedColumnsOnLeft, fixedColumnsOnRight }) => {
  44432. const bodyWidth = (0, vue.computed)(() => {
  44433. const { fixed, width, vScrollbarSize } = props;
  44434. const ret = width - vScrollbarSize;
  44435. return fixed ? Math.max(Math.round((0, vue.unref)(columnsTotalWidth)), ret) : ret;
  44436. });
  44437. const mainTableHeight = (0, vue.computed)(() => {
  44438. const { height = 0, maxHeight = 0, footerHeight, hScrollbarSize } = props;
  44439. if (maxHeight > 0) {
  44440. const _fixedRowsHeight = (0, vue.unref)(fixedRowsHeight);
  44441. const _rowsHeight = (0, vue.unref)(rowsHeight);
  44442. const total = (0, vue.unref)(headerHeight) + _fixedRowsHeight + _rowsHeight + hScrollbarSize;
  44443. return Math.min(total, maxHeight - footerHeight);
  44444. }
  44445. return height - footerHeight;
  44446. });
  44447. const fixedTableHeight = (0, vue.computed)(() => {
  44448. const { maxHeight } = props;
  44449. const tableHeight = (0, vue.unref)(mainTableHeight);
  44450. if (isNumber(maxHeight) && maxHeight > 0) return tableHeight;
  44451. const totalHeight = (0, vue.unref)(rowsHeight) + (0, vue.unref)(headerHeight) + (0, vue.unref)(fixedRowsHeight);
  44452. return Math.min(tableHeight, totalHeight);
  44453. });
  44454. const mapColumn = (column) => column.width;
  44455. const leftTableWidth = (0, vue.computed)(() => sum((0, vue.unref)(fixedColumnsOnLeft).map(mapColumn)));
  44456. const rightTableWidth = (0, vue.computed)(() => sum((0, vue.unref)(fixedColumnsOnRight).map(mapColumn)));
  44457. const headerHeight = (0, vue.computed)(() => sum(props.headerHeight));
  44458. const fixedRowsHeight = (0, vue.computed)(() => {
  44459. return (props.fixedData?.length || 0) * props.rowHeight;
  44460. });
  44461. const windowHeight = (0, vue.computed)(() => {
  44462. return (0, vue.unref)(mainTableHeight) - (0, vue.unref)(headerHeight) - (0, vue.unref)(fixedRowsHeight);
  44463. });
  44464. const rootStyle = (0, vue.computed)(() => {
  44465. const { style = {}, height, width } = props;
  44466. return enforceUnit({
  44467. ...style,
  44468. height,
  44469. width
  44470. });
  44471. });
  44472. return {
  44473. bodyWidth,
  44474. fixedTableHeight,
  44475. mainTableHeight,
  44476. leftTableWidth,
  44477. rightTableWidth,
  44478. windowHeight,
  44479. footerHeight: (0, vue.computed)(() => enforceUnit({ height: props.footerHeight })),
  44480. emptyStyle: (0, vue.computed)(() => ({
  44481. top: addUnit((0, vue.unref)(headerHeight)),
  44482. bottom: addUnit(props.footerHeight),
  44483. width: addUnit(props.width)
  44484. })),
  44485. rootStyle,
  44486. headerHeight
  44487. };
  44488. };
  44489. //#endregion
  44490. //#region ../../packages/components/table-v2/src/composables/use-auto-resize.ts
  44491. const useAutoResize = (props) => {
  44492. const sizer = (0, vue.ref)();
  44493. const width$ = (0, vue.ref)(0);
  44494. const height$ = (0, vue.ref)(0);
  44495. let resizerStopper;
  44496. (0, vue.onMounted)(() => {
  44497. resizerStopper = useResizeObserver(sizer, ([entry]) => {
  44498. const { width, height } = entry.contentRect;
  44499. const { paddingLeft, paddingRight, paddingTop, paddingBottom } = getComputedStyle(entry.target);
  44500. const left = Number.parseInt(paddingLeft) || 0;
  44501. const right = Number.parseInt(paddingRight) || 0;
  44502. const top = Number.parseInt(paddingTop) || 0;
  44503. const bottom = Number.parseInt(paddingBottom) || 0;
  44504. width$.value = width - left - right;
  44505. height$.value = height - top - bottom;
  44506. }).stop;
  44507. });
  44508. (0, vue.onBeforeUnmount)(() => {
  44509. resizerStopper?.();
  44510. });
  44511. (0, vue.watch)([width$, height$], ([width, height]) => {
  44512. props.onResize?.({
  44513. width,
  44514. height
  44515. });
  44516. });
  44517. return {
  44518. sizer,
  44519. width: width$,
  44520. height: height$
  44521. };
  44522. };
  44523. //#endregion
  44524. //#region ../../packages/components/table-v2/src/use-table.ts
  44525. function useTable(props) {
  44526. const mainTableRef = (0, vue.ref)();
  44527. const leftTableRef = (0, vue.ref)();
  44528. const rightTableRef = (0, vue.ref)();
  44529. const { columns, columnsStyles, columnsTotalWidth, fixedColumnsOnLeft, fixedColumnsOnRight, hasFixedColumns, mainColumns, onColumnSorted } = useColumns(props, (0, vue.toRef)(props, "columns"), (0, vue.toRef)(props, "fixed"));
  44530. const { scrollTo, scrollToLeft, scrollToTop, scrollToRow, onScroll, onVerticalScroll, scrollPos } = useScrollbar(props, {
  44531. mainTableRef,
  44532. leftTableRef,
  44533. rightTableRef,
  44534. onMaybeEndReached
  44535. });
  44536. const ns = useNamespace("table-v2");
  44537. const instance = (0, vue.getCurrentInstance)();
  44538. const isScrolling = (0, vue.shallowRef)(false);
  44539. const { expandedRowKeys, lastRenderedRowIndex, isDynamic, isResetting, rowHeights, resetAfterIndex, onRowExpanded, onRowHeightChange, onRowHovered, onRowsRendered } = useRow(props, {
  44540. mainTableRef,
  44541. leftTableRef,
  44542. rightTableRef,
  44543. tableInstance: instance,
  44544. ns,
  44545. isScrolling
  44546. });
  44547. const { data, depthMap } = useData(props, {
  44548. expandedRowKeys,
  44549. lastRenderedRowIndex,
  44550. resetAfterIndex
  44551. });
  44552. const rowsHeight = (0, vue.computed)(() => {
  44553. const { estimatedRowHeight, rowHeight } = props;
  44554. const _data = (0, vue.unref)(data);
  44555. if (isNumber(estimatedRowHeight)) return Object.values((0, vue.unref)(rowHeights)).reduce((acc, curr) => acc + curr, 0);
  44556. return _data.length * rowHeight;
  44557. });
  44558. const { bodyWidth, fixedTableHeight, mainTableHeight, leftTableWidth, rightTableWidth, windowHeight, footerHeight, emptyStyle, rootStyle, headerHeight } = useStyles(props, {
  44559. columnsTotalWidth,
  44560. fixedColumnsOnLeft,
  44561. fixedColumnsOnRight,
  44562. rowsHeight
  44563. });
  44564. const containerRef = (0, vue.ref)();
  44565. const showEmpty = (0, vue.computed)(() => {
  44566. const noData = (0, vue.unref)(data).length === 0;
  44567. return isArray$1(props.fixedData) ? props.fixedData.length === 0 && noData : noData;
  44568. });
  44569. function getRowHeight(rowIndex) {
  44570. const { estimatedRowHeight, rowHeight, rowKey } = props;
  44571. if (!estimatedRowHeight) return rowHeight;
  44572. return (0, vue.unref)(rowHeights)[(0, vue.unref)(data)[rowIndex][rowKey]] || estimatedRowHeight;
  44573. }
  44574. const isEndReached = (0, vue.ref)(false);
  44575. function onMaybeEndReached() {
  44576. const { onEndReached } = props;
  44577. if (!onEndReached) return;
  44578. const { scrollTop } = (0, vue.unref)(scrollPos);
  44579. const _totalHeight = (0, vue.unref)(rowsHeight);
  44580. const remainDistance = _totalHeight - (scrollTop + (0, vue.unref)(windowHeight)) + props.hScrollbarSize;
  44581. if (!isEndReached.value && (0, vue.unref)(lastRenderedRowIndex) >= 0 && _totalHeight <= scrollTop + (0, vue.unref)(mainTableHeight) - (0, vue.unref)(headerHeight)) {
  44582. isEndReached.value = true;
  44583. onEndReached(remainDistance);
  44584. } else isEndReached.value = false;
  44585. }
  44586. (0, vue.watch)(() => (0, vue.unref)(rowsHeight), () => isEndReached.value = false);
  44587. (0, vue.watch)(() => props.expandedRowKeys, (val) => expandedRowKeys.value = val, { deep: true });
  44588. return {
  44589. columns,
  44590. containerRef,
  44591. mainTableRef,
  44592. leftTableRef,
  44593. rightTableRef,
  44594. isDynamic,
  44595. isResetting,
  44596. isScrolling,
  44597. hasFixedColumns,
  44598. columnsStyles,
  44599. columnsTotalWidth,
  44600. data,
  44601. expandedRowKeys,
  44602. depthMap,
  44603. fixedColumnsOnLeft,
  44604. fixedColumnsOnRight,
  44605. mainColumns,
  44606. bodyWidth,
  44607. emptyStyle,
  44608. rootStyle,
  44609. footerHeight,
  44610. mainTableHeight,
  44611. fixedTableHeight,
  44612. leftTableWidth,
  44613. rightTableWidth,
  44614. showEmpty,
  44615. getRowHeight,
  44616. onColumnSorted,
  44617. onRowHovered,
  44618. onRowExpanded,
  44619. onRowsRendered,
  44620. onRowHeightChange,
  44621. scrollTo,
  44622. scrollToLeft,
  44623. scrollToTop,
  44624. scrollToRow,
  44625. onScroll,
  44626. onVerticalScroll
  44627. };
  44628. }
  44629. //#endregion
  44630. //#region ../../packages/components/table-v2/src/tokens.ts
  44631. const TableV2InjectionKey = Symbol("tableV2");
  44632. const TABLE_V2_GRID_INJECTION_KEY = "tableV2GridScrollLeft";
  44633. //#endregion
  44634. //#region ../../packages/components/table-v2/src/common.ts
  44635. const classType = String;
  44636. const columns = {
  44637. type: definePropType(Array),
  44638. required: true
  44639. };
  44640. const column = { type: definePropType(Object) };
  44641. const fixedDataType = { type: definePropType(Array) };
  44642. const dataType = {
  44643. ...fixedDataType,
  44644. required: true
  44645. };
  44646. const expandColumnKey = String;
  44647. const expandKeys = {
  44648. type: definePropType(Array),
  44649. default: () => mutable([])
  44650. };
  44651. const requiredNumber = {
  44652. type: Number,
  44653. required: true
  44654. };
  44655. const rowKey = {
  44656. type: definePropType([
  44657. String,
  44658. Number,
  44659. Symbol
  44660. ]),
  44661. default: "id"
  44662. };
  44663. const styleType = { type: definePropType(Object) };
  44664. //#endregion
  44665. //#region ../../packages/components/table-v2/src/row.ts
  44666. const tableV2RowProps = buildProps({
  44667. class: String,
  44668. columns,
  44669. columnsStyles: {
  44670. type: definePropType(Object),
  44671. required: true
  44672. },
  44673. depth: Number,
  44674. expandColumnKey,
  44675. estimatedRowHeight: {
  44676. ...virtualizedGridProps.estimatedRowHeight,
  44677. default: void 0
  44678. },
  44679. isScrolling: Boolean,
  44680. onRowExpand: { type: definePropType(Function) },
  44681. onRowHover: { type: definePropType(Function) },
  44682. onRowHeightChange: { type: definePropType(Function) },
  44683. rowData: {
  44684. type: definePropType(Object),
  44685. required: true
  44686. },
  44687. rowEventHandlers: { type: definePropType(Object) },
  44688. rowIndex: {
  44689. type: Number,
  44690. required: true
  44691. },
  44692. rowKey,
  44693. style: { type: definePropType(Object) }
  44694. });
  44695. //#endregion
  44696. //#region ../../packages/components/table-v2/src/header.ts
  44697. const requiredNumberType = {
  44698. type: Number,
  44699. required: true
  44700. };
  44701. const tableV2HeaderProps = buildProps({
  44702. class: String,
  44703. columns,
  44704. fixedHeaderData: { type: definePropType(Array) },
  44705. headerData: {
  44706. type: definePropType(Array),
  44707. required: true
  44708. },
  44709. headerHeight: {
  44710. type: definePropType([Number, Array]),
  44711. default: 50
  44712. },
  44713. rowWidth: requiredNumberType,
  44714. rowHeight: {
  44715. type: Number,
  44716. default: 50
  44717. },
  44718. height: requiredNumberType,
  44719. width: requiredNumberType
  44720. });
  44721. //#endregion
  44722. //#region ../../packages/components/table-v2/src/grid.ts
  44723. const tableV2GridProps = buildProps({
  44724. columns,
  44725. data: dataType,
  44726. fixedData: fixedDataType,
  44727. estimatedRowHeight: tableV2RowProps.estimatedRowHeight,
  44728. width: requiredNumber,
  44729. height: requiredNumber,
  44730. headerWidth: requiredNumber,
  44731. headerHeight: tableV2HeaderProps.headerHeight,
  44732. bodyWidth: requiredNumber,
  44733. rowHeight: requiredNumber,
  44734. cache: virtualizedListProps.cache,
  44735. useIsScrolling: Boolean,
  44736. scrollbarAlwaysOn: virtualizedGridProps.scrollbarAlwaysOn,
  44737. scrollbarStartGap: virtualizedGridProps.scrollbarStartGap,
  44738. scrollbarEndGap: virtualizedGridProps.scrollbarEndGap,
  44739. class: classType,
  44740. style: styleType,
  44741. containerStyle: styleType,
  44742. getRowHeight: {
  44743. type: definePropType(Function),
  44744. required: true
  44745. },
  44746. rowKey: tableV2RowProps.rowKey,
  44747. onRowsRendered: { type: definePropType(Function) },
  44748. onScroll: { type: definePropType(Function) }
  44749. });
  44750. //#endregion
  44751. //#region ../../packages/components/table-v2/src/table.ts
  44752. const tableV2Props = buildProps({
  44753. cache: tableV2GridProps.cache,
  44754. estimatedRowHeight: tableV2RowProps.estimatedRowHeight,
  44755. rowKey,
  44756. headerClass: { type: definePropType([String, Function]) },
  44757. headerProps: { type: definePropType([Object, Function]) },
  44758. headerCellProps: { type: definePropType([Object, Function]) },
  44759. headerHeight: tableV2HeaderProps.headerHeight,
  44760. footerHeight: {
  44761. type: Number,
  44762. default: 0
  44763. },
  44764. rowClass: { type: definePropType([String, Function]) },
  44765. rowProps: { type: definePropType([Object, Function]) },
  44766. rowHeight: {
  44767. type: Number,
  44768. default: 50
  44769. },
  44770. cellProps: { type: definePropType([Object, Function]) },
  44771. columns,
  44772. data: dataType,
  44773. dataGetter: { type: definePropType(Function) },
  44774. fixedData: fixedDataType,
  44775. expandColumnKey: tableV2RowProps.expandColumnKey,
  44776. expandedRowKeys: expandKeys,
  44777. defaultExpandedRowKeys: expandKeys,
  44778. class: classType,
  44779. fixed: Boolean,
  44780. style: { type: definePropType(Object) },
  44781. width: requiredNumber,
  44782. height: requiredNumber,
  44783. maxHeight: Number,
  44784. useIsScrolling: Boolean,
  44785. indentSize: {
  44786. type: Number,
  44787. default: 12
  44788. },
  44789. iconSize: {
  44790. type: Number,
  44791. default: 12
  44792. },
  44793. hScrollbarSize: virtualizedGridProps.hScrollbarSize,
  44794. vScrollbarSize: virtualizedGridProps.vScrollbarSize,
  44795. scrollbarAlwaysOn: virtualizedScrollbarProps.alwaysOn,
  44796. sortBy: {
  44797. type: definePropType(Object),
  44798. default: () => ({})
  44799. },
  44800. sortState: {
  44801. type: definePropType(Object),
  44802. default: void 0
  44803. },
  44804. onColumnSort: { type: definePropType(Function) },
  44805. onExpandedRowsChange: { type: definePropType(Function) },
  44806. onEndReached: { type: definePropType(Function) },
  44807. onRowExpand: tableV2RowProps.onRowExpand,
  44808. onScroll: tableV2GridProps.onScroll,
  44809. onRowsRendered: tableV2GridProps.onRowsRendered,
  44810. rowEventHandlers: tableV2RowProps.rowEventHandlers
  44811. });
  44812. //#endregion
  44813. //#region ../../packages/components/table-v2/src/components/cell.tsx
  44814. const TableV2Cell = (props, { slots }) => {
  44815. const { cellData, style } = props;
  44816. const displayText = cellData?.toString?.() || "";
  44817. const defaultSlot = (0, vue.renderSlot)(slots, "default", props, () => [displayText]);
  44818. return (0, vue.createVNode)("div", {
  44819. "class": props.class,
  44820. "title": displayText,
  44821. "style": style
  44822. }, [defaultSlot]);
  44823. };
  44824. TableV2Cell.displayName = "ElTableV2Cell";
  44825. TableV2Cell.inheritAttrs = false;
  44826. //#endregion
  44827. //#region ../../packages/components/table-v2/src/components/header-cell.tsx
  44828. const HeaderCell = (props, { slots }) => (0, vue.renderSlot)(slots, "default", props, () => [(0, vue.createVNode)("div", {
  44829. "class": props.class,
  44830. "title": props.column?.title
  44831. }, [props.column?.title])]);
  44832. HeaderCell.displayName = "ElTableV2HeaderCell";
  44833. HeaderCell.inheritAttrs = false;
  44834. //#endregion
  44835. //#region ../../packages/components/table-v2/src/header-row.ts
  44836. const tableV2HeaderRowProps = buildProps({
  44837. class: String,
  44838. columns,
  44839. columnsStyles: {
  44840. type: definePropType(Object),
  44841. required: true
  44842. },
  44843. headerIndex: Number,
  44844. style: { type: definePropType(Object) }
  44845. });
  44846. //#endregion
  44847. //#region ../../packages/components/table-v2/src/components/header-row.tsx
  44848. const TableV2HeaderRow = /* @__PURE__ */ (0, vue.defineComponent)({
  44849. name: "ElTableV2HeaderRow",
  44850. props: tableV2HeaderRowProps,
  44851. setup(props, { slots }) {
  44852. return () => {
  44853. const { columns, columnsStyles, headerIndex, style } = props;
  44854. let Cells = columns.map((column, columnIndex) => {
  44855. return slots.cell({
  44856. columns,
  44857. column,
  44858. columnIndex,
  44859. headerIndex,
  44860. style: columnsStyles[column.key]
  44861. });
  44862. });
  44863. if (slots.header) Cells = slots.header({
  44864. cells: Cells.map((node) => {
  44865. if (isArray$1(node) && node.length === 1) return node[0];
  44866. return node;
  44867. }),
  44868. columns,
  44869. headerIndex
  44870. });
  44871. return (0, vue.createVNode)("div", {
  44872. "class": props.class,
  44873. "style": style,
  44874. "role": "row"
  44875. }, [Cells]);
  44876. };
  44877. }
  44878. });
  44879. //#endregion
  44880. //#region ../../packages/components/table-v2/src/components/header.tsx
  44881. const TableV2Header = /* @__PURE__ */ (0, vue.defineComponent)({
  44882. name: "ElTableV2Header",
  44883. props: tableV2HeaderProps,
  44884. setup(props, { slots, expose }) {
  44885. const ns = useNamespace("table-v2");
  44886. const scrollLeftInfo = (0, vue.inject)(TABLE_V2_GRID_INJECTION_KEY);
  44887. const headerRef = (0, vue.ref)();
  44888. const headerStyle = (0, vue.computed)(() => enforceUnit({
  44889. width: props.width,
  44890. height: props.height
  44891. }));
  44892. const rowStyle = (0, vue.computed)(() => enforceUnit({
  44893. width: props.rowWidth,
  44894. height: props.height
  44895. }));
  44896. const headerHeights = (0, vue.computed)(() => castArray$1((0, vue.unref)(props.headerHeight)));
  44897. const scrollToLeft = (left) => {
  44898. const headerEl = (0, vue.unref)(headerRef);
  44899. (0, vue.nextTick)(() => {
  44900. headerEl?.scroll && headerEl.scroll({ left });
  44901. });
  44902. };
  44903. const renderFixedRows = () => {
  44904. const fixedRowClassName = ns.e("fixed-header-row");
  44905. const { columns, fixedHeaderData, rowHeight } = props;
  44906. return fixedHeaderData?.map((fixedRowData, fixedRowIndex) => {
  44907. const style = enforceUnit({
  44908. height: rowHeight,
  44909. width: "100%"
  44910. });
  44911. return slots.fixed?.({
  44912. class: fixedRowClassName,
  44913. columns,
  44914. rowData: fixedRowData,
  44915. rowIndex: -(fixedRowIndex + 1),
  44916. style
  44917. });
  44918. });
  44919. };
  44920. const renderDynamicRows = () => {
  44921. const dynamicRowClassName = ns.e("dynamic-header-row");
  44922. const { columns } = props;
  44923. return (0, vue.unref)(headerHeights).map((rowHeight, rowIndex) => {
  44924. const style = enforceUnit({
  44925. width: "100%",
  44926. height: rowHeight
  44927. });
  44928. return slots.dynamic?.({
  44929. class: dynamicRowClassName,
  44930. columns,
  44931. headerIndex: rowIndex,
  44932. style
  44933. });
  44934. });
  44935. };
  44936. (0, vue.onUpdated)(() => {
  44937. if (scrollLeftInfo?.value) scrollToLeft(scrollLeftInfo.value);
  44938. });
  44939. expose({ scrollToLeft });
  44940. return () => {
  44941. if (props.height <= 0) return;
  44942. return (0, vue.createVNode)("div", {
  44943. "ref": headerRef,
  44944. "class": props.class,
  44945. "style": (0, vue.unref)(headerStyle),
  44946. "role": "rowgroup"
  44947. }, [(0, vue.createVNode)("div", {
  44948. "style": (0, vue.unref)(rowStyle),
  44949. "class": ns.e("header")
  44950. }, [renderDynamicRows(), renderFixedRows()])]);
  44951. };
  44952. }
  44953. });
  44954. //#endregion
  44955. //#region ../../packages/components/table-v2/src/components/row.tsx
  44956. const useTableRow = (props) => {
  44957. const { isScrolling } = (0, vue.inject)(TableV2InjectionKey);
  44958. const measured = (0, vue.ref)(false);
  44959. const rowRef = (0, vue.ref)();
  44960. const measurable = (0, vue.computed)(() => {
  44961. return isNumber(props.estimatedRowHeight) && props.rowIndex >= 0;
  44962. });
  44963. const doMeasure = (isInit = false) => {
  44964. const $rowRef = (0, vue.unref)(rowRef);
  44965. if (!$rowRef) return;
  44966. const { columns, onRowHeightChange, rowKey, rowIndex, style } = props;
  44967. const { height } = $rowRef.getBoundingClientRect();
  44968. measured.value = true;
  44969. (0, vue.nextTick)(() => {
  44970. if (isInit || height !== Number.parseInt(style.height)) {
  44971. const firstColumn = columns[0];
  44972. const isPlaceholder = firstColumn?.placeholderSign === placeholderSign;
  44973. onRowHeightChange?.({
  44974. rowKey,
  44975. height,
  44976. rowIndex
  44977. }, firstColumn && !isPlaceholder && firstColumn.fixed);
  44978. }
  44979. });
  44980. };
  44981. const eventHandlers = (0, vue.computed)(() => {
  44982. const { rowData, rowIndex, rowKey, onRowHover } = props;
  44983. const handlers = props.rowEventHandlers || {};
  44984. const eventHandlers = {};
  44985. Object.entries(handlers).forEach(([eventName, handler]) => {
  44986. if (isFunction$1(handler)) eventHandlers[eventName] = (event) => {
  44987. handler({
  44988. event,
  44989. rowData,
  44990. rowIndex,
  44991. rowKey
  44992. });
  44993. };
  44994. });
  44995. if (onRowHover) [{
  44996. name: "onMouseleave",
  44997. hovered: false
  44998. }, {
  44999. name: "onMouseenter",
  45000. hovered: true
  45001. }].forEach(({ name, hovered }) => {
  45002. const existedHandler = eventHandlers[name];
  45003. eventHandlers[name] = (event) => {
  45004. onRowHover({
  45005. event,
  45006. hovered,
  45007. rowData,
  45008. rowIndex,
  45009. rowKey
  45010. });
  45011. existedHandler?.(event);
  45012. };
  45013. });
  45014. return eventHandlers;
  45015. });
  45016. const onExpand = (expanded) => {
  45017. const { onRowExpand, rowData, rowIndex, rowKey } = props;
  45018. onRowExpand?.({
  45019. expanded,
  45020. rowData,
  45021. rowIndex,
  45022. rowKey
  45023. });
  45024. };
  45025. (0, vue.onMounted)(() => {
  45026. if ((0, vue.unref)(measurable)) doMeasure(true);
  45027. });
  45028. return {
  45029. isScrolling,
  45030. measurable,
  45031. measured,
  45032. rowRef,
  45033. eventHandlers,
  45034. onExpand
  45035. };
  45036. };
  45037. const TableV2Row = /* @__PURE__ */ (0, vue.defineComponent)({
  45038. name: "ElTableV2TableRow",
  45039. props: tableV2RowProps,
  45040. setup(props, { expose, slots, attrs }) {
  45041. const { eventHandlers, isScrolling, measurable, measured, rowRef, onExpand } = useTableRow(props);
  45042. expose({ onExpand });
  45043. return () => {
  45044. const { columns, columnsStyles, expandColumnKey, depth, rowData, rowIndex, style } = props;
  45045. let ColumnCells = columns.map((column, columnIndex) => {
  45046. const expandable = isArray$1(rowData.children) && rowData.children.length > 0 && column.key === expandColumnKey;
  45047. return slots.cell({
  45048. column,
  45049. columns,
  45050. columnIndex,
  45051. depth,
  45052. style: columnsStyles[column.key],
  45053. rowData,
  45054. rowIndex,
  45055. isScrolling: (0, vue.unref)(isScrolling),
  45056. expandIconProps: expandable ? {
  45057. rowData,
  45058. rowIndex,
  45059. onExpand
  45060. } : void 0
  45061. });
  45062. });
  45063. if (slots.row) ColumnCells = slots.row({
  45064. cells: ColumnCells.map((node) => {
  45065. if (isArray$1(node) && node.length === 1) return node[0];
  45066. return node;
  45067. }),
  45068. style,
  45069. columns,
  45070. depth,
  45071. rowData,
  45072. rowIndex,
  45073. isScrolling: (0, vue.unref)(isScrolling)
  45074. });
  45075. if ((0, vue.unref)(measurable)) {
  45076. const { height, ...exceptHeightStyle } = style || {};
  45077. const _measured = (0, vue.unref)(measured);
  45078. return (0, vue.createVNode)("div", (0, vue.mergeProps)({
  45079. "ref": rowRef,
  45080. "class": props.class,
  45081. "style": _measured ? style : exceptHeightStyle,
  45082. "role": "row"
  45083. }, attrs, (0, vue.unref)(eventHandlers)), [ColumnCells]);
  45084. }
  45085. return (0, vue.createVNode)("div", (0, vue.mergeProps)(attrs, {
  45086. "ref": rowRef,
  45087. "class": props.class,
  45088. "style": style,
  45089. "role": "row"
  45090. }, (0, vue.unref)(eventHandlers)), [ColumnCells]);
  45091. };
  45092. }
  45093. });
  45094. //#endregion
  45095. //#region ../../packages/components/table-v2/src/components/sort-icon.tsx
  45096. const SortIcon = (props) => {
  45097. const { sortOrder } = props;
  45098. return (0, vue.createVNode)("button", {
  45099. "type": "button",
  45100. "aria-label": props.ariaLabel,
  45101. "class": props.class
  45102. }, [(0, vue.createVNode)(ElIcon, { "size": 14 }, { default: () => [sortOrder === "asc" ? (0, vue.createVNode)(sort_up_default, null, null) : (0, vue.createVNode)(sort_down_default, null, null)] })]);
  45103. };
  45104. //#endregion
  45105. //#region ../../packages/components/table-v2/src/components/expand-icon.tsx
  45106. const ExpandIcon = (props) => {
  45107. const { expanded, expandable, onExpand, style, size, ariaLabel } = props;
  45108. return (0, vue.createVNode)("button", (0, vue.mergeProps)({
  45109. onClick: expandable ? () => onExpand(!expanded) : void 0,
  45110. ariaLabel,
  45111. ariaExpanded: expanded,
  45112. class: props.class
  45113. }, { "type": "button" }), [(0, vue.createVNode)(ElIcon, {
  45114. "size": size,
  45115. "style": style
  45116. }, { default: () => [(0, vue.createVNode)(arrow_right_default, null, null)] })]);
  45117. };
  45118. ExpandIcon.inheritAttrs = false;
  45119. //#endregion
  45120. //#region ../../packages/components/table-v2/src/table-grid.tsx
  45121. const COMPONENT_NAME$5 = "ElTableV2Grid";
  45122. const useTableGrid = (props) => {
  45123. const headerRef = (0, vue.ref)();
  45124. const bodyRef = (0, vue.ref)();
  45125. const scrollLeft = (0, vue.ref)(0);
  45126. const totalHeight = (0, vue.computed)(() => {
  45127. const { data, rowHeight, estimatedRowHeight } = props;
  45128. if (estimatedRowHeight) return;
  45129. return data.length * rowHeight;
  45130. });
  45131. const fixedRowHeight = (0, vue.computed)(() => {
  45132. const { fixedData, rowHeight } = props;
  45133. return (fixedData?.length || 0) * rowHeight;
  45134. });
  45135. const headerHeight = (0, vue.computed)(() => sum(props.headerHeight));
  45136. const gridHeight = (0, vue.computed)(() => {
  45137. const { height } = props;
  45138. return Math.max(0, height - (0, vue.unref)(headerHeight) - (0, vue.unref)(fixedRowHeight));
  45139. });
  45140. const hasHeader = (0, vue.computed)(() => {
  45141. return (0, vue.unref)(headerHeight) + (0, vue.unref)(fixedRowHeight) > 0;
  45142. });
  45143. const itemKey = ({ data, rowIndex }) => data[rowIndex][props.rowKey];
  45144. function onItemRendered({ rowCacheStart, rowCacheEnd, rowVisibleStart, rowVisibleEnd }) {
  45145. props.onRowsRendered?.({
  45146. rowCacheStart,
  45147. rowCacheEnd,
  45148. rowVisibleStart,
  45149. rowVisibleEnd
  45150. });
  45151. }
  45152. function resetAfterRowIndex(index, forceUpdate) {
  45153. bodyRef.value?.resetAfterRowIndex(index, forceUpdate);
  45154. }
  45155. function scrollTo(leftOrOptions, top) {
  45156. const header$ = (0, vue.unref)(headerRef);
  45157. const body$ = (0, vue.unref)(bodyRef);
  45158. if (isObject$1(leftOrOptions)) {
  45159. header$?.scrollToLeft(leftOrOptions.scrollLeft);
  45160. scrollLeft.value = leftOrOptions.scrollLeft;
  45161. body$?.scrollTo(leftOrOptions);
  45162. } else {
  45163. header$?.scrollToLeft(leftOrOptions);
  45164. scrollLeft.value = leftOrOptions;
  45165. body$?.scrollTo({
  45166. scrollLeft: leftOrOptions,
  45167. scrollTop: top
  45168. });
  45169. }
  45170. }
  45171. function scrollToTop(scrollTop) {
  45172. (0, vue.unref)(bodyRef)?.scrollTo({ scrollTop });
  45173. }
  45174. function scrollToRow(row, strategy) {
  45175. const body = (0, vue.unref)(bodyRef);
  45176. if (!body) return;
  45177. const prevScrollLeft = scrollLeft.value;
  45178. body.scrollToItem(row, 0, strategy);
  45179. if (prevScrollLeft) scrollTo({ scrollLeft: prevScrollLeft });
  45180. }
  45181. function forceUpdate() {
  45182. (0, vue.unref)(bodyRef)?.$forceUpdate();
  45183. (0, vue.unref)(headerRef)?.$forceUpdate();
  45184. }
  45185. (0, vue.watch)(() => props.bodyWidth, () => {
  45186. if (isNumber(props.estimatedRowHeight)) bodyRef.value?.resetAfter({ columnIndex: 0 }, false);
  45187. });
  45188. return {
  45189. bodyRef,
  45190. forceUpdate,
  45191. fixedRowHeight,
  45192. gridHeight,
  45193. hasHeader,
  45194. headerHeight,
  45195. headerRef,
  45196. totalHeight,
  45197. itemKey,
  45198. onItemRendered,
  45199. resetAfterRowIndex,
  45200. scrollTo,
  45201. scrollToTop,
  45202. scrollToRow,
  45203. scrollLeft
  45204. };
  45205. };
  45206. const TableGrid = /* @__PURE__ */ (0, vue.defineComponent)({
  45207. name: COMPONENT_NAME$5,
  45208. props: tableV2GridProps,
  45209. setup(props, { slots, expose }) {
  45210. const { ns } = (0, vue.inject)(TableV2InjectionKey);
  45211. const { bodyRef, fixedRowHeight, gridHeight, hasHeader, headerRef, headerHeight, totalHeight, forceUpdate, itemKey, onItemRendered, resetAfterRowIndex, scrollTo, scrollToTop, scrollToRow, scrollLeft } = useTableGrid(props);
  45212. (0, vue.provide)(TABLE_V2_GRID_INJECTION_KEY, scrollLeft);
  45213. (0, vue.onActivated)(async () => {
  45214. await (0, vue.nextTick)();
  45215. const scrollTop = bodyRef.value?.states.scrollTop;
  45216. scrollTop && scrollToTop(Math.round(scrollTop) + 1);
  45217. });
  45218. expose({
  45219. forceUpdate,
  45220. totalHeight,
  45221. scrollTo,
  45222. scrollToTop,
  45223. scrollToRow,
  45224. resetAfterRowIndex
  45225. });
  45226. const getColumnWidth = () => props.bodyWidth;
  45227. return () => {
  45228. const { cache, columns, data, fixedData, useIsScrolling, scrollbarAlwaysOn, scrollbarEndGap, scrollbarStartGap, style, rowHeight, bodyWidth, estimatedRowHeight, headerWidth, height, width, getRowHeight, onScroll } = props;
  45229. const isDynamicRowEnabled = isNumber(estimatedRowHeight);
  45230. const Grid = isDynamicRowEnabled ? DynamicSizeGrid : FixedSizeGrid;
  45231. const _headerHeight = (0, vue.unref)(headerHeight);
  45232. return (0, vue.createVNode)("div", {
  45233. "role": "table",
  45234. "class": [ns.e("table"), props.class],
  45235. "style": style
  45236. }, [(0, vue.createVNode)(Grid, {
  45237. "ref": bodyRef,
  45238. "data": data,
  45239. "useIsScrolling": useIsScrolling,
  45240. "itemKey": itemKey,
  45241. "columnCache": 0,
  45242. "columnWidth": isDynamicRowEnabled ? getColumnWidth : bodyWidth,
  45243. "totalColumn": 1,
  45244. "totalRow": data.length,
  45245. "rowCache": cache,
  45246. "rowHeight": isDynamicRowEnabled ? getRowHeight : rowHeight,
  45247. "width": width,
  45248. "height": (0, vue.unref)(gridHeight),
  45249. "class": ns.e("body"),
  45250. "role": "rowgroup",
  45251. "scrollbarStartGap": scrollbarStartGap,
  45252. "scrollbarEndGap": scrollbarEndGap,
  45253. "scrollbarAlwaysOn": scrollbarAlwaysOn,
  45254. "onScroll": onScroll,
  45255. "onItemRendered": onItemRendered,
  45256. "perfMode": false
  45257. }, { default: (params) => {
  45258. const rowData = data[params.rowIndex];
  45259. return slots.row?.({
  45260. ...params,
  45261. columns,
  45262. rowData
  45263. });
  45264. } }), (0, vue.unref)(hasHeader) && (0, vue.createVNode)(TableV2Header, {
  45265. "ref": headerRef,
  45266. "class": ns.e("header-wrapper"),
  45267. "columns": columns,
  45268. "headerData": data,
  45269. "headerHeight": props.headerHeight,
  45270. "fixedHeaderData": fixedData,
  45271. "rowWidth": headerWidth,
  45272. "rowHeight": rowHeight,
  45273. "width": width,
  45274. "height": Math.min(_headerHeight + (0, vue.unref)(fixedRowHeight), height)
  45275. }, {
  45276. dynamic: slots.header,
  45277. fixed: slots.row
  45278. })]);
  45279. };
  45280. }
  45281. });
  45282. //#endregion
  45283. //#region ../../packages/components/table-v2/src/renderers/main-table.tsx
  45284. function _isSlot$5(s) {
  45285. return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
  45286. }
  45287. const MainTable = (props, { slots }) => {
  45288. const { mainTableRef, ...rest } = props;
  45289. return (0, vue.createVNode)(TableGrid, (0, vue.mergeProps)({ "ref": mainTableRef }, rest), _isSlot$5(slots) ? slots : { default: () => [slots] });
  45290. };
  45291. //#endregion
  45292. //#region ../../packages/components/table-v2/src/renderers/left-table.tsx
  45293. function _isSlot$4(s) {
  45294. return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
  45295. }
  45296. const LeftTable = (props, { slots }) => {
  45297. if (!props.columns.length) return;
  45298. const { leftTableRef, ...rest } = props;
  45299. return (0, vue.createVNode)(TableGrid, (0, vue.mergeProps)({ "ref": leftTableRef }, rest), _isSlot$4(slots) ? slots : { default: () => [slots] });
  45300. };
  45301. //#endregion
  45302. //#region ../../packages/components/table-v2/src/renderers/right-table.tsx
  45303. function _isSlot$3(s) {
  45304. return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
  45305. }
  45306. const RightTable = (props, { slots }) => {
  45307. if (!props.columns.length) return;
  45308. const { rightTableRef, ...rest } = props;
  45309. return (0, vue.createVNode)(TableGrid, (0, vue.mergeProps)({ "ref": rightTableRef }, rest), _isSlot$3(slots) ? slots : { default: () => [slots] });
  45310. };
  45311. //#endregion
  45312. //#region ../../packages/components/table-v2/src/renderers/row.tsx
  45313. function _isSlot$2(s) {
  45314. return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
  45315. }
  45316. const RowRenderer = (props, { slots }) => {
  45317. const { columns, columnsStyles, depthMap, expandColumnKey, expandedRowKeys, estimatedRowHeight, hasFixedColumns, rowData, rowIndex, style, isScrolling, rowProps, rowClass, rowKey, rowEventHandlers, ns, onRowHovered, onRowExpanded } = props;
  45318. const rowKls = tryCall(rowClass, {
  45319. columns,
  45320. rowData,
  45321. rowIndex
  45322. }, "");
  45323. const additionalProps = tryCall(rowProps, {
  45324. columns,
  45325. rowData,
  45326. rowIndex
  45327. });
  45328. const _rowKey = rowData[rowKey];
  45329. const depth = depthMap[_rowKey] || 0;
  45330. const canExpand = Boolean(expandColumnKey);
  45331. const isFixedRow = rowIndex < 0;
  45332. const kls = [
  45333. ns.e("row"),
  45334. rowKls,
  45335. ns.is("expanded", canExpand && expandedRowKeys.includes(_rowKey)),
  45336. ns.is("fixed", !depth && isFixedRow),
  45337. ns.is("customized", Boolean(slots.row)),
  45338. { [ns.e(`row-depth-${depth}`)]: canExpand && rowIndex >= 0 }
  45339. ];
  45340. const onRowHover = hasFixedColumns ? onRowHovered : void 0;
  45341. const _rowProps = {
  45342. ...additionalProps,
  45343. columns,
  45344. columnsStyles,
  45345. class: kls,
  45346. depth,
  45347. expandColumnKey,
  45348. estimatedRowHeight: isFixedRow ? void 0 : estimatedRowHeight,
  45349. isScrolling,
  45350. rowIndex,
  45351. rowData,
  45352. rowKey: _rowKey,
  45353. rowEventHandlers,
  45354. style
  45355. };
  45356. const handlerMouseEnter = (e) => {
  45357. onRowHover?.({
  45358. hovered: true,
  45359. rowKey: _rowKey,
  45360. event: e,
  45361. rowData,
  45362. rowIndex
  45363. });
  45364. };
  45365. const handlerMouseLeave = (e) => {
  45366. onRowHover?.({
  45367. hovered: false,
  45368. rowKey: _rowKey,
  45369. event: e,
  45370. rowData,
  45371. rowIndex
  45372. });
  45373. };
  45374. return (0, vue.createVNode)(TableV2Row, (0, vue.mergeProps)(_rowProps, {
  45375. "onRowExpand": onRowExpanded,
  45376. "onMouseenter": handlerMouseEnter,
  45377. "onMouseleave": handlerMouseLeave,
  45378. "rowkey": _rowKey
  45379. }), _isSlot$2(slots) ? slots : { default: () => [slots] });
  45380. };
  45381. //#endregion
  45382. //#region ../../packages/components/table-v2/src/renderers/cell.tsx
  45383. const CellRenderer = ({ columns, column, columnIndex, depth, expandIconProps, isScrolling, rowData, rowIndex, style, expandedRowKeys, ns, t, cellProps: _cellProps, expandColumnKey, indentSize, iconSize, rowKey }, { slots }) => {
  45384. const cellStyle = enforceUnit(style);
  45385. if (column.placeholderSign === placeholderSign) return (0, vue.createVNode)("div", {
  45386. "class": ns.em("row-cell", "placeholder"),
  45387. "style": cellStyle
  45388. }, null);
  45389. const { cellRenderer, dataKey, dataGetter } = column;
  45390. const cellData = isFunction$1(dataGetter) ? dataGetter({
  45391. columns,
  45392. column,
  45393. columnIndex,
  45394. rowData,
  45395. rowIndex
  45396. }) : get(rowData, dataKey ?? "");
  45397. const extraCellProps = tryCall(_cellProps, {
  45398. cellData,
  45399. columns,
  45400. column,
  45401. columnIndex,
  45402. rowIndex,
  45403. rowData
  45404. });
  45405. const cellProps = {
  45406. class: ns.e("cell-text"),
  45407. columns,
  45408. column,
  45409. columnIndex,
  45410. cellData,
  45411. isScrolling,
  45412. rowData,
  45413. rowIndex
  45414. };
  45415. const columnCellRenderer = componentToSlot(cellRenderer);
  45416. const Cell = columnCellRenderer ? columnCellRenderer(cellProps) : (0, vue.renderSlot)(slots, "default", cellProps, () => [(0, vue.createVNode)(TableV2Cell, cellProps, null)]);
  45417. const kls = [
  45418. ns.e("row-cell"),
  45419. column.class,
  45420. column.align === "center" && ns.is("align-center"),
  45421. column.align === "right" && ns.is("align-right")
  45422. ];
  45423. const expandable = rowIndex >= 0 && expandColumnKey && column.key === expandColumnKey;
  45424. const expanded = rowIndex >= 0 && expandedRowKeys.includes(rowData[rowKey]);
  45425. let IconOrPlaceholder;
  45426. const iconStyle = `margin-inline-start: ${depth * indentSize}px;`;
  45427. if (expandable) if (isObject$1(expandIconProps)) IconOrPlaceholder = (0, vue.createVNode)(ExpandIcon, (0, vue.mergeProps)(expandIconProps, {
  45428. "class": [ns.e("expand-icon"), ns.is("expanded", expanded)],
  45429. "size": iconSize,
  45430. "expanded": expanded,
  45431. "ariaLabel": t(expanded ? "el.table.collapseRowLabel" : "el.table.expandRowLabel"),
  45432. "style": iconStyle,
  45433. "expandable": true
  45434. }), null);
  45435. else IconOrPlaceholder = (0, vue.createVNode)("div", { "style": [iconStyle, `width: ${iconSize}px; height: ${iconSize}px;`].join(" ") }, null);
  45436. return (0, vue.createVNode)("div", (0, vue.mergeProps)({
  45437. "class": kls,
  45438. "style": cellStyle
  45439. }, extraCellProps, { "role": "cell" }), [IconOrPlaceholder, Cell]);
  45440. };
  45441. CellRenderer.inheritAttrs = false;
  45442. //#endregion
  45443. //#region ../../packages/components/table-v2/src/renderers/header.tsx
  45444. function _isSlot$1(s) {
  45445. return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
  45446. }
  45447. const HeaderRenderer = ({ columns, columnsStyles, headerIndex, style, headerClass, headerProps, ns }, { slots }) => {
  45448. const param = {
  45449. columns,
  45450. headerIndex
  45451. };
  45452. const kls = [
  45453. ns.e("header-row"),
  45454. tryCall(headerClass, param, ""),
  45455. ns.is("customized", Boolean(slots.header))
  45456. ];
  45457. return (0, vue.createVNode)(TableV2HeaderRow, {
  45458. ...tryCall(headerProps, param),
  45459. columnsStyles,
  45460. class: kls,
  45461. columns,
  45462. headerIndex,
  45463. style
  45464. }, _isSlot$1(slots) ? slots : { default: () => [slots] });
  45465. };
  45466. //#endregion
  45467. //#region ../../packages/components/table-v2/src/renderers/header-cell.tsx
  45468. const HeaderCellRenderer = (props, { slots }) => {
  45469. const { column, ns, t, style, onColumnSorted } = props;
  45470. const cellStyle = enforceUnit(style);
  45471. if (column.placeholderSign === placeholderSign) return (0, vue.createVNode)("div", {
  45472. "class": ns.em("header-row-cell", "placeholder"),
  45473. "style": cellStyle
  45474. }, null);
  45475. const { headerCellRenderer, headerClass, sortable } = column;
  45476. const cellProps = {
  45477. ...props,
  45478. class: ns.e("header-cell-text")
  45479. };
  45480. const columnCellRenderer = componentToSlot(headerCellRenderer);
  45481. const Cell = columnCellRenderer ? columnCellRenderer(cellProps) : (0, vue.renderSlot)(slots, "default", cellProps, () => [(0, vue.createVNode)(HeaderCell, cellProps, null)]);
  45482. const { sortBy, sortState, headerCellProps } = props;
  45483. let sorting, sortOrder, ariaSort;
  45484. if (sortState) {
  45485. const order = sortState[column.key];
  45486. sorting = Boolean(oppositeOrderMap[order]);
  45487. sortOrder = sorting ? order : "asc";
  45488. } else {
  45489. sorting = column.key === sortBy.key;
  45490. sortOrder = sorting ? sortBy.order : "asc";
  45491. }
  45492. if (sortOrder === "asc") ariaSort = "ascending";
  45493. else if (sortOrder === "desc") ariaSort = "descending";
  45494. else ariaSort = void 0;
  45495. const cellKls = [
  45496. ns.e("header-cell"),
  45497. tryCall(headerClass, props, ""),
  45498. column.align === "center" && ns.is("align-center"),
  45499. column.align === "right" && ns.is("align-right"),
  45500. sortable && ns.is("sortable")
  45501. ];
  45502. return (0, vue.createVNode)("div", (0, vue.mergeProps)({
  45503. ...tryCall(headerCellProps, props),
  45504. onClick: column.sortable ? onColumnSorted : void 0,
  45505. ariaSort: sortable ? ariaSort : void 0,
  45506. class: cellKls,
  45507. style: cellStyle,
  45508. ["data-key"]: column.key
  45509. }, { "role": "columnheader" }), [Cell, sortable && (0, vue.createVNode)(SortIcon, {
  45510. "class": [ns.e("sort-icon"), sorting && ns.is("sorting")],
  45511. "sortOrder": sortOrder,
  45512. "ariaLabel": t("el.table.sortLabel", { column: column.title || "" })
  45513. }, null)]);
  45514. };
  45515. //#endregion
  45516. //#region ../../packages/components/table-v2/src/renderers/footer.tsx
  45517. const Footer$1 = (props, { slots }) => {
  45518. return (0, vue.createVNode)("div", {
  45519. "class": props.class,
  45520. "style": props.style
  45521. }, [slots.default?.()]);
  45522. };
  45523. Footer$1.displayName = "ElTableV2Footer";
  45524. //#endregion
  45525. //#region ../../packages/components/table-v2/src/renderers/empty.tsx
  45526. const Footer = (props, { slots }) => {
  45527. const defaultSlot = (0, vue.renderSlot)(slots, "default", {}, () => [(0, vue.createVNode)(ElEmpty, null, null)]);
  45528. return (0, vue.createVNode)("div", {
  45529. "class": props.class,
  45530. "style": props.style
  45531. }, [defaultSlot]);
  45532. };
  45533. Footer.displayName = "ElTableV2Empty";
  45534. //#endregion
  45535. //#region ../../packages/components/table-v2/src/renderers/overlay.tsx
  45536. const Overlay = (props, { slots }) => {
  45537. return (0, vue.createVNode)("div", {
  45538. "class": props.class,
  45539. "style": props.style
  45540. }, [slots.default?.()]);
  45541. };
  45542. Overlay.displayName = "ElTableV2Overlay";
  45543. //#endregion
  45544. //#region ../../packages/components/table-v2/src/table-v2.tsx
  45545. function _isSlot(s) {
  45546. return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !(0, vue.isVNode)(s);
  45547. }
  45548. const TableV2 = /* @__PURE__ */ (0, vue.defineComponent)({
  45549. name: "ElTableV2",
  45550. props: tableV2Props,
  45551. slots: Object,
  45552. setup(props, { slots, expose }) {
  45553. const ns = useNamespace("table-v2");
  45554. const { t } = useLocale();
  45555. const { columnsStyles, fixedColumnsOnLeft, fixedColumnsOnRight, mainColumns, mainTableHeight, fixedTableHeight, leftTableWidth, rightTableWidth, data, depthMap, expandedRowKeys, hasFixedColumns, mainTableRef, leftTableRef, rightTableRef, isDynamic, isResetting, isScrolling, bodyWidth, emptyStyle, rootStyle, footerHeight, showEmpty, scrollTo, scrollToLeft, scrollToTop, scrollToRow, getRowHeight, onColumnSorted, onRowHeightChange, onRowHovered, onRowExpanded, onRowsRendered, onScroll, onVerticalScroll } = useTable(props);
  45556. expose({
  45557. scrollTo,
  45558. scrollToLeft,
  45559. scrollToTop,
  45560. scrollToRow
  45561. });
  45562. (0, vue.provide)(TableV2InjectionKey, {
  45563. ns,
  45564. isResetting,
  45565. isScrolling
  45566. });
  45567. return () => {
  45568. const { cache, cellProps, estimatedRowHeight, expandColumnKey, fixedData, headerHeight, headerClass, headerProps, headerCellProps, sortBy, sortState, rowHeight, rowClass, rowEventHandlers, rowKey, rowProps, scrollbarAlwaysOn, indentSize, iconSize, useIsScrolling, vScrollbarSize, width } = props;
  45569. const _data = (0, vue.unref)(data);
  45570. const mainTableProps = {
  45571. cache,
  45572. class: ns.e("main"),
  45573. columns: (0, vue.unref)(mainColumns),
  45574. data: _data,
  45575. fixedData,
  45576. estimatedRowHeight,
  45577. bodyWidth: (0, vue.unref)(bodyWidth),
  45578. headerHeight,
  45579. headerWidth: (0, vue.unref)(bodyWidth),
  45580. height: (0, vue.unref)(mainTableHeight),
  45581. mainTableRef,
  45582. rowKey,
  45583. rowHeight,
  45584. scrollbarAlwaysOn,
  45585. scrollbarStartGap: 2,
  45586. scrollbarEndGap: vScrollbarSize,
  45587. useIsScrolling,
  45588. width,
  45589. getRowHeight,
  45590. onRowsRendered,
  45591. onScroll
  45592. };
  45593. const leftColumnsWidth = (0, vue.unref)(leftTableWidth);
  45594. const _fixedTableHeight = (0, vue.unref)(fixedTableHeight);
  45595. const leftTableProps = {
  45596. cache,
  45597. class: ns.e("left"),
  45598. columns: (0, vue.unref)(fixedColumnsOnLeft),
  45599. data: _data,
  45600. fixedData,
  45601. estimatedRowHeight,
  45602. leftTableRef,
  45603. rowHeight,
  45604. bodyWidth: leftColumnsWidth,
  45605. headerWidth: leftColumnsWidth,
  45606. headerHeight,
  45607. height: _fixedTableHeight,
  45608. rowKey,
  45609. scrollbarAlwaysOn,
  45610. scrollbarStartGap: 2,
  45611. scrollbarEndGap: vScrollbarSize,
  45612. useIsScrolling,
  45613. width: leftColumnsWidth,
  45614. getRowHeight,
  45615. onScroll: onVerticalScroll
  45616. };
  45617. const rightColumnsWidth = (0, vue.unref)(rightTableWidth);
  45618. const rightTableProps = {
  45619. cache,
  45620. class: ns.e("right"),
  45621. columns: (0, vue.unref)(fixedColumnsOnRight),
  45622. data: _data,
  45623. fixedData,
  45624. estimatedRowHeight,
  45625. rightTableRef,
  45626. rowHeight,
  45627. bodyWidth: rightColumnsWidth,
  45628. headerWidth: rightColumnsWidth,
  45629. headerHeight,
  45630. height: _fixedTableHeight,
  45631. rowKey,
  45632. scrollbarAlwaysOn,
  45633. scrollbarStartGap: 2,
  45634. scrollbarEndGap: vScrollbarSize,
  45635. width: rightColumnsWidth,
  45636. style: `${ns.cssVarName("table-scrollbar-size")}: ${vScrollbarSize}px`,
  45637. useIsScrolling,
  45638. getRowHeight,
  45639. onScroll: onVerticalScroll
  45640. };
  45641. const _columnsStyles = (0, vue.unref)(columnsStyles);
  45642. const tableRowProps = {
  45643. ns,
  45644. depthMap: (0, vue.unref)(depthMap),
  45645. columnsStyles: _columnsStyles,
  45646. expandColumnKey,
  45647. expandedRowKeys: (0, vue.unref)(expandedRowKeys),
  45648. estimatedRowHeight,
  45649. hasFixedColumns: (0, vue.unref)(hasFixedColumns),
  45650. rowProps,
  45651. rowClass,
  45652. rowKey,
  45653. rowEventHandlers,
  45654. onRowHovered,
  45655. onRowExpanded,
  45656. onRowHeightChange
  45657. };
  45658. const tableCellProps = {
  45659. cellProps,
  45660. expandColumnKey,
  45661. indentSize,
  45662. iconSize,
  45663. rowKey,
  45664. expandedRowKeys: (0, vue.unref)(expandedRowKeys),
  45665. ns,
  45666. t
  45667. };
  45668. const tableHeaderProps = {
  45669. ns,
  45670. headerClass,
  45671. headerProps,
  45672. columnsStyles: _columnsStyles
  45673. };
  45674. const tableHeaderCellProps = {
  45675. ns,
  45676. t,
  45677. sortBy,
  45678. sortState,
  45679. headerCellProps,
  45680. onColumnSorted
  45681. };
  45682. const tableSlots = {
  45683. row: (props) => (0, vue.createVNode)(RowRenderer, (0, vue.mergeProps)(props, tableRowProps), {
  45684. row: slots.row,
  45685. cell: (props) => {
  45686. let _slot;
  45687. return slots.cell ? (0, vue.createVNode)(CellRenderer, (0, vue.mergeProps)(props, tableCellProps, { "style": _columnsStyles[props.column.key] }), _isSlot(_slot = slots.cell(props)) ? _slot : { default: () => [_slot] }) : (0, vue.createVNode)(CellRenderer, (0, vue.mergeProps)(props, tableCellProps, { "style": _columnsStyles[props.column.key] }), null);
  45688. }
  45689. }),
  45690. header: (props) => (0, vue.createVNode)(HeaderRenderer, (0, vue.mergeProps)(props, tableHeaderProps), {
  45691. header: slots.header,
  45692. cell: (props) => {
  45693. let _slot2;
  45694. return slots["header-cell"] ? (0, vue.createVNode)(HeaderCellRenderer, (0, vue.mergeProps)(props, tableHeaderCellProps, { "style": _columnsStyles[props.column.key] }), _isSlot(_slot2 = slots["header-cell"](props)) ? _slot2 : { default: () => [_slot2] }) : (0, vue.createVNode)(HeaderCellRenderer, (0, vue.mergeProps)(props, tableHeaderCellProps, { "style": _columnsStyles[props.column.key] }), null);
  45695. }
  45696. })
  45697. };
  45698. const rootKls = [
  45699. props.class,
  45700. ns.b(),
  45701. ns.e("root"),
  45702. ns.is("dynamic", (0, vue.unref)(isDynamic))
  45703. ];
  45704. const footerProps = {
  45705. class: ns.e("footer"),
  45706. style: (0, vue.unref)(footerHeight)
  45707. };
  45708. return (0, vue.createVNode)("div", {
  45709. "class": rootKls,
  45710. "style": (0, vue.unref)(rootStyle)
  45711. }, [
  45712. (0, vue.createVNode)(MainTable, mainTableProps, _isSlot(tableSlots) ? tableSlots : { default: () => [tableSlots] }),
  45713. (0, vue.createVNode)(LeftTable, leftTableProps, _isSlot(tableSlots) ? tableSlots : { default: () => [tableSlots] }),
  45714. (0, vue.createVNode)(RightTable, rightTableProps, _isSlot(tableSlots) ? tableSlots : { default: () => [tableSlots] }),
  45715. slots.footer && (0, vue.createVNode)(Footer$1, footerProps, { default: slots.footer }),
  45716. (0, vue.unref)(showEmpty) && (0, vue.createVNode)(Footer, {
  45717. "class": ns.e("empty"),
  45718. "style": (0, vue.unref)(emptyStyle)
  45719. }, { default: slots.empty }),
  45720. slots.overlay && (0, vue.createVNode)(Overlay, { "class": ns.e("overlay") }, { default: slots.overlay })
  45721. ]);
  45722. };
  45723. }
  45724. });
  45725. //#endregion
  45726. //#region ../../packages/components/table-v2/src/auto-resizer.ts
  45727. const autoResizerProps = buildProps({
  45728. disableWidth: Boolean,
  45729. disableHeight: Boolean,
  45730. onResize: { type: definePropType(Function) }
  45731. });
  45732. //#endregion
  45733. //#region ../../packages/components/table-v2/src/components/auto-resizer.tsx
  45734. const AutoResizer = /* @__PURE__ */ (0, vue.defineComponent)({
  45735. name: "ElAutoResizer",
  45736. props: autoResizerProps,
  45737. setup(props, { slots }) {
  45738. const ns = useNamespace("auto-resizer");
  45739. const { height, width, sizer } = useAutoResize(props);
  45740. const style = {
  45741. width: "100%",
  45742. height: "100%"
  45743. };
  45744. return () => {
  45745. return (0, vue.createVNode)("div", {
  45746. "ref": sizer,
  45747. "class": ns.b(),
  45748. "style": style
  45749. }, [slots.default?.({
  45750. height: height.value,
  45751. width: width.value
  45752. })]);
  45753. };
  45754. }
  45755. });
  45756. //#endregion
  45757. //#region ../../packages/components/table-v2/index.ts
  45758. const ElTableV2 = withInstall(TableV2);
  45759. const ElAutoResizer = withInstall(AutoResizer);
  45760. //#endregion
  45761. //#region ../../packages/components/tabs/src/constants.ts
  45762. const tabsRootContextKey = Symbol("tabsRootContextKey");
  45763. //#endregion
  45764. //#region ../../packages/components/tabs/src/tab-bar.ts
  45765. const tabBarProps = buildProps({
  45766. tabs: {
  45767. type: definePropType(Array),
  45768. default: () => mutable([])
  45769. },
  45770. tabRefs: {
  45771. type: definePropType(Object),
  45772. default: () => mutable({})
  45773. }
  45774. });
  45775. //#endregion
  45776. //#region ../../packages/components/tabs/src/tab-bar.vue?vue&type=script&setup=true&lang.ts
  45777. const COMPONENT_NAME$4 = "ElTabBar";
  45778. var tab_bar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  45779. name: COMPONENT_NAME$4,
  45780. __name: "tab-bar",
  45781. props: tabBarProps,
  45782. setup(__props, { expose: __expose }) {
  45783. const props = __props;
  45784. const rootTabs = (0, vue.inject)(tabsRootContextKey);
  45785. if (!rootTabs) throwError(COMPONENT_NAME$4, "<el-tabs><el-tab-bar /></el-tabs>");
  45786. const ns = useNamespace("tabs");
  45787. const barRef = (0, vue.ref)();
  45788. const barStyle = (0, vue.ref)();
  45789. const renderActiveBar = (0, vue.computed)(() => isUndefined(rootTabs.props.defaultValue) || Boolean(barStyle.value?.transform));
  45790. const getBarStyle = () => {
  45791. let offset = 0;
  45792. let tabSize = 0;
  45793. const sizeName = ["top", "bottom"].includes(rootTabs.props.tabPosition) ? "width" : "height";
  45794. const sizeDir = sizeName === "width" ? "x" : "y";
  45795. const position = sizeDir === "x" ? "left" : "top";
  45796. props.tabs.every((tab) => {
  45797. if (isUndefined(tab.paneName)) return false;
  45798. const $el = props.tabRefs[tab.paneName];
  45799. if (!$el) return false;
  45800. if (!tab.active) return true;
  45801. offset = $el[`offset${capitalize(position)}`];
  45802. tabSize = $el[`client${capitalize(sizeName)}`];
  45803. const tabStyles = window.getComputedStyle($el);
  45804. if (sizeName === "width") {
  45805. tabSize -= Number.parseFloat(tabStyles.paddingLeft) + Number.parseFloat(tabStyles.paddingRight);
  45806. offset += Number.parseFloat(tabStyles.paddingLeft);
  45807. }
  45808. return false;
  45809. });
  45810. return {
  45811. [sizeName]: `${tabSize}px`,
  45812. transform: `translate${capitalize(sizeDir)}(${offset}px)`
  45813. };
  45814. };
  45815. const update = () => barStyle.value = getBarStyle();
  45816. const tabObservers = [];
  45817. const observerTabs = () => {
  45818. tabObservers.forEach((observer) => observer.stop());
  45819. tabObservers.length = 0;
  45820. Object.values(props.tabRefs).forEach((tab) => {
  45821. tabObservers.push(useResizeObserver(tab, update));
  45822. });
  45823. };
  45824. (0, vue.watch)(() => props.tabs, async () => {
  45825. await (0, vue.nextTick)();
  45826. update();
  45827. observerTabs();
  45828. }, { immediate: true });
  45829. const barObserver = useResizeObserver(barRef, () => update());
  45830. (0, vue.onBeforeUnmount)(() => {
  45831. tabObservers.forEach((observer) => observer.stop());
  45832. tabObservers.length = 0;
  45833. barObserver.stop();
  45834. });
  45835. __expose({
  45836. ref: barRef,
  45837. update
  45838. });
  45839. return (_ctx, _cache) => {
  45840. return renderActiveBar.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  45841. key: 0,
  45842. ref_key: "barRef",
  45843. ref: barRef,
  45844. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("active-bar"), (0, vue.unref)(ns).is((0, vue.unref)(rootTabs).props.tabPosition)]),
  45845. style: (0, vue.normalizeStyle)(barStyle.value)
  45846. }, null, 6)) : (0, vue.createCommentVNode)("v-if", true);
  45847. };
  45848. }
  45849. });
  45850. //#endregion
  45851. //#region ../../packages/components/tabs/src/tab-bar.vue
  45852. var tab_bar_default = tab_bar_vue_vue_type_script_setup_true_lang_default;
  45853. //#endregion
  45854. //#region ../../packages/components/tabs/src/composables/use-tab-nav-touch.ts
  45855. const TOUCH_SCROLL_THRESHOLD = 5;
  45856. const useTabNavTouch = ({ scrollable, navOffset, navSize, navContainerSize, isHorizontal }) => {
  45857. const isTouchScrolling = (0, vue.ref)(false);
  45858. const maxOffset = (0, vue.computed)(() => Math.max(navSize.value - navContainerSize.value, 0));
  45859. let touchState;
  45860. let isMainAxisTouch;
  45861. const handleTouchStart = (event) => {
  45862. if (!scrollable.value || event.touches.length !== 1) return;
  45863. const { clientX, clientY } = getClientXY(event);
  45864. touchState = {
  45865. startX: clientX,
  45866. startY: clientY,
  45867. startOffset: navOffset.value
  45868. };
  45869. isMainAxisTouch = void 0;
  45870. };
  45871. const handleTouchMove = (event) => {
  45872. if (!touchState || !scrollable.value) return;
  45873. if (event.touches.length !== 1) {
  45874. handleTouchEnd();
  45875. return;
  45876. }
  45877. const { clientX, clientY } = getClientXY(event);
  45878. const deltaX = touchState.startX - clientX;
  45879. const deltaY = touchState.startY - clientY;
  45880. const mainAxisDelta = isHorizontal.value ? deltaX : deltaY;
  45881. const crossAxisDelta = isHorizontal.value ? deltaY : deltaX;
  45882. const mainAxisDistance = Math.abs(mainAxisDelta);
  45883. const crossAxisDistance = Math.abs(crossAxisDelta);
  45884. if (isUndefined$1(isMainAxisTouch)) {
  45885. if (Math.max(mainAxisDistance, crossAxisDistance) <= TOUCH_SCROLL_THRESHOLD) return;
  45886. isMainAxisTouch = mainAxisDistance > crossAxisDistance;
  45887. }
  45888. if (!isMainAxisTouch) return;
  45889. const nextOffset = clamp$1(touchState.startOffset + mainAxisDelta, 0, maxOffset.value);
  45890. if (maxOffset.value <= 0 || nextOffset === navOffset.value || !event.cancelable) return;
  45891. event.preventDefault();
  45892. isTouchScrolling.value = true;
  45893. navOffset.value = nextOffset;
  45894. };
  45895. const handleTouchEnd = () => {
  45896. touchState = void 0;
  45897. isMainAxisTouch = void 0;
  45898. isTouchScrolling.value = false;
  45899. };
  45900. return {
  45901. isTouchScrolling,
  45902. handleTouchStart,
  45903. handleTouchMove,
  45904. handleTouchEnd
  45905. };
  45906. };
  45907. //#endregion
  45908. //#region ../../packages/components/tabs/src/tab-nav.tsx
  45909. const tabNavProps = buildProps({
  45910. panes: {
  45911. type: definePropType(Array),
  45912. default: () => mutable([])
  45913. },
  45914. currentName: {
  45915. type: [String, Number],
  45916. default: ""
  45917. },
  45918. editable: Boolean,
  45919. type: {
  45920. type: String,
  45921. values: [
  45922. "card",
  45923. "border-card",
  45924. ""
  45925. ],
  45926. default: ""
  45927. },
  45928. stretch: Boolean,
  45929. tabindex: {
  45930. type: [String, Number],
  45931. default: void 0
  45932. }
  45933. });
  45934. const tabNavEmits = {
  45935. tabClick: (tab, tabName, ev) => ev instanceof Event,
  45936. tabRemove: (tab, ev) => ev instanceof Event
  45937. };
  45938. const COMPONENT_NAME$3 = "ElTabNav";
  45939. const TabNav = /* @__PURE__ */ (0, vue.defineComponent)({
  45940. name: COMPONENT_NAME$3,
  45941. props: tabNavProps,
  45942. emits: tabNavEmits,
  45943. setup(props, { expose, emit }) {
  45944. const rootTabs = (0, vue.inject)(tabsRootContextKey);
  45945. if (!rootTabs) throwError(COMPONENT_NAME$3, `<el-tabs><tab-nav /></el-tabs>`);
  45946. const ns = useNamespace("tabs");
  45947. const visibility = useDocumentVisibility();
  45948. const focused = useWindowFocus();
  45949. const navScroll$ = (0, vue.ref)();
  45950. const nav$ = (0, vue.ref)();
  45951. const el$ = (0, vue.ref)();
  45952. const tabRefsMap = (0, vue.ref)({});
  45953. const tabBarRef = (0, vue.ref)();
  45954. const scrollable = (0, vue.ref)(false);
  45955. const navOffset = (0, vue.ref)(0);
  45956. const isFocus = (0, vue.ref)(false);
  45957. const focusable = (0, vue.ref)(true);
  45958. const isWheelScrolling = (0, vue.ref)(false);
  45959. const tracker = (0, vue.shallowRef)();
  45960. const isHorizontal = (0, vue.computed)(() => ["top", "bottom"].includes(rootTabs.props.tabPosition));
  45961. const sizeName = (0, vue.computed)(() => isHorizontal.value ? "width" : "height");
  45962. const navStyle = (0, vue.computed)(() => {
  45963. const dir = sizeName.value === "width" ? "X" : "Y";
  45964. return {
  45965. transition: isWheelScrolling.value || isTouchScrolling.value ? "none" : void 0,
  45966. transform: `translate${dir}(-${navOffset.value}px)`
  45967. };
  45968. });
  45969. const { width: navContainerWidth, height: navContainerHeight } = useElementSize(navScroll$);
  45970. const { width: navWidth, height: navHeight } = useElementSize(nav$, {
  45971. width: 0,
  45972. height: 0
  45973. }, { box: "border-box" });
  45974. const navContainerSize = (0, vue.computed)(() => isHorizontal.value ? navContainerWidth.value : navContainerHeight.value);
  45975. const navSize = (0, vue.computed)(() => isHorizontal.value ? navWidth.value : navHeight.value);
  45976. const { onWheel } = useWheel({
  45977. atStartEdge: (0, vue.computed)(() => navOffset.value <= 0),
  45978. atEndEdge: (0, vue.computed)(() => navSize.value - navOffset.value <= navContainerSize.value),
  45979. layout: (0, vue.computed)(() => isHorizontal.value ? "horizontal" : "vertical")
  45980. }, (offset) => {
  45981. navOffset.value = clamp$1(navOffset.value + offset, 0, navSize.value - navContainerSize.value);
  45982. });
  45983. const handleWheel = (event) => {
  45984. isWheelScrolling.value = true;
  45985. onWheel(event);
  45986. rAF(() => {
  45987. isWheelScrolling.value = false;
  45988. });
  45989. };
  45990. const { isTouchScrolling, handleTouchStart, handleTouchMove, handleTouchEnd } = useTabNavTouch({
  45991. scrollable,
  45992. navOffset,
  45993. navSize,
  45994. navContainerSize,
  45995. isHorizontal
  45996. });
  45997. const scrollPrev = () => {
  45998. if (!navScroll$.value) return;
  45999. const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
  46000. const currentOffset = navOffset.value;
  46001. if (!currentOffset) return;
  46002. navOffset.value = currentOffset > containerSize ? currentOffset - containerSize : 0;
  46003. };
  46004. const scrollNext = () => {
  46005. if (!navScroll$.value || !nav$.value) return;
  46006. const navSize = nav$.value.getBoundingClientRect()[sizeName.value];
  46007. const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
  46008. const currentOffset = navOffset.value;
  46009. if (!isGreaterThan(navSize - currentOffset, containerSize)) return;
  46010. navOffset.value = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;
  46011. };
  46012. const scrollToActiveTab = async () => {
  46013. const nav = nav$.value;
  46014. if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return;
  46015. await (0, vue.nextTick)();
  46016. const activeTab = tabRefsMap.value[props.currentName];
  46017. if (!activeTab) return;
  46018. const navScroll = navScroll$.value;
  46019. const activeTabBounding = activeTab.getBoundingClientRect();
  46020. const navScrollBounding = navScroll.getBoundingClientRect();
  46021. const navScrollLeft = navScrollBounding.left + 1;
  46022. const navScrollRight = navScrollBounding.right - 1;
  46023. const navBounding = nav.getBoundingClientRect();
  46024. const maxOffset = isHorizontal.value ? navBounding.width - navScrollBounding.width : navBounding.height - navScrollBounding.height;
  46025. const currentOffset = navOffset.value;
  46026. let newOffset = currentOffset;
  46027. if (isHorizontal.value) {
  46028. if (activeTabBounding.left < navScrollLeft) newOffset = currentOffset - (navScrollLeft - activeTabBounding.left);
  46029. if (activeTabBounding.right > navScrollRight) newOffset = currentOffset + activeTabBounding.right - navScrollRight;
  46030. } else {
  46031. if (activeTabBounding.top < navScrollBounding.top) newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);
  46032. if (activeTabBounding.bottom > navScrollBounding.bottom) newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);
  46033. }
  46034. newOffset = Math.max(newOffset, 0);
  46035. navOffset.value = Math.min(newOffset, maxOffset);
  46036. };
  46037. const update = () => {
  46038. if (!nav$.value || !navScroll$.value) return;
  46039. props.stretch && tabBarRef.value?.update();
  46040. const navSize = nav$.value.getBoundingClientRect()[sizeName.value];
  46041. const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
  46042. const currentOffset = navOffset.value;
  46043. if (containerSize < navSize) {
  46044. scrollable.value = scrollable.value || {};
  46045. scrollable.value.prev = currentOffset;
  46046. scrollable.value.next = isGreaterThan(navSize, currentOffset + containerSize);
  46047. if (isGreaterThan(containerSize, navSize - currentOffset)) navOffset.value = navSize - containerSize;
  46048. } else {
  46049. scrollable.value = false;
  46050. if (currentOffset > 0) navOffset.value = 0;
  46051. }
  46052. };
  46053. const changeTab = (event) => {
  46054. const code = getEventCode(event);
  46055. let step = 0;
  46056. switch (code) {
  46057. case EVENT_CODE.left:
  46058. case EVENT_CODE.up:
  46059. step = -1;
  46060. break;
  46061. case EVENT_CODE.right:
  46062. case EVENT_CODE.down:
  46063. step = 1;
  46064. break;
  46065. default: return;
  46066. }
  46067. const tabList = Array.from(event.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)"));
  46068. let nextIndex = tabList.indexOf(event.target) + step;
  46069. if (nextIndex < 0) nextIndex = tabList.length - 1;
  46070. else if (nextIndex >= tabList.length) nextIndex = 0;
  46071. tabList[nextIndex].focus({ preventScroll: true });
  46072. tabList[nextIndex].click();
  46073. setFocus();
  46074. };
  46075. const setFocus = () => {
  46076. if (focusable.value) isFocus.value = true;
  46077. };
  46078. const removeFocus = () => isFocus.value = false;
  46079. const setRefs = (el, key) => {
  46080. tabRefsMap.value[key] = el;
  46081. };
  46082. const focusActiveTab = async () => {
  46083. await (0, vue.nextTick)();
  46084. tabRefsMap.value[props.currentName]?.focus({ preventScroll: true });
  46085. };
  46086. (0, vue.watch)(visibility, (visibility) => {
  46087. if (visibility === "hidden") focusable.value = false;
  46088. else if (visibility === "visible") setTimeout(() => focusable.value = true, 50);
  46089. });
  46090. (0, vue.watch)(focused, (focused) => {
  46091. if (focused) setTimeout(() => focusable.value = true, 50);
  46092. else focusable.value = false;
  46093. });
  46094. useResizeObserver(el$, () => {
  46095. rAF(update);
  46096. });
  46097. (0, vue.onMounted)(() => setTimeout(() => scrollToActiveTab(), 0));
  46098. (0, vue.onUpdated)(() => update());
  46099. expose({
  46100. scrollToActiveTab,
  46101. removeFocus,
  46102. focusActiveTab,
  46103. tabListRef: nav$,
  46104. tabBarRef,
  46105. scheduleRender: () => (0, vue.triggerRef)(tracker)
  46106. });
  46107. return () => {
  46108. const scrollBtn = scrollable.value ? [(0, vue.createVNode)("span", {
  46109. "class": [ns.e("nav-prev"), ns.is("disabled", !scrollable.value.prev)],
  46110. "onClick": scrollPrev
  46111. }, [(0, vue.createVNode)(ElIcon, null, { default: () => [(0, vue.createVNode)(arrow_left_default, null, null)] })]), (0, vue.createVNode)("span", {
  46112. "class": [ns.e("nav-next"), ns.is("disabled", !scrollable.value.next)],
  46113. "onClick": scrollNext
  46114. }, [(0, vue.createVNode)(ElIcon, null, { default: () => [(0, vue.createVNode)(arrow_right_default, null, null)] })])] : null;
  46115. const tabs = props.panes.map((pane, index) => {
  46116. const uid = pane.uid;
  46117. const disabled = pane.props.disabled;
  46118. const tabName = pane.props.name ?? pane.index ?? `${index}`;
  46119. const closable = !disabled && (pane.isClosable || pane.props.closable !== false && props.editable);
  46120. pane.index = `${index}`;
  46121. const btnClose = closable ? (0, vue.createVNode)(ElIcon, {
  46122. "class": "is-icon-close",
  46123. "onClick": (ev) => emit("tabRemove", pane, ev)
  46124. }, { default: () => [(0, vue.createVNode)(close_default, null, null)] }) : null;
  46125. const tabLabelContent = pane.slots.label?.() || pane.props.label;
  46126. const tabindex = !disabled && pane.active ? props.tabindex ?? rootTabs.props.tabindex : -1;
  46127. return (0, vue.createVNode)("div", {
  46128. "ref": (el) => setRefs(el, tabName),
  46129. "class": [
  46130. ns.e("item"),
  46131. ns.is(rootTabs.props.tabPosition),
  46132. ns.is("active", pane.active),
  46133. ns.is("disabled", disabled),
  46134. ns.is("closable", closable),
  46135. ns.is("focus", isFocus.value)
  46136. ],
  46137. "id": `tab-${tabName}`,
  46138. "key": `tab-${uid}`,
  46139. "aria-controls": `pane-${tabName}`,
  46140. "role": "tab",
  46141. "aria-selected": pane.active,
  46142. "tabindex": tabindex,
  46143. "onFocus": () => setFocus(),
  46144. "onBlur": () => removeFocus(),
  46145. "onClick": (ev) => {
  46146. removeFocus();
  46147. emit("tabClick", pane, tabName, ev);
  46148. },
  46149. "onKeydown": (ev) => {
  46150. const code = getEventCode(ev);
  46151. if (closable && (code === EVENT_CODE.delete || code === EVENT_CODE.backspace)) emit("tabRemove", pane, ev);
  46152. }
  46153. }, [...[tabLabelContent, btnClose]]);
  46154. });
  46155. tracker.value;
  46156. return (0, vue.createVNode)("div", {
  46157. "ref": el$,
  46158. "class": [
  46159. ns.e("nav-wrap"),
  46160. ns.is("scrollable", !!scrollable.value),
  46161. ns.is(rootTabs.props.tabPosition)
  46162. ]
  46163. }, [scrollBtn, (0, vue.createVNode)("div", {
  46164. "class": ns.e("nav-scroll"),
  46165. "ref": navScroll$
  46166. }, [props.panes.length > 0 ? (0, vue.createVNode)("div", {
  46167. "class": [
  46168. ns.e("nav"),
  46169. ns.is(rootTabs.props.tabPosition),
  46170. ns.is("stretch", props.stretch && ["top", "bottom"].includes(rootTabs.props.tabPosition))
  46171. ],
  46172. "ref": nav$,
  46173. "style": navStyle.value,
  46174. "role": "tablist",
  46175. "onKeydown": changeTab,
  46176. "onWheel": handleWheel,
  46177. "onTouchstart": handleTouchStart,
  46178. "onTouchmove": handleTouchMove,
  46179. "onTouchend": handleTouchEnd,
  46180. "onTouchcancel": handleTouchEnd
  46181. }, [...[!props.type ? (0, vue.createVNode)(tab_bar_default, {
  46182. "ref": tabBarRef,
  46183. "tabs": [...props.panes],
  46184. "tabRefs": tabRefsMap.value
  46185. }, null) : null, tabs]]) : null])]);
  46186. };
  46187. }
  46188. });
  46189. //#endregion
  46190. //#region ../../packages/components/tabs/src/tabs.tsx
  46191. const tabsProps = buildProps({
  46192. type: {
  46193. type: String,
  46194. values: [
  46195. "card",
  46196. "border-card",
  46197. ""
  46198. ],
  46199. default: ""
  46200. },
  46201. closable: Boolean,
  46202. addable: Boolean,
  46203. modelValue: { type: [String, Number] },
  46204. defaultValue: { type: [String, Number] },
  46205. editable: Boolean,
  46206. tabPosition: {
  46207. type: String,
  46208. values: [
  46209. "top",
  46210. "right",
  46211. "bottom",
  46212. "left"
  46213. ],
  46214. default: "top"
  46215. },
  46216. beforeLeave: {
  46217. type: definePropType(Function),
  46218. default: () => true
  46219. },
  46220. stretch: Boolean,
  46221. tabindex: {
  46222. type: [String, Number],
  46223. default: 0
  46224. }
  46225. });
  46226. const isPaneName = (value) => isString(value) || isNumber(value);
  46227. const tabsEmits = {
  46228. [UPDATE_MODEL_EVENT]: (name) => isPaneName(name),
  46229. tabClick: (pane, ev) => ev instanceof Event,
  46230. tabChange: (name) => isPaneName(name),
  46231. edit: (paneName, action) => ["remove", "add"].includes(action),
  46232. tabRemove: (name) => isPaneName(name),
  46233. tabAdd: () => true
  46234. };
  46235. const Tabs = /* @__PURE__ */ (0, vue.defineComponent)({
  46236. name: "ElTabs",
  46237. props: tabsProps,
  46238. emits: tabsEmits,
  46239. setup(props, { emit, slots, expose }) {
  46240. const ns = useNamespace("tabs");
  46241. const isVertical = (0, vue.computed)(() => ["left", "right"].includes(props.tabPosition));
  46242. const { children: panes, addChild: registerPane, removeChild: unregisterPane, ChildrenSorter: PanesSorter } = useOrderedChildren((0, vue.getCurrentInstance)(), "ElTabPane");
  46243. const nav$ = (0, vue.ref)();
  46244. const currentName = (0, vue.ref)((isUndefined(props.modelValue) ? props.defaultValue : props.modelValue) ?? "0");
  46245. const setCurrentName = async (value, trigger = false) => {
  46246. if (currentName.value === value || isUndefined(value)) return;
  46247. try {
  46248. let canLeave;
  46249. if (props.beforeLeave) {
  46250. const result = props.beforeLeave(value, currentName.value);
  46251. canLeave = result instanceof Promise ? await result : result;
  46252. } else canLeave = true;
  46253. if (canLeave !== false) {
  46254. const isFocusInsidePane = panes.value.find((item) => item.paneName === currentName.value)?.isFocusInsidePane();
  46255. currentName.value = value;
  46256. if (trigger) {
  46257. emit(UPDATE_MODEL_EVENT, value);
  46258. emit("tabChange", value);
  46259. }
  46260. nav$.value?.removeFocus?.();
  46261. if (isFocusInsidePane) nav$.value?.focusActiveTab();
  46262. }
  46263. } catch {}
  46264. };
  46265. const handleTabClick = (tab, tabName, event) => {
  46266. if (tab.props.disabled) return;
  46267. emit("tabClick", tab, event);
  46268. setCurrentName(tabName, true);
  46269. };
  46270. const handleTabRemove = (pane, ev) => {
  46271. if (pane.props.disabled || isUndefined(pane.props.name)) return;
  46272. ev.stopPropagation();
  46273. emit("edit", pane.props.name, "remove");
  46274. emit("tabRemove", pane.props.name);
  46275. };
  46276. const handleTabAdd = () => {
  46277. emit("edit", void 0, "add");
  46278. emit("tabAdd");
  46279. };
  46280. const handleKeydown = (event) => {
  46281. const code = getEventCode(event);
  46282. if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter].includes(code)) handleTabAdd();
  46283. };
  46284. const swapChildren = (vnode) => {
  46285. const actualFirstChild = vnode.el.firstChild;
  46286. const firstChild = ["bottom", "right"].includes(props.tabPosition) ? vnode.children[0].el : vnode.children[1].el;
  46287. if (actualFirstChild !== firstChild) actualFirstChild.before(firstChild);
  46288. };
  46289. (0, vue.watch)(() => props.modelValue, (modelValue) => setCurrentName(modelValue));
  46290. (0, vue.watch)(currentName, async () => {
  46291. await (0, vue.nextTick)();
  46292. nav$.value?.scrollToActiveTab();
  46293. });
  46294. (0, vue.provide)(tabsRootContextKey, {
  46295. props,
  46296. currentName,
  46297. registerPane,
  46298. unregisterPane,
  46299. nav$
  46300. });
  46301. expose({
  46302. currentName,
  46303. get tabNavRef() {
  46304. return omit(nav$.value, ["scheduleRender"]);
  46305. }
  46306. });
  46307. return () => {
  46308. const addSlot = slots["add-icon"];
  46309. const newButton = props.editable || props.addable ? (0, vue.createVNode)("div", {
  46310. "class": [ns.e("new-tab"), isVertical.value && ns.e("new-tab-vertical")],
  46311. "tabindex": props.tabindex,
  46312. "onClick": handleTabAdd,
  46313. "onKeydown": handleKeydown
  46314. }, [addSlot ? (0, vue.renderSlot)(slots, "add-icon") : (0, vue.createVNode)(ElIcon, { "class": ns.is("icon-plus") }, { default: () => [(0, vue.createVNode)(plus_default, null, null)] })]) : null;
  46315. const tabNav = () => (0, vue.createVNode)(TabNav, {
  46316. "ref": nav$,
  46317. "currentName": currentName.value,
  46318. "editable": props.editable,
  46319. "type": props.type,
  46320. "panes": panes.value,
  46321. "stretch": props.stretch,
  46322. "onTabClick": handleTabClick,
  46323. "onTabRemove": handleTabRemove
  46324. }, null);
  46325. const header = (0, vue.createVNode)("div", { "class": [
  46326. ns.e("header"),
  46327. isVertical.value && ns.e("header-vertical"),
  46328. ns.is(props.tabPosition)
  46329. ] }, [(0, vue.createVNode)(PanesSorter, null, {
  46330. default: tabNav,
  46331. $stable: true
  46332. }), newButton]);
  46333. const panels = (0, vue.createVNode)("div", { "class": ns.e("content") }, [(0, vue.renderSlot)(slots, "default")]);
  46334. return (0, vue.createVNode)("div", {
  46335. "class": [
  46336. ns.b(),
  46337. ns.m(props.tabPosition),
  46338. {
  46339. [ns.m("card")]: props.type === "card",
  46340. [ns.m("border-card")]: props.type === "border-card"
  46341. }
  46342. ],
  46343. "onVnodeMounted": swapChildren,
  46344. "onVnodeUpdated": swapChildren
  46345. }, [panels, header]);
  46346. };
  46347. }
  46348. });
  46349. //#endregion
  46350. //#region ../../packages/components/tabs/src/tab-pane.ts
  46351. const tabPaneProps = buildProps({
  46352. label: {
  46353. type: String,
  46354. default: ""
  46355. },
  46356. name: { type: [String, Number] },
  46357. closable: {
  46358. type: Boolean,
  46359. default: void 0
  46360. },
  46361. disabled: Boolean,
  46362. lazy: Boolean
  46363. });
  46364. //#endregion
  46365. //#region ../../packages/components/tabs/src/tab-pane.vue?vue&type=script&setup=true&lang.ts
  46366. const _hoisted_1$14 = [
  46367. "id",
  46368. "aria-hidden",
  46369. "aria-labelledby"
  46370. ];
  46371. const COMPONENT_NAME$2 = "ElTabPane";
  46372. var tab_pane_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  46373. name: COMPONENT_NAME$2,
  46374. __name: "tab-pane",
  46375. props: tabPaneProps,
  46376. setup(__props) {
  46377. const props = __props;
  46378. const instance = (0, vue.getCurrentInstance)();
  46379. const slots = (0, vue.useSlots)();
  46380. const tabsRoot = (0, vue.inject)(tabsRootContextKey);
  46381. if (!tabsRoot) throwError(COMPONENT_NAME$2, "usage: <el-tabs><el-tab-pane /></el-tabs/>");
  46382. const ns = useNamespace("tab-pane");
  46383. const paneRef = (0, vue.ref)();
  46384. const index = (0, vue.ref)();
  46385. const isClosable = (0, vue.computed)(() => props.closable ?? tabsRoot.props.closable);
  46386. const active = (0, vue.computed)(() => tabsRoot.currentName.value === (props.name ?? index.value));
  46387. const loaded = (0, vue.ref)(active.value);
  46388. const paneName = (0, vue.computed)(() => props.name ?? index.value);
  46389. const shouldBeRender = (0, vue.computed)(() => !props.lazy || loaded.value || active.value);
  46390. const isFocusInsidePane = () => {
  46391. return paneRef.value?.contains(document.activeElement);
  46392. };
  46393. (0, vue.watch)(active, (val) => {
  46394. if (val) loaded.value = true;
  46395. });
  46396. const pane = (0, vue.reactive)({
  46397. uid: instance.uid,
  46398. getVnode: () => instance.vnode,
  46399. slots,
  46400. props,
  46401. paneName,
  46402. active,
  46403. index,
  46404. isClosable,
  46405. isFocusInsidePane
  46406. });
  46407. tabsRoot.registerPane(pane);
  46408. (0, vue.onBeforeUnmount)(() => {
  46409. tabsRoot.unregisterPane(pane);
  46410. });
  46411. (0, vue.onBeforeUpdate)(() => {
  46412. if (slots.label) tabsRoot.nav$.value?.scheduleRender();
  46413. });
  46414. return (_ctx, _cache) => {
  46415. return shouldBeRender.value ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  46416. key: 0,
  46417. id: `pane-${paneName.value}`,
  46418. ref_key: "paneRef",
  46419. ref: paneRef,
  46420. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()),
  46421. role: "tabpanel",
  46422. "aria-hidden": !active.value,
  46423. "aria-labelledby": `tab-${paneName.value}`
  46424. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 10, _hoisted_1$14)), [[vue.vShow, active.value]]) : (0, vue.createCommentVNode)("v-if", true);
  46425. };
  46426. }
  46427. });
  46428. //#endregion
  46429. //#region ../../packages/components/tabs/src/tab-pane.vue
  46430. var tab_pane_default = tab_pane_vue_vue_type_script_setup_true_lang_default;
  46431. //#endregion
  46432. //#region ../../packages/components/tabs/index.ts
  46433. const ElTabs = withInstall(Tabs, { TabPane: tab_pane_default });
  46434. const ElTabPane = withNoopInstall(tab_pane_default);
  46435. //#endregion
  46436. //#region ../../packages/components/text/src/text.ts
  46437. const textProps = buildProps({
  46438. type: {
  46439. type: String,
  46440. values: [
  46441. "primary",
  46442. "success",
  46443. "info",
  46444. "warning",
  46445. "danger",
  46446. ""
  46447. ],
  46448. default: ""
  46449. },
  46450. size: {
  46451. type: String,
  46452. values: componentSizes,
  46453. default: ""
  46454. },
  46455. truncated: Boolean,
  46456. lineClamp: { type: [String, Number] },
  46457. tag: {
  46458. type: String,
  46459. default: "span"
  46460. }
  46461. });
  46462. //#endregion
  46463. //#region ../../packages/components/text/src/text.vue?vue&type=script&setup=true&lang.ts
  46464. var text_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  46465. name: "ElText",
  46466. __name: "text",
  46467. props: textProps,
  46468. setup(__props) {
  46469. const props = __props;
  46470. const attrs = (0, vue.useAttrs)();
  46471. const textRef = (0, vue.ref)();
  46472. const textSize = useFormSize();
  46473. const ns = useNamespace("text");
  46474. const textKls = (0, vue.computed)(() => [
  46475. ns.b(),
  46476. ns.m(props.type),
  46477. ns.m(textSize.value),
  46478. ns.is("truncated", props.truncated),
  46479. ns.is("line-clamp", !isUndefined(props.lineClamp))
  46480. ]);
  46481. const bindTitle = async () => {
  46482. await (0, vue.nextTick)();
  46483. if (attrs.title) return;
  46484. let shouldAddTitle = false;
  46485. const text = textRef.value?.textContent || "";
  46486. if (props.truncated) {
  46487. const width = textRef.value?.offsetWidth;
  46488. const scrollWidth = textRef.value?.scrollWidth;
  46489. if (width && scrollWidth && scrollWidth > width) shouldAddTitle = true;
  46490. } else if (!isUndefined(props.lineClamp)) {
  46491. const height = textRef.value?.offsetHeight;
  46492. const scrollHeight = textRef.value?.scrollHeight;
  46493. if (height && scrollHeight && scrollHeight > height) shouldAddTitle = true;
  46494. }
  46495. if (shouldAddTitle) textRef.value?.setAttribute("title", text);
  46496. else textRef.value?.removeAttribute("title");
  46497. };
  46498. (0, vue.onMounted)(bindTitle);
  46499. (0, vue.onUpdated)(bindTitle);
  46500. return (_ctx, _cache) => {
  46501. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.tag), {
  46502. ref_key: "textRef",
  46503. ref: textRef,
  46504. class: (0, vue.normalizeClass)(textKls.value),
  46505. style: (0, vue.normalizeStyle)({ "-webkit-line-clamp": __props.lineClamp })
  46506. }, {
  46507. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  46508. _: 3
  46509. }, 8, ["class", "style"]);
  46510. };
  46511. }
  46512. });
  46513. //#endregion
  46514. //#region ../../packages/components/text/src/text.vue
  46515. var text_default = text_vue_vue_type_script_setup_true_lang_default;
  46516. //#endregion
  46517. //#region ../../packages/components/text/index.ts
  46518. const ElText = withInstall(text_default);
  46519. //#endregion
  46520. //#region ../../packages/components/time-select/src/time-select.ts
  46521. const DEFAULT_START = "09:00";
  46522. const DEFAULT_END = "18:00";
  46523. const DEFAULT_STEP = "00:30";
  46524. const timeSelectProps = buildProps({
  46525. format: {
  46526. type: String,
  46527. default: "HH:mm"
  46528. },
  46529. modelValue: { type: definePropType(String) },
  46530. disabled: {
  46531. type: Boolean,
  46532. default: void 0
  46533. },
  46534. editable: {
  46535. type: Boolean,
  46536. default: true
  46537. },
  46538. effect: {
  46539. type: definePropType(String),
  46540. default: "light"
  46541. },
  46542. clearable: {
  46543. type: Boolean,
  46544. default: true
  46545. },
  46546. size: useSizeProp,
  46547. placeholder: String,
  46548. start: {
  46549. type: String,
  46550. default: DEFAULT_START
  46551. },
  46552. end: {
  46553. type: String,
  46554. default: DEFAULT_END
  46555. },
  46556. step: {
  46557. type: String,
  46558. default: DEFAULT_STEP
  46559. },
  46560. minTime: { type: definePropType(String) },
  46561. maxTime: { type: definePropType(String) },
  46562. includeEndTime: Boolean,
  46563. name: String,
  46564. prefixIcon: {
  46565. type: definePropType([String, Object]),
  46566. default: () => clock_default
  46567. },
  46568. clearIcon: {
  46569. type: definePropType([String, Object]),
  46570. default: () => circle_close_default
  46571. },
  46572. popperClass: {
  46573. type: String,
  46574. default: ""
  46575. },
  46576. popperStyle: { type: definePropType([String, Object]) },
  46577. ...useEmptyValuesProps
  46578. });
  46579. //#endregion
  46580. //#region ../../packages/components/time-select/src/utils.ts
  46581. const parseTime = (time) => {
  46582. const values = (time || "").split(":");
  46583. if (values.length >= 2) {
  46584. let hours = Number.parseInt(values[0], 10);
  46585. const minutes = Number.parseInt(values[1], 10);
  46586. if (Number.isNaN(hours) || Number.isNaN(minutes)) return null;
  46587. const timeUpper = time.toUpperCase();
  46588. if (timeUpper.includes("AM") && hours === 12) hours = 0;
  46589. else if (timeUpper.includes("PM") && hours !== 12) hours += 12;
  46590. return {
  46591. hours,
  46592. minutes
  46593. };
  46594. }
  46595. return null;
  46596. };
  46597. const isValidTime = (time) => !!time && time.hours >= 0 && time.minutes >= 0 && !Number.isNaN(time.hours) && !Number.isNaN(time.minutes);
  46598. const compareTime = (time1, time2) => {
  46599. const value1 = parseTime(time1);
  46600. if (!value1) return -1;
  46601. const value2 = parseTime(time2);
  46602. if (!value2) return -1;
  46603. const minutes1 = value1.minutes + value1.hours * 60;
  46604. const minutes2 = value2.minutes + value2.hours * 60;
  46605. if (minutes1 === minutes2) return 0;
  46606. return minutes1 > minutes2 ? 1 : -1;
  46607. };
  46608. const padTime = (time) => {
  46609. return `${time}`.padStart(2, "0");
  46610. };
  46611. const formatTime = (time) => {
  46612. return `${padTime(time.hours)}:${padTime(time.minutes)}`;
  46613. };
  46614. const nextTime = (time, step) => {
  46615. const timeValue = parseTime(time);
  46616. if (!timeValue) return "";
  46617. const stepValue = parseTime(step);
  46618. if (!stepValue) return "";
  46619. const next = {
  46620. hours: timeValue.hours,
  46621. minutes: timeValue.minutes
  46622. };
  46623. next.minutes += stepValue.minutes;
  46624. next.hours += stepValue.hours;
  46625. next.hours += Math.floor(next.minutes / 60);
  46626. next.minutes = next.minutes % 60;
  46627. return formatTime(next);
  46628. };
  46629. //#endregion
  46630. //#region ../../packages/components/time-select/src/time-select.vue?vue&type=script&setup=true&lang.ts
  46631. var time_select_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  46632. name: "ElTimeSelect",
  46633. __name: "time-select",
  46634. props: timeSelectProps,
  46635. emits: [
  46636. CHANGE_EVENT,
  46637. "blur",
  46638. "focus",
  46639. "clear",
  46640. UPDATE_MODEL_EVENT
  46641. ],
  46642. setup(__props, { expose: __expose }) {
  46643. import_dayjs_min.default.extend(import_customParseFormat.default);
  46644. const { Option: ElOption } = ElSelect;
  46645. const props = __props;
  46646. const nsInput = useNamespace("input");
  46647. const select = (0, vue.ref)();
  46648. const _disabled = useFormDisabled();
  46649. const { lang } = useLocale();
  46650. const getValidTimeOrDefault = (value, propName, defaultValue, allowZero = true) => {
  46651. const time = parseTime(value);
  46652. if (!isValidTime(time) || !allowZero && time.hours === 0 && time.minutes === 0) {
  46653. /* @__PURE__ */ debugWarn("ElTimeSelect", `invalid ${propName}, fallback to default ${propName} (${defaultValue}).`);
  46654. return defaultValue;
  46655. }
  46656. return formatTime(time);
  46657. };
  46658. const value = (0, vue.computed)(() => props.modelValue);
  46659. const start = (0, vue.computed)(() => getValidTimeOrDefault(props.start, "start", DEFAULT_START));
  46660. const end = (0, vue.computed)(() => getValidTimeOrDefault(props.end, "end", DEFAULT_END));
  46661. const minTime = (0, vue.computed)(() => {
  46662. const time = parseTime(props.minTime || "");
  46663. return time ? formatTime(time) : null;
  46664. });
  46665. const maxTime = (0, vue.computed)(() => {
  46666. const time = parseTime(props.maxTime || "");
  46667. return time ? formatTime(time) : null;
  46668. });
  46669. const step = (0, vue.computed)(() => getValidTimeOrDefault(props.step, "step", DEFAULT_STEP, false));
  46670. const items = (0, vue.computed)(() => {
  46671. const result = [];
  46672. const push = (formattedValue, rawValue) => {
  46673. result.push({
  46674. value: formattedValue,
  46675. rawValue,
  46676. disabled: compareTime(rawValue, minTime.value || "-1:-1") <= 0 || compareTime(rawValue, maxTime.value || "100:100") >= 0
  46677. });
  46678. };
  46679. let current = start.value;
  46680. while (compareTime(current, end.value) <= 0) {
  46681. push((0, import_dayjs_min.default)(current, "HH:mm").locale(lang.value).format(props.format), current);
  46682. current = nextTime(current, step.value);
  46683. }
  46684. if (props.includeEndTime && result[result.length - 1]?.rawValue !== end.value) push((0, import_dayjs_min.default)(end.value, "HH:mm").locale(lang.value).format(props.format), end.value);
  46685. return result;
  46686. });
  46687. const blur = () => {
  46688. select.value?.blur?.();
  46689. };
  46690. const focus = () => {
  46691. select.value?.focus?.();
  46692. };
  46693. __expose({
  46694. blur,
  46695. focus
  46696. });
  46697. return (_ctx, _cache) => {
  46698. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElSelect), {
  46699. ref_key: "select",
  46700. ref: select,
  46701. name: __props.name,
  46702. "model-value": value.value,
  46703. disabled: (0, vue.unref)(_disabled),
  46704. clearable: __props.clearable,
  46705. "clear-icon": __props.clearIcon,
  46706. size: __props.size,
  46707. effect: __props.effect,
  46708. placeholder: __props.placeholder,
  46709. "default-first-option": "",
  46710. filterable: __props.editable,
  46711. "empty-values": __props.emptyValues,
  46712. "value-on-clear": __props.valueOnClear,
  46713. "popper-class": __props.popperClass,
  46714. "popper-style": __props.popperStyle,
  46715. "onUpdate:modelValue": _cache[0] || (_cache[0] = (event) => _ctx.$emit((0, vue.unref)("update:modelValue"), event)),
  46716. onChange: _cache[1] || (_cache[1] = (event) => _ctx.$emit((0, vue.unref)("change"), event)),
  46717. onBlur: _cache[2] || (_cache[2] = (event) => _ctx.$emit("blur", event)),
  46718. onFocus: _cache[3] || (_cache[3] = (event) => _ctx.$emit("focus", event)),
  46719. onClear: _cache[4] || (_cache[4] = () => _ctx.$emit("clear"))
  46720. }, {
  46721. prefix: (0, vue.withCtx)(() => [__props.prefixIcon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  46722. key: 0,
  46723. class: (0, vue.normalizeClass)((0, vue.unref)(nsInput).e("prefix-icon"))
  46724. }, {
  46725. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.prefixIcon)))]),
  46726. _: 1
  46727. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)]),
  46728. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(items.value, (item) => {
  46729. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElOption), {
  46730. key: item.value,
  46731. label: item.value,
  46732. value: item.value,
  46733. disabled: item.disabled
  46734. }, null, 8, [
  46735. "label",
  46736. "value",
  46737. "disabled"
  46738. ]);
  46739. }), 128))]),
  46740. _: 1
  46741. }, 8, [
  46742. "name",
  46743. "model-value",
  46744. "disabled",
  46745. "clearable",
  46746. "clear-icon",
  46747. "size",
  46748. "effect",
  46749. "placeholder",
  46750. "filterable",
  46751. "empty-values",
  46752. "value-on-clear",
  46753. "popper-class",
  46754. "popper-style"
  46755. ]);
  46756. };
  46757. }
  46758. });
  46759. //#endregion
  46760. //#region ../../packages/components/time-select/src/time-select.vue
  46761. var time_select_default = time_select_vue_vue_type_script_setup_true_lang_default;
  46762. //#endregion
  46763. //#region ../../packages/components/time-select/index.ts
  46764. const ElTimeSelect = withInstall(time_select_default);
  46765. //#endregion
  46766. //#region ../../packages/components/timeline/src/tokens.ts
  46767. const TIMELINE_INJECTION_KEY = "timeline";
  46768. //#endregion
  46769. //#region ../../packages/components/timeline/src/timeline.ts
  46770. const timelineProps = buildProps({
  46771. mode: {
  46772. type: String,
  46773. values: [
  46774. "start",
  46775. "alternate",
  46776. "alternate-reverse",
  46777. "end"
  46778. ],
  46779. default: "start"
  46780. },
  46781. reverse: Boolean
  46782. });
  46783. const Timeline = (0, vue.defineComponent)({
  46784. name: "ElTimeline",
  46785. props: timelineProps,
  46786. setup(props, { slots }) {
  46787. const ns = useNamespace("timeline");
  46788. (0, vue.provide)(TIMELINE_INJECTION_KEY, {
  46789. props,
  46790. slots
  46791. });
  46792. const timelineKls = (0, vue.computed)(() => [ns.b(), ns.is(props.mode)]);
  46793. return () => {
  46794. const children = flattedChildren(slots.default?.() ?? []);
  46795. return (0, vue.h)("ul", { class: timelineKls.value }, props.reverse ? children.reverse() : children);
  46796. };
  46797. }
  46798. });
  46799. //#endregion
  46800. //#region ../../packages/components/timeline/src/timeline-item.ts
  46801. const timelineItemProps = buildProps({
  46802. timestamp: {
  46803. type: String,
  46804. default: ""
  46805. },
  46806. hideTimestamp: Boolean,
  46807. center: Boolean,
  46808. placement: {
  46809. type: String,
  46810. values: ["top", "bottom"],
  46811. default: "bottom"
  46812. },
  46813. type: {
  46814. type: String,
  46815. values: [
  46816. "primary",
  46817. "success",
  46818. "warning",
  46819. "danger",
  46820. "info"
  46821. ],
  46822. default: ""
  46823. },
  46824. color: {
  46825. type: String,
  46826. default: ""
  46827. },
  46828. size: {
  46829. type: String,
  46830. values: ["normal", "large"],
  46831. default: "normal"
  46832. },
  46833. icon: { type: iconPropType },
  46834. hollow: Boolean
  46835. });
  46836. //#endregion
  46837. //#region ../../packages/components/timeline/src/timeline-item.vue?vue&type=script&setup=true&lang.ts
  46838. var timeline_item_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  46839. name: "ElTimelineItem",
  46840. __name: "timeline-item",
  46841. props: timelineItemProps,
  46842. setup(__props) {
  46843. const props = __props;
  46844. const { props: timelineProps } = (0, vue.inject)(TIMELINE_INJECTION_KEY);
  46845. const ns = useNamespace("timeline-item");
  46846. const defaultNodeKls = (0, vue.computed)(() => [
  46847. ns.e("node"),
  46848. ns.em("node", props.size || ""),
  46849. ns.em("node", props.type || ""),
  46850. ns.is("hollow", props.hollow)
  46851. ]);
  46852. const timelineItemKls = (0, vue.computed)(() => [
  46853. ns.b(),
  46854. { [ns.e("center")]: props.center },
  46855. ns.is(timelineProps.mode)
  46856. ]);
  46857. return (_ctx, _cache) => {
  46858. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", { class: (0, vue.normalizeClass)(timelineItemKls.value) }, [
  46859. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("tail")) }, null, 2),
  46860. !_ctx.$slots.dot ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  46861. key: 0,
  46862. class: (0, vue.normalizeClass)(defaultNodeKls.value),
  46863. style: (0, vue.normalizeStyle)({ backgroundColor: __props.color })
  46864. }, [__props.icon ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  46865. key: 0,
  46866. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("icon"))
  46867. }, {
  46868. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.icon)))]),
  46869. _: 1
  46870. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)], 6)) : (0, vue.createCommentVNode)("v-if", true),
  46871. _ctx.$slots.dot ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  46872. key: 1,
  46873. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("dot"))
  46874. }, [(0, vue.renderSlot)(_ctx.$slots, "dot")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  46875. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("wrapper")) }, [
  46876. !__props.hideTimestamp && __props.placement === "top" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  46877. key: 0,
  46878. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("timestamp"), (0, vue.unref)(ns).is("top")])
  46879. }, (0, vue.toDisplayString)(__props.timestamp), 3)) : (0, vue.createCommentVNode)("v-if", true),
  46880. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2),
  46881. !__props.hideTimestamp && __props.placement === "bottom" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  46882. key: 1,
  46883. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("timestamp"), (0, vue.unref)(ns).is("bottom")])
  46884. }, (0, vue.toDisplayString)(__props.timestamp), 3)) : (0, vue.createCommentVNode)("v-if", true)
  46885. ], 2)
  46886. ], 2);
  46887. };
  46888. }
  46889. });
  46890. //#endregion
  46891. //#region ../../packages/components/timeline/src/timeline-item.vue
  46892. var timeline_item_default = timeline_item_vue_vue_type_script_setup_true_lang_default;
  46893. //#endregion
  46894. //#region ../../packages/components/timeline/index.ts
  46895. const ElTimeline = withInstall(Timeline, { TimelineItem: timeline_item_default });
  46896. const ElTimelineItem = withNoopInstall(timeline_item_default);
  46897. //#endregion
  46898. //#region ../../packages/components/transfer/src/transfer.ts
  46899. const LEFT_CHECK_CHANGE_EVENT = "left-check-change";
  46900. const RIGHT_CHECK_CHANGE_EVENT = "right-check-change";
  46901. const transferProps = buildProps({
  46902. data: {
  46903. type: definePropType(Array),
  46904. default: () => []
  46905. },
  46906. titles: {
  46907. type: definePropType(Array),
  46908. default: () => []
  46909. },
  46910. buttonTexts: {
  46911. type: definePropType(Array),
  46912. default: () => []
  46913. },
  46914. filterPlaceholder: String,
  46915. filterMethod: { type: definePropType(Function) },
  46916. leftDefaultChecked: {
  46917. type: definePropType(Array),
  46918. default: () => []
  46919. },
  46920. rightDefaultChecked: {
  46921. type: definePropType(Array),
  46922. default: () => []
  46923. },
  46924. renderContent: { type: definePropType(Function) },
  46925. modelValue: {
  46926. type: definePropType(Array),
  46927. default: () => []
  46928. },
  46929. format: {
  46930. type: definePropType(Object),
  46931. default: () => ({})
  46932. },
  46933. filterable: Boolean,
  46934. props: {
  46935. type: definePropType(Object),
  46936. default: () => mutable({
  46937. label: "label",
  46938. key: "key",
  46939. disabled: "disabled"
  46940. })
  46941. },
  46942. targetOrder: {
  46943. type: String,
  46944. values: [
  46945. "original",
  46946. "push",
  46947. "unshift"
  46948. ],
  46949. default: "original"
  46950. },
  46951. validateEvent: {
  46952. type: Boolean,
  46953. default: true
  46954. }
  46955. });
  46956. const transferCheckedChangeFn = (value, movedKeys) => [value, movedKeys].every(isArray$1) || isArray$1(value) && isNil(movedKeys);
  46957. const transferEmits = {
  46958. [CHANGE_EVENT]: (value, direction, movedKeys) => [value, movedKeys].every(isArray$1) && ["left", "right"].includes(direction),
  46959. [UPDATE_MODEL_EVENT]: (value) => isArray$1(value),
  46960. [LEFT_CHECK_CHANGE_EVENT]: transferCheckedChangeFn,
  46961. [RIGHT_CHECK_CHANGE_EVENT]: transferCheckedChangeFn
  46962. };
  46963. //#endregion
  46964. //#region ../../packages/components/transfer/src/transfer-panel.ts
  46965. const CHECKED_CHANGE_EVENT = "checked-change";
  46966. const transferPanelProps = buildProps({
  46967. data: transferProps.data,
  46968. optionRender: { type: definePropType(Function) },
  46969. placeholder: String,
  46970. title: String,
  46971. filterable: Boolean,
  46972. format: transferProps.format,
  46973. filterMethod: transferProps.filterMethod,
  46974. defaultChecked: transferProps.leftDefaultChecked,
  46975. props: transferProps.props
  46976. });
  46977. const transferPanelEmits = { [CHECKED_CHANGE_EVENT]: transferCheckedChangeFn };
  46978. //#endregion
  46979. //#region ../../packages/components/transfer/src/composables/use-props-alias.ts
  46980. const usePropsAlias = (props) => {
  46981. const initProps = {
  46982. label: "label",
  46983. key: "key",
  46984. disabled: "disabled"
  46985. };
  46986. return (0, vue.computed)(() => ({
  46987. ...initProps,
  46988. ...props.props
  46989. }));
  46990. };
  46991. //#endregion
  46992. //#region ../../packages/components/transfer/src/composables/use-check.ts
  46993. const useCheck$1 = (props, panelState, emit) => {
  46994. const propsAlias = usePropsAlias(props);
  46995. const filteredData = (0, vue.computed)(() => {
  46996. return props.data.filter((item) => {
  46997. if (isFunction$1(props.filterMethod)) return props.filterMethod(panelState.query, item);
  46998. else return String(item[propsAlias.value.label] || item[propsAlias.value.key]).toLowerCase().includes(panelState.query.toLowerCase());
  46999. });
  47000. });
  47001. const checkableData = (0, vue.computed)(() => filteredData.value.filter((item) => !item[propsAlias.value.disabled]));
  47002. const checkedSummary = (0, vue.computed)(() => {
  47003. const checkedLength = panelState.checked.length;
  47004. const dataLength = props.data.length;
  47005. const { noChecked, hasChecked } = props.format;
  47006. if (noChecked && hasChecked) return checkedLength > 0 ? hasChecked.replace(/\${checked}/g, checkedLength.toString()).replace(/\${total}/g, dataLength.toString()) : noChecked.replace(/\${total}/g, dataLength.toString());
  47007. else return `${checkedLength}/${dataLength}`;
  47008. });
  47009. const isIndeterminate = (0, vue.computed)(() => {
  47010. const checkedLength = panelState.checked.length;
  47011. return checkedLength > 0 && checkedLength < checkableData.value.length;
  47012. });
  47013. const updateAllChecked = () => {
  47014. const checkableDataKeys = checkableData.value.map((item) => item[propsAlias.value.key]);
  47015. panelState.allChecked = checkableDataKeys.length > 0 && checkableDataKeys.every((item) => panelState.checked.includes(item));
  47016. };
  47017. const handleAllCheckedChange = (value) => {
  47018. panelState.checked = value ? checkableData.value.map((item) => item[propsAlias.value.key]) : [];
  47019. };
  47020. (0, vue.watch)(() => panelState.checked, (val, oldVal) => {
  47021. updateAllChecked();
  47022. if (panelState.checkChangeByUser) emit(CHECKED_CHANGE_EVENT, val, val.concat(oldVal).filter((v) => !val.includes(v) || !oldVal.includes(v)));
  47023. else {
  47024. emit(CHECKED_CHANGE_EVENT, val);
  47025. panelState.checkChangeByUser = true;
  47026. }
  47027. });
  47028. (0, vue.watch)(checkableData, () => {
  47029. updateAllChecked();
  47030. });
  47031. (0, vue.watch)(() => props.data, () => {
  47032. const checked = [];
  47033. const filteredDataKeys = filteredData.value.map((item) => item[propsAlias.value.key]);
  47034. panelState.checked.forEach((item) => {
  47035. if (filteredDataKeys.includes(item)) checked.push(item);
  47036. });
  47037. panelState.checkChangeByUser = false;
  47038. panelState.checked = checked;
  47039. });
  47040. (0, vue.watch)(() => props.defaultChecked, (val, oldVal) => {
  47041. if (oldVal && val.length === oldVal.length && val.every((item) => oldVal.includes(item))) return;
  47042. const checked = [];
  47043. const checkableDataKeys = checkableData.value.map((item) => item[propsAlias.value.key]);
  47044. val.forEach((item) => {
  47045. if (checkableDataKeys.includes(item)) checked.push(item);
  47046. });
  47047. panelState.checkChangeByUser = false;
  47048. panelState.checked = checked;
  47049. }, { immediate: true });
  47050. return {
  47051. filteredData,
  47052. checkableData,
  47053. checkedSummary,
  47054. isIndeterminate,
  47055. updateAllChecked,
  47056. handleAllCheckedChange
  47057. };
  47058. };
  47059. //#endregion
  47060. //#region ../../packages/components/transfer/src/composables/use-checked-change.ts
  47061. const useCheckedChange = (checkedState, emit) => {
  47062. const onSourceCheckedChange = (val, movedKeys) => {
  47063. checkedState.leftChecked = val;
  47064. if (!movedKeys) return;
  47065. emit(LEFT_CHECK_CHANGE_EVENT, val, movedKeys);
  47066. };
  47067. const onTargetCheckedChange = (val, movedKeys) => {
  47068. checkedState.rightChecked = val;
  47069. if (!movedKeys) return;
  47070. emit(RIGHT_CHECK_CHANGE_EVENT, val, movedKeys);
  47071. };
  47072. return {
  47073. onSourceCheckedChange,
  47074. onTargetCheckedChange
  47075. };
  47076. };
  47077. //#endregion
  47078. //#region ../../packages/components/transfer/src/composables/use-computed-data.ts
  47079. const useComputedData = (props) => {
  47080. const propsAlias = usePropsAlias(props);
  47081. const dataObj = (0, vue.computed)(() => props.data.reduce((o, cur) => (o[cur[propsAlias.value.key]] = cur, o), {}));
  47082. return {
  47083. sourceData: (0, vue.computed)(() => props.data.filter((item) => !props.modelValue.includes(item[propsAlias.value.key]))),
  47084. targetData: (0, vue.computed)(() => {
  47085. if (props.targetOrder === "original") return props.data.filter((item) => props.modelValue.includes(item[propsAlias.value.key]));
  47086. else return props.modelValue.reduce((arr, cur) => {
  47087. const val = dataObj.value[cur];
  47088. if (val) arr.push(val);
  47089. return arr;
  47090. }, []);
  47091. })
  47092. };
  47093. };
  47094. //#endregion
  47095. //#region ../../packages/components/transfer/src/composables/use-move.ts
  47096. const useMove = (props, checkedState, emit) => {
  47097. const propsAlias = usePropsAlias(props);
  47098. const _emit = (value, direction, movedKeys) => {
  47099. emit(UPDATE_MODEL_EVENT, value);
  47100. emit(CHANGE_EVENT, value, direction, movedKeys);
  47101. };
  47102. const addToLeft = () => {
  47103. const currentValue = props.modelValue.slice();
  47104. checkedState.rightChecked.forEach((item) => {
  47105. const index = currentValue.indexOf(item);
  47106. if (index > -1) currentValue.splice(index, 1);
  47107. });
  47108. _emit(currentValue, "left", checkedState.rightChecked);
  47109. };
  47110. const addToRight = () => {
  47111. let currentValue = props.modelValue.slice();
  47112. const itemsToBeMoved = props.data.filter((item) => {
  47113. const itemKey = item[propsAlias.value.key];
  47114. return checkedState.leftChecked.includes(itemKey) && !props.modelValue.includes(itemKey);
  47115. }).map((item) => item[propsAlias.value.key]);
  47116. currentValue = props.targetOrder === "unshift" ? itemsToBeMoved.concat(currentValue) : currentValue.concat(itemsToBeMoved);
  47117. if (props.targetOrder === "original") currentValue = props.data.filter((item) => currentValue.includes(item[propsAlias.value.key])).map((item) => item[propsAlias.value.key]);
  47118. _emit(currentValue, "right", checkedState.leftChecked);
  47119. };
  47120. return {
  47121. addToLeft,
  47122. addToRight
  47123. };
  47124. };
  47125. //#endregion
  47126. //#region ../../packages/components/transfer/src/transfer-panel.vue?vue&type=script&setup=true&lang.ts
  47127. var transfer_panel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  47128. name: "ElTransferPanel",
  47129. __name: "transfer-panel",
  47130. props: transferPanelProps,
  47131. emits: transferPanelEmits,
  47132. setup(__props, { expose: __expose, emit: __emit }) {
  47133. const props = __props;
  47134. const emit = __emit;
  47135. const slots = (0, vue.useSlots)();
  47136. const OptionContent = ({ option }) => option;
  47137. const { t } = useLocale();
  47138. const ns = useNamespace("transfer");
  47139. const panelState = (0, vue.reactive)({
  47140. checked: [],
  47141. allChecked: false,
  47142. query: "",
  47143. checkChangeByUser: true
  47144. });
  47145. const propsAlias = usePropsAlias(props);
  47146. const { filteredData, checkedSummary, isIndeterminate, handleAllCheckedChange } = useCheck$1(props, panelState, emit);
  47147. const hasNoMatch = (0, vue.computed)(() => !isEmpty(panelState.query) && isEmpty(filteredData.value));
  47148. const hasFooter = (0, vue.computed)(() => !isEmpty(slots.default()[0].children));
  47149. const { checked, allChecked, query } = (0, vue.toRefs)(panelState);
  47150. __expose({ query });
  47151. return (_ctx, _cache) => {
  47152. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("panel")) }, [
  47153. (0, vue.createElementVNode)("p", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "header")) }, [(0, vue.createVNode)((0, vue.unref)(ElCheckbox), {
  47154. modelValue: (0, vue.unref)(allChecked),
  47155. "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => (0, vue.isRef)(allChecked) ? allChecked.value = $event : null),
  47156. indeterminate: (0, vue.unref)(isIndeterminate),
  47157. "validate-event": false,
  47158. onChange: (0, vue.unref)(handleAllCheckedChange)
  47159. }, {
  47160. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "header-title")) }, (0, vue.toDisplayString)(__props.title), 3), (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "header-count")) }, (0, vue.toDisplayString)((0, vue.unref)(checkedSummary)), 3)]),
  47161. _: 1
  47162. }, 8, [
  47163. "modelValue",
  47164. "indeterminate",
  47165. "onChange"
  47166. ])], 2),
  47167. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).be("panel", "body"), (0, vue.unref)(ns).is("with-footer", hasFooter.value)]) }, [
  47168. __props.filterable ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElInput), {
  47169. key: 0,
  47170. modelValue: (0, vue.unref)(query),
  47171. "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => (0, vue.isRef)(query) ? query.value = $event : null),
  47172. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "filter")),
  47173. size: "default",
  47174. placeholder: __props.placeholder,
  47175. "prefix-icon": (0, vue.unref)(search_default),
  47176. clearable: "",
  47177. "validate-event": false
  47178. }, null, 8, [
  47179. "modelValue",
  47180. "class",
  47181. "placeholder",
  47182. "prefix-icon"
  47183. ])) : (0, vue.createCommentVNode)("v-if", true),
  47184. (0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElCheckboxGroup), {
  47185. modelValue: (0, vue.unref)(checked),
  47186. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => (0, vue.isRef)(checked) ? checked.value = $event : null),
  47187. "validate-event": false,
  47188. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).is("filterable", __props.filterable), (0, vue.unref)(ns).be("panel", "list")])
  47189. }, {
  47190. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)((0, vue.unref)(filteredData), (item) => {
  47191. return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElCheckbox), {
  47192. key: item[(0, vue.unref)(propsAlias).key],
  47193. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "item")),
  47194. value: item[(0, vue.unref)(propsAlias).key],
  47195. disabled: item[(0, vue.unref)(propsAlias).disabled],
  47196. "validate-event": false
  47197. }, {
  47198. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(OptionContent, { option: __props.optionRender?.(item) }, null, 8, ["option"])]),
  47199. _: 2
  47200. }, 1032, [
  47201. "class",
  47202. "value",
  47203. "disabled"
  47204. ]);
  47205. }), 128))]),
  47206. _: 1
  47207. }, 8, ["modelValue", "class"]), [[vue.vShow, !hasNoMatch.value && !(0, vue.unref)(isEmpty)(__props.data)]]),
  47208. (0, vue.withDirectives)((0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "empty")) }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(hasNoMatch.value ? (0, vue.unref)(t)("el.transfer.noMatch") : (0, vue.unref)(t)("el.transfer.noData")), 1)])], 2), [[vue.vShow, hasNoMatch.value || (0, vue.unref)(isEmpty)(__props.data)]])
  47209. ], 2),
  47210. hasFooter.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", {
  47211. key: 0,
  47212. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("panel", "footer"))
  47213. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  47214. ], 2);
  47215. };
  47216. }
  47217. });
  47218. //#endregion
  47219. //#region ../../packages/components/transfer/src/transfer-panel.vue
  47220. var transfer_panel_default = transfer_panel_vue_vue_type_script_setup_true_lang_default;
  47221. //#endregion
  47222. //#region ../../packages/components/transfer/src/transfer.vue?vue&type=script&setup=true&lang.ts
  47223. const _hoisted_1$13 = { key: 0 };
  47224. const _hoisted_2$8 = { key: 0 };
  47225. var transfer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  47226. name: "ElTransfer",
  47227. __name: "transfer",
  47228. props: transferProps,
  47229. emits: transferEmits,
  47230. setup(__props, { expose: __expose, emit: __emit }) {
  47231. const props = __props;
  47232. const emit = __emit;
  47233. const slots = (0, vue.useSlots)();
  47234. const { t } = useLocale();
  47235. const ns = useNamespace("transfer");
  47236. const { formItem } = useFormItem();
  47237. const checkedState = (0, vue.reactive)({
  47238. leftChecked: [],
  47239. rightChecked: []
  47240. });
  47241. const propsAlias = usePropsAlias(props);
  47242. const { sourceData, targetData } = useComputedData(props);
  47243. const { onSourceCheckedChange, onTargetCheckedChange } = useCheckedChange(checkedState, emit);
  47244. const { addToLeft, addToRight } = useMove(props, checkedState, emit);
  47245. const leftPanel = (0, vue.ref)();
  47246. const rightPanel = (0, vue.ref)();
  47247. const clearQuery = (which) => {
  47248. switch (which) {
  47249. case "left":
  47250. leftPanel.value.query = "";
  47251. break;
  47252. case "right":
  47253. rightPanel.value.query = "";
  47254. break;
  47255. }
  47256. };
  47257. const hasButtonTexts = (0, vue.computed)(() => props.buttonTexts.length === 2);
  47258. const leftPanelTitle = (0, vue.computed)(() => props.titles[0] || t("el.transfer.titles.0"));
  47259. const rightPanelTitle = (0, vue.computed)(() => props.titles[1] || t("el.transfer.titles.1"));
  47260. const panelFilterPlaceholder = (0, vue.computed)(() => props.filterPlaceholder || t("el.transfer.filterPlaceholder"));
  47261. (0, vue.watch)(() => props.modelValue, () => {
  47262. if (props.validateEvent) formItem?.validate?.("change").catch(NOOP);
  47263. });
  47264. const optionRender = (0, vue.computed)(() => (option) => {
  47265. if (props.renderContent) return props.renderContent(vue.h, option);
  47266. const defaultSlotVNodes = (slots.default?.({ option }) || []).filter((node) => node.type !== vue.Comment);
  47267. if (defaultSlotVNodes.length) return defaultSlotVNodes;
  47268. return (0, vue.h)("span", option[propsAlias.value.label] || option[propsAlias.value.key]);
  47269. });
  47270. __expose({
  47271. clearQuery,
  47272. leftPanel,
  47273. rightPanel
  47274. });
  47275. return (_ctx, _cache) => {
  47276. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b()) }, [
  47277. (0, vue.createVNode)(transfer_panel_default, {
  47278. ref_key: "leftPanel",
  47279. ref: leftPanel,
  47280. data: (0, vue.unref)(sourceData),
  47281. "option-render": optionRender.value,
  47282. placeholder: panelFilterPlaceholder.value,
  47283. title: leftPanelTitle.value,
  47284. filterable: __props.filterable,
  47285. format: __props.format,
  47286. "filter-method": __props.filterMethod,
  47287. "default-checked": __props.leftDefaultChecked,
  47288. props: props.props,
  47289. onCheckedChange: (0, vue.unref)(onSourceCheckedChange)
  47290. }, {
  47291. empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "left-empty")]),
  47292. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "left-footer")]),
  47293. _: 3
  47294. }, 8, [
  47295. "data",
  47296. "option-render",
  47297. "placeholder",
  47298. "title",
  47299. "filterable",
  47300. "format",
  47301. "filter-method",
  47302. "default-checked",
  47303. "props",
  47304. "onCheckedChange"
  47305. ]),
  47306. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("buttons")) }, [(0, vue.createVNode)((0, vue.unref)(ElButton), {
  47307. type: "primary",
  47308. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("button"), (0, vue.unref)(ns).is("with-texts", hasButtonTexts.value)]),
  47309. disabled: (0, vue.unref)(isEmpty)(checkedState.rightChecked),
  47310. onClick: (0, vue.unref)(addToLeft)
  47311. }, {
  47312. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  47313. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_left_default))]),
  47314. _: 1
  47315. }), !(0, vue.unref)(isUndefined)(__props.buttonTexts[0]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_1$13, (0, vue.toDisplayString)(__props.buttonTexts[0]), 1)) : (0, vue.createCommentVNode)("v-if", true)]),
  47316. _: 1
  47317. }, 8, [
  47318. "class",
  47319. "disabled",
  47320. "onClick"
  47321. ]), (0, vue.createVNode)((0, vue.unref)(ElButton), {
  47322. type: "primary",
  47323. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("button"), (0, vue.unref)(ns).is("with-texts", hasButtonTexts.value)]),
  47324. disabled: (0, vue.unref)(isEmpty)(checkedState.leftChecked),
  47325. onClick: (0, vue.unref)(addToRight)
  47326. }, {
  47327. default: (0, vue.withCtx)(() => [!(0, vue.unref)(isUndefined)(__props.buttonTexts[1]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$8, (0, vue.toDisplayString)(__props.buttonTexts[1]), 1)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createVNode)((0, vue.unref)(ElIcon), null, {
  47328. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(arrow_right_default))]),
  47329. _: 1
  47330. })]),
  47331. _: 1
  47332. }, 8, [
  47333. "class",
  47334. "disabled",
  47335. "onClick"
  47336. ])], 2),
  47337. (0, vue.createVNode)(transfer_panel_default, {
  47338. ref_key: "rightPanel",
  47339. ref: rightPanel,
  47340. data: (0, vue.unref)(targetData),
  47341. "option-render": optionRender.value,
  47342. placeholder: panelFilterPlaceholder.value,
  47343. filterable: __props.filterable,
  47344. format: __props.format,
  47345. "filter-method": __props.filterMethod,
  47346. title: rightPanelTitle.value,
  47347. "default-checked": __props.rightDefaultChecked,
  47348. props: props.props,
  47349. onCheckedChange: (0, vue.unref)(onTargetCheckedChange)
  47350. }, {
  47351. empty: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "right-empty")]),
  47352. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "right-footer")]),
  47353. _: 3
  47354. }, 8, [
  47355. "data",
  47356. "option-render",
  47357. "placeholder",
  47358. "filterable",
  47359. "format",
  47360. "filter-method",
  47361. "title",
  47362. "default-checked",
  47363. "props",
  47364. "onCheckedChange"
  47365. ])
  47366. ], 2);
  47367. };
  47368. }
  47369. });
  47370. //#endregion
  47371. //#region ../../packages/components/transfer/src/transfer.vue
  47372. var transfer_default = transfer_vue_vue_type_script_setup_true_lang_default;
  47373. //#endregion
  47374. //#region ../../packages/components/transfer/index.ts
  47375. const ElTransfer = withInstall(transfer_default);
  47376. //#endregion
  47377. //#region ../../packages/components/tree/src/model/util.ts
  47378. const NODE_KEY = "$treeNodeId";
  47379. const markNodeData = function(node, data) {
  47380. if (!data || data["$treeNodeId"]) return;
  47381. Object.defineProperty(data, NODE_KEY, {
  47382. value: node.id,
  47383. enumerable: false,
  47384. configurable: false,
  47385. writable: false
  47386. });
  47387. };
  47388. const getNodeKey = (key, data) => data?.[key || "$treeNodeId"];
  47389. const handleCurrentChange = (store, emit, setCurrent) => {
  47390. const preCurrentNode = store.value.currentNode;
  47391. setCurrent();
  47392. const currentNode = store.value.currentNode;
  47393. if (preCurrentNode === currentNode) return;
  47394. emit("current-change", currentNode ? currentNode.data : null, currentNode);
  47395. };
  47396. //#endregion
  47397. //#region ../../packages/components/tree/src/model/node.ts
  47398. const getChildState = (node) => {
  47399. let all = true;
  47400. let none = true;
  47401. let allWithoutDisable = true;
  47402. let isEffectivelyChecked = true;
  47403. for (let i = 0, j = node.length; i < j; i++) {
  47404. const n = node[i];
  47405. if (n.checked !== true || n.indeterminate) {
  47406. all = false;
  47407. if (!n.disabled) allWithoutDisable = false;
  47408. }
  47409. if (n.checked !== false || n.indeterminate) none = false;
  47410. if (!n.isEffectivelyChecked) isEffectivelyChecked = false;
  47411. }
  47412. return {
  47413. all,
  47414. none,
  47415. allWithoutDisable,
  47416. half: !all && !none,
  47417. isEffectivelyChecked
  47418. };
  47419. };
  47420. const reInitChecked = function(node) {
  47421. if (node.childNodes.length === 0 || node.loading) {
  47422. node.isEffectivelyChecked = node.disabled || node.checked;
  47423. return;
  47424. }
  47425. const { all, none, half, isEffectivelyChecked } = getChildState(node.childNodes);
  47426. node.isEffectivelyChecked = isEffectivelyChecked;
  47427. if (all) {
  47428. node.checked = true;
  47429. node.indeterminate = false;
  47430. } else if (half) {
  47431. node.checked = false;
  47432. node.indeterminate = true;
  47433. } else if (none) {
  47434. node.checked = false;
  47435. node.indeterminate = false;
  47436. }
  47437. const parent = node.parent;
  47438. if (!parent || parent.level === 0) return;
  47439. if (!node.store.checkStrictly) reInitChecked(parent);
  47440. };
  47441. const getPropertyFromData = function(node, prop) {
  47442. const props = node.store.props;
  47443. const data = node.data || {};
  47444. const config = props[prop];
  47445. if (isFunction$1(config)) return config(data, node);
  47446. else if (isString(config)) return data[config];
  47447. else if (isUndefined(config)) {
  47448. const dataProp = data[prop];
  47449. return isUndefined(dataProp) ? "" : dataProp;
  47450. }
  47451. };
  47452. const setCanFocus = function(childNodes, focus) {
  47453. childNodes.forEach((item) => {
  47454. item.canFocus = focus;
  47455. setCanFocus(item.childNodes, focus);
  47456. });
  47457. };
  47458. let nodeIdSeed = 0;
  47459. var Node$1 = class Node$1 {
  47460. constructor(options) {
  47461. this.isLeafByUser = void 0;
  47462. this.isLeaf = void 0;
  47463. this.isEffectivelyChecked = false;
  47464. this.id = nodeIdSeed++;
  47465. this.text = null;
  47466. this.checked = false;
  47467. this.indeterminate = false;
  47468. this.data = null;
  47469. this.expanded = false;
  47470. this.parent = null;
  47471. this.visible = true;
  47472. this.isCurrent = false;
  47473. this.canFocus = false;
  47474. for (const name in options) if (hasOwn(options, name)) this[name] = options[name];
  47475. this.level = 0;
  47476. this.loaded = false;
  47477. this.childNodes = [];
  47478. this.loading = false;
  47479. if (this.parent) this.level = this.parent.level + 1;
  47480. }
  47481. initialize() {
  47482. const store = this.store;
  47483. if (!store) throw new Error("[Node]store is required!");
  47484. store.registerNode(this);
  47485. const props = store.props;
  47486. if (props && typeof props.isLeaf !== "undefined") {
  47487. const isLeaf = getPropertyFromData(this, "isLeaf");
  47488. if (isBoolean(isLeaf)) this.isLeafByUser = isLeaf;
  47489. }
  47490. if (store.lazy !== true && this.data) {
  47491. this.setData(this.data);
  47492. if (store.defaultExpandAll) {
  47493. this.expanded = true;
  47494. this.canFocus = true;
  47495. }
  47496. } else if (this.level > 0 && store.lazy && store.defaultExpandAll && !this.isLeafByUser) this.expand();
  47497. if (!isArray$1(this.data)) markNodeData(this, this.data);
  47498. if (!this.data) return;
  47499. const defaultExpandedKeys = store.defaultExpandedKeys;
  47500. const key = store.key;
  47501. if (key && !isNil(this.key) && defaultExpandedKeys && defaultExpandedKeys.includes(this.key)) this.expand(null, store.autoExpandParent);
  47502. if (key && store.currentNodeKey !== void 0 && this.key === store.currentNodeKey) {
  47503. store.currentNode && (store.currentNode.isCurrent = false);
  47504. store.currentNode = this;
  47505. store.currentNode.isCurrent = true;
  47506. }
  47507. if (store.lazy) store._initDefaultCheckedNode(this);
  47508. this.updateLeafState();
  47509. if (this.level === 1 || this.parent?.expanded === true) this.canFocus = true;
  47510. }
  47511. setData(data) {
  47512. if (!isArray$1(data)) markNodeData(this, data);
  47513. this.data = data;
  47514. this.childNodes = [];
  47515. let children;
  47516. if (this.level === 0 && isArray$1(this.data)) children = this.data;
  47517. else children = getPropertyFromData(this, "children") || [];
  47518. for (let i = 0, j = children.length; i < j; i++) this.insertChild({ data: children[i] });
  47519. }
  47520. get label() {
  47521. return getPropertyFromData(this, "label");
  47522. }
  47523. get key() {
  47524. const nodeKey = this.store.key;
  47525. if (this.data) return this.data[nodeKey];
  47526. return null;
  47527. }
  47528. get disabled() {
  47529. return getPropertyFromData(this, "disabled");
  47530. }
  47531. get nextSibling() {
  47532. const parent = this.parent;
  47533. if (parent) {
  47534. const index = parent.childNodes.indexOf(this);
  47535. if (index > -1) return parent.childNodes[index + 1];
  47536. }
  47537. return null;
  47538. }
  47539. get previousSibling() {
  47540. const parent = this.parent;
  47541. if (parent) {
  47542. const index = parent.childNodes.indexOf(this);
  47543. if (index > -1) return index > 0 ? parent.childNodes[index - 1] : null;
  47544. }
  47545. return null;
  47546. }
  47547. contains(target, deep = true) {
  47548. return (this.childNodes || []).some((child) => child === target || deep && child.contains(target));
  47549. }
  47550. remove() {
  47551. const parent = this.parent;
  47552. if (parent) parent.removeChild(this);
  47553. }
  47554. insertChild(child, index, batch) {
  47555. if (!child) throw new Error("InsertChild error: child is required.");
  47556. if (!(child instanceof Node$1)) {
  47557. if (!batch) {
  47558. const children = this.getChildren(true);
  47559. if (!children?.includes(child.data)) if (isUndefined(index) || index < 0) children?.push(child.data);
  47560. else children?.splice(index, 0, child.data);
  47561. }
  47562. Object.assign(child, {
  47563. parent: this,
  47564. store: this.store
  47565. });
  47566. child = (0, vue.reactive)(new Node$1(child));
  47567. if (child instanceof Node$1) child.initialize();
  47568. }
  47569. child.level = this.level + 1;
  47570. if (isUndefined(index) || index < 0) this.childNodes.push(child);
  47571. else this.childNodes.splice(index, 0, child);
  47572. this.updateLeafState();
  47573. }
  47574. insertBefore(child, ref) {
  47575. let index;
  47576. if (ref) index = this.childNodes.indexOf(ref);
  47577. this.insertChild(child, index);
  47578. }
  47579. insertAfter(child, ref) {
  47580. let index;
  47581. if (ref) {
  47582. index = this.childNodes.indexOf(ref);
  47583. if (index !== -1) index += 1;
  47584. }
  47585. this.insertChild(child, index);
  47586. }
  47587. removeChild(child) {
  47588. const children = this.getChildren() || [];
  47589. const dataIndex = children.indexOf(child.data);
  47590. if (dataIndex > -1) children.splice(dataIndex, 1);
  47591. const index = this.childNodes.indexOf(child);
  47592. if (index > -1) {
  47593. this.store && this.store.deregisterNode(child);
  47594. child.parent = null;
  47595. this.childNodes.splice(index, 1);
  47596. }
  47597. this.updateLeafState();
  47598. }
  47599. removeChildByData(data) {
  47600. const targetNode = this.childNodes.find((child) => child.data === data);
  47601. if (targetNode) this.removeChild(targetNode);
  47602. }
  47603. expand(callback, expandParent) {
  47604. const done = () => {
  47605. if (expandParent) {
  47606. let parent = this.parent;
  47607. while (parent && parent.level > 0) {
  47608. parent.expanded = true;
  47609. parent = parent.parent;
  47610. }
  47611. }
  47612. this.expanded = true;
  47613. if (callback) callback();
  47614. setCanFocus(this.childNodes, true);
  47615. };
  47616. if (this.shouldLoadData()) this.loadData((data) => {
  47617. if (isArray$1(data)) {
  47618. if (!this.store.checkStrictly) if (this.checked) this.setChecked(true, true);
  47619. else reInitChecked(this);
  47620. done();
  47621. }
  47622. });
  47623. else done();
  47624. }
  47625. doCreateChildren(array, defaultProps = {}) {
  47626. array.forEach((item) => {
  47627. this.insertChild(Object.assign({ data: item }, defaultProps), void 0, true);
  47628. });
  47629. }
  47630. collapse() {
  47631. this.expanded = false;
  47632. setCanFocus(this.childNodes, false);
  47633. }
  47634. shouldLoadData() {
  47635. return Boolean(this.store.lazy === true && this.store.load && !this.loaded);
  47636. }
  47637. updateLeafState() {
  47638. if (this.store.lazy === true && this.loaded !== true && typeof this.isLeafByUser !== "undefined") {
  47639. this.isLeaf = this.isLeafByUser;
  47640. this.isEffectivelyChecked = this.isLeaf && this.disabled;
  47641. return;
  47642. }
  47643. const childNodes = this.childNodes;
  47644. if (!this.store.lazy || this.store.lazy === true && this.loaded === true) {
  47645. this.isLeaf = !childNodes || childNodes.length === 0;
  47646. this.isEffectivelyChecked = this.isLeaf && this.disabled;
  47647. return;
  47648. }
  47649. this.isLeaf = false;
  47650. }
  47651. setChecked(value, deep, recursion, passValue) {
  47652. this.indeterminate = value === "half";
  47653. this.checked = value === true;
  47654. this.isEffectivelyChecked = !this.childNodes.length && (this.disabled || this.checked);
  47655. if (this.store.checkStrictly && !deep) return;
  47656. if (!(this.shouldLoadData() && !this.store.checkDescendants)) {
  47657. const handleDescendants = () => {
  47658. if (deep) {
  47659. const childNodes = this.childNodes;
  47660. for (let i = 0, j = childNodes.length; i < j; i++) {
  47661. const child = childNodes[i];
  47662. passValue = passValue || value !== false;
  47663. const isCheck = child.disabled && child.isLeaf ? child.checked : passValue;
  47664. child.setChecked(isCheck, deep, true, passValue);
  47665. }
  47666. const { half, all, isEffectivelyChecked } = getChildState(childNodes);
  47667. if (!all) {
  47668. this.checked = all;
  47669. this.indeterminate = half;
  47670. }
  47671. this.isEffectivelyChecked = !this.childNodes.length ? this.disabled || this.checked : isEffectivelyChecked;
  47672. }
  47673. };
  47674. if (this.shouldLoadData()) {
  47675. this.loadData(() => {
  47676. handleDescendants();
  47677. reInitChecked(this);
  47678. }, { checked: value !== false });
  47679. return;
  47680. } else handleDescendants();
  47681. }
  47682. const parent = this.parent;
  47683. if (!parent || parent.level === 0) return;
  47684. if (!recursion && !this.store.checkStrictly) reInitChecked(parent);
  47685. }
  47686. getChildren(forceInit = false) {
  47687. if (this.level === 0) return this.data;
  47688. const data = this.data;
  47689. if (!data) return null;
  47690. const props = this.store.props;
  47691. let children = "children";
  47692. if (props) children = props.children || "children";
  47693. if (isUndefined(data[children])) data[children] = null;
  47694. if (forceInit && !data[children]) data[children] = [];
  47695. return data[children];
  47696. }
  47697. updateChildren() {
  47698. const newData = this.getChildren() || [];
  47699. const oldData = this.childNodes.map((node) => node.data);
  47700. const newDataMap = {};
  47701. const newNodes = [];
  47702. newData.forEach((item, index) => {
  47703. const key = item[NODE_KEY];
  47704. if (!!key && oldData.some((data) => data?.["$treeNodeId"] === key)) newDataMap[key] = {
  47705. index,
  47706. data: item
  47707. };
  47708. else newNodes.push({
  47709. index,
  47710. data: item
  47711. });
  47712. });
  47713. if (!this.store.lazy) oldData.forEach((item) => {
  47714. if (!newDataMap[item?.["$treeNodeId"]]) this.removeChildByData(item);
  47715. });
  47716. newNodes.forEach(({ index, data }) => {
  47717. this.insertChild({ data }, index);
  47718. });
  47719. this.updateLeafState();
  47720. }
  47721. loadData(callback, defaultProps = {}) {
  47722. if (this.store.lazy === true && this.store.load && !this.loaded && (!this.loading || Object.keys(defaultProps).length)) {
  47723. this.loading = true;
  47724. const resolve = (children) => {
  47725. this.childNodes = [];
  47726. this.doCreateChildren(children, defaultProps);
  47727. this.loaded = true;
  47728. this.loading = false;
  47729. this.updateLeafState();
  47730. if (callback) callback.call(this, children);
  47731. };
  47732. const reject = () => {
  47733. this.loading = false;
  47734. };
  47735. this.store.load(this, resolve, reject);
  47736. } else if (callback) callback.call(this);
  47737. }
  47738. eachNode(callback) {
  47739. const arr = [this];
  47740. while (arr.length) {
  47741. const node = arr.shift();
  47742. arr.unshift(...node.childNodes);
  47743. callback(node);
  47744. }
  47745. }
  47746. reInitChecked() {
  47747. if (this.store.checkStrictly) return;
  47748. reInitChecked(this);
  47749. }
  47750. };
  47751. //#endregion
  47752. //#region ../../packages/components/tree/src/model/tree-store.ts
  47753. var TreeStore = class {
  47754. constructor(options) {
  47755. this.lazy = false;
  47756. this.checkStrictly = false;
  47757. this.autoExpandParent = false;
  47758. this.defaultExpandAll = false;
  47759. this.checkDescendants = false;
  47760. this.currentNode = null;
  47761. this.currentNodeKey = null;
  47762. for (const option in options) if (hasOwn(options, option)) this[option] = options[option];
  47763. this.nodesMap = {};
  47764. }
  47765. initialize() {
  47766. this.root = new Node$1({
  47767. data: this.data,
  47768. store: this
  47769. });
  47770. this.root.initialize();
  47771. if (this.lazy && this.load) {
  47772. const loadFn = this.load;
  47773. loadFn(this.root, (data) => {
  47774. this.root.doCreateChildren(data);
  47775. this._initDefaultCheckedNodes();
  47776. }, NOOP);
  47777. } else this._initDefaultCheckedNodes();
  47778. }
  47779. filter(value) {
  47780. const filterNodeMethod = this.filterNodeMethod;
  47781. const lazy = this.lazy;
  47782. const traverse = async function(node) {
  47783. const childNodes = node.root ? node.root.childNodes : node.childNodes;
  47784. for (const [index, child] of childNodes.entries()) {
  47785. child.visible = !!filterNodeMethod?.call(child, value, child.data, child);
  47786. if (index % 80 === 0 && index > 0) await (0, vue.nextTick)();
  47787. await traverse(child);
  47788. }
  47789. if (!node.visible && childNodes.length) {
  47790. let allHidden = true;
  47791. allHidden = !childNodes.some((child) => child.visible);
  47792. if (node.root) node.root.visible = allHidden === false;
  47793. else node.visible = allHidden === false;
  47794. }
  47795. if (!value) return;
  47796. if (node.visible && !node.isLeaf) {
  47797. if (!lazy || node.loaded) node.expand();
  47798. }
  47799. };
  47800. traverse(this);
  47801. }
  47802. setData(newVal) {
  47803. if (newVal !== this.root.data) {
  47804. this.nodesMap = {};
  47805. this.root.setData(newVal);
  47806. this._initDefaultCheckedNodes();
  47807. this.setCurrentNodeKey(this.currentNodeKey);
  47808. } else this.root.updateChildren();
  47809. }
  47810. getNode(data) {
  47811. if (data instanceof Node$1) return data;
  47812. const key = isObject$1(data) ? getNodeKey(this.key, data) : data;
  47813. return this.nodesMap[key] || null;
  47814. }
  47815. insertBefore(data, refData) {
  47816. const refNode = this.getNode(refData);
  47817. refNode.parent?.insertBefore({ data }, refNode);
  47818. }
  47819. insertAfter(data, refData) {
  47820. const refNode = this.getNode(refData);
  47821. refNode.parent?.insertAfter({ data }, refNode);
  47822. }
  47823. remove(data) {
  47824. const node = this.getNode(data);
  47825. if (node && node.parent) {
  47826. if (node === this.currentNode) this.currentNode = null;
  47827. node.parent.removeChild(node);
  47828. }
  47829. }
  47830. append(data, parentData) {
  47831. const parentNode = !isPropAbsent(parentData) ? this.getNode(parentData) : this.root;
  47832. if (parentNode) parentNode.insertChild({ data });
  47833. }
  47834. _initDefaultCheckedNodes() {
  47835. const defaultCheckedKeys = this.defaultCheckedKeys || [];
  47836. const nodesMap = this.nodesMap;
  47837. defaultCheckedKeys.forEach((checkedKey) => {
  47838. const node = nodesMap[checkedKey];
  47839. if (node) node.setChecked(true, !this.checkStrictly);
  47840. });
  47841. }
  47842. _initDefaultCheckedNode(node) {
  47843. const defaultCheckedKeys = this.defaultCheckedKeys || [];
  47844. if (!isNil(node.key) && defaultCheckedKeys.includes(node.key)) node.setChecked(true, !this.checkStrictly);
  47845. }
  47846. setDefaultCheckedKey(newVal) {
  47847. if (newVal !== this.defaultCheckedKeys) {
  47848. this.defaultCheckedKeys = newVal;
  47849. this._initDefaultCheckedNodes();
  47850. }
  47851. }
  47852. registerNode(node) {
  47853. const key = this.key;
  47854. if (!node || !node.data) return;
  47855. if (!key) this.nodesMap[node.id] = node;
  47856. else {
  47857. const nodeKey = node.key;
  47858. if (!isNil(nodeKey)) this.nodesMap[nodeKey] = node;
  47859. }
  47860. }
  47861. deregisterNode(node) {
  47862. if (!this.key || !node || !node.data) return;
  47863. node.childNodes.forEach((child) => {
  47864. this.deregisterNode(child);
  47865. });
  47866. delete this.nodesMap[node.key];
  47867. }
  47868. getCheckedNodes(leafOnly = false, includeHalfChecked = false) {
  47869. const checkedNodes = [];
  47870. const traverse = function(node) {
  47871. (node.root ? node.root.childNodes : node.childNodes).forEach((child) => {
  47872. if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) checkedNodes.push(child.data);
  47873. traverse(child);
  47874. });
  47875. };
  47876. traverse(this);
  47877. return checkedNodes;
  47878. }
  47879. getCheckedKeys(leafOnly = false) {
  47880. return this.getCheckedNodes(leafOnly).map((data) => (data || {})[this.key]);
  47881. }
  47882. getHalfCheckedNodes() {
  47883. const nodes = [];
  47884. const traverse = function(node) {
  47885. (node.root ? node.root.childNodes : node.childNodes).forEach((child) => {
  47886. if (child.indeterminate) nodes.push(child.data);
  47887. traverse(child);
  47888. });
  47889. };
  47890. traverse(this);
  47891. return nodes;
  47892. }
  47893. getHalfCheckedKeys() {
  47894. return this.getHalfCheckedNodes().map((data) => (data || {})[this.key]);
  47895. }
  47896. _getAllNodes() {
  47897. const allNodes = [];
  47898. const nodesMap = this.nodesMap;
  47899. for (const nodeKey in nodesMap) if (hasOwn(nodesMap, nodeKey)) allNodes.push(nodesMap[nodeKey]);
  47900. return allNodes;
  47901. }
  47902. updateChildren(key, data) {
  47903. const node = this.nodesMap[key];
  47904. if (!node) return;
  47905. const childNodes = node.childNodes;
  47906. for (let i = childNodes.length - 1; i >= 0; i--) {
  47907. const child = childNodes[i];
  47908. this.remove(child.data);
  47909. }
  47910. for (let i = 0, j = data.length; i < j; i++) {
  47911. const child = data[i];
  47912. this.append(child, node.data);
  47913. }
  47914. }
  47915. _setCheckedKeys(key, leafOnly = false, checkedKeys) {
  47916. const allNodes = this._getAllNodes().sort((a, b) => a.level - b.level);
  47917. const cache = Object.create(null);
  47918. const keys = Object.keys(checkedKeys);
  47919. allNodes.forEach((node) => node.setChecked(false, false));
  47920. const cacheCheckedChild = (node) => {
  47921. node.childNodes.forEach((child) => {
  47922. cache[child.data[key]] = true;
  47923. if (child.childNodes?.length) cacheCheckedChild(child);
  47924. });
  47925. };
  47926. for (let i = 0, j = allNodes.length; i < j; i++) {
  47927. const node = allNodes[i];
  47928. const nodeKey = node.data[key].toString();
  47929. if (!keys.includes(nodeKey)) {
  47930. if (node.checked && !cache[nodeKey]) node.setChecked(false, false);
  47931. continue;
  47932. }
  47933. if (node.childNodes.length) cacheCheckedChild(node);
  47934. if (node.isLeaf || this.checkStrictly) {
  47935. node.setChecked(true, false);
  47936. continue;
  47937. }
  47938. node.setChecked(true, true);
  47939. if (leafOnly) {
  47940. node.setChecked(false, false, true);
  47941. const traverse = function(node) {
  47942. node.childNodes.forEach((child) => {
  47943. if (!child.isLeaf) child.setChecked(false, false, true);
  47944. traverse(child);
  47945. });
  47946. node.reInitChecked();
  47947. };
  47948. traverse(node);
  47949. }
  47950. }
  47951. }
  47952. setCheckedNodes(array, leafOnly = false) {
  47953. const key = this.key;
  47954. const checkedKeys = {};
  47955. array.forEach((item) => {
  47956. checkedKeys[(item || {})[key]] = true;
  47957. });
  47958. this._setCheckedKeys(key, leafOnly, checkedKeys);
  47959. }
  47960. setCheckedKeys(keys, leafOnly = false) {
  47961. this.defaultCheckedKeys = keys;
  47962. const key = this.key;
  47963. const checkedKeys = {};
  47964. keys.forEach((key) => {
  47965. checkedKeys[key] = true;
  47966. });
  47967. this._setCheckedKeys(key, leafOnly, checkedKeys);
  47968. }
  47969. setDefaultExpandedKeys(keys) {
  47970. keys = keys || [];
  47971. this.defaultExpandedKeys = keys;
  47972. keys.forEach((key) => {
  47973. const node = this.getNode(key);
  47974. if (node) node.expand(null, this.autoExpandParent);
  47975. });
  47976. }
  47977. setChecked(data, checked, deep) {
  47978. const node = this.getNode(data);
  47979. if (node) node.setChecked(!!checked, deep);
  47980. }
  47981. getCurrentNode() {
  47982. return this.currentNode;
  47983. }
  47984. setCurrentNode(currentNode) {
  47985. const prevCurrentNode = this.currentNode;
  47986. if (prevCurrentNode) prevCurrentNode.isCurrent = false;
  47987. this.currentNode = currentNode;
  47988. this.currentNode.isCurrent = true;
  47989. }
  47990. setUserCurrentNode(node, shouldAutoExpandParent = true) {
  47991. const key = node[this.key];
  47992. const currNode = this.nodesMap[key];
  47993. this.setCurrentNode(currNode);
  47994. if (shouldAutoExpandParent && this.currentNode && this.currentNode.level > 1) this.currentNode.parent?.expand(null, true);
  47995. }
  47996. setCurrentNodeKey(key, shouldAutoExpandParent = true) {
  47997. this.currentNodeKey = key;
  47998. if (isPropAbsent(key)) {
  47999. this.currentNode && (this.currentNode.isCurrent = false);
  48000. this.currentNode = null;
  48001. return;
  48002. }
  48003. const node = this.getNode(key);
  48004. if (node) {
  48005. this.setCurrentNode(node);
  48006. if (shouldAutoExpandParent && this.currentNode && this.currentNode.level > 1) this.currentNode.parent?.expand(null, true);
  48007. }
  48008. }
  48009. };
  48010. //#endregion
  48011. //#region ../../packages/components/tree/src/tokens.ts
  48012. const ROOT_TREE_INJECTION_KEY = "RootTree";
  48013. const NODE_INSTANCE_INJECTION_KEY = "NodeInstance";
  48014. const TREE_NODE_MAP_INJECTION_KEY = "TreeNodeMap";
  48015. //#endregion
  48016. //#region ../../packages/components/tree/src/tree-node-content.vue?vue&type=script&lang.ts
  48017. var tree_node_content_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  48018. name: "ElTreeNodeContent",
  48019. props: {
  48020. node: {
  48021. type: Object,
  48022. required: true
  48023. },
  48024. renderContent: Function
  48025. },
  48026. setup(props) {
  48027. const ns = useNamespace("tree");
  48028. const nodeInstance = (0, vue.inject)(NODE_INSTANCE_INJECTION_KEY);
  48029. const tree = (0, vue.inject)(ROOT_TREE_INJECTION_KEY);
  48030. return () => {
  48031. const node = props.node;
  48032. const { data, store } = node;
  48033. return props.renderContent ? props.renderContent(vue.h, {
  48034. _self: nodeInstance,
  48035. node,
  48036. data,
  48037. store
  48038. }) : (0, vue.renderSlot)(tree.ctx.slots, "default", {
  48039. node,
  48040. data
  48041. }, () => [(0, vue.h)(ElText, {
  48042. tag: "span",
  48043. truncated: true,
  48044. class: ns.be("node", "label")
  48045. }, () => [node.label])]);
  48046. };
  48047. }
  48048. });
  48049. //#endregion
  48050. //#region ../../packages/components/tree/src/tree-node-content.vue
  48051. var tree_node_content_default$1 = tree_node_content_vue_vue_type_script_lang_default;
  48052. //#endregion
  48053. //#region ../../packages/components/tree/src/model/useNodeExpandEventBroadcast.ts
  48054. function useNodeExpandEventBroadcast(props) {
  48055. const parentNodeMap = (0, vue.inject)(TREE_NODE_MAP_INJECTION_KEY, null);
  48056. let currentNodeMap = {
  48057. treeNodeExpand: (node) => {
  48058. if (props.node !== node) props.node?.collapse();
  48059. },
  48060. children: /* @__PURE__ */ new Set()
  48061. };
  48062. if (parentNodeMap) parentNodeMap.children.add(currentNodeMap);
  48063. (0, vue.onBeforeUnmount)(() => {
  48064. if (parentNodeMap) parentNodeMap.children.delete(currentNodeMap);
  48065. currentNodeMap = null;
  48066. });
  48067. (0, vue.provide)(TREE_NODE_MAP_INJECTION_KEY, currentNodeMap);
  48068. return { broadcastExpanded: (node) => {
  48069. if (!props.accordion) return;
  48070. for (const childNode of currentNodeMap.children) childNode.treeNodeExpand(node);
  48071. } };
  48072. }
  48073. //#endregion
  48074. //#region ../../packages/components/tree/src/model/useDragNode.ts
  48075. const dragEventsKey = Symbol("dragEvents");
  48076. function useDragNodeHandler({ props, ctx, el$, dropIndicator$, store }) {
  48077. const ns = useNamespace("tree");
  48078. const dragState = (0, vue.ref)({
  48079. showDropIndicator: false,
  48080. draggingNode: null,
  48081. dropNode: null,
  48082. allowDrop: true,
  48083. dropType: null
  48084. });
  48085. const treeNodeDragStart = ({ event, treeNode }) => {
  48086. if (!event.dataTransfer) return;
  48087. if (isFunction$1(props.allowDrag) && !props.allowDrag(treeNode.node)) {
  48088. event.preventDefault();
  48089. return false;
  48090. }
  48091. event.dataTransfer.effectAllowed = "move";
  48092. try {
  48093. event.dataTransfer.setData("text/plain", "");
  48094. } catch {}
  48095. dragState.value.draggingNode = treeNode;
  48096. ctx.emit("node-drag-start", treeNode.node, event);
  48097. };
  48098. const treeNodeDragOver = ({ event, treeNode }) => {
  48099. if (!event.dataTransfer) return;
  48100. const dropNode = treeNode;
  48101. const oldDropNode = dragState.value.dropNode;
  48102. if (oldDropNode && oldDropNode.node.id !== dropNode.node.id) removeClass(oldDropNode.$el, ns.is("drop-inner"));
  48103. const draggingNode = dragState.value.draggingNode;
  48104. if (!draggingNode || !dropNode) return;
  48105. let dropPrev = true;
  48106. let dropInner = true;
  48107. let dropNext = true;
  48108. let userAllowDropInner = true;
  48109. if (isFunction$1(props.allowDrop)) {
  48110. dropPrev = props.allowDrop(draggingNode.node, dropNode.node, "prev");
  48111. userAllowDropInner = dropInner = props.allowDrop(draggingNode.node, dropNode.node, "inner");
  48112. dropNext = props.allowDrop(draggingNode.node, dropNode.node, "next");
  48113. }
  48114. event.dataTransfer.dropEffect = dropInner || dropPrev || dropNext ? "move" : "none";
  48115. if ((dropPrev || dropInner || dropNext) && oldDropNode?.node.id !== dropNode.node.id) {
  48116. if (oldDropNode) ctx.emit("node-drag-leave", draggingNode.node, oldDropNode.node, event);
  48117. ctx.emit("node-drag-enter", draggingNode.node, dropNode.node, event);
  48118. }
  48119. if (dropPrev || dropInner || dropNext) dragState.value.dropNode = dropNode;
  48120. else dragState.value.dropNode = null;
  48121. if (dropNode.node.nextSibling === draggingNode.node) dropNext = false;
  48122. if (dropNode.node.previousSibling === draggingNode.node) dropPrev = false;
  48123. if (dropNode.node.contains(draggingNode.node, false)) dropInner = false;
  48124. if (draggingNode.node === dropNode.node || draggingNode.node.contains(dropNode.node)) {
  48125. dropPrev = false;
  48126. dropInner = false;
  48127. dropNext = false;
  48128. }
  48129. const dropEl = dropNode.$el;
  48130. const targetPosition = dropEl.querySelector(`.${ns.be("node", "content")}`).getBoundingClientRect();
  48131. const treePosition = el$.value.getBoundingClientRect();
  48132. const treeScrollTop = el$.value.scrollTop;
  48133. let dropType;
  48134. const prevPercent = dropPrev ? dropInner ? .25 : dropNext ? .45 : 1 : Number.NEGATIVE_INFINITY;
  48135. const nextPercent = dropNext ? dropInner ? .75 : dropPrev ? .55 : 0 : Number.POSITIVE_INFINITY;
  48136. let indicatorTop = -9999;
  48137. const distance = event.clientY - targetPosition.top;
  48138. if (distance < targetPosition.height * prevPercent) dropType = "before";
  48139. else if (distance > targetPosition.height * nextPercent) dropType = "after";
  48140. else if (dropInner) dropType = "inner";
  48141. else dropType = "none";
  48142. const iconPosition = dropEl.querySelector(`.${ns.be("node", "expand-icon")}`).getBoundingClientRect();
  48143. const dropIndicator = dropIndicator$.value;
  48144. if (dropType === "before") indicatorTop = iconPosition.top - treePosition.top + treeScrollTop;
  48145. else if (dropType === "after") indicatorTop = iconPosition.bottom - treePosition.top + treeScrollTop;
  48146. dropIndicator.style.top = `${indicatorTop}px`;
  48147. dropIndicator.style.left = `${iconPosition.right - treePosition.left}px`;
  48148. if (dropType === "inner") addClass(dropEl, ns.is("drop-inner"));
  48149. else removeClass(dropEl, ns.is("drop-inner"));
  48150. dragState.value.showDropIndicator = dropType === "before" || dropType === "after";
  48151. dragState.value.allowDrop = dragState.value.showDropIndicator || userAllowDropInner;
  48152. dragState.value.dropType = dropType;
  48153. ctx.emit("node-drag-over", draggingNode.node, dropNode.node, event);
  48154. };
  48155. const treeNodeDragEnd = (event) => {
  48156. const { draggingNode, dropType, dropNode } = dragState.value;
  48157. event.preventDefault();
  48158. if (event.dataTransfer) event.dataTransfer.dropEffect = "move";
  48159. if (draggingNode?.node.data && dropNode) {
  48160. const draggingNodeCopy = { data: draggingNode.node.data };
  48161. if (dropType !== "none") draggingNode.node.remove();
  48162. if (dropType === "before") dropNode.node.parent?.insertBefore(draggingNodeCopy, dropNode.node);
  48163. else if (dropType === "after") dropNode.node.parent?.insertAfter(draggingNodeCopy, dropNode.node);
  48164. else if (dropType === "inner") dropNode.node.insertChild(draggingNodeCopy);
  48165. if (dropType !== "none") {
  48166. store.value.registerNode(draggingNodeCopy);
  48167. if (store.value.key) draggingNode.node.eachNode((node) => {
  48168. store.value.nodesMap[node.data[store.value.key]]?.setChecked(node.checked, !store.value.checkStrictly);
  48169. });
  48170. }
  48171. removeClass(dropNode.$el, ns.is("drop-inner"));
  48172. ctx.emit("node-drag-end", draggingNode.node, dropNode.node, dropType, event);
  48173. if (dropType !== "none") ctx.emit("node-drop", draggingNode.node, dropNode.node, dropType, event);
  48174. }
  48175. if (draggingNode && !dropNode) ctx.emit("node-drag-end", draggingNode.node, null, dropType, event);
  48176. dragState.value.showDropIndicator = false;
  48177. dragState.value.draggingNode = null;
  48178. dragState.value.dropNode = null;
  48179. dragState.value.allowDrop = true;
  48180. };
  48181. (0, vue.provide)(dragEventsKey, {
  48182. treeNodeDragStart,
  48183. treeNodeDragOver,
  48184. treeNodeDragEnd
  48185. });
  48186. return { dragState };
  48187. }
  48188. //#endregion
  48189. //#region ../../packages/components/tree/src/tree-node.vue?vue&type=script&lang.ts
  48190. var tree_node_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  48191. name: "ElTreeNode",
  48192. components: {
  48193. ElCollapseTransition,
  48194. ElCheckbox,
  48195. NodeContent: tree_node_content_default$1,
  48196. ElIcon,
  48197. Loading: loading_default
  48198. },
  48199. props: {
  48200. node: {
  48201. type: Node$1,
  48202. default: () => ({})
  48203. },
  48204. props: {
  48205. type: Object,
  48206. default: () => ({})
  48207. },
  48208. accordion: Boolean,
  48209. renderContent: Function,
  48210. renderAfterExpand: Boolean,
  48211. showCheckbox: Boolean
  48212. },
  48213. emits: ["node-expand"],
  48214. setup(props, ctx) {
  48215. const ns = useNamespace("tree");
  48216. const { broadcastExpanded } = useNodeExpandEventBroadcast(props);
  48217. const tree = (0, vue.inject)(ROOT_TREE_INJECTION_KEY);
  48218. const expanded = (0, vue.ref)(false);
  48219. const childNodeRendered = (0, vue.ref)(false);
  48220. const oldChecked = (0, vue.ref)();
  48221. const oldIndeterminate = (0, vue.ref)();
  48222. const node$ = (0, vue.ref)();
  48223. const dragEvents = (0, vue.inject)(dragEventsKey);
  48224. const instance = (0, vue.getCurrentInstance)();
  48225. (0, vue.provide)(NODE_INSTANCE_INJECTION_KEY, instance);
  48226. if (!tree) /* @__PURE__ */ debugWarn("Tree", "Can not find node's tree.");
  48227. if (props.node.expanded) {
  48228. expanded.value = true;
  48229. childNodeRendered.value = true;
  48230. }
  48231. const childrenKey = tree.props.props["children"] || "children";
  48232. (0, vue.watch)(() => {
  48233. const children = props.node.data?.[childrenKey];
  48234. return children && [...children];
  48235. }, () => {
  48236. props.node.updateChildren();
  48237. });
  48238. (0, vue.watch)(() => props.node.indeterminate, (val) => {
  48239. handleSelectChange(props.node.checked, val);
  48240. });
  48241. (0, vue.watch)(() => props.node.checked, (val) => {
  48242. handleSelectChange(val, props.node.indeterminate);
  48243. });
  48244. (0, vue.watch)(() => props.node.childNodes.length, () => props.node.reInitChecked());
  48245. (0, vue.watch)(() => props.node.expanded, (val) => {
  48246. (0, vue.nextTick)(() => expanded.value = val);
  48247. if (val) childNodeRendered.value = true;
  48248. });
  48249. const getNodeKey$2 = (node) => {
  48250. return tree.props.nodeKey ? getNodeKey(tree.props.nodeKey, node.data) : node.id;
  48251. };
  48252. const getNodeClass = (node) => {
  48253. const nodeClassFunc = props.props.class;
  48254. if (!nodeClassFunc) return {};
  48255. let className;
  48256. if (isFunction$1(nodeClassFunc)) {
  48257. const { data } = node;
  48258. className = nodeClassFunc(data, node);
  48259. } else className = nodeClassFunc;
  48260. if (isString(className)) return { [className]: true };
  48261. else return className;
  48262. };
  48263. const handleSelectChange = (checked, indeterminate) => {
  48264. if (oldChecked.value !== checked || oldIndeterminate.value !== indeterminate) tree.ctx.emit("check-change", props.node.data, checked, indeterminate);
  48265. oldChecked.value = checked;
  48266. oldIndeterminate.value = indeterminate;
  48267. };
  48268. const handleClick = (e) => {
  48269. handleCurrentChange(tree.store, tree.ctx.emit, () => {
  48270. if (tree?.props?.nodeKey) {
  48271. const curNodeKey = getNodeKey$2(props.node);
  48272. tree.store.value.setCurrentNodeKey(curNodeKey);
  48273. } else tree.store.value.setCurrentNode(props.node);
  48274. });
  48275. tree.currentNode.value = props.node;
  48276. if (tree.props.expandOnClickNode) handleExpandIconClick();
  48277. if ((tree.props.checkOnClickNode || props.node.isLeaf && tree.props.checkOnClickLeaf && props.showCheckbox) && !props.node.disabled) handleCheckChange(!props.node.checked);
  48278. tree.ctx.emit("node-click", props.node.data, props.node, instance, e);
  48279. };
  48280. const handleContextMenu = (event) => {
  48281. if (tree.instance.vnode.props?.["onNodeContextmenu"]) {
  48282. event.stopPropagation();
  48283. event.preventDefault();
  48284. }
  48285. tree.ctx.emit("node-contextmenu", event, props.node.data, props.node, instance);
  48286. };
  48287. const handleExpandIconClick = () => {
  48288. if (props.node.isLeaf) return;
  48289. if (expanded.value) {
  48290. tree.ctx.emit("node-collapse", props.node.data, props.node, instance);
  48291. props.node.collapse();
  48292. } else props.node.expand(() => {
  48293. ctx.emit("node-expand", props.node.data, props.node, instance);
  48294. });
  48295. };
  48296. const handleCheckChange = (value) => {
  48297. const checkStrictly = tree?.props.checkStrictly;
  48298. const childNodes = props.node.childNodes;
  48299. if (!checkStrictly && childNodes.length) value = childNodes.some((node) => !node.isEffectivelyChecked);
  48300. props.node.setChecked(value, !checkStrictly);
  48301. (0, vue.nextTick)(() => {
  48302. const store = tree.store.value;
  48303. tree.ctx.emit("check", props.node.data, {
  48304. checkedNodes: store.getCheckedNodes(),
  48305. checkedKeys: store.getCheckedKeys(),
  48306. halfCheckedNodes: store.getHalfCheckedNodes(),
  48307. halfCheckedKeys: store.getHalfCheckedKeys()
  48308. });
  48309. });
  48310. };
  48311. const handleChildNodeExpand = (nodeData, node, instance) => {
  48312. broadcastExpanded(node);
  48313. tree.ctx.emit("node-expand", nodeData, node, instance);
  48314. };
  48315. const handleDragStart = (event) => {
  48316. if (!tree.props.draggable) return;
  48317. dragEvents.treeNodeDragStart({
  48318. event,
  48319. treeNode: props
  48320. });
  48321. };
  48322. const handleDragOver = (event) => {
  48323. event.preventDefault();
  48324. if (!tree.props.draggable) return;
  48325. dragEvents.treeNodeDragOver({
  48326. event,
  48327. treeNode: {
  48328. $el: node$.value,
  48329. node: props.node
  48330. }
  48331. });
  48332. };
  48333. const handleDrop = (event) => {
  48334. event.preventDefault();
  48335. };
  48336. const handleDragEnd = (event) => {
  48337. if (!tree.props.draggable) return;
  48338. dragEvents.treeNodeDragEnd(event);
  48339. };
  48340. return {
  48341. ns,
  48342. node$,
  48343. tree,
  48344. expanded,
  48345. childNodeRendered,
  48346. oldChecked,
  48347. oldIndeterminate,
  48348. getNodeKey: getNodeKey$2,
  48349. getNodeClass,
  48350. handleSelectChange,
  48351. handleClick,
  48352. handleContextMenu,
  48353. handleExpandIconClick,
  48354. handleCheckChange,
  48355. handleChildNodeExpand,
  48356. handleDragStart,
  48357. handleDragOver,
  48358. handleDrop,
  48359. handleDragEnd,
  48360. CaretRight: caret_right_default
  48361. };
  48362. }
  48363. });
  48364. //#endregion
  48365. //#region ../../packages/components/tree/src/tree-node.vue
  48366. const _hoisted_1$12 = [
  48367. "aria-expanded",
  48368. "aria-disabled",
  48369. "aria-checked",
  48370. "draggable",
  48371. "data-key"
  48372. ];
  48373. const _hoisted_2$7 = ["aria-expanded"];
  48374. function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
  48375. const _component_el_icon = (0, vue.resolveComponent)("el-icon");
  48376. const _component_el_checkbox = (0, vue.resolveComponent)("el-checkbox");
  48377. const _component_loading = (0, vue.resolveComponent)("loading");
  48378. const _component_node_content = (0, vue.resolveComponent)("node-content");
  48379. const _component_el_tree_node = (0, vue.resolveComponent)("el-tree-node");
  48380. const _component_el_collapse_transition = (0, vue.resolveComponent)("el-collapse-transition");
  48381. return (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  48382. ref: "node$",
  48383. class: (0, vue.normalizeClass)([
  48384. _ctx.ns.b("node"),
  48385. _ctx.ns.is("expanded", _ctx.expanded),
  48386. _ctx.ns.is("current", _ctx.node.isCurrent),
  48387. _ctx.ns.is("hidden", !_ctx.node.visible),
  48388. _ctx.ns.is("focusable", !_ctx.node.disabled),
  48389. _ctx.ns.is("checked", !_ctx.node.disabled && _ctx.node.checked),
  48390. _ctx.getNodeClass(_ctx.node)
  48391. ]),
  48392. role: "treeitem",
  48393. tabindex: "-1",
  48394. "aria-expanded": _ctx.expanded,
  48395. "aria-disabled": _ctx.node.disabled,
  48396. "aria-checked": _ctx.node.checked,
  48397. draggable: _ctx.tree.props.draggable,
  48398. "data-key": _ctx.getNodeKey(_ctx.node),
  48399. onClick: _cache[2] || (_cache[2] = (0, vue.withModifiers)((...args) => _ctx.handleClick && _ctx.handleClick(...args), ["stop"])),
  48400. onContextmenu: _cache[3] || (_cache[3] = (...args) => _ctx.handleContextMenu && _ctx.handleContextMenu(...args)),
  48401. onDragstart: _cache[4] || (_cache[4] = (0, vue.withModifiers)((...args) => _ctx.handleDragStart && _ctx.handleDragStart(...args), ["stop"])),
  48402. onDragover: _cache[5] || (_cache[5] = (0, vue.withModifiers)((...args) => _ctx.handleDragOver && _ctx.handleDragOver(...args), ["stop"])),
  48403. onDragend: _cache[6] || (_cache[6] = (0, vue.withModifiers)((...args) => _ctx.handleDragEnd && _ctx.handleDragEnd(...args), ["stop"])),
  48404. onDrop: _cache[7] || (_cache[7] = (0, vue.withModifiers)((...args) => _ctx.handleDrop && _ctx.handleDrop(...args), ["stop"]))
  48405. }, [(0, vue.createElementVNode)("div", {
  48406. class: (0, vue.normalizeClass)(_ctx.ns.be("node", "content")),
  48407. style: (0, vue.normalizeStyle)({ paddingLeft: (_ctx.node.level - 1) * _ctx.tree.props.indent + "px" })
  48408. }, [
  48409. _ctx.tree.props.icon || _ctx.CaretRight ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  48410. key: 0,
  48411. class: (0, vue.normalizeClass)([
  48412. _ctx.ns.be("node", "expand-icon"),
  48413. _ctx.ns.is("leaf", _ctx.node.isLeaf),
  48414. { expanded: !_ctx.node.isLeaf && _ctx.expanded }
  48415. ]),
  48416. onClick: (0, vue.withModifiers)(_ctx.handleExpandIconClick, ["stop"])
  48417. }, {
  48418. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.tree.props.icon || _ctx.CaretRight)))]),
  48419. _: 1
  48420. }, 8, ["class", "onClick"])) : (0, vue.createCommentVNode)("v-if", true),
  48421. _ctx.showCheckbox ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_checkbox, {
  48422. key: 1,
  48423. "model-value": _ctx.node.checked,
  48424. indeterminate: _ctx.node.indeterminate,
  48425. disabled: !!_ctx.node.disabled,
  48426. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"])),
  48427. onChange: _ctx.handleCheckChange
  48428. }, null, 8, [
  48429. "model-value",
  48430. "indeterminate",
  48431. "disabled",
  48432. "onChange"
  48433. ])) : (0, vue.createCommentVNode)("v-if", true),
  48434. _ctx.node.loading ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  48435. key: 2,
  48436. class: (0, vue.normalizeClass)([_ctx.ns.be("node", "loading-icon"), _ctx.ns.is("loading")])
  48437. }, {
  48438. default: (0, vue.withCtx)(() => [(0, vue.createVNode)(_component_loading)]),
  48439. _: 1
  48440. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
  48441. (0, vue.createVNode)(_component_node_content, {
  48442. node: _ctx.node,
  48443. "render-content": _ctx.renderContent
  48444. }, null, 8, ["node", "render-content"])
  48445. ], 6), (0, vue.createVNode)(_component_el_collapse_transition, null, {
  48446. default: (0, vue.withCtx)(() => [!_ctx.renderAfterExpand || _ctx.childNodeRendered ? (0, vue.withDirectives)(((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  48447. key: 0,
  48448. class: (0, vue.normalizeClass)(_ctx.ns.be("node", "children")),
  48449. role: "group",
  48450. "aria-expanded": _ctx.expanded,
  48451. onClick: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["stop"]))
  48452. }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.node.childNodes, (child) => {
  48453. return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tree_node, {
  48454. key: _ctx.getNodeKey(child),
  48455. "render-content": _ctx.renderContent,
  48456. "render-after-expand": _ctx.renderAfterExpand,
  48457. "show-checkbox": _ctx.showCheckbox,
  48458. node: child,
  48459. accordion: _ctx.accordion,
  48460. props: _ctx.props,
  48461. onNodeExpand: _ctx.handleChildNodeExpand
  48462. }, null, 8, [
  48463. "render-content",
  48464. "render-after-expand",
  48465. "show-checkbox",
  48466. "node",
  48467. "accordion",
  48468. "props",
  48469. "onNodeExpand"
  48470. ]);
  48471. }), 128))], 10, _hoisted_2$7)), [[vue.vShow, _ctx.expanded]]) : (0, vue.createCommentVNode)("v-if", true)]),
  48472. _: 1
  48473. })], 42, _hoisted_1$12)), [[vue.vShow, _ctx.node.visible]]);
  48474. }
  48475. var tree_node_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(tree_node_vue_vue_type_script_lang_default, [["render", _sfc_render$2]]);
  48476. //#endregion
  48477. //#region ../../packages/components/tree/src/model/useKeydown.ts
  48478. function useKeydown({ el$ }, store) {
  48479. const ns = useNamespace("tree");
  48480. (0, vue.onMounted)(() => {
  48481. initTabIndex();
  48482. });
  48483. (0, vue.onUpdated)(() => {
  48484. el$.value?.querySelectorAll("input[type=checkbox]").forEach((checkbox) => {
  48485. checkbox.setAttribute("tabindex", "-1");
  48486. });
  48487. });
  48488. function canNodeFocus(treeItems, nextIndex) {
  48489. const currentNode = store.value.getNode(treeItems[nextIndex].dataset.key);
  48490. return currentNode.canFocus && currentNode.visible && (currentNode.parent?.expanded || currentNode.parent?.level === 0);
  48491. }
  48492. const handleKeydown = (ev) => {
  48493. const currentItem = ev.target;
  48494. if (!currentItem.className.includes(ns.b("node"))) return;
  48495. const code = getEventCode(ev);
  48496. const treeItems = Array.from(el$.value.querySelectorAll(`.${ns.is("focusable")}[role=treeitem]`));
  48497. const currentIndex = treeItems.indexOf(currentItem);
  48498. let nextIndex;
  48499. if ([EVENT_CODE.up, EVENT_CODE.down].includes(code)) {
  48500. ev.preventDefault();
  48501. if (code === EVENT_CODE.up) {
  48502. nextIndex = currentIndex === -1 ? 0 : currentIndex !== 0 ? currentIndex - 1 : treeItems.length - 1;
  48503. const startIndex = nextIndex;
  48504. while (true) {
  48505. if (canNodeFocus(treeItems, nextIndex)) break;
  48506. nextIndex--;
  48507. if (nextIndex === startIndex) {
  48508. nextIndex = -1;
  48509. break;
  48510. }
  48511. if (nextIndex < 0) nextIndex = treeItems.length - 1;
  48512. }
  48513. } else {
  48514. nextIndex = currentIndex === -1 ? 0 : currentIndex < treeItems.length - 1 ? currentIndex + 1 : 0;
  48515. const startIndex = nextIndex;
  48516. while (true) {
  48517. if (canNodeFocus(treeItems, nextIndex)) break;
  48518. nextIndex++;
  48519. if (nextIndex === startIndex) {
  48520. nextIndex = -1;
  48521. break;
  48522. }
  48523. if (nextIndex >= treeItems.length) nextIndex = 0;
  48524. }
  48525. }
  48526. nextIndex !== -1 && treeItems[nextIndex].focus();
  48527. }
  48528. if ([EVENT_CODE.left, EVENT_CODE.right].includes(code)) {
  48529. ev.preventDefault();
  48530. currentItem.click();
  48531. }
  48532. const hasInput = currentItem.querySelector("[type=\"checkbox\"]");
  48533. if ([
  48534. EVENT_CODE.enter,
  48535. EVENT_CODE.numpadEnter,
  48536. EVENT_CODE.space
  48537. ].includes(code) && hasInput) {
  48538. ev.preventDefault();
  48539. hasInput.click();
  48540. }
  48541. };
  48542. useEventListener(el$, "keydown", handleKeydown);
  48543. const initTabIndex = () => {
  48544. if (!el$.value) return;
  48545. const treeItems = Array.from(el$.value.querySelectorAll(`.${ns.is("focusable")}[role=treeitem]`));
  48546. Array.from(el$.value.querySelectorAll("input[type=checkbox]")).forEach((checkbox) => {
  48547. checkbox.setAttribute("tabindex", "-1");
  48548. });
  48549. const checkedItem = el$.value.querySelectorAll(`.${ns.is("checked")}[role=treeitem]`);
  48550. if (checkedItem.length) {
  48551. checkedItem[0].setAttribute("tabindex", "0");
  48552. return;
  48553. }
  48554. treeItems[0]?.setAttribute("tabindex", "0");
  48555. };
  48556. }
  48557. //#endregion
  48558. //#region ../../packages/components/tree/src/tree.ts
  48559. const treeProps = buildProps({
  48560. data: {
  48561. type: definePropType(Array),
  48562. default: () => []
  48563. },
  48564. emptyText: { type: String },
  48565. renderAfterExpand: {
  48566. type: Boolean,
  48567. default: true
  48568. },
  48569. nodeKey: String,
  48570. checkStrictly: Boolean,
  48571. defaultExpandAll: Boolean,
  48572. expandOnClickNode: {
  48573. type: Boolean,
  48574. default: true
  48575. },
  48576. checkOnClickNode: Boolean,
  48577. checkOnClickLeaf: {
  48578. type: Boolean,
  48579. default: true
  48580. },
  48581. checkDescendants: Boolean,
  48582. autoExpandParent: {
  48583. type: Boolean,
  48584. default: true
  48585. },
  48586. defaultCheckedKeys: { type: Array },
  48587. defaultExpandedKeys: { type: Array },
  48588. currentNodeKey: { type: [String, Number] },
  48589. renderContent: { type: definePropType(Function) },
  48590. showCheckbox: Boolean,
  48591. draggable: Boolean,
  48592. allowDrag: { type: definePropType(Function) },
  48593. allowDrop: { type: definePropType(Function) },
  48594. props: {
  48595. type: Object,
  48596. default: () => ({
  48597. children: "children",
  48598. label: "label",
  48599. disabled: "disabled"
  48600. })
  48601. },
  48602. lazy: Boolean,
  48603. highlightCurrent: Boolean,
  48604. load: { type: Function },
  48605. filterNodeMethod: { type: Function },
  48606. accordion: Boolean,
  48607. indent: {
  48608. type: Number,
  48609. default: 18
  48610. },
  48611. icon: { type: iconPropType }
  48612. });
  48613. const treeEmits = {
  48614. "check-change": (data, checked, indeterminate) => data && isBoolean(checked) && isBoolean(indeterminate),
  48615. "current-change": (data, node) => true,
  48616. "node-click": (data, node, nodeInstance, evt) => data && node && evt instanceof Event,
  48617. "node-contextmenu": (evt, data, node, nodeInstance) => evt instanceof Event && data && node,
  48618. "node-collapse": (data, node, nodeInstance) => data && node,
  48619. "node-expand": (data, node, nodeInstance) => data && node,
  48620. check: (data, checkedInfo) => data && checkedInfo,
  48621. "node-drag-start": (node, evt) => node && evt,
  48622. "node-drag-end": (draggingNode, dropNode, dropType, evt) => draggingNode && evt,
  48623. "node-drop": (draggingNode, dropNode, dropType, evt) => draggingNode && dropNode && evt,
  48624. "node-drag-leave": (draggingNode, oldDropNode, evt) => draggingNode && oldDropNode && evt,
  48625. "node-drag-enter": (draggingNode, dropNode, evt) => draggingNode && dropNode && evt,
  48626. "node-drag-over": (draggingNode, dropNode, evt) => draggingNode && dropNode && evt
  48627. };
  48628. //#endregion
  48629. //#region ../../packages/components/tree/src/tree.vue?vue&type=script&lang.ts
  48630. var tree_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  48631. name: "ElTree",
  48632. components: { ElTreeNode: tree_node_default$1 },
  48633. props: treeProps,
  48634. emits: treeEmits,
  48635. setup(props, ctx) {
  48636. const { t } = useLocale();
  48637. const ns = useNamespace("tree");
  48638. const store = (0, vue.ref)(new TreeStore({
  48639. key: props.nodeKey,
  48640. data: props.data,
  48641. lazy: props.lazy,
  48642. props: props.props,
  48643. load: props.load,
  48644. currentNodeKey: props.currentNodeKey,
  48645. checkStrictly: props.checkStrictly,
  48646. checkDescendants: props.checkDescendants,
  48647. defaultCheckedKeys: props.defaultCheckedKeys,
  48648. defaultExpandedKeys: props.defaultExpandedKeys,
  48649. autoExpandParent: props.autoExpandParent,
  48650. defaultExpandAll: props.defaultExpandAll,
  48651. filterNodeMethod: props.filterNodeMethod
  48652. }));
  48653. store.value.initialize();
  48654. const root = (0, vue.ref)(store.value.root);
  48655. const currentNode = (0, vue.ref)(null);
  48656. const el$ = (0, vue.ref)(null);
  48657. const dropIndicator$ = (0, vue.ref)(null);
  48658. const { broadcastExpanded } = useNodeExpandEventBroadcast(props);
  48659. const { dragState } = useDragNodeHandler({
  48660. props,
  48661. ctx,
  48662. el$,
  48663. dropIndicator$,
  48664. store
  48665. });
  48666. useKeydown({ el$ }, store);
  48667. const instance = (0, vue.getCurrentInstance)();
  48668. const isSelectTree = (0, vue.computed)(() => {
  48669. let parent = instance?.parent;
  48670. while (parent) {
  48671. if (parent.type.name === "ElTreeSelect") return true;
  48672. parent = parent.parent;
  48673. }
  48674. return false;
  48675. });
  48676. const isEmpty = (0, vue.computed)(() => {
  48677. const { childNodes } = root.value;
  48678. return (!childNodes || childNodes.length === 0 || childNodes.every(({ visible }) => !visible)) && !isSelectTree.value;
  48679. });
  48680. (0, vue.watch)(() => props.currentNodeKey, (newVal) => {
  48681. store.value.setCurrentNodeKey(newVal ?? null);
  48682. });
  48683. (0, vue.watch)(() => props.defaultCheckedKeys, (newVal, oldVal) => {
  48684. if (isEqual$1(newVal, oldVal)) return;
  48685. store.value.setDefaultCheckedKey(newVal ?? []);
  48686. });
  48687. (0, vue.watch)(() => props.defaultExpandedKeys, (newVal) => {
  48688. store.value.setDefaultExpandedKeys(newVal ?? []);
  48689. });
  48690. (0, vue.watch)(() => props.data, (newVal) => {
  48691. store.value.setData(newVal);
  48692. }, { deep: true });
  48693. (0, vue.watch)(() => props.checkStrictly, (newVal) => {
  48694. store.value.checkStrictly = newVal;
  48695. });
  48696. const filter = (value) => {
  48697. if (!props.filterNodeMethod) throw new Error("[Tree] filterNodeMethod is required when filter");
  48698. store.value.filter(value);
  48699. };
  48700. const getNodeKey$1 = (node) => {
  48701. return props.nodeKey ? getNodeKey(props.nodeKey, node.data) : node.id;
  48702. };
  48703. const requireNodeKey = (methodName) => {
  48704. if (!props.nodeKey) throw new Error(`[Tree] nodeKey is required in ${methodName}`);
  48705. };
  48706. const getNodePath = (data) => {
  48707. requireNodeKey("getNodePath");
  48708. const node = store.value.getNode(data);
  48709. if (!node) return [];
  48710. const path = [node.data];
  48711. let parent = node.parent;
  48712. while (parent && parent !== root.value) {
  48713. path.push(parent.data);
  48714. parent = parent.parent;
  48715. }
  48716. return path.reverse();
  48717. };
  48718. const getCheckedNodes = (leafOnly, includeHalfChecked) => {
  48719. return store.value.getCheckedNodes(leafOnly, includeHalfChecked);
  48720. };
  48721. const getCheckedKeys = (leafOnly) => {
  48722. return store.value.getCheckedKeys(leafOnly);
  48723. };
  48724. const getCurrentNode = () => {
  48725. const currentNode = store.value.getCurrentNode();
  48726. return currentNode ? currentNode.data : null;
  48727. };
  48728. const getCurrentKey = () => {
  48729. requireNodeKey("getCurrentKey");
  48730. const currentNode = getCurrentNode();
  48731. return currentNode ? currentNode[props.nodeKey] : null;
  48732. };
  48733. const setCheckedNodes = (nodes, leafOnly) => {
  48734. requireNodeKey("setCheckedNodes");
  48735. store.value.setCheckedNodes(nodes, leafOnly);
  48736. };
  48737. const setCheckedKeys = (keys, leafOnly) => {
  48738. requireNodeKey("setCheckedKeys");
  48739. store.value.setCheckedKeys(keys, leafOnly);
  48740. };
  48741. const setChecked = (data, checked, deep = false) => {
  48742. store.value.setChecked(data, checked, deep);
  48743. };
  48744. const getHalfCheckedNodes = () => {
  48745. return store.value.getHalfCheckedNodes();
  48746. };
  48747. const getHalfCheckedKeys = () => {
  48748. return store.value.getHalfCheckedKeys();
  48749. };
  48750. const setCurrentNode = (node, shouldAutoExpandParent = true) => {
  48751. requireNodeKey("setCurrentNode");
  48752. handleCurrentChange(store, ctx.emit, () => {
  48753. broadcastExpanded(node);
  48754. store.value.setUserCurrentNode(node, shouldAutoExpandParent);
  48755. });
  48756. };
  48757. const setCurrentKey = (key = null, shouldAutoExpandParent = true) => {
  48758. requireNodeKey("setCurrentKey");
  48759. handleCurrentChange(store, ctx.emit, () => {
  48760. broadcastExpanded();
  48761. store.value.setCurrentNodeKey(key, shouldAutoExpandParent);
  48762. });
  48763. };
  48764. const getNode = (data) => {
  48765. return store.value.getNode(data);
  48766. };
  48767. const remove = (data) => {
  48768. store.value.remove(data);
  48769. };
  48770. const append = (data, parentNode) => {
  48771. store.value.append(data, parentNode);
  48772. };
  48773. const insertBefore = (data, refNode) => {
  48774. store.value.insertBefore(data, refNode);
  48775. };
  48776. const insertAfter = (data, refNode) => {
  48777. store.value.insertAfter(data, refNode);
  48778. };
  48779. const handleNodeExpand = (nodeData, node, instance) => {
  48780. broadcastExpanded(node);
  48781. ctx.emit("node-expand", nodeData, node, instance);
  48782. };
  48783. const updateKeyChildren = (key, data) => {
  48784. requireNodeKey("updateKeyChildren");
  48785. store.value.updateChildren(key, data);
  48786. };
  48787. (0, vue.provide)(ROOT_TREE_INJECTION_KEY, {
  48788. ctx,
  48789. props,
  48790. store,
  48791. root,
  48792. currentNode,
  48793. instance
  48794. });
  48795. (0, vue.provide)(formItemContextKey, void 0);
  48796. return {
  48797. ns,
  48798. store,
  48799. root,
  48800. currentNode,
  48801. dragState,
  48802. el$,
  48803. dropIndicator$,
  48804. isEmpty,
  48805. filter,
  48806. getNodeKey: getNodeKey$1,
  48807. getNodePath,
  48808. getCheckedNodes,
  48809. getCheckedKeys,
  48810. getCurrentNode,
  48811. getCurrentKey,
  48812. setCheckedNodes,
  48813. setCheckedKeys,
  48814. setChecked,
  48815. getHalfCheckedNodes,
  48816. getHalfCheckedKeys,
  48817. setCurrentNode,
  48818. setCurrentKey,
  48819. t,
  48820. getNode,
  48821. remove,
  48822. append,
  48823. insertBefore,
  48824. insertAfter,
  48825. handleNodeExpand,
  48826. updateKeyChildren
  48827. };
  48828. }
  48829. });
  48830. //#endregion
  48831. //#region ../../packages/components/tree/src/tree.vue
  48832. function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
  48833. const _component_el_tree_node = (0, vue.resolveComponent)("el-tree-node");
  48834. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  48835. ref: "el$",
  48836. class: (0, vue.normalizeClass)([
  48837. _ctx.ns.b(),
  48838. _ctx.ns.is("dragging", !!_ctx.dragState.draggingNode),
  48839. _ctx.ns.is("drop-not-allow", !_ctx.dragState.allowDrop),
  48840. _ctx.ns.is("drop-inner", _ctx.dragState.dropType === "inner"),
  48841. { [_ctx.ns.m("highlight-current")]: _ctx.highlightCurrent }
  48842. ]),
  48843. role: "tree"
  48844. }, [
  48845. ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(_ctx.root.childNodes, (child) => {
  48846. return (0, vue.openBlock)(), (0, vue.createBlock)(_component_el_tree_node, {
  48847. key: _ctx.getNodeKey(child),
  48848. node: child,
  48849. props: _ctx.props,
  48850. accordion: _ctx.accordion,
  48851. "render-after-expand": _ctx.renderAfterExpand,
  48852. "show-checkbox": _ctx.showCheckbox,
  48853. "render-content": _ctx.renderContent,
  48854. onNodeExpand: _ctx.handleNodeExpand
  48855. }, null, 8, [
  48856. "node",
  48857. "props",
  48858. "accordion",
  48859. "render-after-expand",
  48860. "show-checkbox",
  48861. "render-content",
  48862. "onNodeExpand"
  48863. ]);
  48864. }), 128)),
  48865. _ctx.isEmpty ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  48866. key: 0,
  48867. class: (0, vue.normalizeClass)(_ctx.ns.e("empty-block"))
  48868. }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(_ctx.ns.e("empty-text")) }, (0, vue.toDisplayString)(_ctx.emptyText ?? _ctx.t("el.tree.emptyText")), 3)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  48869. (0, vue.withDirectives)((0, vue.createElementVNode)("div", {
  48870. ref: "dropIndicator$",
  48871. class: (0, vue.normalizeClass)(_ctx.ns.e("drop-indicator"))
  48872. }, null, 2), [[vue.vShow, _ctx.dragState.showDropIndicator]])
  48873. ], 2);
  48874. }
  48875. var tree_default$1 = /* @__PURE__ */ _plugin_vue_export_helper_default(tree_vue_vue_type_script_lang_default, [["render", _sfc_render$1]]);
  48876. //#endregion
  48877. //#region ../../packages/components/tree/index.ts
  48878. const ElTree = withInstall(tree_default$1);
  48879. //#endregion
  48880. //#region ../../packages/components/tree-select/src/select.ts
  48881. const useSelect = (props, { attrs, emit }, { select, tree, key }) => {
  48882. const ns = useNamespace("tree-select");
  48883. (0, vue.watch)(() => props.data, () => {
  48884. if (props.filterable) (0, vue.nextTick)(() => {
  48885. tree.value?.filter(select.value?.states.inputValue);
  48886. });
  48887. }, { flush: "post" });
  48888. const focusLastNode = (listNode) => {
  48889. const lastNode = listNode.at(-1);
  48890. if (lastNode.expanded && lastNode.childNodes.at(-1)) focusLastNode([lastNode.childNodes.at(-1)]);
  48891. else {
  48892. (tree.value.el$?.querySelector(`[data-key="${listNode.at(-1).key}"]`))?.focus({ preventScroll: true });
  48893. return;
  48894. }
  48895. };
  48896. (0, vue.onMounted)(() => {
  48897. useEventListener(() => select.value?.$el, "keydown", async (evt) => {
  48898. const code = getEventCode(evt);
  48899. const { dropdownMenuVisible } = select.value;
  48900. if ([EVENT_CODE.down, EVENT_CODE.up].includes(code) && dropdownMenuVisible) {
  48901. await (0, vue.nextTick)();
  48902. setTimeout(() => {
  48903. if (EVENT_CODE.up === code) {
  48904. const listNode = tree.value.store.root.childNodes;
  48905. focusLastNode(listNode);
  48906. return;
  48907. }
  48908. select.value.optionsArray[select.value.states.hoveringIndex].$el?.parentNode?.parentNode?.focus({ preventScroll: true });
  48909. });
  48910. }
  48911. }, { capture: true });
  48912. });
  48913. return {
  48914. ...pick((0, vue.toRefs)(props), Object.keys(ElSelect.props)),
  48915. ...attrs,
  48916. class: (0, vue.computed)(() => attrs.class),
  48917. style: (0, vue.computed)(() => attrs.style),
  48918. "onUpdate:modelValue": (value) => emit(UPDATE_MODEL_EVENT, value),
  48919. valueKey: key,
  48920. popperClass: (0, vue.computed)(() => {
  48921. const classes = [ns.e("popper")];
  48922. if (props.popperClass) classes.push(props.popperClass);
  48923. return classes.join(" ");
  48924. }),
  48925. filterMethod: (keyword = "") => {
  48926. if (props.filterMethod) props.filterMethod(keyword);
  48927. else if (props.remoteMethod) props.remoteMethod(keyword);
  48928. else tree.value?.filter(keyword);
  48929. }
  48930. };
  48931. };
  48932. //#endregion
  48933. //#region ../../packages/components/tree-select/src/tree-select-option.ts
  48934. const component = (0, vue.defineComponent)({
  48935. extends: ElOption,
  48936. setup(props, ctx) {
  48937. const result = ElOption.setup(props, ctx);
  48938. delete result.selectOptionClick;
  48939. const vm = (0, vue.getCurrentInstance)().proxy;
  48940. (0, vue.nextTick)(() => {
  48941. if (!result.select.states.cachedOptions.get(vm.value)) result.select.onOptionCreate(vm);
  48942. });
  48943. (0, vue.watch)(() => ctx.attrs.visible, (val) => {
  48944. (0, vue.nextTick)(() => {
  48945. result.states.visible = val;
  48946. });
  48947. }, { immediate: true });
  48948. return result;
  48949. },
  48950. methods: { selectOptionClick() {
  48951. this.$el.parentElement.click();
  48952. } }
  48953. });
  48954. //#endregion
  48955. //#region ../../packages/components/tree-select/src/utils.ts
  48956. function isValidValue(val) {
  48957. return val || val === 0;
  48958. }
  48959. function isValidArray(val) {
  48960. return isArray$1(val) && val.length;
  48961. }
  48962. function toValidArray(val) {
  48963. return isArray$1(val) ? val : isValidValue(val) ? [val] : [];
  48964. }
  48965. function treeFind(treeData, findCallback, getChildren, resultCallback, parent) {
  48966. for (let i = 0; i < treeData.length; i++) {
  48967. const data = treeData[i];
  48968. if (findCallback(data, i, treeData, parent)) return resultCallback ? resultCallback(data, i, treeData, parent) : data;
  48969. else {
  48970. const children = getChildren(data);
  48971. if (isValidArray(children)) {
  48972. const find = treeFind(children, findCallback, getChildren, resultCallback, data);
  48973. if (find) return find;
  48974. }
  48975. }
  48976. }
  48977. }
  48978. function treeEach(treeData, callback, getChildren, parent) {
  48979. for (let i = 0; i < treeData.length; i++) {
  48980. const data = treeData[i];
  48981. callback(data, i, treeData, parent);
  48982. const children = getChildren(data);
  48983. if (isValidArray(children)) treeEach(children, callback, getChildren, data);
  48984. }
  48985. }
  48986. //#endregion
  48987. //#region ../../packages/components/tree-select/src/tree.ts
  48988. const useTree$1 = (props, { attrs, slots, emit }, { select, tree, key }) => {
  48989. (0, vue.watch)([() => props.modelValue, tree], () => {
  48990. if (props.showCheckbox) (0, vue.nextTick)(() => {
  48991. const treeInstance = tree.value;
  48992. if (treeInstance && !isEqual$1(treeInstance.getCheckedKeys(), toValidArray(props.modelValue))) treeInstance.setCheckedKeys(toValidArray(props.modelValue));
  48993. });
  48994. }, {
  48995. immediate: true,
  48996. deep: true
  48997. });
  48998. const propsMap = (0, vue.computed)(() => ({
  48999. value: key.value,
  49000. label: "label",
  49001. children: "children",
  49002. disabled: "disabled",
  49003. isLeaf: "isLeaf",
  49004. ...props.props
  49005. }));
  49006. const getNodeValByProp = (prop, data) => {
  49007. const propVal = propsMap.value[prop];
  49008. if (isFunction$1(propVal)) return propVal(data, tree.value?.getNode(getNodeValByProp("value", data)));
  49009. else return data[propVal];
  49010. };
  49011. const defaultExpandedParentKeys = toValidArray(props.modelValue).map((value) => {
  49012. return treeFind(props.data || [], (data) => getNodeValByProp("value", data) === value, (data) => getNodeValByProp("children", data), (data, index, array, parent) => parent && getNodeValByProp("value", parent));
  49013. }).filter((item) => isValidValue(item));
  49014. const cacheOptions = (0, vue.computed)(() => {
  49015. if (!props.renderAfterExpand && !props.lazy) return [];
  49016. const options = [];
  49017. treeEach(props.data.concat(props.cacheData), (node) => {
  49018. const value = getNodeValByProp("value", node);
  49019. options.push({
  49020. value,
  49021. currentLabel: getNodeValByProp("label", node),
  49022. isDisabled: getNodeValByProp("disabled", node)
  49023. });
  49024. }, (data) => getNodeValByProp("children", data));
  49025. return options;
  49026. });
  49027. const getChildCheckedKeys = () => {
  49028. return tree.value?.getCheckedKeys().filter((checkedKey) => {
  49029. const node = tree.value?.getNode(checkedKey);
  49030. return !isNil(node) && isEmpty(node.childNodes);
  49031. });
  49032. };
  49033. const emitChange = (val) => {
  49034. if (!isEqual$1(props.modelValue, val)) emit(CHANGE_EVENT, val);
  49035. };
  49036. function update(val) {
  49037. emit(UPDATE_MODEL_EVENT, val);
  49038. emitChange(val);
  49039. }
  49040. return {
  49041. ...pick((0, vue.toRefs)(props), Object.keys(ElTree.props)),
  49042. ...attrs,
  49043. nodeKey: key,
  49044. expandOnClickNode: (0, vue.computed)(() => {
  49045. return !props.checkStrictly && props.expandOnClickNode;
  49046. }),
  49047. defaultExpandedKeys: (0, vue.computed)(() => {
  49048. return props.defaultExpandedKeys ? props.defaultExpandedKeys.concat(defaultExpandedParentKeys) : defaultExpandedParentKeys;
  49049. }),
  49050. renderContent: (h, { node, data, store }) => {
  49051. return h(component, {
  49052. value: getNodeValByProp("value", data),
  49053. label: getNodeValByProp("label", data),
  49054. disabled: getNodeValByProp("disabled", data),
  49055. visible: node.visible
  49056. }, props.renderContent ? () => props.renderContent(h, {
  49057. node,
  49058. data,
  49059. store
  49060. }) : slots.default ? () => slots.default({
  49061. node,
  49062. data,
  49063. store
  49064. }) : void 0);
  49065. },
  49066. filterNodeMethod: (value, data, node) => {
  49067. if (props.filterNodeMethod) return props.filterNodeMethod(value, data, node);
  49068. if (!value) return true;
  49069. return new RegExp(escapeStringRegexp(value), "i").test(getNodeValByProp("label", data) || "");
  49070. },
  49071. onNodeClick: (data, node, e) => {
  49072. attrs.onNodeClick?.(data, node, e);
  49073. if (props.showCheckbox && props.checkOnClickNode) return;
  49074. if (!props.showCheckbox && (props.checkStrictly || node.isLeaf)) {
  49075. if (!getNodeValByProp("disabled", data)) {
  49076. const option = select.value?.states.options.get(getNodeValByProp("value", data));
  49077. select.value?.handleOptionSelect(option);
  49078. }
  49079. } else if (props.expandOnClickNode) e.proxy.handleExpandIconClick();
  49080. },
  49081. onCheck: (data, params) => {
  49082. if (!props.showCheckbox) return;
  49083. const dataValue = getNodeValByProp("value", data);
  49084. const dataMap = {};
  49085. treeEach([tree.value.store.root], (node) => dataMap[node.key] = node, (node) => node.childNodes);
  49086. const uncachedCheckedKeys = params.checkedKeys;
  49087. const cachedKeys = props.multiple ? toValidArray(props.modelValue).filter((item) => !(item in dataMap) && !uncachedCheckedKeys.includes(item)) : [];
  49088. const checkedKeys = cachedKeys.concat(uncachedCheckedKeys);
  49089. if (props.checkStrictly) update(props.multiple ? checkedKeys : checkedKeys.includes(dataValue) ? dataValue : void 0);
  49090. else if (props.multiple) {
  49091. const childKeys = getChildCheckedKeys();
  49092. update(cachedKeys.concat(childKeys));
  49093. } else {
  49094. const firstLeaf = treeFind([data], (data) => !isValidArray(getNodeValByProp("children", data)) && !getNodeValByProp("disabled", data), (data) => getNodeValByProp("children", data));
  49095. const firstLeafKey = firstLeaf ? getNodeValByProp("value", firstLeaf) : void 0;
  49096. const hasCheckedChild = isValidValue(props.modelValue) && !!treeFind([data], (data) => getNodeValByProp("value", data) === props.modelValue, (data) => getNodeValByProp("children", data));
  49097. update(firstLeafKey === props.modelValue || hasCheckedChild ? void 0 : firstLeafKey);
  49098. }
  49099. (0, vue.nextTick)(() => {
  49100. const checkedKeys = toValidArray(props.modelValue);
  49101. tree.value.setCheckedKeys(checkedKeys);
  49102. attrs.onCheck?.(data, {
  49103. checkedKeys: tree.value.getCheckedKeys(),
  49104. checkedNodes: tree.value.getCheckedNodes(),
  49105. halfCheckedKeys: tree.value.getHalfCheckedKeys(),
  49106. halfCheckedNodes: tree.value.getHalfCheckedNodes()
  49107. });
  49108. });
  49109. select.value?.focus();
  49110. },
  49111. onNodeExpand: (data, node, e) => {
  49112. attrs.onNodeExpand?.(data, node, e);
  49113. (0, vue.nextTick)(() => {
  49114. if (!props.checkStrictly && props.lazy && props.multiple && node.checked) {
  49115. const dataMap = {};
  49116. const uncachedCheckedKeys = tree.value.getCheckedKeys();
  49117. treeEach([tree.value.store.root], (node) => dataMap[node.key] = node, (node) => node.childNodes);
  49118. const cachedKeys = toValidArray(props.modelValue).filter((item) => !(item in dataMap) && !uncachedCheckedKeys.includes(item));
  49119. const childKeys = getChildCheckedKeys();
  49120. update(cachedKeys.concat(childKeys));
  49121. }
  49122. });
  49123. },
  49124. cacheOptions
  49125. };
  49126. };
  49127. //#endregion
  49128. //#region ../../packages/components/tree-select/src/cache-options.ts
  49129. var cache_options_default = (0, vue.defineComponent)({
  49130. props: { data: {
  49131. type: Array,
  49132. default: () => []
  49133. } },
  49134. setup(props) {
  49135. const select = (0, vue.inject)(selectKey);
  49136. (0, vue.watch)(() => props.data, () => {
  49137. props.data.forEach((item) => {
  49138. if (!select.states.cachedOptions.has(item.value)) select.states.cachedOptions.set(item.value, item);
  49139. });
  49140. const inputs = select.selectRef?.querySelectorAll("input") || [];
  49141. if (isClient && !Array.from(inputs).includes(document.activeElement)) select.setSelected();
  49142. }, {
  49143. flush: "post",
  49144. immediate: true
  49145. });
  49146. return () => void 0;
  49147. }
  49148. });
  49149. //#endregion
  49150. //#region ../../packages/components/tree-select/src/tree-select.vue?vue&type=script&lang.ts
  49151. var tree_select_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  49152. name: "ElTreeSelect",
  49153. inheritAttrs: false,
  49154. props: {
  49155. ...selectProps,
  49156. ...treeProps,
  49157. cacheData: {
  49158. type: Array,
  49159. default: () => []
  49160. }
  49161. },
  49162. setup(props, context) {
  49163. const { slots, expose, emit, attrs } = context;
  49164. const childAttrs = {
  49165. ...attrs,
  49166. onChange: void 0
  49167. };
  49168. const select = (0, vue.ref)();
  49169. const tree = (0, vue.ref)();
  49170. const key = (0, vue.computed)(() => props.nodeKey || props.valueKey || "value");
  49171. const selectProps = useSelect(props, {
  49172. attrs,
  49173. emit
  49174. }, {
  49175. select,
  49176. tree,
  49177. key
  49178. });
  49179. const { cacheOptions, ...treeProps } = useTree$1(props, {
  49180. attrs: childAttrs,
  49181. slots,
  49182. emit
  49183. }, {
  49184. select,
  49185. tree,
  49186. key
  49187. });
  49188. const methods = (0, vue.reactive)({});
  49189. expose(methods);
  49190. (0, vue.onMounted)(() => {
  49191. Object.assign(methods, {
  49192. ...pick(tree.value, [
  49193. "filter",
  49194. "updateKeyChildren",
  49195. "getCheckedNodes",
  49196. "setCheckedNodes",
  49197. "getCheckedKeys",
  49198. "setCheckedKeys",
  49199. "setChecked",
  49200. "getHalfCheckedNodes",
  49201. "getHalfCheckedKeys",
  49202. "getCurrentKey",
  49203. "getCurrentNode",
  49204. "setCurrentKey",
  49205. "setCurrentNode",
  49206. "getNode",
  49207. "remove",
  49208. "append",
  49209. "insertBefore",
  49210. "insertAfter"
  49211. ]),
  49212. ...pick(select.value, [
  49213. "focus",
  49214. "blur",
  49215. "selectedLabel"
  49216. ]),
  49217. treeRef: tree.value,
  49218. selectRef: select.value
  49219. });
  49220. });
  49221. return () => (0, vue.h)(ElSelect, (0, vue.reactive)({
  49222. ...selectProps,
  49223. ref: (ref) => select.value = ref
  49224. }), {
  49225. ...slots,
  49226. default: () => [(0, vue.h)(cache_options_default, { data: cacheOptions.value }), (0, vue.h)(ElTree, (0, vue.reactive)({
  49227. ...treeProps,
  49228. ref: (ref) => tree.value = ref
  49229. }))]
  49230. });
  49231. }
  49232. });
  49233. //#endregion
  49234. //#region ../../packages/components/tree-select/src/tree-select.vue
  49235. var tree_select_default = tree_select_vue_vue_type_script_lang_default;
  49236. //#endregion
  49237. //#region ../../packages/components/tree-select/index.ts
  49238. const ElTreeSelect = withInstall(tree_select_default);
  49239. //#endregion
  49240. //#region ../../packages/components/tree-v2/src/virtual-tree.ts
  49241. const ROOT_TREE_INJECTION_KEY$1 = Symbol();
  49242. const EMPTY_NODE = {
  49243. key: -1,
  49244. level: -1,
  49245. data: {}
  49246. };
  49247. const itemSize = {
  49248. type: Number,
  49249. default: 26
  49250. };
  49251. const treeProps$1 = buildProps({
  49252. data: {
  49253. type: definePropType(Array),
  49254. default: () => mutable([])
  49255. },
  49256. emptyText: { type: String },
  49257. height: {
  49258. type: Number,
  49259. default: 200
  49260. },
  49261. props: {
  49262. type: definePropType(Object),
  49263. default: () => mutable({
  49264. children: "children",
  49265. label: "label",
  49266. disabled: "disabled",
  49267. value: "id",
  49268. class: ""
  49269. })
  49270. },
  49271. highlightCurrent: Boolean,
  49272. showCheckbox: Boolean,
  49273. defaultCheckedKeys: {
  49274. type: definePropType(Array),
  49275. default: () => mutable([])
  49276. },
  49277. checkStrictly: Boolean,
  49278. defaultExpandedKeys: {
  49279. type: definePropType(Array),
  49280. default: () => mutable([])
  49281. },
  49282. indent: {
  49283. type: Number,
  49284. default: 16
  49285. },
  49286. itemSize,
  49287. icon: { type: iconPropType },
  49288. expandOnClickNode: {
  49289. type: Boolean,
  49290. default: true
  49291. },
  49292. checkOnClickNode: Boolean,
  49293. checkOnClickLeaf: {
  49294. type: Boolean,
  49295. default: true
  49296. },
  49297. currentNodeKey: { type: definePropType([String, Number]) },
  49298. accordion: Boolean,
  49299. filterMethod: { type: definePropType(Function) },
  49300. perfMode: {
  49301. type: Boolean,
  49302. default: true
  49303. },
  49304. scrollbarAlwaysOn: Boolean
  49305. });
  49306. const treeNodeProps = buildProps({
  49307. node: {
  49308. type: definePropType(Object),
  49309. default: () => mutable(EMPTY_NODE)
  49310. },
  49311. expanded: Boolean,
  49312. checked: Boolean,
  49313. indeterminate: Boolean,
  49314. showCheckbox: Boolean,
  49315. disabled: Boolean,
  49316. current: Boolean,
  49317. hiddenExpandIcon: Boolean,
  49318. itemSize
  49319. });
  49320. const treeNodeContentProps = buildProps({ node: {
  49321. type: definePropType(Object),
  49322. required: true
  49323. } });
  49324. const NODE_CLICK = "node-click";
  49325. const NODE_DROP = "node-drop";
  49326. const NODE_EXPAND = "node-expand";
  49327. const NODE_COLLAPSE = "node-collapse";
  49328. const CURRENT_CHANGE = "current-change";
  49329. const NODE_CHECK = "check";
  49330. const NODE_CHECK_CHANGE = "check-change";
  49331. const NODE_CONTEXTMENU = "node-contextmenu";
  49332. const treeEmits$1 = {
  49333. [NODE_CLICK]: (data, node, e) => data && node && e,
  49334. [NODE_DROP]: (data, node, e) => data && node && e,
  49335. [NODE_EXPAND]: (data, node) => data && node,
  49336. [NODE_COLLAPSE]: (data, node) => data && node,
  49337. [CURRENT_CHANGE]: (data, node) => data && node,
  49338. [NODE_CHECK]: (data, checkedInfo) => data && checkedInfo,
  49339. [NODE_CHECK_CHANGE]: (data, checked) => data && isBoolean(checked),
  49340. [NODE_CONTEXTMENU]: (evt, data, node) => evt && data && node
  49341. };
  49342. const treeNodeEmits = {
  49343. click: (node, e) => !!(node && e),
  49344. drop: (node, e) => !!(node && e),
  49345. toggle: (node) => !!node,
  49346. check: (node, checked) => node && isBoolean(checked)
  49347. };
  49348. //#endregion
  49349. //#region ../../packages/components/tree-v2/src/composables/useCheck.ts
  49350. function useCheck(props, tree) {
  49351. const checkedKeys = (0, vue.ref)(/* @__PURE__ */ new Set());
  49352. const indeterminateKeys = (0, vue.ref)(/* @__PURE__ */ new Set());
  49353. const { emit } = (0, vue.getCurrentInstance)();
  49354. (0, vue.watch)([() => tree.value, () => props.defaultCheckedKeys], () => {
  49355. return (0, vue.nextTick)(() => {
  49356. _setCheckedKeys(props.defaultCheckedKeys);
  49357. });
  49358. }, { immediate: true });
  49359. const updateCheckedKeys = (deep = false) => {
  49360. if (!tree.value || !props.showCheckbox || props.checkStrictly && !deep) return;
  49361. const { levelTreeNodeMap, maxLevel } = tree.value;
  49362. const checkedKeySet = checkedKeys.value;
  49363. const indeterminateKeySet = /* @__PURE__ */ new Set();
  49364. for (let level = maxLevel; level >= 1; --level) {
  49365. const nodes = levelTreeNodeMap.get(level);
  49366. if (!nodes) continue;
  49367. nodes.forEach((node) => {
  49368. const children = node.children;
  49369. let isEffectivelyChecked = !node.isLeaf || node.disabled || checkedKeySet.has(node.key);
  49370. if (children) {
  49371. let allChecked = true;
  49372. let hasChecked = false;
  49373. for (const childNode of children) {
  49374. const key = childNode.key;
  49375. if (!childNode.isEffectivelyChecked) isEffectivelyChecked = false;
  49376. if (checkedKeySet.has(key)) hasChecked = true;
  49377. else if (indeterminateKeySet.has(key)) {
  49378. allChecked = false;
  49379. hasChecked = true;
  49380. break;
  49381. } else allChecked = false;
  49382. }
  49383. if (allChecked) checkedKeySet.add(node.key);
  49384. else if (hasChecked) {
  49385. indeterminateKeySet.add(node.key);
  49386. checkedKeySet.delete(node.key);
  49387. } else {
  49388. checkedKeySet.delete(node.key);
  49389. indeterminateKeySet.delete(node.key);
  49390. }
  49391. }
  49392. node.isEffectivelyChecked = isEffectivelyChecked;
  49393. });
  49394. }
  49395. indeterminateKeys.value = indeterminateKeySet;
  49396. };
  49397. const isChecked = (node) => checkedKeys.value.has(node.key);
  49398. const isIndeterminate = (node) => indeterminateKeys.value.has(node.key);
  49399. const toggleCheckbox = (node, isChecked, nodeClick = true, immediateUpdate = true, deep = false) => {
  49400. const checkedKeySet = checkedKeys.value;
  49401. const children = node.children;
  49402. if ((!props.checkStrictly || deep) && nodeClick && children?.length) isChecked = children.some((node) => !node.isEffectivelyChecked);
  49403. const toggle = (node, checked) => {
  49404. checkedKeySet[checked ? "add" : "delete"](node.key);
  49405. const children = node.children;
  49406. if ((!props.checkStrictly || deep) && children) children.forEach((childNode) => {
  49407. if (!childNode.disabled || childNode.children) toggle(childNode, checked);
  49408. });
  49409. };
  49410. toggle(node, isChecked);
  49411. if (immediateUpdate) updateCheckedKeys();
  49412. if (nodeClick) afterNodeCheck(node, isChecked);
  49413. };
  49414. const afterNodeCheck = (node, checked) => {
  49415. const { checkedNodes, checkedKeys } = getChecked();
  49416. const { halfCheckedNodes, halfCheckedKeys } = getHalfChecked();
  49417. emit(NODE_CHECK, node.data, {
  49418. checkedKeys,
  49419. checkedNodes,
  49420. halfCheckedKeys,
  49421. halfCheckedNodes
  49422. });
  49423. emit(NODE_CHECK_CHANGE, node.data, checked);
  49424. };
  49425. function getCheckedKeys(leafOnly = false) {
  49426. return getChecked(leafOnly).checkedKeys;
  49427. }
  49428. function getCheckedNodes(leafOnly = false) {
  49429. return getChecked(leafOnly).checkedNodes;
  49430. }
  49431. function getHalfCheckedKeys() {
  49432. return getHalfChecked().halfCheckedKeys;
  49433. }
  49434. function getHalfCheckedNodes() {
  49435. return getHalfChecked().halfCheckedNodes;
  49436. }
  49437. function getChecked(leafOnly = false) {
  49438. const checkedNodes = [];
  49439. const keys = [];
  49440. if (tree?.value && props.showCheckbox) {
  49441. const { treeNodeMap } = tree.value;
  49442. checkedKeys.value.forEach((key) => {
  49443. const node = treeNodeMap.get(key);
  49444. if (node && (!leafOnly || leafOnly && node.isLeaf)) {
  49445. keys.push(key);
  49446. checkedNodes.push(node.data);
  49447. }
  49448. });
  49449. }
  49450. return {
  49451. checkedKeys: keys,
  49452. checkedNodes
  49453. };
  49454. }
  49455. function getHalfChecked() {
  49456. const halfCheckedNodes = [];
  49457. const halfCheckedKeys = [];
  49458. if (tree?.value && props.showCheckbox) {
  49459. const { treeNodeMap } = tree.value;
  49460. indeterminateKeys.value.forEach((key) => {
  49461. const node = treeNodeMap.get(key);
  49462. if (node) {
  49463. halfCheckedKeys.push(key);
  49464. halfCheckedNodes.push(node.data);
  49465. }
  49466. });
  49467. }
  49468. return {
  49469. halfCheckedNodes,
  49470. halfCheckedKeys
  49471. };
  49472. }
  49473. function setCheckedKeys(keys) {
  49474. checkedKeys.value.clear();
  49475. indeterminateKeys.value.clear();
  49476. (0, vue.nextTick)(() => {
  49477. _setCheckedKeys(keys);
  49478. });
  49479. }
  49480. function setChecked(key, isChecked, deep) {
  49481. if (tree?.value && props.showCheckbox) {
  49482. const node = tree.value.treeNodeMap.get(key);
  49483. if (node) toggleCheckbox(node, isChecked, false, void 0, deep);
  49484. }
  49485. }
  49486. function _setCheckedKeys(keys) {
  49487. if (tree?.value) {
  49488. const { treeNodeMap } = tree.value;
  49489. if (props.showCheckbox && treeNodeMap && keys?.length > 0) {
  49490. for (const key of keys) {
  49491. const node = treeNodeMap.get(key);
  49492. if (node && !isChecked(node)) toggleCheckbox(node, true, false, false);
  49493. }
  49494. updateCheckedKeys();
  49495. }
  49496. }
  49497. }
  49498. return {
  49499. updateCheckedKeys,
  49500. toggleCheckbox,
  49501. isChecked,
  49502. isIndeterminate,
  49503. getCheckedKeys,
  49504. getCheckedNodes,
  49505. getHalfCheckedKeys,
  49506. getHalfCheckedNodes,
  49507. setChecked,
  49508. setCheckedKeys
  49509. };
  49510. }
  49511. //#endregion
  49512. //#region ../../packages/components/tree-v2/src/composables/useFilter.ts
  49513. function useFilter(props, tree) {
  49514. const hiddenNodeKeySet = (0, vue.ref)(/* @__PURE__ */ new Set([]));
  49515. const hiddenExpandIconKeySet = (0, vue.ref)(/* @__PURE__ */ new Set([]));
  49516. const filterable = (0, vue.computed)(() => {
  49517. return isFunction$1(props.filterMethod);
  49518. });
  49519. function doFilter(query) {
  49520. if (!filterable.value) return;
  49521. const expandKeySet = /* @__PURE__ */ new Set();
  49522. const hiddenExpandIconKeys = hiddenExpandIconKeySet.value;
  49523. const hiddenKeys = hiddenNodeKeySet.value;
  49524. const family = [];
  49525. const nodes = tree.value?.treeNodes || [];
  49526. const filter = props.filterMethod;
  49527. hiddenKeys.clear();
  49528. function traverse(nodes) {
  49529. nodes.forEach((node) => {
  49530. family.push(node);
  49531. if (filter?.(query, node.data, node)) family.forEach((member) => {
  49532. expandKeySet.add(member.key);
  49533. member.expanded = true;
  49534. });
  49535. else {
  49536. node.expanded = false;
  49537. if (node.isLeaf) hiddenKeys.add(node.key);
  49538. }
  49539. const children = node.children;
  49540. if (children) traverse(children);
  49541. if (!node.isLeaf) {
  49542. if (!expandKeySet.has(node.key)) hiddenKeys.add(node.key);
  49543. else if (children) {
  49544. let allHidden = true;
  49545. for (const childNode of children) if (!hiddenKeys.has(childNode.key)) {
  49546. allHidden = false;
  49547. break;
  49548. }
  49549. if (allHidden) hiddenExpandIconKeys.add(node.key);
  49550. else hiddenExpandIconKeys.delete(node.key);
  49551. }
  49552. }
  49553. family.pop();
  49554. });
  49555. }
  49556. traverse(nodes);
  49557. return expandKeySet;
  49558. }
  49559. function isForceHiddenExpandIcon(node) {
  49560. return hiddenExpandIconKeySet.value.has(node.key);
  49561. }
  49562. return {
  49563. hiddenExpandIconKeySet,
  49564. hiddenNodeKeySet,
  49565. doFilter,
  49566. isForceHiddenExpandIcon
  49567. };
  49568. }
  49569. //#endregion
  49570. //#region ../../packages/components/tree-v2/src/composables/useTree.ts
  49571. function useTree(props, emit) {
  49572. const expandedKeySet = (0, vue.ref)(/* @__PURE__ */ new Set());
  49573. const currentKey = (0, vue.ref)();
  49574. const tree = (0, vue.shallowRef)();
  49575. const listRef = (0, vue.ref)();
  49576. const { isIndeterminate, isChecked, toggleCheckbox, getCheckedKeys, getCheckedNodes, getHalfCheckedKeys, getHalfCheckedNodes, setChecked, setCheckedKeys } = useCheck(props, tree);
  49577. const { doFilter, hiddenNodeKeySet, isForceHiddenExpandIcon } = useFilter(props, tree);
  49578. const valueKey = (0, vue.computed)(() => {
  49579. return props.props?.value || "id";
  49580. });
  49581. const childrenKey = (0, vue.computed)(() => {
  49582. return props.props?.children || "children";
  49583. });
  49584. const disabledKey = (0, vue.computed)(() => {
  49585. return props.props?.disabled || "disabled";
  49586. });
  49587. const labelKey = (0, vue.computed)(() => {
  49588. return props.props?.label || "label";
  49589. });
  49590. const flattenTree = (0, vue.computed)(() => {
  49591. const expandedKeys = expandedKeySet.value;
  49592. const hiddenKeys = hiddenNodeKeySet.value;
  49593. const flattenNodes = [];
  49594. const nodes = tree.value?.treeNodes || [];
  49595. const stack = [];
  49596. for (let i = nodes.length - 1; i >= 0; --i) stack.push(nodes[i]);
  49597. while (stack.length) {
  49598. const node = stack.pop();
  49599. if (hiddenKeys.has(node.key)) continue;
  49600. flattenNodes.push(node);
  49601. if (node.children && expandedKeys.has(node.key)) for (let i = node.children.length - 1; i >= 0; --i) stack.push(node.children[i]);
  49602. }
  49603. return flattenNodes;
  49604. });
  49605. const isNotEmpty = (0, vue.computed)(() => {
  49606. return flattenTree.value.length > 0;
  49607. });
  49608. function createTree(data) {
  49609. const treeNodeMap = /* @__PURE__ */ new Map();
  49610. const levelTreeNodeMap = /* @__PURE__ */ new Map();
  49611. let maxLevel = 1;
  49612. function traverse(nodes, level = 1, parent = void 0) {
  49613. const siblings = [];
  49614. for (const rawNode of nodes) {
  49615. const value = getKey(rawNode);
  49616. const node = {
  49617. level,
  49618. key: value,
  49619. data: rawNode
  49620. };
  49621. node.label = getLabel(rawNode);
  49622. node.parent = parent;
  49623. const children = getChildren(rawNode);
  49624. node.disabled = getDisabled(rawNode);
  49625. node.isLeaf = !children || children.length === 0;
  49626. node.expanded = expandedKeySet.value.has(value);
  49627. if (children && children.length) node.children = traverse(children, level + 1, node);
  49628. siblings.push(node);
  49629. treeNodeMap.set(value, node);
  49630. if (!levelTreeNodeMap.has(level)) levelTreeNodeMap.set(level, []);
  49631. levelTreeNodeMap.get(level)?.push(node);
  49632. }
  49633. if (level > maxLevel) maxLevel = level;
  49634. return siblings;
  49635. }
  49636. const treeNodes = traverse(data);
  49637. return {
  49638. treeNodeMap,
  49639. levelTreeNodeMap,
  49640. maxLevel,
  49641. treeNodes
  49642. };
  49643. }
  49644. function filter(query) {
  49645. const keys = doFilter(query);
  49646. if (keys) expandedKeySet.value = keys;
  49647. }
  49648. function getChildren(node) {
  49649. return node[childrenKey.value];
  49650. }
  49651. function getKey(node) {
  49652. if (!node) return "";
  49653. return node[valueKey.value];
  49654. }
  49655. function getDisabled(node) {
  49656. return node[disabledKey.value];
  49657. }
  49658. function getLabel(node) {
  49659. return node[labelKey.value];
  49660. }
  49661. function toggleExpand(node) {
  49662. if (expandedKeySet.value.has(node.key)) collapseNode(node);
  49663. else expandNode(node);
  49664. }
  49665. function setExpandedKeys(keys) {
  49666. const expandedKeys = /* @__PURE__ */ new Set();
  49667. const nodeMap = tree.value.treeNodeMap;
  49668. expandedKeySet.value.forEach((key) => {
  49669. const node = nodeMap.get(key);
  49670. if (node) node.expanded = false;
  49671. });
  49672. keys.forEach((k) => {
  49673. let node = nodeMap.get(k);
  49674. while (node && !expandedKeys.has(node.key)) {
  49675. expandedKeys.add(node.key);
  49676. node.expanded = true;
  49677. node = node.parent;
  49678. }
  49679. });
  49680. expandedKeySet.value = expandedKeys;
  49681. }
  49682. function handleNodeClick(node, e) {
  49683. handleCurrentChange(node);
  49684. emit(NODE_CLICK, node.data, node, e);
  49685. if (props.expandOnClickNode) toggleExpand(node);
  49686. if (props.showCheckbox && (props.checkOnClickNode || node.isLeaf && props.checkOnClickLeaf) && !node.disabled) toggleCheckbox(node, !isChecked(node), true);
  49687. }
  49688. function handleNodeDrop(node, e) {
  49689. emit(NODE_DROP, node.data, node, e);
  49690. }
  49691. function handleCurrentChange(node) {
  49692. if (!isCurrent(node)) {
  49693. currentKey.value = node.key;
  49694. emit(CURRENT_CHANGE, node.data, node);
  49695. }
  49696. }
  49697. function handleNodeCheck(node, checked) {
  49698. toggleCheckbox(node, checked);
  49699. }
  49700. function expandNode(node) {
  49701. const keySet = expandedKeySet.value;
  49702. if (tree.value && props.accordion) {
  49703. const { treeNodeMap } = tree.value;
  49704. keySet.forEach((key) => {
  49705. const treeNode = treeNodeMap.get(key);
  49706. if (node && node.level === treeNode?.level) {
  49707. keySet.delete(key);
  49708. treeNode.expanded = false;
  49709. }
  49710. });
  49711. }
  49712. keySet.add(node.key);
  49713. const _node = getNode(node.key);
  49714. if (_node) {
  49715. _node.expanded = true;
  49716. emit(NODE_EXPAND, _node.data, _node);
  49717. }
  49718. }
  49719. function collapseNode(node) {
  49720. expandedKeySet.value.delete(node.key);
  49721. const _node = getNode(node.key);
  49722. if (_node) {
  49723. _node.expanded = false;
  49724. emit(NODE_COLLAPSE, _node.data, _node);
  49725. }
  49726. }
  49727. function isDisabled(node) {
  49728. return !!node.disabled;
  49729. }
  49730. function isCurrent(node) {
  49731. const current = currentKey.value;
  49732. return current !== void 0 && current === node.key;
  49733. }
  49734. function getCurrentNode() {
  49735. if (currentKey.value === void 0) return void 0;
  49736. return tree.value?.treeNodeMap.get(currentKey.value)?.data;
  49737. }
  49738. function getCurrentKey() {
  49739. return currentKey.value;
  49740. }
  49741. function setCurrentKey(key) {
  49742. currentKey.value = key;
  49743. }
  49744. function setData(data) {
  49745. tree.value = createTree(data);
  49746. }
  49747. function getNode(data) {
  49748. const key = isObject$1(data) ? getKey(data) : data;
  49749. return tree.value?.treeNodeMap.get(key);
  49750. }
  49751. function scrollToNode(key, strategy = "auto") {
  49752. const node = getNode(key);
  49753. if (node && listRef.value) listRef.value.scrollToItem(flattenTree.value.indexOf(node), strategy);
  49754. }
  49755. function scrollTo(offset) {
  49756. listRef.value?.scrollTo(offset);
  49757. }
  49758. (0, vue.watch)(() => props.currentNodeKey, (key) => {
  49759. currentKey.value = key;
  49760. }, { immediate: true });
  49761. (0, vue.watch)(() => props.defaultExpandedKeys, (keys) => {
  49762. setExpandedKeys(keys || []);
  49763. });
  49764. (0, vue.watch)(() => props.data, (data) => {
  49765. setData(data);
  49766. setExpandedKeys(props.defaultExpandedKeys || []);
  49767. }, { immediate: true });
  49768. return {
  49769. tree,
  49770. flattenTree,
  49771. isNotEmpty,
  49772. listRef,
  49773. getKey,
  49774. getChildren,
  49775. toggleExpand,
  49776. toggleCheckbox,
  49777. isChecked,
  49778. isIndeterminate,
  49779. isDisabled,
  49780. isCurrent,
  49781. isForceHiddenExpandIcon,
  49782. handleNodeClick,
  49783. handleNodeDrop,
  49784. handleNodeCheck,
  49785. getCurrentNode,
  49786. getCurrentKey,
  49787. setCurrentKey,
  49788. getCheckedKeys,
  49789. getCheckedNodes,
  49790. getHalfCheckedKeys,
  49791. getHalfCheckedNodes,
  49792. setChecked,
  49793. setCheckedKeys,
  49794. filter,
  49795. setData,
  49796. getNode,
  49797. expandNode,
  49798. collapseNode,
  49799. setExpandedKeys,
  49800. scrollToNode,
  49801. scrollTo
  49802. };
  49803. }
  49804. //#endregion
  49805. //#region ../../packages/components/tree-v2/src/tree-node-content.ts
  49806. var tree_node_content_default = (0, vue.defineComponent)({
  49807. name: "ElTreeNodeContent",
  49808. props: treeNodeContentProps,
  49809. setup(props) {
  49810. const tree = (0, vue.inject)(ROOT_TREE_INJECTION_KEY$1);
  49811. const ns = useNamespace("tree");
  49812. return () => {
  49813. const node = props.node;
  49814. const { data } = node;
  49815. return tree?.ctx.slots.default ? tree.ctx.slots.default({
  49816. node,
  49817. data
  49818. }) : (0, vue.h)(ElText, {
  49819. tag: "span",
  49820. truncated: true,
  49821. class: ns.be("node", "label")
  49822. }, () => [node?.label]);
  49823. };
  49824. }
  49825. });
  49826. //#endregion
  49827. //#region ../../packages/components/tree-v2/src/tree-node.vue?vue&type=script&setup=true&lang.ts
  49828. const _hoisted_1$11 = [
  49829. "aria-expanded",
  49830. "aria-disabled",
  49831. "aria-checked",
  49832. "data-key"
  49833. ];
  49834. var tree_node_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  49835. name: "ElTreeNode",
  49836. __name: "tree-node",
  49837. props: treeNodeProps,
  49838. emits: treeNodeEmits,
  49839. setup(__props, { emit: __emit }) {
  49840. const props = __props;
  49841. const emit = __emit;
  49842. const tree = (0, vue.inject)(ROOT_TREE_INJECTION_KEY$1);
  49843. const ns = useNamespace("tree");
  49844. const indent = (0, vue.computed)(() => tree?.props.indent ?? 16);
  49845. const icon = (0, vue.computed)(() => tree?.props.icon ?? caret_right_default);
  49846. const getNodeClass = (node) => {
  49847. const nodeClassFunc = tree?.props.props?.class;
  49848. if (!nodeClassFunc) return {};
  49849. let className;
  49850. if (isFunction$1(nodeClassFunc)) {
  49851. const { data } = node;
  49852. className = nodeClassFunc(data, node);
  49853. } else className = nodeClassFunc;
  49854. return isString(className) ? { [className]: true } : className;
  49855. };
  49856. const handleClick = (e) => {
  49857. emit("click", props.node, e);
  49858. };
  49859. const handleDrop = (e) => {
  49860. emit("drop", props.node, e);
  49861. };
  49862. const handleExpandIconClick = () => {
  49863. emit("toggle", props.node);
  49864. };
  49865. const handleCheckChange = (value) => {
  49866. emit("check", props.node, value);
  49867. };
  49868. const handleContextMenu = (event) => {
  49869. if (tree?.instance?.vnode?.props?.["onNodeContextmenu"]) {
  49870. event.stopPropagation();
  49871. event.preventDefault();
  49872. }
  49873. tree?.ctx.emit(NODE_CONTEXTMENU, event, props.node?.data, props.node);
  49874. };
  49875. return (_ctx, _cache) => {
  49876. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  49877. ref: "node$",
  49878. class: (0, vue.normalizeClass)([
  49879. (0, vue.unref)(ns).b("node"),
  49880. (0, vue.unref)(ns).is("expanded", __props.expanded),
  49881. (0, vue.unref)(ns).is("current", __props.current),
  49882. (0, vue.unref)(ns).is("focusable", !__props.disabled),
  49883. (0, vue.unref)(ns).is("checked", !__props.disabled && __props.checked),
  49884. getNodeClass(__props.node)
  49885. ]),
  49886. role: "treeitem",
  49887. tabindex: "-1",
  49888. "aria-expanded": __props.expanded,
  49889. "aria-disabled": __props.disabled,
  49890. "aria-checked": __props.checked,
  49891. "data-key": __props.node?.key,
  49892. onClick: (0, vue.withModifiers)(handleClick, ["stop"]),
  49893. onContextmenu: handleContextMenu,
  49894. onDragover: _cache[1] || (_cache[1] = (0, vue.withModifiers)(() => {}, ["prevent"])),
  49895. onDragenter: _cache[2] || (_cache[2] = (0, vue.withModifiers)(() => {}, ["prevent"])),
  49896. onDrop: (0, vue.withModifiers)(handleDrop, ["stop"])
  49897. }, [(0, vue.createElementVNode)("div", {
  49898. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("node", "content")),
  49899. style: (0, vue.normalizeStyle)({
  49900. paddingLeft: `${(__props.node.level - 1) * indent.value}px`,
  49901. height: __props.itemSize + "px"
  49902. })
  49903. }, [
  49904. icon.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  49905. key: 0,
  49906. class: (0, vue.normalizeClass)([
  49907. (0, vue.unref)(ns).is("leaf", !!__props.node?.isLeaf),
  49908. (0, vue.unref)(ns).is("hidden", __props.hiddenExpandIcon),
  49909. { expanded: !__props.node?.isLeaf && __props.expanded },
  49910. (0, vue.unref)(ns).be("node", "expand-icon")
  49911. ]),
  49912. onClick: (0, vue.withModifiers)(handleExpandIconClick, ["stop"])
  49913. }, {
  49914. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(icon.value)))]),
  49915. _: 1
  49916. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
  49917. __props.showCheckbox ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElCheckbox), {
  49918. key: 1,
  49919. "model-value": __props.checked,
  49920. indeterminate: __props.indeterminate,
  49921. disabled: __props.disabled,
  49922. onChange: handleCheckChange,
  49923. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
  49924. }, null, 8, [
  49925. "model-value",
  49926. "indeterminate",
  49927. "disabled"
  49928. ])) : (0, vue.createCommentVNode)("v-if", true),
  49929. (0, vue.createVNode)((0, vue.unref)(tree_node_content_default), { node: {
  49930. ...__props.node,
  49931. expanded: __props.expanded
  49932. } }, null, 8, ["node"])
  49933. ], 6)], 42, _hoisted_1$11);
  49934. };
  49935. }
  49936. });
  49937. //#endregion
  49938. //#region ../../packages/components/tree-v2/src/tree-node.vue
  49939. var tree_node_default = tree_node_vue_vue_type_script_setup_true_lang_default;
  49940. //#endregion
  49941. //#region ../../packages/components/tree-v2/src/tree.vue?vue&type=script&setup=true&lang.ts
  49942. var tree_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  49943. name: "ElTreeV2",
  49944. __name: "tree",
  49945. props: treeProps$1,
  49946. emits: treeEmits$1,
  49947. setup(__props, { expose: __expose, emit: __emit }) {
  49948. const props = __props;
  49949. const emit = __emit;
  49950. const slots = (0, vue.useSlots)();
  49951. const treeNodeSize = (0, vue.computed)(() => props.itemSize);
  49952. (0, vue.provide)(ROOT_TREE_INJECTION_KEY$1, {
  49953. ctx: {
  49954. emit,
  49955. slots
  49956. },
  49957. props,
  49958. instance: (0, vue.getCurrentInstance)()
  49959. });
  49960. (0, vue.provide)(formItemContextKey, void 0);
  49961. const { t } = useLocale();
  49962. const ns = useNamespace("tree");
  49963. const { flattenTree, isNotEmpty, listRef, toggleExpand, isIndeterminate, isChecked, isDisabled, isCurrent, isForceHiddenExpandIcon, handleNodeClick, handleNodeDrop, handleNodeCheck, toggleCheckbox, getCurrentNode, getCurrentKey, setCurrentKey, getCheckedKeys, getCheckedNodes, getHalfCheckedKeys, getHalfCheckedNodes, setChecked, setCheckedKeys, filter, setData, getNode, expandNode, collapseNode, setExpandedKeys, scrollToNode, scrollTo } = useTree(props, emit);
  49964. __expose({
  49965. toggleCheckbox,
  49966. getCurrentNode,
  49967. getCurrentKey,
  49968. setCurrentKey,
  49969. getCheckedKeys,
  49970. getCheckedNodes,
  49971. getHalfCheckedKeys,
  49972. getHalfCheckedNodes,
  49973. setChecked,
  49974. setCheckedKeys,
  49975. filter,
  49976. setData,
  49977. getNode,
  49978. expandNode,
  49979. collapseNode,
  49980. setExpandedKeys,
  49981. scrollToNode,
  49982. scrollTo
  49983. });
  49984. return (_ctx, _cache) => {
  49985. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  49986. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), { [(0, vue.unref)(ns).m("highlight-current")]: __props.highlightCurrent }]),
  49987. role: "tree"
  49988. }, [(0, vue.unref)(isNotEmpty) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(FixedSizeList), {
  49989. key: 0,
  49990. ref_key: "listRef",
  49991. ref: listRef,
  49992. "class-name": (0, vue.unref)(ns).b("virtual-list"),
  49993. data: (0, vue.unref)(flattenTree),
  49994. total: (0, vue.unref)(flattenTree).length,
  49995. height: __props.height,
  49996. "item-size": treeNodeSize.value,
  49997. "perf-mode": __props.perfMode,
  49998. "scrollbar-always-on": __props.scrollbarAlwaysOn
  49999. }, {
  50000. default: (0, vue.withCtx)(({ data, index, style }) => [((0, vue.openBlock)(), (0, vue.createBlock)(tree_node_default, {
  50001. key: data[index].key,
  50002. style: (0, vue.normalizeStyle)(style),
  50003. node: data[index],
  50004. expanded: data[index].expanded,
  50005. "show-checkbox": __props.showCheckbox,
  50006. checked: (0, vue.unref)(isChecked)(data[index]),
  50007. indeterminate: (0, vue.unref)(isIndeterminate)(data[index]),
  50008. "item-size": treeNodeSize.value,
  50009. disabled: (0, vue.unref)(isDisabled)(data[index]),
  50010. current: (0, vue.unref)(isCurrent)(data[index]),
  50011. "hidden-expand-icon": (0, vue.unref)(isForceHiddenExpandIcon)(data[index]),
  50012. onClick: (0, vue.unref)(handleNodeClick),
  50013. onToggle: (0, vue.unref)(toggleExpand),
  50014. onCheck: (0, vue.unref)(handleNodeCheck),
  50015. onDrop: (0, vue.unref)(handleNodeDrop)
  50016. }, null, 8, [
  50017. "style",
  50018. "node",
  50019. "expanded",
  50020. "show-checkbox",
  50021. "checked",
  50022. "indeterminate",
  50023. "item-size",
  50024. "disabled",
  50025. "current",
  50026. "hidden-expand-icon",
  50027. "onClick",
  50028. "onToggle",
  50029. "onCheck",
  50030. "onDrop"
  50031. ]))]),
  50032. _: 1
  50033. }, 8, [
  50034. "class-name",
  50035. "data",
  50036. "total",
  50037. "height",
  50038. "item-size",
  50039. "perf-mode",
  50040. "scrollbar-always-on"
  50041. ])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  50042. key: 1,
  50043. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-block"))
  50044. }, [(0, vue.renderSlot)(_ctx.$slots, "empty", {}, () => [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("empty-text")) }, (0, vue.toDisplayString)(__props.emptyText ?? (0, vue.unref)(t)("el.tree.emptyText")), 3)])], 2))], 2);
  50045. };
  50046. }
  50047. });
  50048. //#endregion
  50049. //#region ../../packages/components/tree-v2/src/tree.vue
  50050. var tree_default = tree_vue_vue_type_script_setup_true_lang_default;
  50051. //#endregion
  50052. //#region ../../packages/components/tree-v2/index.ts
  50053. const ElTreeV2 = withInstall(tree_default);
  50054. //#endregion
  50055. //#region ../../packages/components/upload/src/ajax.ts
  50056. const SCOPE$3 = "ElUpload";
  50057. var UploadAjaxError = class extends Error {
  50058. constructor(message, status, method, url) {
  50059. super(message);
  50060. this.name = "UploadAjaxError";
  50061. this.status = status;
  50062. this.method = method;
  50063. this.url = url;
  50064. }
  50065. };
  50066. function getError(action, option, xhr) {
  50067. let msg;
  50068. if (xhr.response) msg = `${xhr.response.error || xhr.response}`;
  50069. else if (xhr.responseText) msg = `${xhr.responseText}`;
  50070. else msg = `fail to ${option.method} ${action} ${xhr.status}`;
  50071. return new UploadAjaxError(msg, xhr.status, option.method, action);
  50072. }
  50073. function getBody(xhr) {
  50074. const text = xhr.responseText || xhr.response;
  50075. if (!text) return text;
  50076. try {
  50077. return JSON.parse(text);
  50078. } catch {
  50079. return text;
  50080. }
  50081. }
  50082. const ajaxUpload = (option) => {
  50083. if (typeof XMLHttpRequest === "undefined") throwError(SCOPE$3, "XMLHttpRequest is undefined");
  50084. const xhr = new XMLHttpRequest();
  50085. const action = option.action;
  50086. if (xhr.upload) xhr.upload.addEventListener("progress", (evt) => {
  50087. const progressEvt = evt;
  50088. progressEvt.percent = evt.total > 0 ? evt.loaded / evt.total * 100 : 0;
  50089. option.onProgress(progressEvt);
  50090. });
  50091. const formData = new FormData();
  50092. if (option.data) for (const [key, value] of Object.entries(option.data)) if (isArray$1(value)) if (value.length === 2 && value[0] instanceof Blob && isString(value[1])) formData.append(key, value[0], value[1]);
  50093. else value.forEach((item) => {
  50094. formData.append(key, item);
  50095. });
  50096. else formData.append(key, value);
  50097. formData.append(option.filename, option.file, option.file.name);
  50098. xhr.addEventListener("error", () => {
  50099. option.onError(getError(action, option, xhr));
  50100. });
  50101. xhr.addEventListener("load", () => {
  50102. if (xhr.status < 200 || xhr.status >= 300) return option.onError(getError(action, option, xhr));
  50103. option.onSuccess(getBody(xhr));
  50104. });
  50105. xhr.open(option.method, action, true);
  50106. if (option.withCredentials && "withCredentials" in xhr) xhr.withCredentials = true;
  50107. const headers = option.headers || {};
  50108. if (headers instanceof Headers) headers.forEach((value, key) => xhr.setRequestHeader(key, value));
  50109. else for (const [key, value] of Object.entries(headers)) {
  50110. if (isNil(value)) continue;
  50111. xhr.setRequestHeader(key, String(value));
  50112. }
  50113. xhr.send(formData);
  50114. return xhr;
  50115. };
  50116. //#endregion
  50117. //#region ../../packages/components/upload/src/upload.ts
  50118. const uploadListTypes = [
  50119. "text",
  50120. "picture",
  50121. "picture-card"
  50122. ];
  50123. let fileId = 1;
  50124. const genFileId = () => Date.now() + fileId++;
  50125. const uploadBaseProps = buildProps({
  50126. action: {
  50127. type: String,
  50128. default: "#"
  50129. },
  50130. headers: { type: definePropType(Object) },
  50131. method: {
  50132. type: String,
  50133. default: "post"
  50134. },
  50135. data: {
  50136. type: definePropType([
  50137. Object,
  50138. Function,
  50139. Promise
  50140. ]),
  50141. default: () => mutable({})
  50142. },
  50143. multiple: Boolean,
  50144. name: {
  50145. type: String,
  50146. default: "file"
  50147. },
  50148. drag: Boolean,
  50149. withCredentials: Boolean,
  50150. showFileList: {
  50151. type: Boolean,
  50152. default: true
  50153. },
  50154. accept: {
  50155. type: String,
  50156. default: ""
  50157. },
  50158. fileList: {
  50159. type: definePropType(Array),
  50160. default: () => mutable([])
  50161. },
  50162. autoUpload: {
  50163. type: Boolean,
  50164. default: true
  50165. },
  50166. listType: {
  50167. type: String,
  50168. values: uploadListTypes,
  50169. default: "text"
  50170. },
  50171. httpRequest: {
  50172. type: definePropType(Function),
  50173. default: ajaxUpload
  50174. },
  50175. disabled: {
  50176. type: Boolean,
  50177. default: void 0
  50178. },
  50179. limit: Number,
  50180. directory: Boolean
  50181. });
  50182. const uploadProps = buildProps({
  50183. ...uploadBaseProps,
  50184. beforeUpload: {
  50185. type: definePropType(Function),
  50186. default: NOOP
  50187. },
  50188. beforeRemove: { type: definePropType(Function) },
  50189. onRemove: {
  50190. type: definePropType(Function),
  50191. default: NOOP
  50192. },
  50193. onChange: {
  50194. type: definePropType(Function),
  50195. default: NOOP
  50196. },
  50197. onPreview: {
  50198. type: definePropType(Function),
  50199. default: NOOP
  50200. },
  50201. onSuccess: {
  50202. type: definePropType(Function),
  50203. default: NOOP
  50204. },
  50205. onProgress: {
  50206. type: definePropType(Function),
  50207. default: NOOP
  50208. },
  50209. onError: {
  50210. type: definePropType(Function),
  50211. default: NOOP
  50212. },
  50213. onExceed: {
  50214. type: definePropType(Function),
  50215. default: NOOP
  50216. },
  50217. crossorigin: { type: definePropType(String) }
  50218. });
  50219. const uploadBasePropsDefaults = {
  50220. action: "#",
  50221. method: "post",
  50222. data: () => mutable({}),
  50223. name: "file",
  50224. showFileList: true,
  50225. accept: "",
  50226. fileList: () => mutable([]),
  50227. autoUpload: true,
  50228. listType: "text",
  50229. httpRequest: ajaxUpload,
  50230. disabled: void 0
  50231. };
  50232. const uploadPropsDefaults = {
  50233. ...uploadBasePropsDefaults,
  50234. beforeUpload: NOOP,
  50235. onRemove: NOOP,
  50236. onChange: NOOP,
  50237. onPreview: NOOP,
  50238. onSuccess: NOOP,
  50239. onProgress: NOOP,
  50240. onError: NOOP,
  50241. onExceed: NOOP
  50242. };
  50243. //#endregion
  50244. //#region ../../packages/components/upload/src/constants.ts
  50245. const uploadContextKey = Symbol("uploadContextKey");
  50246. //#endregion
  50247. //#region ../../packages/components/upload/src/upload-list.ts
  50248. const uploadListProps = buildProps({
  50249. files: {
  50250. type: definePropType(Array),
  50251. default: () => mutable([])
  50252. },
  50253. disabled: {
  50254. type: Boolean,
  50255. default: void 0
  50256. },
  50257. handlePreview: {
  50258. type: definePropType(Function),
  50259. default: NOOP
  50260. },
  50261. listType: {
  50262. type: String,
  50263. values: uploadListTypes,
  50264. default: "text"
  50265. },
  50266. crossorigin: { type: definePropType(String) }
  50267. });
  50268. const uploadListEmits = { remove: (file) => !!file };
  50269. //#endregion
  50270. //#region ../../packages/components/upload/src/upload-list.vue?vue&type=script&setup=true&lang.ts
  50271. const _hoisted_1$10 = [
  50272. "tabindex",
  50273. "aria-disabled",
  50274. "onKeydown"
  50275. ];
  50276. const _hoisted_2$6 = ["src", "crossorigin"];
  50277. const _hoisted_3$2 = ["onClick"];
  50278. const _hoisted_4$1 = ["title"];
  50279. const _hoisted_5 = ["onClick"];
  50280. const _hoisted_6 = ["onClick"];
  50281. var upload_list_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  50282. name: "ElUploadList",
  50283. __name: "upload-list",
  50284. props: uploadListProps,
  50285. emits: uploadListEmits,
  50286. setup(__props, { emit: __emit }) {
  50287. const props = __props;
  50288. const emit = __emit;
  50289. const { t } = useLocale();
  50290. const nsUpload = useNamespace("upload");
  50291. const nsIcon = useNamespace("icon");
  50292. const nsList = useNamespace("list");
  50293. const disabled = useFormDisabled();
  50294. const focusing = (0, vue.ref)(false);
  50295. const containerKls = (0, vue.computed)(() => [
  50296. nsUpload.b("list"),
  50297. nsUpload.bm("list", props.listType),
  50298. nsUpload.is("disabled", disabled.value)
  50299. ]);
  50300. const handleRemove = (file) => {
  50301. emit("remove", file);
  50302. };
  50303. return (_ctx, _cache) => {
  50304. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.TransitionGroup, {
  50305. tag: "ul",
  50306. class: (0, vue.normalizeClass)(containerKls.value),
  50307. name: (0, vue.unref)(nsList).b()
  50308. }, {
  50309. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.files, (file, index) => {
  50310. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  50311. key: file.uid || file.name,
  50312. class: (0, vue.normalizeClass)([
  50313. (0, vue.unref)(nsUpload).be("list", "item"),
  50314. (0, vue.unref)(nsUpload).is(file.status),
  50315. { focusing: focusing.value }
  50316. ]),
  50317. tabindex: (0, vue.unref)(disabled) ? void 0 : 0,
  50318. "aria-disabled": (0, vue.unref)(disabled),
  50319. role: "button",
  50320. onKeydown: (0, vue.withKeys)(($event) => !(0, vue.unref)(disabled) && handleRemove(file), ["delete"]),
  50321. onFocus: _cache[0] || (_cache[0] = ($event) => focusing.value = true),
  50322. onBlur: _cache[1] || (_cache[1] = ($event) => focusing.value = false),
  50323. onClick: _cache[2] || (_cache[2] = ($event) => focusing.value = false)
  50324. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {
  50325. file,
  50326. index
  50327. }, () => [
  50328. __props.listType === "picture" || file.status !== "uploading" && __props.listType === "picture-card" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
  50329. key: 0,
  50330. class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-thumbnail")),
  50331. src: file.url,
  50332. crossorigin: __props.crossorigin,
  50333. alt: ""
  50334. }, null, 10, _hoisted_2$6)) : (0, vue.createCommentVNode)("v-if", true),
  50335. file.status === "uploading" || __props.listType !== "picture-card" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  50336. key: 1,
  50337. class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-info"))
  50338. }, [(0, vue.createElementVNode)("a", {
  50339. class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-name")),
  50340. onClick: (0, vue.withModifiers)(($event) => __props.handlePreview(file), ["prevent"])
  50341. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("document")) }, {
  50342. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(document_default))]),
  50343. _: 1
  50344. }, 8, ["class"]), (0, vue.createElementVNode)("span", {
  50345. class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-file-name")),
  50346. title: file.name
  50347. }, (0, vue.toDisplayString)(file.name), 11, _hoisted_4$1)], 10, _hoisted_3$2), file.status === "uploading" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElProgress), {
  50348. key: 0,
  50349. type: __props.listType === "picture-card" ? "circle" : "line",
  50350. "stroke-width": __props.listType === "picture-card" ? 6 : 2,
  50351. percentage: Number(file.percentage),
  50352. style: (0, vue.normalizeStyle)(__props.listType === "picture-card" ? "" : "margin-top: 0.5rem")
  50353. }, null, 8, [
  50354. "type",
  50355. "stroke-width",
  50356. "percentage",
  50357. "style"
  50358. ])) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true),
  50359. (0, vue.createElementVNode)("label", { class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-status-label")) }, [__props.listType === "text" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  50360. key: 0,
  50361. class: (0, vue.normalizeClass)([(0, vue.unref)(nsIcon).m("upload-success"), (0, vue.unref)(nsIcon).m("circle-check")])
  50362. }, {
  50363. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(circle_check_default))]),
  50364. _: 1
  50365. }, 8, ["class"])) : ["picture-card", "picture"].includes(__props.listType) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  50366. key: 1,
  50367. class: (0, vue.normalizeClass)([(0, vue.unref)(nsIcon).m("upload-success"), (0, vue.unref)(nsIcon).m("check")])
  50368. }, {
  50369. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(check_default))]),
  50370. _: 1
  50371. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)], 2),
  50372. !(0, vue.unref)(disabled) ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  50373. key: 2,
  50374. class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("close")),
  50375. "aria-label": (0, vue.unref)(t)("el.upload.delete"),
  50376. role: "button",
  50377. tabindex: "0",
  50378. onClick: ($event) => handleRemove(file),
  50379. onKeydown: (0, vue.withKeys)((0, vue.withModifiers)(($event) => handleRemove(file), ["prevent"]), ["enter", "space"])
  50380. }, {
  50381. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(close_default))]),
  50382. _: 1
  50383. }, 8, [
  50384. "class",
  50385. "aria-label",
  50386. "onClick",
  50387. "onKeydown"
  50388. ])) : (0, vue.createCommentVNode)("v-if", true),
  50389. !(0, vue.unref)(disabled) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("i", {
  50390. key: 3,
  50391. class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("close-tip"))
  50392. }, (0, vue.toDisplayString)((0, vue.unref)(t)("el.upload.deleteTip")), 3)) : (0, vue.createCommentVNode)("v-if", true),
  50393. __props.listType === "picture-card" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  50394. key: 4,
  50395. class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-actions"))
  50396. }, [(0, vue.createElementVNode)("span", {
  50397. class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-preview")),
  50398. onClick: ($event) => __props.handlePreview(file)
  50399. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("zoom-in")) }, {
  50400. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(zoom_in_default))]),
  50401. _: 1
  50402. }, 8, ["class"])], 10, _hoisted_5), !(0, vue.unref)(disabled) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  50403. key: 0,
  50404. class: (0, vue.normalizeClass)((0, vue.unref)(nsUpload).be("list", "item-delete")),
  50405. onClick: ($event) => handleRemove(file)
  50406. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(nsIcon).m("delete")) }, {
  50407. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(delete_default))]),
  50408. _: 1
  50409. }, 8, ["class"])], 10, _hoisted_6)) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true)
  50410. ])], 42, _hoisted_1$10);
  50411. }), 128)), (0, vue.renderSlot)(_ctx.$slots, "append")]),
  50412. _: 3
  50413. }, 8, ["class", "name"]);
  50414. };
  50415. }
  50416. });
  50417. //#endregion
  50418. //#region ../../packages/components/upload/src/upload-list.vue
  50419. var upload_list_default = upload_list_vue_vue_type_script_setup_true_lang_default;
  50420. //#endregion
  50421. //#region ../../packages/components/upload/src/upload-content.ts
  50422. const uploadContentProps = buildProps({
  50423. ...uploadBaseProps,
  50424. beforeUpload: {
  50425. type: definePropType(Function),
  50426. default: NOOP
  50427. },
  50428. onRemove: {
  50429. type: definePropType(Function),
  50430. default: NOOP
  50431. },
  50432. onStart: {
  50433. type: definePropType(Function),
  50434. default: NOOP
  50435. },
  50436. onSuccess: {
  50437. type: definePropType(Function),
  50438. default: NOOP
  50439. },
  50440. onProgress: {
  50441. type: definePropType(Function),
  50442. default: NOOP
  50443. },
  50444. onError: {
  50445. type: definePropType(Function),
  50446. default: NOOP
  50447. },
  50448. onExceed: {
  50449. type: definePropType(Function),
  50450. default: NOOP
  50451. }
  50452. });
  50453. const uploadContentPropsDefaults = {
  50454. ...uploadBasePropsDefaults,
  50455. beforeUpload: NOOP,
  50456. onRemove: NOOP,
  50457. onStart: NOOP,
  50458. onSuccess: NOOP,
  50459. onProgress: NOOP,
  50460. onError: NOOP,
  50461. onExceed: NOOP
  50462. };
  50463. //#endregion
  50464. //#region ../../packages/components/upload/src/upload-dragger.ts
  50465. const uploadDraggerProps = buildProps({
  50466. disabled: {
  50467. type: Boolean,
  50468. default: void 0
  50469. },
  50470. directory: Boolean
  50471. });
  50472. const uploadDraggerEmits = { file: (file) => isArray$1(file) };
  50473. //#endregion
  50474. //#region ../../packages/components/upload/src/upload-dragger.vue?vue&type=script&setup=true&lang.ts
  50475. const COMPONENT_NAME$1 = "ElUploadDrag";
  50476. var upload_dragger_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  50477. name: COMPONENT_NAME$1,
  50478. __name: "upload-dragger",
  50479. props: uploadDraggerProps,
  50480. emits: uploadDraggerEmits,
  50481. setup(__props, { emit: __emit }) {
  50482. const props = __props;
  50483. const emit = __emit;
  50484. if (!(0, vue.inject)(uploadContextKey)) throwError(COMPONENT_NAME$1, "usage: <el-upload><el-upload-dragger /></el-upload>");
  50485. const ns = useNamespace("upload");
  50486. const dragover = (0, vue.ref)(false);
  50487. const disabled = useFormDisabled();
  50488. const getFile = (entry) => {
  50489. return new Promise((resolve, reject) => entry.file(resolve, reject));
  50490. };
  50491. const getAllFiles = async (entry) => {
  50492. try {
  50493. if (entry.isFile) {
  50494. const file = await getFile(entry);
  50495. file.isDirectory = false;
  50496. return [file];
  50497. }
  50498. if (entry.isDirectory) {
  50499. const dirReader = entry.createReader();
  50500. const getEntries = () => {
  50501. return new Promise((resolve, reject) => dirReader.readEntries(resolve, reject));
  50502. };
  50503. const entries = [];
  50504. let readEntries = await getEntries();
  50505. while (readEntries.length > 0) {
  50506. entries.push(...readEntries);
  50507. readEntries = await getEntries();
  50508. }
  50509. const filePromises = entries.map((entry) => getAllFiles(entry).catch(() => []));
  50510. return flatten(await Promise.all(filePromises));
  50511. }
  50512. } catch {
  50513. return [];
  50514. }
  50515. return [];
  50516. };
  50517. const onDrop = async (e) => {
  50518. if (disabled.value) return;
  50519. dragover.value = false;
  50520. e.stopPropagation();
  50521. const files = Array.from(e.dataTransfer.files);
  50522. const items = e.dataTransfer.items || [];
  50523. if (props.directory) {
  50524. const entries = Array.from(items).map((item) => item?.webkitGetAsEntry?.()).filter((entry) => entry);
  50525. emit("file", flatten(await Promise.all(entries.map(getAllFiles))));
  50526. return;
  50527. }
  50528. files.forEach((file, index) => {
  50529. const entry = items[index]?.webkitGetAsEntry?.();
  50530. if (entry) file.isDirectory = entry.isDirectory;
  50531. });
  50532. emit("file", files);
  50533. };
  50534. const onDragover = () => {
  50535. if (!disabled.value) dragover.value = true;
  50536. };
  50537. const onDragleave = (e) => {
  50538. if (!e.currentTarget.contains(e.relatedTarget)) dragover.value = false;
  50539. };
  50540. return (_ctx, _cache) => {
  50541. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  50542. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("dragger"), (0, vue.unref)(ns).is("dragover", dragover.value)]),
  50543. onDrop: (0, vue.withModifiers)(onDrop, ["prevent"]),
  50544. onDragover: (0, vue.withModifiers)(onDragover, ["prevent"]),
  50545. onDragleave: (0, vue.withModifiers)(onDragleave, ["prevent"])
  50546. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 34);
  50547. };
  50548. }
  50549. });
  50550. //#endregion
  50551. //#region ../../packages/components/upload/src/upload-dragger.vue
  50552. var upload_dragger_default = upload_dragger_vue_vue_type_script_setup_true_lang_default;
  50553. //#endregion
  50554. //#region ../../packages/components/upload/src/upload-content.vue?vue&type=script&setup=true&lang.ts
  50555. const _hoisted_1$9 = [
  50556. "tabindex",
  50557. "aria-disabled",
  50558. "onKeydown"
  50559. ];
  50560. const _hoisted_2$5 = [
  50561. "name",
  50562. "disabled",
  50563. "multiple",
  50564. "accept",
  50565. "webkitdirectory"
  50566. ];
  50567. var upload_content_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  50568. name: "ElUploadContent",
  50569. inheritAttrs: false,
  50570. __name: "upload-content",
  50571. props: uploadContentProps,
  50572. setup(__props, { expose: __expose }) {
  50573. const props = __props;
  50574. const ns = useNamespace("upload");
  50575. const disabled = useFormDisabled();
  50576. const requests = (0, vue.shallowRef)({});
  50577. const inputRef = (0, vue.shallowRef)();
  50578. const uploadFiles = (files) => {
  50579. if (files.length === 0) return;
  50580. const { autoUpload, limit, fileList, multiple, onStart, onExceed } = props;
  50581. if (limit && fileList.length + files.length > limit) {
  50582. onExceed(files, fileList);
  50583. return;
  50584. }
  50585. if (!multiple) files = files.slice(0, 1);
  50586. for (const file of files) {
  50587. const rawFile = file;
  50588. rawFile.uid = genFileId();
  50589. onStart(rawFile);
  50590. if (autoUpload) upload(rawFile);
  50591. }
  50592. };
  50593. const upload = async (rawFile) => {
  50594. inputRef.value.value = "";
  50595. if (!props.beforeUpload) return doUpload(rawFile);
  50596. let hookResult;
  50597. let beforeData = {};
  50598. try {
  50599. const originData = props.data;
  50600. const beforeUploadPromise = props.beforeUpload(rawFile);
  50601. beforeData = isPlainObject$1(props.data) ? cloneDeep(props.data) : props.data;
  50602. hookResult = await beforeUploadPromise;
  50603. if (isPlainObject$1(props.data) && isEqual$1(originData, beforeData)) beforeData = cloneDeep(props.data);
  50604. } catch {
  50605. hookResult = false;
  50606. }
  50607. if (hookResult === false) {
  50608. props.onRemove(rawFile);
  50609. return;
  50610. }
  50611. let file = rawFile;
  50612. if (hookResult instanceof Blob) if (hookResult instanceof File) file = hookResult;
  50613. else file = new File([hookResult], rawFile.name, { type: rawFile.type });
  50614. doUpload(Object.assign(file, { uid: rawFile.uid }), beforeData);
  50615. };
  50616. const resolveData = async (data, rawFile) => {
  50617. if (isFunction$1(data)) return data(rawFile);
  50618. return data;
  50619. };
  50620. const doUpload = async (rawFile, beforeData) => {
  50621. const { headers, data, method, withCredentials, name: filename, action, onProgress, onSuccess, onError, httpRequest } = props;
  50622. try {
  50623. beforeData = await resolveData(beforeData ?? data, rawFile);
  50624. } catch {
  50625. props.onRemove(rawFile);
  50626. return;
  50627. }
  50628. const { uid } = rawFile;
  50629. const options = {
  50630. headers: headers || {},
  50631. withCredentials,
  50632. file: rawFile,
  50633. data: beforeData,
  50634. method,
  50635. filename,
  50636. action,
  50637. onProgress: (evt) => {
  50638. onProgress(evt, rawFile);
  50639. },
  50640. onSuccess: (res) => {
  50641. onSuccess(res, rawFile);
  50642. delete requests.value[uid];
  50643. },
  50644. onError: (err) => {
  50645. onError(err, rawFile);
  50646. delete requests.value[uid];
  50647. }
  50648. };
  50649. const request = httpRequest(options);
  50650. requests.value[uid] = request;
  50651. if (request instanceof Promise) request.then(options.onSuccess, options.onError);
  50652. };
  50653. const handleChange = (e) => {
  50654. const files = e.target.files;
  50655. if (!files) return;
  50656. uploadFiles(Array.from(files));
  50657. };
  50658. const handleClick = () => {
  50659. if (!disabled.value) {
  50660. inputRef.value.value = "";
  50661. inputRef.value.click();
  50662. }
  50663. };
  50664. const handleKeydown = () => {
  50665. handleClick();
  50666. };
  50667. const abort = (file) => {
  50668. entriesOf(requests.value).filter(file ? ([uid]) => String(file.uid) === uid : () => true).forEach(([uid, req]) => {
  50669. if (req instanceof XMLHttpRequest) req.abort();
  50670. delete requests.value[uid];
  50671. });
  50672. };
  50673. __expose({
  50674. abort,
  50675. upload
  50676. });
  50677. return (_ctx, _cache) => {
  50678. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  50679. class: (0, vue.normalizeClass)([
  50680. (0, vue.unref)(ns).b(),
  50681. (0, vue.unref)(ns).m(__props.listType),
  50682. (0, vue.unref)(ns).is("drag", __props.drag),
  50683. (0, vue.unref)(ns).is("disabled", (0, vue.unref)(disabled))
  50684. ]),
  50685. tabindex: (0, vue.unref)(disabled) ? void 0 : 0,
  50686. "aria-disabled": (0, vue.unref)(disabled),
  50687. role: "button",
  50688. onClick: handleClick,
  50689. onKeydown: (0, vue.withKeys)((0, vue.withModifiers)(handleKeydown, ["self"]), ["enter", "space"])
  50690. }, [__props.drag ? ((0, vue.openBlock)(), (0, vue.createBlock)(upload_dragger_default, {
  50691. key: 0,
  50692. disabled: (0, vue.unref)(disabled),
  50693. directory: __props.directory,
  50694. onFile: uploadFiles
  50695. }, {
  50696. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  50697. _: 3
  50698. }, 8, ["disabled", "directory"])) : (0, vue.renderSlot)(_ctx.$slots, "default", { key: 1 }), (0, vue.createElementVNode)("input", {
  50699. ref_key: "inputRef",
  50700. ref: inputRef,
  50701. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("input")),
  50702. name: __props.name,
  50703. disabled: (0, vue.unref)(disabled),
  50704. multiple: __props.multiple,
  50705. accept: __props.accept,
  50706. webkitdirectory: __props.directory || void 0,
  50707. type: "file",
  50708. onChange: handleChange,
  50709. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(() => {}, ["stop"]))
  50710. }, null, 42, _hoisted_2$5)], 42, _hoisted_1$9);
  50711. };
  50712. }
  50713. });
  50714. //#endregion
  50715. //#region ../../packages/components/upload/src/upload-content.vue
  50716. var upload_content_default = upload_content_vue_vue_type_script_setup_true_lang_default;
  50717. //#endregion
  50718. //#region ../../packages/components/upload/src/use-handlers.ts
  50719. const SCOPE$2 = "ElUpload";
  50720. const revokeFileObjectURL = (file) => {
  50721. if (file.url?.startsWith("blob:")) URL.revokeObjectURL(file.url);
  50722. };
  50723. const useHandlers = (props, uploadRef) => {
  50724. const uploadFiles = useVModel(props, "fileList", void 0, { passive: true });
  50725. const getFile = (rawFile) => uploadFiles.value.find((file) => file.uid === rawFile.uid);
  50726. function abort(file) {
  50727. uploadRef.value?.abort(file);
  50728. }
  50729. function clearFiles(states = [
  50730. "ready",
  50731. "uploading",
  50732. "success",
  50733. "fail"
  50734. ]) {
  50735. uploadFiles.value = uploadFiles.value.filter((row) => !states.includes(row.status));
  50736. }
  50737. function removeFile(file) {
  50738. uploadFiles.value = uploadFiles.value.filter((uploadFile) => uploadFile.uid !== file.uid);
  50739. }
  50740. const emitChange = (file) => {
  50741. (0, vue.nextTick)(() => props.onChange(file, uploadFiles.value));
  50742. };
  50743. const handleError = (err, rawFile) => {
  50744. const file = getFile(rawFile);
  50745. if (!file) return;
  50746. console.error(err);
  50747. file.status = "fail";
  50748. removeFile(file);
  50749. props.onError(err, file, uploadFiles.value);
  50750. emitChange(file);
  50751. };
  50752. const handleProgress = (evt, rawFile) => {
  50753. const file = getFile(rawFile);
  50754. if (!file) return;
  50755. props.onProgress(evt, file, uploadFiles.value);
  50756. file.status = "uploading";
  50757. file.percentage = Math.round(evt.percent);
  50758. };
  50759. const handleSuccess = (response, rawFile) => {
  50760. const file = getFile(rawFile);
  50761. if (!file) return;
  50762. file.status = "success";
  50763. file.response = response;
  50764. props.onSuccess(response, file, uploadFiles.value);
  50765. emitChange(file);
  50766. };
  50767. const handleStart = (file) => {
  50768. if (isNil(file.uid)) file.uid = genFileId();
  50769. const uploadFile = {
  50770. name: file.name,
  50771. percentage: 0,
  50772. status: "ready",
  50773. size: file.size,
  50774. raw: file,
  50775. uid: file.uid
  50776. };
  50777. if (props.listType === "picture-card" || props.listType === "picture") try {
  50778. uploadFile.url = URL.createObjectURL(file);
  50779. } catch (err) {
  50780. /* @__PURE__ */ debugWarn(SCOPE$2, err.message);
  50781. props.onError(err, uploadFile, uploadFiles.value);
  50782. }
  50783. uploadFiles.value = [...uploadFiles.value, uploadFile];
  50784. emitChange(uploadFile);
  50785. };
  50786. const handleRemove = async (file) => {
  50787. const uploadFile = file instanceof File ? getFile(file) : file;
  50788. if (!uploadFile) throwError(SCOPE$2, "file to be removed not found");
  50789. const doRemove = (file) => {
  50790. abort(file);
  50791. removeFile(file);
  50792. props.onRemove(file, uploadFiles.value);
  50793. revokeFileObjectURL(file);
  50794. };
  50795. if (props.beforeRemove) {
  50796. if (await props.beforeRemove(uploadFile, uploadFiles.value) !== false) doRemove(uploadFile);
  50797. } else doRemove(uploadFile);
  50798. };
  50799. function submit() {
  50800. uploadFiles.value.filter(({ status }) => status === "ready").forEach(({ raw }) => raw && uploadRef.value?.upload(raw));
  50801. }
  50802. (0, vue.watch)(() => props.listType, (val) => {
  50803. if (val !== "picture-card" && val !== "picture") return;
  50804. uploadFiles.value = uploadFiles.value.map((file) => {
  50805. const { raw, url } = file;
  50806. if (!url && raw) try {
  50807. file.url = URL.createObjectURL(raw);
  50808. } catch (err) {
  50809. props.onError(err, file, uploadFiles.value);
  50810. }
  50811. return file;
  50812. });
  50813. });
  50814. (0, vue.watch)(uploadFiles, (files) => {
  50815. for (const file of files) {
  50816. file.uid ||= genFileId();
  50817. file.status ||= "success";
  50818. }
  50819. }, {
  50820. immediate: true,
  50821. deep: true
  50822. });
  50823. return {
  50824. uploadFiles,
  50825. abort,
  50826. clearFiles,
  50827. handleError,
  50828. handleProgress,
  50829. handleStart,
  50830. handleSuccess,
  50831. handleRemove,
  50832. submit,
  50833. revokeFileObjectURL
  50834. };
  50835. };
  50836. //#endregion
  50837. //#region ../../packages/components/upload/src/upload.vue?vue&type=script&setup=true&lang.ts
  50838. var upload_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  50839. name: "ElUpload",
  50840. __name: "upload",
  50841. props: uploadProps,
  50842. setup(__props, { expose: __expose }) {
  50843. const props = __props;
  50844. const disabled = useFormDisabled();
  50845. const uploadRef = (0, vue.shallowRef)();
  50846. const { abort, submit, clearFiles, uploadFiles, handleStart, handleError, handleRemove, handleSuccess, handleProgress, revokeFileObjectURL } = useHandlers(props, uploadRef);
  50847. const isPictureCard = (0, vue.computed)(() => props.listType === "picture-card");
  50848. const uploadContentProps = (0, vue.computed)(() => ({
  50849. ...props,
  50850. fileList: uploadFiles.value,
  50851. onStart: handleStart,
  50852. onProgress: handleProgress,
  50853. onSuccess: handleSuccess,
  50854. onError: handleError,
  50855. onRemove: handleRemove
  50856. }));
  50857. (0, vue.onBeforeUnmount)(() => {
  50858. uploadFiles.value.forEach(revokeFileObjectURL);
  50859. });
  50860. (0, vue.provide)(uploadContextKey, { accept: (0, vue.toRef)(props, "accept") });
  50861. __expose({
  50862. abort,
  50863. submit,
  50864. clearFiles,
  50865. handleStart,
  50866. handleRemove
  50867. });
  50868. return (_ctx, _cache) => {
  50869. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", null, [
  50870. isPictureCard.value && __props.showFileList ? ((0, vue.openBlock)(), (0, vue.createBlock)(upload_list_default, {
  50871. key: 0,
  50872. disabled: (0, vue.unref)(disabled),
  50873. "list-type": __props.listType,
  50874. files: (0, vue.unref)(uploadFiles),
  50875. crossorigin: __props.crossorigin,
  50876. "handle-preview": __props.onPreview,
  50877. onRemove: (0, vue.unref)(handleRemove)
  50878. }, (0, vue.createSlots)({
  50879. append: (0, vue.withCtx)(() => [(0, vue.createVNode)(upload_content_default, (0, vue.mergeProps)({
  50880. ref_key: "uploadRef",
  50881. ref: uploadRef
  50882. }, uploadContentProps.value), {
  50883. default: (0, vue.withCtx)(() => [_ctx.$slots.trigger ? (0, vue.renderSlot)(_ctx.$slots, "trigger", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true), !_ctx.$slots.trigger && _ctx.$slots.default ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 1 }) : (0, vue.createCommentVNode)("v-if", true)]),
  50884. _: 3
  50885. }, 16)]),
  50886. _: 2
  50887. }, [_ctx.$slots.file ? {
  50888. name: "default",
  50889. fn: (0, vue.withCtx)(({ file, index }) => [(0, vue.renderSlot)(_ctx.$slots, "file", {
  50890. file,
  50891. index
  50892. })]),
  50893. key: "0"
  50894. } : void 0]), 1032, [
  50895. "disabled",
  50896. "list-type",
  50897. "files",
  50898. "crossorigin",
  50899. "handle-preview",
  50900. "onRemove"
  50901. ])) : (0, vue.createCommentVNode)("v-if", true),
  50902. !isPictureCard.value || isPictureCard.value && !__props.showFileList ? ((0, vue.openBlock)(), (0, vue.createBlock)(upload_content_default, (0, vue.mergeProps)({
  50903. key: 1,
  50904. ref_key: "uploadRef",
  50905. ref: uploadRef
  50906. }, uploadContentProps.value), {
  50907. default: (0, vue.withCtx)(() => [_ctx.$slots.trigger ? (0, vue.renderSlot)(_ctx.$slots, "trigger", { key: 0 }) : (0, vue.createCommentVNode)("v-if", true), !_ctx.$slots.trigger && _ctx.$slots.default ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 1 }) : (0, vue.createCommentVNode)("v-if", true)]),
  50908. _: 3
  50909. }, 16)) : (0, vue.createCommentVNode)("v-if", true),
  50910. _ctx.$slots.trigger ? (0, vue.renderSlot)(_ctx.$slots, "default", { key: 2 }) : (0, vue.createCommentVNode)("v-if", true),
  50911. (0, vue.renderSlot)(_ctx.$slots, "tip"),
  50912. !isPictureCard.value && __props.showFileList ? ((0, vue.openBlock)(), (0, vue.createBlock)(upload_list_default, {
  50913. key: 3,
  50914. disabled: (0, vue.unref)(disabled),
  50915. "list-type": __props.listType,
  50916. files: (0, vue.unref)(uploadFiles),
  50917. crossorigin: __props.crossorigin,
  50918. "handle-preview": __props.onPreview,
  50919. onRemove: (0, vue.unref)(handleRemove)
  50920. }, (0, vue.createSlots)({ _: 2 }, [_ctx.$slots.file ? {
  50921. name: "default",
  50922. fn: (0, vue.withCtx)(({ file, index }) => [(0, vue.renderSlot)(_ctx.$slots, "file", {
  50923. file,
  50924. index
  50925. })]),
  50926. key: "0"
  50927. } : void 0]), 1032, [
  50928. "disabled",
  50929. "list-type",
  50930. "files",
  50931. "crossorigin",
  50932. "handle-preview",
  50933. "onRemove"
  50934. ])) : (0, vue.createCommentVNode)("v-if", true)
  50935. ]);
  50936. };
  50937. }
  50938. });
  50939. //#endregion
  50940. //#region ../../packages/components/upload/src/upload.vue
  50941. var upload_default = upload_vue_vue_type_script_setup_true_lang_default;
  50942. //#endregion
  50943. //#region ../../packages/components/upload/index.ts
  50944. const ElUpload = withInstall(upload_default);
  50945. //#endregion
  50946. //#region ../../packages/components/watermark/src/watermark.ts
  50947. const watermarkProps = buildProps({
  50948. zIndex: {
  50949. type: Number,
  50950. default: 9
  50951. },
  50952. rotate: {
  50953. type: Number,
  50954. default: -22
  50955. },
  50956. width: Number,
  50957. height: Number,
  50958. image: String,
  50959. content: {
  50960. type: definePropType([String, Array]),
  50961. default: "Element Plus"
  50962. },
  50963. font: { type: definePropType(Object) },
  50964. gap: {
  50965. type: definePropType(Array),
  50966. default: () => [100, 100]
  50967. },
  50968. offset: { type: definePropType(Array) }
  50969. });
  50970. //#endregion
  50971. //#region ../../packages/components/watermark/src/utils.ts
  50972. function toLowercaseSeparator(key) {
  50973. return key.replace(/([A-Z])/g, "-$1").toLowerCase();
  50974. }
  50975. function getStyleStr(style) {
  50976. return Object.keys(style).map((key) => `${toLowercaseSeparator(key)}: ${style[key]};`).join(" ");
  50977. }
  50978. function getPixelRatio() {
  50979. return window.devicePixelRatio || 1;
  50980. }
  50981. const reRendering = (mutation, watermarkElement) => {
  50982. let flag = false;
  50983. if (mutation.removedNodes.length && watermarkElement) flag = Array.from(mutation.removedNodes).includes(watermarkElement);
  50984. if (mutation.type === "attributes" && mutation.target === watermarkElement) flag = true;
  50985. return flag;
  50986. };
  50987. //#endregion
  50988. //#region ../../packages/components/watermark/src/useClips.ts
  50989. const TEXT_ALIGN_RATIO_MAP = {
  50990. left: [0, .5],
  50991. start: [0, .5],
  50992. center: [.5, 0],
  50993. right: [1, -.5],
  50994. end: [1, -.5]
  50995. };
  50996. function prepareCanvas(width, height, ratio = 1) {
  50997. const canvas = document.createElement("canvas");
  50998. const ctx = canvas.getContext("2d");
  50999. const realWidth = width * ratio;
  51000. const realHeight = height * ratio;
  51001. canvas.setAttribute("width", `${realWidth}px`);
  51002. canvas.setAttribute("height", `${realHeight}px`);
  51003. ctx.save();
  51004. return [
  51005. ctx,
  51006. canvas,
  51007. realWidth,
  51008. realHeight
  51009. ];
  51010. }
  51011. function useClips() {
  51012. function getClips(content, rotate, ratio, width, height, font, gapX, gapY, space) {
  51013. const [ctx, canvas, contentWidth, contentHeight] = prepareCanvas(width, height, ratio);
  51014. let baselineOffset = 0;
  51015. if (content instanceof HTMLImageElement) ctx.drawImage(content, 0, 0, contentWidth, contentHeight);
  51016. else {
  51017. const { color, fontSize, fontStyle, fontWeight, fontFamily, textAlign, textBaseline } = font;
  51018. const mergedFontSize = Number(fontSize) * ratio;
  51019. ctx.font = `${fontStyle} normal ${fontWeight} ${mergedFontSize}px/${height}px ${fontFamily}`;
  51020. ctx.fillStyle = color;
  51021. ctx.textAlign = textAlign;
  51022. ctx.textBaseline = textBaseline;
  51023. const contents = isArray$1(content) ? content : [content];
  51024. if (textBaseline !== "top" && contents[0]) {
  51025. const argumentMetrics = ctx.measureText(contents[0]);
  51026. ctx.textBaseline = "top";
  51027. const topMetrics = ctx.measureText(contents[0]);
  51028. baselineOffset = argumentMetrics.actualBoundingBoxAscent - topMetrics.actualBoundingBoxAscent;
  51029. }
  51030. contents?.forEach((item, index) => {
  51031. const [alignRatio, spaceRatio] = TEXT_ALIGN_RATIO_MAP[textAlign];
  51032. ctx.fillText(item ?? "", contentWidth * alignRatio + space * spaceRatio, index * (mergedFontSize + font.fontGap * ratio));
  51033. });
  51034. }
  51035. const angle = Math.PI / 180 * Number(rotate);
  51036. const maxSize = Math.max(width, height);
  51037. const [rCtx, rCanvas, realMaxSize] = prepareCanvas(maxSize, maxSize, ratio);
  51038. rCtx.translate(realMaxSize / 2, realMaxSize / 2);
  51039. rCtx.rotate(angle);
  51040. if (contentWidth > 0 && contentHeight > 0) rCtx.drawImage(canvas, -contentWidth / 2, -contentHeight / 2);
  51041. function getRotatePos(x, y) {
  51042. return [x * Math.cos(angle) - y * Math.sin(angle), x * Math.sin(angle) + y * Math.cos(angle)];
  51043. }
  51044. let left = 0;
  51045. let right = 0;
  51046. let top = 0;
  51047. let bottom = 0;
  51048. const halfWidth = contentWidth / 2;
  51049. const halfHeight = contentHeight / 2;
  51050. [
  51051. [0 - halfWidth, 0 - halfHeight],
  51052. [0 + halfWidth, 0 - halfHeight],
  51053. [0 + halfWidth, 0 + halfHeight],
  51054. [0 - halfWidth, 0 + halfHeight]
  51055. ].forEach(([x, y]) => {
  51056. const [targetX, targetY] = getRotatePos(x, y);
  51057. left = Math.min(left, targetX);
  51058. right = Math.max(right, targetX);
  51059. top = Math.min(top, targetY);
  51060. bottom = Math.max(bottom, targetY);
  51061. });
  51062. const cutLeft = left + realMaxSize / 2;
  51063. const cutTop = top + realMaxSize / 2;
  51064. const cutWidth = right - left;
  51065. const cutHeight = bottom - top;
  51066. const realGapX = gapX * ratio;
  51067. const realGapY = gapY * ratio;
  51068. const filledWidth = (cutWidth + realGapX) * 2;
  51069. const filledHeight = cutHeight + realGapY;
  51070. const [fCtx, fCanvas] = prepareCanvas(filledWidth, filledHeight);
  51071. function drawImg(targetX = 0, targetY = 0) {
  51072. fCtx.drawImage(rCanvas, cutLeft, cutTop, cutWidth, cutHeight, targetX, targetY + baselineOffset, cutWidth, cutHeight);
  51073. }
  51074. drawImg();
  51075. drawImg(cutWidth + realGapX, -cutHeight / 2 - realGapY / 2);
  51076. drawImg(cutWidth + realGapX, +cutHeight / 2 + realGapY / 2);
  51077. return [
  51078. fCanvas.toDataURL(),
  51079. filledWidth / ratio,
  51080. filledHeight / ratio
  51081. ];
  51082. }
  51083. return getClips;
  51084. }
  51085. //#endregion
  51086. //#region ../../packages/components/watermark/src/watermark.vue?vue&type=script&setup=true&lang.ts
  51087. var watermark_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  51088. name: "ElWatermark",
  51089. __name: "watermark",
  51090. props: watermarkProps,
  51091. setup(__props) {
  51092. const style = { position: "relative" };
  51093. const props = __props;
  51094. const fontGap = (0, vue.computed)(() => props.font?.fontGap ?? 3);
  51095. const color = (0, vue.computed)(() => props.font?.color ?? "rgba(0,0,0,.15)");
  51096. const fontSize = (0, vue.computed)(() => props.font?.fontSize ?? 16);
  51097. const fontWeight = (0, vue.computed)(() => props.font?.fontWeight ?? "normal");
  51098. const fontStyle = (0, vue.computed)(() => props.font?.fontStyle ?? "normal");
  51099. const fontFamily = (0, vue.computed)(() => props.font?.fontFamily ?? "sans-serif");
  51100. const textAlign = (0, vue.computed)(() => props.font?.textAlign ?? "center");
  51101. const textBaseline = (0, vue.computed)(() => props.font?.textBaseline ?? "hanging");
  51102. const gapX = (0, vue.computed)(() => props.gap[0]);
  51103. const gapY = (0, vue.computed)(() => props.gap[1]);
  51104. const gapXCenter = (0, vue.computed)(() => gapX.value / 2);
  51105. const gapYCenter = (0, vue.computed)(() => gapY.value / 2);
  51106. const offsetLeft = (0, vue.computed)(() => props.offset?.[0] ?? gapXCenter.value);
  51107. const offsetTop = (0, vue.computed)(() => props.offset?.[1] ?? gapYCenter.value);
  51108. const getMarkStyle = () => {
  51109. const markStyle = {
  51110. zIndex: props.zIndex,
  51111. position: "absolute",
  51112. left: 0,
  51113. top: 0,
  51114. width: "100%",
  51115. height: "100%",
  51116. pointerEvents: "none",
  51117. backgroundRepeat: "repeat"
  51118. };
  51119. let positionLeft = offsetLeft.value - gapXCenter.value;
  51120. let positionTop = offsetTop.value - gapYCenter.value;
  51121. if (positionLeft > 0) {
  51122. markStyle.left = `${positionLeft}px`;
  51123. markStyle.width = `calc(100% - ${positionLeft}px)`;
  51124. positionLeft = 0;
  51125. }
  51126. if (positionTop > 0) {
  51127. markStyle.top = `${positionTop}px`;
  51128. markStyle.height = `calc(100% - ${positionTop}px)`;
  51129. positionTop = 0;
  51130. }
  51131. markStyle.backgroundPosition = `${positionLeft}px ${positionTop}px`;
  51132. return markStyle;
  51133. };
  51134. const containerRef = (0, vue.shallowRef)(null);
  51135. const watermarkRef = (0, vue.shallowRef)();
  51136. const stopObservation = (0, vue.ref)(false);
  51137. const destroyWatermark = () => {
  51138. if (watermarkRef.value) {
  51139. watermarkRef.value.remove();
  51140. watermarkRef.value = void 0;
  51141. }
  51142. };
  51143. const appendWatermark = (base64Url, markWidth) => {
  51144. if (containerRef.value && watermarkRef.value) {
  51145. stopObservation.value = true;
  51146. watermarkRef.value.setAttribute("style", getStyleStr({
  51147. ...getMarkStyle(),
  51148. backgroundImage: `url('${base64Url}')`,
  51149. backgroundSize: `${Math.floor(markWidth)}px`
  51150. }));
  51151. containerRef.value?.append(watermarkRef.value);
  51152. setTimeout(() => {
  51153. stopObservation.value = false;
  51154. });
  51155. }
  51156. };
  51157. const getMarkSize = (ctx) => {
  51158. let defaultWidth = 120;
  51159. let defaultHeight = 64;
  51160. let space = 0;
  51161. const { image, content, width, height, rotate } = props;
  51162. if (!image && ctx.measureText) {
  51163. ctx.font = `${Number(fontSize.value)}px ${fontFamily.value}`;
  51164. const contents = isArray$1(content) ? content : [content];
  51165. let maxWidth = 0;
  51166. let maxHeight = 0;
  51167. contents.forEach((item) => {
  51168. const { width, fontBoundingBoxAscent, fontBoundingBoxDescent, actualBoundingBoxAscent, actualBoundingBoxDescent } = ctx.measureText(item);
  51169. const height = isUndefined(fontBoundingBoxAscent) ? actualBoundingBoxAscent + actualBoundingBoxDescent : fontBoundingBoxAscent + fontBoundingBoxDescent;
  51170. if (width > maxWidth) maxWidth = Math.ceil(width);
  51171. if (height > maxHeight) maxHeight = Math.ceil(height);
  51172. });
  51173. defaultWidth = maxWidth;
  51174. defaultHeight = maxHeight * contents.length + (contents.length - 1) * fontGap.value;
  51175. const angle = Math.PI / 180 * Number(rotate);
  51176. space = Math.ceil(Math.abs(Math.sin(angle) * defaultHeight) / 2);
  51177. defaultWidth += space;
  51178. }
  51179. return [
  51180. width ?? defaultWidth,
  51181. height ?? defaultHeight,
  51182. space
  51183. ];
  51184. };
  51185. const getClips = useClips();
  51186. const renderWatermark = () => {
  51187. const ctx = document.createElement("canvas").getContext("2d");
  51188. const image = props.image;
  51189. const content = props.content;
  51190. const rotate = props.rotate;
  51191. if (ctx) {
  51192. if (!watermarkRef.value) watermarkRef.value = document.createElement("div");
  51193. const ratio = getPixelRatio();
  51194. const [markWidth, markHeight, space] = getMarkSize(ctx);
  51195. const drawCanvas = (drawContent) => {
  51196. const [textClips, clipWidth] = getClips(drawContent || "", rotate, ratio, markWidth, markHeight, {
  51197. color: color.value,
  51198. fontSize: fontSize.value,
  51199. fontStyle: fontStyle.value,
  51200. fontWeight: fontWeight.value,
  51201. fontFamily: fontFamily.value,
  51202. fontGap: fontGap.value,
  51203. textAlign: textAlign.value,
  51204. textBaseline: textBaseline.value
  51205. }, gapX.value, gapY.value, space);
  51206. appendWatermark(textClips, clipWidth);
  51207. };
  51208. if (image) {
  51209. const img = new Image();
  51210. img.onload = () => {
  51211. drawCanvas(img);
  51212. };
  51213. img.onerror = () => {
  51214. drawCanvas(content);
  51215. };
  51216. img.crossOrigin = "anonymous";
  51217. img.referrerPolicy = "no-referrer";
  51218. img.src = image;
  51219. } else drawCanvas(content);
  51220. }
  51221. };
  51222. (0, vue.onMounted)(() => {
  51223. renderWatermark();
  51224. });
  51225. (0, vue.watch)(() => props, () => {
  51226. renderWatermark();
  51227. }, {
  51228. deep: true,
  51229. flush: "post"
  51230. });
  51231. (0, vue.onBeforeUnmount)(() => {
  51232. destroyWatermark();
  51233. });
  51234. const onMutate = (mutations) => {
  51235. if (stopObservation.value) return;
  51236. mutations.forEach((mutation) => {
  51237. if (reRendering(mutation, watermarkRef.value)) {
  51238. destroyWatermark();
  51239. renderWatermark();
  51240. }
  51241. });
  51242. };
  51243. useMutationObserver(containerRef, onMutate, {
  51244. attributes: true,
  51245. subtree: true,
  51246. childList: true
  51247. });
  51248. return (_ctx, _cache) => {
  51249. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  51250. ref_key: "containerRef",
  51251. ref: containerRef,
  51252. style: (0, vue.normalizeStyle)([style])
  51253. }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 4);
  51254. };
  51255. }
  51256. });
  51257. //#endregion
  51258. //#region ../../packages/components/watermark/src/watermark.vue
  51259. var watermark_default = watermark_vue_vue_type_script_setup_true_lang_default;
  51260. //#endregion
  51261. //#region ../../packages/components/watermark/index.ts
  51262. const ElWatermark = withInstall(watermark_default);
  51263. //#endregion
  51264. //#region ../../packages/components/tour/src/content.ts
  51265. const tourStrategies = ["absolute", "fixed"];
  51266. const tourPlacements = [
  51267. "top-start",
  51268. "top-end",
  51269. "top",
  51270. "bottom-start",
  51271. "bottom-end",
  51272. "bottom",
  51273. "left-start",
  51274. "left-end",
  51275. "left",
  51276. "right-start",
  51277. "right-end",
  51278. "right"
  51279. ];
  51280. const tourContentProps = buildProps({
  51281. placement: {
  51282. type: definePropType(String),
  51283. values: tourPlacements,
  51284. default: "bottom"
  51285. },
  51286. reference: {
  51287. type: definePropType(Object),
  51288. default: null
  51289. },
  51290. strategy: {
  51291. type: definePropType(String),
  51292. values: tourStrategies,
  51293. default: "absolute"
  51294. },
  51295. offset: {
  51296. type: Number,
  51297. default: 10
  51298. },
  51299. showArrow: Boolean,
  51300. zIndex: {
  51301. type: Number,
  51302. default: 2001
  51303. }
  51304. });
  51305. const tourContentEmits = { close: () => true };
  51306. //#endregion
  51307. //#region ../../packages/components/tour/src/tour.ts
  51308. const tourProps = buildProps({
  51309. modelValue: Boolean,
  51310. current: { type: Number },
  51311. showArrow: {
  51312. type: Boolean,
  51313. default: true
  51314. },
  51315. showClose: {
  51316. type: Boolean,
  51317. default: true
  51318. },
  51319. closeIcon: { type: iconPropType },
  51320. placement: tourContentProps.placement,
  51321. contentStyle: { type: definePropType([Object]) },
  51322. mask: {
  51323. type: definePropType([Boolean, Object]),
  51324. default: true
  51325. },
  51326. gap: {
  51327. type: definePropType(Object),
  51328. default: () => ({
  51329. offset: 6,
  51330. radius: 2
  51331. })
  51332. },
  51333. zIndex: { type: Number },
  51334. scrollIntoViewOptions: {
  51335. type: definePropType([Boolean, Object]),
  51336. default: () => ({ block: "center" })
  51337. },
  51338. type: { type: definePropType(String) },
  51339. appendTo: {
  51340. type: definePropType([String, Object]),
  51341. default: "body"
  51342. },
  51343. closeOnPressEscape: {
  51344. type: Boolean,
  51345. default: true
  51346. },
  51347. targetAreaClickable: {
  51348. type: Boolean,
  51349. default: true
  51350. }
  51351. });
  51352. const tourEmits = {
  51353. [UPDATE_MODEL_EVENT]: (value) => isBoolean(value),
  51354. ["update:current"]: (current) => isNumber(current),
  51355. close: (current) => isNumber(current),
  51356. finish: () => true,
  51357. change: (current) => isNumber(current)
  51358. };
  51359. //#endregion
  51360. //#region ../../packages/components/tour/src/mask.ts
  51361. const maskProps = buildProps({
  51362. zIndex: {
  51363. type: Number,
  51364. default: 1001
  51365. },
  51366. visible: Boolean,
  51367. fill: {
  51368. type: String,
  51369. default: "rgba(0,0,0,0.5)"
  51370. },
  51371. pos: { type: definePropType(Object) },
  51372. targetAreaClickable: {
  51373. type: Boolean,
  51374. default: true
  51375. }
  51376. });
  51377. //#endregion
  51378. //#region ../../packages/components/tour/src/helper.ts
  51379. const useTarget = (target, open, gap, mergedMask, scrollIntoViewOptions) => {
  51380. const posInfo = (0, vue.ref)(null);
  51381. const getTargetEl = () => {
  51382. let targetEl;
  51383. if (isString(target.value)) targetEl = document.querySelector(target.value);
  51384. else if (isFunction$1(target.value)) targetEl = target.value();
  51385. else targetEl = target.value;
  51386. return targetEl;
  51387. };
  51388. const updatePosInfo = () => {
  51389. const targetEl = getTargetEl();
  51390. if (!targetEl || !open.value) {
  51391. posInfo.value = null;
  51392. return;
  51393. }
  51394. if (!isInViewPort(targetEl)) targetEl.scrollIntoView(scrollIntoViewOptions.value);
  51395. const { left, top, width, height } = targetEl.getBoundingClientRect();
  51396. posInfo.value = {
  51397. left,
  51398. top,
  51399. width,
  51400. height,
  51401. radius: 0
  51402. };
  51403. };
  51404. (0, vue.onMounted)(() => {
  51405. (0, vue.watch)([open, target], () => {
  51406. updatePosInfo();
  51407. }, { immediate: true });
  51408. window.addEventListener("resize", updatePosInfo);
  51409. });
  51410. (0, vue.onBeforeUnmount)(() => {
  51411. window.removeEventListener("resize", updatePosInfo);
  51412. });
  51413. const getGapOffset = (index) => (isArray$1(gap.value.offset) ? gap.value.offset[index] : gap.value.offset) ?? 6;
  51414. const mergedPosInfo = (0, vue.computed)(() => {
  51415. if (!posInfo.value) return posInfo.value;
  51416. const gapOffsetX = getGapOffset(0);
  51417. const gapOffsetY = getGapOffset(1);
  51418. const gapRadius = gap.value?.radius || 2;
  51419. return {
  51420. left: posInfo.value.left - gapOffsetX,
  51421. top: posInfo.value.top - gapOffsetY,
  51422. width: posInfo.value.width + gapOffsetX * 2,
  51423. height: posInfo.value.height + gapOffsetY * 2,
  51424. radius: gapRadius
  51425. };
  51426. });
  51427. return {
  51428. mergedPosInfo,
  51429. triggerTarget: (0, vue.computed)(() => {
  51430. const targetEl = getTargetEl();
  51431. if (!mergedMask.value || !targetEl || !window.DOMRect) return targetEl || void 0;
  51432. return { getBoundingClientRect() {
  51433. return window.DOMRect.fromRect({
  51434. width: mergedPosInfo.value?.width || 0,
  51435. height: mergedPosInfo.value?.height || 0,
  51436. x: mergedPosInfo.value?.left || 0,
  51437. y: mergedPosInfo.value?.top || 0
  51438. });
  51439. } };
  51440. })
  51441. };
  51442. };
  51443. const tourKey = Symbol("ElTour");
  51444. function isInViewPort(element) {
  51445. const viewWidth = window.innerWidth || document.documentElement.clientWidth;
  51446. const viewHeight = window.innerHeight || document.documentElement.clientHeight;
  51447. const { top, right, bottom, left } = element.getBoundingClientRect();
  51448. return top >= 0 && left >= 0 && right <= viewWidth && bottom <= viewHeight;
  51449. }
  51450. const useFloating$1 = (referenceRef, contentRef, arrowRef, placement, strategy, offset$2, zIndex, showArrow) => {
  51451. const x = (0, vue.ref)();
  51452. const y = (0, vue.ref)();
  51453. const middlewareData = (0, vue.ref)({});
  51454. const states = {
  51455. x,
  51456. y,
  51457. placement,
  51458. strategy,
  51459. middlewareData
  51460. };
  51461. const middleware = (0, vue.computed)(() => {
  51462. const _middleware = [
  51463. offset((0, vue.unref)(offset$2)),
  51464. flip(),
  51465. shift(),
  51466. overflowMiddleware()
  51467. ];
  51468. if ((0, vue.unref)(showArrow) && (0, vue.unref)(arrowRef)) _middleware.push(arrow({ element: (0, vue.unref)(arrowRef) }));
  51469. return _middleware;
  51470. });
  51471. const update = async () => {
  51472. if (!isClient) return;
  51473. const referenceEl = (0, vue.unref)(referenceRef);
  51474. const contentEl = (0, vue.unref)(contentRef);
  51475. if (!referenceEl || !contentEl) return;
  51476. const data = await computePosition(referenceEl, contentEl, {
  51477. placement: (0, vue.unref)(placement),
  51478. strategy: (0, vue.unref)(strategy),
  51479. middleware: (0, vue.unref)(middleware)
  51480. });
  51481. keysOf(states).forEach((key) => {
  51482. states[key].value = data[key];
  51483. });
  51484. };
  51485. const contentStyle = (0, vue.computed)(() => {
  51486. if (!(0, vue.unref)(referenceRef)) return {
  51487. position: "fixed",
  51488. top: "50%",
  51489. left: "50%",
  51490. transform: "translate3d(-50%, -50%, 0)",
  51491. maxWidth: "100vw",
  51492. zIndex: (0, vue.unref)(zIndex)
  51493. };
  51494. const { overflow } = (0, vue.unref)(middlewareData);
  51495. return {
  51496. position: (0, vue.unref)(strategy),
  51497. zIndex: (0, vue.unref)(zIndex),
  51498. top: (0, vue.unref)(y) != null ? `${(0, vue.unref)(y)}px` : "",
  51499. left: (0, vue.unref)(x) != null ? `${(0, vue.unref)(x)}px` : "",
  51500. maxWidth: overflow?.maxWidth ? `${overflow?.maxWidth}px` : ""
  51501. };
  51502. });
  51503. const arrowStyle = (0, vue.computed)(() => {
  51504. if (!(0, vue.unref)(showArrow)) return {};
  51505. const { arrow } = (0, vue.unref)(middlewareData);
  51506. return {
  51507. left: arrow?.x != null ? `${arrow?.x}px` : "",
  51508. top: arrow?.y != null ? `${arrow?.y}px` : ""
  51509. };
  51510. });
  51511. let cleanup;
  51512. (0, vue.onMounted)(() => {
  51513. const referenceEl = (0, vue.unref)(referenceRef);
  51514. const contentEl = (0, vue.unref)(contentRef);
  51515. if (referenceEl && contentEl) cleanup = autoUpdate(referenceEl, contentEl, update);
  51516. (0, vue.watchEffect)(() => {
  51517. update();
  51518. });
  51519. });
  51520. (0, vue.onBeforeUnmount)(() => {
  51521. cleanup && cleanup();
  51522. });
  51523. return {
  51524. update,
  51525. contentStyle,
  51526. arrowStyle
  51527. };
  51528. };
  51529. const overflowMiddleware = () => {
  51530. return {
  51531. name: "overflow",
  51532. async fn(state) {
  51533. const overflow = await detectOverflow(state);
  51534. let overWidth = 0;
  51535. if (overflow.left > 0) overWidth = overflow.left;
  51536. if (overflow.right > 0) overWidth = overflow.right;
  51537. return { data: { maxWidth: state.rects.floating.width - overWidth } };
  51538. }
  51539. };
  51540. };
  51541. //#endregion
  51542. //#region ../../packages/components/tour/src/mask.vue?vue&type=script&setup=true&lang.ts
  51543. const _hoisted_1$8 = { style: {
  51544. width: "100%",
  51545. height: "100%"
  51546. } };
  51547. const _hoisted_2$4 = ["d"];
  51548. var mask_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  51549. name: "ElTourMask",
  51550. inheritAttrs: false,
  51551. __name: "mask",
  51552. props: maskProps,
  51553. setup(__props) {
  51554. const props = __props;
  51555. const { ns } = (0, vue.inject)(tourKey);
  51556. const radius = (0, vue.computed)(() => props.pos?.radius ?? 2);
  51557. const roundInfo = (0, vue.computed)(() => {
  51558. const v = radius.value;
  51559. const baseInfo = `a${v},${v} 0 0 1`;
  51560. return {
  51561. topRight: `${baseInfo} ${v},${v}`,
  51562. bottomRight: `${baseInfo} ${-v},${v}`,
  51563. bottomLeft: `${baseInfo} ${-v},${-v}`,
  51564. topLeft: `${baseInfo} ${v},${-v}`
  51565. };
  51566. });
  51567. const { width: windowWidth, height: windowHeight } = useWindowSize();
  51568. const path = (0, vue.computed)(() => {
  51569. const width = windowWidth.value;
  51570. const height = windowHeight.value;
  51571. const info = roundInfo.value;
  51572. const _path = `M${width},0 L0,0 L0,${height} L${width},${height} L${width},0 Z`;
  51573. const _radius = radius.value;
  51574. return props.pos ? `${_path} M${props.pos.left + _radius},${props.pos.top} h${props.pos.width - _radius * 2} ${info.topRight} v${props.pos.height - _radius * 2} ${info.bottomRight} h${-props.pos.width + _radius * 2} ${info.bottomLeft} v${-props.pos.height + _radius * 2} ${info.topLeft} z` : _path;
  51575. });
  51576. const maskStyle = (0, vue.computed)(() => ({
  51577. position: "fixed",
  51578. left: 0,
  51579. right: 0,
  51580. top: 0,
  51581. bottom: 0,
  51582. zIndex: props.zIndex,
  51583. pointerEvents: props.pos && props.targetAreaClickable ? "none" : "auto"
  51584. }));
  51585. const pathStyle = (0, vue.computed)(() => ({
  51586. fill: props.fill,
  51587. pointerEvents: "auto",
  51588. cursor: "auto"
  51589. }));
  51590. useLockscreen((0, vue.toRef)(props, "visible"), { ns });
  51591. return (_ctx, _cache) => {
  51592. return __props.visible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", (0, vue.mergeProps)({
  51593. key: 0,
  51594. class: (0, vue.unref)(ns).e("mask"),
  51595. style: maskStyle.value
  51596. }, _ctx.$attrs), [((0, vue.openBlock)(), (0, vue.createElementBlock)("svg", _hoisted_1$8, [(0, vue.createElementVNode)("path", {
  51597. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("hollow")),
  51598. style: (0, vue.normalizeStyle)(pathStyle.value),
  51599. d: path.value
  51600. }, null, 14, _hoisted_2$4)]))], 16)) : (0, vue.createCommentVNode)("v-if", true);
  51601. };
  51602. }
  51603. });
  51604. //#endregion
  51605. //#region ../../packages/components/tour/src/mask.vue
  51606. var mask_default = mask_vue_vue_type_script_setup_true_lang_default;
  51607. //#endregion
  51608. //#region ../../packages/components/tour/src/content.vue?vue&type=script&setup=true&lang.ts
  51609. const _hoisted_1$7 = ["data-side"];
  51610. var content_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  51611. name: "ElTourContent",
  51612. __name: "content",
  51613. props: tourContentProps,
  51614. emits: tourContentEmits,
  51615. setup(__props, { emit: __emit }) {
  51616. const props = __props;
  51617. const emit = __emit;
  51618. const placement = (0, vue.ref)(props.placement);
  51619. const strategy = (0, vue.ref)(props.strategy);
  51620. const contentRef = (0, vue.ref)(null);
  51621. const arrowRef = (0, vue.ref)(null);
  51622. (0, vue.watch)(() => props.placement, () => {
  51623. placement.value = props.placement;
  51624. });
  51625. const { contentStyle, arrowStyle } = useFloating$1((0, vue.toRef)(props, "reference"), contentRef, arrowRef, placement, strategy, (0, vue.toRef)(props, "offset"), (0, vue.toRef)(props, "zIndex"), (0, vue.toRef)(props, "showArrow"));
  51626. const side = (0, vue.computed)(() => {
  51627. return placement.value.split("-")[0];
  51628. });
  51629. const { ns } = (0, vue.inject)(tourKey);
  51630. const onCloseRequested = () => {
  51631. emit("close");
  51632. };
  51633. const onFocusoutPrevented = (event) => {
  51634. if (event.detail.focusReason === "pointer") event.preventDefault();
  51635. };
  51636. return (_ctx, _cache) => {
  51637. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  51638. ref_key: "contentRef",
  51639. ref: contentRef,
  51640. style: (0, vue.normalizeStyle)((0, vue.unref)(contentStyle)),
  51641. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")),
  51642. "data-side": side.value,
  51643. tabindex: "-1"
  51644. }, [(0, vue.createVNode)((0, vue.unref)(focus_trap_default), {
  51645. loop: "",
  51646. trapped: "",
  51647. "focus-start-el": "container",
  51648. "focus-trap-el": contentRef.value || void 0,
  51649. onReleaseRequested: onCloseRequested,
  51650. onFocusoutPrevented
  51651. }, {
  51652. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  51653. _: 3
  51654. }, 8, ["focus-trap-el"]), __props.showArrow ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  51655. key: 0,
  51656. ref_key: "arrowRef",
  51657. ref: arrowRef,
  51658. style: (0, vue.normalizeStyle)((0, vue.unref)(arrowStyle)),
  51659. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("arrow"))
  51660. }, null, 6)) : (0, vue.createCommentVNode)("v-if", true)], 14, _hoisted_1$7);
  51661. };
  51662. }
  51663. });
  51664. //#endregion
  51665. //#region ../../packages/components/tour/src/content.vue
  51666. var content_default$1 = content_vue_vue_type_script_setup_true_lang_default;
  51667. //#endregion
  51668. //#region ../../packages/components/tour/src/steps.ts
  51669. var steps_default = (0, vue.defineComponent)({
  51670. name: "ElTourSteps",
  51671. props: { current: {
  51672. type: Number,
  51673. default: 0
  51674. } },
  51675. emits: ["update-total"],
  51676. setup(props, { slots, emit }) {
  51677. let cacheTotal = 0;
  51678. return () => {
  51679. const children = slots.default?.();
  51680. const result = [];
  51681. let total = 0;
  51682. function filterSteps(children) {
  51683. if (!isArray$1(children)) return;
  51684. children.forEach((item) => {
  51685. if ((item?.type || {})?.name === "ElTourStep") {
  51686. result.push(item);
  51687. total += 1;
  51688. }
  51689. });
  51690. }
  51691. if (children.length) filterSteps(flattedChildren(children[0]?.children));
  51692. if (cacheTotal !== total) {
  51693. cacheTotal = total;
  51694. emit("update-total", total);
  51695. }
  51696. if (result.length) return result[props.current];
  51697. return null;
  51698. };
  51699. }
  51700. });
  51701. //#endregion
  51702. //#region ../../packages/components/tour/src/tour.vue?vue&type=script&setup=true&lang.ts
  51703. var tour_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  51704. name: "ElTour",
  51705. inheritAttrs: false,
  51706. __name: "tour",
  51707. props: tourProps,
  51708. emits: tourEmits,
  51709. setup(__props, { emit: __emit }) {
  51710. const props = __props;
  51711. const emit = __emit;
  51712. const ns = useNamespace("tour");
  51713. const total = (0, vue.ref)(0);
  51714. const currentStep = (0, vue.ref)();
  51715. const isControlled = (0, vue.computed)(() => !isUndefined(props.current));
  51716. const innerCurrent = (0, vue.ref)(props.current ?? 0);
  51717. const current = (0, vue.computed)({
  51718. get() {
  51719. return isUndefined(props.current) ? innerCurrent.value : props.current;
  51720. },
  51721. set(newValue) {
  51722. if ((isControlled.value ? props.current : innerCurrent.value) === newValue) return;
  51723. if (!isControlled.value) innerCurrent.value = newValue;
  51724. emit("update:current", newValue);
  51725. }
  51726. });
  51727. const currentTarget = (0, vue.computed)(() => currentStep.value?.target);
  51728. const kls = (0, vue.computed)(() => [ns.b(), mergedType.value === "primary" ? ns.m("primary") : ""]);
  51729. const mergedPlacement = (0, vue.computed)(() => currentStep.value?.placement || props.placement);
  51730. const mergedContentStyle = (0, vue.computed)(() => currentStep.value?.contentStyle ?? props.contentStyle);
  51731. const mergedMask = (0, vue.computed)(() => currentStep.value?.mask ?? props.mask);
  51732. const mergedShowMask = (0, vue.computed)(() => !!mergedMask.value && props.modelValue);
  51733. const mergedMaskStyle = (0, vue.computed)(() => isBoolean(mergedMask.value) ? void 0 : mergedMask.value);
  51734. const mergedShowArrow = (0, vue.computed)(() => !!currentTarget.value && (currentStep.value?.showArrow ?? props.showArrow));
  51735. const mergedScrollIntoViewOptions = (0, vue.computed)(() => currentStep.value?.scrollIntoViewOptions ?? props.scrollIntoViewOptions);
  51736. const mergedType = (0, vue.computed)(() => currentStep.value?.type ?? props.type);
  51737. const { nextZIndex } = useZIndex();
  51738. const nowZIndex = nextZIndex();
  51739. const mergedZIndex = (0, vue.computed)(() => props.zIndex ?? nowZIndex);
  51740. const { mergedPosInfo: pos, triggerTarget } = useTarget(currentTarget, (0, vue.toRef)(props, "modelValue"), (0, vue.toRef)(props, "gap"), mergedMask, mergedScrollIntoViewOptions);
  51741. (0, vue.watch)(() => props.current, (val) => !isUndefined(val) && (innerCurrent.value = val));
  51742. (0, vue.watch)(current, (newCurrent, oldCurrent) => {
  51743. if (!props.modelValue || newCurrent === oldCurrent) return;
  51744. emit(CHANGE_EVENT, newCurrent);
  51745. }, { flush: "post" });
  51746. (0, vue.watch)(() => props.modelValue, (val) => {
  51747. if (!val && current.value !== 0) current.value = 0;
  51748. });
  51749. const onEscClose = () => {
  51750. if (props.closeOnPressEscape) {
  51751. emit(UPDATE_MODEL_EVENT, false);
  51752. emit("close", current.value);
  51753. }
  51754. };
  51755. const onUpdateTotal = (val) => {
  51756. total.value = val;
  51757. };
  51758. const slots = (0, vue.useSlots)();
  51759. (0, vue.provide)(tourKey, {
  51760. currentStep,
  51761. current,
  51762. total,
  51763. showClose: (0, vue.toRef)(props, "showClose"),
  51764. closeIcon: (0, vue.toRef)(props, "closeIcon"),
  51765. mergedType,
  51766. ns,
  51767. slots,
  51768. updateModelValue(modelValue) {
  51769. emit(UPDATE_MODEL_EVENT, modelValue);
  51770. },
  51771. onClose() {
  51772. emit("close", current.value);
  51773. },
  51774. onFinish() {
  51775. emit("finish");
  51776. }
  51777. });
  51778. return (_ctx, _cache) => {
  51779. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [
  51780. ((0, vue.openBlock)(), (0, vue.createBlock)(vue.Teleport, { to: __props.appendTo }, [(0, vue.createElementVNode)("div", (0, vue.mergeProps)({ class: kls.value }, _ctx.$attrs), [(0, vue.createVNode)(mask_default, {
  51781. visible: mergedShowMask.value,
  51782. fill: mergedMaskStyle.value?.color,
  51783. style: (0, vue.normalizeStyle)(mergedMaskStyle.value?.style),
  51784. pos: (0, vue.unref)(pos),
  51785. "z-index": mergedZIndex.value,
  51786. "target-area-clickable": __props.targetAreaClickable
  51787. }, null, 8, [
  51788. "visible",
  51789. "fill",
  51790. "style",
  51791. "pos",
  51792. "z-index",
  51793. "target-area-clickable"
  51794. ]), __props.modelValue ? ((0, vue.openBlock)(), (0, vue.createBlock)(content_default$1, {
  51795. key: current.value,
  51796. reference: (0, vue.unref)(triggerTarget),
  51797. placement: mergedPlacement.value,
  51798. "show-arrow": mergedShowArrow.value,
  51799. "z-index": mergedZIndex.value,
  51800. style: (0, vue.normalizeStyle)(mergedContentStyle.value),
  51801. onClose: onEscClose
  51802. }, {
  51803. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(steps_default), {
  51804. current: current.value,
  51805. onUpdateTotal
  51806. }, {
  51807. default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default")]),
  51808. _: 3
  51809. }, 8, ["current"])]),
  51810. _: 3
  51811. }, 8, [
  51812. "reference",
  51813. "placement",
  51814. "show-arrow",
  51815. "z-index",
  51816. "style"
  51817. ])) : (0, vue.createCommentVNode)("v-if", true)], 16)], 8, ["to"])),
  51818. (0, vue.createCommentVNode)(" just for IDE "),
  51819. (0, vue.createCommentVNode)("v-if", true)
  51820. ], 64);
  51821. };
  51822. }
  51823. });
  51824. //#endregion
  51825. //#region ../../packages/components/tour/src/tour.vue
  51826. var tour_default = tour_vue_vue_type_script_setup_true_lang_default;
  51827. //#endregion
  51828. //#region ../../packages/components/tour/src/step.ts
  51829. const tourStepProps = buildProps({
  51830. target: { type: definePropType([
  51831. String,
  51832. Object,
  51833. Function
  51834. ]) },
  51835. title: String,
  51836. description: String,
  51837. showClose: {
  51838. type: Boolean,
  51839. default: void 0
  51840. },
  51841. closeIcon: { type: iconPropType },
  51842. showArrow: {
  51843. type: Boolean,
  51844. default: void 0
  51845. },
  51846. placement: tourContentProps.placement,
  51847. mask: {
  51848. type: definePropType([Boolean, Object]),
  51849. default: void 0
  51850. },
  51851. contentStyle: { type: definePropType([Object]) },
  51852. prevButtonProps: { type: definePropType(Object) },
  51853. nextButtonProps: { type: definePropType(Object) },
  51854. scrollIntoViewOptions: {
  51855. type: definePropType([Boolean, Object]),
  51856. default: void 0
  51857. },
  51858. type: { type: definePropType(String) }
  51859. });
  51860. const tourStepEmits = { close: () => true };
  51861. //#endregion
  51862. //#region ../../packages/components/tour/src/step.vue?vue&type=script&setup=true&lang.ts
  51863. const _hoisted_1$6 = ["aria-label"];
  51864. var step_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  51865. name: "ElTourStep",
  51866. __name: "step",
  51867. props: tourStepProps,
  51868. emits: tourStepEmits,
  51869. setup(__props, { emit: __emit }) {
  51870. const props = __props;
  51871. const emit = __emit;
  51872. const { Close } = CloseComponents;
  51873. const { t } = useLocale();
  51874. const { currentStep, current, total, showClose, closeIcon, mergedType, ns, slots: tourSlots, updateModelValue, onClose: tourOnClose, onFinish: tourOnFinish } = (0, vue.inject)(tourKey);
  51875. (0, vue.watch)(props, (val) => {
  51876. currentStep.value = val;
  51877. }, { immediate: true });
  51878. const mergedShowClose = (0, vue.computed)(() => props.showClose ?? showClose.value);
  51879. const mergedCloseIcon = (0, vue.computed)(() => props.closeIcon ?? closeIcon.value ?? Close);
  51880. const filterButtonProps = (btnProps) => {
  51881. if (!btnProps) return;
  51882. return omit(btnProps, ["children", "onClick"]);
  51883. };
  51884. const onPrev = () => {
  51885. current.value -= 1;
  51886. if (props.prevButtonProps?.onClick) props.prevButtonProps?.onClick();
  51887. };
  51888. const onNext = () => {
  51889. if (current.value >= total.value - 1) onFinish();
  51890. else current.value += 1;
  51891. if (props.nextButtonProps?.onClick) props.nextButtonProps.onClick();
  51892. };
  51893. const onFinish = () => {
  51894. onClose();
  51895. tourOnFinish();
  51896. };
  51897. const onClose = () => {
  51898. updateModelValue(false);
  51899. tourOnClose();
  51900. emit("close");
  51901. };
  51902. const handleKeydown = (e) => {
  51903. if (e.target?.isContentEditable) return;
  51904. switch (getEventCode(e)) {
  51905. case EVENT_CODE.left:
  51906. e.preventDefault();
  51907. current.value > 0 && onPrev();
  51908. break;
  51909. case EVENT_CODE.right:
  51910. e.preventDefault();
  51911. onNext();
  51912. break;
  51913. }
  51914. };
  51915. (0, vue.onMounted)(() => {
  51916. window.addEventListener("keydown", handleKeydown);
  51917. });
  51918. (0, vue.onBeforeUnmount)(() => {
  51919. window.removeEventListener("keydown", handleKeydown);
  51920. });
  51921. return (_ctx, _cache) => {
  51922. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [
  51923. mergedShowClose.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  51924. key: 0,
  51925. "aria-label": (0, vue.unref)(t)("el.tour.close"),
  51926. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("closebtn")),
  51927. type: "button",
  51928. onClick: onClose
  51929. }, [(0, vue.createVNode)((0, vue.unref)(ElIcon), { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("close")) }, {
  51930. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(mergedCloseIcon.value)))]),
  51931. _: 1
  51932. }, 8, ["class"])], 10, _hoisted_1$6)) : (0, vue.createCommentVNode)("v-if", true),
  51933. (0, vue.createElementVNode)("header", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("header"), { "show-close": (0, vue.unref)(showClose) }]) }, [(0, vue.renderSlot)(_ctx.$slots, "header", {}, () => [(0, vue.createElementVNode)("span", {
  51934. role: "heading",
  51935. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title"))
  51936. }, (0, vue.toDisplayString)(__props.title), 3)])], 2),
  51937. (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("body")) }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(__props.description), 1)])], 2),
  51938. (0, vue.createElementVNode)("footer", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("footer")) }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("indicators")) }, [(0, vue.unref)(tourSlots).indicators ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(tourSlots).indicators), {
  51939. key: 0,
  51940. current: (0, vue.unref)(current),
  51941. total: (0, vue.unref)(total)
  51942. }, null, 8, ["current", "total"])) : ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, (0, vue.renderList)((0, vue.unref)(total), (item, index) => {
  51943. return (0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
  51944. key: item,
  51945. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b("indicator"), (0, vue.unref)(ns).is("active", index === (0, vue.unref)(current))])
  51946. }, null, 2);
  51947. }), 128))], 2), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("buttons")) }, [(0, vue.unref)(current) > 0 ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), (0, vue.mergeProps)({
  51948. key: 0,
  51949. size: "small",
  51950. type: (0, vue.unref)(mergedType)
  51951. }, filterButtonProps(__props.prevButtonProps), { onClick: onPrev }), {
  51952. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.prevButtonProps?.children ?? (0, vue.unref)(t)("el.tour.previous")), 1)]),
  51953. _: 1
  51954. }, 16, ["type"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.unref)(current) <= (0, vue.unref)(total) - 1 ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElButton), (0, vue.mergeProps)({
  51955. key: 1,
  51956. size: "small",
  51957. type: (0, vue.unref)(mergedType) === "primary" ? "default" : "primary"
  51958. }, filterButtonProps(__props.nextButtonProps), { onClick: onNext }), {
  51959. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.nextButtonProps?.children ?? ((0, vue.unref)(current) === (0, vue.unref)(total) - 1 ? (0, vue.unref)(t)("el.tour.finish") : (0, vue.unref)(t)("el.tour.next"))), 1)]),
  51960. _: 1
  51961. }, 16, ["type"])) : (0, vue.createCommentVNode)("v-if", true)], 2)], 2)
  51962. ], 64);
  51963. };
  51964. }
  51965. });
  51966. //#endregion
  51967. //#region ../../packages/components/tour/src/step.vue
  51968. var step_default = step_vue_vue_type_script_setup_true_lang_default;
  51969. //#endregion
  51970. //#region ../../packages/components/tour/index.ts
  51971. const ElTour = withInstall(tour_default, { TourStep: step_default });
  51972. const ElTourStep = withNoopInstall(step_default);
  51973. //#endregion
  51974. //#region ../../packages/components/anchor/src/anchor.ts
  51975. const anchorProps = buildProps({
  51976. container: { type: definePropType([String, Object]) },
  51977. offset: {
  51978. type: Number,
  51979. default: 0
  51980. },
  51981. bound: {
  51982. type: Number,
  51983. default: 15
  51984. },
  51985. duration: {
  51986. type: Number,
  51987. default: 300
  51988. },
  51989. marker: {
  51990. type: Boolean,
  51991. default: true
  51992. },
  51993. type: {
  51994. type: definePropType(String),
  51995. default: "default"
  51996. },
  51997. direction: {
  51998. type: definePropType(String),
  51999. default: "vertical"
  52000. },
  52001. selectScrollTop: Boolean
  52002. });
  52003. const anchorEmits = {
  52004. change: (href) => isString(href),
  52005. click: (e, href) => e instanceof MouseEvent && (isString(href) || isUndefined(href))
  52006. };
  52007. //#endregion
  52008. //#region ../../packages/components/anchor/src/constants.ts
  52009. const anchorKey = Symbol("anchor");
  52010. //#endregion
  52011. //#region ../../packages/components/anchor/src/anchor.vue?vue&type=script&setup=true&lang.ts
  52012. var anchor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  52013. name: "ElAnchor",
  52014. __name: "anchor",
  52015. props: anchorProps,
  52016. emits: anchorEmits,
  52017. setup(__props, { expose: __expose, emit: __emit }) {
  52018. const props = __props;
  52019. const emit = __emit;
  52020. const slots = (0, vue.useSlots)();
  52021. const currentAnchor = (0, vue.ref)("");
  52022. const markerStyle = (0, vue.ref)({});
  52023. const anchorRef = (0, vue.ref)(null);
  52024. const markerRef = (0, vue.ref)(null);
  52025. const containerEl = (0, vue.ref)();
  52026. const links = {};
  52027. let isScrolling = false;
  52028. let currentScrollTop = 0;
  52029. const ns = useNamespace("anchor");
  52030. const cls = (0, vue.computed)(() => [
  52031. ns.b(),
  52032. props.type === "underline" ? ns.m("underline") : "",
  52033. ns.m(props.direction)
  52034. ]);
  52035. const addLink = (state) => {
  52036. links[state.href] = state.el;
  52037. };
  52038. const removeLink = (href) => {
  52039. delete links[href];
  52040. };
  52041. const setCurrentAnchor = (href) => {
  52042. if (currentAnchor.value !== href) {
  52043. currentAnchor.value = href;
  52044. emit(CHANGE_EVENT, href);
  52045. }
  52046. };
  52047. let clearAnimate = null;
  52048. let currentTargetHref = "";
  52049. const scrollToAnchor = (href) => {
  52050. if (!containerEl.value) return;
  52051. const target = getElement(href);
  52052. if (!target) return;
  52053. if (clearAnimate) {
  52054. if (currentTargetHref === href) return;
  52055. clearAnimate();
  52056. }
  52057. currentTargetHref = href;
  52058. isScrolling = true;
  52059. const scrollEle = getScrollElement(target, containerEl.value);
  52060. const distance = getOffsetTopDistance(target, scrollEle);
  52061. const max = scrollEle.scrollHeight - scrollEle.clientHeight;
  52062. const to = Math.min(distance - props.offset, max);
  52063. clearAnimate = animateScrollTo(containerEl.value, currentScrollTop, to, props.duration, () => {
  52064. setTimeout(() => {
  52065. isScrolling = false;
  52066. currentTargetHref = "";
  52067. }, 20);
  52068. });
  52069. };
  52070. const scrollTo = (href) => {
  52071. if (href) {
  52072. setCurrentAnchor(href);
  52073. scrollToAnchor(href);
  52074. }
  52075. };
  52076. const handleClick = (e, href) => {
  52077. emit("click", e, href);
  52078. scrollTo(href);
  52079. };
  52080. const handleScroll = throttleByRaf(() => {
  52081. if (containerEl.value) currentScrollTop = getScrollTop(containerEl.value);
  52082. const currentHref = getCurrentHref();
  52083. if (isScrolling || isUndefined(currentHref)) return;
  52084. setCurrentAnchor(currentHref);
  52085. });
  52086. const getCurrentHref = () => {
  52087. if (!containerEl.value) return;
  52088. const scrollTop = getScrollTop(containerEl.value);
  52089. const anchorTopList = [];
  52090. for (const href of Object.keys(links)) {
  52091. const target = getElement(href);
  52092. if (!target) continue;
  52093. const distance = getOffsetTopDistance(target, getScrollElement(target, containerEl.value));
  52094. anchorTopList.push({
  52095. top: distance - props.offset - props.bound,
  52096. href
  52097. });
  52098. }
  52099. anchorTopList.sort((prev, next) => prev.top - next.top);
  52100. for (let i = 0; i < anchorTopList.length; i++) {
  52101. const item = anchorTopList[i];
  52102. const next = anchorTopList[i + 1];
  52103. if (i === 0 && scrollTop === 0) return props.selectScrollTop ? item.href : "";
  52104. if (item.top <= scrollTop && (!next || next.top > scrollTop)) return item.href;
  52105. }
  52106. };
  52107. const getContainer = () => {
  52108. const el = getElement(props.container);
  52109. if (!el || isWindow(el)) containerEl.value = window;
  52110. else containerEl.value = el;
  52111. };
  52112. useEventListener(containerEl, "scroll", handleScroll);
  52113. const updateMarkerStyle = () => {
  52114. (0, vue.nextTick)(() => {
  52115. if (!anchorRef.value || !markerRef.value || !currentAnchor.value) {
  52116. markerStyle.value = {};
  52117. return;
  52118. }
  52119. const currentLinkEl = links[currentAnchor.value];
  52120. if (!currentLinkEl) {
  52121. markerStyle.value = {};
  52122. return;
  52123. }
  52124. const anchorRect = anchorRef.value.getBoundingClientRect();
  52125. const markerRect = markerRef.value.getBoundingClientRect();
  52126. const linkRect = currentLinkEl.getBoundingClientRect();
  52127. if (props.direction === "horizontal") markerStyle.value = {
  52128. left: `${linkRect.left - anchorRect.left}px`,
  52129. width: `${linkRect.width}px`,
  52130. opacity: 1
  52131. };
  52132. else markerStyle.value = {
  52133. top: `${linkRect.top - anchorRect.top + (linkRect.height - markerRect.height) / 2}px`,
  52134. opacity: 1
  52135. };
  52136. });
  52137. };
  52138. (0, vue.watch)(currentAnchor, updateMarkerStyle);
  52139. (0, vue.watch)(() => slots.default?.(), updateMarkerStyle);
  52140. (0, vue.onMounted)(() => {
  52141. getContainer();
  52142. const hash = decodeURIComponent(window.location.hash);
  52143. if (getElement(hash)) scrollTo(hash);
  52144. else handleScroll();
  52145. });
  52146. (0, vue.watch)(() => props.container, () => {
  52147. getContainer();
  52148. });
  52149. (0, vue.provide)(anchorKey, {
  52150. ns,
  52151. direction: props.direction,
  52152. currentAnchor,
  52153. addLink,
  52154. removeLink,
  52155. handleClick
  52156. });
  52157. __expose({ scrollTo });
  52158. return (_ctx, _cache) => {
  52159. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  52160. ref_key: "anchorRef",
  52161. ref: anchorRef,
  52162. class: (0, vue.normalizeClass)(cls.value)
  52163. }, [__props.marker ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  52164. key: 0,
  52165. ref_key: "markerRef",
  52166. ref: markerRef,
  52167. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("marker")),
  52168. style: (0, vue.normalizeStyle)(markerStyle.value)
  52169. }, null, 6)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("list")) }, [(0, vue.renderSlot)(_ctx.$slots, "default")], 2)], 2);
  52170. };
  52171. }
  52172. });
  52173. //#endregion
  52174. //#region ../../packages/components/anchor/src/anchor.vue
  52175. var anchor_default = anchor_vue_vue_type_script_setup_true_lang_default;
  52176. //#endregion
  52177. //#region ../../packages/components/anchor/src/anchor-link.ts
  52178. const anchorLinkProps = buildProps({
  52179. title: String,
  52180. href: String
  52181. });
  52182. //#endregion
  52183. //#region ../../packages/components/anchor/src/anchor-link.vue?vue&type=script&setup=true&lang.ts
  52184. const _hoisted_1$5 = ["href"];
  52185. var anchor_link_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  52186. name: "ElAnchorLink",
  52187. __name: "anchor-link",
  52188. props: anchorLinkProps,
  52189. setup(__props) {
  52190. const props = __props;
  52191. const linkRef = (0, vue.ref)(null);
  52192. const { ns, direction, currentAnchor, addLink, removeLink, handleClick: contextHandleClick } = (0, vue.inject)(anchorKey);
  52193. const cls = (0, vue.computed)(() => [ns.e("link"), ns.is("active", currentAnchor.value === props.href)]);
  52194. const handleClick = (e) => {
  52195. contextHandleClick(e, props.href);
  52196. };
  52197. (0, vue.watch)(() => props.href, (val, oldVal) => {
  52198. (0, vue.nextTick)(() => {
  52199. if (oldVal) removeLink(oldVal);
  52200. if (val) addLink({
  52201. href: val,
  52202. el: linkRef.value
  52203. });
  52204. });
  52205. });
  52206. (0, vue.onMounted)(() => {
  52207. const { href } = props;
  52208. if (href) addLink({
  52209. href,
  52210. el: linkRef.value
  52211. });
  52212. });
  52213. (0, vue.onBeforeUnmount)(() => {
  52214. const { href } = props;
  52215. if (href) removeLink(href);
  52216. });
  52217. return (_ctx, _cache) => {
  52218. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item")) }, [(0, vue.createElementVNode)("a", {
  52219. ref_key: "linkRef",
  52220. ref: linkRef,
  52221. class: (0, vue.normalizeClass)(cls.value),
  52222. href: __props.href,
  52223. onClick: handleClick
  52224. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.title), 1)])], 10, _hoisted_1$5), _ctx.$slots["sub-link"] && (0, vue.unref)(direction) === "vertical" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  52225. key: 0,
  52226. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("list"))
  52227. }, [(0, vue.renderSlot)(_ctx.$slots, "sub-link")], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2);
  52228. };
  52229. }
  52230. });
  52231. //#endregion
  52232. //#region ../../packages/components/anchor/src/anchor-link.vue
  52233. var anchor_link_default = anchor_link_vue_vue_type_script_setup_true_lang_default;
  52234. //#endregion
  52235. //#region ../../packages/components/anchor/index.ts
  52236. const ElAnchor = withInstall(anchor_default, { AnchorLink: anchor_link_default });
  52237. const ElAnchorLink = withNoopInstall(anchor_link_default);
  52238. //#endregion
  52239. //#region ../../packages/components/segmented/src/segmented.ts
  52240. const defaultProps = {
  52241. label: "label",
  52242. value: "value",
  52243. disabled: "disabled"
  52244. };
  52245. const segmentedProps = buildProps({
  52246. direction: {
  52247. type: definePropType(String),
  52248. default: "horizontal"
  52249. },
  52250. options: {
  52251. type: definePropType(Array),
  52252. default: () => []
  52253. },
  52254. modelValue: {
  52255. type: [
  52256. String,
  52257. Number,
  52258. Boolean
  52259. ],
  52260. default: void 0
  52261. },
  52262. props: {
  52263. type: definePropType(Object),
  52264. default: () => defaultProps
  52265. },
  52266. block: Boolean,
  52267. size: useSizeProp,
  52268. disabled: {
  52269. type: Boolean,
  52270. default: void 0
  52271. },
  52272. validateEvent: {
  52273. type: Boolean,
  52274. default: true
  52275. },
  52276. id: String,
  52277. name: String,
  52278. ...useAriaProps(["ariaLabel"])
  52279. });
  52280. const segmentedEmits = {
  52281. [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val),
  52282. [CHANGE_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val)
  52283. };
  52284. //#endregion
  52285. //#region ../../packages/components/segmented/src/segmented.vue?vue&type=script&setup=true&lang.ts
  52286. const _hoisted_1$4 = [
  52287. "id",
  52288. "aria-label",
  52289. "aria-labelledby"
  52290. ];
  52291. const _hoisted_2$3 = [
  52292. "name",
  52293. "disabled",
  52294. "checked",
  52295. "onChange"
  52296. ];
  52297. var segmented_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  52298. name: "ElSegmented",
  52299. __name: "segmented",
  52300. props: segmentedProps,
  52301. emits: segmentedEmits,
  52302. setup(__props, { emit: __emit }) {
  52303. const props = __props;
  52304. const emit = __emit;
  52305. const ns = useNamespace("segmented");
  52306. const segmentedId = useId();
  52307. const segmentedSize = useFormSize();
  52308. const _disabled = useFormDisabled();
  52309. const { formItem } = useFormItem();
  52310. const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { formItemContext: formItem });
  52311. const segmentedRef = (0, vue.ref)(null);
  52312. const activeElement = useActiveElement();
  52313. const state = (0, vue.reactive)({
  52314. isInit: false,
  52315. width: 0,
  52316. height: 0,
  52317. translateX: 0,
  52318. translateY: 0,
  52319. focusVisible: false
  52320. });
  52321. const handleChange = (evt, item) => {
  52322. const value = getValue(item);
  52323. emit(UPDATE_MODEL_EVENT, value);
  52324. emit(CHANGE_EVENT, value);
  52325. evt.target.checked = value === props.modelValue;
  52326. };
  52327. const aliasProps = (0, vue.computed)(() => ({
  52328. ...defaultProps,
  52329. ...props.props
  52330. }));
  52331. const getValue = (item) => {
  52332. return isObject$1(item) ? item[aliasProps.value.value] : item;
  52333. };
  52334. const getLabel = (item) => {
  52335. return isObject$1(item) ? item[aliasProps.value.label] : item;
  52336. };
  52337. const getDisabled = (item) => {
  52338. return !!(_disabled.value || (isObject$1(item) ? item[aliasProps.value.disabled] : false));
  52339. };
  52340. const getSelected = (item) => {
  52341. return props.modelValue === getValue(item);
  52342. };
  52343. const getOption = (value) => {
  52344. return props.options.find((item) => getValue(item) === value);
  52345. };
  52346. const getItemCls = (item) => {
  52347. return [
  52348. ns.e("item"),
  52349. ns.is("selected", getSelected(item)),
  52350. ns.is("disabled", getDisabled(item))
  52351. ];
  52352. };
  52353. const updateSelect = () => {
  52354. if (!segmentedRef.value) return;
  52355. const selectedItem = segmentedRef.value.querySelector(".is-selected");
  52356. const selectedItemInput = segmentedRef.value.querySelector(".is-selected input");
  52357. if (!selectedItem || !selectedItemInput) {
  52358. state.width = 0;
  52359. state.height = 0;
  52360. state.translateX = 0;
  52361. state.translateY = 0;
  52362. state.focusVisible = false;
  52363. return;
  52364. }
  52365. state.isInit = true;
  52366. if (props.direction === "vertical") {
  52367. state.height = selectedItem.offsetHeight;
  52368. state.translateY = selectedItem.offsetTop;
  52369. } else {
  52370. state.width = selectedItem.offsetWidth;
  52371. state.translateX = selectedItem.offsetLeft;
  52372. }
  52373. try {
  52374. state.focusVisible = selectedItemInput.matches(":focus-visible");
  52375. } catch {}
  52376. };
  52377. const segmentedCls = (0, vue.computed)(() => [
  52378. ns.b(),
  52379. ns.m(segmentedSize.value),
  52380. ns.is("block", props.block)
  52381. ]);
  52382. const selectedStyle = (0, vue.computed)(() => ({
  52383. width: props.direction === "vertical" ? "100%" : `${state.width}px`,
  52384. height: props.direction === "vertical" ? `${state.height}px` : "100%",
  52385. transform: props.direction === "vertical" ? `translateY(${state.translateY}px)` : `translateX(${state.translateX}px)`,
  52386. display: state.isInit ? "block" : "none"
  52387. }));
  52388. const selectedCls = (0, vue.computed)(() => [
  52389. ns.e("item-selected"),
  52390. ns.is("disabled", getDisabled(getOption(props.modelValue))),
  52391. ns.is("focus-visible", state.focusVisible)
  52392. ]);
  52393. const name = (0, vue.computed)(() => {
  52394. return props.name || segmentedId.value;
  52395. });
  52396. useResizeObserver(segmentedRef, updateSelect);
  52397. (0, vue.watch)(activeElement, updateSelect);
  52398. (0, vue.watch)(() => props.options, updateSelect, {
  52399. deep: true,
  52400. flush: "post"
  52401. });
  52402. (0, vue.watch)(() => props.modelValue, () => {
  52403. updateSelect();
  52404. if (props.validateEvent) formItem?.validate?.("change").catch(NOOP);
  52405. }, { flush: "post" });
  52406. return (_ctx, _cache) => {
  52407. return __props.options.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  52408. key: 0,
  52409. id: (0, vue.unref)(inputId),
  52410. ref_key: "segmentedRef",
  52411. ref: segmentedRef,
  52412. class: (0, vue.normalizeClass)(segmentedCls.value),
  52413. role: "radiogroup",
  52414. "aria-label": !(0, vue.unref)(isLabeledByFormItem) ? __props.ariaLabel || "segmented" : void 0,
  52415. "aria-labelledby": (0, vue.unref)(isLabeledByFormItem) ? (0, vue.unref)(formItem).labelId : void 0
  52416. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("group"), (0, vue.unref)(ns).m(__props.direction)]) }, [(0, vue.createElementVNode)("div", {
  52417. style: (0, vue.normalizeStyle)(selectedStyle.value),
  52418. class: (0, vue.normalizeClass)(selectedCls.value)
  52419. }, null, 6), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.options, (item, index) => {
  52420. return (0, vue.openBlock)(), (0, vue.createElementBlock)("label", {
  52421. key: index,
  52422. class: (0, vue.normalizeClass)(getItemCls(item))
  52423. }, [(0, vue.createElementVNode)("input", {
  52424. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item-input")),
  52425. type: "radio",
  52426. name: name.value,
  52427. disabled: getDisabled(item),
  52428. checked: getSelected(item),
  52429. onChange: ($event) => handleChange($event, item)
  52430. }, null, 42, _hoisted_2$3), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("item-label")) }, [(0, vue.renderSlot)(_ctx.$slots, "default", { item }, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(getLabel(item)), 1)])], 2)], 2);
  52431. }), 128))], 2)], 10, _hoisted_1$4)) : (0, vue.createCommentVNode)("v-if", true);
  52432. };
  52433. }
  52434. });
  52435. //#endregion
  52436. //#region ../../packages/components/segmented/src/segmented.vue
  52437. var segmented_default = segmented_vue_vue_type_script_setup_true_lang_default;
  52438. //#endregion
  52439. //#region ../../packages/components/segmented/index.ts
  52440. const ElSegmented = withInstall(segmented_default);
  52441. //#endregion
  52442. //#region ../../packages/components/mention/src/helper.ts
  52443. const filterOption = (pattern, option) => {
  52444. const lowerCase = pattern.toLowerCase();
  52445. return (option.label || option.value || "").toLowerCase().includes(lowerCase);
  52446. };
  52447. const getMentionCtx = (inputEl, prefix, split) => {
  52448. const { selectionEnd } = inputEl;
  52449. if (selectionEnd === null) return;
  52450. const inputValue = inputEl.value;
  52451. const prefixArray = castArray$1(prefix);
  52452. let splitIndex = -1;
  52453. let mentionCtx;
  52454. for (let i = selectionEnd - 1; i >= 0; --i) {
  52455. const char = inputValue[i];
  52456. if (splitIndex === -1 && (char === split || char === "\n" || char === "\r")) {
  52457. splitIndex = i;
  52458. continue;
  52459. }
  52460. if (prefixArray.includes(char)) {
  52461. const end = splitIndex === -1 ? selectionEnd : splitIndex;
  52462. mentionCtx = {
  52463. pattern: inputValue.slice(i + 1, end),
  52464. start: i + 1,
  52465. end,
  52466. prefix: char,
  52467. prefixIndex: i,
  52468. splitIndex,
  52469. selectionEnd
  52470. };
  52471. break;
  52472. }
  52473. }
  52474. return mentionCtx;
  52475. };
  52476. const getCursorPosition = (element, options = {
  52477. debug: false,
  52478. useSelectionEnd: false
  52479. }) => {
  52480. const selectionStart = element.selectionStart !== null ? element.selectionStart : 0;
  52481. const selectionEnd = element.selectionEnd !== null ? element.selectionEnd : 0;
  52482. const position = options.useSelectionEnd ? selectionEnd : selectionStart;
  52483. const properties = [
  52484. "direction",
  52485. "boxSizing",
  52486. "width",
  52487. "height",
  52488. "overflowX",
  52489. "overflowY",
  52490. "borderTopWidth",
  52491. "borderRightWidth",
  52492. "borderBottomWidth",
  52493. "borderLeftWidth",
  52494. "borderStyle",
  52495. "paddingTop",
  52496. "paddingRight",
  52497. "paddingBottom",
  52498. "paddingLeft",
  52499. "fontStyle",
  52500. "fontVariant",
  52501. "fontWeight",
  52502. "fontStretch",
  52503. "fontSize",
  52504. "fontSizeAdjust",
  52505. "lineHeight",
  52506. "fontFamily",
  52507. "textAlign",
  52508. "textTransform",
  52509. "textIndent",
  52510. "textDecoration",
  52511. "letterSpacing",
  52512. "wordSpacing",
  52513. "tabSize",
  52514. "MozTabSize"
  52515. ];
  52516. if (options.debug) {
  52517. const el = document.querySelector("#input-textarea-caret-position-mirror-div");
  52518. if (el?.parentNode) el.parentNode.removeChild(el);
  52519. }
  52520. const div = document.createElement("div");
  52521. div.id = "input-textarea-caret-position-mirror-div";
  52522. document.body.appendChild(div);
  52523. const style = div.style;
  52524. const computed = window.getComputedStyle(element);
  52525. const isInput = element.nodeName === "INPUT";
  52526. style.whiteSpace = isInput ? "nowrap" : "pre-wrap";
  52527. if (!isInput) style.wordWrap = "break-word";
  52528. style.position = "absolute";
  52529. if (!options.debug) style.visibility = "hidden";
  52530. properties.forEach((prop) => {
  52531. if (isInput && prop === "lineHeight") if (computed.boxSizing === "border-box") {
  52532. const height = Number.parseInt(computed.height);
  52533. const outerHeight = Number.parseInt(computed.paddingTop) + Number.parseInt(computed.paddingBottom) + Number.parseInt(computed.borderTopWidth) + Number.parseInt(computed.borderBottomWidth);
  52534. const targetHeight = outerHeight + Number.parseInt(computed.lineHeight);
  52535. if (height > targetHeight) style.lineHeight = `${height - outerHeight}px`;
  52536. else if (height === targetHeight) style.lineHeight = computed.lineHeight;
  52537. else style.lineHeight = "0";
  52538. } else style.lineHeight = computed.height;
  52539. else style[prop] = computed[prop];
  52540. });
  52541. if (isFirefox()) {
  52542. if (element.scrollHeight > Number.parseInt(computed.height)) style.overflowY = "scroll";
  52543. } else style.overflow = "hidden";
  52544. div.textContent = element.value.slice(0, Math.max(0, position));
  52545. if (isInput && div.textContent) div.textContent = div.textContent.replace(/\s/g, "\xA0");
  52546. const span = document.createElement("span");
  52547. span.textContent = element.value.slice(Math.max(0, position)) || ".";
  52548. span.style.position = "relative";
  52549. span.style.left = `${-element.scrollLeft}px`;
  52550. span.style.top = `${-element.scrollTop}px`;
  52551. div.appendChild(span);
  52552. const relativePosition = {
  52553. top: span.offsetTop + Number.parseInt(computed.borderTopWidth),
  52554. left: span.offsetLeft + Number.parseInt(computed.borderLeftWidth),
  52555. height: Number.parseInt(computed.fontSize) * 1.5
  52556. };
  52557. if (options.debug) span.style.backgroundColor = "#aaa";
  52558. else document.body.removeChild(div);
  52559. if (relativePosition.left >= element.clientWidth) relativePosition.left = element.clientWidth;
  52560. return relativePosition;
  52561. };
  52562. //#endregion
  52563. //#region ../../packages/components/mention/src/mention.ts
  52564. const mentionProps = buildProps({
  52565. ...inputProps,
  52566. options: {
  52567. type: definePropType(Array),
  52568. default: () => []
  52569. },
  52570. prefix: {
  52571. type: definePropType([String, Array]),
  52572. default: "@",
  52573. validator: (val) => {
  52574. if (isString(val)) return val.length === 1;
  52575. return val.every((v) => isString(v) && v.length === 1);
  52576. }
  52577. },
  52578. split: {
  52579. type: String,
  52580. default: " ",
  52581. validator: (val) => val.length === 1
  52582. },
  52583. filterOption: {
  52584. type: definePropType([Boolean, Function]),
  52585. default: () => filterOption,
  52586. validator: (val) => {
  52587. if (val === false) return true;
  52588. return isFunction$1(val);
  52589. }
  52590. },
  52591. placement: {
  52592. type: definePropType(String),
  52593. default: "bottom"
  52594. },
  52595. showArrow: Boolean,
  52596. offset: {
  52597. type: Number,
  52598. default: 0
  52599. },
  52600. whole: Boolean,
  52601. checkIsWhole: { type: definePropType(Function) },
  52602. modelValue: String,
  52603. loading: Boolean,
  52604. popperClass: useTooltipContentProps.popperClass,
  52605. popperStyle: useTooltipContentProps.popperStyle,
  52606. popperOptions: {
  52607. type: definePropType(Object),
  52608. default: () => ({})
  52609. },
  52610. props: {
  52611. type: definePropType(Object),
  52612. default: () => mentionDefaultProps
  52613. }
  52614. });
  52615. const mentionEmits = {
  52616. [UPDATE_MODEL_EVENT]: (value) => isString(value),
  52617. "whole-remove": (pattern, prefix) => isString(pattern) && isString(prefix),
  52618. input: (value) => isString(value),
  52619. search: (pattern, prefix) => isString(pattern) && isString(prefix),
  52620. select: (option, prefix) => isObject$1(option) && isString(prefix),
  52621. focus: (evt) => evt instanceof FocusEvent,
  52622. blur: (evt) => evt instanceof FocusEvent
  52623. };
  52624. const mentionDefaultProps = {
  52625. value: "value",
  52626. label: "label",
  52627. disabled: "disabled"
  52628. };
  52629. //#endregion
  52630. //#region ../../packages/components/mention/src/mention-dropdown.ts
  52631. const mentionDropdownProps = buildProps({
  52632. options: {
  52633. type: definePropType(Array),
  52634. default: () => []
  52635. },
  52636. loading: Boolean,
  52637. disabled: Boolean,
  52638. contentId: String,
  52639. ariaLabel: String
  52640. });
  52641. const mentionDropdownEmits = { select: (option) => isString(option.value) };
  52642. //#endregion
  52643. //#region ../../packages/components/mention/src/mention-dropdown.vue?vue&type=script&setup=true&lang.ts
  52644. const _hoisted_1$3 = [
  52645. "id",
  52646. "aria-disabled",
  52647. "aria-selected",
  52648. "onMousemove",
  52649. "onClick"
  52650. ];
  52651. var mention_dropdown_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  52652. name: "ElMentionDropdown",
  52653. __name: "mention-dropdown",
  52654. props: mentionDropdownProps,
  52655. emits: mentionDropdownEmits,
  52656. setup(__props, { expose: __expose, emit: __emit }) {
  52657. const props = __props;
  52658. const emit = __emit;
  52659. const ns = useNamespace("mention");
  52660. const { t } = useLocale();
  52661. const hoveringIndex = (0, vue.ref)(-1);
  52662. const scrollbarRef = (0, vue.ref)();
  52663. const optionRefs = (0, vue.ref)();
  52664. const dropdownRef = (0, vue.ref)();
  52665. const optionkls = (item, index) => [
  52666. ns.be("dropdown", "item"),
  52667. ns.is("hovering", hoveringIndex.value === index),
  52668. ns.is("disabled", item.disabled || props.disabled)
  52669. ];
  52670. const handleSelect = (item) => {
  52671. if (item.disabled || props.disabled) return;
  52672. emit("select", item);
  52673. };
  52674. const handleMouseEnter = (index) => {
  52675. hoveringIndex.value = index;
  52676. };
  52677. const filteredAllDisabled = (0, vue.computed)(() => props.disabled || props.options.every((item) => item.disabled));
  52678. const hoverOption = (0, vue.computed)(() => props.options[hoveringIndex.value]);
  52679. const selectHoverOption = () => {
  52680. if (!hoverOption.value || hoverOption.value.disabled || props.disabled) return;
  52681. emit("select", hoverOption.value);
  52682. };
  52683. const navigateOptions = (direction) => {
  52684. const { options } = props;
  52685. if (options.length === 0 || filteredAllDisabled.value) return;
  52686. if (direction === "next") {
  52687. hoveringIndex.value++;
  52688. if (hoveringIndex.value === options.length) hoveringIndex.value = 0;
  52689. } else if (direction === "prev") {
  52690. hoveringIndex.value--;
  52691. if (hoveringIndex.value < 0) hoveringIndex.value = options.length - 1;
  52692. }
  52693. const option = options[hoveringIndex.value];
  52694. if (option.disabled) {
  52695. navigateOptions(direction);
  52696. return;
  52697. }
  52698. (0, vue.nextTick)(() => scrollToOption(option));
  52699. };
  52700. const scrollToOption = (option) => {
  52701. const { options } = props;
  52702. const index = options.findIndex((item) => item.value === option.value);
  52703. const target = optionRefs.value?.[index];
  52704. if (target) {
  52705. const menu = dropdownRef.value?.querySelector?.(`.${ns.be("dropdown", "wrap")}`);
  52706. if (menu) scrollIntoView(menu, target);
  52707. }
  52708. scrollbarRef.value?.handleScroll();
  52709. };
  52710. const resetHoveringIndex = () => {
  52711. if (filteredAllDisabled.value || props.options.length === 0) hoveringIndex.value = -1;
  52712. else hoveringIndex.value = props.options.findIndex((item) => !item.disabled);
  52713. };
  52714. (0, vue.watch)(() => props.options, resetHoveringIndex, { immediate: true });
  52715. __expose({
  52716. hoveringIndex,
  52717. navigateOptions,
  52718. selectHoverOption,
  52719. hoverOption
  52720. });
  52721. return (_ctx, _cache) => {
  52722. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  52723. ref_key: "dropdownRef",
  52724. ref: dropdownRef,
  52725. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b("dropdown"))
  52726. }, [
  52727. _ctx.$slots.header ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  52728. key: 0,
  52729. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("dropdown", "header"))
  52730. }, [(0, vue.renderSlot)(_ctx.$slots, "header")], 2)) : (0, vue.createCommentVNode)("v-if", true),
  52731. (0, vue.withDirectives)((0, vue.createVNode)((0, vue.unref)(ElScrollbar), {
  52732. id: __props.contentId,
  52733. ref_key: "scrollbarRef",
  52734. ref: scrollbarRef,
  52735. tag: "ul",
  52736. "wrap-class": (0, vue.unref)(ns).be("dropdown", "wrap"),
  52737. "view-class": (0, vue.unref)(ns).be("dropdown", "list"),
  52738. role: "listbox",
  52739. "aria-label": __props.ariaLabel,
  52740. "aria-orientation": "vertical"
  52741. }, {
  52742. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.options, (item, index) => {
  52743. return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
  52744. id: `${__props.contentId}-${index}`,
  52745. ref_for: true,
  52746. ref_key: "optionRefs",
  52747. ref: optionRefs,
  52748. key: index,
  52749. class: (0, vue.normalizeClass)(optionkls(item, index)),
  52750. role: "option",
  52751. "aria-disabled": item.disabled || __props.disabled || void 0,
  52752. "aria-selected": hoveringIndex.value === index,
  52753. onMousemove: ($event) => handleMouseEnter(index),
  52754. onClick: (0, vue.withModifiers)(($event) => handleSelect(item), ["stop"])
  52755. }, [(0, vue.renderSlot)(_ctx.$slots, "label", {
  52756. item,
  52757. index
  52758. }, () => [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(item.label ?? item.value), 1)])], 42, _hoisted_1$3);
  52759. }), 128))]),
  52760. _: 3
  52761. }, 8, [
  52762. "id",
  52763. "wrap-class",
  52764. "view-class",
  52765. "aria-label"
  52766. ]), [[vue.vShow, __props.options.length > 0 && !__props.loading]]),
  52767. __props.loading ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  52768. key: 1,
  52769. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("dropdown", "loading"))
  52770. }, [(0, vue.renderSlot)(_ctx.$slots, "loading", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("el.mention.loading")), 1)])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  52771. _ctx.$slots.footer ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  52772. key: 2,
  52773. class: (0, vue.normalizeClass)((0, vue.unref)(ns).be("dropdown", "footer"))
  52774. }, [(0, vue.renderSlot)(_ctx.$slots, "footer")], 2)) : (0, vue.createCommentVNode)("v-if", true)
  52775. ], 2);
  52776. };
  52777. }
  52778. });
  52779. //#endregion
  52780. //#region ../../packages/components/mention/src/mention-dropdown.vue
  52781. var mention_dropdown_default = mention_dropdown_vue_vue_type_script_setup_true_lang_default;
  52782. //#endregion
  52783. //#region ../../packages/components/mention/src/mention.vue?vue&type=script&setup=true&lang.ts
  52784. var mention_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  52785. name: "ElMention",
  52786. inheritAttrs: false,
  52787. __name: "mention",
  52788. props: mentionProps,
  52789. emits: mentionEmits,
  52790. setup(__props, { expose: __expose, emit: __emit }) {
  52791. const props = __props;
  52792. const emit = __emit;
  52793. const passInputProps = (0, vue.computed)(() => {
  52794. const inputProps = ElInput.props ?? [];
  52795. return pick(props, isArray$1(inputProps) ? inputProps : Object.keys(inputProps));
  52796. });
  52797. const ns = useNamespace("mention");
  52798. const disabled = useFormDisabled();
  52799. const contentId = useId();
  52800. const elInputRef = (0, vue.ref)();
  52801. const tooltipRef = (0, vue.ref)();
  52802. const dropdownRef = (0, vue.ref)();
  52803. const visible = (0, vue.ref)(false);
  52804. const cursorStyle = (0, vue.ref)();
  52805. const mentionCtx = (0, vue.ref)();
  52806. const computedPlacement = (0, vue.computed)(() => props.showArrow ? props.placement : `${props.placement}-start`);
  52807. const computedFallbackPlacements = (0, vue.computed)(() => props.showArrow ? ["bottom", "top"] : ["bottom-start", "top-start"]);
  52808. const aliasProps = (0, vue.computed)(() => ({
  52809. ...mentionDefaultProps,
  52810. ...props.props
  52811. }));
  52812. const mapOption = (option) => {
  52813. const base = {
  52814. label: option[aliasProps.value.label],
  52815. value: option[aliasProps.value.value],
  52816. disabled: option[aliasProps.value.disabled]
  52817. };
  52818. return {
  52819. ...option,
  52820. ...base
  52821. };
  52822. };
  52823. const options = (0, vue.computed)(() => props.options.map(mapOption));
  52824. const filteredOptions = (0, vue.computed)(() => {
  52825. const { filterOption } = props;
  52826. if (!mentionCtx.value || !filterOption) return options.value;
  52827. return options.value.filter((option) => filterOption(mentionCtx.value.pattern, option));
  52828. });
  52829. const dropdownVisible = (0, vue.computed)(() => {
  52830. return visible.value && (!!filteredOptions.value.length || props.loading);
  52831. });
  52832. const hoveringId = (0, vue.computed)(() => {
  52833. return `${contentId.value}-${dropdownRef.value?.hoveringIndex}`;
  52834. });
  52835. const handleInputChange = (value) => {
  52836. emit(UPDATE_MODEL_EVENT, value);
  52837. emit(INPUT_EVENT, value);
  52838. syncAfterCursorMove();
  52839. };
  52840. const handleInputKeyDown = (event) => {
  52841. if (elInputRef.value?.isComposing) return;
  52842. const code = getEventCode(event);
  52843. switch (code) {
  52844. case EVENT_CODE.left:
  52845. case EVENT_CODE.right:
  52846. syncAfterCursorMove();
  52847. break;
  52848. case EVENT_CODE.up:
  52849. case EVENT_CODE.down:
  52850. if (!visible.value) return;
  52851. event.preventDefault();
  52852. dropdownRef.value?.navigateOptions(code === EVENT_CODE.up ? "prev" : "next");
  52853. break;
  52854. case EVENT_CODE.enter:
  52855. case EVENT_CODE.numpadEnter:
  52856. if (!visible.value) {
  52857. props.type !== "textarea" && syncAfterCursorMove();
  52858. return;
  52859. }
  52860. event.preventDefault();
  52861. if (dropdownRef.value?.hoverOption) dropdownRef.value?.selectHoverOption();
  52862. else visible.value = false;
  52863. break;
  52864. case EVENT_CODE.esc:
  52865. if (!visible.value) return;
  52866. event.preventDefault();
  52867. visible.value = false;
  52868. break;
  52869. case EVENT_CODE.backspace: if (props.whole && mentionCtx.value) {
  52870. const { splitIndex, selectionEnd, pattern, prefixIndex, prefix } = mentionCtx.value;
  52871. const inputEl = getInputEl();
  52872. if (!inputEl) return;
  52873. const inputValue = inputEl.value;
  52874. const matchOption = options.value.find((item) => item.value === pattern);
  52875. if ((isFunction$1(props.checkIsWhole) ? props.checkIsWhole(pattern, prefix) : matchOption) && splitIndex !== -1 && splitIndex + 1 === selectionEnd) {
  52876. event.preventDefault();
  52877. const newValue = inputValue.slice(0, prefixIndex) + inputValue.slice(splitIndex + 1);
  52878. emit(UPDATE_MODEL_EVENT, newValue);
  52879. emit(INPUT_EVENT, newValue);
  52880. emit("whole-remove", pattern, prefix);
  52881. const newSelectionEnd = prefixIndex;
  52882. (0, vue.nextTick)(() => {
  52883. inputEl.selectionStart = newSelectionEnd;
  52884. inputEl.selectionEnd = newSelectionEnd;
  52885. syncDropdownVisible();
  52886. });
  52887. }
  52888. }
  52889. }
  52890. };
  52891. const { wrapperRef } = useFocusController(elInputRef, {
  52892. disabled,
  52893. afterFocus() {
  52894. syncAfterCursorMove();
  52895. },
  52896. beforeBlur(event) {
  52897. return tooltipRef.value?.isFocusInsideContent(event);
  52898. },
  52899. afterBlur() {
  52900. visible.value = false;
  52901. }
  52902. });
  52903. const handleInputMouseDown = () => {
  52904. syncAfterCursorMove();
  52905. };
  52906. const getOriginalOption = (mentionOption) => {
  52907. return props.options.find((option) => {
  52908. return mentionOption.value === option[aliasProps.value.value];
  52909. });
  52910. };
  52911. const handleSelect = (item) => {
  52912. if (!mentionCtx.value) return;
  52913. const inputEl = getInputEl();
  52914. if (!inputEl) return;
  52915. const inputValue = inputEl.value;
  52916. const { split } = props;
  52917. const newEndPart = inputValue.slice(mentionCtx.value.end);
  52918. const alreadySeparated = newEndPart.startsWith(split);
  52919. const newMiddlePart = `${item.value}${alreadySeparated ? "" : split}`;
  52920. const newValue = inputValue.slice(0, mentionCtx.value.start) + newMiddlePart + newEndPart;
  52921. emit(UPDATE_MODEL_EVENT, newValue);
  52922. emit(INPUT_EVENT, newValue);
  52923. emit("select", getOriginalOption(item), mentionCtx.value.prefix);
  52924. const newSelectionEnd = mentionCtx.value.start + newMiddlePart.length + (alreadySeparated ? 1 : 0);
  52925. (0, vue.nextTick)(() => {
  52926. inputEl.selectionStart = newSelectionEnd;
  52927. inputEl.selectionEnd = newSelectionEnd;
  52928. inputEl.focus();
  52929. syncDropdownVisible();
  52930. });
  52931. };
  52932. const getInputEl = () => props.type === "textarea" ? elInputRef.value?.textarea : elInputRef.value?.input;
  52933. const syncAfterCursorMove = () => {
  52934. setTimeout(() => {
  52935. syncCursor();
  52936. syncDropdownVisible();
  52937. (0, vue.nextTick)(() => tooltipRef.value?.updatePopper());
  52938. }, 0);
  52939. };
  52940. const syncCursor = () => {
  52941. const inputEl = getInputEl();
  52942. if (!inputEl) return;
  52943. const caretPosition = getCursorPosition(inputEl);
  52944. const inputRect = inputEl.getBoundingClientRect();
  52945. const wrapperRect = wrapperRef.value.getBoundingClientRect();
  52946. cursorStyle.value = {
  52947. position: "absolute",
  52948. width: 0,
  52949. height: `${caretPosition.height}px`,
  52950. left: `${caretPosition.left + inputRect.left - wrapperRect.left}px`,
  52951. top: `${caretPosition.top + inputRect.top - wrapperRect.top}px`
  52952. };
  52953. };
  52954. const syncDropdownVisible = () => {
  52955. const inputEl = getInputEl();
  52956. if (document.activeElement !== inputEl) {
  52957. visible.value = false;
  52958. return;
  52959. }
  52960. const { prefix, split } = props;
  52961. mentionCtx.value = getMentionCtx(inputEl, prefix, split);
  52962. if (mentionCtx.value && mentionCtx.value.splitIndex === -1) {
  52963. visible.value = true;
  52964. emit("search", mentionCtx.value.pattern, mentionCtx.value.prefix);
  52965. return;
  52966. }
  52967. visible.value = false;
  52968. };
  52969. __expose({
  52970. input: elInputRef,
  52971. tooltip: tooltipRef,
  52972. dropdownVisible
  52973. });
  52974. return (_ctx, _cache) => {
  52975. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  52976. ref_key: "wrapperRef",
  52977. ref: wrapperRef,
  52978. class: (0, vue.normalizeClass)((0, vue.unref)(ns).b())
  52979. }, [(0, vue.createVNode)((0, vue.unref)(ElInput), (0, vue.mergeProps)((0, vue.mergeProps)(passInputProps.value, _ctx.$attrs), {
  52980. ref_key: "elInputRef",
  52981. ref: elInputRef,
  52982. "model-value": __props.modelValue,
  52983. disabled: (0, vue.unref)(disabled),
  52984. role: dropdownVisible.value ? "combobox" : void 0,
  52985. "aria-activedescendant": dropdownVisible.value ? hoveringId.value || "" : void 0,
  52986. "aria-controls": dropdownVisible.value ? (0, vue.unref)(contentId) : void 0,
  52987. "aria-expanded": dropdownVisible.value || void 0,
  52988. "aria-label": __props.ariaLabel,
  52989. "aria-autocomplete": dropdownVisible.value ? "none" : void 0,
  52990. "aria-haspopup": dropdownVisible.value ? "listbox" : void 0,
  52991. onInput: handleInputChange,
  52992. onKeydown: handleInputKeyDown,
  52993. onMousedown: handleInputMouseDown
  52994. }), (0, vue.createSlots)({ _: 2 }, [(0, vue.renderList)(_ctx.$slots, (_, name) => {
  52995. return {
  52996. name,
  52997. fn: (0, vue.withCtx)((slotProps) => [(0, vue.renderSlot)(_ctx.$slots, name, (0, vue.normalizeProps)((0, vue.guardReactiveProps)(slotProps)))])
  52998. };
  52999. })]), 1040, [
  53000. "model-value",
  53001. "disabled",
  53002. "role",
  53003. "aria-activedescendant",
  53004. "aria-controls",
  53005. "aria-expanded",
  53006. "aria-label",
  53007. "aria-autocomplete",
  53008. "aria-haspopup"
  53009. ]), (0, vue.createVNode)((0, vue.unref)(ElTooltip), {
  53010. ref_key: "tooltipRef",
  53011. ref: tooltipRef,
  53012. visible: dropdownVisible.value,
  53013. "popper-class": [(0, vue.unref)(ns).e("popper"), __props.popperClass],
  53014. "popper-style": __props.popperStyle,
  53015. "popper-options": __props.popperOptions,
  53016. placement: computedPlacement.value,
  53017. "fallback-placements": computedFallbackPlacements.value,
  53018. effect: "light",
  53019. pure: "",
  53020. offset: __props.offset,
  53021. "show-arrow": __props.showArrow
  53022. }, {
  53023. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", { style: (0, vue.normalizeStyle)(cursorStyle.value) }, null, 4)]),
  53024. content: (0, vue.withCtx)(() => [(0, vue.createVNode)(mention_dropdown_default, {
  53025. ref_key: "dropdownRef",
  53026. ref: dropdownRef,
  53027. options: filteredOptions.value,
  53028. disabled: (0, vue.unref)(disabled),
  53029. loading: __props.loading,
  53030. "content-id": (0, vue.unref)(contentId),
  53031. "aria-label": __props.ariaLabel,
  53032. onSelect: handleSelect,
  53033. onClick: _cache[0] || (_cache[0] = (0, vue.withModifiers)(($event) => elInputRef.value?.focus(), ["stop"]))
  53034. }, (0, vue.createSlots)({ _: 2 }, [(0, vue.renderList)(_ctx.$slots, (_, name) => {
  53035. return {
  53036. name,
  53037. fn: (0, vue.withCtx)((slotProps) => [(0, vue.renderSlot)(_ctx.$slots, name, (0, vue.normalizeProps)((0, vue.guardReactiveProps)(slotProps)))])
  53038. };
  53039. })]), 1032, [
  53040. "options",
  53041. "disabled",
  53042. "loading",
  53043. "content-id",
  53044. "aria-label"
  53045. ])]),
  53046. _: 3
  53047. }, 8, [
  53048. "visible",
  53049. "popper-class",
  53050. "popper-style",
  53051. "popper-options",
  53052. "placement",
  53053. "fallback-placements",
  53054. "offset",
  53055. "show-arrow"
  53056. ])], 2);
  53057. };
  53058. }
  53059. });
  53060. //#endregion
  53061. //#region ../../packages/components/mention/src/mention.vue
  53062. var mention_default = mention_vue_vue_type_script_setup_true_lang_default;
  53063. //#endregion
  53064. //#region ../../packages/components/mention/index.ts
  53065. const ElMention = withInstall(mention_default);
  53066. //#endregion
  53067. //#region ../../packages/components/splitter/src/splitter.ts
  53068. const splitterProps = buildProps({
  53069. layout: {
  53070. type: String,
  53071. default: "horizontal",
  53072. values: ["horizontal", "vertical"]
  53073. },
  53074. lazy: Boolean
  53075. });
  53076. const splitterEmits = {
  53077. resizeStart: (index, sizes) => true,
  53078. resize: (index, sizes) => true,
  53079. resizeEnd: (index, sizes) => true,
  53080. collapse: (index, type, sizes) => true
  53081. };
  53082. //#endregion
  53083. //#region ../../packages/components/splitter/src/hooks/useContainer.ts
  53084. function useContainer(layout) {
  53085. const containerEl = (0, vue.ref)();
  53086. const { width, height } = useElementSize(containerEl);
  53087. return {
  53088. containerEl,
  53089. containerSize: (0, vue.computed)(() => {
  53090. return layout.value === "horizontal" ? width.value : height.value;
  53091. })
  53092. };
  53093. }
  53094. //#endregion
  53095. //#region ../../packages/components/splitter/src/hooks/useSize.ts
  53096. function getPct(str) {
  53097. return Number(str.slice(0, -1)) / 100;
  53098. }
  53099. function getPx(str) {
  53100. return Number(str.slice(0, -2));
  53101. }
  53102. function isPct(itemSize) {
  53103. return isString(itemSize) && itemSize.endsWith("%");
  53104. }
  53105. function isPx(itemSize) {
  53106. return isString(itemSize) && itemSize.endsWith("px");
  53107. }
  53108. function useSize$1(panels, containerSize) {
  53109. const propSizes = (0, vue.computed)(() => panels.value.map((i) => i.size));
  53110. const panelCounts = (0, vue.computed)(() => panels.value.length);
  53111. const percentSizes = (0, vue.ref)([]);
  53112. (0, vue.watch)([
  53113. propSizes,
  53114. panelCounts,
  53115. containerSize
  53116. ], () => {
  53117. let ptgList = [];
  53118. let emptyCount = 0;
  53119. for (let i = 0; i < panelCounts.value; i += 1) {
  53120. const itemSize = panels.value[i]?.size;
  53121. if (isPct(itemSize)) ptgList[i] = getPct(itemSize);
  53122. else if (isPx(itemSize)) ptgList[i] = getPx(itemSize) / containerSize.value;
  53123. else if (itemSize || itemSize === 0) {
  53124. const num = Number(itemSize);
  53125. if (!Number.isNaN(num)) ptgList[i] = num / containerSize.value;
  53126. } else {
  53127. emptyCount += 1;
  53128. ptgList[i] = void 0;
  53129. }
  53130. }
  53131. const totalPtg = ptgList.reduce((acc, ptg) => acc + (ptg || 0), 0);
  53132. if (totalPtg > 1 || !emptyCount) {
  53133. const scale = 1 / totalPtg;
  53134. ptgList = ptgList.map((ptg) => ptg === void 0 ? 0 : ptg * scale);
  53135. } else {
  53136. const avgRest = (1 - totalPtg) / emptyCount;
  53137. ptgList = ptgList.map((ptg) => ptg === void 0 ? avgRest : ptg);
  53138. }
  53139. percentSizes.value = ptgList;
  53140. });
  53141. const ptg2px = (ptg) => ptg * containerSize.value;
  53142. return {
  53143. percentSizes,
  53144. pxSizes: (0, vue.computed)(() => percentSizes.value.map(ptg2px))
  53145. };
  53146. }
  53147. //#endregion
  53148. //#region ../../packages/components/splitter/src/hooks/useResize.ts
  53149. function useResize(panels, containerSize, pxSizes, lazy) {
  53150. const ptg2px = (ptg) => ptg * containerSize.value || 0;
  53151. function getLimitSize(str, defaultLimit) {
  53152. if (isPct(str)) return ptg2px(getPct(str));
  53153. else if (isPx(str)) return getPx(str);
  53154. return str ?? defaultLimit;
  53155. }
  53156. const lazyOffset = (0, vue.ref)(0);
  53157. const movingIndex = (0, vue.ref)(null);
  53158. let cachePxSizes = [];
  53159. let updatePanelSizes = NOOP;
  53160. const limitSizes = (0, vue.computed)(() => panels.value.map((item) => [item.min, item.max]));
  53161. (0, vue.watch)(lazy, () => {
  53162. if (lazyOffset.value) {
  53163. const mouseup = new MouseEvent("mouseup", { bubbles: true });
  53164. window.dispatchEvent(mouseup);
  53165. }
  53166. });
  53167. const onMoveStart = (index) => {
  53168. lazyOffset.value = 0;
  53169. movingIndex.value = {
  53170. index,
  53171. confirmed: false
  53172. };
  53173. cachePxSizes = pxSizes.value;
  53174. };
  53175. const onMoving = (index, offset) => {
  53176. let confirmedIndex = null;
  53177. if ((!movingIndex.value || !movingIndex.value.confirmed) && offset !== 0) {
  53178. if (offset > 0) {
  53179. confirmedIndex = index;
  53180. movingIndex.value = {
  53181. index,
  53182. confirmed: true
  53183. };
  53184. } else for (let i = index; i >= 0; i -= 1) if (cachePxSizes[i] > 0) {
  53185. confirmedIndex = i;
  53186. movingIndex.value = {
  53187. index: i,
  53188. confirmed: true
  53189. };
  53190. break;
  53191. }
  53192. }
  53193. const mergedIndex = confirmedIndex ?? movingIndex.value?.index ?? index;
  53194. const numSizes = [...cachePxSizes];
  53195. const nextIndex = mergedIndex + 1;
  53196. const startMinSize = getLimitSize(limitSizes.value[mergedIndex][0], 0);
  53197. const endMinSize = getLimitSize(limitSizes.value[nextIndex][0], 0);
  53198. const startMaxSize = getLimitSize(limitSizes.value[mergedIndex][1], containerSize.value || 0);
  53199. const endMaxSize = getLimitSize(limitSizes.value[nextIndex][1], containerSize.value || 0);
  53200. let mergedOffset = offset;
  53201. if (numSizes[mergedIndex] + mergedOffset < startMinSize) mergedOffset = startMinSize - numSizes[mergedIndex];
  53202. if (numSizes[nextIndex] - mergedOffset < endMinSize) mergedOffset = numSizes[nextIndex] - endMinSize;
  53203. if (numSizes[mergedIndex] + mergedOffset > startMaxSize) mergedOffset = startMaxSize - numSizes[mergedIndex];
  53204. if (numSizes[nextIndex] - mergedOffset > endMaxSize) mergedOffset = numSizes[nextIndex] - endMaxSize;
  53205. numSizes[mergedIndex] += mergedOffset;
  53206. numSizes[nextIndex] -= mergedOffset;
  53207. lazyOffset.value = mergedOffset;
  53208. updatePanelSizes = () => {
  53209. panels.value.forEach((panel, index) => {
  53210. panel.size = numSizes[index];
  53211. });
  53212. updatePanelSizes = NOOP;
  53213. };
  53214. if (!lazy.value) updatePanelSizes();
  53215. };
  53216. const onMoveEnd = () => {
  53217. if (lazy.value) updatePanelSizes();
  53218. lazyOffset.value = 0;
  53219. movingIndex.value = null;
  53220. cachePxSizes = [];
  53221. };
  53222. const cacheCollapsedSize = [];
  53223. const onCollapse = (index, type) => {
  53224. if (!cacheCollapsedSize.length) cacheCollapsedSize.push(...pxSizes.value.map((size, i) => size <= 0 ? getLimitSize(limitSizes.value[i]?.[0], 0) : size));
  53225. const currentSizes = pxSizes.value;
  53226. const currentIndex = type === "start" ? index : index + 1;
  53227. const targetIndex = type === "start" ? index + 1 : index;
  53228. const currentSize = currentSizes[currentIndex];
  53229. const targetSize = currentSizes[targetIndex];
  53230. if (currentSize !== 0 && targetSize !== 0) {
  53231. currentSizes[currentIndex] = 0;
  53232. currentSizes[targetIndex] += currentSize;
  53233. cacheCollapsedSize[index] = currentSize;
  53234. } else {
  53235. const totalSize = currentSize + targetSize;
  53236. const targetCacheCollapsedSize = clamp$1(cacheCollapsedSize[index], 0, totalSize);
  53237. const currentCacheCollapsedSize = totalSize - targetCacheCollapsedSize;
  53238. currentSizes[targetIndex] = targetCacheCollapsedSize;
  53239. currentSizes[currentIndex] = currentCacheCollapsedSize;
  53240. }
  53241. panels.value.forEach((panel, index) => {
  53242. panel.size = currentSizes[index];
  53243. });
  53244. };
  53245. return {
  53246. lazyOffset,
  53247. onMoveStart,
  53248. onMoving,
  53249. onMoveEnd,
  53250. movingIndex,
  53251. onCollapse
  53252. };
  53253. }
  53254. //#endregion
  53255. //#region ../../packages/components/splitter/src/type.ts
  53256. const splitterRootContextKey = Symbol("splitterRootContextKey");
  53257. //#endregion
  53258. //#region ../../packages/components/splitter/src/splitter.vue?vue&type=script&setup=true&lang.ts
  53259. var splitter_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  53260. name: "ElSplitter",
  53261. __name: "splitter",
  53262. props: splitterProps,
  53263. emits: splitterEmits,
  53264. setup(__props, { emit: __emit }) {
  53265. const ns = useNamespace("splitter");
  53266. const emits = __emit;
  53267. const props = __props;
  53268. const layout = (0, vue.toRef)(props, "layout");
  53269. const lazy = (0, vue.toRef)(props, "lazy");
  53270. const { containerEl, containerSize } = useContainer(layout);
  53271. const { removeChild: unregisterPanel, children: panels, addChild: registerPanel, ChildrenSorter: PanelsSorter } = useOrderedChildren((0, vue.getCurrentInstance)(), "ElSplitterPanel");
  53272. (0, vue.watch)(panels, () => {
  53273. movingIndex.value = null;
  53274. panels.value.forEach((instance, index) => {
  53275. instance.setIndex(index);
  53276. });
  53277. });
  53278. const { percentSizes, pxSizes } = useSize$1(panels, containerSize);
  53279. const { lazyOffset, movingIndex, onMoveStart, onMoving, onMoveEnd, onCollapse } = useResize(panels, containerSize, pxSizes, lazy);
  53280. const splitterStyles = (0, vue.computed)(() => {
  53281. return { [ns.cssVarBlockName("bar-offset")]: lazy.value ? `${lazyOffset.value}px` : void 0 };
  53282. });
  53283. const onResizeStart = (index) => {
  53284. onMoveStart(index);
  53285. emits("resizeStart", index, pxSizes.value);
  53286. };
  53287. const onResize = (index, offset) => {
  53288. onMoving(index, offset);
  53289. if (!lazy.value) emits("resize", index, pxSizes.value);
  53290. };
  53291. const onResizeEnd = async (index) => {
  53292. onMoveEnd();
  53293. await (0, vue.nextTick)();
  53294. emits("resizeEnd", index, pxSizes.value);
  53295. };
  53296. const onCollapsible = (index, type) => {
  53297. onCollapse(index, type);
  53298. emits("collapse", index, type, pxSizes.value);
  53299. };
  53300. (0, vue.provide)(splitterRootContextKey, (0, vue.reactive)({
  53301. panels,
  53302. percentSizes,
  53303. pxSizes,
  53304. layout,
  53305. lazy,
  53306. movingIndex,
  53307. containerSize,
  53308. onMoveStart: onResizeStart,
  53309. onMoving: onResize,
  53310. onMoveEnd: onResizeEnd,
  53311. onCollapse: onCollapsible,
  53312. registerPanel,
  53313. unregisterPanel
  53314. }));
  53315. return (_ctx, _cache) => {
  53316. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  53317. ref_key: "containerEl",
  53318. ref: containerEl,
  53319. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b(), (0, vue.unref)(ns).e(layout.value)]),
  53320. style: (0, vue.normalizeStyle)(splitterStyles.value)
  53321. }, [
  53322. (0, vue.renderSlot)(_ctx.$slots, "default"),
  53323. (0, vue.createVNode)((0, vue.unref)(PanelsSorter)),
  53324. (0, vue.createCommentVNode)(" Prevent iframe touch events from breaking "),
  53325. (0, vue.unref)(movingIndex) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  53326. key: 0,
  53327. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("mask"), (0, vue.unref)(ns).e(`mask-${layout.value}`)])
  53328. }, null, 2)) : (0, vue.createCommentVNode)("v-if", true)
  53329. ], 6);
  53330. };
  53331. }
  53332. });
  53333. //#endregion
  53334. //#region ../../packages/components/splitter/src/splitter.vue
  53335. var splitter_default = splitter_vue_vue_type_script_setup_true_lang_default;
  53336. //#endregion
  53337. //#region ../../packages/components/splitter/src/split-panel.ts
  53338. const splitterPanelProps = buildProps({
  53339. min: { type: [String, Number] },
  53340. max: { type: [String, Number] },
  53341. size: { type: [String, Number] },
  53342. resizable: {
  53343. type: Boolean,
  53344. default: true
  53345. },
  53346. collapsible: Boolean
  53347. });
  53348. const splitterPanelEmits = { "update:size": (value) => typeof value === "number" || typeof value === "string" };
  53349. //#endregion
  53350. //#region ../../packages/components/splitter/src/hooks/usePanel.ts
  53351. function getCollapsible(collapsible) {
  53352. if (collapsible && isObject$1(collapsible)) return collapsible;
  53353. return {
  53354. start: !!collapsible,
  53355. end: !!collapsible
  53356. };
  53357. }
  53358. function isCollapsible(panel, size, nextPanel, nextSize) {
  53359. if (panel?.collapsible.end && size > 0) return true;
  53360. if (nextPanel?.collapsible.start && nextSize === 0 && size > 0) return true;
  53361. return false;
  53362. }
  53363. //#endregion
  53364. //#region ../../packages/components/splitter/src/split-bar.vue?vue&type=script&setup=true&lang.ts
  53365. var split_bar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  53366. name: "ElSplitterBar",
  53367. __name: "split-bar",
  53368. props: {
  53369. index: {
  53370. type: Number,
  53371. required: true
  53372. },
  53373. layout: {
  53374. type: String,
  53375. values: ["horizontal", "vertical"],
  53376. default: "horizontal"
  53377. },
  53378. resizable: {
  53379. type: Boolean,
  53380. default: true
  53381. },
  53382. lazy: Boolean,
  53383. startCollapsible: Boolean,
  53384. endCollapsible: Boolean
  53385. },
  53386. emits: [
  53387. "moveStart",
  53388. "moving",
  53389. "moveEnd",
  53390. "collapse"
  53391. ],
  53392. setup(__props, { emit: __emit }) {
  53393. const ns = useNamespace("splitter-bar");
  53394. const props = __props;
  53395. const emit = __emit;
  53396. const isHorizontal = (0, vue.computed)(() => props.layout === "horizontal");
  53397. const barWrapStyles = (0, vue.computed)(() => {
  53398. if (isHorizontal.value) return { width: 0 };
  53399. return { height: 0 };
  53400. });
  53401. const draggerStyles = (0, vue.computed)(() => {
  53402. return {
  53403. width: isHorizontal.value ? "16px" : "100%",
  53404. height: isHorizontal.value ? "100%" : "16px",
  53405. cursor: !props.resizable ? "auto" : isHorizontal.value ? "ew-resize" : "ns-resize",
  53406. touchAction: "none"
  53407. };
  53408. });
  53409. const draggerPseudoClass = (0, vue.computed)(() => {
  53410. const prefix = ns.e("dragger");
  53411. return {
  53412. [`${prefix}-horizontal`]: isHorizontal.value,
  53413. [`${prefix}-vertical`]: !isHorizontal.value,
  53414. [`${prefix}-active`]: !!startPos.value
  53415. };
  53416. });
  53417. const startPos = (0, vue.ref)(null);
  53418. const onMousedown = (e) => {
  53419. if (!props.resizable) return;
  53420. startPos.value = [e.pageX, e.pageY];
  53421. emit("moveStart", props.index);
  53422. window.addEventListener("mouseup", onMouseUp);
  53423. window.addEventListener("mousemove", onMouseMove);
  53424. };
  53425. const onTouchStart = (e) => {
  53426. if (props.resizable && e.touches.length === 1) {
  53427. e.preventDefault();
  53428. const touch = e.touches[0];
  53429. startPos.value = [touch.pageX, touch.pageY];
  53430. emit("moveStart", props.index);
  53431. window.addEventListener("touchend", onTouchEnd);
  53432. window.addEventListener("touchmove", onTouchMove);
  53433. }
  53434. };
  53435. const onMouseMove = (e) => {
  53436. const { pageX, pageY } = e;
  53437. const offsetX = pageX - startPos.value[0];
  53438. const offsetY = pageY - startPos.value[1];
  53439. const offset = isHorizontal.value ? offsetX : offsetY;
  53440. emit("moving", props.index, offset);
  53441. };
  53442. const onTouchMove = (e) => {
  53443. if (e.touches.length === 1) {
  53444. e.preventDefault();
  53445. const touch = e.touches[0];
  53446. const offsetX = touch.pageX - startPos.value[0];
  53447. const offsetY = touch.pageY - startPos.value[1];
  53448. const offset = isHorizontal.value ? offsetX : offsetY;
  53449. emit("moving", props.index, offset);
  53450. }
  53451. };
  53452. const onMouseUp = () => {
  53453. startPos.value = null;
  53454. window.removeEventListener("mouseup", onMouseUp);
  53455. window.removeEventListener("mousemove", onMouseMove);
  53456. emit("moveEnd", props.index);
  53457. };
  53458. const onTouchEnd = () => {
  53459. startPos.value = null;
  53460. window.removeEventListener("touchend", onTouchEnd);
  53461. window.removeEventListener("touchmove", onTouchMove);
  53462. emit("moveEnd", props.index);
  53463. };
  53464. const StartIcon = (0, vue.computed)(() => isHorizontal.value ? arrow_left_default : arrow_up_default);
  53465. const EndIcon = (0, vue.computed)(() => isHorizontal.value ? arrow_right_default : arrow_down_default);
  53466. return (_ctx, _cache) => {
  53467. return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  53468. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).b()]),
  53469. style: (0, vue.normalizeStyle)(barWrapStyles.value)
  53470. }, [
  53471. __props.startCollapsible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  53472. key: 0,
  53473. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("collapse-icon"), (0, vue.unref)(ns).e(`${__props.layout}-collapse-icon-start`)]),
  53474. onClick: _cache[0] || (_cache[0] = ($event) => emit("collapse", __props.index, "start"))
  53475. }, [(0, vue.renderSlot)(_ctx.$slots, "start-collapsible", {}, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(StartIcon.value), { style: {
  53476. "width": "12px",
  53477. "height": "12px"
  53478. } }))])], 2)) : (0, vue.createCommentVNode)("v-if", true),
  53479. (0, vue.createElementVNode)("div", {
  53480. class: (0, vue.normalizeClass)([
  53481. (0, vue.unref)(ns).e("dragger"),
  53482. draggerPseudoClass.value,
  53483. (0, vue.unref)(ns).is("disabled", !__props.resizable),
  53484. (0, vue.unref)(ns).is("lazy", __props.resizable && __props.lazy)
  53485. ]),
  53486. style: (0, vue.normalizeStyle)(draggerStyles.value),
  53487. onMousedown,
  53488. onTouchstart: onTouchStart
  53489. }, null, 38),
  53490. __props.endCollapsible ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  53491. key: 1,
  53492. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("collapse-icon"), (0, vue.unref)(ns).e(`${__props.layout}-collapse-icon-end`)]),
  53493. onClick: _cache[1] || (_cache[1] = ($event) => emit("collapse", __props.index, "end"))
  53494. }, [(0, vue.renderSlot)(_ctx.$slots, "end-collapsible", {}, () => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(EndIcon.value), { style: {
  53495. "width": "12px",
  53496. "height": "12px"
  53497. } }))])], 2)) : (0, vue.createCommentVNode)("v-if", true)
  53498. ], 6);
  53499. };
  53500. }
  53501. });
  53502. //#endregion
  53503. //#region ../../packages/components/splitter/src/split-bar.vue
  53504. var split_bar_default = split_bar_vue_vue_type_script_setup_true_lang_default;
  53505. //#endregion
  53506. //#region ../../packages/components/splitter/src/split-panel.vue?vue&type=script&setup=true&lang.ts
  53507. const COMPONENT_NAME = "ElSplitterPanel";
  53508. var split_panel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  53509. name: COMPONENT_NAME,
  53510. __name: "split-panel",
  53511. props: splitterPanelProps,
  53512. emits: splitterPanelEmits,
  53513. setup(__props, { expose: __expose, emit: __emit }) {
  53514. const ns = useNamespace("splitter-panel");
  53515. const props = __props;
  53516. const emits = __emit;
  53517. const splitterContext = (0, vue.inject)(splitterRootContextKey);
  53518. if (!splitterContext) throwError(COMPONENT_NAME, "usage: <el-splitter><el-splitter-panel /></el-splitter/>");
  53519. const { panels, layout, lazy, containerSize, pxSizes } = (0, vue.toRefs)(splitterContext);
  53520. const { registerPanel, unregisterPanel, onCollapse, onMoveEnd, onMoveStart, onMoving } = splitterContext;
  53521. const panelEl = (0, vue.ref)();
  53522. const instance = (0, vue.getCurrentInstance)();
  53523. const uid = instance.uid;
  53524. const index = (0, vue.ref)(0);
  53525. const panel = (0, vue.computed)(() => panels.value[index.value]);
  53526. const setIndex = (val) => {
  53527. index.value = val;
  53528. };
  53529. const panelSize = (0, vue.computed)(() => {
  53530. if (!panel.value) return 0;
  53531. return pxSizes.value[index.value] ?? 0;
  53532. });
  53533. const nextSize = (0, vue.computed)(() => {
  53534. if (!panel.value) return 0;
  53535. return pxSizes.value[index.value + 1] ?? 0;
  53536. });
  53537. const nextPanel = (0, vue.computed)(() => {
  53538. if (panel.value) return panels.value[index.value + 1];
  53539. return null;
  53540. });
  53541. const isResizable = (0, vue.computed)(() => {
  53542. if (!nextPanel.value) return false;
  53543. return props.resizable && nextPanel.value?.resizable && (panelSize.value !== 0 || !props.min) && (nextSize.value !== 0 || !nextPanel.value.min);
  53544. });
  53545. const isShowBar = (0, vue.computed)(() => {
  53546. if (!panel.value) return false;
  53547. return index.value !== panels.value.length - 1;
  53548. });
  53549. const startCollapsible = (0, vue.computed)(() => isCollapsible(panel.value, panelSize.value, nextPanel.value, nextSize.value));
  53550. const endCollapsible = (0, vue.computed)(() => isCollapsible(nextPanel.value, nextSize.value, panel.value, panelSize.value));
  53551. function sizeToPx(str) {
  53552. if (isPct(str)) return getPct(str) * containerSize.value || 0;
  53553. else if (isPx(str)) return getPx(str);
  53554. return str ?? 0;
  53555. }
  53556. let isSizeUpdating = false;
  53557. (0, vue.watch)(() => props.size, () => {
  53558. if (!isSizeUpdating && panel.value) {
  53559. if (!containerSize.value) {
  53560. panel.value.size = props.size;
  53561. return;
  53562. }
  53563. const size = sizeToPx(props.size);
  53564. const maxSize = sizeToPx(props.max);
  53565. const minSize = sizeToPx(props.min);
  53566. const finalSize = Math.min(Math.max(size, minSize || 0), maxSize || size);
  53567. if (finalSize !== size) emits("update:size", finalSize);
  53568. panel.value.size = finalSize;
  53569. }
  53570. });
  53571. (0, vue.watch)(() => panel.value?.size, (val) => {
  53572. if (val !== props.size) {
  53573. isSizeUpdating = true;
  53574. emits("update:size", val);
  53575. (0, vue.nextTick)(() => isSizeUpdating = false);
  53576. }
  53577. });
  53578. (0, vue.watch)(() => props.resizable, (val) => {
  53579. if (panel.value) panel.value.resizable = val;
  53580. });
  53581. const _panel = (0, vue.reactive)({
  53582. uid,
  53583. getVnode: () => instance.vnode,
  53584. setIndex,
  53585. ...props,
  53586. collapsible: (0, vue.computed)(() => getCollapsible(props.collapsible))
  53587. });
  53588. registerPanel(_panel);
  53589. (0, vue.onBeforeUnmount)(() => unregisterPanel(_panel));
  53590. __expose({ splitterPanelRef: panelEl });
  53591. return (_ctx, _cache) => {
  53592. return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [(0, vue.createElementVNode)("div", (0, vue.mergeProps)({
  53593. ref_key: "panelEl",
  53594. ref: panelEl,
  53595. class: [(0, vue.unref)(ns).b()],
  53596. style: { flexBasis: `${panelSize.value}px` }
  53597. }, _ctx.$attrs), [(0, vue.renderSlot)(_ctx.$slots, "default")], 16), isShowBar.value ? ((0, vue.openBlock)(), (0, vue.createBlock)(split_bar_default, {
  53598. key: 0,
  53599. index: index.value,
  53600. layout: (0, vue.unref)(layout),
  53601. lazy: (0, vue.unref)(lazy),
  53602. resizable: isResizable.value,
  53603. "start-collapsible": startCollapsible.value,
  53604. "end-collapsible": endCollapsible.value,
  53605. onMoveStart: (0, vue.unref)(onMoveStart),
  53606. onMoving: (0, vue.unref)(onMoving),
  53607. onMoveEnd: (0, vue.unref)(onMoveEnd),
  53608. onCollapse: (0, vue.unref)(onCollapse)
  53609. }, {
  53610. "start-collapsible": (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "start-collapsible")]),
  53611. "end-collapsible": (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "end-collapsible")]),
  53612. _: 3
  53613. }, 8, [
  53614. "index",
  53615. "layout",
  53616. "lazy",
  53617. "resizable",
  53618. "start-collapsible",
  53619. "end-collapsible",
  53620. "onMoveStart",
  53621. "onMoving",
  53622. "onMoveEnd",
  53623. "onCollapse"
  53624. ])) : (0, vue.createCommentVNode)("v-if", true)], 64);
  53625. };
  53626. }
  53627. });
  53628. //#endregion
  53629. //#region ../../packages/components/splitter/src/split-panel.vue
  53630. var split_panel_default = split_panel_vue_vue_type_script_setup_true_lang_default;
  53631. //#endregion
  53632. //#region ../../packages/components/splitter/index.ts
  53633. const ElSplitter = withInstall(splitter_default, { SplitPanel: split_panel_default });
  53634. const ElSplitterPanel = withNoopInstall(split_panel_default);
  53635. //#endregion
  53636. //#region ../../packages/element-plus/component.ts
  53637. var component_default = [
  53638. ElAffix,
  53639. ElAlert,
  53640. ElAutocomplete,
  53641. ElAutoResizer,
  53642. ElAvatar,
  53643. ElAvatarGroup,
  53644. ElBacktop,
  53645. ElBadge,
  53646. ElBreadcrumb,
  53647. ElBreadcrumbItem,
  53648. ElButton,
  53649. ElButtonGroup,
  53650. ElCalendar,
  53651. ElCard,
  53652. ElCarousel,
  53653. ElCarouselItem,
  53654. ElCascader,
  53655. ElCascaderPanel,
  53656. ElCheckTag,
  53657. ElCheckbox,
  53658. ElCheckboxButton,
  53659. ElCheckboxGroup,
  53660. ElCol,
  53661. ElCollapse,
  53662. ElCollapseItem,
  53663. ElCollapseTransition,
  53664. ElColorPickerPanel,
  53665. ElColorPicker,
  53666. ElConfigProvider,
  53667. ElContainer,
  53668. ElAside,
  53669. ElFooter,
  53670. ElHeader,
  53671. ElMain,
  53672. ElDatePicker,
  53673. ElDatePickerPanel,
  53674. ElDescriptions,
  53675. ElDescriptionsItem,
  53676. ElDialog,
  53677. ElDivider,
  53678. ElDrawer,
  53679. ElDropdown,
  53680. ElDropdownItem,
  53681. ElDropdownMenu,
  53682. ElEmpty,
  53683. ElForm,
  53684. ElFormItem,
  53685. ElIcon,
  53686. ElImage,
  53687. ElImageViewer,
  53688. ElInput,
  53689. ElInputNumber,
  53690. ElInputTag,
  53691. ElInputOtp,
  53692. ElLink,
  53693. ElMenu,
  53694. ElMenuItem,
  53695. ElMenuItemGroup,
  53696. ElSubMenu,
  53697. ElPageHeader,
  53698. ElPagination,
  53699. ElPopconfirm,
  53700. ElPopover,
  53701. ElPopper,
  53702. ElProgress,
  53703. ElRadio,
  53704. ElRadioButton,
  53705. ElRadioGroup,
  53706. ElRate,
  53707. ElResult,
  53708. ElRow,
  53709. ElScrollbar,
  53710. ElSelect,
  53711. ElOption,
  53712. ElOptionGroup,
  53713. ElSelectV2,
  53714. ElSkeleton,
  53715. ElSkeletonItem,
  53716. ElSlider,
  53717. ElSpace,
  53718. ElStatistic,
  53719. ElCountdown,
  53720. ElSteps,
  53721. ElStep,
  53722. ElSwitch,
  53723. ElTable,
  53724. ElTableColumn,
  53725. ElTableV2,
  53726. ElTabs,
  53727. ElTabPane,
  53728. ElTag,
  53729. ElText,
  53730. ElTimePicker,
  53731. ElTimeSelect,
  53732. ElTimeline,
  53733. ElTimelineItem,
  53734. ElTooltip,
  53735. ElTransfer,
  53736. ElTree,
  53737. ElTreeSelect,
  53738. ElTreeV2,
  53739. ElUpload,
  53740. ElWatermark,
  53741. ElTour,
  53742. ElTourStep,
  53743. ElAnchor,
  53744. ElAnchorLink,
  53745. ElSegmented,
  53746. ElMention,
  53747. ElSplitter,
  53748. ElSplitterPanel
  53749. ];
  53750. //#endregion
  53751. //#region ../../packages/components/infinite-scroll/src/index.ts
  53752. const SCOPE$1 = "ElInfiniteScroll";
  53753. const CHECK_INTERVAL = 50;
  53754. const DEFAULT_DELAY = 200;
  53755. const DEFAULT_DISTANCE = 0;
  53756. const attributes = {
  53757. delay: {
  53758. type: Number,
  53759. default: 200
  53760. },
  53761. distance: {
  53762. type: Number,
  53763. default: 0
  53764. },
  53765. disabled: {
  53766. type: Boolean,
  53767. default: false
  53768. },
  53769. immediate: {
  53770. type: Boolean,
  53771. default: true
  53772. }
  53773. };
  53774. const getScrollOptions = (el, instance) => {
  53775. return Object.entries(attributes).reduce((acm, [name, option]) => {
  53776. const { type, default: defaultValue } = option;
  53777. const attrVal = el.getAttribute(`infinite-scroll-${name}`);
  53778. let value = instance[attrVal] ?? attrVal ?? defaultValue;
  53779. value = value === "false" ? false : value;
  53780. value = type(value);
  53781. acm[name] = Number.isNaN(value) ? defaultValue : value;
  53782. return acm;
  53783. }, {});
  53784. };
  53785. const destroyObserver = (el) => {
  53786. const { observer } = el[SCOPE$1];
  53787. if (observer) {
  53788. observer.disconnect();
  53789. delete el[SCOPE$1].observer;
  53790. }
  53791. };
  53792. const handleScroll = (el, cb) => {
  53793. const { container, containerEl, instance, observer, lastScrollTop } = el[SCOPE$1];
  53794. const { disabled, distance } = getScrollOptions(el, instance);
  53795. const { clientHeight, scrollHeight, scrollTop } = containerEl;
  53796. const delta = scrollTop - lastScrollTop;
  53797. el[SCOPE$1].lastScrollTop = scrollTop;
  53798. if (observer || disabled || delta < 0) return;
  53799. let shouldTrigger = false;
  53800. if (container === el) shouldTrigger = scrollHeight - (clientHeight + scrollTop) <= distance;
  53801. else {
  53802. const { clientTop, scrollHeight: height } = el;
  53803. const offsetTop = getOffsetTopDistance(el, containerEl);
  53804. shouldTrigger = scrollTop + clientHeight >= offsetTop + clientTop + height - distance;
  53805. }
  53806. if (shouldTrigger) cb.call(instance);
  53807. };
  53808. function checkFull(el, cb) {
  53809. const { containerEl, instance } = el[SCOPE$1];
  53810. const { disabled } = getScrollOptions(el, instance);
  53811. if (disabled || containerEl.clientHeight === 0) return;
  53812. if (containerEl.scrollHeight <= containerEl.clientHeight) cb.call(instance);
  53813. else destroyObserver(el);
  53814. }
  53815. const InfiniteScroll = {
  53816. async mounted(el, binding) {
  53817. const { instance, value: cb } = binding;
  53818. useDeprecated({
  53819. scope: SCOPE$1,
  53820. from: "the directive v-infinite-scroll",
  53821. replacement: "the el-scrollbar infinite scroll",
  53822. version: "3.0.0",
  53823. ref: "https://element-plus.org/en-US/component/scrollbar#infinite-scroll"
  53824. }, true);
  53825. if (!isFunction$1(cb)) throwError(SCOPE$1, "'v-infinite-scroll' binding value must be a function");
  53826. await (0, vue.nextTick)();
  53827. const { delay, immediate } = getScrollOptions(el, instance);
  53828. const container = getScrollContainer(el, true);
  53829. const containerEl = container === window ? document.documentElement : container;
  53830. const onScroll = throttle(handleScroll.bind(null, el, cb), delay);
  53831. if (!container) return;
  53832. el[SCOPE$1] = {
  53833. instance,
  53834. container,
  53835. containerEl,
  53836. delay,
  53837. cb,
  53838. onScroll,
  53839. lastScrollTop: containerEl.scrollTop
  53840. };
  53841. if (immediate) {
  53842. const observer = new MutationObserver(throttle(checkFull.bind(null, el, cb), 50));
  53843. el[SCOPE$1].observer = observer;
  53844. observer.observe(el, {
  53845. childList: true,
  53846. subtree: true
  53847. });
  53848. checkFull(el, cb);
  53849. }
  53850. container.addEventListener("scroll", onScroll);
  53851. },
  53852. unmounted(el) {
  53853. if (!el["ElInfiniteScroll"]) return;
  53854. const { container, onScroll } = el[SCOPE$1];
  53855. container?.removeEventListener("scroll", onScroll);
  53856. destroyObserver(el);
  53857. },
  53858. async updated(el) {
  53859. if (!el["ElInfiniteScroll"]) await (0, vue.nextTick)();
  53860. else {
  53861. const { containerEl, cb, observer } = el[SCOPE$1];
  53862. if (containerEl.clientHeight && observer) checkFull(el, cb);
  53863. }
  53864. }
  53865. };
  53866. //#endregion
  53867. //#region ../../packages/components/infinite-scroll/index.ts
  53868. const _InfiniteScroll = InfiniteScroll;
  53869. _InfiniteScroll.install = (app) => {
  53870. app.directive("InfiniteScroll", _InfiniteScroll);
  53871. };
  53872. const ElInfiniteScroll = _InfiniteScroll;
  53873. //#endregion
  53874. //#region ../../packages/components/loading/src/loading.ts
  53875. function createLoadingComponent(options, appContext) {
  53876. let afterLeaveTimer;
  53877. const afterLeaveFlag = (0, vue.ref)(false);
  53878. const data = (0, vue.reactive)({
  53879. ...options,
  53880. originalPosition: "",
  53881. originalOverflow: "",
  53882. visible: false
  53883. });
  53884. function setText(text) {
  53885. data.text = text;
  53886. }
  53887. function destroySelf() {
  53888. const target = data.parent;
  53889. const ns = vm.ns;
  53890. if (!target.vLoadingAddClassList) {
  53891. let loadingNumber = target.getAttribute("loading-number");
  53892. loadingNumber = Number.parseInt(loadingNumber) - 1;
  53893. if (!loadingNumber) {
  53894. removeClass(target, ns.bm("parent", "relative"));
  53895. target.removeAttribute("loading-number");
  53896. } else target.setAttribute("loading-number", loadingNumber.toString());
  53897. removeClass(target, ns.bm("parent", "hidden"));
  53898. }
  53899. removeElLoadingChild();
  53900. loadingInstance.unmount();
  53901. }
  53902. function removeElLoadingChild() {
  53903. vm.$el?.parentNode?.removeChild(vm.$el);
  53904. }
  53905. function close() {
  53906. if (options.beforeClose && !options.beforeClose()) return;
  53907. afterLeaveFlag.value = true;
  53908. clearTimeout(afterLeaveTimer);
  53909. afterLeaveTimer = setTimeout(handleAfterLeave, 400);
  53910. data.visible = false;
  53911. options.closed?.();
  53912. }
  53913. function handleAfterLeave() {
  53914. if (!afterLeaveFlag.value) return;
  53915. const target = data.parent;
  53916. afterLeaveFlag.value = false;
  53917. target.vLoadingAddClassList = void 0;
  53918. destroySelf();
  53919. }
  53920. const loadingInstance = (0, vue.createApp)((0, vue.defineComponent)({
  53921. name: "ElLoading",
  53922. setup(_, { expose }) {
  53923. const { ns, zIndex } = useGlobalComponentSettings("loading");
  53924. expose({
  53925. ns,
  53926. zIndex
  53927. });
  53928. return () => {
  53929. const svg = data.spinner || data.svg;
  53930. const spinner = (0, vue.h)("svg", {
  53931. class: "circular",
  53932. viewBox: data.svgViewBox ? data.svgViewBox : "0 0 50 50",
  53933. ...svg ? { innerHTML: svg } : {}
  53934. }, [(0, vue.h)("circle", {
  53935. class: "path",
  53936. cx: "25",
  53937. cy: "25",
  53938. r: "20",
  53939. fill: "none"
  53940. })]);
  53941. const spinnerText = data.text ? (0, vue.h)("p", { class: ns.b("text") }, [data.text]) : void 0;
  53942. return (0, vue.h)(vue.Transition, {
  53943. name: ns.b("fade"),
  53944. onAfterLeave: handleAfterLeave
  53945. }, { default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)("div", {
  53946. style: { backgroundColor: data.background || "" },
  53947. class: [
  53948. ns.b("mask"),
  53949. data.customClass,
  53950. ns.is("fullscreen", data.fullscreen)
  53951. ]
  53952. }, [(0, vue.h)("div", { class: ns.b("spinner") }, [spinner, spinnerText])]), [[vue.vShow, data.visible]])]) });
  53953. };
  53954. }
  53955. }));
  53956. Object.assign(loadingInstance._context, appContext ?? {});
  53957. const vm = loadingInstance.mount(document.createElement("div"));
  53958. return {
  53959. ...(0, vue.toRefs)(data),
  53960. setText,
  53961. removeElLoadingChild,
  53962. close,
  53963. handleAfterLeave,
  53964. vm,
  53965. get $el() {
  53966. return vm.$el;
  53967. }
  53968. };
  53969. }
  53970. //#endregion
  53971. //#region ../../packages/components/loading/src/service.ts
  53972. let fullscreenInstance = void 0;
  53973. const Loading = function(options = {}, context) {
  53974. if (!isClient) return void 0;
  53975. const resolved = resolveOptions(options);
  53976. if (resolved.fullscreen && fullscreenInstance) return fullscreenInstance;
  53977. const instance = createLoadingComponent({
  53978. ...resolved,
  53979. closed: () => {
  53980. resolved.closed?.();
  53981. if (resolved.fullscreen) fullscreenInstance = void 0;
  53982. }
  53983. }, context ?? Loading._context);
  53984. addStyle(resolved, resolved.parent, instance);
  53985. addClassList(resolved, resolved.parent, instance);
  53986. resolved.parent.vLoadingAddClassList = () => addClassList(resolved, resolved.parent, instance);
  53987. let loadingNumber = resolved.parent.getAttribute("loading-number");
  53988. if (!loadingNumber) loadingNumber = "1";
  53989. else loadingNumber = `${Number.parseInt(loadingNumber) + 1}`;
  53990. resolved.parent.setAttribute("loading-number", loadingNumber);
  53991. resolved.parent.appendChild(instance.$el);
  53992. (0, vue.nextTick)(() => instance.visible.value = resolved.visible);
  53993. if (resolved.fullscreen) fullscreenInstance = instance;
  53994. return instance;
  53995. };
  53996. const resolveOptions = (options) => {
  53997. let target;
  53998. if (isString(options.target)) target = document.querySelector(options.target) ?? document.body;
  53999. else target = options.target || document.body;
  54000. return {
  54001. parent: target === document.body || options.body ? document.body : target,
  54002. background: options.background || "",
  54003. svg: options.svg || "",
  54004. svgViewBox: options.svgViewBox || "",
  54005. spinner: options.spinner || false,
  54006. text: options.text || "",
  54007. fullscreen: target === document.body && (options.fullscreen ?? true),
  54008. lock: options.lock ?? false,
  54009. customClass: options.customClass || "",
  54010. visible: options.visible ?? true,
  54011. beforeClose: options.beforeClose,
  54012. closed: options.closed,
  54013. target
  54014. };
  54015. };
  54016. const addStyle = async (options, parent, instance) => {
  54017. const { nextZIndex } = instance.vm.zIndex || instance.vm._.exposed.zIndex;
  54018. const maskStyle = {};
  54019. if (options.fullscreen) {
  54020. instance.originalPosition.value = getStyle(document.body, "position");
  54021. instance.originalOverflow.value = getStyle(document.body, "overflow");
  54022. maskStyle.zIndex = nextZIndex();
  54023. } else if (options.parent === document.body) {
  54024. instance.originalPosition.value = getStyle(document.body, "position");
  54025. await (0, vue.nextTick)();
  54026. for (const property of ["top", "left"]) {
  54027. const scroll = property === "top" ? "scrollTop" : "scrollLeft";
  54028. maskStyle[property] = `${options.target.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] - Number.parseInt(getStyle(document.body, `margin-${property}`), 10)}px`;
  54029. }
  54030. for (const property of ["height", "width"]) maskStyle[property] = `${options.target.getBoundingClientRect()[property]}px`;
  54031. } else instance.originalPosition.value = getStyle(parent, "position");
  54032. for (const [key, value] of Object.entries(maskStyle)) instance.$el.style[key] = value;
  54033. };
  54034. const addClassList = (options, parent, instance) => {
  54035. const ns = instance.vm.ns || instance.vm._.exposed.ns;
  54036. if (![
  54037. "absolute",
  54038. "fixed",
  54039. "sticky"
  54040. ].includes(instance.originalPosition.value)) addClass(parent, ns.bm("parent", "relative"));
  54041. else removeClass(parent, ns.bm("parent", "relative"));
  54042. if (options.fullscreen && options.lock) addClass(parent, ns.bm("parent", "hidden"));
  54043. else removeClass(parent, ns.bm("parent", "hidden"));
  54044. };
  54045. Loading._context = null;
  54046. //#endregion
  54047. //#region ../../packages/components/loading/src/directive.ts
  54048. const INSTANCE_KEY = Symbol("ElLoading");
  54049. const getAttributeName = (name) => {
  54050. return `element-loading-${hyphenate(name)}`;
  54051. };
  54052. const createInstance = (el, binding) => {
  54053. const vm = binding.instance;
  54054. const getBindingProp = (key) => isObject$1(binding.value) ? binding.value[key] : void 0;
  54055. const resolveExpression = (key) => {
  54056. return (0, vue.ref)(isString(key) && vm?.[key] || key);
  54057. };
  54058. const getProp = (name) => resolveExpression(getBindingProp(name) || el.getAttribute(getAttributeName(name)));
  54059. const fullscreen = getBindingProp("fullscreen") ?? binding.modifiers.fullscreen;
  54060. const options = {
  54061. text: getProp("text"),
  54062. svg: getProp("svg"),
  54063. svgViewBox: getProp("svgViewBox"),
  54064. spinner: getProp("spinner"),
  54065. background: getProp("background"),
  54066. customClass: getProp("customClass"),
  54067. fullscreen,
  54068. target: getBindingProp("target") ?? (fullscreen ? void 0 : el),
  54069. body: getBindingProp("body") ?? binding.modifiers.body,
  54070. lock: getBindingProp("lock") ?? binding.modifiers.lock
  54071. };
  54072. const instance = Loading(options);
  54073. instance._context = vLoading._context;
  54074. el[INSTANCE_KEY] = {
  54075. options,
  54076. instance
  54077. };
  54078. };
  54079. const updateOptions = (originalOptions, newOptions) => {
  54080. for (const key of Object.keys(originalOptions)) if ((0, vue.isRef)(originalOptions[key])) originalOptions[key].value = newOptions[key];
  54081. };
  54082. const vLoading = {
  54083. mounted(el, binding) {
  54084. if (binding.value) createInstance(el, binding);
  54085. },
  54086. updated(el, binding) {
  54087. const instance = el[INSTANCE_KEY];
  54088. if (!binding.value) {
  54089. instance?.instance.close();
  54090. el[INSTANCE_KEY] = null;
  54091. return;
  54092. }
  54093. if (!instance) createInstance(el, binding);
  54094. else updateOptions(instance.options, isObject$1(binding.value) ? binding.value : {
  54095. text: el.getAttribute(getAttributeName("text")),
  54096. svg: el.getAttribute(getAttributeName("svg")),
  54097. svgViewBox: el.getAttribute(getAttributeName("svgViewBox")),
  54098. spinner: el.getAttribute(getAttributeName("spinner")),
  54099. background: el.getAttribute(getAttributeName("background")),
  54100. customClass: el.getAttribute(getAttributeName("customClass"))
  54101. });
  54102. },
  54103. unmounted(el) {
  54104. el[INSTANCE_KEY]?.instance.close();
  54105. el[INSTANCE_KEY] = null;
  54106. }
  54107. };
  54108. vLoading._context = null;
  54109. //#endregion
  54110. //#region ../../packages/components/loading/index.ts
  54111. const ElLoading = {
  54112. install(app) {
  54113. Loading._context = app._context;
  54114. vLoading._context = app._context;
  54115. app.directive("loading", vLoading);
  54116. app.config.globalProperties.$loading = Loading;
  54117. },
  54118. directive: vLoading,
  54119. service: Loading
  54120. };
  54121. //#endregion
  54122. //#region ../../packages/components/message/src/message.ts
  54123. const messageTypes = [
  54124. "primary",
  54125. "success",
  54126. "info",
  54127. "warning",
  54128. "error"
  54129. ];
  54130. const messagePlacement = [
  54131. "top",
  54132. "top-left",
  54133. "top-right",
  54134. "bottom",
  54135. "bottom-left",
  54136. "bottom-right"
  54137. ];
  54138. const MESSAGE_DEFAULT_PLACEMENT = "top";
  54139. const messageDefaults = mutable({
  54140. customClass: "",
  54141. dangerouslyUseHTMLString: false,
  54142. duration: 3e3,
  54143. icon: void 0,
  54144. id: "",
  54145. message: "",
  54146. onClose: void 0,
  54147. showClose: false,
  54148. type: "info",
  54149. plain: false,
  54150. offset: 16,
  54151. placement: void 0,
  54152. zIndex: 0,
  54153. grouping: false,
  54154. repeatNum: 1,
  54155. appendTo: isClient ? document.body : void 0
  54156. });
  54157. const messageProps = buildProps({
  54158. customClass: {
  54159. type: String,
  54160. default: messageDefaults.customClass
  54161. },
  54162. dangerouslyUseHTMLString: {
  54163. type: Boolean,
  54164. default: messageDefaults.dangerouslyUseHTMLString
  54165. },
  54166. duration: {
  54167. type: Number,
  54168. default: messageDefaults.duration
  54169. },
  54170. icon: {
  54171. type: iconPropType,
  54172. default: messageDefaults.icon
  54173. },
  54174. id: {
  54175. type: String,
  54176. default: messageDefaults.id
  54177. },
  54178. message: {
  54179. type: definePropType([
  54180. String,
  54181. Object,
  54182. Function
  54183. ]),
  54184. default: messageDefaults.message
  54185. },
  54186. onClose: {
  54187. type: definePropType(Function),
  54188. default: messageDefaults.onClose
  54189. },
  54190. showClose: {
  54191. type: Boolean,
  54192. default: messageDefaults.showClose
  54193. },
  54194. type: {
  54195. type: String,
  54196. values: messageTypes,
  54197. default: messageDefaults.type
  54198. },
  54199. plain: {
  54200. type: Boolean,
  54201. default: messageDefaults.plain
  54202. },
  54203. offset: {
  54204. type: Number,
  54205. default: messageDefaults.offset
  54206. },
  54207. placement: {
  54208. type: String,
  54209. values: messagePlacement,
  54210. default: messageDefaults.placement
  54211. },
  54212. zIndex: {
  54213. type: Number,
  54214. default: messageDefaults.zIndex
  54215. },
  54216. grouping: {
  54217. type: Boolean,
  54218. default: messageDefaults.grouping
  54219. },
  54220. repeatNum: {
  54221. type: Number,
  54222. default: messageDefaults.repeatNum
  54223. }
  54224. });
  54225. const messageEmits = { destroy: () => true };
  54226. //#endregion
  54227. //#region ../../packages/components/message/src/instance.ts
  54228. const placementInstances = (0, vue.shallowReactive)({});
  54229. const getOrCreatePlacementInstances = (placement) => {
  54230. if (!placementInstances[placement]) placementInstances[placement] = (0, vue.shallowReactive)([]);
  54231. return placementInstances[placement];
  54232. };
  54233. const getInstance = (id, placement) => {
  54234. const instances = placementInstances[placement] || [];
  54235. const idx = instances.findIndex((instance) => instance.id === id);
  54236. const current = instances[idx];
  54237. let prev;
  54238. if (idx > 0) prev = instances[idx - 1];
  54239. return {
  54240. current,
  54241. prev
  54242. };
  54243. };
  54244. const getLastOffset = (id, placement) => {
  54245. const { prev } = getInstance(id, placement);
  54246. if (!prev) return 0;
  54247. return prev.vm.exposed.bottom.value;
  54248. };
  54249. const getOffsetOrSpace = (id, offset, placement) => {
  54250. return (placementInstances[placement] || []).findIndex((instance) => instance.id === id) > 0 ? 16 : offset;
  54251. };
  54252. //#endregion
  54253. //#region ../../packages/components/message/src/message.vue?vue&type=script&setup=true&lang.ts
  54254. const _hoisted_1$2 = ["id"];
  54255. const _hoisted_2$2 = ["innerHTML"];
  54256. var message_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  54257. name: "ElMessage",
  54258. __name: "message",
  54259. props: messageProps,
  54260. emits: messageEmits,
  54261. setup(__props, { expose: __expose, emit: __emit }) {
  54262. const { Close } = TypeComponents;
  54263. const props = __props;
  54264. const emit = __emit;
  54265. const isStartTransition = (0, vue.ref)(false);
  54266. const { ns, zIndex } = useGlobalComponentSettings("message");
  54267. const { currentZIndex, nextZIndex } = zIndex;
  54268. const messageRef = (0, vue.ref)();
  54269. const visible = (0, vue.ref)(false);
  54270. const height = (0, vue.ref)(0);
  54271. let stopTimer = void 0;
  54272. const badgeType = (0, vue.computed)(() => props.type ? props.type === "error" ? "danger" : props.type : "info");
  54273. const typeClass = (0, vue.computed)(() => {
  54274. const type = props.type;
  54275. return { [ns.bm("icon", type)]: type && TypeComponentsMap[type] };
  54276. });
  54277. const iconComponent = (0, vue.computed)(() => props.icon || TypeComponentsMap[props.type] || "");
  54278. const placement = (0, vue.computed)(() => props.placement || "top");
  54279. const lastOffset = (0, vue.computed)(() => getLastOffset(props.id, placement.value));
  54280. const offset = (0, vue.computed)(() => {
  54281. return Math.max(getOffsetOrSpace(props.id, props.offset, placement.value) + lastOffset.value, props.offset);
  54282. });
  54283. const bottom = (0, vue.computed)(() => height.value + offset.value);
  54284. const horizontalClass = (0, vue.computed)(() => {
  54285. if (placement.value.includes("left")) return ns.is("left");
  54286. if (placement.value.includes("right")) return ns.is("right");
  54287. return ns.is("center");
  54288. });
  54289. const verticalProperty = (0, vue.computed)(() => placement.value.startsWith("top") ? "top" : "bottom");
  54290. const customStyle = (0, vue.computed)(() => ({
  54291. [verticalProperty.value]: `${offset.value}px`,
  54292. zIndex: currentZIndex.value
  54293. }));
  54294. function startTimer() {
  54295. if (props.duration === 0) return;
  54296. ({stop: stopTimer} = useTimeoutFn(() => {
  54297. close();
  54298. }, props.duration));
  54299. }
  54300. function clearTimer() {
  54301. stopTimer?.();
  54302. }
  54303. function close() {
  54304. visible.value = false;
  54305. (0, vue.nextTick)(() => {
  54306. if (!isStartTransition.value) {
  54307. props.onClose?.();
  54308. emit("destroy");
  54309. }
  54310. });
  54311. }
  54312. function keydown(event) {
  54313. if (getEventCode(event) === EVENT_CODE.esc) close();
  54314. }
  54315. (0, vue.onMounted)(() => {
  54316. startTimer();
  54317. nextZIndex();
  54318. visible.value = true;
  54319. });
  54320. (0, vue.watch)(() => props.repeatNum, () => {
  54321. clearTimer();
  54322. startTimer();
  54323. });
  54324. useEventListener(document, "keydown", keydown);
  54325. useResizeObserver(messageRef, () => {
  54326. height.value = messageRef.value.getBoundingClientRect().height;
  54327. });
  54328. __expose({
  54329. visible,
  54330. bottom,
  54331. close
  54332. });
  54333. return (_ctx, _cache) => {
  54334. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
  54335. name: (0, vue.unref)(ns).b("fade"),
  54336. onBeforeEnter: _cache[0] || (_cache[0] = ($event) => isStartTransition.value = true),
  54337. onBeforeLeave: __props.onClose,
  54338. onAfterLeave: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("destroy")),
  54339. persisted: ""
  54340. }, {
  54341. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
  54342. id: __props.id,
  54343. ref_key: "messageRef",
  54344. ref: messageRef,
  54345. class: (0, vue.normalizeClass)([
  54346. (0, vue.unref)(ns).b(),
  54347. { [(0, vue.unref)(ns).m(__props.type)]: __props.type },
  54348. (0, vue.unref)(ns).is("closable", __props.showClose),
  54349. (0, vue.unref)(ns).is("plain", __props.plain),
  54350. (0, vue.unref)(ns).is("bottom", verticalProperty.value === "bottom"),
  54351. horizontalClass.value,
  54352. __props.customClass
  54353. ]),
  54354. style: (0, vue.normalizeStyle)(customStyle.value),
  54355. role: "alert",
  54356. onMouseenter: clearTimer,
  54357. onMouseleave: startTimer
  54358. }, [
  54359. __props.repeatNum > 1 ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElBadge), {
  54360. key: 0,
  54361. value: __props.repeatNum,
  54362. type: badgeType.value,
  54363. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("badge"))
  54364. }, null, 8, [
  54365. "value",
  54366. "type",
  54367. "class"
  54368. ])) : (0, vue.createCommentVNode)("v-if", true),
  54369. iconComponent.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  54370. key: 1,
  54371. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), typeClass.value])
  54372. }, {
  54373. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(iconComponent.value)))]),
  54374. _: 1
  54375. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true),
  54376. !__props.dangerouslyUseHTMLString || _ctx.$slots.default ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", {
  54377. key: 2,
  54378. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content"))
  54379. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(__props.message), 1)])], 2)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 3 }, [(0, vue.createCommentVNode)(" Caution here, message could've been compromised, never use user's input as message "), (0, vue.createElementVNode)("p", {
  54380. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")),
  54381. innerHTML: __props.message
  54382. }, null, 10, _hoisted_2$2)], 2112)),
  54383. __props.showClose ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  54384. key: 4,
  54385. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("closeBtn")),
  54386. onClick: (0, vue.withModifiers)(close, ["stop"])
  54387. }, {
  54388. default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(Close))]),
  54389. _: 1
  54390. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
  54391. ], 46, _hoisted_1$2), [[vue.vShow, visible.value]])]),
  54392. _: 3
  54393. }, 8, ["name", "onBeforeLeave"]);
  54394. };
  54395. }
  54396. });
  54397. //#endregion
  54398. //#region ../../packages/components/message/src/message.vue
  54399. var message_default = message_vue_vue_type_script_setup_true_lang_default;
  54400. //#endregion
  54401. //#region ../../packages/components/message/src/method.ts
  54402. let seed$1 = 1;
  54403. const normalizeAppendTo = (normalized) => {
  54404. if (!normalized.appendTo) normalized.appendTo = document.body;
  54405. else if (isString(normalized.appendTo)) {
  54406. let appendTo = document.querySelector(normalized.appendTo);
  54407. if (!isElement$1(appendTo)) {
  54408. /* @__PURE__ */ debugWarn("ElMessage", "the appendTo option is not an HTMLElement. Falling back to document.body.");
  54409. appendTo = document.body;
  54410. }
  54411. normalized.appendTo = appendTo;
  54412. }
  54413. };
  54414. const normalizePlacement = (normalized) => {
  54415. if (!normalized.placement && isString(messageConfig.placement) && messageConfig.placement) normalized.placement = messageConfig.placement;
  54416. if (!normalized.placement) normalized.placement = "top";
  54417. if (!messagePlacement.includes(normalized.placement)) {
  54418. /* @__PURE__ */ debugWarn("ElMessage", `Invalid placement: ${normalized.placement}. Falling back to '${"top"}'.`);
  54419. normalized.placement = "top";
  54420. }
  54421. };
  54422. const normalizeOptions = (params) => {
  54423. const options = !params || isString(params) || (0, vue.isVNode)(params) || isFunction$1(params) ? { message: params } : params;
  54424. const normalized = {
  54425. ...messageDefaults,
  54426. ...options
  54427. };
  54428. normalizeAppendTo(normalized);
  54429. normalizePlacement(normalized);
  54430. if (isBoolean(messageConfig.grouping) && !normalized.grouping) normalized.grouping = messageConfig.grouping;
  54431. if (isNumber(messageConfig.duration) && normalized.duration === 3e3) normalized.duration = messageConfig.duration;
  54432. if (isNumber(messageConfig.offset) && normalized.offset === 16) normalized.offset = messageConfig.offset;
  54433. if (isBoolean(messageConfig.showClose) && !normalized.showClose) normalized.showClose = messageConfig.showClose;
  54434. if (isBoolean(messageConfig.plain) && !normalized.plain) normalized.plain = messageConfig.plain;
  54435. return normalized;
  54436. };
  54437. const closeMessage = (instance) => {
  54438. const instances = placementInstances[instance.props.placement || "top"];
  54439. const idx = instances.indexOf(instance);
  54440. if (idx === -1) return;
  54441. instances.splice(idx, 1);
  54442. const { handler } = instance;
  54443. handler.close();
  54444. };
  54445. const createMessage = ({ appendTo, ...options }, context) => {
  54446. const id = `message_${seed$1++}`;
  54447. const userOnClose = options.onClose;
  54448. const container = document.createElement("div");
  54449. const props = {
  54450. ...options,
  54451. id,
  54452. onClose: () => {
  54453. userOnClose?.();
  54454. closeMessage(instance);
  54455. },
  54456. onDestroy: () => {
  54457. (0, vue.render)(null, container);
  54458. }
  54459. };
  54460. const vnode = (0, vue.createVNode)(message_default, props, isFunction$1(props.message) || (0, vue.isVNode)(props.message) ? { default: isFunction$1(props.message) ? props.message : () => props.message } : null);
  54461. vnode.appContext = context || message._context;
  54462. (0, vue.render)(vnode, container);
  54463. appendTo.appendChild(container.firstElementChild);
  54464. const vm = vnode.component;
  54465. const instance = {
  54466. id,
  54467. vnode,
  54468. vm,
  54469. handler: { close: () => {
  54470. vm.exposed.close();
  54471. } },
  54472. props: vnode.component.props
  54473. };
  54474. return instance;
  54475. };
  54476. const message = (options = {}, context) => {
  54477. if (!isClient) return { close: () => void 0 };
  54478. const normalized = normalizeOptions(options);
  54479. const instances = getOrCreatePlacementInstances(normalized.placement || "top");
  54480. if (normalized.grouping && instances.length) {
  54481. const instance = instances.find(({ vnode: vm }) => vm.props?.message === normalized.message);
  54482. if (instance) {
  54483. instance.props.repeatNum += 1;
  54484. instance.props.type = normalized.type;
  54485. return instance.handler;
  54486. }
  54487. }
  54488. if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) return { close: () => void 0 };
  54489. const instance = createMessage(normalized, context);
  54490. instances.push(instance);
  54491. return instance.handler;
  54492. };
  54493. messageTypes.forEach((type) => {
  54494. message[type] = (options = {}, appContext) => {
  54495. return message({
  54496. ...normalizeOptions(options),
  54497. type
  54498. }, appContext);
  54499. };
  54500. });
  54501. function closeAll$1(type) {
  54502. for (const placement in placementInstances) if (hasOwn(placementInstances, placement)) {
  54503. const instances = [...placementInstances[placement]];
  54504. for (const instance of instances) if (!type || type === instance.props.type) instance.handler.close();
  54505. }
  54506. }
  54507. function closeAllByPlacement(placement) {
  54508. if (!placementInstances[placement]) return;
  54509. [...placementInstances[placement]].forEach((instance) => instance.handler.close());
  54510. }
  54511. message.closeAll = closeAll$1;
  54512. message.closeAllByPlacement = closeAllByPlacement;
  54513. message._context = null;
  54514. //#endregion
  54515. //#region ../../packages/components/message/index.ts
  54516. const ElMessage = withInstallFunction(message, "$message");
  54517. //#endregion
  54518. //#region ../../packages/components/message-box/src/index.vue?vue&type=script&lang.ts
  54519. var index_vue_vue_type_script_lang_default = (0, vue.defineComponent)({
  54520. name: "ElMessageBox",
  54521. directives: { TrapFocus },
  54522. components: {
  54523. ElButton,
  54524. ElFocusTrap: focus_trap_default,
  54525. ElInput,
  54526. ElOverlay,
  54527. ElIcon,
  54528. ...TypeComponents
  54529. },
  54530. inheritAttrs: false,
  54531. props: {
  54532. buttonSize: {
  54533. type: String,
  54534. validator: isValidComponentSize
  54535. },
  54536. modal: {
  54537. type: Boolean,
  54538. default: true
  54539. },
  54540. lockScroll: {
  54541. type: Boolean,
  54542. default: true
  54543. },
  54544. showClose: {
  54545. type: Boolean,
  54546. default: true
  54547. },
  54548. closeOnClickModal: {
  54549. type: Boolean,
  54550. default: true
  54551. },
  54552. closeOnPressEscape: {
  54553. type: Boolean,
  54554. default: true
  54555. },
  54556. closeOnHashChange: {
  54557. type: Boolean,
  54558. default: true
  54559. },
  54560. center: Boolean,
  54561. draggable: Boolean,
  54562. overflow: Boolean,
  54563. roundButton: Boolean,
  54564. container: {
  54565. type: String,
  54566. default: "body"
  54567. },
  54568. boxType: {
  54569. type: String,
  54570. default: ""
  54571. }
  54572. },
  54573. emits: ["vanish", "action"],
  54574. setup(props, { emit }) {
  54575. const { locale, zIndex, ns, size: btnSize } = useGlobalComponentSettings("message-box", (0, vue.computed)(() => props.buttonSize));
  54576. const { t } = locale;
  54577. const { nextZIndex } = zIndex;
  54578. const visible = (0, vue.ref)(false);
  54579. const state = (0, vue.reactive)({
  54580. autofocus: true,
  54581. beforeClose: null,
  54582. callback: null,
  54583. cancelButtonText: "",
  54584. cancelButtonClass: "",
  54585. confirmButtonText: "",
  54586. confirmButtonClass: "",
  54587. cancelButtonType: "",
  54588. confirmButtonType: "primary",
  54589. customClass: "",
  54590. customStyle: {},
  54591. dangerouslyUseHTMLString: false,
  54592. distinguishCancelAndClose: false,
  54593. icon: "",
  54594. closeIcon: "",
  54595. inputPattern: null,
  54596. inputPlaceholder: "",
  54597. inputType: "text",
  54598. inputValue: "",
  54599. inputValidator: void 0,
  54600. inputErrorMessage: "",
  54601. message: "",
  54602. modalFade: true,
  54603. modalClass: "",
  54604. showCancelButton: false,
  54605. showConfirmButton: true,
  54606. type: "",
  54607. title: void 0,
  54608. showInput: false,
  54609. action: "",
  54610. confirmButtonLoading: false,
  54611. cancelButtonLoading: false,
  54612. confirmButtonLoadingIcon: (0, vue.markRaw)(loading_default),
  54613. cancelButtonLoadingIcon: (0, vue.markRaw)(loading_default),
  54614. confirmButtonDisabled: false,
  54615. editorErrorMessage: "",
  54616. validateError: false,
  54617. zIndex: nextZIndex()
  54618. });
  54619. const typeClass = (0, vue.computed)(() => {
  54620. const type = state.type;
  54621. return { [ns.bm("icon", type)]: type && TypeComponentsMap[type] };
  54622. });
  54623. const contentId = useId();
  54624. const inputId = useId();
  54625. const iconComponent = (0, vue.computed)(() => {
  54626. const type = state.type;
  54627. return state.icon || type && TypeComponentsMap[type] || "";
  54628. });
  54629. const hasMessage = (0, vue.computed)(() => !!state.message);
  54630. const rootRef = (0, vue.ref)();
  54631. const headerRef = (0, vue.ref)();
  54632. const focusStartRef = (0, vue.ref)();
  54633. const inputRef = (0, vue.ref)();
  54634. const confirmRef = (0, vue.ref)();
  54635. const confirmButtonClasses = (0, vue.computed)(() => state.confirmButtonClass);
  54636. (0, vue.watch)(() => state.inputValue, async (val) => {
  54637. await (0, vue.nextTick)();
  54638. if (props.boxType === "prompt" && val) validate();
  54639. }, { immediate: true });
  54640. (0, vue.watch)(() => visible.value, (val) => {
  54641. if (val) {
  54642. if (props.boxType !== "prompt") if (state.autofocus) focusStartRef.value = confirmRef.value?.$el ?? rootRef.value;
  54643. else focusStartRef.value = rootRef.value;
  54644. state.zIndex = nextZIndex();
  54645. }
  54646. if (props.boxType !== "prompt") return;
  54647. if (val) (0, vue.nextTick)().then(() => {
  54648. if (inputRef.value && inputRef.value.$el) if (state.autofocus) focusStartRef.value = getInputElement() ?? rootRef.value;
  54649. else focusStartRef.value = rootRef.value;
  54650. });
  54651. else {
  54652. state.editorErrorMessage = "";
  54653. state.validateError = false;
  54654. }
  54655. });
  54656. const { isDragging } = useDraggable(rootRef, headerRef, (0, vue.computed)(() => props.draggable), (0, vue.computed)(() => props.overflow));
  54657. (0, vue.onMounted)(async () => {
  54658. await (0, vue.nextTick)();
  54659. if (props.closeOnHashChange) window.addEventListener("hashchange", doClose);
  54660. });
  54661. (0, vue.onBeforeUnmount)(() => {
  54662. if (props.closeOnHashChange) window.removeEventListener("hashchange", doClose);
  54663. });
  54664. function doClose() {
  54665. if (!visible.value) return;
  54666. visible.value = false;
  54667. (0, vue.nextTick)(() => {
  54668. if (state.action) emit("action", state.action);
  54669. });
  54670. }
  54671. const handleWrapperClick = () => {
  54672. if (props.closeOnClickModal) handleAction(state.distinguishCancelAndClose ? "close" : "cancel");
  54673. };
  54674. const overlayEvent = useSameTarget(handleWrapperClick);
  54675. const handleInputEnter = (e) => {
  54676. if (state.inputType !== "textarea" && !inputRef.value?.isComposing) {
  54677. e.preventDefault();
  54678. return handleAction("confirm");
  54679. }
  54680. };
  54681. const handleAction = (action) => {
  54682. if (props.boxType === "prompt" && action === "confirm" && !validate()) return;
  54683. state.action = action;
  54684. if (state.beforeClose) state.beforeClose?.(action, state, doClose);
  54685. else doClose();
  54686. };
  54687. const validate = () => {
  54688. if (props.boxType === "prompt") {
  54689. const inputPattern = state.inputPattern;
  54690. if (inputPattern && !inputPattern.test(state.inputValue || "")) {
  54691. state.editorErrorMessage = state.inputErrorMessage || t("el.messagebox.error");
  54692. state.validateError = true;
  54693. return false;
  54694. }
  54695. const inputValidator = state.inputValidator;
  54696. if (isFunction$1(inputValidator)) {
  54697. const validateResult = inputValidator(state.inputValue);
  54698. if (validateResult === false) {
  54699. state.editorErrorMessage = state.inputErrorMessage || t("el.messagebox.error");
  54700. state.validateError = true;
  54701. return false;
  54702. }
  54703. if (isString(validateResult)) {
  54704. state.editorErrorMessage = validateResult;
  54705. state.validateError = true;
  54706. return false;
  54707. }
  54708. }
  54709. }
  54710. state.editorErrorMessage = "";
  54711. state.validateError = false;
  54712. return true;
  54713. };
  54714. const getInputElement = () => {
  54715. const inputRefs = inputRef.value?.$refs;
  54716. return inputRefs?.input ?? inputRefs?.textarea;
  54717. };
  54718. const handleClose = () => {
  54719. handleAction("close");
  54720. };
  54721. const onCloseRequested = () => {
  54722. if (props.closeOnPressEscape) handleClose();
  54723. };
  54724. if (props.lockScroll) useLockscreen(visible, { ns });
  54725. return {
  54726. ...(0, vue.toRefs)(state),
  54727. ns,
  54728. overlayEvent,
  54729. visible,
  54730. hasMessage,
  54731. typeClass,
  54732. contentId,
  54733. inputId,
  54734. btnSize,
  54735. iconComponent,
  54736. confirmButtonClasses,
  54737. rootRef,
  54738. focusStartRef,
  54739. headerRef,
  54740. inputRef,
  54741. isDragging,
  54742. confirmRef,
  54743. doClose,
  54744. handleClose,
  54745. onCloseRequested,
  54746. handleWrapperClick,
  54747. handleInputEnter,
  54748. handleAction,
  54749. t
  54750. };
  54751. }
  54752. });
  54753. //#endregion
  54754. //#region ../../packages/components/message-box/src/index.vue
  54755. const _hoisted_1$1 = ["aria-label", "aria-describedby"];
  54756. const _hoisted_2$1 = ["aria-label"];
  54757. const _hoisted_3$1 = ["id"];
  54758. function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
  54759. const _component_el_icon = (0, vue.resolveComponent)("el-icon");
  54760. const _component_el_input = (0, vue.resolveComponent)("el-input");
  54761. const _component_el_button = (0, vue.resolveComponent)("el-button");
  54762. const _component_el_focus_trap = (0, vue.resolveComponent)("el-focus-trap");
  54763. const _component_el_overlay = (0, vue.resolveComponent)("el-overlay");
  54764. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
  54765. name: "fade-in-linear",
  54766. onAfterLeave: _cache[11] || (_cache[11] = ($event) => _ctx.$emit("vanish")),
  54767. persisted: ""
  54768. }, {
  54769. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createVNode)(_component_el_overlay, {
  54770. "z-index": _ctx.zIndex,
  54771. "overlay-class": [_ctx.ns.is("message-box"), _ctx.modalClass],
  54772. mask: _ctx.modal
  54773. }, {
  54774. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  54775. role: "dialog",
  54776. "aria-label": _ctx.title,
  54777. "aria-modal": "true",
  54778. "aria-describedby": !_ctx.showInput ? _ctx.contentId : void 0,
  54779. class: (0, vue.normalizeClass)(`${_ctx.ns.namespace.value}-overlay-message-box`),
  54780. onClick: _cache[8] || (_cache[8] = (...args) => _ctx.overlayEvent.onClick && _ctx.overlayEvent.onClick(...args)),
  54781. onMousedown: _cache[9] || (_cache[9] = (...args) => _ctx.overlayEvent.onMousedown && _ctx.overlayEvent.onMousedown(...args)),
  54782. onMouseup: _cache[10] || (_cache[10] = (...args) => _ctx.overlayEvent.onMouseup && _ctx.overlayEvent.onMouseup(...args))
  54783. }, [(0, vue.createVNode)(_component_el_focus_trap, {
  54784. loop: "",
  54785. trapped: _ctx.visible,
  54786. "focus-trap-el": _ctx.rootRef,
  54787. "focus-start-el": _ctx.focusStartRef,
  54788. onReleaseRequested: _ctx.onCloseRequested
  54789. }, {
  54790. default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", {
  54791. ref: "rootRef",
  54792. class: (0, vue.normalizeClass)([
  54793. _ctx.ns.b(),
  54794. _ctx.customClass,
  54795. _ctx.ns.is("draggable", _ctx.draggable),
  54796. _ctx.ns.is("dragging", _ctx.isDragging),
  54797. { [_ctx.ns.m("center")]: _ctx.center }
  54798. ]),
  54799. style: (0, vue.normalizeStyle)(_ctx.customStyle),
  54800. tabindex: "-1",
  54801. onClick: _cache[7] || (_cache[7] = (0, vue.withModifiers)(() => {}, ["stop"]))
  54802. }, [
  54803. _ctx.title !== null && _ctx.title !== void 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  54804. key: 0,
  54805. ref: "headerRef",
  54806. class: (0, vue.normalizeClass)([_ctx.ns.e("header"), { "show-close": _ctx.showClose }])
  54807. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("title")) }, [_ctx.iconComponent && _ctx.center ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  54808. key: 0,
  54809. class: (0, vue.normalizeClass)([_ctx.ns.e("status"), _ctx.typeClass])
  54810. }, {
  54811. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.iconComponent)))]),
  54812. _: 1
  54813. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(_ctx.title), 1)], 2), _ctx.showClose ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
  54814. key: 0,
  54815. type: "button",
  54816. class: (0, vue.normalizeClass)(_ctx.ns.e("headerbtn")),
  54817. "aria-label": _ctx.t("el.messagebox.close"),
  54818. onClick: _cache[0] || (_cache[0] = ($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? "close" : "cancel")),
  54819. onKeydown: _cache[1] || (_cache[1] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? "close" : "cancel"), ["prevent"]), ["enter"]))
  54820. }, [(0, vue.createVNode)(_component_el_icon, { class: (0, vue.normalizeClass)(_ctx.ns.e("close")) }, {
  54821. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.closeIcon || "close")))]),
  54822. _: 1
  54823. }, 8, ["class"])], 42, _hoisted_2$1)) : (0, vue.createCommentVNode)("v-if", true)], 2)) : (0, vue.createCommentVNode)("v-if", true),
  54824. (0, vue.createElementVNode)("div", {
  54825. id: _ctx.contentId,
  54826. class: (0, vue.normalizeClass)(_ctx.ns.e("content"))
  54827. }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("container")) }, [_ctx.iconComponent && !_ctx.center && _ctx.hasMessage ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_icon, {
  54828. key: 0,
  54829. class: (0, vue.normalizeClass)([_ctx.ns.e("status"), _ctx.typeClass])
  54830. }, {
  54831. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.iconComponent)))]),
  54832. _: 1
  54833. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), _ctx.hasMessage ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  54834. key: 1,
  54835. class: (0, vue.normalizeClass)(_ctx.ns.e("message"))
  54836. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [!_ctx.dangerouslyUseHTMLString ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.showInput ? "label" : "p"), {
  54837. key: 0,
  54838. for: _ctx.showInput ? _ctx.inputId : void 0,
  54839. textContent: (0, vue.toDisplayString)(_ctx.message)
  54840. }, null, 8, ["for", "textContent"])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(_ctx.showInput ? "label" : "p"), {
  54841. key: 1,
  54842. for: _ctx.showInput ? _ctx.inputId : void 0,
  54843. innerHTML: _ctx.message
  54844. }, null, 8, ["for", "innerHTML"]))])], 2)) : (0, vue.createCommentVNode)("v-if", true)], 2), (0, vue.withDirectives)((0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(_ctx.ns.e("input")) }, [(0, vue.createVNode)(_component_el_input, {
  54845. id: _ctx.inputId,
  54846. ref: "inputRef",
  54847. modelValue: _ctx.inputValue,
  54848. "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => _ctx.inputValue = $event),
  54849. type: _ctx.inputType,
  54850. placeholder: _ctx.inputPlaceholder,
  54851. "aria-invalid": _ctx.validateError,
  54852. class: (0, vue.normalizeClass)({ invalid: _ctx.validateError }),
  54853. onKeydown: (0, vue.withKeys)(_ctx.handleInputEnter, ["enter"])
  54854. }, null, 8, [
  54855. "id",
  54856. "modelValue",
  54857. "type",
  54858. "placeholder",
  54859. "aria-invalid",
  54860. "class",
  54861. "onKeydown"
  54862. ]), (0, vue.createElementVNode)("div", {
  54863. class: (0, vue.normalizeClass)(_ctx.ns.e("errormsg")),
  54864. style: (0, vue.normalizeStyle)({ visibility: !!_ctx.editorErrorMessage ? "visible" : "hidden" })
  54865. }, (0, vue.toDisplayString)(_ctx.editorErrorMessage), 7)], 2), [[vue.vShow, _ctx.showInput]])], 10, _hoisted_3$1),
  54866. _ctx.showCancelButton || _ctx.showConfirmButton ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
  54867. key: 1,
  54868. class: (0, vue.normalizeClass)(_ctx.ns.e("btns"))
  54869. }, [_ctx.showCancelButton ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_el_button, {
  54870. key: 0,
  54871. type: _ctx.cancelButtonType === "text" ? "" : _ctx.cancelButtonType,
  54872. text: _ctx.cancelButtonType === "text",
  54873. loading: _ctx.cancelButtonLoading,
  54874. "loading-icon": _ctx.cancelButtonLoadingIcon,
  54875. class: (0, vue.normalizeClass)([_ctx.cancelButtonClass]),
  54876. round: _ctx.roundButton,
  54877. size: _ctx.btnSize,
  54878. onClick: _cache[3] || (_cache[3] = ($event) => _ctx.handleAction("cancel")),
  54879. onKeydown: _cache[4] || (_cache[4] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.handleAction("cancel"), ["prevent"]), ["enter"]))
  54880. }, {
  54881. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(_ctx.cancelButtonText || _ctx.t("el.messagebox.cancel")), 1)]),
  54882. _: 1
  54883. }, 8, [
  54884. "type",
  54885. "text",
  54886. "loading",
  54887. "loading-icon",
  54888. "class",
  54889. "round",
  54890. "size"
  54891. ])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.withDirectives)((0, vue.createVNode)(_component_el_button, {
  54892. ref: "confirmRef",
  54893. type: _ctx.confirmButtonType === "text" ? "" : _ctx.confirmButtonType,
  54894. text: _ctx.confirmButtonType === "text",
  54895. loading: _ctx.confirmButtonLoading,
  54896. "loading-icon": _ctx.confirmButtonLoadingIcon,
  54897. class: (0, vue.normalizeClass)([_ctx.confirmButtonClasses]),
  54898. round: _ctx.roundButton,
  54899. disabled: _ctx.confirmButtonDisabled,
  54900. size: _ctx.btnSize,
  54901. onClick: _cache[5] || (_cache[5] = ($event) => _ctx.handleAction("confirm")),
  54902. onKeydown: _cache[6] || (_cache[6] = (0, vue.withKeys)((0, vue.withModifiers)(($event) => _ctx.handleAction("confirm"), ["prevent"]), ["enter"]))
  54903. }, {
  54904. default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(_ctx.confirmButtonText || _ctx.t("el.messagebox.confirm")), 1)]),
  54905. _: 1
  54906. }, 8, [
  54907. "type",
  54908. "text",
  54909. "loading",
  54910. "loading-icon",
  54911. "class",
  54912. "round",
  54913. "disabled",
  54914. "size"
  54915. ]), [[vue.vShow, _ctx.showConfirmButton]])], 2)) : (0, vue.createCommentVNode)("v-if", true)
  54916. ], 6)]),
  54917. _: 3
  54918. }, 8, [
  54919. "trapped",
  54920. "focus-trap-el",
  54921. "focus-start-el",
  54922. "onReleaseRequested"
  54923. ])], 42, _hoisted_1$1)]),
  54924. _: 3
  54925. }, 8, [
  54926. "z-index",
  54927. "overlay-class",
  54928. "mask"
  54929. ]), [[vue.vShow, _ctx.visible]])]),
  54930. _: 3
  54931. });
  54932. }
  54933. var src_default = /* @__PURE__ */ _plugin_vue_export_helper_default(index_vue_vue_type_script_lang_default, [["render", _sfc_render]]);
  54934. //#endregion
  54935. //#region ../../packages/components/message-box/src/messageBox.ts
  54936. const messageInstance = /* @__PURE__ */ new Map();
  54937. const getAppendToElement = (props) => {
  54938. let appendTo = document.body;
  54939. if (props.appendTo) {
  54940. if (isString(props.appendTo)) appendTo = document.querySelector(props.appendTo);
  54941. if (isElement$1(props.appendTo)) appendTo = props.appendTo;
  54942. if (!isElement$1(appendTo)) {
  54943. /* @__PURE__ */ debugWarn("ElMessageBox", "the appendTo option is not an HTMLElement. Falling back to document.body.");
  54944. appendTo = document.body;
  54945. }
  54946. }
  54947. return appendTo;
  54948. };
  54949. const handleAction = (vnode, action) => {
  54950. const vm = vnode.component?.proxy;
  54951. return () => vm.handleAction(action);
  54952. };
  54953. const initInstance = (props, container, appContext = null) => {
  54954. const vnode = (0, vue.createVNode)(src_default, props, isFunction$1(props.message) || (0, vue.isVNode)(props.message) ? { default: isFunction$1(props.message) ? () => props.message({
  54955. confirm: handleAction(vnode, "confirm"),
  54956. cancel: handleAction(vnode, "cancel"),
  54957. close: handleAction(vnode, "close")
  54958. }) : () => props.message } : null);
  54959. vnode.appContext = appContext;
  54960. (0, vue.render)(vnode, container);
  54961. getAppendToElement(props).appendChild(container.firstElementChild);
  54962. return vnode.component;
  54963. };
  54964. const genContainer = () => {
  54965. return document.createElement("div");
  54966. };
  54967. const showMessage = (options, appContext) => {
  54968. const container = genContainer();
  54969. options.onVanish = () => {
  54970. (0, vue.render)(null, container);
  54971. messageInstance.delete(vm);
  54972. };
  54973. options.onAction = (action) => {
  54974. const currentMsg = messageInstance.get(vm);
  54975. let resolve;
  54976. if (options.showInput) resolve = {
  54977. value: vm.inputValue,
  54978. action
  54979. };
  54980. else resolve = action;
  54981. if (options.callback) options.callback(resolve, instance.proxy);
  54982. else if (action === "cancel" || action === "close") if (options.distinguishCancelAndClose && action !== "cancel") currentMsg.reject("close");
  54983. else currentMsg.reject("cancel");
  54984. else currentMsg.resolve(resolve);
  54985. };
  54986. const instance = initInstance(options, container, appContext);
  54987. const vm = instance.proxy;
  54988. for (const prop in options) if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) if (prop === "closeIcon" && isObject$1(options[prop])) vm[prop] = (0, vue.markRaw)(options[prop]);
  54989. else vm[prop] = options[prop];
  54990. vm.visible = true;
  54991. return vm;
  54992. };
  54993. function MessageBox(options, appContext = null) {
  54994. if (!isClient) return Promise.reject();
  54995. let callback;
  54996. if (isString(options) || (0, vue.isVNode)(options)) options = { message: options };
  54997. else callback = options.callback;
  54998. return new Promise((resolve, reject) => {
  54999. const vm = showMessage(options, appContext ?? MessageBox._context);
  55000. messageInstance.set(vm, {
  55001. options,
  55002. callback,
  55003. resolve,
  55004. reject
  55005. });
  55006. });
  55007. }
  55008. const MESSAGE_BOX_VARIANTS = [
  55009. "alert",
  55010. "confirm",
  55011. "prompt"
  55012. ];
  55013. const MESSAGE_BOX_DEFAULT_OPTS = {
  55014. alert: {
  55015. closeOnPressEscape: false,
  55016. closeOnClickModal: false
  55017. },
  55018. confirm: { showCancelButton: true },
  55019. prompt: {
  55020. showCancelButton: true,
  55021. showInput: true
  55022. }
  55023. };
  55024. MESSAGE_BOX_VARIANTS.forEach((boxType) => {
  55025. MessageBox[boxType] = messageBoxFactory(boxType);
  55026. });
  55027. function messageBoxFactory(boxType) {
  55028. return (message, title, options, appContext) => {
  55029. let titleOrOpts = "";
  55030. if (isObject$1(title)) {
  55031. options = title;
  55032. titleOrOpts = "";
  55033. } else if (isUndefined(title)) titleOrOpts = "";
  55034. else titleOrOpts = title;
  55035. return MessageBox(Object.assign({
  55036. title: titleOrOpts,
  55037. message,
  55038. type: "",
  55039. ...MESSAGE_BOX_DEFAULT_OPTS[boxType]
  55040. }, options, { boxType }), appContext);
  55041. };
  55042. }
  55043. MessageBox.close = () => {
  55044. messageInstance.forEach((_, vm) => {
  55045. vm.doClose();
  55046. });
  55047. messageInstance.clear();
  55048. };
  55049. MessageBox._context = null;
  55050. //#endregion
  55051. //#region ../../packages/components/message-box/index.ts
  55052. const _MessageBox = MessageBox;
  55053. _MessageBox.install = (app) => {
  55054. _MessageBox._context = app._context;
  55055. app.config.globalProperties.$msgbox = _MessageBox;
  55056. app.config.globalProperties.$messageBox = _MessageBox;
  55057. app.config.globalProperties.$alert = _MessageBox.alert;
  55058. app.config.globalProperties.$confirm = _MessageBox.confirm;
  55059. app.config.globalProperties.$prompt = _MessageBox.prompt;
  55060. };
  55061. const ElMessageBox = _MessageBox;
  55062. //#endregion
  55063. //#region ../../packages/components/notification/src/notification.ts
  55064. const notificationTypes = [
  55065. "primary",
  55066. "success",
  55067. "info",
  55068. "warning",
  55069. "error"
  55070. ];
  55071. const notificationProps = buildProps({
  55072. customClass: {
  55073. type: String,
  55074. default: ""
  55075. },
  55076. dangerouslyUseHTMLString: Boolean,
  55077. duration: {
  55078. type: Number,
  55079. default: 4500
  55080. },
  55081. icon: { type: iconPropType },
  55082. id: {
  55083. type: String,
  55084. default: ""
  55085. },
  55086. message: {
  55087. type: definePropType([
  55088. String,
  55089. Object,
  55090. Function
  55091. ]),
  55092. default: ""
  55093. },
  55094. offset: {
  55095. type: Number,
  55096. default: 0
  55097. },
  55098. onClick: {
  55099. type: definePropType(Function),
  55100. default: () => void 0
  55101. },
  55102. onClose: {
  55103. type: definePropType(Function),
  55104. required: true
  55105. },
  55106. position: {
  55107. type: String,
  55108. values: [
  55109. "top-right",
  55110. "top-left",
  55111. "bottom-right",
  55112. "bottom-left"
  55113. ],
  55114. default: "top-right"
  55115. },
  55116. showClose: {
  55117. type: Boolean,
  55118. default: true
  55119. },
  55120. title: {
  55121. type: String,
  55122. default: ""
  55123. },
  55124. type: {
  55125. type: String,
  55126. values: [...notificationTypes, ""],
  55127. default: ""
  55128. },
  55129. zIndex: Number,
  55130. closeIcon: {
  55131. type: iconPropType,
  55132. default: close_default
  55133. }
  55134. });
  55135. const notificationEmits = { destroy: () => true };
  55136. //#endregion
  55137. //#region ../../packages/components/notification/src/notification.vue?vue&type=script&setup=true&lang.ts
  55138. const _hoisted_1 = ["id"];
  55139. const _hoisted_2 = ["textContent"];
  55140. const _hoisted_3 = { key: 0 };
  55141. const _hoisted_4 = ["innerHTML"];
  55142. var notification_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
  55143. name: "ElNotification",
  55144. __name: "notification",
  55145. props: notificationProps,
  55146. emits: notificationEmits,
  55147. setup(__props, { expose: __expose }) {
  55148. const props = __props;
  55149. const { ns, zIndex } = useGlobalComponentSettings("notification");
  55150. const { nextZIndex, currentZIndex } = zIndex;
  55151. const visible = (0, vue.ref)(false);
  55152. let timer = void 0;
  55153. const typeClass = (0, vue.computed)(() => {
  55154. const type = props.type;
  55155. return type && TypeComponentsMap[props.type] ? ns.m(type) : "";
  55156. });
  55157. const iconComponent = (0, vue.computed)(() => {
  55158. if (!props.type) return props.icon;
  55159. return TypeComponentsMap[props.type] || props.icon;
  55160. });
  55161. const horizontalClass = (0, vue.computed)(() => props.position.endsWith("right") ? "right" : "left");
  55162. const verticalProperty = (0, vue.computed)(() => props.position.startsWith("top") ? "top" : "bottom");
  55163. const positionStyle = (0, vue.computed)(() => {
  55164. return {
  55165. [verticalProperty.value]: `${props.offset}px`,
  55166. zIndex: props.zIndex ?? currentZIndex.value
  55167. };
  55168. });
  55169. function startTimer() {
  55170. if (props.duration > 0) ({stop: timer} = useTimeoutFn(() => {
  55171. if (visible.value) close();
  55172. }, props.duration));
  55173. }
  55174. function clearTimer() {
  55175. timer?.();
  55176. }
  55177. function close() {
  55178. visible.value = false;
  55179. }
  55180. function onKeydown(event) {
  55181. switch (getEventCode(event)) {
  55182. case EVENT_CODE.delete:
  55183. case EVENT_CODE.backspace:
  55184. clearTimer();
  55185. break;
  55186. case EVENT_CODE.esc:
  55187. if (visible.value) close();
  55188. break;
  55189. default:
  55190. startTimer();
  55191. break;
  55192. }
  55193. }
  55194. (0, vue.onMounted)(() => {
  55195. startTimer();
  55196. nextZIndex();
  55197. visible.value = true;
  55198. });
  55199. useEventListener(document, "keydown", onKeydown);
  55200. __expose({
  55201. visible,
  55202. close
  55203. });
  55204. return (_ctx, _cache) => {
  55205. return (0, vue.openBlock)(), (0, vue.createBlock)(vue.Transition, {
  55206. name: (0, vue.unref)(ns).b("fade"),
  55207. onBeforeLeave: __props.onClose,
  55208. onAfterLeave: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("destroy")),
  55209. persisted: ""
  55210. }, {
  55211. default: (0, vue.withCtx)(() => [(0, vue.withDirectives)((0, vue.createElementVNode)("div", {
  55212. id: __props.id,
  55213. class: (0, vue.normalizeClass)([
  55214. (0, vue.unref)(ns).b(),
  55215. __props.customClass,
  55216. horizontalClass.value
  55217. ]),
  55218. style: (0, vue.normalizeStyle)(positionStyle.value),
  55219. role: "alert",
  55220. onMouseenter: clearTimer,
  55221. onMouseleave: startTimer,
  55222. onClick: _cache[0] || (_cache[0] = (...args) => __props.onClick && __props.onClick(...args))
  55223. }, [iconComponent.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  55224. key: 0,
  55225. class: (0, vue.normalizeClass)([(0, vue.unref)(ns).e("icon"), typeClass.value])
  55226. }, {
  55227. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(iconComponent.value)))]),
  55228. _: 1
  55229. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("group")) }, [
  55230. (0, vue.createElementVNode)("h2", {
  55231. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("title")),
  55232. textContent: (0, vue.toDisplayString)(__props.title)
  55233. }, null, 10, _hoisted_2),
  55234. (0, vue.withDirectives)((0, vue.createElementVNode)("div", {
  55235. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("content")),
  55236. style: (0, vue.normalizeStyle)(!!__props.title ? void 0 : { margin: 0 })
  55237. }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [!__props.dangerouslyUseHTMLString ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", _hoisted_3, (0, vue.toDisplayString)(__props.message), 1)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createCommentVNode)(" Caution here, message could've been compromised, never use user's input as message "), (0, vue.createElementVNode)("p", { innerHTML: __props.message }, null, 8, _hoisted_4)], 2112))])], 6), [[vue.vShow, __props.message]]),
  55238. __props.showClose ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(ElIcon), {
  55239. key: 0,
  55240. class: (0, vue.normalizeClass)((0, vue.unref)(ns).e("closeBtn")),
  55241. onClick: (0, vue.withModifiers)(close, ["stop"])
  55242. }, {
  55243. default: (0, vue.withCtx)(() => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(__props.closeIcon)))]),
  55244. _: 1
  55245. }, 8, ["class"])) : (0, vue.createCommentVNode)("v-if", true)
  55246. ], 2)], 46, _hoisted_1), [[vue.vShow, visible.value]])]),
  55247. _: 3
  55248. }, 8, ["name", "onBeforeLeave"]);
  55249. };
  55250. }
  55251. });
  55252. //#endregion
  55253. //#region ../../packages/components/notification/src/notification.vue
  55254. var notification_default = notification_vue_vue_type_script_setup_true_lang_default;
  55255. //#endregion
  55256. //#region ../../packages/components/notification/src/notify.ts
  55257. const notifications = {
  55258. "top-left": [],
  55259. "top-right": [],
  55260. "bottom-left": [],
  55261. "bottom-right": []
  55262. };
  55263. const GAP_SIZE = 16;
  55264. let seed = 1;
  55265. const notify = function(options = {}, context) {
  55266. if (!isClient) return { close: () => void 0 };
  55267. if (isString(options) || (0, vue.isVNode)(options)) options = { message: options };
  55268. const position = options.position || "top-right";
  55269. let verticalOffset = options.offset || 0;
  55270. notifications[position].forEach(({ vm }) => {
  55271. verticalOffset += (vm.el?.offsetHeight || 0) + GAP_SIZE;
  55272. });
  55273. verticalOffset += GAP_SIZE;
  55274. const id = `notification_${seed++}`;
  55275. const userOnClose = options.onClose;
  55276. const props = {
  55277. ...options,
  55278. offset: verticalOffset,
  55279. id,
  55280. onClose: () => {
  55281. close(id, position, userOnClose);
  55282. }
  55283. };
  55284. let appendTo = document.body;
  55285. if (isElement$1(options.appendTo)) appendTo = options.appendTo;
  55286. else if (isString(options.appendTo)) appendTo = document.querySelector(options.appendTo);
  55287. if (!isElement$1(appendTo)) {
  55288. /* @__PURE__ */ debugWarn("ElNotification", "the appendTo option is not an HTMLElement. Falling back to document.body.");
  55289. appendTo = document.body;
  55290. }
  55291. const container = document.createElement("div");
  55292. const vm = (0, vue.createVNode)(notification_default, props, isFunction$1(props.message) ? props.message : (0, vue.isVNode)(props.message) ? () => props.message : null);
  55293. vm.appContext = isUndefined(context) ? notify._context : context;
  55294. vm.props.onDestroy = () => {
  55295. (0, vue.render)(null, container);
  55296. };
  55297. (0, vue.render)(vm, container);
  55298. notifications[position].push({ vm });
  55299. appendTo.appendChild(container.firstElementChild);
  55300. return { close: () => {
  55301. vm.component.exposed.visible.value = false;
  55302. } };
  55303. };
  55304. notificationTypes.forEach((type) => {
  55305. notify[type] = (options = {}, appContext) => {
  55306. if (isString(options) || (0, vue.isVNode)(options)) options = { message: options };
  55307. return notify({
  55308. ...options,
  55309. type
  55310. }, appContext);
  55311. };
  55312. });
  55313. function close(id, position, userOnClose) {
  55314. const orientedNotifications = notifications[position];
  55315. const idx = orientedNotifications.findIndex(({ vm }) => vm.component?.props.id === id);
  55316. if (idx === -1) return;
  55317. const { vm } = orientedNotifications[idx];
  55318. if (!vm) return;
  55319. userOnClose?.(vm);
  55320. const removedHeight = vm.el.offsetHeight;
  55321. const verticalPos = position.split("-")[0];
  55322. orientedNotifications.splice(idx, 1);
  55323. const len = orientedNotifications.length;
  55324. if (len < 1) return;
  55325. for (let i = idx; i < len; i++) {
  55326. const { el, component } = orientedNotifications[i].vm;
  55327. const pos = Number.parseInt(el.style[verticalPos], 10) - removedHeight - GAP_SIZE;
  55328. component.props.offset = pos;
  55329. }
  55330. }
  55331. function closeAll() {
  55332. for (const orientedNotifications of Object.values(notifications)) orientedNotifications.forEach(({ vm }) => {
  55333. vm.component.exposed.visible.value = false;
  55334. });
  55335. }
  55336. function updateOffsets(position = "top-right") {
  55337. let verticalOffset = notifications[position][0]?.vm.component?.props?.offset || 0;
  55338. for (const { vm } of notifications[position]) {
  55339. vm.component.props.offset = verticalOffset;
  55340. verticalOffset += (vm.el?.offsetHeight || 0) + GAP_SIZE;
  55341. }
  55342. }
  55343. notify.closeAll = closeAll;
  55344. notify.updateOffsets = updateOffsets;
  55345. notify._context = null;
  55346. //#endregion
  55347. //#region ../../packages/components/notification/index.ts
  55348. const ElNotification = withInstallFunction(notify, "$notify");
  55349. //#endregion
  55350. //#region ../../packages/element-plus/plugin.ts
  55351. var plugin_default = [
  55352. ElInfiniteScroll,
  55353. ElLoading,
  55354. ElMessage,
  55355. ElMessageBox,
  55356. ElNotification,
  55357. ElPopoverDirective
  55358. ];
  55359. //#endregion
  55360. //#region ../../packages/element-plus/defaults.ts
  55361. var defaults_default = makeInstaller([...component_default, ...plugin_default]);
  55362. //#endregion
  55363. //#region ../../packages/element-plus/index.ts
  55364. const install = defaults_default.install;
  55365. const version = defaults_default.version;
  55366. var element_plus_default = defaults_default;
  55367. //#endregion
  55368. exports.BAR_MAP = BAR_MAP;
  55369. exports.BORDER_HORIZONTAL_WIDTH = BORDER_HORIZONTAL_WIDTH;
  55370. exports.CAROUSEL_ITEM_NAME = CAROUSEL_ITEM_NAME;
  55371. exports.CASCADER_PANEL_HEIGHT = CASCADER_PANEL_HEIGHT;
  55372. exports.CASCADER_PANEL_INJECTION_KEY = CASCADER_PANEL_INJECTION_KEY;
  55373. exports.CASCADER_PANEL_ITEM_SIZE = CASCADER_PANEL_ITEM_SIZE;
  55374. exports.CHANGE_EVENT = CHANGE_EVENT;
  55375. exports.ClickOutside = ClickOutside;
  55376. exports.CommonPicker = picker_default;
  55377. exports.CommonProps = CommonProps;
  55378. exports.DEFAULT_DIALOG_TRANSITION = DEFAULT_DIALOG_TRANSITION;
  55379. exports.DEFAULT_EMPTY_VALUES = DEFAULT_EMPTY_VALUES;
  55380. exports.DEFAULT_END = DEFAULT_END;
  55381. exports.DEFAULT_FORMATS_DATE = DEFAULT_FORMATS_DATE;
  55382. exports.DEFAULT_FORMATS_DATEPICKER = DEFAULT_FORMATS_DATEPICKER;
  55383. exports.DEFAULT_FORMATS_TIME = DEFAULT_FORMATS_TIME;
  55384. exports.DEFAULT_START = DEFAULT_START;
  55385. exports.DEFAULT_STEP = DEFAULT_STEP;
  55386. exports.DEFAULT_VALUE_ON_CLEAR = DEFAULT_VALUE_ON_CLEAR;
  55387. exports.DROPDOWN_INJECTION_KEY = DROPDOWN_INJECTION_KEY;
  55388. exports.DROPDOWN_INSTANCE_INJECTION_KEY = DROPDOWN_INSTANCE_INJECTION_KEY;
  55389. exports.DefaultProps = DefaultProps;
  55390. exports.DynamicSizeGrid = DynamicSizeGrid;
  55391. exports.DynamicSizeList = DynamicSizeList;
  55392. exports.EVENT_CODE = EVENT_CODE;
  55393. exports.Effect = Effect;
  55394. exports.ElAffix = ElAffix;
  55395. exports.ElAlert = ElAlert;
  55396. exports.ElAnchor = ElAnchor;
  55397. exports.ElAnchorLink = ElAnchorLink;
  55398. exports.ElAside = ElAside;
  55399. exports.ElAutoResizer = ElAutoResizer;
  55400. exports.ElAutocomplete = ElAutocomplete;
  55401. exports.ElAvatar = ElAvatar;
  55402. exports.ElAvatarGroup = ElAvatarGroup;
  55403. exports.ElBacktop = ElBacktop;
  55404. exports.ElBadge = ElBadge;
  55405. exports.ElBreadcrumb = ElBreadcrumb;
  55406. exports.ElBreadcrumbItem = ElBreadcrumbItem;
  55407. exports.ElButton = ElButton;
  55408. exports.ElButtonGroup = ElButtonGroup;
  55409. exports.ElCalendar = ElCalendar;
  55410. exports.ElCard = ElCard;
  55411. exports.ElCarousel = ElCarousel;
  55412. exports.ElCarouselItem = ElCarouselItem;
  55413. exports.ElCascader = ElCascader;
  55414. exports.ElCascaderPanel = ElCascaderPanel;
  55415. exports.ElCheckTag = ElCheckTag;
  55416. exports.ElCheckbox = ElCheckbox;
  55417. exports.ElCheckboxButton = ElCheckboxButton;
  55418. exports.ElCheckboxGroup = ElCheckboxGroup;
  55419. exports.ElCol = ElCol;
  55420. exports.ElCollapse = ElCollapse;
  55421. exports.ElCollapseItem = ElCollapseItem;
  55422. exports.ElCollapseTransition = ElCollapseTransition;
  55423. exports.ElColorPicker = ElColorPicker;
  55424. exports.ElColorPickerPanel = ElColorPickerPanel;
  55425. exports.ElConfigProvider = ElConfigProvider;
  55426. exports.ElContainer = ElContainer;
  55427. exports.ElCountdown = ElCountdown;
  55428. exports.ElDatePicker = ElDatePicker;
  55429. exports.ElDatePickerPanel = ElDatePickerPanel;
  55430. exports.ElDescriptions = ElDescriptions;
  55431. exports.ElDescriptionsItem = ElDescriptionsItem;
  55432. exports.ElDialog = ElDialog;
  55433. exports.ElDivider = ElDivider;
  55434. exports.ElDrawer = ElDrawer;
  55435. exports.ElDropdown = ElDropdown;
  55436. exports.ElDropdownItem = ElDropdownItem;
  55437. exports.ElDropdownMenu = ElDropdownMenu;
  55438. exports.ElEmpty = ElEmpty;
  55439. exports.ElFooter = ElFooter;
  55440. exports.ElForm = ElForm;
  55441. exports.ElFormItem = ElFormItem;
  55442. exports.ElHeader = ElHeader;
  55443. exports.ElIcon = ElIcon;
  55444. exports.ElImage = ElImage;
  55445. exports.ElImageViewer = ElImageViewer;
  55446. exports.ElInfiniteScroll = ElInfiniteScroll;
  55447. exports.ElInput = ElInput;
  55448. exports.ElInputNumber = ElInputNumber;
  55449. exports.ElInputOtp = ElInputOtp;
  55450. exports.ElInputTag = ElInputTag;
  55451. exports.ElLink = ElLink;
  55452. exports.ElLoading = ElLoading;
  55453. exports.ElLoadingDirective = vLoading;
  55454. exports.vLoading = vLoading;
  55455. exports.ElLoadingService = Loading;
  55456. exports.ElMain = ElMain;
  55457. exports.ElMention = ElMention;
  55458. exports.ElMenu = ElMenu;
  55459. exports.ElMenuItem = ElMenuItem;
  55460. exports.ElMenuItemGroup = ElMenuItemGroup;
  55461. exports.ElMessage = ElMessage;
  55462. exports.ElMessageBox = ElMessageBox;
  55463. exports.ElNotification = ElNotification;
  55464. exports.ElOption = ElOption;
  55465. exports.ElOptionGroup = ElOptionGroup;
  55466. exports.ElOverlay = ElOverlay;
  55467. exports.ElPageHeader = ElPageHeader;
  55468. exports.ElPagination = ElPagination;
  55469. exports.ElPopconfirm = ElPopconfirm;
  55470. exports.ElPopover = ElPopover;
  55471. exports.ElPopoverDirective = ElPopoverDirective;
  55472. exports.ElPopper = ElPopper;
  55473. exports.ElPopperArrow = arrow_default;
  55474. exports.ElPopperContent = content_default;
  55475. exports.ElPopperTrigger = trigger_default;
  55476. exports.ElProgress = ElProgress;
  55477. exports.ElRadio = ElRadio;
  55478. exports.ElRadioButton = ElRadioButton;
  55479. exports.ElRadioGroup = ElRadioGroup;
  55480. exports.ElRate = ElRate;
  55481. exports.ElResult = ElResult;
  55482. exports.ElRow = ElRow;
  55483. exports.ElScrollbar = ElScrollbar;
  55484. exports.ElSegmented = ElSegmented;
  55485. exports.ElSelect = ElSelect;
  55486. exports.ElSelectV2 = ElSelectV2;
  55487. exports.ElSkeleton = ElSkeleton;
  55488. exports.ElSkeletonItem = ElSkeletonItem;
  55489. exports.ElSlider = ElSlider;
  55490. exports.ElSpace = ElSpace;
  55491. exports.ElSplitter = ElSplitter;
  55492. exports.ElSplitterPanel = ElSplitterPanel;
  55493. exports.ElStatistic = ElStatistic;
  55494. exports.ElStep = ElStep;
  55495. exports.ElSteps = ElSteps;
  55496. exports.ElSubMenu = ElSubMenu;
  55497. exports.ElSwitch = ElSwitch;
  55498. exports.ElTabPane = ElTabPane;
  55499. exports.ElTable = ElTable;
  55500. exports.ElTableColumn = ElTableColumn;
  55501. exports.ElTableV2 = ElTableV2;
  55502. exports.ElTabs = ElTabs;
  55503. exports.ElTag = ElTag;
  55504. exports.ElText = ElText;
  55505. exports.ElTimePicker = ElTimePicker;
  55506. exports.ElTimeSelect = ElTimeSelect;
  55507. exports.ElTimeline = ElTimeline;
  55508. exports.ElTimelineItem = ElTimelineItem;
  55509. exports.ElTooltip = ElTooltip;
  55510. exports.ElTour = ElTour;
  55511. exports.ElTourStep = ElTourStep;
  55512. exports.ElTransfer = ElTransfer;
  55513. exports.ElTree = ElTree;
  55514. exports.ElTreeSelect = ElTreeSelect;
  55515. exports.ElTreeV2 = ElTreeV2;
  55516. exports.ElUpload = ElUpload;
  55517. exports.ElWatermark = ElWatermark;
  55518. exports.FIRST_KEYS = FIRST_KEYS;
  55519. exports.FIRST_LAST_KEYS = FIRST_LAST_KEYS;
  55520. exports.FORWARD_REF_INJECTION_KEY = FORWARD_REF_INJECTION_KEY;
  55521. exports.FixedSizeGrid = FixedSizeGrid;
  55522. exports.FixedSizeList = FixedSizeList;
  55523. exports.GAP = GAP;
  55524. exports.ID_INJECTION_KEY = ID_INJECTION_KEY;
  55525. exports.INPUT_EVENT = INPUT_EVENT;
  55526. exports.INSTALLED_KEY = INSTALLED_KEY;
  55527. exports.IconComponentMap = IconComponentMap;
  55528. exports.IconMap = IconMap;
  55529. exports.LAST_KEYS = LAST_KEYS;
  55530. exports.LEFT_CHECK_CHANGE_EVENT = LEFT_CHECK_CHANGE_EVENT;
  55531. exports.MENU_INJECTION_KEY = MENU_INJECTION_KEY;
  55532. exports.MESSAGE_DEFAULT_PLACEMENT = MESSAGE_DEFAULT_PLACEMENT;
  55533. exports.MINIMUM_INPUT_WIDTH = MINIMUM_INPUT_WIDTH;
  55534. exports.Mousewheel = Mousewheel;
  55535. exports.NODE_INSTANCE_INJECTION_KEY = NODE_INSTANCE_INJECTION_KEY;
  55536. exports.PICKER_BASE_INJECTION_KEY = PICKER_BASE_INJECTION_KEY;
  55537. exports.PICKER_POPPER_OPTIONS_INJECTION_KEY = PICKER_POPPER_OPTIONS_INJECTION_KEY;
  55538. exports.POPPER_CONTENT_INJECTION_KEY = POPPER_CONTENT_INJECTION_KEY;
  55539. exports.POPPER_INJECTION_KEY = POPPER_INJECTION_KEY;
  55540. exports.RIGHT_CHECK_CHANGE_EVENT = RIGHT_CHECK_CHANGE_EVENT;
  55541. exports.ROOT_COMMON_COLOR_INJECTION_KEY = ROOT_COMMON_COLOR_INJECTION_KEY;
  55542. exports.ROOT_COMMON_PICKER_INJECTION_KEY = ROOT_COMMON_PICKER_INJECTION_KEY;
  55543. exports.ROOT_PICKER_INJECTION_KEY = ROOT_PICKER_INJECTION_KEY;
  55544. exports.ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY = ROOT_PICKER_IS_DEFAULT_FORMAT_INJECTION_KEY;
  55545. exports.ROOT_TREE_INJECTION_KEY = ROOT_TREE_INJECTION_KEY;
  55546. exports.RowAlign = RowAlign;
  55547. exports.RowJustify = RowJustify;
  55548. exports.SCOPE = SCOPE;
  55549. exports.SIZE_INJECTION_KEY = SIZE_INJECTION_KEY;
  55550. exports.STEPS_INJECTION_KEY = STEPS_INJECTION_KEY;
  55551. exports.SUB_MENU_INJECTION_KEY = SUB_MENU_INJECTION_KEY;
  55552. exports.TIMELINE_INJECTION_KEY = TIMELINE_INJECTION_KEY;
  55553. exports.TOOLTIP_INJECTION_KEY = TOOLTIP_INJECTION_KEY;
  55554. exports.TREE_NODE_MAP_INJECTION_KEY = TREE_NODE_MAP_INJECTION_KEY;
  55555. exports.TableV2 = TableV2;
  55556. exports.TableV2Alignment = Alignment;
  55557. exports.TableV2FixedDir = FixedDir;
  55558. exports.TableV2Placeholder = placeholderSign;
  55559. exports.TableV2SortOrder = SortOrder;
  55560. exports.TimePickPanel = panel_time_pick_default;
  55561. exports.TrapFocus = TrapFocus;
  55562. exports.UPDATE_MODEL_EVENT = UPDATE_MODEL_EVENT;
  55563. exports.WEEK_DAYS = WEEK_DAYS;
  55564. exports.ZINDEX_INJECTION_KEY = ZINDEX_INJECTION_KEY;
  55565. exports.affixEmits = affixEmits;
  55566. exports.affixProps = affixProps;
  55567. exports.alertEffects = alertEffects;
  55568. exports.alertEmits = alertEmits;
  55569. exports.alertProps = alertProps;
  55570. exports.anchorEmits = anchorEmits;
  55571. exports.anchorProps = anchorProps;
  55572. exports.ariaProps = ariaProps;
  55573. exports.arrowMiddleware = arrowMiddleware;
  55574. exports.autoResizerProps = autoResizerProps;
  55575. exports.autocompleteEmits = autocompleteEmits;
  55576. exports.autocompleteProps = autocompleteProps;
  55577. exports.avatarEmits = avatarEmits;
  55578. exports.avatarGroupContextKey = avatarGroupContextKey;
  55579. exports.avatarGroupProps = avatarGroupProps;
  55580. exports.avatarProps = avatarProps;
  55581. exports.backtopEmits = backtopEmits;
  55582. exports.backtopProps = backtopProps;
  55583. exports.badgeProps = badgeProps;
  55584. exports.breadcrumbItemProps = breadcrumbItemProps;
  55585. exports.breadcrumbKey = breadcrumbKey;
  55586. exports.breadcrumbProps = breadcrumbProps;
  55587. exports.buildLocaleContext = buildLocaleContext;
  55588. exports.buildTimeList = buildTimeList;
  55589. exports.buildTranslator = buildTranslator;
  55590. exports.buttonEmits = buttonEmits;
  55591. exports.buttonGroupContextKey = buttonGroupContextKey;
  55592. exports.buttonNativeTypes = buttonNativeTypes;
  55593. exports.buttonProps = buttonProps;
  55594. exports.buttonTypes = buttonTypes;
  55595. exports.calendarEmits = calendarEmits;
  55596. exports.calendarProps = calendarProps;
  55597. exports.cardContextKey = cardContextKey;
  55598. exports.cardProps = cardProps;
  55599. exports.carouselContextKey = carouselContextKey;
  55600. exports.carouselEmits = carouselEmits;
  55601. exports.carouselItemProps = carouselItemProps;
  55602. exports.carouselProps = carouselProps;
  55603. exports.cascaderEmits = cascaderEmits;
  55604. exports.cascaderPanelEmits = cascaderPanelEmits;
  55605. exports.cascaderPanelProps = cascaderPanelProps;
  55606. exports.cascaderProps = cascaderProps;
  55607. exports.checkTagEmits = checkTagEmits;
  55608. exports.checkTagProps = checkTagProps;
  55609. exports.checkboxDefaultProps = checkboxDefaultProps;
  55610. exports.checkboxEmits = checkboxEmits;
  55611. exports.checkboxGroupContextKey = checkboxGroupContextKey;
  55612. exports.checkboxGroupEmits = checkboxGroupEmits;
  55613. exports.checkboxGroupProps = checkboxGroupProps;
  55614. exports.checkboxProps = checkboxProps;
  55615. exports.checkboxPropsDefaults = checkboxPropsDefaults;
  55616. exports.colProps = colProps;
  55617. exports.collapseContextKey = collapseContextKey;
  55618. exports.collapseEmits = collapseEmits;
  55619. exports.collapseItemProps = collapseItemProps;
  55620. exports.collapseProps = collapseProps;
  55621. exports.colorPickerEmits = colorPickerEmits;
  55622. exports.colorPickerPanelContextKey = colorPickerPanelContextKey;
  55623. exports.colorPickerPanelEmits = colorPickerPanelEmits;
  55624. exports.colorPickerPanelProps = colorPickerPanelProps;
  55625. exports.colorPickerProps = colorPickerProps;
  55626. exports.colorPickerPropsDefaults = colorPickerPropsDefaults;
  55627. exports.columnAlignment = columnAlignment;
  55628. exports.componentSizeMap = componentSizeMap;
  55629. exports.componentSizes = componentSizes;
  55630. exports.configProviderContextKey = configProviderContextKey;
  55631. exports.configProviderProps = configProviderProps;
  55632. exports.countdownEmits = countdownEmits;
  55633. exports.countdownProps = countdownProps;
  55634. exports.createModelToggleComposable = createModelToggleComposable;
  55635. exports.dateEquals = dateEquals;
  55636. exports.datePickTypes = datePickTypes;
  55637. exports.datePickerPanelProps = datePickerPanelProps;
  55638. exports.datePickerProps = datePickerProps;
  55639. exports.dayOrDaysToDate = dayOrDaysToDate;
  55640. Object.defineProperty(exports, 'dayjs', {
  55641. enumerable: true,
  55642. get: function () {
  55643. return import_dayjs_min.default;
  55644. }
  55645. });
  55646. exports.default = element_plus_default;
  55647. exports.defaultInitialZIndex = defaultInitialZIndex;
  55648. exports.defaultNamespace = defaultNamespace;
  55649. exports.defaultProps = defaultProps;
  55650. exports.descriptionItemProps = descriptionItemProps;
  55651. exports.descriptionProps = descriptionProps;
  55652. exports.dialogContextKey = dialogContextKey;
  55653. exports.dialogEmits = dialogEmits;
  55654. exports.dialogInjectionKey = dialogInjectionKey;
  55655. exports.dialogProps = dialogProps;
  55656. exports.dialogPropsDefaults = dialogPropsDefaults;
  55657. exports.dividerProps = dividerProps;
  55658. exports.drawerEmits = drawerEmits;
  55659. exports.drawerProps = drawerProps;
  55660. exports.dropdownItemProps = dropdownItemProps;
  55661. exports.dropdownMenuProps = dropdownMenuProps;
  55662. exports.dropdownProps = dropdownProps;
  55663. exports.elPaginationKey = elPaginationKey;
  55664. exports.emitChangeFn = emitChangeFn;
  55665. exports.emptyProps = emptyProps;
  55666. exports.emptyValuesContextKey = emptyValuesContextKey;
  55667. exports.extractDateFormat = extractDateFormat;
  55668. exports.extractTimeFormat = extractTimeFormat;
  55669. exports.formContextKey = formContextKey;
  55670. exports.formEmits = formEmits;
  55671. exports.formItemContextKey = formItemContextKey;
  55672. exports.formItemProps = formItemProps;
  55673. exports.formItemValidateStates = formItemValidateStates;
  55674. exports.formMetaProps = formMetaProps;
  55675. exports.formProps = formProps;
  55676. exports.formatter = formatter;
  55677. exports.genFileId = genFileId;
  55678. exports.getPositionDataWithUnit = getPositionDataWithUnit;
  55679. exports.iconProps = iconProps;
  55680. exports.imageEmits = imageEmits;
  55681. exports.imageProps = imageProps;
  55682. exports.imageViewerEmits = imageViewerEmits;
  55683. exports.imageViewerProps = imageViewerProps;
  55684. exports.inputEmits = inputEmits;
  55685. exports.inputNumberEmits = inputNumberEmits;
  55686. exports.inputNumberProps = inputNumberProps;
  55687. exports.inputOtpEmits = inputOtpEmits;
  55688. exports.inputProps = inputProps;
  55689. exports.inputPropsDefaults = inputPropsDefaults;
  55690. exports.inputTagEmits = inputTagEmits;
  55691. exports.inputTagProps = inputTagProps;
  55692. exports.install = install;
  55693. exports.linkEmits = linkEmits;
  55694. exports.linkProps = linkProps;
  55695. exports.localeContextKey = localeContextKey;
  55696. exports.makeInstaller = makeInstaller;
  55697. exports.makeList = makeList;
  55698. exports.mentionDefaultProps = mentionDefaultProps;
  55699. exports.mentionEmits = mentionEmits;
  55700. exports.mentionProps = mentionProps;
  55701. exports.menuEmits = menuEmits;
  55702. exports.menuItemEmits = menuItemEmits;
  55703. exports.menuItemGroupProps = menuItemGroupProps;
  55704. exports.menuItemProps = menuItemProps;
  55705. exports.menuProps = menuProps;
  55706. exports.messageConfig = messageConfig;
  55707. exports.messageDefaults = messageDefaults;
  55708. exports.messageEmits = messageEmits;
  55709. exports.messagePlacement = messagePlacement;
  55710. exports.messageProps = messageProps;
  55711. exports.messageTypes = messageTypes;
  55712. exports.namespaceContextKey = namespaceContextKey;
  55713. exports.notificationEmits = notificationEmits;
  55714. exports.notificationProps = notificationProps;
  55715. exports.notificationTypes = notificationTypes;
  55716. exports.overlayEmits = overlayEmits;
  55717. exports.overlayProps = overlayProps;
  55718. exports.pageHeaderEmits = pageHeaderEmits;
  55719. exports.pageHeaderProps = pageHeaderProps;
  55720. exports.paginationEmits = paginationEmits;
  55721. exports.paginationProps = paginationProps;
  55722. exports.parseDate = parseDate;
  55723. exports.popconfirmEmits = popconfirmEmits;
  55724. exports.popconfirmProps = popconfirmProps;
  55725. exports.popoverEmits = popoverEmits;
  55726. exports.popoverProps = popoverProps;
  55727. exports.popoverPropsDefaults = popoverPropsDefaults;
  55728. exports.popperArrowProps = popperArrowProps;
  55729. exports.popperArrowPropsDefaults = popperArrowPropsDefaults;
  55730. exports.popperContentEmits = popperContentEmits;
  55731. exports.popperContentProps = popperContentProps;
  55732. exports.popperContentPropsDefaults = popperContentPropsDefaults;
  55733. exports.popperCoreConfigProps = popperCoreConfigProps;
  55734. exports.popperCoreConfigPropsDefaults = popperCoreConfigPropsDefaults;
  55735. exports.popperProps = popperProps;
  55736. exports.popperTriggerProps = popperTriggerProps;
  55737. exports.progressProps = progressProps;
  55738. exports.provideGlobalConfig = provideGlobalConfig;
  55739. exports.radioButtonProps = radioButtonProps;
  55740. exports.radioButtonPropsDefaults = radioButtonPropsDefaults;
  55741. exports.radioDefaultProps = radioDefaultProps;
  55742. exports.radioEmits = radioEmits;
  55743. exports.radioGroupEmits = radioGroupEmits;
  55744. exports.radioGroupKey = radioGroupKey;
  55745. exports.radioGroupProps = radioGroupProps;
  55746. exports.radioGroupPropsDefaults = radioGroupPropsDefaults;
  55747. exports.radioProps = radioProps;
  55748. exports.radioPropsBase = radioPropsBase;
  55749. exports.radioPropsDefaults = radioPropsDefaults;
  55750. exports.rangeArr = rangeArr;
  55751. exports.rateEmits = rateEmits;
  55752. exports.rateProps = rateProps;
  55753. exports.renderThumbStyle = renderThumbStyle;
  55754. exports.resultProps = resultProps;
  55755. exports.roleTypes = roleTypes;
  55756. exports.rowContextKey = rowContextKey;
  55757. exports.rowProps = rowProps;
  55758. exports.scrollbarContextKey = scrollbarContextKey;
  55759. exports.scrollbarEmits = scrollbarEmits;
  55760. exports.scrollbarProps = scrollbarProps;
  55761. exports.segmentedEmits = segmentedEmits;
  55762. exports.segmentedProps = segmentedProps;
  55763. exports.selectEmits = selectEmits;
  55764. exports.selectGroupKey = selectGroupKey;
  55765. exports.selectKey = selectKey;
  55766. exports.selectProps = selectProps;
  55767. exports.selectV2InjectionKey = selectV2InjectionKey;
  55768. exports.skeletonItemProps = skeletonItemProps;
  55769. exports.skeletonProps = skeletonProps;
  55770. exports.sliderContextKey = sliderContextKey;
  55771. exports.sliderEmits = sliderEmits;
  55772. exports.sliderProps = sliderProps;
  55773. exports.spaceItemProps = spaceItemProps;
  55774. exports.spaceProps = spaceProps;
  55775. exports.splitterEmits = splitterEmits;
  55776. exports.splitterPanelEmits = splitterPanelEmits;
  55777. exports.splitterPanelProps = splitterPanelProps;
  55778. exports.splitterProps = splitterProps;
  55779. exports.statisticProps = statisticProps;
  55780. exports.stepProps = stepProps;
  55781. exports.stepsEmits = stepsEmits;
  55782. exports.stepsProps = stepsProps;
  55783. exports.subMenuProps = subMenuProps;
  55784. exports.switchEmits = switchEmits;
  55785. exports.switchProps = switchProps;
  55786. exports.tabBarProps = tabBarProps;
  55787. exports.tabNavEmits = tabNavEmits;
  55788. exports.tabNavProps = tabNavProps;
  55789. exports.tabPaneProps = tabPaneProps;
  55790. exports.tableV2Props = tableV2Props;
  55791. exports.tableV2RowProps = tableV2RowProps;
  55792. exports.tabsEmits = tabsEmits;
  55793. exports.tabsProps = tabsProps;
  55794. exports.tabsRootContextKey = tabsRootContextKey;
  55795. exports.tagEmits = tagEmits;
  55796. exports.tagProps = tagProps;
  55797. exports.textProps = textProps;
  55798. exports.thumbProps = thumbProps;
  55799. exports.timePickerDefaultProps = timePickerDefaultProps;
  55800. exports.timePickerRangeTriggerProps = timePickerRangeTriggerProps;
  55801. exports.timePickerRngeTriggerProps = timePickerRngeTriggerProps;
  55802. exports.timeSelectProps = timeSelectProps;
  55803. exports.timeUnits = timeUnits;
  55804. exports.timelineItemProps = timelineItemProps;
  55805. exports.timelineProps = timelineProps;
  55806. exports.tooltipEmits = tooltipEmits;
  55807. exports.tourContentEmits = tourContentEmits;
  55808. exports.tourContentProps = tourContentProps;
  55809. exports.tourEmits = tourEmits;
  55810. exports.tourPlacements = tourPlacements;
  55811. exports.tourProps = tourProps;
  55812. exports.tourStepEmits = tourStepEmits;
  55813. exports.tourStepProps = tourStepProps;
  55814. exports.tourStrategies = tourStrategies;
  55815. exports.transferCheckedChangeFn = transferCheckedChangeFn;
  55816. exports.transferEmits = transferEmits;
  55817. exports.transferProps = transferProps;
  55818. exports.translate = translate;
  55819. exports.treeEmits = treeEmits;
  55820. exports.treeProps = treeProps;
  55821. exports.uploadBaseProps = uploadBaseProps;
  55822. exports.uploadBasePropsDefaults = uploadBasePropsDefaults;
  55823. exports.uploadContentProps = uploadContentProps;
  55824. exports.uploadContentPropsDefaults = uploadContentPropsDefaults;
  55825. exports.uploadContextKey = uploadContextKey;
  55826. exports.uploadDraggerEmits = uploadDraggerEmits;
  55827. exports.uploadDraggerProps = uploadDraggerProps;
  55828. exports.uploadListEmits = uploadListEmits;
  55829. exports.uploadListProps = uploadListProps;
  55830. exports.uploadListTypes = uploadListTypes;
  55831. exports.uploadProps = uploadProps;
  55832. exports.uploadPropsDefaults = uploadPropsDefaults;
  55833. exports.useAriaProps = useAriaProps;
  55834. exports.useAttrs = useAttrs;
  55835. exports.useCalcInputWidth = useCalcInputWidth;
  55836. exports.useCascaderConfig = useCascaderConfig;
  55837. exports.useComposition = useComposition;
  55838. exports.useCursor = useCursor;
  55839. exports.useDelayedRender = useDelayedRender;
  55840. exports.useDelayedToggle = useDelayedToggle;
  55841. exports.useDelayedToggleProps = useDelayedToggleProps;
  55842. exports.useDelayedTogglePropsDefaults = useDelayedTogglePropsDefaults;
  55843. exports.useDeprecated = useDeprecated;
  55844. exports.useDialog = useDialog;
  55845. exports.useDisabled = useDisabled;
  55846. exports.useDraggable = useDraggable;
  55847. exports.useEmptyValues = useEmptyValues;
  55848. exports.useEmptyValuesProps = useEmptyValuesProps;
  55849. exports.useEscapeKeydown = useEscapeKeydown;
  55850. exports.useFloating = useFloating;
  55851. exports.useFloatingProps = useFloatingProps;
  55852. exports.useFocus = useFocus;
  55853. exports.useFocusController = useFocusController;
  55854. exports.useFormDisabled = useFormDisabled;
  55855. exports.useFormItem = useFormItem;
  55856. exports.useFormItemInputId = useFormItemInputId;
  55857. exports.useFormSize = useFormSize;
  55858. exports.useForwardRef = useForwardRef;
  55859. exports.useForwardRefDirective = useForwardRefDirective;
  55860. exports.useGetDerivedNamespace = useGetDerivedNamespace;
  55861. exports.useGlobalComponentSettings = useGlobalComponentSettings;
  55862. exports.useGlobalConfig = useGlobalConfig;
  55863. exports.useGlobalSize = useGlobalSize;
  55864. exports.useId = useId;
  55865. exports.useIdInjection = useIdInjection;
  55866. exports.useLocale = useLocale;
  55867. exports.useLockscreen = useLockscreen;
  55868. exports.useModal = useModal;
  55869. exports.useModelToggle = useModelToggle;
  55870. exports.useModelToggleEmits = useModelToggleEmits;
  55871. exports.useModelToggleProps = useModelToggleProps;
  55872. exports.useNamespace = useNamespace;
  55873. exports.useOrderedChildren = useOrderedChildren;
  55874. exports.usePopper = usePopper;
  55875. exports.usePopperArrowProps = usePopperArrowProps;
  55876. exports.usePopperContainer = usePopperContainer;
  55877. exports.usePopperContainerId = usePopperContainerId;
  55878. exports.usePopperContentEmits = usePopperContentEmits;
  55879. exports.usePopperContentProps = usePopperContentProps;
  55880. exports.usePopperCoreConfigProps = usePopperCoreConfigProps;
  55881. exports.usePopperProps = usePopperProps;
  55882. exports.usePopperTriggerProps = usePopperTriggerProps;
  55883. exports.usePreventGlobal = usePreventGlobal;
  55884. exports.useProp = useProp;
  55885. exports.useSameTarget = useSameTarget;
  55886. exports.useSize = useSize;
  55887. exports.useSizeProp = useSizeProp;
  55888. exports.useSizeProps = useSizeProps;
  55889. exports.useSpace = useSpace;
  55890. exports.useTeleport = useTeleport;
  55891. exports.useThrottleRender = useThrottleRender;
  55892. exports.useTimeout = useTimeout;
  55893. exports.useTooltipContentProps = useTooltipContentProps;
  55894. exports.useTooltipContentPropsDefaults = useTooltipContentPropsDefaults;
  55895. exports.useTooltipModelToggle = useTooltipModelToggle;
  55896. exports.useTooltipModelToggleEmits = useTooltipModelToggleEmits;
  55897. exports.useTooltipModelToggleProps = useTooltipModelToggleProps;
  55898. exports.useTooltipProps = useTooltipProps;
  55899. exports.useTooltipTriggerProps = useTooltipTriggerProps;
  55900. exports.useTooltipTriggerPropsDefaults = useTooltipTriggerPropsDefaults;
  55901. exports.useTransitionFallthrough = useTransitionFallthrough;
  55902. exports.useTransitionFallthroughEmits = useTransitionFallthroughEmits;
  55903. exports.useZIndex = useZIndex;
  55904. exports.vRepeatClick = vRepeatClick;
  55905. exports.valueEquals = valueEquals;
  55906. exports.version = version;
  55907. exports.virtualizedGridProps = virtualizedGridProps;
  55908. exports.virtualizedListProps = virtualizedListProps;
  55909. exports.virtualizedProps = virtualizedProps;
  55910. exports.virtualizedScrollbarProps = virtualizedScrollbarProps;
  55911. exports.watermarkProps = watermarkProps;
  55912. exports.zIndexContextKey = zIndexContextKey;
  55913. });