index.cjs 200 KB

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