index.iife.js 216 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705
  1. var VueDemi = (function (VueDemi, Vue, VueCompositionAPI) {
  2. if (VueDemi.install) {
  3. return VueDemi
  4. }
  5. if (!Vue) {
  6. console.error('[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.')
  7. return VueDemi
  8. }
  9. // Vue 2.7
  10. if (Vue.version.slice(0, 4) === '2.7.') {
  11. for (var key in Vue) {
  12. VueDemi[key] = Vue[key]
  13. }
  14. VueDemi.isVue2 = true
  15. VueDemi.isVue3 = false
  16. VueDemi.install = function () {}
  17. VueDemi.Vue = Vue
  18. VueDemi.Vue2 = Vue
  19. VueDemi.version = Vue.version
  20. VueDemi.warn = Vue.util.warn
  21. function createApp(rootComponent, rootProps) {
  22. var vm
  23. var provide = {}
  24. var app = {
  25. config: Vue.config,
  26. use: Vue.use.bind(Vue),
  27. mixin: Vue.mixin.bind(Vue),
  28. component: Vue.component.bind(Vue),
  29. provide: function (key, value) {
  30. provide[key] = value
  31. return this
  32. },
  33. directive: function (name, dir) {
  34. if (dir) {
  35. Vue.directive(name, dir)
  36. return app
  37. } else {
  38. return Vue.directive(name)
  39. }
  40. },
  41. mount: function (el, hydrating) {
  42. if (!vm) {
  43. vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))
  44. vm.$mount(el, hydrating)
  45. return vm
  46. } else {
  47. return vm
  48. }
  49. },
  50. unmount: function () {
  51. if (vm) {
  52. vm.$destroy()
  53. vm = undefined
  54. }
  55. },
  56. }
  57. return app
  58. }
  59. VueDemi.createApp = createApp
  60. }
  61. // Vue 2.6.x
  62. else if (Vue.version.slice(0, 2) === '2.') {
  63. if (VueCompositionAPI) {
  64. for (var key in VueCompositionAPI) {
  65. VueDemi[key] = VueCompositionAPI[key]
  66. }
  67. VueDemi.isVue2 = true
  68. VueDemi.isVue3 = false
  69. VueDemi.install = function () {}
  70. VueDemi.Vue = Vue
  71. VueDemi.Vue2 = Vue
  72. VueDemi.version = Vue.version
  73. } else {
  74. console.error('[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.')
  75. }
  76. }
  77. // Vue 3
  78. else if (Vue.version.slice(0, 2) === '3.') {
  79. for (var key in Vue) {
  80. VueDemi[key] = Vue[key]
  81. }
  82. VueDemi.isVue2 = false
  83. VueDemi.isVue3 = true
  84. VueDemi.install = function () {}
  85. VueDemi.Vue = Vue
  86. VueDemi.Vue2 = undefined
  87. VueDemi.version = Vue.version
  88. VueDemi.set = function (target, key, val) {
  89. if (Array.isArray(target)) {
  90. target.length = Math.max(target.length, key)
  91. target.splice(key, 1, val)
  92. return val
  93. }
  94. target[key] = val
  95. return val
  96. }
  97. VueDemi.del = function (target, key) {
  98. if (Array.isArray(target)) {
  99. target.splice(key, 1)
  100. return
  101. }
  102. delete target[key]
  103. }
  104. } else {
  105. console.error('[vue-demi] Vue version ' + Vue.version + ' is unsupported.')
  106. }
  107. return VueDemi
  108. })(
  109. (this.VueDemi = this.VueDemi || (typeof VueDemi !== 'undefined' ? VueDemi : {})),
  110. this.Vue || (typeof Vue !== 'undefined' ? Vue : undefined),
  111. this.VueCompositionAPI || (typeof VueCompositionAPI !== 'undefined' ? VueCompositionAPI : undefined)
  112. );
  113. ;
  114. ;(function (exports, shared, vueDemi) {
  115. 'use strict';
  116. function computedAsync(evaluationCallback, initialState, optionsOrRef) {
  117. let options;
  118. if (vueDemi.isRef(optionsOrRef)) {
  119. options = {
  120. evaluating: optionsOrRef
  121. };
  122. } else {
  123. options = optionsOrRef || {};
  124. }
  125. const {
  126. lazy = false,
  127. evaluating = void 0,
  128. onError = shared.noop
  129. } = options;
  130. const started = vueDemi.ref(!lazy);
  131. const current = vueDemi.ref(initialState);
  132. let counter = 0;
  133. vueDemi.watchEffect(async (onInvalidate) => {
  134. if (!started.value)
  135. return;
  136. counter++;
  137. const counterAtBeginning = counter;
  138. let hasFinished = false;
  139. if (evaluating) {
  140. Promise.resolve().then(() => {
  141. evaluating.value = true;
  142. });
  143. }
  144. try {
  145. const result = await evaluationCallback((cancelCallback) => {
  146. onInvalidate(() => {
  147. if (evaluating)
  148. evaluating.value = false;
  149. if (!hasFinished)
  150. cancelCallback();
  151. });
  152. });
  153. if (counterAtBeginning === counter)
  154. current.value = result;
  155. } catch (e) {
  156. onError(e);
  157. } finally {
  158. if (evaluating && counterAtBeginning === counter)
  159. evaluating.value = false;
  160. hasFinished = true;
  161. }
  162. });
  163. if (lazy) {
  164. return vueDemi.computed(() => {
  165. started.value = true;
  166. return current.value;
  167. });
  168. } else {
  169. return current;
  170. }
  171. }
  172. function computedInject(key, options, defaultSource, treatDefaultAsFactory) {
  173. let source = vueDemi.inject(key);
  174. if (defaultSource)
  175. source = vueDemi.inject(key, defaultSource);
  176. if (treatDefaultAsFactory)
  177. source = vueDemi.inject(key, defaultSource, treatDefaultAsFactory);
  178. if (typeof options === "function") {
  179. return vueDemi.computed((ctx) => options(source, ctx));
  180. } else {
  181. return vueDemi.computed({
  182. get: (ctx) => options.get(source, ctx),
  183. set: options.set
  184. });
  185. }
  186. }
  187. const createUnrefFn = (fn) => {
  188. return function(...args) {
  189. return fn.apply(this, args.map((i) => vueDemi.unref(i)));
  190. };
  191. };
  192. function unrefElement(elRef) {
  193. var _a;
  194. const plain = shared.resolveUnref(elRef);
  195. return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;
  196. }
  197. const defaultWindow = shared.isClient ? window : void 0;
  198. const defaultDocument = shared.isClient ? window.document : void 0;
  199. const defaultNavigator = shared.isClient ? window.navigator : void 0;
  200. const defaultLocation = shared.isClient ? window.location : void 0;
  201. function useEventListener(...args) {
  202. let target;
  203. let events;
  204. let listeners;
  205. let options;
  206. if (shared.isString(args[0]) || Array.isArray(args[0])) {
  207. [events, listeners, options] = args;
  208. target = defaultWindow;
  209. } else {
  210. [target, events, listeners, options] = args;
  211. }
  212. if (!target)
  213. return shared.noop;
  214. if (!Array.isArray(events))
  215. events = [events];
  216. if (!Array.isArray(listeners))
  217. listeners = [listeners];
  218. const cleanups = [];
  219. const cleanup = () => {
  220. cleanups.forEach((fn) => fn());
  221. cleanups.length = 0;
  222. };
  223. const register = (el, event, listener) => {
  224. el.addEventListener(event, listener, options);
  225. return () => el.removeEventListener(event, listener, options);
  226. };
  227. const stopWatch = vueDemi.watch(() => unrefElement(target), (el) => {
  228. cleanup();
  229. if (!el)
  230. return;
  231. cleanups.push(...events.flatMap((event) => {
  232. return listeners.map((listener) => register(el, event, listener));
  233. }));
  234. }, { immediate: true, flush: "post" });
  235. const stop = () => {
  236. stopWatch();
  237. cleanup();
  238. };
  239. shared.tryOnScopeDispose(stop);
  240. return stop;
  241. }
  242. function onClickOutside(target, handler, options = {}) {
  243. const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;
  244. if (!window)
  245. return;
  246. let shouldListen = true;
  247. let fallback;
  248. const shouldIgnore = (event) => {
  249. return ignore.some((target2) => {
  250. if (typeof target2 === "string") {
  251. return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));
  252. } else {
  253. const el = unrefElement(target2);
  254. return el && (event.target === el || event.composedPath().includes(el));
  255. }
  256. });
  257. };
  258. const listener = (event) => {
  259. window.clearTimeout(fallback);
  260. const el = unrefElement(target);
  261. if (!el || el === event.target || event.composedPath().includes(el))
  262. return;
  263. if (event.detail === 0)
  264. shouldListen = !shouldIgnore(event);
  265. if (!shouldListen) {
  266. shouldListen = true;
  267. return;
  268. }
  269. handler(event);
  270. };
  271. const cleanup = [
  272. useEventListener(window, "click", listener, { passive: true, capture }),
  273. useEventListener(window, "pointerdown", (e) => {
  274. const el = unrefElement(target);
  275. if (el)
  276. shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e);
  277. }, { passive: true }),
  278. useEventListener(window, "pointerup", (e) => {
  279. if (e.button === 0) {
  280. const path = e.composedPath();
  281. e.composedPath = () => path;
  282. fallback = window.setTimeout(() => listener(e), 50);
  283. }
  284. }, { passive: true }),
  285. detectIframe && useEventListener(window, "blur", (event) => {
  286. var _a;
  287. const el = unrefElement(target);
  288. if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window.document.activeElement)))
  289. handler(event);
  290. })
  291. ].filter(Boolean);
  292. const stop = () => cleanup.forEach((fn) => fn());
  293. return stop;
  294. }
  295. var __defProp$m = Object.defineProperty;
  296. var __defProps$9 = Object.defineProperties;
  297. var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
  298. var __getOwnPropSymbols$o = Object.getOwnPropertySymbols;
  299. var __hasOwnProp$o = Object.prototype.hasOwnProperty;
  300. var __propIsEnum$o = Object.prototype.propertyIsEnumerable;
  301. var __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  302. var __spreadValues$m = (a, b) => {
  303. for (var prop in b || (b = {}))
  304. if (__hasOwnProp$o.call(b, prop))
  305. __defNormalProp$m(a, prop, b[prop]);
  306. if (__getOwnPropSymbols$o)
  307. for (var prop of __getOwnPropSymbols$o(b)) {
  308. if (__propIsEnum$o.call(b, prop))
  309. __defNormalProp$m(a, prop, b[prop]);
  310. }
  311. return a;
  312. };
  313. var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
  314. const createKeyPredicate = (keyFilter) => {
  315. if (typeof keyFilter === "function")
  316. return keyFilter;
  317. else if (typeof keyFilter === "string")
  318. return (event) => event.key === keyFilter;
  319. else if (Array.isArray(keyFilter))
  320. return (event) => keyFilter.includes(event.key);
  321. return () => true;
  322. };
  323. function onKeyStroke(...args) {
  324. let key;
  325. let handler;
  326. let options = {};
  327. if (args.length === 3) {
  328. key = args[0];
  329. handler = args[1];
  330. options = args[2];
  331. } else if (args.length === 2) {
  332. if (typeof args[1] === "object") {
  333. key = true;
  334. handler = args[0];
  335. options = args[1];
  336. } else {
  337. key = args[0];
  338. handler = args[1];
  339. }
  340. } else {
  341. key = true;
  342. handler = args[0];
  343. }
  344. const { target = defaultWindow, eventName = "keydown", passive = false } = options;
  345. const predicate = createKeyPredicate(key);
  346. const listener = (e) => {
  347. if (predicate(e))
  348. handler(e);
  349. };
  350. return useEventListener(target, eventName, listener, passive);
  351. }
  352. function onKeyDown(key, handler, options = {}) {
  353. return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$m({}, options), { eventName: "keydown" }));
  354. }
  355. function onKeyPressed(key, handler, options = {}) {
  356. return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$m({}, options), { eventName: "keypress" }));
  357. }
  358. function onKeyUp(key, handler, options = {}) {
  359. return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$m({}, options), { eventName: "keyup" }));
  360. }
  361. const DEFAULT_DELAY = 500;
  362. function onLongPress(target, handler, options) {
  363. var _a, _b;
  364. const elementRef = vueDemi.computed(() => unrefElement(target));
  365. let timeout;
  366. function clear() {
  367. if (timeout) {
  368. clearTimeout(timeout);
  369. timeout = void 0;
  370. }
  371. }
  372. function onDown(ev) {
  373. var _a2, _b2, _c, _d;
  374. if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)
  375. return;
  376. clear();
  377. if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)
  378. ev.preventDefault();
  379. if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)
  380. ev.stopPropagation();
  381. timeout = setTimeout(() => handler(ev), (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY);
  382. }
  383. const listenerOptions = {
  384. capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,
  385. once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once
  386. };
  387. useEventListener(elementRef, "pointerdown", onDown, listenerOptions);
  388. useEventListener(elementRef, "pointerup", clear, listenerOptions);
  389. useEventListener(elementRef, "pointerleave", clear, listenerOptions);
  390. }
  391. const isFocusedElementEditable = () => {
  392. const { activeElement, body } = document;
  393. if (!activeElement)
  394. return false;
  395. if (activeElement === body)
  396. return false;
  397. switch (activeElement.tagName) {
  398. case "INPUT":
  399. case "TEXTAREA":
  400. return true;
  401. }
  402. return activeElement.hasAttribute("contenteditable");
  403. };
  404. const isTypedCharValid = ({
  405. keyCode,
  406. metaKey,
  407. ctrlKey,
  408. altKey
  409. }) => {
  410. if (metaKey || ctrlKey || altKey)
  411. return false;
  412. if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)
  413. return true;
  414. if (keyCode >= 65 && keyCode <= 90)
  415. return true;
  416. return false;
  417. };
  418. function onStartTyping(callback, options = {}) {
  419. const { document: document2 = defaultDocument } = options;
  420. const keydown = (event) => {
  421. !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);
  422. };
  423. if (document2)
  424. useEventListener(document2, "keydown", keydown, { passive: true });
  425. }
  426. function templateRef(key, initialValue = null) {
  427. const instance = vueDemi.getCurrentInstance();
  428. let _trigger = () => {
  429. };
  430. const element = vueDemi.customRef((track, trigger) => {
  431. _trigger = trigger;
  432. return {
  433. get() {
  434. var _a, _b;
  435. track();
  436. return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;
  437. },
  438. set() {
  439. }
  440. };
  441. });
  442. shared.tryOnMounted(_trigger);
  443. vueDemi.onUpdated(_trigger);
  444. return element;
  445. }
  446. function useActiveElement(options = {}) {
  447. const { window = defaultWindow } = options;
  448. const activeElement = shared.computedWithControl(() => null, () => window == null ? void 0 : window.document.activeElement);
  449. if (window) {
  450. useEventListener(window, "blur", (event) => {
  451. if (event.relatedTarget === null)
  452. return;
  453. activeElement.trigger();
  454. }, true);
  455. useEventListener(window, "focus", activeElement.trigger, true);
  456. }
  457. return activeElement;
  458. }
  459. function useAsyncQueue(tasks, options = {}) {
  460. const {
  461. interrupt = true,
  462. onError = shared.noop,
  463. onFinished = shared.noop
  464. } = options;
  465. const promiseState = {
  466. pending: "pending",
  467. rejected: "rejected",
  468. fulfilled: "fulfilled"
  469. };
  470. const initialResult = Array.from(new Array(tasks.length), () => ({ state: promiseState.pending, data: null }));
  471. const result = vueDemi.reactive(initialResult);
  472. const activeIndex = vueDemi.ref(-1);
  473. if (!tasks || tasks.length === 0) {
  474. onFinished();
  475. return {
  476. activeIndex,
  477. result
  478. };
  479. }
  480. function updateResult(state, res) {
  481. activeIndex.value++;
  482. result[activeIndex.value].data = res;
  483. result[activeIndex.value].state = state;
  484. }
  485. tasks.reduce((prev, curr) => {
  486. return prev.then((prevRes) => {
  487. var _a;
  488. if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {
  489. onFinished();
  490. return;
  491. }
  492. return curr(prevRes).then((currentRes) => {
  493. updateResult(promiseState.fulfilled, currentRes);
  494. activeIndex.value === tasks.length - 1 && onFinished();
  495. return currentRes;
  496. });
  497. }).catch((e) => {
  498. updateResult(promiseState.rejected, e);
  499. onError();
  500. return e;
  501. });
  502. }, Promise.resolve());
  503. return {
  504. activeIndex,
  505. result
  506. };
  507. }
  508. function useAsyncState(promise, initialState, options) {
  509. const {
  510. immediate = true,
  511. delay = 0,
  512. onError = shared.noop,
  513. onSuccess = shared.noop,
  514. resetOnExecute = true,
  515. shallow = true,
  516. throwError
  517. } = options != null ? options : {};
  518. const state = shallow ? vueDemi.shallowRef(initialState) : vueDemi.ref(initialState);
  519. const isReady = vueDemi.ref(false);
  520. const isLoading = vueDemi.ref(false);
  521. const error = vueDemi.ref(void 0);
  522. async function execute(delay2 = 0, ...args) {
  523. if (resetOnExecute)
  524. state.value = initialState;
  525. error.value = void 0;
  526. isReady.value = false;
  527. isLoading.value = true;
  528. if (delay2 > 0)
  529. await shared.promiseTimeout(delay2);
  530. const _promise = typeof promise === "function" ? promise(...args) : promise;
  531. try {
  532. const data = await _promise;
  533. state.value = data;
  534. isReady.value = true;
  535. onSuccess(data);
  536. } catch (e) {
  537. error.value = e;
  538. onError(e);
  539. if (throwError)
  540. throw error;
  541. } finally {
  542. isLoading.value = false;
  543. }
  544. return state.value;
  545. }
  546. if (immediate)
  547. execute(delay);
  548. return {
  549. state,
  550. isReady,
  551. isLoading,
  552. error,
  553. execute
  554. };
  555. }
  556. const defaults = {
  557. array: (v) => JSON.stringify(v),
  558. object: (v) => JSON.stringify(v),
  559. set: (v) => JSON.stringify(Array.from(v)),
  560. map: (v) => JSON.stringify(Object.fromEntries(v)),
  561. null: () => ""
  562. };
  563. function getDefaultSerialization(target) {
  564. if (!target)
  565. return defaults.null;
  566. if (target instanceof Map)
  567. return defaults.map;
  568. else if (target instanceof Set)
  569. return defaults.set;
  570. else if (Array.isArray(target))
  571. return defaults.array;
  572. else
  573. return defaults.object;
  574. }
  575. function useBase64(target, options) {
  576. const base64 = vueDemi.ref("");
  577. const promise = vueDemi.ref();
  578. function execute() {
  579. if (!shared.isClient)
  580. return;
  581. promise.value = new Promise((resolve, reject) => {
  582. try {
  583. const _target = shared.resolveUnref(target);
  584. if (_target == null) {
  585. resolve("");
  586. } else if (typeof _target === "string") {
  587. resolve(blobToBase64(new Blob([_target], { type: "text/plain" })));
  588. } else if (_target instanceof Blob) {
  589. resolve(blobToBase64(_target));
  590. } else if (_target instanceof ArrayBuffer) {
  591. resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));
  592. } else if (_target instanceof HTMLCanvasElement) {
  593. resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));
  594. } else if (_target instanceof HTMLImageElement) {
  595. const img = _target.cloneNode(false);
  596. img.crossOrigin = "Anonymous";
  597. imgLoaded(img).then(() => {
  598. const canvas = document.createElement("canvas");
  599. const ctx = canvas.getContext("2d");
  600. canvas.width = img.width;
  601. canvas.height = img.height;
  602. ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
  603. resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));
  604. }).catch(reject);
  605. } else if (typeof _target === "object") {
  606. const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);
  607. const serialized = _serializeFn(_target);
  608. return resolve(blobToBase64(new Blob([serialized], { type: "application/json" })));
  609. } else {
  610. reject(new Error("target is unsupported types"));
  611. }
  612. } catch (error) {
  613. reject(error);
  614. }
  615. });
  616. promise.value.then((res) => base64.value = res);
  617. return promise.value;
  618. }
  619. if (vueDemi.isRef(target) || shared.isFunction(target))
  620. vueDemi.watch(target, execute, { immediate: true });
  621. else
  622. execute();
  623. return {
  624. base64,
  625. promise,
  626. execute
  627. };
  628. }
  629. function imgLoaded(img) {
  630. return new Promise((resolve, reject) => {
  631. if (!img.complete) {
  632. img.onload = () => {
  633. resolve();
  634. };
  635. img.onerror = reject;
  636. } else {
  637. resolve();
  638. }
  639. });
  640. }
  641. function blobToBase64(blob) {
  642. return new Promise((resolve, reject) => {
  643. const fr = new FileReader();
  644. fr.onload = (e) => {
  645. resolve(e.target.result);
  646. };
  647. fr.onerror = reject;
  648. fr.readAsDataURL(blob);
  649. });
  650. }
  651. function useSupported(callback, sync = false) {
  652. const isSupported = vueDemi.ref();
  653. const update = () => isSupported.value = Boolean(callback());
  654. update();
  655. shared.tryOnMounted(update, sync);
  656. return isSupported;
  657. }
  658. function useBattery({ navigator = defaultNavigator } = {}) {
  659. const events = ["chargingchange", "chargingtimechange", "dischargingtimechange", "levelchange"];
  660. const isSupported = useSupported(() => navigator && "getBattery" in navigator);
  661. const charging = vueDemi.ref(false);
  662. const chargingTime = vueDemi.ref(0);
  663. const dischargingTime = vueDemi.ref(0);
  664. const level = vueDemi.ref(1);
  665. let battery;
  666. function updateBatteryInfo() {
  667. charging.value = this.charging;
  668. chargingTime.value = this.chargingTime || 0;
  669. dischargingTime.value = this.dischargingTime || 0;
  670. level.value = this.level;
  671. }
  672. if (isSupported.value) {
  673. navigator.getBattery().then((_battery) => {
  674. battery = _battery;
  675. updateBatteryInfo.call(battery);
  676. for (const event of events)
  677. useEventListener(battery, event, updateBatteryInfo, { passive: true });
  678. });
  679. }
  680. return {
  681. isSupported,
  682. charging,
  683. chargingTime,
  684. dischargingTime,
  685. level
  686. };
  687. }
  688. function useBluetooth(options) {
  689. let {
  690. acceptAllDevices = false
  691. } = options || {};
  692. const {
  693. filters = void 0,
  694. optionalServices = void 0,
  695. navigator = defaultNavigator
  696. } = options || {};
  697. const isSupported = useSupported(() => navigator && "bluetooth" in navigator);
  698. const device = vueDemi.shallowRef(void 0);
  699. const error = vueDemi.shallowRef(null);
  700. vueDemi.watch(device, () => {
  701. connectToBluetoothGATTServer();
  702. });
  703. async function requestDevice() {
  704. if (!isSupported.value)
  705. return;
  706. error.value = null;
  707. if (filters && filters.length > 0)
  708. acceptAllDevices = false;
  709. try {
  710. device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({
  711. acceptAllDevices,
  712. filters,
  713. optionalServices
  714. }));
  715. } catch (err) {
  716. error.value = err;
  717. }
  718. }
  719. const server = vueDemi.ref();
  720. const isConnected = vueDemi.computed(() => {
  721. var _a;
  722. return ((_a = server.value) == null ? void 0 : _a.connected) || false;
  723. });
  724. async function connectToBluetoothGATTServer() {
  725. error.value = null;
  726. if (device.value && device.value.gatt) {
  727. device.value.addEventListener("gattserverdisconnected", () => {
  728. });
  729. try {
  730. server.value = await device.value.gatt.connect();
  731. } catch (err) {
  732. error.value = err;
  733. }
  734. }
  735. }
  736. shared.tryOnMounted(() => {
  737. var _a;
  738. if (device.value)
  739. (_a = device.value.gatt) == null ? void 0 : _a.connect();
  740. });
  741. shared.tryOnScopeDispose(() => {
  742. var _a;
  743. if (device.value)
  744. (_a = device.value.gatt) == null ? void 0 : _a.disconnect();
  745. });
  746. return {
  747. isSupported,
  748. isConnected,
  749. device,
  750. requestDevice,
  751. server,
  752. error
  753. };
  754. }
  755. function useMediaQuery(query, options = {}) {
  756. const { window = defaultWindow } = options;
  757. const isSupported = useSupported(() => window && "matchMedia" in window && typeof window.matchMedia === "function");
  758. let mediaQuery;
  759. const matches = vueDemi.ref(false);
  760. const cleanup = () => {
  761. if (!mediaQuery)
  762. return;
  763. if ("removeEventListener" in mediaQuery)
  764. mediaQuery.removeEventListener("change", update);
  765. else
  766. mediaQuery.removeListener(update);
  767. };
  768. const update = () => {
  769. if (!isSupported.value)
  770. return;
  771. cleanup();
  772. mediaQuery = window.matchMedia(shared.resolveRef(query).value);
  773. matches.value = mediaQuery.matches;
  774. if ("addEventListener" in mediaQuery)
  775. mediaQuery.addEventListener("change", update);
  776. else
  777. mediaQuery.addListener(update);
  778. };
  779. vueDemi.watchEffect(update);
  780. shared.tryOnScopeDispose(() => cleanup());
  781. return matches;
  782. }
  783. const breakpointsTailwind = {
  784. "sm": 640,
  785. "md": 768,
  786. "lg": 1024,
  787. "xl": 1280,
  788. "2xl": 1536
  789. };
  790. const breakpointsBootstrapV5 = {
  791. sm: 576,
  792. md: 768,
  793. lg: 992,
  794. xl: 1200,
  795. xxl: 1400
  796. };
  797. const breakpointsVuetify = {
  798. xs: 600,
  799. sm: 960,
  800. md: 1264,
  801. lg: 1904
  802. };
  803. const breakpointsAntDesign = {
  804. xs: 480,
  805. sm: 576,
  806. md: 768,
  807. lg: 992,
  808. xl: 1200,
  809. xxl: 1600
  810. };
  811. const breakpointsQuasar = {
  812. xs: 600,
  813. sm: 1024,
  814. md: 1440,
  815. lg: 1920
  816. };
  817. const breakpointsSematic = {
  818. mobileS: 320,
  819. mobileM: 375,
  820. mobileL: 425,
  821. tablet: 768,
  822. laptop: 1024,
  823. laptopL: 1440,
  824. desktop4K: 2560
  825. };
  826. const breakpointsMasterCss = {
  827. "3xs": 360,
  828. "2xs": 480,
  829. "xs": 600,
  830. "sm": 768,
  831. "md": 1024,
  832. "lg": 1280,
  833. "xl": 1440,
  834. "2xl": 1600,
  835. "3xl": 1920,
  836. "4xl": 2560
  837. };
  838. var __defProp$l = Object.defineProperty;
  839. var __getOwnPropSymbols$n = Object.getOwnPropertySymbols;
  840. var __hasOwnProp$n = Object.prototype.hasOwnProperty;
  841. var __propIsEnum$n = Object.prototype.propertyIsEnumerable;
  842. var __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  843. var __spreadValues$l = (a, b) => {
  844. for (var prop in b || (b = {}))
  845. if (__hasOwnProp$n.call(b, prop))
  846. __defNormalProp$l(a, prop, b[prop]);
  847. if (__getOwnPropSymbols$n)
  848. for (var prop of __getOwnPropSymbols$n(b)) {
  849. if (__propIsEnum$n.call(b, prop))
  850. __defNormalProp$l(a, prop, b[prop]);
  851. }
  852. return a;
  853. };
  854. function useBreakpoints(breakpoints, options = {}) {
  855. function getValue(k, delta) {
  856. let v = breakpoints[k];
  857. if (delta != null)
  858. v = shared.increaseWithUnit(v, delta);
  859. if (typeof v === "number")
  860. v = `${v}px`;
  861. return v;
  862. }
  863. const { window = defaultWindow } = options;
  864. function match(query) {
  865. if (!window)
  866. return false;
  867. return window.matchMedia(query).matches;
  868. }
  869. const greaterOrEqual = (k) => {
  870. return useMediaQuery(`(min-width: ${getValue(k)})`, options);
  871. };
  872. const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {
  873. Object.defineProperty(shortcuts, k, {
  874. get: () => greaterOrEqual(k),
  875. enumerable: true,
  876. configurable: true
  877. });
  878. return shortcuts;
  879. }, {});
  880. return __spreadValues$l({
  881. greater(k) {
  882. return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`, options);
  883. },
  884. greaterOrEqual,
  885. smaller(k) {
  886. return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`, options);
  887. },
  888. smallerOrEqual(k) {
  889. return useMediaQuery(`(max-width: ${getValue(k)})`, options);
  890. },
  891. between(a, b) {
  892. return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);
  893. },
  894. isGreater(k) {
  895. return match(`(min-width: ${getValue(k, 0.1)})`);
  896. },
  897. isGreaterOrEqual(k) {
  898. return match(`(min-width: ${getValue(k)})`);
  899. },
  900. isSmaller(k) {
  901. return match(`(max-width: ${getValue(k, -0.1)})`);
  902. },
  903. isSmallerOrEqual(k) {
  904. return match(`(max-width: ${getValue(k)})`);
  905. },
  906. isInBetween(a, b) {
  907. return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);
  908. }
  909. }, shortcutMethods);
  910. }
  911. const useBroadcastChannel = (options) => {
  912. const {
  913. name,
  914. window = defaultWindow
  915. } = options;
  916. const isSupported = useSupported(() => window && "BroadcastChannel" in window);
  917. const isClosed = vueDemi.ref(false);
  918. const channel = vueDemi.ref();
  919. const data = vueDemi.ref();
  920. const error = vueDemi.ref(null);
  921. const post = (data2) => {
  922. if (channel.value)
  923. channel.value.postMessage(data2);
  924. };
  925. const close = () => {
  926. if (channel.value)
  927. channel.value.close();
  928. isClosed.value = true;
  929. };
  930. if (isSupported.value) {
  931. shared.tryOnMounted(() => {
  932. error.value = null;
  933. channel.value = new BroadcastChannel(name);
  934. channel.value.addEventListener("message", (e) => {
  935. data.value = e.data;
  936. }, { passive: true });
  937. channel.value.addEventListener("messageerror", (e) => {
  938. error.value = e;
  939. }, { passive: true });
  940. channel.value.addEventListener("close", () => {
  941. isClosed.value = true;
  942. });
  943. });
  944. }
  945. shared.tryOnScopeDispose(() => {
  946. close();
  947. });
  948. return {
  949. isSupported,
  950. channel,
  951. data,
  952. post,
  953. close,
  954. error,
  955. isClosed
  956. };
  957. };
  958. function useBrowserLocation({ window = defaultWindow } = {}) {
  959. const buildState = (trigger) => {
  960. const { state: state2, length } = (window == null ? void 0 : window.history) || {};
  961. const { hash, host, hostname, href, origin, pathname, port, protocol, search } = (window == null ? void 0 : window.location) || {};
  962. return {
  963. trigger,
  964. state: state2,
  965. length,
  966. hash,
  967. host,
  968. hostname,
  969. href,
  970. origin,
  971. pathname,
  972. port,
  973. protocol,
  974. search
  975. };
  976. };
  977. const state = vueDemi.ref(buildState("load"));
  978. if (window) {
  979. useEventListener(window, "popstate", () => state.value = buildState("popstate"), { passive: true });
  980. useEventListener(window, "hashchange", () => state.value = buildState("hashchange"), { passive: true });
  981. }
  982. return state;
  983. }
  984. function useCached(refValue, comparator = (a, b) => a === b, watchOptions) {
  985. const cachedValue = vueDemi.ref(refValue.value);
  986. vueDemi.watch(() => refValue.value, (value) => {
  987. if (!comparator(value, cachedValue.value))
  988. cachedValue.value = value;
  989. }, watchOptions);
  990. return cachedValue;
  991. }
  992. function useClipboard(options = {}) {
  993. const {
  994. navigator = defaultNavigator,
  995. read = false,
  996. source,
  997. copiedDuring = 1500,
  998. legacy = false
  999. } = options;
  1000. const events = ["copy", "cut"];
  1001. const isClipboardApiSupported = useSupported(() => navigator && "clipboard" in navigator);
  1002. const isSupported = vueDemi.computed(() => isClipboardApiSupported.value || legacy);
  1003. const text = vueDemi.ref("");
  1004. const copied = vueDemi.ref(false);
  1005. const timeout = shared.useTimeoutFn(() => copied.value = false, copiedDuring);
  1006. function updateText() {
  1007. if (isClipboardApiSupported.value) {
  1008. navigator.clipboard.readText().then((value) => {
  1009. text.value = value;
  1010. });
  1011. } else {
  1012. text.value = legacyRead();
  1013. }
  1014. }
  1015. if (isSupported.value && read) {
  1016. for (const event of events)
  1017. useEventListener(event, updateText);
  1018. }
  1019. async function copy(value = shared.resolveUnref(source)) {
  1020. if (isSupported.value && value != null) {
  1021. if (isClipboardApiSupported.value)
  1022. await navigator.clipboard.writeText(value);
  1023. else
  1024. legacyCopy(value);
  1025. text.value = value;
  1026. copied.value = true;
  1027. timeout.start();
  1028. }
  1029. }
  1030. function legacyCopy(value) {
  1031. const ta = document.createElement("textarea");
  1032. ta.value = value != null ? value : "";
  1033. ta.style.position = "absolute";
  1034. ta.style.opacity = "0";
  1035. document.body.appendChild(ta);
  1036. ta.select();
  1037. document.execCommand("copy");
  1038. ta.remove();
  1039. }
  1040. function legacyRead() {
  1041. var _a, _b, _c;
  1042. return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : "";
  1043. }
  1044. return {
  1045. isSupported,
  1046. text,
  1047. copied,
  1048. copy
  1049. };
  1050. }
  1051. var __defProp$k = Object.defineProperty;
  1052. var __defProps$8 = Object.defineProperties;
  1053. var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
  1054. var __getOwnPropSymbols$m = Object.getOwnPropertySymbols;
  1055. var __hasOwnProp$m = Object.prototype.hasOwnProperty;
  1056. var __propIsEnum$m = Object.prototype.propertyIsEnumerable;
  1057. var __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  1058. var __spreadValues$k = (a, b) => {
  1059. for (var prop in b || (b = {}))
  1060. if (__hasOwnProp$m.call(b, prop))
  1061. __defNormalProp$k(a, prop, b[prop]);
  1062. if (__getOwnPropSymbols$m)
  1063. for (var prop of __getOwnPropSymbols$m(b)) {
  1064. if (__propIsEnum$m.call(b, prop))
  1065. __defNormalProp$k(a, prop, b[prop]);
  1066. }
  1067. return a;
  1068. };
  1069. var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
  1070. function cloneFnJSON(source) {
  1071. return JSON.parse(JSON.stringify(source));
  1072. }
  1073. function useCloned(source, options = {}) {
  1074. const cloned = vueDemi.ref({});
  1075. const {
  1076. manual,
  1077. clone = cloneFnJSON,
  1078. deep = true,
  1079. immediate = true
  1080. } = options;
  1081. function sync() {
  1082. cloned.value = clone(vueDemi.unref(source));
  1083. }
  1084. if (!manual && vueDemi.isRef(source)) {
  1085. vueDemi.watch(source, sync, __spreadProps$8(__spreadValues$k({}, options), {
  1086. deep,
  1087. immediate
  1088. }));
  1089. } else {
  1090. sync();
  1091. }
  1092. return { cloned, sync };
  1093. }
  1094. const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
  1095. const globalKey = "__vueuse_ssr_handlers__";
  1096. _global[globalKey] = _global[globalKey] || {};
  1097. const handlers = _global[globalKey];
  1098. function getSSRHandler(key, fallback) {
  1099. return handlers[key] || fallback;
  1100. }
  1101. function setSSRHandler(key, fn) {
  1102. handlers[key] = fn;
  1103. }
  1104. function guessSerializerType(rawInit) {
  1105. return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : rawInit instanceof Date ? "date" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : !Number.isNaN(rawInit) ? "number" : "any";
  1106. }
  1107. var __defProp$j = Object.defineProperty;
  1108. var __getOwnPropSymbols$l = Object.getOwnPropertySymbols;
  1109. var __hasOwnProp$l = Object.prototype.hasOwnProperty;
  1110. var __propIsEnum$l = Object.prototype.propertyIsEnumerable;
  1111. var __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  1112. var __spreadValues$j = (a, b) => {
  1113. for (var prop in b || (b = {}))
  1114. if (__hasOwnProp$l.call(b, prop))
  1115. __defNormalProp$j(a, prop, b[prop]);
  1116. if (__getOwnPropSymbols$l)
  1117. for (var prop of __getOwnPropSymbols$l(b)) {
  1118. if (__propIsEnum$l.call(b, prop))
  1119. __defNormalProp$j(a, prop, b[prop]);
  1120. }
  1121. return a;
  1122. };
  1123. const StorageSerializers = {
  1124. boolean: {
  1125. read: (v) => v === "true",
  1126. write: (v) => String(v)
  1127. },
  1128. object: {
  1129. read: (v) => JSON.parse(v),
  1130. write: (v) => JSON.stringify(v)
  1131. },
  1132. number: {
  1133. read: (v) => Number.parseFloat(v),
  1134. write: (v) => String(v)
  1135. },
  1136. any: {
  1137. read: (v) => v,
  1138. write: (v) => String(v)
  1139. },
  1140. string: {
  1141. read: (v) => v,
  1142. write: (v) => String(v)
  1143. },
  1144. map: {
  1145. read: (v) => new Map(JSON.parse(v)),
  1146. write: (v) => JSON.stringify(Array.from(v.entries()))
  1147. },
  1148. set: {
  1149. read: (v) => new Set(JSON.parse(v)),
  1150. write: (v) => JSON.stringify(Array.from(v))
  1151. },
  1152. date: {
  1153. read: (v) => new Date(v),
  1154. write: (v) => v.toISOString()
  1155. }
  1156. };
  1157. function useStorage(key, defaults, storage, options = {}) {
  1158. var _a;
  1159. const {
  1160. flush = "pre",
  1161. deep = true,
  1162. listenToStorageChanges = true,
  1163. writeDefaults = true,
  1164. mergeDefaults = false,
  1165. shallow,
  1166. window = defaultWindow,
  1167. eventFilter,
  1168. onError = (e) => {
  1169. console.error(e);
  1170. }
  1171. } = options;
  1172. const data = (shallow ? vueDemi.shallowRef : vueDemi.ref)(defaults);
  1173. if (!storage) {
  1174. try {
  1175. storage = getSSRHandler("getDefaultStorage", () => {
  1176. var _a2;
  1177. return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;
  1178. })();
  1179. } catch (e) {
  1180. onError(e);
  1181. }
  1182. }
  1183. if (!storage)
  1184. return data;
  1185. const rawInit = shared.resolveUnref(defaults);
  1186. const type = guessSerializerType(rawInit);
  1187. const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];
  1188. const { pause: pauseWatch, resume: resumeWatch } = shared.pausableWatch(data, () => write(data.value), { flush, deep, eventFilter });
  1189. if (window && listenToStorageChanges)
  1190. useEventListener(window, "storage", update);
  1191. update();
  1192. return data;
  1193. function write(v) {
  1194. try {
  1195. if (v == null) {
  1196. storage.removeItem(key);
  1197. } else {
  1198. const serialized = serializer.write(v);
  1199. const oldValue = storage.getItem(key);
  1200. if (oldValue !== serialized) {
  1201. storage.setItem(key, serialized);
  1202. if (window) {
  1203. window == null ? void 0 : window.dispatchEvent(new StorageEvent("storage", {
  1204. key,
  1205. oldValue,
  1206. newValue: serialized,
  1207. storageArea: storage
  1208. }));
  1209. }
  1210. }
  1211. }
  1212. } catch (e) {
  1213. onError(e);
  1214. }
  1215. }
  1216. function read(event) {
  1217. const rawValue = event ? event.newValue : storage.getItem(key);
  1218. if (rawValue == null) {
  1219. if (writeDefaults && rawInit !== null)
  1220. storage.setItem(key, serializer.write(rawInit));
  1221. return rawInit;
  1222. } else if (!event && mergeDefaults) {
  1223. const value = serializer.read(rawValue);
  1224. if (shared.isFunction(mergeDefaults))
  1225. return mergeDefaults(value, rawInit);
  1226. else if (type === "object" && !Array.isArray(value))
  1227. return __spreadValues$j(__spreadValues$j({}, rawInit), value);
  1228. return value;
  1229. } else if (typeof rawValue !== "string") {
  1230. return rawValue;
  1231. } else {
  1232. return serializer.read(rawValue);
  1233. }
  1234. }
  1235. function update(event) {
  1236. if (event && event.storageArea !== storage)
  1237. return;
  1238. if (event && event.key == null) {
  1239. data.value = rawInit;
  1240. return;
  1241. }
  1242. if (event && event.key !== key)
  1243. return;
  1244. pauseWatch();
  1245. try {
  1246. data.value = read(event);
  1247. } catch (e) {
  1248. onError(e);
  1249. } finally {
  1250. if (event)
  1251. vueDemi.nextTick(resumeWatch);
  1252. else
  1253. resumeWatch();
  1254. }
  1255. }
  1256. }
  1257. function usePreferredDark(options) {
  1258. return useMediaQuery("(prefers-color-scheme: dark)", options);
  1259. }
  1260. var __defProp$i = Object.defineProperty;
  1261. var __getOwnPropSymbols$k = Object.getOwnPropertySymbols;
  1262. var __hasOwnProp$k = Object.prototype.hasOwnProperty;
  1263. var __propIsEnum$k = Object.prototype.propertyIsEnumerable;
  1264. var __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  1265. var __spreadValues$i = (a, b) => {
  1266. for (var prop in b || (b = {}))
  1267. if (__hasOwnProp$k.call(b, prop))
  1268. __defNormalProp$i(a, prop, b[prop]);
  1269. if (__getOwnPropSymbols$k)
  1270. for (var prop of __getOwnPropSymbols$k(b)) {
  1271. if (__propIsEnum$k.call(b, prop))
  1272. __defNormalProp$i(a, prop, b[prop]);
  1273. }
  1274. return a;
  1275. };
  1276. function useColorMode(options = {}) {
  1277. const {
  1278. selector = "html",
  1279. attribute = "class",
  1280. initialValue = "auto",
  1281. window = defaultWindow,
  1282. storage,
  1283. storageKey = "vueuse-color-scheme",
  1284. listenToStorageChanges = true,
  1285. storageRef,
  1286. emitAuto
  1287. } = options;
  1288. const modes = __spreadValues$i({
  1289. auto: "",
  1290. light: "light",
  1291. dark: "dark"
  1292. }, options.modes || {});
  1293. const preferredDark = usePreferredDark({ window });
  1294. const preferredMode = vueDemi.computed(() => preferredDark.value ? "dark" : "light");
  1295. const store = storageRef || (storageKey == null ? vueDemi.ref(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));
  1296. const state = vueDemi.computed({
  1297. get() {
  1298. return store.value === "auto" && !emitAuto ? preferredMode.value : store.value;
  1299. },
  1300. set(v) {
  1301. store.value = v;
  1302. }
  1303. });
  1304. const updateHTMLAttrs = getSSRHandler("updateHTMLAttrs", (selector2, attribute2, value) => {
  1305. const el = window == null ? void 0 : window.document.querySelector(selector2);
  1306. if (!el)
  1307. return;
  1308. if (attribute2 === "class") {
  1309. const current = value.split(/\s/g);
  1310. Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => {
  1311. if (current.includes(v))
  1312. el.classList.add(v);
  1313. else
  1314. el.classList.remove(v);
  1315. });
  1316. } else {
  1317. el.setAttribute(attribute2, value);
  1318. }
  1319. });
  1320. function defaultOnChanged(mode) {
  1321. var _a;
  1322. const resolvedMode = mode === "auto" ? preferredMode.value : mode;
  1323. updateHTMLAttrs(selector, attribute, (_a = modes[resolvedMode]) != null ? _a : resolvedMode);
  1324. }
  1325. function onChanged(mode) {
  1326. if (options.onChanged)
  1327. options.onChanged(mode, defaultOnChanged);
  1328. else
  1329. defaultOnChanged(mode);
  1330. }
  1331. vueDemi.watch(state, onChanged, { flush: "post", immediate: true });
  1332. if (emitAuto)
  1333. vueDemi.watch(preferredMode, () => onChanged(state.value), { flush: "post" });
  1334. shared.tryOnMounted(() => onChanged(state.value));
  1335. return state;
  1336. }
  1337. function useConfirmDialog(revealed = vueDemi.ref(false)) {
  1338. const confirmHook = shared.createEventHook();
  1339. const cancelHook = shared.createEventHook();
  1340. const revealHook = shared.createEventHook();
  1341. let _resolve = shared.noop;
  1342. const reveal = (data) => {
  1343. revealHook.trigger(data);
  1344. revealed.value = true;
  1345. return new Promise((resolve) => {
  1346. _resolve = resolve;
  1347. });
  1348. };
  1349. const confirm = (data) => {
  1350. revealed.value = false;
  1351. confirmHook.trigger(data);
  1352. _resolve({ data, isCanceled: false });
  1353. };
  1354. const cancel = (data) => {
  1355. revealed.value = false;
  1356. cancelHook.trigger(data);
  1357. _resolve({ data, isCanceled: true });
  1358. };
  1359. return {
  1360. isRevealed: vueDemi.computed(() => revealed.value),
  1361. reveal,
  1362. confirm,
  1363. cancel,
  1364. onReveal: revealHook.on,
  1365. onConfirm: confirmHook.on,
  1366. onCancel: cancelHook.on
  1367. };
  1368. }
  1369. function useCssVar(prop, target, { window = defaultWindow, initialValue = "" } = {}) {
  1370. const variable = vueDemi.ref(initialValue);
  1371. const elRef = vueDemi.computed(() => {
  1372. var _a;
  1373. return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);
  1374. });
  1375. vueDemi.watch([elRef, () => shared.resolveUnref(prop)], ([el, prop2]) => {
  1376. var _a;
  1377. if (el && window) {
  1378. const value = (_a = window.getComputedStyle(el).getPropertyValue(prop2)) == null ? void 0 : _a.trim();
  1379. variable.value = value || initialValue;
  1380. }
  1381. }, { immediate: true });
  1382. vueDemi.watch(variable, (val) => {
  1383. var _a;
  1384. if ((_a = elRef.value) == null ? void 0 : _a.style)
  1385. elRef.value.style.setProperty(shared.resolveUnref(prop), val);
  1386. });
  1387. return variable;
  1388. }
  1389. function useCurrentElement() {
  1390. const vm = vueDemi.getCurrentInstance();
  1391. const currentElement = shared.computedWithControl(() => null, () => vm.proxy.$el);
  1392. vueDemi.onUpdated(currentElement.trigger);
  1393. vueDemi.onMounted(currentElement.trigger);
  1394. return currentElement;
  1395. }
  1396. function useCycleList(list, options) {
  1397. var _a;
  1398. const state = vueDemi.shallowRef((_a = options == null ? void 0 : options.initialValue) != null ? _a : list[0]);
  1399. const index = vueDemi.computed({
  1400. get() {
  1401. var _a2;
  1402. let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, list) : list.indexOf(state.value);
  1403. if (index2 < 0)
  1404. index2 = (_a2 = options == null ? void 0 : options.fallbackIndex) != null ? _a2 : 0;
  1405. return index2;
  1406. },
  1407. set(v) {
  1408. set(v);
  1409. }
  1410. });
  1411. function set(i) {
  1412. const length = list.length;
  1413. const index2 = (i % length + length) % length;
  1414. const value = list[index2];
  1415. state.value = value;
  1416. return value;
  1417. }
  1418. function shift(delta = 1) {
  1419. return set(index.value + delta);
  1420. }
  1421. function next(n = 1) {
  1422. return shift(n);
  1423. }
  1424. function prev(n = 1) {
  1425. return shift(-n);
  1426. }
  1427. return {
  1428. state,
  1429. index,
  1430. next,
  1431. prev
  1432. };
  1433. }
  1434. var __defProp$h = Object.defineProperty;
  1435. var __defProps$7 = Object.defineProperties;
  1436. var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
  1437. var __getOwnPropSymbols$j = Object.getOwnPropertySymbols;
  1438. var __hasOwnProp$j = Object.prototype.hasOwnProperty;
  1439. var __propIsEnum$j = Object.prototype.propertyIsEnumerable;
  1440. var __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  1441. var __spreadValues$h = (a, b) => {
  1442. for (var prop in b || (b = {}))
  1443. if (__hasOwnProp$j.call(b, prop))
  1444. __defNormalProp$h(a, prop, b[prop]);
  1445. if (__getOwnPropSymbols$j)
  1446. for (var prop of __getOwnPropSymbols$j(b)) {
  1447. if (__propIsEnum$j.call(b, prop))
  1448. __defNormalProp$h(a, prop, b[prop]);
  1449. }
  1450. return a;
  1451. };
  1452. var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
  1453. function useDark(options = {}) {
  1454. const {
  1455. valueDark = "dark",
  1456. valueLight = "",
  1457. window = defaultWindow
  1458. } = options;
  1459. const mode = useColorMode(__spreadProps$7(__spreadValues$h({}, options), {
  1460. onChanged: (mode2, defaultHandler) => {
  1461. var _a;
  1462. if (options.onChanged)
  1463. (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === "dark");
  1464. else
  1465. defaultHandler(mode2);
  1466. },
  1467. modes: {
  1468. dark: valueDark,
  1469. light: valueLight
  1470. }
  1471. }));
  1472. const preferredDark = usePreferredDark({ window });
  1473. const isDark = vueDemi.computed({
  1474. get() {
  1475. return mode.value === "dark";
  1476. },
  1477. set(v) {
  1478. if (v === preferredDark.value)
  1479. mode.value = "auto";
  1480. else
  1481. mode.value = v ? "dark" : "light";
  1482. }
  1483. });
  1484. return isDark;
  1485. }
  1486. const fnBypass = (v) => v;
  1487. const fnSetSource = (source, value) => source.value = value;
  1488. function defaultDump(clone) {
  1489. return clone ? shared.isFunction(clone) ? clone : cloneFnJSON : fnBypass;
  1490. }
  1491. function defaultParse(clone) {
  1492. return clone ? shared.isFunction(clone) ? clone : cloneFnJSON : fnBypass;
  1493. }
  1494. function useManualRefHistory(source, options = {}) {
  1495. const {
  1496. clone = false,
  1497. dump = defaultDump(clone),
  1498. parse = defaultParse(clone),
  1499. setSource = fnSetSource
  1500. } = options;
  1501. function _createHistoryRecord() {
  1502. return vueDemi.markRaw({
  1503. snapshot: dump(source.value),
  1504. timestamp: shared.timestamp()
  1505. });
  1506. }
  1507. const last = vueDemi.ref(_createHistoryRecord());
  1508. const undoStack = vueDemi.ref([]);
  1509. const redoStack = vueDemi.ref([]);
  1510. const _setSource = (record) => {
  1511. setSource(source, parse(record.snapshot));
  1512. last.value = record;
  1513. };
  1514. const commit = () => {
  1515. undoStack.value.unshift(last.value);
  1516. last.value = _createHistoryRecord();
  1517. if (options.capacity && undoStack.value.length > options.capacity)
  1518. undoStack.value.splice(options.capacity, Infinity);
  1519. if (redoStack.value.length)
  1520. redoStack.value.splice(0, redoStack.value.length);
  1521. };
  1522. const clear = () => {
  1523. undoStack.value.splice(0, undoStack.value.length);
  1524. redoStack.value.splice(0, redoStack.value.length);
  1525. };
  1526. const undo = () => {
  1527. const state = undoStack.value.shift();
  1528. if (state) {
  1529. redoStack.value.unshift(last.value);
  1530. _setSource(state);
  1531. }
  1532. };
  1533. const redo = () => {
  1534. const state = redoStack.value.shift();
  1535. if (state) {
  1536. undoStack.value.unshift(last.value);
  1537. _setSource(state);
  1538. }
  1539. };
  1540. const reset = () => {
  1541. _setSource(last.value);
  1542. };
  1543. const history = vueDemi.computed(() => [last.value, ...undoStack.value]);
  1544. const canUndo = vueDemi.computed(() => undoStack.value.length > 0);
  1545. const canRedo = vueDemi.computed(() => redoStack.value.length > 0);
  1546. return {
  1547. source,
  1548. undoStack,
  1549. redoStack,
  1550. last,
  1551. history,
  1552. canUndo,
  1553. canRedo,
  1554. clear,
  1555. commit,
  1556. reset,
  1557. undo,
  1558. redo
  1559. };
  1560. }
  1561. var __defProp$g = Object.defineProperty;
  1562. var __defProps$6 = Object.defineProperties;
  1563. var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
  1564. var __getOwnPropSymbols$i = Object.getOwnPropertySymbols;
  1565. var __hasOwnProp$i = Object.prototype.hasOwnProperty;
  1566. var __propIsEnum$i = Object.prototype.propertyIsEnumerable;
  1567. var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  1568. var __spreadValues$g = (a, b) => {
  1569. for (var prop in b || (b = {}))
  1570. if (__hasOwnProp$i.call(b, prop))
  1571. __defNormalProp$g(a, prop, b[prop]);
  1572. if (__getOwnPropSymbols$i)
  1573. for (var prop of __getOwnPropSymbols$i(b)) {
  1574. if (__propIsEnum$i.call(b, prop))
  1575. __defNormalProp$g(a, prop, b[prop]);
  1576. }
  1577. return a;
  1578. };
  1579. var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
  1580. function useRefHistory(source, options = {}) {
  1581. const {
  1582. deep = false,
  1583. flush = "pre",
  1584. eventFilter
  1585. } = options;
  1586. const {
  1587. eventFilter: composedFilter,
  1588. pause,
  1589. resume: resumeTracking,
  1590. isActive: isTracking
  1591. } = shared.pausableFilter(eventFilter);
  1592. const {
  1593. ignoreUpdates,
  1594. ignorePrevAsyncUpdates,
  1595. stop
  1596. } = shared.watchIgnorable(source, commit, { deep, flush, eventFilter: composedFilter });
  1597. function setSource(source2, value) {
  1598. ignorePrevAsyncUpdates();
  1599. ignoreUpdates(() => {
  1600. source2.value = value;
  1601. });
  1602. }
  1603. const manualHistory = useManualRefHistory(source, __spreadProps$6(__spreadValues$g({}, options), { clone: options.clone || deep, setSource }));
  1604. const { clear, commit: manualCommit } = manualHistory;
  1605. function commit() {
  1606. ignorePrevAsyncUpdates();
  1607. manualCommit();
  1608. }
  1609. function resume(commitNow) {
  1610. resumeTracking();
  1611. if (commitNow)
  1612. commit();
  1613. }
  1614. function batch(fn) {
  1615. let canceled = false;
  1616. const cancel = () => canceled = true;
  1617. ignoreUpdates(() => {
  1618. fn(cancel);
  1619. });
  1620. if (!canceled)
  1621. commit();
  1622. }
  1623. function dispose() {
  1624. stop();
  1625. clear();
  1626. }
  1627. return __spreadProps$6(__spreadValues$g({}, manualHistory), {
  1628. isTracking,
  1629. pause,
  1630. resume,
  1631. commit,
  1632. batch,
  1633. dispose
  1634. });
  1635. }
  1636. var __defProp$f = Object.defineProperty;
  1637. var __defProps$5 = Object.defineProperties;
  1638. var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
  1639. var __getOwnPropSymbols$h = Object.getOwnPropertySymbols;
  1640. var __hasOwnProp$h = Object.prototype.hasOwnProperty;
  1641. var __propIsEnum$h = Object.prototype.propertyIsEnumerable;
  1642. var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  1643. var __spreadValues$f = (a, b) => {
  1644. for (var prop in b || (b = {}))
  1645. if (__hasOwnProp$h.call(b, prop))
  1646. __defNormalProp$f(a, prop, b[prop]);
  1647. if (__getOwnPropSymbols$h)
  1648. for (var prop of __getOwnPropSymbols$h(b)) {
  1649. if (__propIsEnum$h.call(b, prop))
  1650. __defNormalProp$f(a, prop, b[prop]);
  1651. }
  1652. return a;
  1653. };
  1654. var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
  1655. function useDebouncedRefHistory(source, options = {}) {
  1656. const filter = options.debounce ? shared.debounceFilter(options.debounce) : void 0;
  1657. const history = useRefHistory(source, __spreadProps$5(__spreadValues$f({}, options), { eventFilter: filter }));
  1658. return __spreadValues$f({}, history);
  1659. }
  1660. function useDeviceMotion(options = {}) {
  1661. const {
  1662. window = defaultWindow,
  1663. eventFilter = shared.bypassFilter
  1664. } = options;
  1665. const acceleration = vueDemi.ref({ x: null, y: null, z: null });
  1666. const rotationRate = vueDemi.ref({ alpha: null, beta: null, gamma: null });
  1667. const interval = vueDemi.ref(0);
  1668. const accelerationIncludingGravity = vueDemi.ref({
  1669. x: null,
  1670. y: null,
  1671. z: null
  1672. });
  1673. if (window) {
  1674. const onDeviceMotion = shared.createFilterWrapper(eventFilter, (event) => {
  1675. acceleration.value = event.acceleration;
  1676. accelerationIncludingGravity.value = event.accelerationIncludingGravity;
  1677. rotationRate.value = event.rotationRate;
  1678. interval.value = event.interval;
  1679. });
  1680. useEventListener(window, "devicemotion", onDeviceMotion);
  1681. }
  1682. return {
  1683. acceleration,
  1684. accelerationIncludingGravity,
  1685. rotationRate,
  1686. interval
  1687. };
  1688. }
  1689. function useDeviceOrientation(options = {}) {
  1690. const { window = defaultWindow } = options;
  1691. const isSupported = useSupported(() => window && "DeviceOrientationEvent" in window);
  1692. const isAbsolute = vueDemi.ref(false);
  1693. const alpha = vueDemi.ref(null);
  1694. const beta = vueDemi.ref(null);
  1695. const gamma = vueDemi.ref(null);
  1696. if (window && isSupported.value) {
  1697. useEventListener(window, "deviceorientation", (event) => {
  1698. isAbsolute.value = event.absolute;
  1699. alpha.value = event.alpha;
  1700. beta.value = event.beta;
  1701. gamma.value = event.gamma;
  1702. });
  1703. }
  1704. return {
  1705. isSupported,
  1706. isAbsolute,
  1707. alpha,
  1708. beta,
  1709. gamma
  1710. };
  1711. }
  1712. function useDevicePixelRatio({
  1713. window = defaultWindow
  1714. } = {}) {
  1715. if (!window) {
  1716. return {
  1717. pixelRatio: vueDemi.ref(1)
  1718. };
  1719. }
  1720. const pixelRatio = vueDemi.ref(1);
  1721. const cleanups = [];
  1722. const cleanup = () => {
  1723. cleanups.map((i) => i());
  1724. cleanups.length = 0;
  1725. };
  1726. const observe = () => {
  1727. pixelRatio.value = window.devicePixelRatio;
  1728. cleanup();
  1729. const media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);
  1730. media.addEventListener("change", observe, { once: true });
  1731. cleanups.push(() => {
  1732. media.removeEventListener("change", observe);
  1733. });
  1734. };
  1735. observe();
  1736. shared.tryOnScopeDispose(cleanup);
  1737. return { pixelRatio };
  1738. }
  1739. function usePermission(permissionDesc, options = {}) {
  1740. const {
  1741. controls = false,
  1742. navigator = defaultNavigator
  1743. } = options;
  1744. const isSupported = useSupported(() => navigator && "permissions" in navigator);
  1745. let permissionStatus;
  1746. const desc = typeof permissionDesc === "string" ? { name: permissionDesc } : permissionDesc;
  1747. const state = vueDemi.ref();
  1748. const onChange = () => {
  1749. if (permissionStatus)
  1750. state.value = permissionStatus.state;
  1751. };
  1752. const query = shared.createSingletonPromise(async () => {
  1753. if (!isSupported.value)
  1754. return;
  1755. if (!permissionStatus) {
  1756. try {
  1757. permissionStatus = await navigator.permissions.query(desc);
  1758. useEventListener(permissionStatus, "change", onChange);
  1759. onChange();
  1760. } catch (e) {
  1761. state.value = "prompt";
  1762. }
  1763. }
  1764. return permissionStatus;
  1765. });
  1766. query();
  1767. if (controls) {
  1768. return {
  1769. state,
  1770. isSupported,
  1771. query
  1772. };
  1773. } else {
  1774. return state;
  1775. }
  1776. }
  1777. function useDevicesList(options = {}) {
  1778. const {
  1779. navigator = defaultNavigator,
  1780. requestPermissions = false,
  1781. constraints = { audio: true, video: true },
  1782. onUpdated
  1783. } = options;
  1784. const devices = vueDemi.ref([]);
  1785. const videoInputs = vueDemi.computed(() => devices.value.filter((i) => i.kind === "videoinput"));
  1786. const audioInputs = vueDemi.computed(() => devices.value.filter((i) => i.kind === "audioinput"));
  1787. const audioOutputs = vueDemi.computed(() => devices.value.filter((i) => i.kind === "audiooutput"));
  1788. const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);
  1789. const permissionGranted = vueDemi.ref(false);
  1790. async function update() {
  1791. if (!isSupported.value)
  1792. return;
  1793. devices.value = await navigator.mediaDevices.enumerateDevices();
  1794. onUpdated == null ? void 0 : onUpdated(devices.value);
  1795. }
  1796. async function ensurePermissions() {
  1797. if (!isSupported.value)
  1798. return false;
  1799. if (permissionGranted.value)
  1800. return true;
  1801. const { state, query } = usePermission("camera", { controls: true });
  1802. await query();
  1803. if (state.value !== "granted") {
  1804. const stream = await navigator.mediaDevices.getUserMedia(constraints);
  1805. stream.getTracks().forEach((t) => t.stop());
  1806. update();
  1807. permissionGranted.value = true;
  1808. } else {
  1809. permissionGranted.value = true;
  1810. }
  1811. return permissionGranted.value;
  1812. }
  1813. if (isSupported.value) {
  1814. if (requestPermissions)
  1815. ensurePermissions();
  1816. useEventListener(navigator.mediaDevices, "devicechange", update);
  1817. update();
  1818. }
  1819. return {
  1820. devices,
  1821. ensurePermissions,
  1822. permissionGranted,
  1823. videoInputs,
  1824. audioInputs,
  1825. audioOutputs,
  1826. isSupported
  1827. };
  1828. }
  1829. function useDisplayMedia(options = {}) {
  1830. var _a;
  1831. const enabled = vueDemi.ref((_a = options.enabled) != null ? _a : false);
  1832. const video = options.video;
  1833. const audio = options.audio;
  1834. const { navigator = defaultNavigator } = options;
  1835. const isSupported = useSupported(() => {
  1836. var _a2;
  1837. return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;
  1838. });
  1839. const constraint = { audio, video };
  1840. const stream = vueDemi.shallowRef();
  1841. async function _start() {
  1842. if (!isSupported.value || stream.value)
  1843. return;
  1844. stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);
  1845. return stream.value;
  1846. }
  1847. async function _stop() {
  1848. var _a2;
  1849. (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());
  1850. stream.value = void 0;
  1851. }
  1852. function stop() {
  1853. _stop();
  1854. enabled.value = false;
  1855. }
  1856. async function start() {
  1857. await _start();
  1858. if (stream.value)
  1859. enabled.value = true;
  1860. return stream.value;
  1861. }
  1862. vueDemi.watch(enabled, (v) => {
  1863. if (v)
  1864. _start();
  1865. else
  1866. _stop();
  1867. }, { immediate: true });
  1868. return {
  1869. isSupported,
  1870. stream,
  1871. start,
  1872. stop,
  1873. enabled
  1874. };
  1875. }
  1876. function useDocumentVisibility({ document = defaultDocument } = {}) {
  1877. if (!document)
  1878. return vueDemi.ref("visible");
  1879. const visibility = vueDemi.ref(document.visibilityState);
  1880. useEventListener(document, "visibilitychange", () => {
  1881. visibility.value = document.visibilityState;
  1882. });
  1883. return visibility;
  1884. }
  1885. var __defProp$e = Object.defineProperty;
  1886. var __defProps$4 = Object.defineProperties;
  1887. var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
  1888. var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
  1889. var __hasOwnProp$g = Object.prototype.hasOwnProperty;
  1890. var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
  1891. var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  1892. var __spreadValues$e = (a, b) => {
  1893. for (var prop in b || (b = {}))
  1894. if (__hasOwnProp$g.call(b, prop))
  1895. __defNormalProp$e(a, prop, b[prop]);
  1896. if (__getOwnPropSymbols$g)
  1897. for (var prop of __getOwnPropSymbols$g(b)) {
  1898. if (__propIsEnum$g.call(b, prop))
  1899. __defNormalProp$e(a, prop, b[prop]);
  1900. }
  1901. return a;
  1902. };
  1903. var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
  1904. function useDraggable(target, options = {}) {
  1905. var _a, _b, _c;
  1906. const draggingElement = (_a = options.draggingElement) != null ? _a : defaultWindow;
  1907. const draggingHandle = (_b = options.handle) != null ? _b : target;
  1908. const position = vueDemi.ref((_c = shared.resolveUnref(options.initialValue)) != null ? _c : { x: 0, y: 0 });
  1909. const pressedDelta = vueDemi.ref();
  1910. const filterEvent = (e) => {
  1911. if (options.pointerTypes)
  1912. return options.pointerTypes.includes(e.pointerType);
  1913. return true;
  1914. };
  1915. const handleEvent = (e) => {
  1916. if (shared.resolveUnref(options.preventDefault))
  1917. e.preventDefault();
  1918. if (shared.resolveUnref(options.stopPropagation))
  1919. e.stopPropagation();
  1920. };
  1921. const start = (e) => {
  1922. var _a2;
  1923. if (!filterEvent(e))
  1924. return;
  1925. if (shared.resolveUnref(options.exact) && e.target !== shared.resolveUnref(target))
  1926. return;
  1927. const rect = shared.resolveUnref(target).getBoundingClientRect();
  1928. const pos = {
  1929. x: e.clientX - rect.left,
  1930. y: e.clientY - rect.top
  1931. };
  1932. if (((_a2 = options.onStart) == null ? void 0 : _a2.call(options, pos, e)) === false)
  1933. return;
  1934. pressedDelta.value = pos;
  1935. handleEvent(e);
  1936. };
  1937. const move = (e) => {
  1938. var _a2;
  1939. if (!filterEvent(e))
  1940. return;
  1941. if (!pressedDelta.value)
  1942. return;
  1943. position.value = {
  1944. x: e.clientX - pressedDelta.value.x,
  1945. y: e.clientY - pressedDelta.value.y
  1946. };
  1947. (_a2 = options.onMove) == null ? void 0 : _a2.call(options, position.value, e);
  1948. handleEvent(e);
  1949. };
  1950. const end = (e) => {
  1951. var _a2;
  1952. if (!filterEvent(e))
  1953. return;
  1954. if (!pressedDelta.value)
  1955. return;
  1956. pressedDelta.value = void 0;
  1957. (_a2 = options.onEnd) == null ? void 0 : _a2.call(options, position.value, e);
  1958. handleEvent(e);
  1959. };
  1960. if (shared.isClient) {
  1961. useEventListener(draggingHandle, "pointerdown", start, true);
  1962. useEventListener(draggingElement, "pointermove", move, true);
  1963. useEventListener(draggingElement, "pointerup", end, true);
  1964. }
  1965. return __spreadProps$4(__spreadValues$e({}, shared.toRefs(position)), {
  1966. position,
  1967. isDragging: vueDemi.computed(() => !!pressedDelta.value),
  1968. style: vueDemi.computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)
  1969. });
  1970. }
  1971. function useDropZone(target, onDrop) {
  1972. const isOverDropZone = vueDemi.ref(false);
  1973. let counter = 0;
  1974. if (shared.isClient) {
  1975. useEventListener(target, "dragenter", (event) => {
  1976. event.preventDefault();
  1977. counter += 1;
  1978. isOverDropZone.value = true;
  1979. });
  1980. useEventListener(target, "dragover", (event) => {
  1981. event.preventDefault();
  1982. });
  1983. useEventListener(target, "dragleave", (event) => {
  1984. event.preventDefault();
  1985. counter -= 1;
  1986. if (counter === 0)
  1987. isOverDropZone.value = false;
  1988. });
  1989. useEventListener(target, "drop", (event) => {
  1990. var _a, _b;
  1991. event.preventDefault();
  1992. counter = 0;
  1993. isOverDropZone.value = false;
  1994. const files = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);
  1995. onDrop == null ? void 0 : onDrop(files.length === 0 ? null : files);
  1996. });
  1997. }
  1998. return {
  1999. isOverDropZone
  2000. };
  2001. }
  2002. var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
  2003. var __hasOwnProp$f = Object.prototype.hasOwnProperty;
  2004. var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
  2005. var __objRest$2 = (source, exclude) => {
  2006. var target = {};
  2007. for (var prop in source)
  2008. if (__hasOwnProp$f.call(source, prop) && exclude.indexOf(prop) < 0)
  2009. target[prop] = source[prop];
  2010. if (source != null && __getOwnPropSymbols$f)
  2011. for (var prop of __getOwnPropSymbols$f(source)) {
  2012. if (exclude.indexOf(prop) < 0 && __propIsEnum$f.call(source, prop))
  2013. target[prop] = source[prop];
  2014. }
  2015. return target;
  2016. };
  2017. function useResizeObserver(target, callback, options = {}) {
  2018. const _a = options, { window = defaultWindow } = _a, observerOptions = __objRest$2(_a, ["window"]);
  2019. let observer;
  2020. const isSupported = useSupported(() => window && "ResizeObserver" in window);
  2021. const cleanup = () => {
  2022. if (observer) {
  2023. observer.disconnect();
  2024. observer = void 0;
  2025. }
  2026. };
  2027. const stopWatch = vueDemi.watch(() => unrefElement(target), (el) => {
  2028. cleanup();
  2029. if (isSupported.value && window && el) {
  2030. observer = new ResizeObserver(callback);
  2031. observer.observe(el, observerOptions);
  2032. }
  2033. }, { immediate: true, flush: "post" });
  2034. const stop = () => {
  2035. cleanup();
  2036. stopWatch();
  2037. };
  2038. shared.tryOnScopeDispose(stop);
  2039. return {
  2040. isSupported,
  2041. stop
  2042. };
  2043. }
  2044. function useElementBounding(target, options = {}) {
  2045. const {
  2046. reset = true,
  2047. windowResize = true,
  2048. windowScroll = true,
  2049. immediate = true
  2050. } = options;
  2051. const height = vueDemi.ref(0);
  2052. const bottom = vueDemi.ref(0);
  2053. const left = vueDemi.ref(0);
  2054. const right = vueDemi.ref(0);
  2055. const top = vueDemi.ref(0);
  2056. const width = vueDemi.ref(0);
  2057. const x = vueDemi.ref(0);
  2058. const y = vueDemi.ref(0);
  2059. function update() {
  2060. const el = unrefElement(target);
  2061. if (!el) {
  2062. if (reset) {
  2063. height.value = 0;
  2064. bottom.value = 0;
  2065. left.value = 0;
  2066. right.value = 0;
  2067. top.value = 0;
  2068. width.value = 0;
  2069. x.value = 0;
  2070. y.value = 0;
  2071. }
  2072. return;
  2073. }
  2074. const rect = el.getBoundingClientRect();
  2075. height.value = rect.height;
  2076. bottom.value = rect.bottom;
  2077. left.value = rect.left;
  2078. right.value = rect.right;
  2079. top.value = rect.top;
  2080. width.value = rect.width;
  2081. x.value = rect.x;
  2082. y.value = rect.y;
  2083. }
  2084. useResizeObserver(target, update);
  2085. vueDemi.watch(() => unrefElement(target), (ele) => !ele && update());
  2086. if (windowScroll)
  2087. useEventListener("scroll", update, { passive: true });
  2088. if (windowResize)
  2089. useEventListener("resize", update, { passive: true });
  2090. shared.tryOnMounted(() => {
  2091. if (immediate)
  2092. update();
  2093. });
  2094. return {
  2095. height,
  2096. bottom,
  2097. left,
  2098. right,
  2099. top,
  2100. width,
  2101. x,
  2102. y,
  2103. update
  2104. };
  2105. }
  2106. function useRafFn(fn, options = {}) {
  2107. const {
  2108. immediate = true,
  2109. window = defaultWindow
  2110. } = options;
  2111. const isActive = vueDemi.ref(false);
  2112. let previousFrameTimestamp = 0;
  2113. let rafId = null;
  2114. function loop(timestamp) {
  2115. if (!isActive.value || !window)
  2116. return;
  2117. const delta = timestamp - previousFrameTimestamp;
  2118. fn({ delta, timestamp });
  2119. previousFrameTimestamp = timestamp;
  2120. rafId = window.requestAnimationFrame(loop);
  2121. }
  2122. function resume() {
  2123. if (!isActive.value && window) {
  2124. isActive.value = true;
  2125. rafId = window.requestAnimationFrame(loop);
  2126. }
  2127. }
  2128. function pause() {
  2129. isActive.value = false;
  2130. if (rafId != null && window) {
  2131. window.cancelAnimationFrame(rafId);
  2132. rafId = null;
  2133. }
  2134. }
  2135. if (immediate)
  2136. resume();
  2137. shared.tryOnScopeDispose(pause);
  2138. return {
  2139. isActive,
  2140. pause,
  2141. resume
  2142. };
  2143. }
  2144. var __defProp$d = Object.defineProperty;
  2145. var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
  2146. var __hasOwnProp$e = Object.prototype.hasOwnProperty;
  2147. var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
  2148. var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  2149. var __spreadValues$d = (a, b) => {
  2150. for (var prop in b || (b = {}))
  2151. if (__hasOwnProp$e.call(b, prop))
  2152. __defNormalProp$d(a, prop, b[prop]);
  2153. if (__getOwnPropSymbols$e)
  2154. for (var prop of __getOwnPropSymbols$e(b)) {
  2155. if (__propIsEnum$e.call(b, prop))
  2156. __defNormalProp$d(a, prop, b[prop]);
  2157. }
  2158. return a;
  2159. };
  2160. function useElementByPoint(options) {
  2161. const element = vueDemi.ref(null);
  2162. const { x, y } = options;
  2163. const controls = useRafFn(() => {
  2164. element.value = document.elementFromPoint(shared.resolveUnref(x), shared.resolveUnref(y));
  2165. });
  2166. return __spreadValues$d({
  2167. element
  2168. }, controls);
  2169. }
  2170. function useElementHover(el) {
  2171. const isHovered = vueDemi.ref(false);
  2172. useEventListener(el, "mouseenter", () => isHovered.value = true);
  2173. useEventListener(el, "mouseleave", () => isHovered.value = false);
  2174. return isHovered;
  2175. }
  2176. function useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {
  2177. const { box = "content-box" } = options;
  2178. const width = vueDemi.ref(initialSize.width);
  2179. const height = vueDemi.ref(initialSize.height);
  2180. useResizeObserver(target, ([entry]) => {
  2181. const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;
  2182. if (boxSize) {
  2183. width.value = boxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);
  2184. height.value = boxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);
  2185. } else {
  2186. width.value = entry.contentRect.width;
  2187. height.value = entry.contentRect.height;
  2188. }
  2189. }, options);
  2190. vueDemi.watch(() => unrefElement(target), (ele) => {
  2191. width.value = ele ? initialSize.width : 0;
  2192. height.value = ele ? initialSize.height : 0;
  2193. });
  2194. return {
  2195. width,
  2196. height
  2197. };
  2198. }
  2199. function useElementVisibility(element, { window = defaultWindow, scrollTarget } = {}) {
  2200. const elementIsVisible = vueDemi.ref(false);
  2201. const testBounding = () => {
  2202. if (!window)
  2203. return;
  2204. const document = window.document;
  2205. const el = unrefElement(element);
  2206. if (!el) {
  2207. elementIsVisible.value = false;
  2208. } else {
  2209. const rect = el.getBoundingClientRect();
  2210. elementIsVisible.value = rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth) && rect.bottom >= 0 && rect.right >= 0;
  2211. }
  2212. };
  2213. vueDemi.watch(() => unrefElement(element), () => testBounding(), { immediate: true, flush: "post" });
  2214. if (window) {
  2215. useEventListener(scrollTarget || window, "scroll", testBounding, {
  2216. capture: false,
  2217. passive: true
  2218. });
  2219. }
  2220. return elementIsVisible;
  2221. }
  2222. const events = new Map();
  2223. function useEventBus(key) {
  2224. const scope = vueDemi.getCurrentScope();
  2225. function on(listener) {
  2226. var _a;
  2227. const listeners = events.get(key) || [];
  2228. listeners.push(listener);
  2229. events.set(key, listeners);
  2230. const _off = () => off(listener);
  2231. (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);
  2232. return _off;
  2233. }
  2234. function once(listener) {
  2235. function _listener(...args) {
  2236. off(_listener);
  2237. listener(...args);
  2238. }
  2239. return on(_listener);
  2240. }
  2241. function off(listener) {
  2242. const listeners = events.get(key);
  2243. if (!listeners)
  2244. return;
  2245. const index = listeners.indexOf(listener);
  2246. if (index > -1)
  2247. listeners.splice(index, 1);
  2248. if (!listeners.length)
  2249. events.delete(key);
  2250. }
  2251. function reset() {
  2252. events.delete(key);
  2253. }
  2254. function emit(event, payload) {
  2255. var _a;
  2256. (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));
  2257. }
  2258. return { on, once, off, emit, reset };
  2259. }
  2260. function useEventSource(url, events = [], options = {}) {
  2261. const event = vueDemi.ref(null);
  2262. const data = vueDemi.ref(null);
  2263. const status = vueDemi.ref("CONNECTING");
  2264. const eventSource = vueDemi.ref(null);
  2265. const error = vueDemi.ref(null);
  2266. const {
  2267. withCredentials = false
  2268. } = options;
  2269. const close = () => {
  2270. if (eventSource.value) {
  2271. eventSource.value.close();
  2272. eventSource.value = null;
  2273. status.value = "CLOSED";
  2274. }
  2275. };
  2276. const es = new EventSource(url, { withCredentials });
  2277. eventSource.value = es;
  2278. es.onopen = () => {
  2279. status.value = "OPEN";
  2280. error.value = null;
  2281. };
  2282. es.onerror = (e) => {
  2283. status.value = "CLOSED";
  2284. error.value = e;
  2285. };
  2286. es.onmessage = (e) => {
  2287. event.value = null;
  2288. data.value = e.data;
  2289. };
  2290. for (const event_name of events) {
  2291. useEventListener(es, event_name, (e) => {
  2292. event.value = event_name;
  2293. data.value = e.data || null;
  2294. });
  2295. }
  2296. shared.tryOnScopeDispose(() => {
  2297. close();
  2298. });
  2299. return {
  2300. eventSource,
  2301. event,
  2302. data,
  2303. status,
  2304. error,
  2305. close
  2306. };
  2307. }
  2308. function useEyeDropper(options = {}) {
  2309. const { initialValue = "" } = options;
  2310. const isSupported = useSupported(() => typeof window !== "undefined" && "EyeDropper" in window);
  2311. const sRGBHex = vueDemi.ref(initialValue);
  2312. async function open(openOptions) {
  2313. if (!isSupported.value)
  2314. return;
  2315. const eyeDropper = new window.EyeDropper();
  2316. const result = await eyeDropper.open(openOptions);
  2317. sRGBHex.value = result.sRGBHex;
  2318. return result;
  2319. }
  2320. return { isSupported, sRGBHex, open };
  2321. }
  2322. function useFavicon(newIcon = null, options = {}) {
  2323. const {
  2324. baseUrl = "",
  2325. rel = "icon",
  2326. document = defaultDocument
  2327. } = options;
  2328. const favicon = shared.resolveRef(newIcon);
  2329. const applyIcon = (icon) => {
  2330. document == null ? void 0 : document.head.querySelectorAll(`link[rel*="${rel}"]`).forEach((el) => el.href = `${baseUrl}${icon}`);
  2331. };
  2332. vueDemi.watch(favicon, (i, o) => {
  2333. if (shared.isString(i) && i !== o)
  2334. applyIcon(i);
  2335. }, { immediate: true });
  2336. return favicon;
  2337. }
  2338. var __defProp$c = Object.defineProperty;
  2339. var __defProps$3 = Object.defineProperties;
  2340. var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
  2341. var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
  2342. var __hasOwnProp$d = Object.prototype.hasOwnProperty;
  2343. var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
  2344. var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  2345. var __spreadValues$c = (a, b) => {
  2346. for (var prop in b || (b = {}))
  2347. if (__hasOwnProp$d.call(b, prop))
  2348. __defNormalProp$c(a, prop, b[prop]);
  2349. if (__getOwnPropSymbols$d)
  2350. for (var prop of __getOwnPropSymbols$d(b)) {
  2351. if (__propIsEnum$d.call(b, prop))
  2352. __defNormalProp$c(a, prop, b[prop]);
  2353. }
  2354. return a;
  2355. };
  2356. var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
  2357. const payloadMapping = {
  2358. json: "application/json",
  2359. text: "text/plain"
  2360. };
  2361. function isFetchOptions(obj) {
  2362. return shared.containsProp(obj, "immediate", "refetch", "initialData", "timeout", "beforeFetch", "afterFetch", "onFetchError", "fetch");
  2363. }
  2364. function isAbsoluteURL(url) {
  2365. return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
  2366. }
  2367. function headersToObject(headers) {
  2368. if (typeof Headers !== "undefined" && headers instanceof Headers)
  2369. return Object.fromEntries([...headers.entries()]);
  2370. return headers;
  2371. }
  2372. function combineCallbacks(combination, ...callbacks) {
  2373. if (combination === "overwrite") {
  2374. return async (ctx) => {
  2375. const callback = callbacks[callbacks.length - 1];
  2376. if (callback !== void 0)
  2377. await callback(ctx);
  2378. return ctx;
  2379. };
  2380. } else {
  2381. return async (ctx) => {
  2382. await callbacks.reduce((prevCallback, callback) => prevCallback.then(async () => {
  2383. if (callback)
  2384. ctx = __spreadValues$c(__spreadValues$c({}, ctx), await callback(ctx));
  2385. }), Promise.resolve());
  2386. return ctx;
  2387. };
  2388. }
  2389. }
  2390. function createFetch(config = {}) {
  2391. const _combination = config.combination || "chain";
  2392. const _options = config.options || {};
  2393. const _fetchOptions = config.fetchOptions || {};
  2394. function useFactoryFetch(url, ...args) {
  2395. const computedUrl = vueDemi.computed(() => {
  2396. const baseUrl = shared.resolveUnref(config.baseUrl);
  2397. const targetUrl = shared.resolveUnref(url);
  2398. return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;
  2399. });
  2400. let options = _options;
  2401. let fetchOptions = _fetchOptions;
  2402. if (args.length > 0) {
  2403. if (isFetchOptions(args[0])) {
  2404. options = __spreadProps$3(__spreadValues$c(__spreadValues$c({}, options), args[0]), {
  2405. beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),
  2406. afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),
  2407. onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)
  2408. });
  2409. } else {
  2410. fetchOptions = __spreadProps$3(__spreadValues$c(__spreadValues$c({}, fetchOptions), args[0]), {
  2411. headers: __spreadValues$c(__spreadValues$c({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {})
  2412. });
  2413. }
  2414. }
  2415. if (args.length > 1 && isFetchOptions(args[1])) {
  2416. options = __spreadProps$3(__spreadValues$c(__spreadValues$c({}, options), args[1]), {
  2417. beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),
  2418. afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),
  2419. onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)
  2420. });
  2421. }
  2422. return useFetch(computedUrl, fetchOptions, options);
  2423. }
  2424. return useFactoryFetch;
  2425. }
  2426. function useFetch(url, ...args) {
  2427. var _a;
  2428. const supportsAbort = typeof AbortController === "function";
  2429. let fetchOptions = {};
  2430. let options = { immediate: true, refetch: false, timeout: 0 };
  2431. const config = {
  2432. method: "GET",
  2433. type: "text",
  2434. payload: void 0
  2435. };
  2436. if (args.length > 0) {
  2437. if (isFetchOptions(args[0]))
  2438. options = __spreadValues$c(__spreadValues$c({}, options), args[0]);
  2439. else
  2440. fetchOptions = args[0];
  2441. }
  2442. if (args.length > 1) {
  2443. if (isFetchOptions(args[1]))
  2444. options = __spreadValues$c(__spreadValues$c({}, options), args[1]);
  2445. }
  2446. const {
  2447. fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,
  2448. initialData,
  2449. timeout
  2450. } = options;
  2451. const responseEvent = shared.createEventHook();
  2452. const errorEvent = shared.createEventHook();
  2453. const finallyEvent = shared.createEventHook();
  2454. const isFinished = vueDemi.ref(false);
  2455. const isFetching = vueDemi.ref(false);
  2456. const aborted = vueDemi.ref(false);
  2457. const statusCode = vueDemi.ref(null);
  2458. const response = vueDemi.shallowRef(null);
  2459. const error = vueDemi.shallowRef(null);
  2460. const data = vueDemi.shallowRef(initialData);
  2461. const canAbort = vueDemi.computed(() => supportsAbort && isFetching.value);
  2462. let controller;
  2463. let timer;
  2464. const abort = () => {
  2465. if (supportsAbort && controller)
  2466. controller.abort();
  2467. };
  2468. const loading = (isLoading) => {
  2469. isFetching.value = isLoading;
  2470. isFinished.value = !isLoading;
  2471. };
  2472. if (timeout)
  2473. timer = shared.useTimeoutFn(abort, timeout, { immediate: false });
  2474. const execute = async (throwOnFailed = false) => {
  2475. var _a2;
  2476. loading(true);
  2477. error.value = null;
  2478. statusCode.value = null;
  2479. aborted.value = false;
  2480. controller = void 0;
  2481. if (supportsAbort) {
  2482. controller = new AbortController();
  2483. controller.signal.onabort = () => aborted.value = true;
  2484. fetchOptions = __spreadProps$3(__spreadValues$c({}, fetchOptions), {
  2485. signal: controller.signal
  2486. });
  2487. }
  2488. const defaultFetchOptions = {
  2489. method: config.method,
  2490. headers: {}
  2491. };
  2492. if (config.payload) {
  2493. const headers = headersToObject(defaultFetchOptions.headers);
  2494. if (config.payloadType)
  2495. headers["Content-Type"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;
  2496. const payload = shared.resolveUnref(config.payload);
  2497. defaultFetchOptions.body = config.payloadType === "json" ? JSON.stringify(payload) : payload;
  2498. }
  2499. let isCanceled = false;
  2500. const context = { url: shared.resolveUnref(url), options: __spreadValues$c(__spreadValues$c({}, defaultFetchOptions), fetchOptions), cancel: () => {
  2501. isCanceled = true;
  2502. } };
  2503. if (options.beforeFetch)
  2504. Object.assign(context, await options.beforeFetch(context));
  2505. if (isCanceled || !fetch) {
  2506. loading(false);
  2507. return Promise.resolve(null);
  2508. }
  2509. let responseData = null;
  2510. if (timer)
  2511. timer.start();
  2512. return new Promise((resolve, reject) => {
  2513. var _a3;
  2514. fetch(context.url, __spreadProps$3(__spreadValues$c(__spreadValues$c({}, defaultFetchOptions), context.options), {
  2515. headers: __spreadValues$c(__spreadValues$c({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers))
  2516. })).then(async (fetchResponse) => {
  2517. response.value = fetchResponse;
  2518. statusCode.value = fetchResponse.status;
  2519. responseData = await fetchResponse[config.type]();
  2520. if (options.afterFetch && statusCode.value >= 200 && statusCode.value < 300)
  2521. ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse }));
  2522. data.value = responseData;
  2523. if (!fetchResponse.ok)
  2524. throw new Error(fetchResponse.statusText);
  2525. responseEvent.trigger(fetchResponse);
  2526. return resolve(fetchResponse);
  2527. }).catch(async (fetchError) => {
  2528. let errorData = fetchError.message || fetchError.name;
  2529. if (options.onFetchError)
  2530. ({ data: responseData, error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value }));
  2531. data.value = responseData;
  2532. error.value = errorData;
  2533. errorEvent.trigger(fetchError);
  2534. if (throwOnFailed)
  2535. return reject(fetchError);
  2536. return resolve(null);
  2537. }).finally(() => {
  2538. loading(false);
  2539. if (timer)
  2540. timer.stop();
  2541. finallyEvent.trigger(null);
  2542. });
  2543. });
  2544. };
  2545. const refetch = shared.resolveRef(options.refetch);
  2546. vueDemi.watch([
  2547. refetch,
  2548. shared.resolveRef(url)
  2549. ], ([refetch2]) => refetch2 && execute(), { deep: true });
  2550. const shell = {
  2551. isFinished,
  2552. statusCode,
  2553. response,
  2554. error,
  2555. data,
  2556. isFetching,
  2557. canAbort,
  2558. aborted,
  2559. abort,
  2560. execute,
  2561. onFetchResponse: responseEvent.on,
  2562. onFetchError: errorEvent.on,
  2563. onFetchFinally: finallyEvent.on,
  2564. get: setMethod("GET"),
  2565. put: setMethod("PUT"),
  2566. post: setMethod("POST"),
  2567. delete: setMethod("DELETE"),
  2568. patch: setMethod("PATCH"),
  2569. head: setMethod("HEAD"),
  2570. options: setMethod("OPTIONS"),
  2571. json: setType("json"),
  2572. text: setType("text"),
  2573. blob: setType("blob"),
  2574. arrayBuffer: setType("arrayBuffer"),
  2575. formData: setType("formData")
  2576. };
  2577. function setMethod(method) {
  2578. return (payload, payloadType) => {
  2579. if (!isFetching.value) {
  2580. config.method = method;
  2581. config.payload = payload;
  2582. config.payloadType = payloadType;
  2583. if (vueDemi.isRef(config.payload)) {
  2584. vueDemi.watch([
  2585. refetch,
  2586. shared.resolveRef(config.payload)
  2587. ], ([refetch2]) => refetch2 && execute(), { deep: true });
  2588. }
  2589. const rawPayload = shared.resolveUnref(config.payload);
  2590. if (!payloadType && rawPayload && Object.getPrototypeOf(rawPayload) === Object.prototype && !(rawPayload instanceof FormData))
  2591. config.payloadType = "json";
  2592. return __spreadProps$3(__spreadValues$c({}, shell), {
  2593. then(onFulfilled, onRejected) {
  2594. return waitUntilFinished().then(onFulfilled, onRejected);
  2595. }
  2596. });
  2597. }
  2598. return void 0;
  2599. };
  2600. }
  2601. function waitUntilFinished() {
  2602. return new Promise((resolve, reject) => {
  2603. shared.until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));
  2604. });
  2605. }
  2606. function setType(type) {
  2607. return () => {
  2608. if (!isFetching.value) {
  2609. config.type = type;
  2610. return __spreadProps$3(__spreadValues$c({}, shell), {
  2611. then(onFulfilled, onRejected) {
  2612. return waitUntilFinished().then(onFulfilled, onRejected);
  2613. }
  2614. });
  2615. }
  2616. return void 0;
  2617. };
  2618. }
  2619. if (options.immediate)
  2620. setTimeout(execute, 0);
  2621. return __spreadProps$3(__spreadValues$c({}, shell), {
  2622. then(onFulfilled, onRejected) {
  2623. return waitUntilFinished().then(onFulfilled, onRejected);
  2624. }
  2625. });
  2626. }
  2627. function joinPaths(start, end) {
  2628. if (!start.endsWith("/") && !end.startsWith("/"))
  2629. return `${start}/${end}`;
  2630. return `${start}${end}`;
  2631. }
  2632. var __defProp$b = Object.defineProperty;
  2633. var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
  2634. var __hasOwnProp$c = Object.prototype.hasOwnProperty;
  2635. var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
  2636. var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  2637. var __spreadValues$b = (a, b) => {
  2638. for (var prop in b || (b = {}))
  2639. if (__hasOwnProp$c.call(b, prop))
  2640. __defNormalProp$b(a, prop, b[prop]);
  2641. if (__getOwnPropSymbols$c)
  2642. for (var prop of __getOwnPropSymbols$c(b)) {
  2643. if (__propIsEnum$c.call(b, prop))
  2644. __defNormalProp$b(a, prop, b[prop]);
  2645. }
  2646. return a;
  2647. };
  2648. const DEFAULT_OPTIONS = {
  2649. multiple: true,
  2650. accept: "*"
  2651. };
  2652. function useFileDialog(options = {}) {
  2653. const {
  2654. document = defaultDocument
  2655. } = options;
  2656. const files = vueDemi.ref(null);
  2657. let input;
  2658. if (document) {
  2659. input = document.createElement("input");
  2660. input.type = "file";
  2661. input.onchange = (event) => {
  2662. const result = event.target;
  2663. files.value = result.files;
  2664. };
  2665. }
  2666. const open = (localOptions) => {
  2667. if (!input)
  2668. return;
  2669. const _options = __spreadValues$b(__spreadValues$b(__spreadValues$b({}, DEFAULT_OPTIONS), options), localOptions);
  2670. input.multiple = _options.multiple;
  2671. input.accept = _options.accept;
  2672. if (shared.hasOwn(_options, "capture"))
  2673. input.capture = _options.capture;
  2674. input.click();
  2675. };
  2676. const reset = () => {
  2677. files.value = null;
  2678. if (input)
  2679. input.value = "";
  2680. };
  2681. return {
  2682. files: vueDemi.readonly(files),
  2683. open,
  2684. reset
  2685. };
  2686. }
  2687. var __defProp$a = Object.defineProperty;
  2688. var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
  2689. var __hasOwnProp$b = Object.prototype.hasOwnProperty;
  2690. var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
  2691. var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  2692. var __spreadValues$a = (a, b) => {
  2693. for (var prop in b || (b = {}))
  2694. if (__hasOwnProp$b.call(b, prop))
  2695. __defNormalProp$a(a, prop, b[prop]);
  2696. if (__getOwnPropSymbols$b)
  2697. for (var prop of __getOwnPropSymbols$b(b)) {
  2698. if (__propIsEnum$b.call(b, prop))
  2699. __defNormalProp$a(a, prop, b[prop]);
  2700. }
  2701. return a;
  2702. };
  2703. function useFileSystemAccess(options = {}) {
  2704. const {
  2705. window: _window = defaultWindow,
  2706. dataType = "Text"
  2707. } = vueDemi.unref(options);
  2708. const window = _window;
  2709. const isSupported = useSupported(() => window && "showSaveFilePicker" in window && "showOpenFilePicker" in window);
  2710. const fileHandle = vueDemi.ref();
  2711. const data = vueDemi.ref();
  2712. const file = vueDemi.ref();
  2713. const fileName = vueDemi.computed(() => {
  2714. var _a, _b;
  2715. return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : "";
  2716. });
  2717. const fileMIME = vueDemi.computed(() => {
  2718. var _a, _b;
  2719. return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : "";
  2720. });
  2721. const fileSize = vueDemi.computed(() => {
  2722. var _a, _b;
  2723. return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;
  2724. });
  2725. const fileLastModified = vueDemi.computed(() => {
  2726. var _a, _b;
  2727. return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;
  2728. });
  2729. async function open(_options = {}) {
  2730. if (!isSupported.value)
  2731. return;
  2732. const [handle] = await window.showOpenFilePicker(__spreadValues$a(__spreadValues$a({}, vueDemi.unref(options)), _options));
  2733. fileHandle.value = handle;
  2734. await updateFile();
  2735. await updateData();
  2736. }
  2737. async function create(_options = {}) {
  2738. if (!isSupported.value)
  2739. return;
  2740. fileHandle.value = await window.showSaveFilePicker(__spreadValues$a(__spreadValues$a({}, vueDemi.unref(options)), _options));
  2741. data.value = void 0;
  2742. await updateFile();
  2743. await updateData();
  2744. }
  2745. async function save(_options = {}) {
  2746. if (!isSupported.value)
  2747. return;
  2748. if (!fileHandle.value)
  2749. return saveAs(_options);
  2750. if (data.value) {
  2751. const writableStream = await fileHandle.value.createWritable();
  2752. await writableStream.write(data.value);
  2753. await writableStream.close();
  2754. }
  2755. await updateFile();
  2756. }
  2757. async function saveAs(_options = {}) {
  2758. if (!isSupported.value)
  2759. return;
  2760. fileHandle.value = await window.showSaveFilePicker(__spreadValues$a(__spreadValues$a({}, vueDemi.unref(options)), _options));
  2761. if (data.value) {
  2762. const writableStream = await fileHandle.value.createWritable();
  2763. await writableStream.write(data.value);
  2764. await writableStream.close();
  2765. }
  2766. await updateFile();
  2767. }
  2768. async function updateFile() {
  2769. var _a;
  2770. file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());
  2771. }
  2772. async function updateData() {
  2773. var _a, _b;
  2774. if (vueDemi.unref(dataType) === "Text")
  2775. data.value = await ((_a = file.value) == null ? void 0 : _a.text());
  2776. if (vueDemi.unref(dataType) === "ArrayBuffer")
  2777. data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());
  2778. if (vueDemi.unref(dataType) === "Blob")
  2779. data.value = file.value;
  2780. }
  2781. vueDemi.watch(() => vueDemi.unref(dataType), updateData);
  2782. return {
  2783. isSupported,
  2784. data,
  2785. file,
  2786. fileName,
  2787. fileMIME,
  2788. fileSize,
  2789. fileLastModified,
  2790. open,
  2791. create,
  2792. save,
  2793. saveAs,
  2794. updateData
  2795. };
  2796. }
  2797. function useFocus(target, options = {}) {
  2798. const { initialValue = false } = options;
  2799. const activeElement = useActiveElement(options);
  2800. const targetElement = vueDemi.computed(() => unrefElement(target));
  2801. const focused = vueDemi.computed({
  2802. get() {
  2803. return shared.isDef(activeElement.value) && shared.isDef(targetElement.value) && activeElement.value === targetElement.value;
  2804. },
  2805. set(value) {
  2806. var _a, _b;
  2807. if (!value && focused.value)
  2808. (_a = targetElement.value) == null ? void 0 : _a.blur();
  2809. if (value && !focused.value)
  2810. (_b = targetElement.value) == null ? void 0 : _b.focus();
  2811. }
  2812. });
  2813. vueDemi.watch(targetElement, () => {
  2814. focused.value = initialValue;
  2815. }, { immediate: true, flush: "post" });
  2816. return { focused };
  2817. }
  2818. function useFocusWithin(target, options = {}) {
  2819. const activeElement = useActiveElement(options);
  2820. const targetElement = vueDemi.computed(() => unrefElement(target));
  2821. const focused = vueDemi.computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);
  2822. return { focused };
  2823. }
  2824. function useFps(options) {
  2825. var _a;
  2826. const fps = vueDemi.ref(0);
  2827. if (typeof performance === "undefined")
  2828. return fps;
  2829. const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;
  2830. let last = performance.now();
  2831. let ticks = 0;
  2832. useRafFn(() => {
  2833. ticks += 1;
  2834. if (ticks >= every) {
  2835. const now = performance.now();
  2836. const diff = now - last;
  2837. fps.value = Math.round(1e3 / (diff / ticks));
  2838. last = now;
  2839. ticks = 0;
  2840. }
  2841. });
  2842. return fps;
  2843. }
  2844. const functionsMap = [
  2845. [
  2846. "requestFullscreen",
  2847. "exitFullscreen",
  2848. "fullscreenElement",
  2849. "fullscreenEnabled",
  2850. "fullscreenchange",
  2851. "fullscreenerror"
  2852. ],
  2853. [
  2854. "webkitRequestFullscreen",
  2855. "webkitExitFullscreen",
  2856. "webkitFullscreenElement",
  2857. "webkitFullscreenEnabled",
  2858. "webkitfullscreenchange",
  2859. "webkitfullscreenerror"
  2860. ],
  2861. [
  2862. "webkitRequestFullScreen",
  2863. "webkitCancelFullScreen",
  2864. "webkitCurrentFullScreenElement",
  2865. "webkitCancelFullScreen",
  2866. "webkitfullscreenchange",
  2867. "webkitfullscreenerror"
  2868. ],
  2869. [
  2870. "mozRequestFullScreen",
  2871. "mozCancelFullScreen",
  2872. "mozFullScreenElement",
  2873. "mozFullScreenEnabled",
  2874. "mozfullscreenchange",
  2875. "mozfullscreenerror"
  2876. ],
  2877. [
  2878. "msRequestFullscreen",
  2879. "msExitFullscreen",
  2880. "msFullscreenElement",
  2881. "msFullscreenEnabled",
  2882. "MSFullscreenChange",
  2883. "MSFullscreenError"
  2884. ]
  2885. ];
  2886. function useFullscreen(target, options = {}) {
  2887. const { document = defaultDocument, autoExit = false } = options;
  2888. const targetRef = target || (document == null ? void 0 : document.querySelector("html"));
  2889. const isFullscreen = vueDemi.ref(false);
  2890. let map = functionsMap[0];
  2891. const isSupported = useSupported(() => {
  2892. if (!document) {
  2893. return false;
  2894. } else {
  2895. for (const m of functionsMap) {
  2896. if (m[1] in document) {
  2897. map = m;
  2898. return true;
  2899. }
  2900. }
  2901. }
  2902. return false;
  2903. });
  2904. const [REQUEST, EXIT, ELEMENT, , EVENT] = map;
  2905. async function exit() {
  2906. if (!isSupported.value)
  2907. return;
  2908. if (document == null ? void 0 : document[ELEMENT])
  2909. await document[EXIT]();
  2910. isFullscreen.value = false;
  2911. }
  2912. async function enter() {
  2913. if (!isSupported.value)
  2914. return;
  2915. await exit();
  2916. const target2 = unrefElement(targetRef);
  2917. if (target2) {
  2918. await target2[REQUEST]();
  2919. isFullscreen.value = true;
  2920. }
  2921. }
  2922. async function toggle() {
  2923. if (isFullscreen.value)
  2924. await exit();
  2925. else
  2926. await enter();
  2927. }
  2928. if (document) {
  2929. useEventListener(document, EVENT, () => {
  2930. isFullscreen.value = !!(document == null ? void 0 : document[ELEMENT]);
  2931. }, false);
  2932. }
  2933. if (autoExit)
  2934. shared.tryOnScopeDispose(exit);
  2935. return {
  2936. isSupported,
  2937. isFullscreen,
  2938. enter,
  2939. exit,
  2940. toggle
  2941. };
  2942. }
  2943. function mapGamepadToXbox360Controller(gamepad) {
  2944. return vueDemi.computed(() => {
  2945. if (gamepad.value) {
  2946. return {
  2947. buttons: {
  2948. a: gamepad.value.buttons[0],
  2949. b: gamepad.value.buttons[1],
  2950. x: gamepad.value.buttons[2],
  2951. y: gamepad.value.buttons[3]
  2952. },
  2953. bumper: {
  2954. left: gamepad.value.buttons[4],
  2955. right: gamepad.value.buttons[5]
  2956. },
  2957. triggers: {
  2958. left: gamepad.value.buttons[6],
  2959. right: gamepad.value.buttons[7]
  2960. },
  2961. stick: {
  2962. left: {
  2963. horizontal: gamepad.value.axes[0],
  2964. vertical: gamepad.value.axes[1],
  2965. button: gamepad.value.buttons[10]
  2966. },
  2967. right: {
  2968. horizontal: gamepad.value.axes[2],
  2969. vertical: gamepad.value.axes[3],
  2970. button: gamepad.value.buttons[11]
  2971. }
  2972. },
  2973. dpad: {
  2974. up: gamepad.value.buttons[12],
  2975. down: gamepad.value.buttons[13],
  2976. left: gamepad.value.buttons[14],
  2977. right: gamepad.value.buttons[15]
  2978. },
  2979. back: gamepad.value.buttons[8],
  2980. start: gamepad.value.buttons[9]
  2981. };
  2982. }
  2983. return null;
  2984. });
  2985. }
  2986. function useGamepad(options = {}) {
  2987. const {
  2988. navigator = defaultNavigator
  2989. } = options;
  2990. const isSupported = useSupported(() => navigator && "getGamepads" in navigator);
  2991. const gamepads = vueDemi.ref([]);
  2992. const onConnectedHook = shared.createEventHook();
  2993. const onDisconnectedHook = shared.createEventHook();
  2994. const stateFromGamepad = (gamepad) => {
  2995. const hapticActuators = [];
  2996. const vibrationActuator = "vibrationActuator" in gamepad ? gamepad.vibrationActuator : null;
  2997. if (vibrationActuator)
  2998. hapticActuators.push(vibrationActuator);
  2999. if (gamepad.hapticActuators)
  3000. hapticActuators.push(...gamepad.hapticActuators);
  3001. return {
  3002. id: gamepad.id,
  3003. hapticActuators,
  3004. index: gamepad.index,
  3005. mapping: gamepad.mapping,
  3006. connected: gamepad.connected,
  3007. timestamp: gamepad.timestamp,
  3008. axes: gamepad.axes.map((axes) => axes),
  3009. buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))
  3010. };
  3011. };
  3012. const updateGamepadState = () => {
  3013. const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];
  3014. for (let i = 0; i < _gamepads.length; ++i) {
  3015. const gamepad = _gamepads[i];
  3016. if (gamepad) {
  3017. const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);
  3018. if (index > -1)
  3019. gamepads.value[index] = stateFromGamepad(gamepad);
  3020. }
  3021. }
  3022. };
  3023. const { isActive, pause, resume } = useRafFn(updateGamepadState);
  3024. const onGamepadConnected = (gamepad) => {
  3025. if (!gamepads.value.some(({ index }) => index === gamepad.index)) {
  3026. gamepads.value.push(stateFromGamepad(gamepad));
  3027. onConnectedHook.trigger(gamepad.index);
  3028. }
  3029. resume();
  3030. };
  3031. const onGamepadDisconnected = (gamepad) => {
  3032. gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);
  3033. onDisconnectedHook.trigger(gamepad.index);
  3034. };
  3035. useEventListener("gamepadconnected", (e) => onGamepadConnected(e.gamepad));
  3036. useEventListener("gamepaddisconnected", (e) => onGamepadDisconnected(e.gamepad));
  3037. shared.tryOnMounted(() => {
  3038. const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];
  3039. if (_gamepads) {
  3040. for (let i = 0; i < _gamepads.length; ++i) {
  3041. const gamepad = _gamepads[i];
  3042. if (gamepad)
  3043. onGamepadConnected(gamepad);
  3044. }
  3045. }
  3046. });
  3047. pause();
  3048. return {
  3049. isSupported,
  3050. onConnected: onConnectedHook.on,
  3051. onDisconnected: onDisconnectedHook.on,
  3052. gamepads,
  3053. pause,
  3054. resume,
  3055. isActive
  3056. };
  3057. }
  3058. function useGeolocation(options = {}) {
  3059. const {
  3060. enableHighAccuracy = true,
  3061. maximumAge = 3e4,
  3062. timeout = 27e3,
  3063. navigator = defaultNavigator,
  3064. immediate = true
  3065. } = options;
  3066. const isSupported = useSupported(() => navigator && "geolocation" in navigator);
  3067. const locatedAt = vueDemi.ref(null);
  3068. const error = vueDemi.ref(null);
  3069. const coords = vueDemi.ref({
  3070. accuracy: 0,
  3071. latitude: Infinity,
  3072. longitude: Infinity,
  3073. altitude: null,
  3074. altitudeAccuracy: null,
  3075. heading: null,
  3076. speed: null
  3077. });
  3078. function updatePosition(position) {
  3079. locatedAt.value = position.timestamp;
  3080. coords.value = position.coords;
  3081. error.value = null;
  3082. }
  3083. let watcher;
  3084. function resume() {
  3085. if (isSupported.value) {
  3086. watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {
  3087. enableHighAccuracy,
  3088. maximumAge,
  3089. timeout
  3090. });
  3091. }
  3092. }
  3093. if (immediate)
  3094. resume();
  3095. function pause() {
  3096. if (watcher && navigator)
  3097. navigator.geolocation.clearWatch(watcher);
  3098. }
  3099. shared.tryOnScopeDispose(() => {
  3100. pause();
  3101. });
  3102. return {
  3103. isSupported,
  3104. coords,
  3105. locatedAt,
  3106. error,
  3107. resume,
  3108. pause
  3109. };
  3110. }
  3111. const defaultEvents$1 = ["mousemove", "mousedown", "resize", "keydown", "touchstart", "wheel"];
  3112. const oneMinute = 6e4;
  3113. function useIdle(timeout = oneMinute, options = {}) {
  3114. const {
  3115. initialState = false,
  3116. listenForVisibilityChange = true,
  3117. events = defaultEvents$1,
  3118. window = defaultWindow,
  3119. eventFilter = shared.throttleFilter(50)
  3120. } = options;
  3121. const idle = vueDemi.ref(initialState);
  3122. const lastActive = vueDemi.ref(shared.timestamp());
  3123. let timer;
  3124. const onEvent = shared.createFilterWrapper(eventFilter, () => {
  3125. idle.value = false;
  3126. lastActive.value = shared.timestamp();
  3127. clearTimeout(timer);
  3128. timer = setTimeout(() => idle.value = true, timeout);
  3129. });
  3130. if (window) {
  3131. const document = window.document;
  3132. for (const event of events)
  3133. useEventListener(window, event, onEvent, { passive: true });
  3134. if (listenForVisibilityChange) {
  3135. useEventListener(document, "visibilitychange", () => {
  3136. if (!document.hidden)
  3137. onEvent();
  3138. });
  3139. }
  3140. }
  3141. timer = setTimeout(() => idle.value = true, timeout);
  3142. return { idle, lastActive };
  3143. }
  3144. var __defProp$9 = Object.defineProperty;
  3145. var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
  3146. var __hasOwnProp$a = Object.prototype.hasOwnProperty;
  3147. var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
  3148. var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  3149. var __spreadValues$9 = (a, b) => {
  3150. for (var prop in b || (b = {}))
  3151. if (__hasOwnProp$a.call(b, prop))
  3152. __defNormalProp$9(a, prop, b[prop]);
  3153. if (__getOwnPropSymbols$a)
  3154. for (var prop of __getOwnPropSymbols$a(b)) {
  3155. if (__propIsEnum$a.call(b, prop))
  3156. __defNormalProp$9(a, prop, b[prop]);
  3157. }
  3158. return a;
  3159. };
  3160. async function loadImage(options) {
  3161. return new Promise((resolve, reject) => {
  3162. const img = new Image();
  3163. const { src, srcset, sizes } = options;
  3164. img.src = src;
  3165. if (srcset)
  3166. img.srcset = srcset;
  3167. if (sizes)
  3168. img.sizes = sizes;
  3169. img.onload = () => resolve(img);
  3170. img.onerror = reject;
  3171. });
  3172. }
  3173. const useImage = (options, asyncStateOptions = {}) => {
  3174. const state = useAsyncState(() => loadImage(shared.resolveUnref(options)), void 0, __spreadValues$9({
  3175. resetOnExecute: true
  3176. }, asyncStateOptions));
  3177. vueDemi.watch(() => shared.resolveUnref(options), () => state.execute(asyncStateOptions.delay), { deep: true });
  3178. return state;
  3179. };
  3180. const ARRIVED_STATE_THRESHOLD_PIXELS = 1;
  3181. function useScroll(element, options = {}) {
  3182. const {
  3183. throttle = 0,
  3184. idle = 200,
  3185. onStop = shared.noop,
  3186. onScroll = shared.noop,
  3187. offset = {
  3188. left: 0,
  3189. right: 0,
  3190. top: 0,
  3191. bottom: 0
  3192. },
  3193. eventListenerOptions = {
  3194. capture: false,
  3195. passive: true
  3196. },
  3197. behavior = "auto"
  3198. } = options;
  3199. const internalX = vueDemi.ref(0);
  3200. const internalY = vueDemi.ref(0);
  3201. const x = vueDemi.computed({
  3202. get() {
  3203. return internalX.value;
  3204. },
  3205. set(x2) {
  3206. scrollTo(x2, void 0);
  3207. }
  3208. });
  3209. const y = vueDemi.computed({
  3210. get() {
  3211. return internalY.value;
  3212. },
  3213. set(y2) {
  3214. scrollTo(void 0, y2);
  3215. }
  3216. });
  3217. function scrollTo(_x, _y) {
  3218. var _a, _b, _c;
  3219. const _element = shared.resolveUnref(element);
  3220. if (!_element)
  3221. return;
  3222. (_c = _element instanceof Document ? document.body : _element) == null ? void 0 : _c.scrollTo({
  3223. top: (_a = shared.resolveUnref(_y)) != null ? _a : y.value,
  3224. left: (_b = shared.resolveUnref(_x)) != null ? _b : x.value,
  3225. behavior: shared.resolveUnref(behavior)
  3226. });
  3227. }
  3228. const isScrolling = vueDemi.ref(false);
  3229. const arrivedState = vueDemi.reactive({
  3230. left: true,
  3231. right: false,
  3232. top: true,
  3233. bottom: false
  3234. });
  3235. const directions = vueDemi.reactive({
  3236. left: false,
  3237. right: false,
  3238. top: false,
  3239. bottom: false
  3240. });
  3241. const onScrollEnd = shared.useDebounceFn((e) => {
  3242. isScrolling.value = false;
  3243. directions.left = false;
  3244. directions.right = false;
  3245. directions.top = false;
  3246. directions.bottom = false;
  3247. onStop(e);
  3248. }, throttle + idle);
  3249. const onScrollHandler = (e) => {
  3250. const eventTarget = e.target === document ? e.target.documentElement : e.target;
  3251. const scrollLeft = eventTarget.scrollLeft;
  3252. directions.left = scrollLeft < internalX.value;
  3253. directions.right = scrollLeft > internalY.value;
  3254. arrivedState.left = scrollLeft <= 0 + (offset.left || 0);
  3255. arrivedState.right = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;
  3256. internalX.value = scrollLeft;
  3257. let scrollTop = eventTarget.scrollTop;
  3258. if (e.target === document && !scrollTop)
  3259. scrollTop = document.body.scrollTop;
  3260. directions.top = scrollTop < internalY.value;
  3261. directions.bottom = scrollTop > internalY.value;
  3262. arrivedState.top = scrollTop <= 0 + (offset.top || 0);
  3263. arrivedState.bottom = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;
  3264. internalY.value = scrollTop;
  3265. isScrolling.value = true;
  3266. onScrollEnd(e);
  3267. onScroll(e);
  3268. };
  3269. useEventListener(element, "scroll", throttle ? shared.useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);
  3270. return {
  3271. x,
  3272. y,
  3273. isScrolling,
  3274. arrivedState,
  3275. directions
  3276. };
  3277. }
  3278. var __defProp$8 = Object.defineProperty;
  3279. var __defProps$2 = Object.defineProperties;
  3280. var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
  3281. var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
  3282. var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
  3283. var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
  3284. var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  3285. var __spreadValues$8 = (a, b) => {
  3286. for (var prop in b || (b = {}))
  3287. if (__hasOwnProp$9.call(b, prop))
  3288. __defNormalProp$8(a, prop, b[prop]);
  3289. if (__getOwnPropSymbols$9)
  3290. for (var prop of __getOwnPropSymbols$9(b)) {
  3291. if (__propIsEnum$9.call(b, prop))
  3292. __defNormalProp$8(a, prop, b[prop]);
  3293. }
  3294. return a;
  3295. };
  3296. var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
  3297. function useInfiniteScroll(element, onLoadMore, options = {}) {
  3298. var _a, _b;
  3299. const direction = (_a = options.direction) != null ? _a : "bottom";
  3300. const state = vueDemi.reactive(useScroll(element, __spreadProps$2(__spreadValues$8({}, options), {
  3301. offset: __spreadValues$8({
  3302. [direction]: (_b = options.distance) != null ? _b : 0
  3303. }, options.offset)
  3304. })));
  3305. vueDemi.watch(() => state.arrivedState[direction], async (v) => {
  3306. var _a2, _b2;
  3307. if (v) {
  3308. const elem = shared.resolveUnref(element);
  3309. const previous = {
  3310. height: (_a2 = elem == null ? void 0 : elem.scrollHeight) != null ? _a2 : 0,
  3311. width: (_b2 = elem == null ? void 0 : elem.scrollWidth) != null ? _b2 : 0
  3312. };
  3313. await onLoadMore(state);
  3314. if (options.preserveScrollPosition && elem) {
  3315. vueDemi.nextTick(() => {
  3316. elem.scrollTo({
  3317. top: elem.scrollHeight - previous.height,
  3318. left: elem.scrollWidth - previous.width
  3319. });
  3320. });
  3321. }
  3322. }
  3323. });
  3324. }
  3325. function useIntersectionObserver(target, callback, options = {}) {
  3326. const {
  3327. root,
  3328. rootMargin = "0px",
  3329. threshold = 0.1,
  3330. window = defaultWindow
  3331. } = options;
  3332. const isSupported = useSupported(() => window && "IntersectionObserver" in window);
  3333. let cleanup = shared.noop;
  3334. const stopWatch = isSupported.value ? vueDemi.watch(() => ({
  3335. el: unrefElement(target),
  3336. root: unrefElement(root)
  3337. }), ({ el, root: root2 }) => {
  3338. cleanup();
  3339. if (!el)
  3340. return;
  3341. const observer = new IntersectionObserver(callback, {
  3342. root: root2,
  3343. rootMargin,
  3344. threshold
  3345. });
  3346. observer.observe(el);
  3347. cleanup = () => {
  3348. observer.disconnect();
  3349. cleanup = shared.noop;
  3350. };
  3351. }, { immediate: true, flush: "post" }) : shared.noop;
  3352. const stop = () => {
  3353. cleanup();
  3354. stopWatch();
  3355. };
  3356. shared.tryOnScopeDispose(stop);
  3357. return {
  3358. isSupported,
  3359. stop
  3360. };
  3361. }
  3362. const defaultEvents = ["mousedown", "mouseup", "keydown", "keyup"];
  3363. function useKeyModifier(modifier, options = {}) {
  3364. const {
  3365. events = defaultEvents,
  3366. document = defaultDocument,
  3367. initial = null
  3368. } = options;
  3369. const state = vueDemi.ref(initial);
  3370. if (document) {
  3371. events.forEach((listenerEvent) => {
  3372. useEventListener(document, listenerEvent, (evt) => {
  3373. if (typeof evt.getModifierState === "function")
  3374. state.value = evt.getModifierState(modifier);
  3375. });
  3376. });
  3377. }
  3378. return state;
  3379. }
  3380. function useLocalStorage(key, initialValue, options = {}) {
  3381. const { window = defaultWindow } = options;
  3382. return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);
  3383. }
  3384. const DefaultMagicKeysAliasMap = {
  3385. ctrl: "control",
  3386. command: "meta",
  3387. cmd: "meta",
  3388. option: "alt",
  3389. up: "arrowup",
  3390. down: "arrowdown",
  3391. left: "arrowleft",
  3392. right: "arrowright"
  3393. };
  3394. function useMagicKeys(options = {}) {
  3395. const {
  3396. reactive: useReactive = false,
  3397. target = defaultWindow,
  3398. aliasMap = DefaultMagicKeysAliasMap,
  3399. passive = true,
  3400. onEventFired = shared.noop
  3401. } = options;
  3402. const current = vueDemi.reactive(new Set());
  3403. const obj = { toJSON() {
  3404. return {};
  3405. }, current };
  3406. const refs = useReactive ? vueDemi.reactive(obj) : obj;
  3407. const metaDeps = new Set();
  3408. const usedKeys = new Set();
  3409. function setRefs(key, value) {
  3410. if (key in refs) {
  3411. if (useReactive)
  3412. refs[key] = value;
  3413. else
  3414. refs[key].value = value;
  3415. }
  3416. }
  3417. function reset() {
  3418. current.clear();
  3419. for (const key of usedKeys)
  3420. setRefs(key, false);
  3421. }
  3422. function updateRefs(e, value) {
  3423. var _a, _b;
  3424. const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();
  3425. const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();
  3426. const values = [code, key].filter(Boolean);
  3427. if (key) {
  3428. if (value)
  3429. current.add(key);
  3430. else
  3431. current.delete(key);
  3432. }
  3433. for (const key2 of values) {
  3434. usedKeys.add(key2);
  3435. setRefs(key2, value);
  3436. }
  3437. if (key === "meta" && !value) {
  3438. metaDeps.forEach((key2) => {
  3439. current.delete(key2);
  3440. setRefs(key2, false);
  3441. });
  3442. metaDeps.clear();
  3443. } else if (typeof e.getModifierState === "function" && e.getModifierState("Meta") && value) {
  3444. [...current, ...values].forEach((key2) => metaDeps.add(key2));
  3445. }
  3446. }
  3447. useEventListener(target, "keydown", (e) => {
  3448. updateRefs(e, true);
  3449. return onEventFired(e);
  3450. }, { passive });
  3451. useEventListener(target, "keyup", (e) => {
  3452. updateRefs(e, false);
  3453. return onEventFired(e);
  3454. }, { passive });
  3455. useEventListener("blur", reset, { passive: true });
  3456. useEventListener("focus", reset, { passive: true });
  3457. const proxy = new Proxy(refs, {
  3458. get(target2, prop, rec) {
  3459. if (typeof prop !== "string")
  3460. return Reflect.get(target2, prop, rec);
  3461. prop = prop.toLowerCase();
  3462. if (prop in aliasMap)
  3463. prop = aliasMap[prop];
  3464. if (!(prop in refs)) {
  3465. if (/[+_-]/.test(prop)) {
  3466. const keys = prop.split(/[+_-]/g).map((i) => i.trim());
  3467. refs[prop] = vueDemi.computed(() => keys.every((key) => vueDemi.unref(proxy[key])));
  3468. } else {
  3469. refs[prop] = vueDemi.ref(false);
  3470. }
  3471. }
  3472. const r = Reflect.get(target2, prop, rec);
  3473. return useReactive ? vueDemi.unref(r) : r;
  3474. }
  3475. });
  3476. return proxy;
  3477. }
  3478. var __defProp$7 = Object.defineProperty;
  3479. var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
  3480. var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
  3481. var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
  3482. var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  3483. var __spreadValues$7 = (a, b) => {
  3484. for (var prop in b || (b = {}))
  3485. if (__hasOwnProp$8.call(b, prop))
  3486. __defNormalProp$7(a, prop, b[prop]);
  3487. if (__getOwnPropSymbols$8)
  3488. for (var prop of __getOwnPropSymbols$8(b)) {
  3489. if (__propIsEnum$8.call(b, prop))
  3490. __defNormalProp$7(a, prop, b[prop]);
  3491. }
  3492. return a;
  3493. };
  3494. function usingElRef(source, cb) {
  3495. if (shared.resolveUnref(source))
  3496. cb(shared.resolveUnref(source));
  3497. }
  3498. function timeRangeToArray(timeRanges) {
  3499. let ranges = [];
  3500. for (let i = 0; i < timeRanges.length; ++i)
  3501. ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];
  3502. return ranges;
  3503. }
  3504. function tracksToArray(tracks) {
  3505. return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));
  3506. }
  3507. const defaultOptions = {
  3508. src: "",
  3509. tracks: []
  3510. };
  3511. function useMediaControls(target, options = {}) {
  3512. options = __spreadValues$7(__spreadValues$7({}, defaultOptions), options);
  3513. const {
  3514. document = defaultDocument
  3515. } = options;
  3516. const currentTime = vueDemi.ref(0);
  3517. const duration = vueDemi.ref(0);
  3518. const seeking = vueDemi.ref(false);
  3519. const volume = vueDemi.ref(1);
  3520. const waiting = vueDemi.ref(false);
  3521. const ended = vueDemi.ref(false);
  3522. const playing = vueDemi.ref(false);
  3523. const rate = vueDemi.ref(1);
  3524. const stalled = vueDemi.ref(false);
  3525. const buffered = vueDemi.ref([]);
  3526. const tracks = vueDemi.ref([]);
  3527. const selectedTrack = vueDemi.ref(-1);
  3528. const isPictureInPicture = vueDemi.ref(false);
  3529. const muted = vueDemi.ref(false);
  3530. const supportsPictureInPicture = document && "pictureInPictureEnabled" in document;
  3531. const sourceErrorEvent = shared.createEventHook();
  3532. const disableTrack = (track) => {
  3533. usingElRef(target, (el) => {
  3534. if (track) {
  3535. const id = shared.isNumber(track) ? track : track.id;
  3536. el.textTracks[id].mode = "disabled";
  3537. } else {
  3538. for (let i = 0; i < el.textTracks.length; ++i)
  3539. el.textTracks[i].mode = "disabled";
  3540. }
  3541. selectedTrack.value = -1;
  3542. });
  3543. };
  3544. const enableTrack = (track, disableTracks = true) => {
  3545. usingElRef(target, (el) => {
  3546. const id = shared.isNumber(track) ? track : track.id;
  3547. if (disableTracks)
  3548. disableTrack();
  3549. el.textTracks[id].mode = "showing";
  3550. selectedTrack.value = id;
  3551. });
  3552. };
  3553. const togglePictureInPicture = () => {
  3554. return new Promise((resolve, reject) => {
  3555. usingElRef(target, async (el) => {
  3556. if (supportsPictureInPicture) {
  3557. if (!isPictureInPicture.value) {
  3558. el.requestPictureInPicture().then(resolve).catch(reject);
  3559. } else {
  3560. document.exitPictureInPicture().then(resolve).catch(reject);
  3561. }
  3562. }
  3563. });
  3564. });
  3565. };
  3566. vueDemi.watchEffect(() => {
  3567. if (!document)
  3568. return;
  3569. const el = shared.resolveUnref(target);
  3570. if (!el)
  3571. return;
  3572. const src = shared.resolveUnref(options.src);
  3573. let sources = [];
  3574. if (!src)
  3575. return;
  3576. if (shared.isString(src))
  3577. sources = [{ src }];
  3578. else if (Array.isArray(src))
  3579. sources = src;
  3580. else if (shared.isObject(src))
  3581. sources = [src];
  3582. el.querySelectorAll("source").forEach((e) => {
  3583. e.removeEventListener("error", sourceErrorEvent.trigger);
  3584. e.remove();
  3585. });
  3586. sources.forEach(({ src: src2, type }) => {
  3587. const source = document.createElement("source");
  3588. source.setAttribute("src", src2);
  3589. source.setAttribute("type", type || "");
  3590. source.addEventListener("error", sourceErrorEvent.trigger);
  3591. el.appendChild(source);
  3592. });
  3593. el.load();
  3594. });
  3595. shared.tryOnScopeDispose(() => {
  3596. const el = shared.resolveUnref(target);
  3597. if (!el)
  3598. return;
  3599. el.querySelectorAll("source").forEach((e) => e.removeEventListener("error", sourceErrorEvent.trigger));
  3600. });
  3601. vueDemi.watch(volume, (vol) => {
  3602. const el = shared.resolveUnref(target);
  3603. if (!el)
  3604. return;
  3605. el.volume = vol;
  3606. });
  3607. vueDemi.watch(muted, (mute) => {
  3608. const el = shared.resolveUnref(target);
  3609. if (!el)
  3610. return;
  3611. el.muted = mute;
  3612. });
  3613. vueDemi.watch(rate, (rate2) => {
  3614. const el = shared.resolveUnref(target);
  3615. if (!el)
  3616. return;
  3617. el.playbackRate = rate2;
  3618. });
  3619. vueDemi.watchEffect(() => {
  3620. if (!document)
  3621. return;
  3622. const textTracks = shared.resolveUnref(options.tracks);
  3623. const el = shared.resolveUnref(target);
  3624. if (!textTracks || !textTracks.length || !el)
  3625. return;
  3626. el.querySelectorAll("track").forEach((e) => e.remove());
  3627. textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {
  3628. const track = document.createElement("track");
  3629. track.default = isDefault || false;
  3630. track.kind = kind;
  3631. track.label = label;
  3632. track.src = src;
  3633. track.srclang = srcLang;
  3634. if (track.default)
  3635. selectedTrack.value = i;
  3636. el.appendChild(track);
  3637. });
  3638. });
  3639. const { ignoreUpdates: ignoreCurrentTimeUpdates } = shared.watchIgnorable(currentTime, (time) => {
  3640. const el = shared.resolveUnref(target);
  3641. if (!el)
  3642. return;
  3643. el.currentTime = time;
  3644. });
  3645. const { ignoreUpdates: ignorePlayingUpdates } = shared.watchIgnorable(playing, (isPlaying) => {
  3646. const el = shared.resolveUnref(target);
  3647. if (!el)
  3648. return;
  3649. isPlaying ? el.play() : el.pause();
  3650. });
  3651. useEventListener(target, "timeupdate", () => ignoreCurrentTimeUpdates(() => currentTime.value = shared.resolveUnref(target).currentTime));
  3652. useEventListener(target, "durationchange", () => duration.value = shared.resolveUnref(target).duration);
  3653. useEventListener(target, "progress", () => buffered.value = timeRangeToArray(shared.resolveUnref(target).buffered));
  3654. useEventListener(target, "seeking", () => seeking.value = true);
  3655. useEventListener(target, "seeked", () => seeking.value = false);
  3656. useEventListener(target, "waiting", () => waiting.value = true);
  3657. useEventListener(target, "playing", () => waiting.value = false);
  3658. useEventListener(target, "ratechange", () => rate.value = shared.resolveUnref(target).playbackRate);
  3659. useEventListener(target, "stalled", () => stalled.value = true);
  3660. useEventListener(target, "ended", () => ended.value = true);
  3661. useEventListener(target, "pause", () => ignorePlayingUpdates(() => playing.value = false));
  3662. useEventListener(target, "play", () => ignorePlayingUpdates(() => playing.value = true));
  3663. useEventListener(target, "enterpictureinpicture", () => isPictureInPicture.value = true);
  3664. useEventListener(target, "leavepictureinpicture", () => isPictureInPicture.value = false);
  3665. useEventListener(target, "volumechange", () => {
  3666. const el = shared.resolveUnref(target);
  3667. if (!el)
  3668. return;
  3669. volume.value = el.volume;
  3670. muted.value = el.muted;
  3671. });
  3672. const listeners = [];
  3673. const stop = vueDemi.watch([target], () => {
  3674. const el = shared.resolveUnref(target);
  3675. if (!el)
  3676. return;
  3677. stop();
  3678. listeners[0] = useEventListener(el.textTracks, "addtrack", () => tracks.value = tracksToArray(el.textTracks));
  3679. listeners[1] = useEventListener(el.textTracks, "removetrack", () => tracks.value = tracksToArray(el.textTracks));
  3680. listeners[2] = useEventListener(el.textTracks, "change", () => tracks.value = tracksToArray(el.textTracks));
  3681. });
  3682. shared.tryOnScopeDispose(() => listeners.forEach((listener) => listener()));
  3683. return {
  3684. currentTime,
  3685. duration,
  3686. waiting,
  3687. seeking,
  3688. ended,
  3689. stalled,
  3690. buffered,
  3691. playing,
  3692. rate,
  3693. volume,
  3694. muted,
  3695. tracks,
  3696. selectedTrack,
  3697. enableTrack,
  3698. disableTrack,
  3699. supportsPictureInPicture,
  3700. togglePictureInPicture,
  3701. isPictureInPicture,
  3702. onSourceError: sourceErrorEvent.on
  3703. };
  3704. }
  3705. const getMapVue2Compat = () => {
  3706. const data = vueDemi.reactive({});
  3707. return {
  3708. get: (key) => data[key],
  3709. set: (key, value) => vueDemi.set(data, key, value),
  3710. has: (key) => shared.hasOwn(data, key),
  3711. delete: (key) => vueDemi.del(data, key),
  3712. clear: () => {
  3713. Object.keys(data).forEach((key) => {
  3714. vueDemi.del(data, key);
  3715. });
  3716. }
  3717. };
  3718. };
  3719. function useMemoize(resolver, options) {
  3720. const initCache = () => {
  3721. if (options == null ? void 0 : options.cache)
  3722. return vueDemi.reactive(options.cache);
  3723. if (vueDemi.isVue2)
  3724. return getMapVue2Compat();
  3725. return vueDemi.reactive(new Map());
  3726. };
  3727. const cache = initCache();
  3728. const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);
  3729. const _loadData = (key, ...args) => {
  3730. cache.set(key, resolver(...args));
  3731. return cache.get(key);
  3732. };
  3733. const loadData = (...args) => _loadData(generateKey(...args), ...args);
  3734. const deleteData = (...args) => {
  3735. cache.delete(generateKey(...args));
  3736. };
  3737. const clearData = () => {
  3738. cache.clear();
  3739. };
  3740. const memoized = (...args) => {
  3741. const key = generateKey(...args);
  3742. if (cache.has(key))
  3743. return cache.get(key);
  3744. return _loadData(key, ...args);
  3745. };
  3746. memoized.load = loadData;
  3747. memoized.delete = deleteData;
  3748. memoized.clear = clearData;
  3749. memoized.generateKey = generateKey;
  3750. memoized.cache = cache;
  3751. return memoized;
  3752. }
  3753. function useMemory(options = {}) {
  3754. const memory = vueDemi.ref();
  3755. const isSupported = useSupported(() => typeof performance !== "undefined" && "memory" in performance);
  3756. if (isSupported.value) {
  3757. const { interval = 1e3 } = options;
  3758. shared.useIntervalFn(() => {
  3759. memory.value = performance.memory;
  3760. }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });
  3761. }
  3762. return { isSupported, memory };
  3763. }
  3764. function useMounted() {
  3765. const isMounted = vueDemi.ref(false);
  3766. vueDemi.onMounted(() => {
  3767. isMounted.value = true;
  3768. });
  3769. return isMounted;
  3770. }
  3771. function useMouse(options = {}) {
  3772. const {
  3773. type = "page",
  3774. touch = true,
  3775. resetOnTouchEnds = false,
  3776. initialValue = { x: 0, y: 0 },
  3777. window = defaultWindow,
  3778. eventFilter
  3779. } = options;
  3780. const x = vueDemi.ref(initialValue.x);
  3781. const y = vueDemi.ref(initialValue.y);
  3782. const sourceType = vueDemi.ref(null);
  3783. const mouseHandler = (event) => {
  3784. if (type === "page") {
  3785. x.value = event.pageX;
  3786. y.value = event.pageY;
  3787. } else if (type === "client") {
  3788. x.value = event.clientX;
  3789. y.value = event.clientY;
  3790. }
  3791. sourceType.value = "mouse";
  3792. };
  3793. const reset = () => {
  3794. x.value = initialValue.x;
  3795. y.value = initialValue.y;
  3796. };
  3797. const touchHandler = (event) => {
  3798. if (event.touches.length > 0) {
  3799. const touch2 = event.touches[0];
  3800. if (type === "page") {
  3801. x.value = touch2.pageX;
  3802. y.value = touch2.pageY;
  3803. } else if (type === "client") {
  3804. x.value = touch2.clientX;
  3805. y.value = touch2.clientY;
  3806. }
  3807. sourceType.value = "touch";
  3808. }
  3809. };
  3810. const mouseHandlerWrapper = (event) => {
  3811. return eventFilter === void 0 ? mouseHandler(event) : eventFilter(() => mouseHandler(event), {});
  3812. };
  3813. const touchHandlerWrapper = (event) => {
  3814. return eventFilter === void 0 ? touchHandler(event) : eventFilter(() => touchHandler(event), {});
  3815. };
  3816. if (window) {
  3817. useEventListener(window, "mousemove", mouseHandlerWrapper, { passive: true });
  3818. useEventListener(window, "dragover", mouseHandlerWrapper, { passive: true });
  3819. if (touch) {
  3820. useEventListener(window, "touchstart", touchHandlerWrapper, { passive: true });
  3821. useEventListener(window, "touchmove", touchHandlerWrapper, { passive: true });
  3822. if (resetOnTouchEnds)
  3823. useEventListener(window, "touchend", reset, { passive: true });
  3824. }
  3825. }
  3826. return {
  3827. x,
  3828. y,
  3829. sourceType
  3830. };
  3831. }
  3832. function useMouseInElement(target, options = {}) {
  3833. const {
  3834. handleOutside = true,
  3835. window = defaultWindow
  3836. } = options;
  3837. const { x, y, sourceType } = useMouse(options);
  3838. const targetRef = vueDemi.ref(target != null ? target : window == null ? void 0 : window.document.body);
  3839. const elementX = vueDemi.ref(0);
  3840. const elementY = vueDemi.ref(0);
  3841. const elementPositionX = vueDemi.ref(0);
  3842. const elementPositionY = vueDemi.ref(0);
  3843. const elementHeight = vueDemi.ref(0);
  3844. const elementWidth = vueDemi.ref(0);
  3845. const isOutside = vueDemi.ref(true);
  3846. let stop = () => {
  3847. };
  3848. if (window) {
  3849. stop = vueDemi.watch([targetRef, x, y], () => {
  3850. const el = unrefElement(targetRef);
  3851. if (!el)
  3852. return;
  3853. const {
  3854. left,
  3855. top,
  3856. width,
  3857. height
  3858. } = el.getBoundingClientRect();
  3859. elementPositionX.value = left + window.pageXOffset;
  3860. elementPositionY.value = top + window.pageYOffset;
  3861. elementHeight.value = height;
  3862. elementWidth.value = width;
  3863. const elX = x.value - elementPositionX.value;
  3864. const elY = y.value - elementPositionY.value;
  3865. isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;
  3866. if (handleOutside || !isOutside.value) {
  3867. elementX.value = elX;
  3868. elementY.value = elY;
  3869. }
  3870. }, { immediate: true });
  3871. }
  3872. return {
  3873. x,
  3874. y,
  3875. sourceType,
  3876. elementX,
  3877. elementY,
  3878. elementPositionX,
  3879. elementPositionY,
  3880. elementHeight,
  3881. elementWidth,
  3882. isOutside,
  3883. stop
  3884. };
  3885. }
  3886. function useMousePressed(options = {}) {
  3887. const {
  3888. touch = true,
  3889. drag = true,
  3890. initialValue = false,
  3891. window = defaultWindow
  3892. } = options;
  3893. const pressed = vueDemi.ref(initialValue);
  3894. const sourceType = vueDemi.ref(null);
  3895. if (!window) {
  3896. return {
  3897. pressed,
  3898. sourceType
  3899. };
  3900. }
  3901. const onPressed = (srcType) => () => {
  3902. pressed.value = true;
  3903. sourceType.value = srcType;
  3904. };
  3905. const onReleased = () => {
  3906. pressed.value = false;
  3907. sourceType.value = null;
  3908. };
  3909. const target = vueDemi.computed(() => unrefElement(options.target) || window);
  3910. useEventListener(target, "mousedown", onPressed("mouse"), { passive: true });
  3911. useEventListener(window, "mouseleave", onReleased, { passive: true });
  3912. useEventListener(window, "mouseup", onReleased, { passive: true });
  3913. if (drag) {
  3914. useEventListener(target, "dragstart", onPressed("mouse"), { passive: true });
  3915. useEventListener(window, "drop", onReleased, { passive: true });
  3916. useEventListener(window, "dragend", onReleased, { passive: true });
  3917. }
  3918. if (touch) {
  3919. useEventListener(target, "touchstart", onPressed("touch"), { passive: true });
  3920. useEventListener(window, "touchend", onReleased, { passive: true });
  3921. useEventListener(window, "touchcancel", onReleased, { passive: true });
  3922. }
  3923. return {
  3924. pressed,
  3925. sourceType
  3926. };
  3927. }
  3928. var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
  3929. var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
  3930. var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
  3931. var __objRest$1 = (source, exclude) => {
  3932. var target = {};
  3933. for (var prop in source)
  3934. if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)
  3935. target[prop] = source[prop];
  3936. if (source != null && __getOwnPropSymbols$7)
  3937. for (var prop of __getOwnPropSymbols$7(source)) {
  3938. if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))
  3939. target[prop] = source[prop];
  3940. }
  3941. return target;
  3942. };
  3943. function useMutationObserver(target, callback, options = {}) {
  3944. const _a = options, { window = defaultWindow } = _a, mutationOptions = __objRest$1(_a, ["window"]);
  3945. let observer;
  3946. const isSupported = useSupported(() => window && "MutationObserver" in window);
  3947. const cleanup = () => {
  3948. if (observer) {
  3949. observer.disconnect();
  3950. observer = void 0;
  3951. }
  3952. };
  3953. const stopWatch = vueDemi.watch(() => unrefElement(target), (el) => {
  3954. cleanup();
  3955. if (isSupported.value && window && el) {
  3956. observer = new MutationObserver(callback);
  3957. observer.observe(el, mutationOptions);
  3958. }
  3959. }, { immediate: true });
  3960. const stop = () => {
  3961. cleanup();
  3962. stopWatch();
  3963. };
  3964. shared.tryOnScopeDispose(stop);
  3965. return {
  3966. isSupported,
  3967. stop
  3968. };
  3969. }
  3970. const useNavigatorLanguage = (options = {}) => {
  3971. const { window = defaultWindow } = options;
  3972. const navigator = window == null ? void 0 : window.navigator;
  3973. const isSupported = useSupported(() => navigator && "language" in navigator);
  3974. const language = vueDemi.ref(navigator == null ? void 0 : navigator.language);
  3975. useEventListener(window, "languagechange", () => {
  3976. if (navigator)
  3977. language.value = navigator.language;
  3978. });
  3979. return {
  3980. isSupported,
  3981. language
  3982. };
  3983. };
  3984. function useNetwork(options = {}) {
  3985. const { window = defaultWindow } = options;
  3986. const navigator = window == null ? void 0 : window.navigator;
  3987. const isSupported = useSupported(() => navigator && "connection" in navigator);
  3988. const isOnline = vueDemi.ref(true);
  3989. const saveData = vueDemi.ref(false);
  3990. const offlineAt = vueDemi.ref(void 0);
  3991. const onlineAt = vueDemi.ref(void 0);
  3992. const downlink = vueDemi.ref(void 0);
  3993. const downlinkMax = vueDemi.ref(void 0);
  3994. const rtt = vueDemi.ref(void 0);
  3995. const effectiveType = vueDemi.ref(void 0);
  3996. const type = vueDemi.ref("unknown");
  3997. const connection = isSupported.value && navigator.connection;
  3998. function updateNetworkInformation() {
  3999. if (!navigator)
  4000. return;
  4001. isOnline.value = navigator.onLine;
  4002. offlineAt.value = isOnline.value ? void 0 : Date.now();
  4003. onlineAt.value = isOnline.value ? Date.now() : void 0;
  4004. if (connection) {
  4005. downlink.value = connection.downlink;
  4006. downlinkMax.value = connection.downlinkMax;
  4007. effectiveType.value = connection.effectiveType;
  4008. rtt.value = connection.rtt;
  4009. saveData.value = connection.saveData;
  4010. type.value = connection.type;
  4011. }
  4012. }
  4013. if (window) {
  4014. useEventListener(window, "offline", () => {
  4015. isOnline.value = false;
  4016. offlineAt.value = Date.now();
  4017. });
  4018. useEventListener(window, "online", () => {
  4019. isOnline.value = true;
  4020. onlineAt.value = Date.now();
  4021. });
  4022. }
  4023. if (connection)
  4024. useEventListener(connection, "change", updateNetworkInformation, false);
  4025. updateNetworkInformation();
  4026. return {
  4027. isSupported,
  4028. isOnline,
  4029. saveData,
  4030. offlineAt,
  4031. onlineAt,
  4032. downlink,
  4033. downlinkMax,
  4034. effectiveType,
  4035. rtt,
  4036. type
  4037. };
  4038. }
  4039. var __defProp$6 = Object.defineProperty;
  4040. var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
  4041. var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
  4042. var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
  4043. var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  4044. var __spreadValues$6 = (a, b) => {
  4045. for (var prop in b || (b = {}))
  4046. if (__hasOwnProp$6.call(b, prop))
  4047. __defNormalProp$6(a, prop, b[prop]);
  4048. if (__getOwnPropSymbols$6)
  4049. for (var prop of __getOwnPropSymbols$6(b)) {
  4050. if (__propIsEnum$6.call(b, prop))
  4051. __defNormalProp$6(a, prop, b[prop]);
  4052. }
  4053. return a;
  4054. };
  4055. function useNow(options = {}) {
  4056. const {
  4057. controls: exposeControls = false,
  4058. interval = "requestAnimationFrame"
  4059. } = options;
  4060. const now = vueDemi.ref(new Date());
  4061. const update = () => now.value = new Date();
  4062. const controls = interval === "requestAnimationFrame" ? useRafFn(update, { immediate: true }) : shared.useIntervalFn(update, interval, { immediate: true });
  4063. if (exposeControls) {
  4064. return __spreadValues$6({
  4065. now
  4066. }, controls);
  4067. } else {
  4068. return now;
  4069. }
  4070. }
  4071. function useObjectUrl(object) {
  4072. const url = vueDemi.ref();
  4073. const release = () => {
  4074. if (url.value)
  4075. URL.revokeObjectURL(url.value);
  4076. url.value = void 0;
  4077. };
  4078. vueDemi.watch(() => vueDemi.unref(object), (newObject) => {
  4079. release();
  4080. if (newObject)
  4081. url.value = URL.createObjectURL(newObject);
  4082. }, { immediate: true });
  4083. shared.tryOnScopeDispose(release);
  4084. return vueDemi.readonly(url);
  4085. }
  4086. function useClamp(value, min, max) {
  4087. const _value = vueDemi.ref(value);
  4088. return vueDemi.computed({
  4089. get() {
  4090. return _value.value = shared.clamp(_value.value, shared.resolveUnref(min), shared.resolveUnref(max));
  4091. },
  4092. set(value2) {
  4093. _value.value = shared.clamp(value2, shared.resolveUnref(min), shared.resolveUnref(max));
  4094. }
  4095. });
  4096. }
  4097. function useOffsetPagination(options) {
  4098. const {
  4099. total = Infinity,
  4100. pageSize = 10,
  4101. page = 1,
  4102. onPageChange = shared.noop,
  4103. onPageSizeChange = shared.noop,
  4104. onPageCountChange = shared.noop
  4105. } = options;
  4106. const currentPageSize = useClamp(pageSize, 1, Infinity);
  4107. const pageCount = vueDemi.computed(() => Math.max(1, Math.ceil(vueDemi.unref(total) / vueDemi.unref(currentPageSize))));
  4108. const currentPage = useClamp(page, 1, pageCount);
  4109. const isFirstPage = vueDemi.computed(() => currentPage.value === 1);
  4110. const isLastPage = vueDemi.computed(() => currentPage.value === pageCount.value);
  4111. if (vueDemi.isRef(page))
  4112. shared.syncRef(page, currentPage);
  4113. if (vueDemi.isRef(pageSize))
  4114. shared.syncRef(pageSize, currentPageSize);
  4115. function prev() {
  4116. currentPage.value--;
  4117. }
  4118. function next() {
  4119. currentPage.value++;
  4120. }
  4121. const returnValue = {
  4122. currentPage,
  4123. currentPageSize,
  4124. pageCount,
  4125. isFirstPage,
  4126. isLastPage,
  4127. prev,
  4128. next
  4129. };
  4130. vueDemi.watch(currentPage, () => {
  4131. onPageChange(vueDemi.reactive(returnValue));
  4132. });
  4133. vueDemi.watch(currentPageSize, () => {
  4134. onPageSizeChange(vueDemi.reactive(returnValue));
  4135. });
  4136. vueDemi.watch(pageCount, () => {
  4137. onPageCountChange(vueDemi.reactive(returnValue));
  4138. });
  4139. return returnValue;
  4140. }
  4141. function useOnline(options = {}) {
  4142. const { isOnline } = useNetwork(options);
  4143. return isOnline;
  4144. }
  4145. function usePageLeave(options = {}) {
  4146. const { window = defaultWindow } = options;
  4147. const isLeft = vueDemi.ref(false);
  4148. const handler = (event) => {
  4149. if (!window)
  4150. return;
  4151. event = event || window.event;
  4152. const from = event.relatedTarget || event.toElement;
  4153. isLeft.value = !from;
  4154. };
  4155. if (window) {
  4156. useEventListener(window, "mouseout", handler, { passive: true });
  4157. useEventListener(window.document, "mouseleave", handler, { passive: true });
  4158. useEventListener(window.document, "mouseenter", handler, { passive: true });
  4159. }
  4160. return isLeft;
  4161. }
  4162. function useParallax(target, options = {}) {
  4163. const {
  4164. deviceOrientationTiltAdjust = (i) => i,
  4165. deviceOrientationRollAdjust = (i) => i,
  4166. mouseTiltAdjust = (i) => i,
  4167. mouseRollAdjust = (i) => i,
  4168. window = defaultWindow
  4169. } = options;
  4170. const orientation = vueDemi.reactive(useDeviceOrientation({ window }));
  4171. const {
  4172. elementX: x,
  4173. elementY: y,
  4174. elementWidth: width,
  4175. elementHeight: height
  4176. } = useMouseInElement(target, { handleOutside: false, window });
  4177. const source = vueDemi.computed(() => {
  4178. if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))
  4179. return "deviceOrientation";
  4180. return "mouse";
  4181. });
  4182. const roll = vueDemi.computed(() => {
  4183. if (source.value === "deviceOrientation") {
  4184. const value = -orientation.beta / 90;
  4185. return deviceOrientationRollAdjust(value);
  4186. } else {
  4187. const value = -(y.value - height.value / 2) / height.value;
  4188. return mouseRollAdjust(value);
  4189. }
  4190. });
  4191. const tilt = vueDemi.computed(() => {
  4192. if (source.value === "deviceOrientation") {
  4193. const value = orientation.gamma / 90;
  4194. return deviceOrientationTiltAdjust(value);
  4195. } else {
  4196. const value = (x.value - width.value / 2) / width.value;
  4197. return mouseTiltAdjust(value);
  4198. }
  4199. });
  4200. return { roll, tilt, source };
  4201. }
  4202. var __defProp$5 = Object.defineProperty;
  4203. var __defProps$1 = Object.defineProperties;
  4204. var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
  4205. var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
  4206. var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
  4207. var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
  4208. var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  4209. var __spreadValues$5 = (a, b) => {
  4210. for (var prop in b || (b = {}))
  4211. if (__hasOwnProp$5.call(b, prop))
  4212. __defNormalProp$5(a, prop, b[prop]);
  4213. if (__getOwnPropSymbols$5)
  4214. for (var prop of __getOwnPropSymbols$5(b)) {
  4215. if (__propIsEnum$5.call(b, prop))
  4216. __defNormalProp$5(a, prop, b[prop]);
  4217. }
  4218. return a;
  4219. };
  4220. var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
  4221. const defaultState = {
  4222. x: 0,
  4223. y: 0,
  4224. pointerId: 0,
  4225. pressure: 0,
  4226. tiltX: 0,
  4227. tiltY: 0,
  4228. width: 0,
  4229. height: 0,
  4230. twist: 0,
  4231. pointerType: null
  4232. };
  4233. const keys = /* @__PURE__ */ Object.keys(defaultState);
  4234. function usePointer(options = {}) {
  4235. const {
  4236. target = defaultWindow
  4237. } = options;
  4238. const isInside = vueDemi.ref(false);
  4239. const state = vueDemi.ref(options.initialValue || {});
  4240. Object.assign(state.value, defaultState, state.value);
  4241. const handler = (event) => {
  4242. isInside.value = true;
  4243. if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))
  4244. return;
  4245. state.value = shared.objectPick(event, keys, false);
  4246. };
  4247. if (target) {
  4248. useEventListener(target, "pointerdown", handler, { passive: true });
  4249. useEventListener(target, "pointermove", handler, { passive: true });
  4250. useEventListener(target, "pointerleave", () => isInside.value = false, { passive: true });
  4251. }
  4252. return __spreadProps$1(__spreadValues$5({}, shared.toRefs(state)), {
  4253. isInside
  4254. });
  4255. }
  4256. exports.SwipeDirection = void 0;
  4257. (function(SwipeDirection2) {
  4258. SwipeDirection2["UP"] = "UP";
  4259. SwipeDirection2["RIGHT"] = "RIGHT";
  4260. SwipeDirection2["DOWN"] = "DOWN";
  4261. SwipeDirection2["LEFT"] = "LEFT";
  4262. SwipeDirection2["NONE"] = "NONE";
  4263. })(exports.SwipeDirection || (exports.SwipeDirection = {}));
  4264. function useSwipe(target, options = {}) {
  4265. const {
  4266. threshold = 50,
  4267. onSwipe,
  4268. onSwipeEnd,
  4269. onSwipeStart,
  4270. passive = true,
  4271. window = defaultWindow
  4272. } = options;
  4273. const coordsStart = vueDemi.reactive({ x: 0, y: 0 });
  4274. const coordsEnd = vueDemi.reactive({ x: 0, y: 0 });
  4275. const diffX = vueDemi.computed(() => coordsStart.x - coordsEnd.x);
  4276. const diffY = vueDemi.computed(() => coordsStart.y - coordsEnd.y);
  4277. const { max, abs } = Math;
  4278. const isThresholdExceeded = vueDemi.computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);
  4279. const isSwiping = vueDemi.ref(false);
  4280. const direction = vueDemi.computed(() => {
  4281. if (!isThresholdExceeded.value)
  4282. return exports.SwipeDirection.NONE;
  4283. if (abs(diffX.value) > abs(diffY.value)) {
  4284. return diffX.value > 0 ? exports.SwipeDirection.LEFT : exports.SwipeDirection.RIGHT;
  4285. } else {
  4286. return diffY.value > 0 ? exports.SwipeDirection.UP : exports.SwipeDirection.DOWN;
  4287. }
  4288. });
  4289. const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];
  4290. const updateCoordsStart = (x, y) => {
  4291. coordsStart.x = x;
  4292. coordsStart.y = y;
  4293. };
  4294. const updateCoordsEnd = (x, y) => {
  4295. coordsEnd.x = x;
  4296. coordsEnd.y = y;
  4297. };
  4298. let listenerOptions;
  4299. const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);
  4300. if (!passive)
  4301. listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };
  4302. else
  4303. listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };
  4304. const onTouchEnd = (e) => {
  4305. if (isSwiping.value)
  4306. onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);
  4307. isSwiping.value = false;
  4308. };
  4309. const stops = [
  4310. useEventListener(target, "touchstart", (e) => {
  4311. if (listenerOptions.capture && !listenerOptions.passive)
  4312. e.preventDefault();
  4313. const [x, y] = getTouchEventCoords(e);
  4314. updateCoordsStart(x, y);
  4315. updateCoordsEnd(x, y);
  4316. onSwipeStart == null ? void 0 : onSwipeStart(e);
  4317. }, listenerOptions),
  4318. useEventListener(target, "touchmove", (e) => {
  4319. const [x, y] = getTouchEventCoords(e);
  4320. updateCoordsEnd(x, y);
  4321. if (!isSwiping.value && isThresholdExceeded.value)
  4322. isSwiping.value = true;
  4323. if (isSwiping.value)
  4324. onSwipe == null ? void 0 : onSwipe(e);
  4325. }, listenerOptions),
  4326. useEventListener(target, "touchend", onTouchEnd, listenerOptions),
  4327. useEventListener(target, "touchcancel", onTouchEnd, listenerOptions)
  4328. ];
  4329. const stop = () => stops.forEach((s) => s());
  4330. return {
  4331. isPassiveEventSupported,
  4332. isSwiping,
  4333. direction,
  4334. coordsStart,
  4335. coordsEnd,
  4336. lengthX: diffX,
  4337. lengthY: diffY,
  4338. stop
  4339. };
  4340. }
  4341. function checkPassiveEventSupport(document) {
  4342. if (!document)
  4343. return false;
  4344. let supportsPassive = false;
  4345. const optionsBlock = {
  4346. get passive() {
  4347. supportsPassive = true;
  4348. return false;
  4349. }
  4350. };
  4351. document.addEventListener("x", shared.noop, optionsBlock);
  4352. document.removeEventListener("x", shared.noop);
  4353. return supportsPassive;
  4354. }
  4355. function usePointerSwipe(target, options = {}) {
  4356. const targetRef = shared.resolveRef(target);
  4357. const {
  4358. threshold = 50,
  4359. onSwipe,
  4360. onSwipeEnd,
  4361. onSwipeStart
  4362. } = options;
  4363. const posStart = vueDemi.reactive({ x: 0, y: 0 });
  4364. const updatePosStart = (x, y) => {
  4365. posStart.x = x;
  4366. posStart.y = y;
  4367. };
  4368. const posEnd = vueDemi.reactive({ x: 0, y: 0 });
  4369. const updatePosEnd = (x, y) => {
  4370. posEnd.x = x;
  4371. posEnd.y = y;
  4372. };
  4373. const distanceX = vueDemi.computed(() => posStart.x - posEnd.x);
  4374. const distanceY = vueDemi.computed(() => posStart.y - posEnd.y);
  4375. const { max, abs } = Math;
  4376. const isThresholdExceeded = vueDemi.computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);
  4377. const isSwiping = vueDemi.ref(false);
  4378. const isPointerDown = vueDemi.ref(false);
  4379. const direction = vueDemi.computed(() => {
  4380. if (!isThresholdExceeded.value)
  4381. return exports.SwipeDirection.NONE;
  4382. if (abs(distanceX.value) > abs(distanceY.value)) {
  4383. return distanceX.value > 0 ? exports.SwipeDirection.LEFT : exports.SwipeDirection.RIGHT;
  4384. } else {
  4385. return distanceY.value > 0 ? exports.SwipeDirection.UP : exports.SwipeDirection.DOWN;
  4386. }
  4387. });
  4388. const eventIsAllowed = (e) => {
  4389. var _a, _b, _c;
  4390. const isReleasingButton = e.buttons === 0;
  4391. const isPrimaryButton = e.buttons === 1;
  4392. return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;
  4393. };
  4394. const stops = [
  4395. useEventListener(target, "pointerdown", (e) => {
  4396. var _a, _b;
  4397. if (!eventIsAllowed(e))
  4398. return;
  4399. isPointerDown.value = true;
  4400. (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty("touch-action", "none");
  4401. const eventTarget = e.target;
  4402. eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);
  4403. const { clientX: x, clientY: y } = e;
  4404. updatePosStart(x, y);
  4405. updatePosEnd(x, y);
  4406. onSwipeStart == null ? void 0 : onSwipeStart(e);
  4407. }),
  4408. useEventListener(target, "pointermove", (e) => {
  4409. if (!eventIsAllowed(e))
  4410. return;
  4411. if (!isPointerDown.value)
  4412. return;
  4413. const { clientX: x, clientY: y } = e;
  4414. updatePosEnd(x, y);
  4415. if (!isSwiping.value && isThresholdExceeded.value)
  4416. isSwiping.value = true;
  4417. if (isSwiping.value)
  4418. onSwipe == null ? void 0 : onSwipe(e);
  4419. }),
  4420. useEventListener(target, "pointerup", (e) => {
  4421. var _a, _b;
  4422. if (!eventIsAllowed(e))
  4423. return;
  4424. if (isSwiping.value)
  4425. onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);
  4426. isPointerDown.value = false;
  4427. isSwiping.value = false;
  4428. (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty("touch-action", "initial");
  4429. })
  4430. ];
  4431. const stop = () => stops.forEach((s) => s());
  4432. return {
  4433. isSwiping: vueDemi.readonly(isSwiping),
  4434. direction: vueDemi.readonly(direction),
  4435. posStart: vueDemi.readonly(posStart),
  4436. posEnd: vueDemi.readonly(posEnd),
  4437. distanceX,
  4438. distanceY,
  4439. stop
  4440. };
  4441. }
  4442. function usePreferredColorScheme(options) {
  4443. const isLight = useMediaQuery("(prefers-color-scheme: light)", options);
  4444. const isDark = useMediaQuery("(prefers-color-scheme: dark)", options);
  4445. return vueDemi.computed(() => {
  4446. if (isDark.value)
  4447. return "dark";
  4448. if (isLight.value)
  4449. return "light";
  4450. return "no-preference";
  4451. });
  4452. }
  4453. function usePreferredContrast(options) {
  4454. const isMore = useMediaQuery("(prefers-contrast: more)", options);
  4455. const isLess = useMediaQuery("(prefers-contrast: less)", options);
  4456. const isCustom = useMediaQuery("(prefers-contrast: custom)", options);
  4457. return vueDemi.computed(() => {
  4458. if (isMore.value)
  4459. return "more";
  4460. if (isLess.value)
  4461. return "less";
  4462. if (isCustom.value)
  4463. return "custom";
  4464. return "no-preference";
  4465. });
  4466. }
  4467. function usePreferredLanguages(options = {}) {
  4468. const { window = defaultWindow } = options;
  4469. if (!window)
  4470. return vueDemi.ref(["en"]);
  4471. const navigator = window.navigator;
  4472. const value = vueDemi.ref(navigator.languages);
  4473. useEventListener(window, "languagechange", () => {
  4474. value.value = navigator.languages;
  4475. });
  4476. return value;
  4477. }
  4478. function usePreferredReducedMotion(options) {
  4479. const isReduced = useMediaQuery("(prefers-reduced-motion: reduce)", options);
  4480. return vueDemi.computed(() => {
  4481. if (isReduced.value)
  4482. return "reduce";
  4483. return "no-preference";
  4484. });
  4485. }
  4486. const useScreenOrientation = (options = {}) => {
  4487. const {
  4488. window = defaultWindow
  4489. } = options;
  4490. const isSupported = useSupported(() => window && "screen" in window && "orientation" in window.screen);
  4491. const screenOrientation = isSupported.value ? window.screen.orientation : {};
  4492. const orientation = vueDemi.ref(screenOrientation.type);
  4493. const angle = vueDemi.ref(screenOrientation.angle || 0);
  4494. if (isSupported.value) {
  4495. useEventListener(window, "orientationchange", () => {
  4496. orientation.value = screenOrientation.type;
  4497. angle.value = screenOrientation.angle;
  4498. });
  4499. }
  4500. const lockOrientation = (type) => {
  4501. if (!isSupported.value)
  4502. return Promise.reject(new Error("Not supported"));
  4503. return screenOrientation.lock(type);
  4504. };
  4505. const unlockOrientation = () => {
  4506. if (isSupported.value)
  4507. screenOrientation.unlock();
  4508. };
  4509. return {
  4510. isSupported,
  4511. orientation,
  4512. angle,
  4513. lockOrientation,
  4514. unlockOrientation
  4515. };
  4516. };
  4517. const topVarName = "--vueuse-safe-area-top";
  4518. const rightVarName = "--vueuse-safe-area-right";
  4519. const bottomVarName = "--vueuse-safe-area-bottom";
  4520. const leftVarName = "--vueuse-safe-area-left";
  4521. function useScreenSafeArea() {
  4522. const top = vueDemi.ref("");
  4523. const right = vueDemi.ref("");
  4524. const bottom = vueDemi.ref("");
  4525. const left = vueDemi.ref("");
  4526. if (shared.isClient) {
  4527. const topCssVar = useCssVar(topVarName);
  4528. const rightCssVar = useCssVar(rightVarName);
  4529. const bottomCssVar = useCssVar(bottomVarName);
  4530. const leftCssVar = useCssVar(leftVarName);
  4531. topCssVar.value = "env(safe-area-inset-top, 0px)";
  4532. rightCssVar.value = "env(safe-area-inset-right, 0px)";
  4533. bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
  4534. leftCssVar.value = "env(safe-area-inset-left, 0px)";
  4535. update();
  4536. useEventListener("resize", shared.useDebounceFn(update));
  4537. }
  4538. function update() {
  4539. top.value = getValue(topVarName);
  4540. right.value = getValue(rightVarName);
  4541. bottom.value = getValue(bottomVarName);
  4542. left.value = getValue(leftVarName);
  4543. }
  4544. return {
  4545. top,
  4546. right,
  4547. bottom,
  4548. left,
  4549. update
  4550. };
  4551. }
  4552. function getValue(position) {
  4553. return getComputedStyle(document.documentElement).getPropertyValue(position);
  4554. }
  4555. function useScriptTag(src, onLoaded = shared.noop, options = {}) {
  4556. const {
  4557. immediate = true,
  4558. manual = false,
  4559. type = "text/javascript",
  4560. async = true,
  4561. crossOrigin,
  4562. referrerPolicy,
  4563. noModule,
  4564. defer,
  4565. document = defaultDocument,
  4566. attrs = {}
  4567. } = options;
  4568. const scriptTag = vueDemi.ref(null);
  4569. let _promise = null;
  4570. const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {
  4571. const resolveWithElement = (el2) => {
  4572. scriptTag.value = el2;
  4573. resolve(el2);
  4574. return el2;
  4575. };
  4576. if (!document) {
  4577. resolve(false);
  4578. return;
  4579. }
  4580. let shouldAppend = false;
  4581. let el = document.querySelector(`script[src="${shared.resolveUnref(src)}"]`);
  4582. if (!el) {
  4583. el = document.createElement("script");
  4584. el.type = type;
  4585. el.async = async;
  4586. el.src = shared.resolveUnref(src);
  4587. if (defer)
  4588. el.defer = defer;
  4589. if (crossOrigin)
  4590. el.crossOrigin = crossOrigin;
  4591. if (noModule)
  4592. el.noModule = noModule;
  4593. if (referrerPolicy)
  4594. el.referrerPolicy = referrerPolicy;
  4595. Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));
  4596. shouldAppend = true;
  4597. } else if (el.hasAttribute("data-loaded")) {
  4598. resolveWithElement(el);
  4599. }
  4600. el.addEventListener("error", (event) => reject(event));
  4601. el.addEventListener("abort", (event) => reject(event));
  4602. el.addEventListener("load", () => {
  4603. el.setAttribute("data-loaded", "true");
  4604. onLoaded(el);
  4605. resolveWithElement(el);
  4606. });
  4607. if (shouldAppend)
  4608. el = document.head.appendChild(el);
  4609. if (!waitForScriptLoad)
  4610. resolveWithElement(el);
  4611. });
  4612. const load = (waitForScriptLoad = true) => {
  4613. if (!_promise)
  4614. _promise = loadScript(waitForScriptLoad);
  4615. return _promise;
  4616. };
  4617. const unload = () => {
  4618. if (!document)
  4619. return;
  4620. _promise = null;
  4621. if (scriptTag.value)
  4622. scriptTag.value = null;
  4623. const el = document.querySelector(`script[src="${shared.resolveUnref(src)}"]`);
  4624. if (el)
  4625. document.head.removeChild(el);
  4626. };
  4627. if (immediate && !manual)
  4628. shared.tryOnMounted(load);
  4629. if (!manual)
  4630. shared.tryOnUnmounted(unload);
  4631. return { scriptTag, load, unload };
  4632. }
  4633. function preventDefault(rawEvent) {
  4634. const e = rawEvent || window.event;
  4635. if (e.touches.length > 1)
  4636. return true;
  4637. if (e.preventDefault)
  4638. e.preventDefault();
  4639. return false;
  4640. }
  4641. function useScrollLock(element, initialState = false) {
  4642. const isLocked = vueDemi.ref(initialState);
  4643. let stopTouchMoveListener = null;
  4644. let initialOverflow;
  4645. vueDemi.watch(shared.resolveRef(element), (el) => {
  4646. if (el) {
  4647. const ele = el;
  4648. initialOverflow = ele.style.overflow;
  4649. if (isLocked.value)
  4650. ele.style.overflow = "hidden";
  4651. }
  4652. }, {
  4653. immediate: true
  4654. });
  4655. const lock = () => {
  4656. const ele = shared.resolveUnref(element);
  4657. if (!ele || isLocked.value)
  4658. return;
  4659. if (shared.isIOS) {
  4660. stopTouchMoveListener = useEventListener(ele, "touchmove", preventDefault, { passive: false });
  4661. }
  4662. ele.style.overflow = "hidden";
  4663. isLocked.value = true;
  4664. };
  4665. const unlock = () => {
  4666. const ele = shared.resolveUnref(element);
  4667. if (!ele || !isLocked.value)
  4668. return;
  4669. shared.isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());
  4670. ele.style.overflow = initialOverflow;
  4671. isLocked.value = false;
  4672. };
  4673. shared.tryOnScopeDispose(unlock);
  4674. return vueDemi.computed({
  4675. get() {
  4676. return isLocked.value;
  4677. },
  4678. set(v) {
  4679. if (v)
  4680. lock();
  4681. else
  4682. unlock();
  4683. }
  4684. });
  4685. }
  4686. function useSessionStorage(key, initialValue, options = {}) {
  4687. const { window = defaultWindow } = options;
  4688. return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);
  4689. }
  4690. var __defProp$4 = Object.defineProperty;
  4691. var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
  4692. var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
  4693. var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
  4694. var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  4695. var __spreadValues$4 = (a, b) => {
  4696. for (var prop in b || (b = {}))
  4697. if (__hasOwnProp$4.call(b, prop))
  4698. __defNormalProp$4(a, prop, b[prop]);
  4699. if (__getOwnPropSymbols$4)
  4700. for (var prop of __getOwnPropSymbols$4(b)) {
  4701. if (__propIsEnum$4.call(b, prop))
  4702. __defNormalProp$4(a, prop, b[prop]);
  4703. }
  4704. return a;
  4705. };
  4706. function useShare(shareOptions = {}, options = {}) {
  4707. const { navigator = defaultNavigator } = options;
  4708. const _navigator = navigator;
  4709. const isSupported = useSupported(() => _navigator && "canShare" in _navigator);
  4710. const share = async (overrideOptions = {}) => {
  4711. if (isSupported.value) {
  4712. const data = __spreadValues$4(__spreadValues$4({}, shared.resolveUnref(shareOptions)), shared.resolveUnref(overrideOptions));
  4713. let granted = true;
  4714. if (data.files && _navigator.canShare)
  4715. granted = _navigator.canShare({ files: data.files });
  4716. if (granted)
  4717. return _navigator.share(data);
  4718. }
  4719. };
  4720. return {
  4721. isSupported,
  4722. share
  4723. };
  4724. }
  4725. const defaultSortFn = (source, compareFn) => source.sort(compareFn);
  4726. const defaultCompare = (a, b) => a - b;
  4727. function useSorted(...args) {
  4728. var _a, _b, _c, _d;
  4729. const [source] = args;
  4730. let compareFn = defaultCompare;
  4731. let options = {};
  4732. if (args.length === 2) {
  4733. if (typeof args[1] === "object") {
  4734. options = args[1];
  4735. compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;
  4736. } else {
  4737. compareFn = (_b = args[1]) != null ? _b : defaultCompare;
  4738. }
  4739. } else if (args.length > 2) {
  4740. compareFn = (_c = args[1]) != null ? _c : defaultCompare;
  4741. options = (_d = args[2]) != null ? _d : {};
  4742. }
  4743. const {
  4744. dirty = false,
  4745. sortFn = defaultSortFn
  4746. } = options;
  4747. if (!dirty)
  4748. return vueDemi.computed(() => sortFn([...vueDemi.unref(source)], compareFn));
  4749. vueDemi.watchEffect(() => {
  4750. const result = sortFn(vueDemi.unref(source), compareFn);
  4751. if (vueDemi.isRef(source))
  4752. source.value = result;
  4753. else
  4754. source.splice(0, source.length, ...result);
  4755. });
  4756. return source;
  4757. }
  4758. function useSpeechRecognition(options = {}) {
  4759. const {
  4760. interimResults = true,
  4761. continuous = true,
  4762. window = defaultWindow
  4763. } = options;
  4764. const lang = shared.resolveRef(options.lang || "en-US");
  4765. const isListening = vueDemi.ref(false);
  4766. const isFinal = vueDemi.ref(false);
  4767. const result = vueDemi.ref("");
  4768. const error = vueDemi.shallowRef(void 0);
  4769. const toggle = (value = !isListening.value) => {
  4770. isListening.value = value;
  4771. };
  4772. const start = () => {
  4773. isListening.value = true;
  4774. };
  4775. const stop = () => {
  4776. isListening.value = false;
  4777. };
  4778. const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);
  4779. const isSupported = useSupported(() => SpeechRecognition);
  4780. let recognition;
  4781. if (isSupported.value) {
  4782. recognition = new SpeechRecognition();
  4783. recognition.continuous = continuous;
  4784. recognition.interimResults = interimResults;
  4785. recognition.lang = vueDemi.unref(lang);
  4786. recognition.onstart = () => {
  4787. isFinal.value = false;
  4788. };
  4789. vueDemi.watch(lang, (lang2) => {
  4790. if (recognition && !isListening.value)
  4791. recognition.lang = lang2;
  4792. });
  4793. recognition.onresult = (event) => {
  4794. const transcript = Array.from(event.results).map((result2) => {
  4795. isFinal.value = result2.isFinal;
  4796. return result2[0];
  4797. }).map((result2) => result2.transcript).join("");
  4798. result.value = transcript;
  4799. error.value = void 0;
  4800. };
  4801. recognition.onerror = (event) => {
  4802. error.value = event;
  4803. };
  4804. recognition.onend = () => {
  4805. isListening.value = false;
  4806. recognition.lang = vueDemi.unref(lang);
  4807. };
  4808. vueDemi.watch(isListening, () => {
  4809. if (isListening.value)
  4810. recognition.start();
  4811. else
  4812. recognition.stop();
  4813. });
  4814. }
  4815. shared.tryOnScopeDispose(() => {
  4816. isListening.value = false;
  4817. });
  4818. return {
  4819. isSupported,
  4820. isListening,
  4821. isFinal,
  4822. recognition,
  4823. result,
  4824. error,
  4825. toggle,
  4826. start,
  4827. stop
  4828. };
  4829. }
  4830. function useSpeechSynthesis(text, options = {}) {
  4831. const {
  4832. pitch = 1,
  4833. rate = 1,
  4834. volume = 1,
  4835. window = defaultWindow
  4836. } = options;
  4837. const synth = window && window.speechSynthesis;
  4838. const isSupported = useSupported(() => synth);
  4839. const isPlaying = vueDemi.ref(false);
  4840. const status = vueDemi.ref("init");
  4841. const spokenText = shared.resolveRef(text || "");
  4842. const lang = shared.resolveRef(options.lang || "en-US");
  4843. const error = vueDemi.shallowRef(void 0);
  4844. const toggle = (value = !isPlaying.value) => {
  4845. isPlaying.value = value;
  4846. };
  4847. const bindEventsForUtterance = (utterance2) => {
  4848. utterance2.lang = vueDemi.unref(lang);
  4849. utterance2.voice = vueDemi.unref(options.voice) || null;
  4850. utterance2.pitch = pitch;
  4851. utterance2.rate = rate;
  4852. utterance2.volume = volume;
  4853. utterance2.onstart = () => {
  4854. isPlaying.value = true;
  4855. status.value = "play";
  4856. };
  4857. utterance2.onpause = () => {
  4858. isPlaying.value = false;
  4859. status.value = "pause";
  4860. };
  4861. utterance2.onresume = () => {
  4862. isPlaying.value = true;
  4863. status.value = "play";
  4864. };
  4865. utterance2.onend = () => {
  4866. isPlaying.value = false;
  4867. status.value = "end";
  4868. };
  4869. utterance2.onerror = (event) => {
  4870. error.value = event;
  4871. };
  4872. };
  4873. const utterance = vueDemi.computed(() => {
  4874. isPlaying.value = false;
  4875. status.value = "init";
  4876. const newUtterance = new SpeechSynthesisUtterance(spokenText.value);
  4877. bindEventsForUtterance(newUtterance);
  4878. return newUtterance;
  4879. });
  4880. const speak = () => {
  4881. synth.cancel();
  4882. utterance && synth.speak(utterance.value);
  4883. };
  4884. if (isSupported.value) {
  4885. bindEventsForUtterance(utterance.value);
  4886. vueDemi.watch(lang, (lang2) => {
  4887. if (utterance.value && !isPlaying.value)
  4888. utterance.value.lang = lang2;
  4889. });
  4890. if (options.voice) {
  4891. vueDemi.watch(options.voice, () => {
  4892. synth.cancel();
  4893. });
  4894. }
  4895. vueDemi.watch(isPlaying, () => {
  4896. if (isPlaying.value)
  4897. synth.resume();
  4898. else
  4899. synth.pause();
  4900. });
  4901. }
  4902. shared.tryOnScopeDispose(() => {
  4903. isPlaying.value = false;
  4904. });
  4905. return {
  4906. isSupported,
  4907. isPlaying,
  4908. status,
  4909. utterance,
  4910. error,
  4911. toggle,
  4912. speak
  4913. };
  4914. }
  4915. function useStepper(steps, initialStep) {
  4916. const stepsRef = vueDemi.ref(steps);
  4917. const stepNames = vueDemi.computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));
  4918. const index = vueDemi.ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));
  4919. const current = vueDemi.computed(() => at(index.value));
  4920. const isFirst = vueDemi.computed(() => index.value === 0);
  4921. const isLast = vueDemi.computed(() => index.value === stepNames.value.length - 1);
  4922. const next = vueDemi.computed(() => stepNames.value[index.value + 1]);
  4923. const previous = vueDemi.computed(() => stepNames.value[index.value - 1]);
  4924. function at(index2) {
  4925. if (Array.isArray(stepsRef.value))
  4926. return stepsRef.value[index2];
  4927. return stepsRef.value[stepNames.value[index2]];
  4928. }
  4929. function get(step) {
  4930. if (!stepNames.value.includes(step))
  4931. return;
  4932. return at(stepNames.value.indexOf(step));
  4933. }
  4934. function goTo(step) {
  4935. if (stepNames.value.includes(step))
  4936. index.value = stepNames.value.indexOf(step);
  4937. }
  4938. function goToNext() {
  4939. if (isLast.value)
  4940. return;
  4941. index.value++;
  4942. }
  4943. function goToPrevious() {
  4944. if (isFirst.value)
  4945. return;
  4946. index.value--;
  4947. }
  4948. function goBackTo(step) {
  4949. if (isAfter(step))
  4950. goTo(step);
  4951. }
  4952. function isNext(step) {
  4953. return stepNames.value.indexOf(step) === index.value + 1;
  4954. }
  4955. function isPrevious(step) {
  4956. return stepNames.value.indexOf(step) === index.value - 1;
  4957. }
  4958. function isCurrent(step) {
  4959. return stepNames.value.indexOf(step) === index.value;
  4960. }
  4961. function isBefore(step) {
  4962. return index.value < stepNames.value.indexOf(step);
  4963. }
  4964. function isAfter(step) {
  4965. return index.value > stepNames.value.indexOf(step);
  4966. }
  4967. return {
  4968. steps: stepsRef,
  4969. stepNames,
  4970. index,
  4971. current,
  4972. next,
  4973. previous,
  4974. isFirst,
  4975. isLast,
  4976. at,
  4977. get,
  4978. goTo,
  4979. goToNext,
  4980. goToPrevious,
  4981. goBackTo,
  4982. isNext,
  4983. isPrevious,
  4984. isCurrent,
  4985. isBefore,
  4986. isAfter
  4987. };
  4988. }
  4989. function useStorageAsync(key, initialValue, storage, options = {}) {
  4990. var _a;
  4991. const {
  4992. flush = "pre",
  4993. deep = true,
  4994. listenToStorageChanges = true,
  4995. writeDefaults = true,
  4996. shallow,
  4997. window = defaultWindow,
  4998. eventFilter,
  4999. onError = (e) => {
  5000. console.error(e);
  5001. }
  5002. } = options;
  5003. const rawInit = shared.resolveUnref(initialValue);
  5004. const type = guessSerializerType(rawInit);
  5005. const data = (shallow ? vueDemi.shallowRef : vueDemi.ref)(initialValue);
  5006. const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];
  5007. if (!storage) {
  5008. try {
  5009. storage = getSSRHandler("getDefaultStorage", () => {
  5010. var _a2;
  5011. return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;
  5012. })();
  5013. } catch (e) {
  5014. onError(e);
  5015. }
  5016. }
  5017. async function read(event) {
  5018. if (!storage || event && event.key !== key)
  5019. return;
  5020. try {
  5021. const rawValue = event ? event.newValue : await storage.getItem(key);
  5022. if (rawValue == null) {
  5023. data.value = rawInit;
  5024. if (writeDefaults && rawInit !== null)
  5025. await storage.setItem(key, await serializer.write(rawInit));
  5026. } else {
  5027. data.value = await serializer.read(rawValue);
  5028. }
  5029. } catch (e) {
  5030. onError(e);
  5031. }
  5032. }
  5033. read();
  5034. if (window && listenToStorageChanges)
  5035. useEventListener(window, "storage", (e) => setTimeout(() => read(e), 0));
  5036. if (storage) {
  5037. shared.watchWithFilter(data, async () => {
  5038. try {
  5039. if (data.value == null)
  5040. await storage.removeItem(key);
  5041. else
  5042. await storage.setItem(key, await serializer.write(data.value));
  5043. } catch (e) {
  5044. onError(e);
  5045. }
  5046. }, {
  5047. flush,
  5048. deep,
  5049. eventFilter
  5050. });
  5051. }
  5052. return data;
  5053. }
  5054. let _id = 0;
  5055. function useStyleTag(css, options = {}) {
  5056. const isLoaded = vueDemi.ref(false);
  5057. const {
  5058. document = defaultDocument,
  5059. immediate = true,
  5060. manual = false,
  5061. id = `vueuse_styletag_${++_id}`
  5062. } = options;
  5063. const cssRef = vueDemi.ref(css);
  5064. let stop = () => {
  5065. };
  5066. const load = () => {
  5067. if (!document)
  5068. return;
  5069. const el = document.getElementById(id) || document.createElement("style");
  5070. if (!el.isConnected) {
  5071. el.type = "text/css";
  5072. el.id = id;
  5073. if (options.media)
  5074. el.media = options.media;
  5075. document.head.appendChild(el);
  5076. }
  5077. if (isLoaded.value)
  5078. return;
  5079. stop = vueDemi.watch(cssRef, (value) => {
  5080. el.textContent = value;
  5081. }, { immediate: true });
  5082. isLoaded.value = true;
  5083. };
  5084. const unload = () => {
  5085. if (!document || !isLoaded.value)
  5086. return;
  5087. stop();
  5088. document.head.removeChild(document.getElementById(id));
  5089. isLoaded.value = false;
  5090. };
  5091. if (immediate && !manual)
  5092. shared.tryOnMounted(load);
  5093. if (!manual)
  5094. shared.tryOnScopeDispose(unload);
  5095. return {
  5096. id,
  5097. css: cssRef,
  5098. unload,
  5099. load,
  5100. isLoaded: vueDemi.readonly(isLoaded)
  5101. };
  5102. }
  5103. function useTemplateRefsList() {
  5104. const refs = vueDemi.ref([]);
  5105. refs.value.set = (el) => {
  5106. if (el)
  5107. refs.value.push(el);
  5108. };
  5109. vueDemi.onBeforeUpdate(() => {
  5110. refs.value.length = 0;
  5111. });
  5112. return refs;
  5113. }
  5114. function useTextDirection(options = {}) {
  5115. const {
  5116. document = defaultDocument,
  5117. selector = "html",
  5118. observe = false,
  5119. initialValue = "ltr"
  5120. } = options;
  5121. function getValue() {
  5122. var _a, _b;
  5123. return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute("dir")) != null ? _b : initialValue;
  5124. }
  5125. const dir = vueDemi.ref(getValue());
  5126. shared.tryOnMounted(() => dir.value = getValue());
  5127. if (observe && document) {
  5128. useMutationObserver(document.querySelector(selector), () => dir.value = getValue(), { attributes: true });
  5129. }
  5130. return vueDemi.computed({
  5131. get() {
  5132. return dir.value;
  5133. },
  5134. set(v) {
  5135. var _a, _b;
  5136. dir.value = v;
  5137. if (!document)
  5138. return;
  5139. if (dir.value)
  5140. (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute("dir", dir.value);
  5141. else
  5142. (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute("dir");
  5143. }
  5144. });
  5145. }
  5146. function getRangesFromSelection(selection) {
  5147. var _a;
  5148. const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;
  5149. const ranges = new Array(rangeCount);
  5150. for (let i = 0; i < rangeCount; i++) {
  5151. const range = selection.getRangeAt(i);
  5152. ranges[i] = range;
  5153. }
  5154. return ranges;
  5155. }
  5156. function useTextSelection(options = {}) {
  5157. const {
  5158. window = defaultWindow
  5159. } = options;
  5160. const selection = vueDemi.ref(null);
  5161. const text = vueDemi.computed(() => {
  5162. var _a, _b;
  5163. return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : "";
  5164. });
  5165. const ranges = vueDemi.computed(() => selection.value ? getRangesFromSelection(selection.value) : []);
  5166. const rects = vueDemi.computed(() => ranges.value.map((range) => range.getBoundingClientRect()));
  5167. function onSelectionChange() {
  5168. selection.value = null;
  5169. if (window)
  5170. selection.value = window.getSelection();
  5171. }
  5172. if (window)
  5173. useEventListener(window.document, "selectionchange", onSelectionChange);
  5174. return {
  5175. text,
  5176. rects,
  5177. ranges,
  5178. selection
  5179. };
  5180. }
  5181. function useTextareaAutosize(options) {
  5182. const textarea = vueDemi.ref(options == null ? void 0 : options.element);
  5183. const input = vueDemi.ref(options == null ? void 0 : options.input);
  5184. function triggerResize() {
  5185. var _a, _b;
  5186. if (!textarea.value)
  5187. return;
  5188. textarea.value.style.height = "1px";
  5189. textarea.value.style.height = `${(_a = textarea.value) == null ? void 0 : _a.scrollHeight}px`;
  5190. (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);
  5191. }
  5192. vueDemi.watch([input, textarea], triggerResize, { immediate: true });
  5193. useResizeObserver(textarea, () => triggerResize());
  5194. if (options == null ? void 0 : options.watch)
  5195. vueDemi.watch(options.watch, triggerResize, { immediate: true, deep: true });
  5196. return {
  5197. textarea,
  5198. input,
  5199. triggerResize
  5200. };
  5201. }
  5202. var __defProp$3 = Object.defineProperty;
  5203. var __defProps = Object.defineProperties;
  5204. var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
  5205. var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
  5206. var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
  5207. var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
  5208. var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  5209. var __spreadValues$3 = (a, b) => {
  5210. for (var prop in b || (b = {}))
  5211. if (__hasOwnProp$3.call(b, prop))
  5212. __defNormalProp$3(a, prop, b[prop]);
  5213. if (__getOwnPropSymbols$3)
  5214. for (var prop of __getOwnPropSymbols$3(b)) {
  5215. if (__propIsEnum$3.call(b, prop))
  5216. __defNormalProp$3(a, prop, b[prop]);
  5217. }
  5218. return a;
  5219. };
  5220. var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
  5221. function useThrottledRefHistory(source, options = {}) {
  5222. const { throttle = 200, trailing = true } = options;
  5223. const filter = shared.throttleFilter(throttle, trailing);
  5224. const history = useRefHistory(source, __spreadProps(__spreadValues$3({}, options), { eventFilter: filter }));
  5225. return __spreadValues$3({}, history);
  5226. }
  5227. var __defProp$2 = Object.defineProperty;
  5228. var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
  5229. var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
  5230. var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
  5231. var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  5232. var __spreadValues$2 = (a, b) => {
  5233. for (var prop in b || (b = {}))
  5234. if (__hasOwnProp$2.call(b, prop))
  5235. __defNormalProp$2(a, prop, b[prop]);
  5236. if (__getOwnPropSymbols$2)
  5237. for (var prop of __getOwnPropSymbols$2(b)) {
  5238. if (__propIsEnum$2.call(b, prop))
  5239. __defNormalProp$2(a, prop, b[prop]);
  5240. }
  5241. return a;
  5242. };
  5243. var __objRest = (source, exclude) => {
  5244. var target = {};
  5245. for (var prop in source)
  5246. if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)
  5247. target[prop] = source[prop];
  5248. if (source != null && __getOwnPropSymbols$2)
  5249. for (var prop of __getOwnPropSymbols$2(source)) {
  5250. if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))
  5251. target[prop] = source[prop];
  5252. }
  5253. return target;
  5254. };
  5255. const DEFAULT_UNITS = [
  5256. { max: 6e4, value: 1e3, name: "second" },
  5257. { max: 276e4, value: 6e4, name: "minute" },
  5258. { max: 72e6, value: 36e5, name: "hour" },
  5259. { max: 5184e5, value: 864e5, name: "day" },
  5260. { max: 24192e5, value: 6048e5, name: "week" },
  5261. { max: 28512e6, value: 2592e6, name: "month" },
  5262. { max: Infinity, value: 31536e6, name: "year" }
  5263. ];
  5264. const DEFAULT_MESSAGES = {
  5265. justNow: "just now",
  5266. past: (n) => n.match(/\d/) ? `${n} ago` : n,
  5267. future: (n) => n.match(/\d/) ? `in ${n}` : n,
  5268. month: (n, past) => n === 1 ? past ? "last month" : "next month" : `${n} month${n > 1 ? "s" : ""}`,
  5269. year: (n, past) => n === 1 ? past ? "last year" : "next year" : `${n} year${n > 1 ? "s" : ""}`,
  5270. day: (n, past) => n === 1 ? past ? "yesterday" : "tomorrow" : `${n} day${n > 1 ? "s" : ""}`,
  5271. week: (n, past) => n === 1 ? past ? "last week" : "next week" : `${n} week${n > 1 ? "s" : ""}`,
  5272. hour: (n) => `${n} hour${n > 1 ? "s" : ""}`,
  5273. minute: (n) => `${n} minute${n > 1 ? "s" : ""}`,
  5274. second: (n) => `${n} second${n > 1 ? "s" : ""}`,
  5275. invalid: ""
  5276. };
  5277. const DEFAULT_FORMATTER = (date) => date.toISOString().slice(0, 10);
  5278. function useTimeAgo(time, options = {}) {
  5279. const {
  5280. controls: exposeControls = false,
  5281. updateInterval = 3e4
  5282. } = options;
  5283. const _a = useNow({ interval: updateInterval, controls: true }), { now } = _a, controls = __objRest(_a, ["now"]);
  5284. const timeAgo = vueDemi.computed(() => formatTimeAgo(new Date(shared.resolveUnref(time)), options, vueDemi.unref(now.value)));
  5285. if (exposeControls) {
  5286. return __spreadValues$2({
  5287. timeAgo
  5288. }, controls);
  5289. } else {
  5290. return timeAgo;
  5291. }
  5292. }
  5293. function formatTimeAgo(from, options = {}, now = Date.now()) {
  5294. var _a;
  5295. const {
  5296. max,
  5297. messages = DEFAULT_MESSAGES,
  5298. fullDateFormatter = DEFAULT_FORMATTER,
  5299. units = DEFAULT_UNITS,
  5300. showSecond = false,
  5301. rounding = "round"
  5302. } = options;
  5303. const roundFn = typeof rounding === "number" ? (n) => +n.toFixed(rounding) : Math[rounding];
  5304. const diff = +now - +from;
  5305. const absDiff = Math.abs(diff);
  5306. function getValue(diff2, unit) {
  5307. return roundFn(Math.abs(diff2) / unit.value);
  5308. }
  5309. function format(diff2, unit) {
  5310. const val = getValue(diff2, unit);
  5311. const past = diff2 > 0;
  5312. const str = applyFormat(unit.name, val, past);
  5313. return applyFormat(past ? "past" : "future", str, past);
  5314. }
  5315. function applyFormat(name, val, isPast) {
  5316. const formatter = messages[name];
  5317. if (typeof formatter === "function")
  5318. return formatter(val, isPast);
  5319. return formatter.replace("{0}", val.toString());
  5320. }
  5321. if (absDiff < 6e4 && !showSecond)
  5322. return messages.justNow;
  5323. if (typeof max === "number" && absDiff > max)
  5324. return fullDateFormatter(new Date(from));
  5325. if (typeof max === "string") {
  5326. const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;
  5327. if (unitMax && absDiff > unitMax)
  5328. return fullDateFormatter(new Date(from));
  5329. }
  5330. for (const [idx, unit] of units.entries()) {
  5331. const val = getValue(diff, unit);
  5332. if (val <= 0 && units[idx - 1])
  5333. return format(diff, units[idx - 1]);
  5334. if (absDiff < unit.max)
  5335. return format(diff, unit);
  5336. }
  5337. return messages.invalid;
  5338. }
  5339. function useTimeoutPoll(fn, interval, timeoutPollOptions) {
  5340. const { start } = shared.useTimeoutFn(loop, interval);
  5341. const isActive = vueDemi.ref(false);
  5342. async function loop() {
  5343. if (!isActive.value)
  5344. return;
  5345. await fn();
  5346. start();
  5347. }
  5348. function resume() {
  5349. if (!isActive.value) {
  5350. isActive.value = true;
  5351. loop();
  5352. }
  5353. }
  5354. function pause() {
  5355. isActive.value = false;
  5356. }
  5357. if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)
  5358. resume();
  5359. shared.tryOnScopeDispose(pause);
  5360. return {
  5361. isActive,
  5362. pause,
  5363. resume
  5364. };
  5365. }
  5366. var __defProp$1 = Object.defineProperty;
  5367. var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
  5368. var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
  5369. var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
  5370. var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  5371. var __spreadValues$1 = (a, b) => {
  5372. for (var prop in b || (b = {}))
  5373. if (__hasOwnProp$1.call(b, prop))
  5374. __defNormalProp$1(a, prop, b[prop]);
  5375. if (__getOwnPropSymbols$1)
  5376. for (var prop of __getOwnPropSymbols$1(b)) {
  5377. if (__propIsEnum$1.call(b, prop))
  5378. __defNormalProp$1(a, prop, b[prop]);
  5379. }
  5380. return a;
  5381. };
  5382. function useTimestamp(options = {}) {
  5383. const {
  5384. controls: exposeControls = false,
  5385. offset = 0,
  5386. immediate = true,
  5387. interval = "requestAnimationFrame",
  5388. callback
  5389. } = options;
  5390. const ts = vueDemi.ref(shared.timestamp() + offset);
  5391. const update = () => ts.value = shared.timestamp() + offset;
  5392. const cb = callback ? () => {
  5393. update();
  5394. callback(ts.value);
  5395. } : update;
  5396. const controls = interval === "requestAnimationFrame" ? useRafFn(cb, { immediate }) : shared.useIntervalFn(cb, interval, { immediate });
  5397. if (exposeControls) {
  5398. return __spreadValues$1({
  5399. timestamp: ts
  5400. }, controls);
  5401. } else {
  5402. return ts;
  5403. }
  5404. }
  5405. function useTitle(newTitle = null, options = {}) {
  5406. var _a, _b;
  5407. const {
  5408. document = defaultDocument
  5409. } = options;
  5410. const title = shared.resolveRef((_a = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _a : null);
  5411. const isReadonly = newTitle && shared.isFunction(newTitle);
  5412. function format(t) {
  5413. if (!("titleTemplate" in options))
  5414. return t;
  5415. const template = options.titleTemplate || "%s";
  5416. return shared.isFunction(template) ? template(t) : vueDemi.unref(template).replace(/%s/g, t);
  5417. }
  5418. vueDemi.watch(title, (t, o) => {
  5419. if (t !== o && document)
  5420. document.title = format(shared.isString(t) ? t : "");
  5421. }, { immediate: true });
  5422. if (options.observe && !options.titleTemplate && document && !isReadonly) {
  5423. useMutationObserver((_b = document.head) == null ? void 0 : _b.querySelector("title"), () => {
  5424. if (document && document.title !== title.value)
  5425. title.value = format(document.title);
  5426. }, { childList: true });
  5427. }
  5428. return title;
  5429. }
  5430. var __defProp = Object.defineProperty;
  5431. var __getOwnPropSymbols = Object.getOwnPropertySymbols;
  5432. var __hasOwnProp = Object.prototype.hasOwnProperty;
  5433. var __propIsEnum = Object.prototype.propertyIsEnumerable;
  5434. var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  5435. var __spreadValues = (a, b) => {
  5436. for (var prop in b || (b = {}))
  5437. if (__hasOwnProp.call(b, prop))
  5438. __defNormalProp(a, prop, b[prop]);
  5439. if (__getOwnPropSymbols)
  5440. for (var prop of __getOwnPropSymbols(b)) {
  5441. if (__propIsEnum.call(b, prop))
  5442. __defNormalProp(a, prop, b[prop]);
  5443. }
  5444. return a;
  5445. };
  5446. const _TransitionPresets = {
  5447. easeInSine: [0.12, 0, 0.39, 0],
  5448. easeOutSine: [0.61, 1, 0.88, 1],
  5449. easeInOutSine: [0.37, 0, 0.63, 1],
  5450. easeInQuad: [0.11, 0, 0.5, 0],
  5451. easeOutQuad: [0.5, 1, 0.89, 1],
  5452. easeInOutQuad: [0.45, 0, 0.55, 1],
  5453. easeInCubic: [0.32, 0, 0.67, 0],
  5454. easeOutCubic: [0.33, 1, 0.68, 1],
  5455. easeInOutCubic: [0.65, 0, 0.35, 1],
  5456. easeInQuart: [0.5, 0, 0.75, 0],
  5457. easeOutQuart: [0.25, 1, 0.5, 1],
  5458. easeInOutQuart: [0.76, 0, 0.24, 1],
  5459. easeInQuint: [0.64, 0, 0.78, 0],
  5460. easeOutQuint: [0.22, 1, 0.36, 1],
  5461. easeInOutQuint: [0.83, 0, 0.17, 1],
  5462. easeInExpo: [0.7, 0, 0.84, 0],
  5463. easeOutExpo: [0.16, 1, 0.3, 1],
  5464. easeInOutExpo: [0.87, 0, 0.13, 1],
  5465. easeInCirc: [0.55, 0, 1, 0.45],
  5466. easeOutCirc: [0, 0.55, 0.45, 1],
  5467. easeInOutCirc: [0.85, 0, 0.15, 1],
  5468. easeInBack: [0.36, 0, 0.66, -0.56],
  5469. easeOutBack: [0.34, 1.56, 0.64, 1],
  5470. easeInOutBack: [0.68, -0.6, 0.32, 1.6]
  5471. };
  5472. const TransitionPresets = __spreadValues({
  5473. linear: shared.identity
  5474. }, _TransitionPresets);
  5475. function createEasingFunction([p0, p1, p2, p3]) {
  5476. const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;
  5477. const b = (a1, a2) => 3 * a2 - 6 * a1;
  5478. const c = (a1) => 3 * a1;
  5479. const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;
  5480. const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);
  5481. const getTforX = (x) => {
  5482. let aGuessT = x;
  5483. for (let i = 0; i < 4; ++i) {
  5484. const currentSlope = getSlope(aGuessT, p0, p2);
  5485. if (currentSlope === 0)
  5486. return aGuessT;
  5487. const currentX = calcBezier(aGuessT, p0, p2) - x;
  5488. aGuessT -= currentX / currentSlope;
  5489. }
  5490. return aGuessT;
  5491. };
  5492. return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);
  5493. }
  5494. function useTransition(source, options = {}) {
  5495. const {
  5496. delay = 0,
  5497. disabled = false,
  5498. duration = 1e3,
  5499. onFinished = shared.noop,
  5500. onStarted = shared.noop,
  5501. transition = shared.identity
  5502. } = options;
  5503. const currentTransition = vueDemi.computed(() => {
  5504. const t = vueDemi.unref(transition);
  5505. return shared.isFunction(t) ? t : createEasingFunction(t);
  5506. });
  5507. const sourceValue = vueDemi.computed(() => {
  5508. const s = vueDemi.unref(source);
  5509. return shared.isNumber(s) ? s : s.map(vueDemi.unref);
  5510. });
  5511. const sourceVector = vueDemi.computed(() => shared.isNumber(sourceValue.value) ? [sourceValue.value] : sourceValue.value);
  5512. const outputVector = vueDemi.ref(sourceVector.value.slice(0));
  5513. let currentDuration;
  5514. let diffVector;
  5515. let endAt;
  5516. let startAt;
  5517. let startVector;
  5518. const { resume, pause } = useRafFn(() => {
  5519. const now = Date.now();
  5520. const progress = shared.clamp(1 - (endAt - now) / currentDuration, 0, 1);
  5521. outputVector.value = startVector.map((val, i) => {
  5522. var _a;
  5523. return val + ((_a = diffVector[i]) != null ? _a : 0) * currentTransition.value(progress);
  5524. });
  5525. if (progress >= 1) {
  5526. pause();
  5527. onFinished();
  5528. }
  5529. }, { immediate: false });
  5530. const start = () => {
  5531. pause();
  5532. currentDuration = vueDemi.unref(duration);
  5533. diffVector = outputVector.value.map((n, i) => {
  5534. var _a, _b;
  5535. return ((_a = sourceVector.value[i]) != null ? _a : 0) - ((_b = outputVector.value[i]) != null ? _b : 0);
  5536. });
  5537. startVector = outputVector.value.slice(0);
  5538. startAt = Date.now();
  5539. endAt = startAt + currentDuration;
  5540. resume();
  5541. onStarted();
  5542. };
  5543. const timeout = shared.useTimeoutFn(start, delay, { immediate: false });
  5544. vueDemi.watch(sourceVector, () => {
  5545. if (vueDemi.unref(disabled))
  5546. return;
  5547. if (vueDemi.unref(delay) <= 0)
  5548. start();
  5549. else
  5550. timeout.start();
  5551. }, { deep: true });
  5552. vueDemi.watch(() => vueDemi.unref(disabled), (v) => {
  5553. if (v) {
  5554. outputVector.value = sourceVector.value.slice(0);
  5555. pause();
  5556. }
  5557. });
  5558. return vueDemi.computed(() => {
  5559. const targetVector = vueDemi.unref(disabled) ? sourceVector : outputVector;
  5560. return shared.isNumber(sourceValue.value) ? targetVector.value[0] : targetVector.value;
  5561. });
  5562. }
  5563. function useUrlSearchParams(mode = "history", options = {}) {
  5564. const {
  5565. initialValue = {},
  5566. removeNullishValues = true,
  5567. removeFalsyValues = false,
  5568. write: enableWrite = true,
  5569. window = defaultWindow
  5570. } = options;
  5571. if (!window)
  5572. return vueDemi.reactive(initialValue);
  5573. const state = vueDemi.reactive({});
  5574. function getRawParams() {
  5575. if (mode === "history") {
  5576. return window.location.search || "";
  5577. } else if (mode === "hash") {
  5578. const hash = window.location.hash || "";
  5579. const index = hash.indexOf("?");
  5580. return index > 0 ? hash.slice(index) : "";
  5581. } else {
  5582. return (window.location.hash || "").replace(/^#/, "");
  5583. }
  5584. }
  5585. function constructQuery(params) {
  5586. const stringified = params.toString();
  5587. if (mode === "history")
  5588. return `${stringified ? `?${stringified}` : ""}${window.location.hash || ""}`;
  5589. if (mode === "hash-params")
  5590. return `${window.location.search || ""}${stringified ? `#${stringified}` : ""}`;
  5591. const hash = window.location.hash || "#";
  5592. const index = hash.indexOf("?");
  5593. if (index > 0)
  5594. return `${hash.slice(0, index)}${stringified ? `?${stringified}` : ""}`;
  5595. return `${hash}${stringified ? `?${stringified}` : ""}`;
  5596. }
  5597. function read() {
  5598. return new URLSearchParams(getRawParams());
  5599. }
  5600. function updateState(params) {
  5601. const unusedKeys = new Set(Object.keys(state));
  5602. for (const key of params.keys()) {
  5603. const paramsForKey = params.getAll(key);
  5604. state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || "";
  5605. unusedKeys.delete(key);
  5606. }
  5607. Array.from(unusedKeys).forEach((key) => delete state[key]);
  5608. }
  5609. const { pause, resume } = shared.pausableWatch(state, () => {
  5610. const params = new URLSearchParams("");
  5611. Object.keys(state).forEach((key) => {
  5612. const mapEntry = state[key];
  5613. if (Array.isArray(mapEntry))
  5614. mapEntry.forEach((value) => params.append(key, value));
  5615. else if (removeNullishValues && mapEntry == null)
  5616. params.delete(key);
  5617. else if (removeFalsyValues && !mapEntry)
  5618. params.delete(key);
  5619. else
  5620. params.set(key, mapEntry);
  5621. });
  5622. write(params);
  5623. }, { deep: true });
  5624. function write(params, shouldUpdate) {
  5625. pause();
  5626. if (shouldUpdate)
  5627. updateState(params);
  5628. window.history.replaceState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));
  5629. resume();
  5630. }
  5631. function onChanged() {
  5632. if (!enableWrite)
  5633. return;
  5634. write(read(), true);
  5635. }
  5636. useEventListener(window, "popstate", onChanged, false);
  5637. if (mode !== "history")
  5638. useEventListener(window, "hashchange", onChanged, false);
  5639. const initial = read();
  5640. if (initial.keys().next().value)
  5641. updateState(initial);
  5642. else
  5643. Object.assign(state, initialValue);
  5644. return state;
  5645. }
  5646. function useUserMedia(options = {}) {
  5647. var _a, _b;
  5648. const enabled = vueDemi.ref((_a = options.enabled) != null ? _a : false);
  5649. const autoSwitch = vueDemi.ref((_b = options.autoSwitch) != null ? _b : true);
  5650. const videoDeviceId = vueDemi.ref(options.videoDeviceId);
  5651. const audioDeviceId = vueDemi.ref(options.audioDeviceId);
  5652. const { navigator = defaultNavigator } = options;
  5653. const isSupported = useSupported(() => {
  5654. var _a2;
  5655. return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;
  5656. });
  5657. const stream = vueDemi.shallowRef();
  5658. function getDeviceOptions(device) {
  5659. if (device.value === "none" || device.value === false)
  5660. return false;
  5661. if (device.value == null)
  5662. return true;
  5663. return {
  5664. deviceId: device.value
  5665. };
  5666. }
  5667. async function _start() {
  5668. if (!isSupported.value || stream.value)
  5669. return;
  5670. stream.value = await navigator.mediaDevices.getUserMedia({
  5671. video: getDeviceOptions(videoDeviceId),
  5672. audio: getDeviceOptions(audioDeviceId)
  5673. });
  5674. return stream.value;
  5675. }
  5676. async function _stop() {
  5677. var _a2;
  5678. (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());
  5679. stream.value = void 0;
  5680. }
  5681. function stop() {
  5682. _stop();
  5683. enabled.value = false;
  5684. }
  5685. async function start() {
  5686. await _start();
  5687. if (stream.value)
  5688. enabled.value = true;
  5689. return stream.value;
  5690. }
  5691. async function restart() {
  5692. _stop();
  5693. return await start();
  5694. }
  5695. vueDemi.watch(enabled, (v) => {
  5696. if (v)
  5697. _start();
  5698. else
  5699. _stop();
  5700. }, { immediate: true });
  5701. vueDemi.watch([videoDeviceId, audioDeviceId], () => {
  5702. if (autoSwitch.value && stream.value)
  5703. restart();
  5704. }, { immediate: true });
  5705. return {
  5706. isSupported,
  5707. stream,
  5708. start,
  5709. stop,
  5710. restart,
  5711. videoDeviceId,
  5712. audioDeviceId,
  5713. enabled,
  5714. autoSwitch
  5715. };
  5716. }
  5717. function useVModel(props, key, emit, options = {}) {
  5718. var _a, _b, _c, _d, _e;
  5719. const {
  5720. clone = false,
  5721. passive = false,
  5722. eventName,
  5723. deep = false,
  5724. defaultValue
  5725. } = options;
  5726. const vm = vueDemi.getCurrentInstance();
  5727. const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));
  5728. let event = eventName;
  5729. if (!key) {
  5730. if (vueDemi.isVue2) {
  5731. const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;
  5732. key = (modelOptions == null ? void 0 : modelOptions.value) || "value";
  5733. if (!eventName)
  5734. event = (modelOptions == null ? void 0 : modelOptions.event) || "input";
  5735. } else {
  5736. key = "modelValue";
  5737. }
  5738. }
  5739. event = eventName || event || `update:${key.toString()}`;
  5740. const cloneFn = (val) => !clone ? val : shared.isFunction(clone) ? clone(val) : cloneFnJSON(val);
  5741. const getValue = () => shared.isDef(props[key]) ? cloneFn(props[key]) : defaultValue;
  5742. if (passive) {
  5743. const initialValue = getValue();
  5744. const proxy = vueDemi.ref(initialValue);
  5745. vueDemi.watch(() => props[key], (v) => proxy.value = cloneFn(v));
  5746. vueDemi.watch(proxy, (v) => {
  5747. if (v !== props[key] || deep)
  5748. _emit(event, v);
  5749. }, { deep });
  5750. return proxy;
  5751. } else {
  5752. return vueDemi.computed({
  5753. get() {
  5754. return getValue();
  5755. },
  5756. set(value) {
  5757. _emit(event, value);
  5758. }
  5759. });
  5760. }
  5761. }
  5762. function useVModels(props, emit, options = {}) {
  5763. const ret = {};
  5764. for (const key in props)
  5765. ret[key] = useVModel(props, key, emit, options);
  5766. return ret;
  5767. }
  5768. function useVibrate(options) {
  5769. const {
  5770. pattern = [],
  5771. interval = 0,
  5772. navigator = defaultNavigator
  5773. } = options || {};
  5774. const isSupported = useSupported(() => typeof navigator !== "undefined" && "vibrate" in navigator);
  5775. const patternRef = shared.resolveRef(pattern);
  5776. let intervalControls;
  5777. const vibrate = (pattern2 = patternRef.value) => {
  5778. if (isSupported.value)
  5779. navigator.vibrate(pattern2);
  5780. };
  5781. const stop = () => {
  5782. if (isSupported.value)
  5783. navigator.vibrate(0);
  5784. intervalControls == null ? void 0 : intervalControls.pause();
  5785. };
  5786. if (interval > 0) {
  5787. intervalControls = shared.useIntervalFn(vibrate, interval, {
  5788. immediate: false,
  5789. immediateCallback: false
  5790. });
  5791. }
  5792. return {
  5793. isSupported,
  5794. pattern,
  5795. intervalControls,
  5796. vibrate,
  5797. stop
  5798. };
  5799. }
  5800. function useVirtualList(list, options) {
  5801. const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = "itemHeight" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);
  5802. return {
  5803. list: currentList,
  5804. scrollTo,
  5805. containerProps: {
  5806. ref: containerRef,
  5807. onScroll: () => {
  5808. calculateRange();
  5809. },
  5810. style: containerStyle
  5811. },
  5812. wrapperProps
  5813. };
  5814. }
  5815. function useVirtualListResourses(list) {
  5816. const containerRef = vueDemi.ref(null);
  5817. const size = useElementSize(containerRef);
  5818. const currentList = vueDemi.ref([]);
  5819. const source = vueDemi.shallowRef(list);
  5820. const state = vueDemi.ref({ start: 0, end: 10 });
  5821. return { state, source, currentList, size, containerRef };
  5822. }
  5823. function createGetViewCapacity(state, source, itemSize) {
  5824. return (containerHeight) => {
  5825. if (typeof itemSize === "number")
  5826. return Math.ceil(containerHeight / itemSize);
  5827. const { start = 0 } = state.value;
  5828. let sum = 0;
  5829. let capacity = 0;
  5830. for (let i = start; i < source.value.length; i++) {
  5831. const height = itemSize(i);
  5832. sum += height;
  5833. if (sum >= containerHeight) {
  5834. capacity = i;
  5835. break;
  5836. }
  5837. }
  5838. return capacity - start;
  5839. };
  5840. }
  5841. function createGetOffset(source, itemSize) {
  5842. return (scrollDirection) => {
  5843. if (typeof itemSize === "number")
  5844. return Math.floor(scrollDirection / itemSize) + 1;
  5845. let sum = 0;
  5846. let offset = 0;
  5847. for (let i = 0; i < source.value.length; i++) {
  5848. const size = itemSize(i);
  5849. sum += size;
  5850. if (sum >= scrollDirection) {
  5851. offset = i;
  5852. break;
  5853. }
  5854. }
  5855. return offset + 1;
  5856. };
  5857. }
  5858. function createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {
  5859. return () => {
  5860. const element = containerRef.value;
  5861. if (element) {
  5862. const offset = getOffset(type === "vertical" ? element.scrollTop : element.scrollLeft);
  5863. const viewCapacity = getViewCapacity(type === "vertical" ? element.clientHeight : element.clientWidth);
  5864. const from = offset - overscan;
  5865. const to = offset + viewCapacity + overscan;
  5866. state.value = {
  5867. start: from < 0 ? 0 : from,
  5868. end: to > source.value.length ? source.value.length : to
  5869. };
  5870. currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({
  5871. data: ele,
  5872. index: index + state.value.start
  5873. }));
  5874. }
  5875. };
  5876. }
  5877. function createGetDistance(itemSize, source) {
  5878. return (index) => {
  5879. if (typeof itemSize === "number") {
  5880. const size2 = index * itemSize;
  5881. return size2;
  5882. }
  5883. const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);
  5884. return size;
  5885. };
  5886. }
  5887. function useWatchForSizes(size, list, calculateRange) {
  5888. vueDemi.watch([size.width, size.height, list], () => {
  5889. calculateRange();
  5890. });
  5891. }
  5892. function createComputedTotalSize(itemSize, source) {
  5893. return vueDemi.computed(() => {
  5894. if (typeof itemSize === "number")
  5895. return source.value.length * itemSize;
  5896. return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);
  5897. });
  5898. }
  5899. const scrollToDictionaryForElementScrollKey = {
  5900. horizontal: "scrollLeft",
  5901. vertical: "scrollTop"
  5902. };
  5903. function createScrollTo(type, calculateRange, getDistance, containerRef) {
  5904. return (index) => {
  5905. if (containerRef.value) {
  5906. containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);
  5907. calculateRange();
  5908. }
  5909. };
  5910. }
  5911. function useHorizontalVirtualList(options, list) {
  5912. const resources = useVirtualListResourses(list);
  5913. const { state, source, currentList, size, containerRef } = resources;
  5914. const containerStyle = { overflowX: "auto" };
  5915. const { itemWidth, overscan = 5 } = options;
  5916. const getViewCapacity = createGetViewCapacity(state, source, itemWidth);
  5917. const getOffset = createGetOffset(source, itemWidth);
  5918. const calculateRange = createCalculateRange("horizontal", overscan, getOffset, getViewCapacity, resources);
  5919. const getDistanceLeft = createGetDistance(itemWidth, source);
  5920. const offsetLeft = vueDemi.computed(() => getDistanceLeft(state.value.start));
  5921. const totalWidth = createComputedTotalSize(itemWidth, source);
  5922. useWatchForSizes(size, list, calculateRange);
  5923. const scrollTo = createScrollTo("horizontal", calculateRange, getDistanceLeft, containerRef);
  5924. const wrapperProps = vueDemi.computed(() => {
  5925. return {
  5926. style: {
  5927. height: "100%",
  5928. width: `${totalWidth.value - offsetLeft.value}px`,
  5929. marginLeft: `${offsetLeft.value}px`,
  5930. display: "flex"
  5931. }
  5932. };
  5933. });
  5934. return {
  5935. scrollTo,
  5936. calculateRange,
  5937. wrapperProps,
  5938. containerStyle,
  5939. currentList,
  5940. containerRef
  5941. };
  5942. }
  5943. function useVerticalVirtualList(options, list) {
  5944. const resources = useVirtualListResourses(list);
  5945. const { state, source, currentList, size, containerRef } = resources;
  5946. const containerStyle = { overflowY: "auto" };
  5947. const { itemHeight, overscan = 5 } = options;
  5948. const getViewCapacity = createGetViewCapacity(state, source, itemHeight);
  5949. const getOffset = createGetOffset(source, itemHeight);
  5950. const calculateRange = createCalculateRange("vertical", overscan, getOffset, getViewCapacity, resources);
  5951. const getDistanceTop = createGetDistance(itemHeight, source);
  5952. const offsetTop = vueDemi.computed(() => getDistanceTop(state.value.start));
  5953. const totalHeight = createComputedTotalSize(itemHeight, source);
  5954. useWatchForSizes(size, list, calculateRange);
  5955. const scrollTo = createScrollTo("vertical", calculateRange, getDistanceTop, containerRef);
  5956. const wrapperProps = vueDemi.computed(() => {
  5957. return {
  5958. style: {
  5959. width: "100%",
  5960. height: `${totalHeight.value - offsetTop.value}px`,
  5961. marginTop: `${offsetTop.value}px`
  5962. }
  5963. };
  5964. });
  5965. return {
  5966. calculateRange,
  5967. scrollTo,
  5968. containerStyle,
  5969. wrapperProps,
  5970. currentList,
  5971. containerRef
  5972. };
  5973. }
  5974. const useWakeLock = (options = {}) => {
  5975. const {
  5976. navigator = defaultNavigator,
  5977. document = defaultDocument
  5978. } = options;
  5979. let wakeLock;
  5980. const isSupported = useSupported(() => navigator && "wakeLock" in navigator);
  5981. const isActive = vueDemi.ref(false);
  5982. async function onVisibilityChange() {
  5983. if (!isSupported.value || !wakeLock)
  5984. return;
  5985. if (document && document.visibilityState === "visible")
  5986. wakeLock = await navigator.wakeLock.request("screen");
  5987. isActive.value = !wakeLock.released;
  5988. }
  5989. if (document)
  5990. useEventListener(document, "visibilitychange", onVisibilityChange, { passive: true });
  5991. async function request(type) {
  5992. if (!isSupported.value)
  5993. return;
  5994. wakeLock = await navigator.wakeLock.request(type);
  5995. isActive.value = !wakeLock.released;
  5996. }
  5997. async function release() {
  5998. if (!isSupported.value || !wakeLock)
  5999. return;
  6000. await wakeLock.release();
  6001. isActive.value = !wakeLock.released;
  6002. wakeLock = null;
  6003. }
  6004. return {
  6005. isSupported,
  6006. isActive,
  6007. request,
  6008. release
  6009. };
  6010. };
  6011. const useWebNotification = (defaultOptions = {}) => {
  6012. const {
  6013. window = defaultWindow
  6014. } = defaultOptions;
  6015. const isSupported = useSupported(() => !!window && "Notification" in window);
  6016. const notification = vueDemi.ref(null);
  6017. const requestPermission = async () => {
  6018. if (!isSupported.value)
  6019. return;
  6020. if ("permission" in Notification && Notification.permission !== "denied")
  6021. await Notification.requestPermission();
  6022. };
  6023. const onClick = shared.createEventHook();
  6024. const onShow = shared.createEventHook();
  6025. const onError = shared.createEventHook();
  6026. const onClose = shared.createEventHook();
  6027. const show = async (overrides) => {
  6028. if (!isSupported.value)
  6029. return;
  6030. await requestPermission();
  6031. const options = Object.assign({}, defaultOptions, overrides);
  6032. notification.value = new Notification(options.title || "", options);
  6033. notification.value.onclick = (event) => onClick.trigger(event);
  6034. notification.value.onshow = (event) => onShow.trigger(event);
  6035. notification.value.onerror = (event) => onError.trigger(event);
  6036. notification.value.onclose = (event) => onClose.trigger(event);
  6037. return notification.value;
  6038. };
  6039. const close = () => {
  6040. if (notification.value)
  6041. notification.value.close();
  6042. notification.value = null;
  6043. };
  6044. shared.tryOnMounted(async () => {
  6045. if (isSupported.value)
  6046. await requestPermission();
  6047. });
  6048. shared.tryOnScopeDispose(close);
  6049. if (isSupported.value && window) {
  6050. const document = window.document;
  6051. useEventListener(document, "visibilitychange", (e) => {
  6052. e.preventDefault();
  6053. if (document.visibilityState === "visible") {
  6054. close();
  6055. }
  6056. });
  6057. }
  6058. return {
  6059. isSupported,
  6060. notification,
  6061. show,
  6062. close,
  6063. onClick,
  6064. onShow,
  6065. onError,
  6066. onClose
  6067. };
  6068. };
  6069. const DEFAULT_PING_MESSAGE = "ping";
  6070. function resolveNestedOptions(options) {
  6071. if (options === true)
  6072. return {};
  6073. return options;
  6074. }
  6075. function useWebSocket(url, options = {}) {
  6076. const {
  6077. onConnected,
  6078. onDisconnected,
  6079. onError,
  6080. onMessage,
  6081. immediate = true,
  6082. autoClose = true,
  6083. protocols = []
  6084. } = options;
  6085. const data = vueDemi.ref(null);
  6086. const status = vueDemi.ref("CLOSED");
  6087. const wsRef = vueDemi.ref();
  6088. const urlRef = shared.resolveRef(url);
  6089. let heartbeatPause;
  6090. let heartbeatResume;
  6091. let explicitlyClosed = false;
  6092. let retried = 0;
  6093. let bufferedData = [];
  6094. let pongTimeoutWait;
  6095. const close = (code = 1e3, reason) => {
  6096. if (!wsRef.value)
  6097. return;
  6098. explicitlyClosed = true;
  6099. heartbeatPause == null ? void 0 : heartbeatPause();
  6100. wsRef.value.close(code, reason);
  6101. };
  6102. const _sendBuffer = () => {
  6103. if (bufferedData.length && wsRef.value && status.value === "OPEN") {
  6104. for (const buffer of bufferedData)
  6105. wsRef.value.send(buffer);
  6106. bufferedData = [];
  6107. }
  6108. };
  6109. const resetHeartbeat = () => {
  6110. clearTimeout(pongTimeoutWait);
  6111. pongTimeoutWait = void 0;
  6112. };
  6113. const send = (data2, useBuffer = true) => {
  6114. if (!wsRef.value || status.value !== "OPEN") {
  6115. if (useBuffer)
  6116. bufferedData.push(data2);
  6117. return false;
  6118. }
  6119. _sendBuffer();
  6120. wsRef.value.send(data2);
  6121. return true;
  6122. };
  6123. const _init = () => {
  6124. if (explicitlyClosed)
  6125. return;
  6126. const ws = new WebSocket(urlRef.value, protocols);
  6127. wsRef.value = ws;
  6128. status.value = "CONNECTING";
  6129. ws.onopen = () => {
  6130. status.value = "OPEN";
  6131. onConnected == null ? void 0 : onConnected(ws);
  6132. heartbeatResume == null ? void 0 : heartbeatResume();
  6133. _sendBuffer();
  6134. };
  6135. ws.onclose = (ev) => {
  6136. status.value = "CLOSED";
  6137. wsRef.value = void 0;
  6138. onDisconnected == null ? void 0 : onDisconnected(ws, ev);
  6139. if (!explicitlyClosed && options.autoReconnect) {
  6140. const {
  6141. retries = -1,
  6142. delay = 1e3,
  6143. onFailed
  6144. } = resolveNestedOptions(options.autoReconnect);
  6145. retried += 1;
  6146. if (typeof retries === "number" && (retries < 0 || retried < retries))
  6147. setTimeout(_init, delay);
  6148. else if (typeof retries === "function" && retries())
  6149. setTimeout(_init, delay);
  6150. else
  6151. onFailed == null ? void 0 : onFailed();
  6152. }
  6153. };
  6154. ws.onerror = (e) => {
  6155. onError == null ? void 0 : onError(ws, e);
  6156. };
  6157. ws.onmessage = (e) => {
  6158. if (options.heartbeat) {
  6159. resetHeartbeat();
  6160. const {
  6161. message = DEFAULT_PING_MESSAGE
  6162. } = resolveNestedOptions(options.heartbeat);
  6163. if (e.data === message)
  6164. return;
  6165. }
  6166. data.value = e.data;
  6167. onMessage == null ? void 0 : onMessage(ws, e);
  6168. };
  6169. };
  6170. if (options.heartbeat) {
  6171. const {
  6172. message = DEFAULT_PING_MESSAGE,
  6173. interval = 1e3,
  6174. pongTimeout = 1e3
  6175. } = resolveNestedOptions(options.heartbeat);
  6176. const { pause, resume } = shared.useIntervalFn(() => {
  6177. send(message, false);
  6178. if (pongTimeoutWait != null)
  6179. return;
  6180. pongTimeoutWait = setTimeout(() => {
  6181. close();
  6182. }, pongTimeout);
  6183. }, interval, { immediate: false });
  6184. heartbeatPause = pause;
  6185. heartbeatResume = resume;
  6186. }
  6187. if (autoClose) {
  6188. useEventListener(window, "beforeunload", () => close());
  6189. shared.tryOnScopeDispose(close);
  6190. }
  6191. const open = () => {
  6192. close();
  6193. explicitlyClosed = false;
  6194. retried = 0;
  6195. _init();
  6196. };
  6197. if (immediate)
  6198. vueDemi.watch(urlRef, open, { immediate: true });
  6199. return {
  6200. data,
  6201. status,
  6202. close,
  6203. send,
  6204. open,
  6205. ws: wsRef
  6206. };
  6207. }
  6208. function useWebWorker(arg0, workerOptions, options) {
  6209. const {
  6210. window = defaultWindow
  6211. } = options != null ? options : {};
  6212. const data = vueDemi.ref(null);
  6213. const worker = vueDemi.shallowRef();
  6214. const post = function post2(val) {
  6215. if (!worker.value)
  6216. return;
  6217. worker.value.postMessage(val);
  6218. };
  6219. const terminate = function terminate2() {
  6220. if (!worker.value)
  6221. return;
  6222. worker.value.terminate();
  6223. };
  6224. if (window) {
  6225. if (shared.isString(arg0))
  6226. worker.value = new Worker(arg0, workerOptions);
  6227. else if (shared.isFunction(arg0))
  6228. worker.value = arg0();
  6229. else
  6230. worker.value = arg0;
  6231. worker.value.onmessage = (e) => {
  6232. data.value = e.data;
  6233. };
  6234. shared.tryOnScopeDispose(() => {
  6235. if (worker.value)
  6236. worker.value.terminate();
  6237. });
  6238. }
  6239. return {
  6240. data,
  6241. post,
  6242. terminate,
  6243. worker
  6244. };
  6245. }
  6246. const jobRunner = (userFunc) => (e) => {
  6247. const userFuncArgs = e.data[0];
  6248. return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {
  6249. postMessage(["SUCCESS", result]);
  6250. }).catch((error) => {
  6251. postMessage(["ERROR", error]);
  6252. });
  6253. };
  6254. const depsParser = (deps) => {
  6255. if (deps.length === 0)
  6256. return "";
  6257. const depsString = deps.map((dep) => `'${dep}'`).toString();
  6258. return `importScripts(${depsString})`;
  6259. };
  6260. const createWorkerBlobUrl = (fn, deps) => {
  6261. const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;
  6262. const blob = new Blob([blobCode], { type: "text/javascript" });
  6263. const url = URL.createObjectURL(blob);
  6264. return url;
  6265. };
  6266. const useWebWorkerFn = (fn, options = {}) => {
  6267. const {
  6268. dependencies = [],
  6269. timeout,
  6270. window = defaultWindow
  6271. } = options;
  6272. const worker = vueDemi.ref();
  6273. const workerStatus = vueDemi.ref("PENDING");
  6274. const promise = vueDemi.ref({});
  6275. const timeoutId = vueDemi.ref();
  6276. const workerTerminate = (status = "PENDING") => {
  6277. if (worker.value && worker.value._url && window) {
  6278. worker.value.terminate();
  6279. URL.revokeObjectURL(worker.value._url);
  6280. promise.value = {};
  6281. worker.value = void 0;
  6282. window.clearTimeout(timeoutId.value);
  6283. workerStatus.value = status;
  6284. }
  6285. };
  6286. workerTerminate();
  6287. shared.tryOnScopeDispose(workerTerminate);
  6288. const generateWorker = () => {
  6289. const blobUrl = createWorkerBlobUrl(fn, dependencies);
  6290. const newWorker = new Worker(blobUrl);
  6291. newWorker._url = blobUrl;
  6292. newWorker.onmessage = (e) => {
  6293. const { resolve = () => {
  6294. }, reject = () => {
  6295. } } = promise.value;
  6296. const [status, result] = e.data;
  6297. switch (status) {
  6298. case "SUCCESS":
  6299. resolve(result);
  6300. workerTerminate(status);
  6301. break;
  6302. default:
  6303. reject(result);
  6304. workerTerminate("ERROR");
  6305. break;
  6306. }
  6307. };
  6308. newWorker.onerror = (e) => {
  6309. const { reject = () => {
  6310. } } = promise.value;
  6311. reject(e);
  6312. workerTerminate("ERROR");
  6313. };
  6314. if (timeout) {
  6315. timeoutId.value = setTimeout(() => workerTerminate("TIMEOUT_EXPIRED"), timeout);
  6316. }
  6317. return newWorker;
  6318. };
  6319. const callWorker = (...fnArgs) => new Promise((resolve, reject) => {
  6320. promise.value = {
  6321. resolve,
  6322. reject
  6323. };
  6324. worker.value && worker.value.postMessage([[...fnArgs]]);
  6325. workerStatus.value = "RUNNING";
  6326. });
  6327. const workerFn = (...fnArgs) => {
  6328. if (workerStatus.value === "RUNNING") {
  6329. console.error("[useWebWorkerFn] You can only run one instance of the worker at a time.");
  6330. return Promise.reject();
  6331. }
  6332. worker.value = generateWorker();
  6333. return callWorker(...fnArgs);
  6334. };
  6335. return {
  6336. workerFn,
  6337. workerStatus,
  6338. workerTerminate
  6339. };
  6340. };
  6341. function useWindowFocus({ window = defaultWindow } = {}) {
  6342. if (!window)
  6343. return vueDemi.ref(false);
  6344. const focused = vueDemi.ref(window.document.hasFocus());
  6345. useEventListener(window, "blur", () => {
  6346. focused.value = false;
  6347. });
  6348. useEventListener(window, "focus", () => {
  6349. focused.value = true;
  6350. });
  6351. return focused;
  6352. }
  6353. function useWindowScroll({ window = defaultWindow } = {}) {
  6354. if (!window) {
  6355. return {
  6356. x: vueDemi.ref(0),
  6357. y: vueDemi.ref(0)
  6358. };
  6359. }
  6360. const x = vueDemi.ref(window.pageXOffset);
  6361. const y = vueDemi.ref(window.pageYOffset);
  6362. useEventListener(window, "scroll", () => {
  6363. x.value = window.pageXOffset;
  6364. y.value = window.pageYOffset;
  6365. }, {
  6366. capture: false,
  6367. passive: true
  6368. });
  6369. return { x, y };
  6370. }
  6371. function useWindowSize(options = {}) {
  6372. const {
  6373. window = defaultWindow,
  6374. initialWidth = Infinity,
  6375. initialHeight = Infinity,
  6376. listenOrientation = true,
  6377. includeScrollbar = true
  6378. } = options;
  6379. const width = vueDemi.ref(initialWidth);
  6380. const height = vueDemi.ref(initialHeight);
  6381. const update = () => {
  6382. if (window) {
  6383. if (includeScrollbar) {
  6384. width.value = window.innerWidth;
  6385. height.value = window.innerHeight;
  6386. } else {
  6387. width.value = window.document.documentElement.clientWidth;
  6388. height.value = window.document.documentElement.clientHeight;
  6389. }
  6390. }
  6391. };
  6392. update();
  6393. shared.tryOnMounted(update);
  6394. useEventListener("resize", update, { passive: true });
  6395. if (listenOrientation)
  6396. useEventListener("orientationchange", update, { passive: true });
  6397. return { width, height };
  6398. }
  6399. exports.DefaultMagicKeysAliasMap = DefaultMagicKeysAliasMap;
  6400. exports.StorageSerializers = StorageSerializers;
  6401. exports.TransitionPresets = TransitionPresets;
  6402. exports.asyncComputed = computedAsync;
  6403. exports.breakpointsAntDesign = breakpointsAntDesign;
  6404. exports.breakpointsBootstrapV5 = breakpointsBootstrapV5;
  6405. exports.breakpointsMasterCss = breakpointsMasterCss;
  6406. exports.breakpointsQuasar = breakpointsQuasar;
  6407. exports.breakpointsSematic = breakpointsSematic;
  6408. exports.breakpointsTailwind = breakpointsTailwind;
  6409. exports.breakpointsVuetify = breakpointsVuetify;
  6410. exports.cloneFnJSON = cloneFnJSON;
  6411. exports.computedAsync = computedAsync;
  6412. exports.computedInject = computedInject;
  6413. exports.createFetch = createFetch;
  6414. exports.createUnrefFn = createUnrefFn;
  6415. exports.defaultDocument = defaultDocument;
  6416. exports.defaultLocation = defaultLocation;
  6417. exports.defaultNavigator = defaultNavigator;
  6418. exports.defaultWindow = defaultWindow;
  6419. exports.formatTimeAgo = formatTimeAgo;
  6420. exports.getSSRHandler = getSSRHandler;
  6421. exports.mapGamepadToXbox360Controller = mapGamepadToXbox360Controller;
  6422. exports.onClickOutside = onClickOutside;
  6423. exports.onKeyDown = onKeyDown;
  6424. exports.onKeyPressed = onKeyPressed;
  6425. exports.onKeyStroke = onKeyStroke;
  6426. exports.onKeyUp = onKeyUp;
  6427. exports.onLongPress = onLongPress;
  6428. exports.onStartTyping = onStartTyping;
  6429. exports.setSSRHandler = setSSRHandler;
  6430. exports.templateRef = templateRef;
  6431. exports.unrefElement = unrefElement;
  6432. exports.useActiveElement = useActiveElement;
  6433. exports.useAsyncQueue = useAsyncQueue;
  6434. exports.useAsyncState = useAsyncState;
  6435. exports.useBase64 = useBase64;
  6436. exports.useBattery = useBattery;
  6437. exports.useBluetooth = useBluetooth;
  6438. exports.useBreakpoints = useBreakpoints;
  6439. exports.useBroadcastChannel = useBroadcastChannel;
  6440. exports.useBrowserLocation = useBrowserLocation;
  6441. exports.useCached = useCached;
  6442. exports.useClipboard = useClipboard;
  6443. exports.useCloned = useCloned;
  6444. exports.useColorMode = useColorMode;
  6445. exports.useConfirmDialog = useConfirmDialog;
  6446. exports.useCssVar = useCssVar;
  6447. exports.useCurrentElement = useCurrentElement;
  6448. exports.useCycleList = useCycleList;
  6449. exports.useDark = useDark;
  6450. exports.useDebouncedRefHistory = useDebouncedRefHistory;
  6451. exports.useDeviceMotion = useDeviceMotion;
  6452. exports.useDeviceOrientation = useDeviceOrientation;
  6453. exports.useDevicePixelRatio = useDevicePixelRatio;
  6454. exports.useDevicesList = useDevicesList;
  6455. exports.useDisplayMedia = useDisplayMedia;
  6456. exports.useDocumentVisibility = useDocumentVisibility;
  6457. exports.useDraggable = useDraggable;
  6458. exports.useDropZone = useDropZone;
  6459. exports.useElementBounding = useElementBounding;
  6460. exports.useElementByPoint = useElementByPoint;
  6461. exports.useElementHover = useElementHover;
  6462. exports.useElementSize = useElementSize;
  6463. exports.useElementVisibility = useElementVisibility;
  6464. exports.useEventBus = useEventBus;
  6465. exports.useEventListener = useEventListener;
  6466. exports.useEventSource = useEventSource;
  6467. exports.useEyeDropper = useEyeDropper;
  6468. exports.useFavicon = useFavicon;
  6469. exports.useFetch = useFetch;
  6470. exports.useFileDialog = useFileDialog;
  6471. exports.useFileSystemAccess = useFileSystemAccess;
  6472. exports.useFocus = useFocus;
  6473. exports.useFocusWithin = useFocusWithin;
  6474. exports.useFps = useFps;
  6475. exports.useFullscreen = useFullscreen;
  6476. exports.useGamepad = useGamepad;
  6477. exports.useGeolocation = useGeolocation;
  6478. exports.useIdle = useIdle;
  6479. exports.useImage = useImage;
  6480. exports.useInfiniteScroll = useInfiniteScroll;
  6481. exports.useIntersectionObserver = useIntersectionObserver;
  6482. exports.useKeyModifier = useKeyModifier;
  6483. exports.useLocalStorage = useLocalStorage;
  6484. exports.useMagicKeys = useMagicKeys;
  6485. exports.useManualRefHistory = useManualRefHistory;
  6486. exports.useMediaControls = useMediaControls;
  6487. exports.useMediaQuery = useMediaQuery;
  6488. exports.useMemoize = useMemoize;
  6489. exports.useMemory = useMemory;
  6490. exports.useMounted = useMounted;
  6491. exports.useMouse = useMouse;
  6492. exports.useMouseInElement = useMouseInElement;
  6493. exports.useMousePressed = useMousePressed;
  6494. exports.useMutationObserver = useMutationObserver;
  6495. exports.useNavigatorLanguage = useNavigatorLanguage;
  6496. exports.useNetwork = useNetwork;
  6497. exports.useNow = useNow;
  6498. exports.useObjectUrl = useObjectUrl;
  6499. exports.useOffsetPagination = useOffsetPagination;
  6500. exports.useOnline = useOnline;
  6501. exports.usePageLeave = usePageLeave;
  6502. exports.useParallax = useParallax;
  6503. exports.usePermission = usePermission;
  6504. exports.usePointer = usePointer;
  6505. exports.usePointerSwipe = usePointerSwipe;
  6506. exports.usePreferredColorScheme = usePreferredColorScheme;
  6507. exports.usePreferredContrast = usePreferredContrast;
  6508. exports.usePreferredDark = usePreferredDark;
  6509. exports.usePreferredLanguages = usePreferredLanguages;
  6510. exports.usePreferredReducedMotion = usePreferredReducedMotion;
  6511. exports.useRafFn = useRafFn;
  6512. exports.useRefHistory = useRefHistory;
  6513. exports.useResizeObserver = useResizeObserver;
  6514. exports.useScreenOrientation = useScreenOrientation;
  6515. exports.useScreenSafeArea = useScreenSafeArea;
  6516. exports.useScriptTag = useScriptTag;
  6517. exports.useScroll = useScroll;
  6518. exports.useScrollLock = useScrollLock;
  6519. exports.useSessionStorage = useSessionStorage;
  6520. exports.useShare = useShare;
  6521. exports.useSorted = useSorted;
  6522. exports.useSpeechRecognition = useSpeechRecognition;
  6523. exports.useSpeechSynthesis = useSpeechSynthesis;
  6524. exports.useStepper = useStepper;
  6525. exports.useStorage = useStorage;
  6526. exports.useStorageAsync = useStorageAsync;
  6527. exports.useStyleTag = useStyleTag;
  6528. exports.useSupported = useSupported;
  6529. exports.useSwipe = useSwipe;
  6530. exports.useTemplateRefsList = useTemplateRefsList;
  6531. exports.useTextDirection = useTextDirection;
  6532. exports.useTextSelection = useTextSelection;
  6533. exports.useTextareaAutosize = useTextareaAutosize;
  6534. exports.useThrottledRefHistory = useThrottledRefHistory;
  6535. exports.useTimeAgo = useTimeAgo;
  6536. exports.useTimeoutPoll = useTimeoutPoll;
  6537. exports.useTimestamp = useTimestamp;
  6538. exports.useTitle = useTitle;
  6539. exports.useTransition = useTransition;
  6540. exports.useUrlSearchParams = useUrlSearchParams;
  6541. exports.useUserMedia = useUserMedia;
  6542. exports.useVModel = useVModel;
  6543. exports.useVModels = useVModels;
  6544. exports.useVibrate = useVibrate;
  6545. exports.useVirtualList = useVirtualList;
  6546. exports.useWakeLock = useWakeLock;
  6547. exports.useWebNotification = useWebNotification;
  6548. exports.useWebSocket = useWebSocket;
  6549. exports.useWebWorker = useWebWorker;
  6550. exports.useWebWorkerFn = useWebWorkerFn;
  6551. exports.useWindowFocus = useWindowFocus;
  6552. exports.useWindowScroll = useWindowScroll;
  6553. exports.useWindowSize = useWindowSize;
  6554. Object.keys(shared).forEach(function (k) {
  6555. if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
  6556. enumerable: true,
  6557. get: function () { return shared[k]; }
  6558. });
  6559. });
  6560. })(this.VueUse = this.VueUse || {}, VueUse, VueDemi);