1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769 |
- "use strict";
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
- const vue = require("vue");
- const shared = require("@vue/shared");
- const uniShared = require("@dcloudio/uni-shared");
- const vueRouter = require("vue-router");
- const uniI18n = require("@dcloudio/uni-i18n");
- function arrayPop(array) {
- if (array.length === 0) {
- return null;
- }
- return array.pop();
- }
- function arrayShift(array) {
- if (array.length === 0) {
- return null;
- }
- return array.shift();
- }
- function arrayFind(array, predicate) {
- const index2 = array.findIndex(predicate);
- if (index2 < 0) {
- return null;
- }
- return array[index2];
- }
- function arrayFindLast(array, predicate) {
- const index2 = array.findLastIndex(predicate);
- if (index2 < 0) {
- return null;
- }
- return array[index2];
- }
- function arrayAt(array, index2) {
- if (index2 < -array.length || index2 >= array.length) {
- return null;
- }
- return array.at(index2);
- }
- var IDENTIFIER;
- (function(IDENTIFIER2) {
- IDENTIFIER2["UTSJSONObject"] = "UTSJSONObject";
- IDENTIFIER2["JSON"] = "JSON";
- IDENTIFIER2["UTS"] = "UTS";
- IDENTIFIER2["DEFINE_COMPONENT"] = "defineComponent";
- IDENTIFIER2["VUE"] = "vue";
- IDENTIFIER2["GLOBAL_THIS"] = "globalThis";
- IDENTIFIER2["UTS_TYPE"] = "UTSType";
- IDENTIFIER2["UTS_METADATA"] = "$UTSMetadata$";
- IDENTIFIER2["TEMP_UTS_METADATA"] = "$TempUTSMetadata$";
- IDENTIFIER2["JSON_FIELD"] = "JSON_FIELD";
- })(IDENTIFIER || (IDENTIFIER = {}));
- var UTS_CLASS_METADATA_KIND;
- (function(UTS_CLASS_METADATA_KIND2) {
- UTS_CLASS_METADATA_KIND2[UTS_CLASS_METADATA_KIND2["CLASS"] = 0] = "CLASS";
- UTS_CLASS_METADATA_KIND2[UTS_CLASS_METADATA_KIND2["INTERFACE"] = 1] = "INTERFACE";
- UTS_CLASS_METADATA_KIND2[UTS_CLASS_METADATA_KIND2["TYPE"] = 2] = "TYPE";
- })(UTS_CLASS_METADATA_KIND || (UTS_CLASS_METADATA_KIND = {}));
- function getType$1(val) {
- return Object.prototype.toString.call(val).slice(8, -1).toLowerCase();
- }
- function isPlainObject(val) {
- if (val == null || typeof val !== "object") {
- return false;
- }
- const proto = Object.getPrototypeOf(val);
- return proto === Object.prototype || proto === null;
- }
- class UTSError extends Error {
- constructor(message) {
- super(message);
- }
- }
- function isUTSMetadata(metadata) {
- return !!(metadata && metadata.kind in UTS_CLASS_METADATA_KIND && metadata.interfaces);
- }
- function isNativeType(proto) {
- return !proto || proto === Object.prototype;
- }
- const utsMetadataKey = IDENTIFIER.UTS_METADATA;
- function getParentTypeList(type) {
- const metadata = utsMetadataKey in type ? type[utsMetadataKey] : {};
- let interfaces = [];
- if (!isUTSMetadata(metadata)) {
- interfaces = [];
- } else {
- interfaces = metadata.interfaces || [];
- }
- const proto = Object.getPrototypeOf(type);
- if (!isNativeType(proto)) {
- interfaces.push(proto.constructor);
- }
- return interfaces;
- }
- function isImplementationOf(leftType, rightType, visited = []) {
- if (isNativeType(leftType)) {
- return false;
- }
- if (leftType === rightType) {
- return true;
- }
- visited.push(leftType);
- const parentTypeList = getParentTypeList(leftType);
- return parentTypeList.some((parentType) => {
- if (visited.includes(parentType)) {
- return false;
- }
- return isImplementationOf(parentType, rightType, visited);
- });
- }
- function isInstanceOf(value, type) {
- const isNativeInstanceofType = value instanceof type;
- if (isNativeInstanceofType || typeof value !== "object") {
- return isNativeInstanceofType;
- }
- const proto = Object.getPrototypeOf(value).constructor;
- return isImplementationOf(proto, type);
- }
- function isBaseType(type) {
- return type === Number || type === String || type === Boolean;
- }
- function isUnknownType(type) {
- return type === "Unknown";
- }
- function isAnyType(type) {
- return type === "Any";
- }
- function isUTSType(type) {
- return type && type.prototype && type.prototype instanceof UTSType;
- }
- function normalizeGenericValue(value, genericType, isJSONParse = false) {
- return value == null ? null : isBaseType(genericType) || isUnknownType(genericType) || isAnyType(genericType) ? value : genericType === Array ? new Array(...value) : new genericType(value, void 0, isJSONParse);
- }
- class UTSType {
- static get$UTSMetadata$(...args) {
- return {
- kind: UTS_CLASS_METADATA_KIND.TYPE,
- interfaces: [],
- fields: {}
- };
- }
- get $UTSMetadata$() {
- return UTSType.get$UTSMetadata$();
- }
- // TODO 缓存withGenerics结果
- static withGenerics(parent, generics, isJSONParse = false) {
- if (isJSONParse) {
- const illegalGeneric = generics.find((item) => !(item === Array || isBaseType(item) || isUnknownType(item) || isAnyType(item) || item === UTSJSONObject || item.prototype && item.prototype instanceof UTSType));
- if (illegalGeneric) {
- throw new Error("Generic is not UTSType or Array or UTSJSONObject or base type, generic: " + illegalGeneric);
- }
- }
- if (parent === Array) {
- return class UTSArray extends UTSType {
- constructor(options, isJSONParse2 = false) {
- if (!Array.isArray(options)) {
- throw new UTSError(`Failed to contruct type, ${options} is not an array`);
- }
- super();
- return options.map((item) => {
- return normalizeGenericValue(item, generics[0], isJSONParse2);
- });
- }
- };
- } else if (parent === Map || parent === WeakMap) {
- return class UTSMap extends UTSType {
- constructor(options, isJSONParse2 = false) {
- if (options == null || typeof options !== "object") {
- throw new UTSError(`Failed to contruct type, ${options} is not an object`);
- }
- super();
- const obj = new parent();
- for (const key in options) {
- obj.set(normalizeGenericValue(key, generics[0], isJSONParse2), normalizeGenericValue(options[key], generics[1], isJSONParse2));
- }
- return obj;
- }
- };
- } else if (isUTSType(parent)) {
- return class VirtualClassWithGenerics extends parent {
- static get$UTSMetadata$() {
- return parent.get$UTSMetadata$(...generics);
- }
- constructor(options, metadata = VirtualClassWithGenerics.get$UTSMetadata$(), isJSONParse2 = false) {
- super(options, metadata, isJSONParse2);
- }
- };
- } else {
- return parent;
- }
- }
- constructor() {
- }
- static initProps(options, metadata, isJSONParse = false) {
- const obj = {};
- if (!metadata.fields) {
- return obj;
- }
- for (const key in metadata.fields) {
- const { type, optional, jsonField } = metadata.fields[key];
- const realKey = isJSONParse ? jsonField || key : key;
- if (options[realKey] == null) {
- if (optional) {
- obj[key] = null;
- continue;
- } else {
- throw new UTSError(`Failed to contruct type, missing required property: ${key}`);
- }
- }
- if (isUTSType(type)) {
- obj[key] = new type(options[realKey], void 0, isJSONParse);
- } else if (type === Array) {
- if (!Array.isArray(options[realKey])) {
- throw new UTSError(`Failed to contruct type, property ${key} is not an array`);
- }
- obj[key] = options[realKey].map((item) => {
- return item == null ? null : item;
- });
- } else {
- obj[key] = options[realKey];
- }
- }
- return obj;
- }
- }
- const OriginalJSON = JSON;
- function parseObjectOrArray(object, utsType) {
- const objectType = getType$1(object);
- if (object === null || objectType !== "object" && objectType !== "array") {
- return object;
- }
- if (utsType || utsType === UTSJSONObject) {
- try {
- return new utsType(object, void 0, true);
- } catch (error) {
- console.error(error);
- return null;
- }
- }
- if (objectType === "array") {
- return object.map((value) => {
- return parseObjectOrArray(value);
- });
- } else if (objectType === "object") {
- return new UTSJSONObject(object);
- }
- return object;
- }
- const UTSJSON = {
- parse: (text, reviver, utsType) => {
- if (reviver && (isUTSType(reviver) || reviver === UTSJSONObject)) {
- utsType = reviver;
- reviver = void 0;
- }
- try {
- const parseResult = OriginalJSON.parse(text, reviver);
- return parseObjectOrArray(parseResult, utsType);
- } catch (error) {
- console.error(error);
- return null;
- }
- },
- parseArray(text, utsType) {
- try {
- const parseResult = OriginalJSON.parse(text);
- if (Array.isArray(parseResult)) {
- return parseObjectOrArray(parseResult, utsType ? UTSType.withGenerics(Array, [utsType], true) : void 0);
- }
- return null;
- } catch (error) {
- console.error(error);
- return null;
- }
- },
- parseObject(text, utsType) {
- try {
- const parseResult = OriginalJSON.parse(text);
- if (Array.isArray(parseResult)) {
- return null;
- }
- return parseObjectOrArray(parseResult, utsType);
- } catch (error) {
- console.error(error);
- return null;
- }
- },
- stringify: (value) => {
- return OriginalJSON.stringify(value);
- }
- };
- function mapGet(map, key) {
- if (!map.has(key)) {
- return null;
- }
- return map.get(key);
- }
- function stringCodePointAt(str, pos) {
- if (pos < 0 || pos >= str.length) {
- return null;
- }
- return str.codePointAt(pos);
- }
- function stringAt(str, pos) {
- if (pos < -str.length || pos >= str.length) {
- return null;
- }
- return str.at(pos);
- }
- function weakMapGet(map, key) {
- if (!map.has(key)) {
- return null;
- }
- return map.get(key);
- }
- const UTS$1 = {
- arrayAt,
- arrayFind,
- arrayFindLast,
- arrayPop,
- arrayShift,
- isInstanceOf,
- UTSType,
- mapGet,
- stringAt,
- stringCodePointAt,
- weakMapGet,
- JSON: UTSJSON
- };
- let UniError$1 = class UniError2 extends Error {
- constructor(errSubject, errCode, errMsg) {
- let options = {};
- const argsLength = Array.from(arguments).length;
- switch (argsLength) {
- case 0:
- errSubject = "";
- errMsg = "";
- errCode = 0;
- break;
- case 1:
- errMsg = errSubject;
- errSubject = "";
- errCode = 0;
- break;
- case 2:
- errMsg = errSubject;
- options = errCode;
- errCode = options.errCode || 0;
- errSubject = options.errSubject || "";
- break;
- }
- super(errMsg);
- this.name = "UniError";
- this.errSubject = errSubject;
- this.errCode = errCode;
- this.errMsg = errMsg;
- if (options.data) {
- this.data = options.data;
- }
- if (options.cause) {
- this.cause = options.cause;
- }
- }
- set errMsg(msg) {
- this.message = msg;
- }
- get errMsg() {
- return this.message;
- }
- toString() {
- return this.errMsg;
- }
- toJSON() {
- return {
- errSubject: this.errSubject,
- errCode: this.errCode,
- errMsg: this.errMsg,
- data: this.data,
- cause: this.cause && typeof this.cause.toJSON === "function" ? this.cause.toJSON() : this.cause
- };
- }
- };
- function initUTSJSONObjectProperties(obj) {
- const propertyList = [
- "_resolveKeyPath",
- "_getValue",
- "toJSON",
- "get",
- "set",
- "getAny",
- "getString",
- "getNumber",
- "getBoolean",
- "getJSON",
- "getArray",
- "toMap",
- "forEach"
- ];
- const propertyDescriptorMap = {};
- for (let i = 0; i < propertyList.length; i++) {
- const property = propertyList[i];
- propertyDescriptorMap[property] = {
- enumerable: false,
- value: obj[property]
- };
- }
- Object.defineProperties(obj, propertyDescriptorMap);
- }
- function setUTSJSONObjectValue(obj, key, value) {
- if (isPlainObject(value)) {
- obj[key] = new UTSJSONObject$1(value);
- } else if (getType$1(value) === "array") {
- obj[key] = value.map((item) => {
- if (isPlainObject(item)) {
- return new UTSJSONObject$1(item);
- } else {
- return item;
- }
- });
- } else {
- obj[key] = value;
- }
- }
- let UTSJSONObject$1 = class UTSJSONObject2 {
- static keys(obj) {
- return Object.keys(obj);
- }
- static assign(target, ...sources) {
- for (let i = 0; i < sources.length; i++) {
- const source = sources[i];
- for (let key in source) {
- target[key] = source[key];
- }
- }
- return target;
- }
- constructor(content = {}) {
- if (content instanceof Map) {
- content.forEach((value, key) => {
- setUTSJSONObjectValue(this, key, value);
- });
- } else {
- for (const key in content) {
- if (Object.prototype.hasOwnProperty.call(content, key)) {
- const value = content[key];
- setUTSJSONObjectValue(this, key, value);
- }
- }
- }
- initUTSJSONObjectProperties(this);
- }
- _resolveKeyPath(keyPath) {
- let token = "";
- const keyPathArr = [];
- let inOpenParentheses = false;
- for (let i = 0; i < keyPath.length; i++) {
- const word = keyPath[i];
- switch (word) {
- case ".":
- if (token.length > 0) {
- keyPathArr.push(token);
- token = "";
- }
- break;
- case "[": {
- inOpenParentheses = true;
- if (token.length > 0) {
- keyPathArr.push(token);
- token = "";
- }
- break;
- }
- case "]":
- if (inOpenParentheses) {
- if (token.length > 0) {
- const tokenFirstChar = token[0];
- const tokenLastChar = token[token.length - 1];
- if (tokenFirstChar === '"' && tokenLastChar === '"' || tokenFirstChar === "'" && tokenLastChar === "'" || tokenFirstChar === "`" && tokenLastChar === "`") {
- if (token.length > 2) {
- token = token.slice(1, -1);
- } else {
- return [];
- }
- } else if (!/^\d+$/.test(token)) {
- return [];
- }
- keyPathArr.push(token);
- token = "";
- } else {
- return [];
- }
- inOpenParentheses = false;
- } else {
- return [];
- }
- break;
- default:
- token += word;
- break;
- }
- if (i === keyPath.length - 1) {
- if (token.length > 0) {
- keyPathArr.push(token);
- token = "";
- }
- }
- }
- return keyPathArr;
- }
- _getValue(keyPath) {
- const keyPathArr = this._resolveKeyPath(keyPath);
- if (keyPathArr.length === 0) {
- return null;
- }
- let value = this;
- for (let i = 0; i < keyPathArr.length; i++) {
- const key = keyPathArr[i];
- if (value instanceof Object) {
- value = value[key];
- } else {
- return null;
- }
- }
- return value;
- }
- get(key) {
- return this._getValue(key);
- }
- set(key, value) {
- this[key] = value;
- }
- getAny(key) {
- return this._getValue(key);
- }
- getString(key) {
- const value = this._getValue(key);
- if (typeof value === "string") {
- return value;
- } else {
- return null;
- }
- }
- getNumber(key) {
- const value = this._getValue(key);
- if (typeof value === "number") {
- return value;
- } else {
- return null;
- }
- }
- getBoolean(key) {
- const boolean = this._getValue(key);
- if (typeof boolean === "boolean") {
- return boolean;
- } else {
- return null;
- }
- }
- getJSON(key) {
- let value = this._getValue(key);
- if (value instanceof Object) {
- return new UTSJSONObject2(value);
- } else {
- return null;
- }
- }
- getArray(key) {
- let value = this._getValue(key);
- if (value instanceof Array) {
- return value;
- } else {
- return null;
- }
- }
- toMap() {
- let map = /* @__PURE__ */ new Map();
- for (let key in this) {
- map.set(key, this[key]);
- }
- return map;
- }
- forEach(callback) {
- for (let key in this) {
- callback(this[key], key);
- }
- }
- };
- function getGlobal() {
- if (typeof globalThis !== "undefined") {
- return globalThis;
- }
- if (typeof self !== "undefined") {
- return self;
- }
- if (typeof window !== "undefined") {
- return window;
- }
- if (typeof global !== "undefined") {
- return global;
- }
- function g2() {
- return this;
- }
- if (typeof g2() !== "undefined") {
- return g2();
- }
- return function() {
- return new Function("return this")();
- }();
- }
- const realGlobal = getGlobal();
- realGlobal.UTSJSONObject = UTSJSONObject$1;
- realGlobal.UniError = UniError$1;
- realGlobal.UTS = UTS$1;
- const isEnableLocale = /* @__PURE__ */ uniShared.once(
- () => typeof __uniConfig !== "undefined" && __uniConfig.locales && !!Object.keys(__uniConfig.locales).length
- );
- let i18n;
- function getLocaleMessage() {
- const locale = uni.getLocale();
- const locales = __uniConfig.locales;
- return locales[locale] || locales[__uniConfig.fallbackLocale] || locales.en || {};
- }
- function formatI18n(message) {
- if (uniI18n.isI18nStr(message, uniShared.I18N_JSON_DELIMITERS)) {
- return useI18n().f(message, getLocaleMessage(), uniShared.I18N_JSON_DELIMITERS);
- }
- return message;
- }
- function resolveJsonObj(jsonObj, names) {
- if (names.length === 1) {
- if (jsonObj) {
- const _isI18nStr = (value2) => shared.isString(value2) && uniI18n.isI18nStr(value2, uniShared.I18N_JSON_DELIMITERS);
- const _name = names[0];
- let filterJsonObj = [];
- if (shared.isArray(jsonObj) && (filterJsonObj = jsonObj.filter((item) => _isI18nStr(item[_name]))).length) {
- return filterJsonObj;
- }
- const value = jsonObj[names[0]];
- if (_isI18nStr(value)) {
- return jsonObj;
- }
- }
- return;
- }
- const name = names.shift();
- return resolveJsonObj(jsonObj && jsonObj[name], names);
- }
- function defineI18nProperties(obj, names) {
- return names.map((name) => defineI18nProperty(obj, name));
- }
- function defineI18nProperty(obj, names) {
- const jsonObj = resolveJsonObj(obj, names);
- if (!jsonObj) {
- return false;
- }
- const prop = names[names.length - 1];
- if (shared.isArray(jsonObj)) {
- jsonObj.forEach((item) => defineI18nProperty(item, [prop]));
- } else {
- let value = jsonObj[prop];
- Object.defineProperty(jsonObj, prop, {
- get() {
- return formatI18n(value);
- },
- set(v2) {
- value = v2;
- }
- });
- }
- return true;
- }
- function useI18n() {
- if (!i18n) {
- let locale;
- {
- {
- locale = uniShared.getEnvLocale();
- }
- }
- i18n = uniI18n.initVueI18n(locale);
- if (isEnableLocale()) {
- const localeKeys = Object.keys(__uniConfig.locales || {});
- if (localeKeys.length) {
- localeKeys.forEach(
- (locale2) => i18n.add(locale2, __uniConfig.locales[locale2])
- );
- }
- i18n.setLocale(locale);
- }
- }
- return i18n;
- }
- function normalizeMessages(module2, keys, values) {
- return keys.reduce((res, name, index2) => {
- res[module2 + name] = values[index2];
- return res;
- }, {});
- }
- const initI18nAsyncMsgsOnce = /* @__PURE__ */ uniShared.once(() => {
- const name = "uni.async.";
- const keys = ["error"];
- if (__UNI_FEATURE_I18N_EN__) {
- useI18n().add(
- uniI18n.LOCALE_EN,
- normalizeMessages(name, keys, [
- "The connection timed out, click the screen to try again."
- ]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_ES__) {
- useI18n().add(
- uniI18n.LOCALE_ES,
- normalizeMessages(name, keys, [
- "Se agotó el tiempo de conexión, haga clic en la pantalla para volver a intentarlo."
- ]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_FR__) {
- useI18n().add(
- uniI18n.LOCALE_FR,
- normalizeMessages(name, keys, [
- "La connexion a expiré, cliquez sur l'écran pour réessayer."
- ]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_ZH_HANS__) {
- useI18n().add(
- uniI18n.LOCALE_ZH_HANS,
- normalizeMessages(name, keys, ["连接服务器超时,点击屏幕重试"]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_ZH_HANT__) {
- useI18n().add(
- uniI18n.LOCALE_ZH_HANT,
- normalizeMessages(name, keys, ["連接服務器超時,點擊屏幕重試"]),
- false
- );
- }
- });
- const initI18nPickerMsgsOnce = /* @__PURE__ */ uniShared.once(() => {
- const name = "uni.picker.";
- const keys = ["done", "cancel"];
- if (__UNI_FEATURE_I18N_EN__) {
- useI18n().add(
- uniI18n.LOCALE_EN,
- normalizeMessages(name, keys, ["Done", "Cancel"]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_ES__) {
- useI18n().add(
- uniI18n.LOCALE_ES,
- normalizeMessages(name, keys, ["OK", "Cancelar"]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_FR__) {
- useI18n().add(
- uniI18n.LOCALE_FR,
- normalizeMessages(name, keys, ["OK", "Annuler"]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_ZH_HANS__) {
- useI18n().add(
- uniI18n.LOCALE_ZH_HANS,
- normalizeMessages(name, keys, ["完成", "取消"]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_ZH_HANT__) {
- useI18n().add(
- uniI18n.LOCALE_ZH_HANT,
- normalizeMessages(name, keys, ["完成", "取消"]),
- false
- );
- }
- });
- const initI18nVideoMsgsOnce = /* @__PURE__ */ uniShared.once(() => {
- const name = "uni.video.";
- const keys = ["danmu", "volume"];
- if (__UNI_FEATURE_I18N_EN__) {
- useI18n().add(
- uniI18n.LOCALE_EN,
- normalizeMessages(name, keys, ["Danmu", "Volume"]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_ES__) {
- useI18n().add(
- uniI18n.LOCALE_ES,
- normalizeMessages(name, keys, ["Danmu", "Volumen"]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_FR__) {
- useI18n().add(
- uniI18n.LOCALE_FR,
- normalizeMessages(name, keys, ["Danmu", "Le Volume"]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_ZH_HANS__) {
- useI18n().add(
- uniI18n.LOCALE_ZH_HANS,
- normalizeMessages(name, keys, ["弹幕", "音量"]),
- false
- );
- }
- if (__UNI_FEATURE_I18N_ZH_HANT__) {
- useI18n().add(
- uniI18n.LOCALE_ZH_HANT,
- normalizeMessages(name, keys, ["彈幕", "音量"]),
- false
- );
- }
- });
- function initNavigationBarI18n(navigationBar) {
- if (isEnableLocale()) {
- return defineI18nProperties(navigationBar, [
- ["titleText"],
- ["searchInput", "placeholder"],
- ["buttons", "text"]
- ]);
- }
- }
- function initTabBarI18n(tabBar2) {
- if (isEnableLocale() && tabBar2.list) {
- tabBar2.list.forEach((item) => {
- defineI18nProperty(item, ["text"]);
- });
- }
- return tabBar2;
- }
- function initBridge(subscribeNamespace) {
- const emitter = new uniShared.Emitter();
- return {
- on(event, callback) {
- return emitter.on(event, callback);
- },
- once(event, callback) {
- return emitter.once(event, callback);
- },
- off(event, callback) {
- return emitter.off(event, callback);
- },
- emit(event, ...args) {
- return emitter.emit(event, ...args);
- },
- subscribe(event, callback, once = false) {
- emitter[once ? "once" : "on"](`${subscribeNamespace}.${event}`, callback);
- },
- unsubscribe(event, callback) {
- emitter.off(`${subscribeNamespace}.${event}`, callback);
- },
- subscribeHandler(event, args, pageId) {
- emitter.emit(`${subscribeNamespace}.${event}`, args, pageId);
- }
- };
- }
- const INVOKE_VIEW_API = "invokeViewApi";
- const INVOKE_SERVICE_API = "invokeServiceApi";
- let invokeServiceMethodId = 1;
- const invokeServiceMethod = (name, args, callback) => {
- const { subscribe, publishHandler } = UniViewJSBridge;
- const id2 = callback ? invokeServiceMethodId++ : 0;
- callback && subscribe(INVOKE_SERVICE_API + "." + id2, callback, true);
- publishHandler(INVOKE_SERVICE_API, { id: id2, name, args });
- };
- const viewMethods = /* @__PURE__ */ Object.create(null);
- function normalizeViewMethodName(pageId, name) {
- return pageId + "." + name;
- }
- function registerViewMethod(pageId, name, fn) {
- name = normalizeViewMethodName(pageId, name);
- if (!viewMethods[name]) {
- viewMethods[name] = fn;
- }
- }
- const ViewJSBridge = /* @__PURE__ */ shared.extend(
- /* @__PURE__ */ initBridge("service"),
- {
- invokeServiceMethod
- }
- );
- const onEventPrevent = /* @__PURE__ */ vue.withModifiers(() => {
- }, ["prevent"]);
- const onEventStop = /* @__PURE__ */ vue.withModifiers(
- (_event) => {
- },
- ["stop"]
- );
- function updateCssVar(cssVars) {
- const style = document.documentElement.style;
- Object.keys(cssVars).forEach((name) => {
- style.setProperty(name, cssVars[name]);
- });
- }
- function updatePageCssVar(cssVars) {
- return updateCssVar(cssVars);
- }
- function PolySymbol(name) {
- return Symbol(process.env.NODE_ENV !== "production" ? "[uni-app]: " + name : name);
- }
- function rpx2px(str, replace = false) {
- if (replace) {
- return rpx2pxWithReplace(str);
- }
- {
- return parseInt(str + "");
- }
- }
- function rpx2pxWithReplace(str) {
- {
- return str;
- }
- }
- const ICON_PATH_CANCEL = "M20.928 10.176l-4.928 4.928-4.928-4.928-0.896 0.896 4.928 4.928-4.928 4.928 0.896 0.896 4.928-4.928 4.928 4.928 0.896-0.896-4.928-4.928 4.928-4.928-0.896-0.896zM16 2.080q-3.776 0-7.040 1.888-3.136 1.856-4.992 4.992-1.888 3.264-1.888 7.040t1.888 7.040q1.856 3.136 4.992 4.992 3.264 1.888 7.040 1.888t7.040-1.888q3.136-1.856 4.992-4.992 1.888-3.264 1.888-7.040t-1.888-7.040q-1.856-3.136-4.992-4.992-3.264-1.888-7.040-1.888zM16 28.64q-3.424 0-6.4-1.728-2.848-1.664-4.512-4.512-1.728-2.976-1.728-6.4t1.728-6.4q1.664-2.848 4.512-4.512 2.976-1.728 6.4-1.728t6.4 1.728q2.848 1.664 4.512 4.512 1.728 2.976 1.728 6.4t-1.728 6.4q-1.664 2.848-4.512 4.512-2.976 1.728-6.4 1.728z";
- const ICON_PATH_CLEAR = "M16 0q-4.352 0-8.064 2.176-3.616 2.144-5.76 5.76-2.176 3.712-2.176 8.064t2.176 8.064q2.144 3.616 5.76 5.76 3.712 2.176 8.064 2.176t8.064-2.176q3.616-2.144 5.76-5.76 2.176-3.712 2.176-8.064t-2.176-8.064q-2.144-3.616-5.76-5.76-3.712-2.176-8.064-2.176zM22.688 21.408q0.32 0.32 0.304 0.752t-0.336 0.736-0.752 0.304-0.752-0.32l-5.184-5.376-5.376 5.184q-0.32 0.32-0.752 0.304t-0.736-0.336-0.304-0.752 0.32-0.752l5.376-5.184-5.184-5.376q-0.32-0.32-0.304-0.752t0.336-0.752 0.752-0.304 0.752 0.336l5.184 5.376 5.376-5.184q0.32-0.32 0.752-0.304t0.752 0.336 0.304 0.752-0.336 0.752l-5.376 5.184 5.184 5.376z";
- const ICON_PATH_DOWNLOAD = "M15.808 1.696q-3.776 0-7.072 1.984-3.2 1.888-5.088 5.152-1.952 3.392-1.952 7.36 0 3.776 1.952 7.072 1.888 3.2 5.088 5.088 3.296 1.952 7.072 1.952 3.968 0 7.36-1.952 3.264-1.888 5.152-5.088 1.984-3.296 1.984-7.072 0-4-1.984-7.36-1.888-3.264-5.152-5.152-3.36-1.984-7.36-1.984zM20.864 18.592l-3.776 4.928q-0.448 0.576-1.088 0.576t-1.088-0.576l-3.776-4.928q-0.448-0.576-0.24-0.992t0.944-0.416h2.976v-8.928q0-0.256 0.176-0.432t0.4-0.176h1.216q0.224 0 0.4 0.176t0.176 0.432v8.928h2.976q0.736 0 0.944 0.416t-0.24 0.992z";
- const ICON_PATH_INFO = "M15.808 0.128q-4.224 0-7.872 2.176-3.552 2.112-5.632 5.728-2.176 3.776-2.176 8.16 0 4.224 2.176 7.872 2.080 3.552 5.632 5.632 3.648 2.176 7.872 2.176 4.384 0 8.16-2.176 3.616-2.080 5.728-5.632 2.176-3.648 2.176-7.872 0-4.416-2.176-8.16-2.112-3.616-5.728-5.728-3.744-2.176-8.16-2.176zM16.864 23.776q0 0.064-0.064 0.064h-1.568q-0.096 0-0.096-0.064l-0.256-11.328q0-0.064 0.064-0.064h2.112q0.096 0 0.064 0.064l-0.256 11.328zM16 10.88q-0.576 0-0.976-0.4t-0.4-0.96 0.4-0.96 0.976-0.4 0.976 0.4 0.4 0.96-0.4 0.96-0.976 0.4z";
- const ICON_PATH_SEARCH = "M20.928 22.688q-1.696 1.376-3.744 2.112-2.112 0.768-4.384 0.768-3.488 0-6.464-1.728-2.88-1.696-4.576-4.608-1.76-2.976-1.76-6.464t1.76-6.464q1.696-2.88 4.576-4.576 2.976-1.76 6.464-1.76t6.464 1.76q2.912 1.696 4.608 4.576 1.728 2.976 1.728 6.464 0 2.272-0.768 4.384-0.736 2.048-2.112 3.744l9.312 9.28-1.824 1.824-9.28-9.312zM12.8 23.008q2.784 0 5.184-1.376 2.304-1.376 3.68-3.68 1.376-2.4 1.376-5.184t-1.376-5.152q-1.376-2.336-3.68-3.68-2.4-1.408-5.184-1.408t-5.152 1.408q-2.336 1.344-3.68 3.68-1.408 2.368-1.408 5.152t1.408 5.184q1.344 2.304 3.68 3.68 2.368 1.376 5.152 1.376zM12.8 23.008v0z";
- const ICON_PATH_SUCCESS_NO_CIRCLE = "M1.952 18.080q-0.32-0.352-0.416-0.88t0.128-0.976l0.16-0.352q0.224-0.416 0.64-0.528t0.8 0.176l6.496 4.704q0.384 0.288 0.912 0.272t0.88-0.336l17.312-14.272q0.352-0.288 0.848-0.256t0.848 0.352l-0.416-0.416q0.32 0.352 0.32 0.816t-0.32 0.816l-18.656 18.912q-0.32 0.352-0.8 0.352t-0.8-0.32l-7.936-8.064z";
- const ICON_PATH_SUCCESS = "M15.808 0.16q-4.224 0-7.872 2.176-3.552 2.112-5.632 5.728-2.144 3.744-2.144 8.128 0 4.192 2.144 7.872 2.112 3.52 5.632 5.632 3.68 2.144 7.872 2.144 4.384 0 8.128-2.144 3.616-2.080 5.728-5.632 2.176-3.648 2.176-7.872 0-4.384-2.176-8.128-2.112-3.616-5.728-5.728-3.744-2.176-8.128-2.176zM24.832 11.328l-11.264 11.104q-0.032 0.032-0.112 0.032t-0.112-0.032l-5.216-5.376q-0.096-0.128 0-0.288l0.704-0.96q0.032-0.064 0.112-0.064t0.112 0.032l4.256 3.264q0.064 0.032 0.144 0.032t0.112-0.032l10.336-8.608q0.064-0.064 0.144-0.064t0.112 0.064l0.672 0.672q0.128 0.128 0 0.224z";
- const ICON_PATH_WAITING = "M15.84 0.096q-4.224 0-7.872 2.176-3.552 2.112-5.632 5.728-2.144 3.744-2.144 8.128 0 4.192 2.144 7.872 2.112 3.52 5.632 5.632 3.68 2.144 7.872 2.144 4.384 0 8.128-2.144 3.616-2.080 5.728-5.632 2.176-3.648 2.176-7.872 0-4.384-2.176-8.128-2.112-3.616-5.728-5.728-3.744-2.176-8.128-2.176zM23.008 21.92l-0.512 0.896q-0.096 0.128-0.224 0.064l-8-3.808q-0.096-0.064-0.16-0.128-0.128-0.096-0.128-0.288l0.512-12.096q0-0.064 0.048-0.112t0.112-0.048h1.376q0.064 0 0.112 0.048t0.048 0.112l0.448 10.848 6.304 4.256q0.064 0.064 0.080 0.128t-0.016 0.128z";
- const ICON_PATH_WARN = "M15.808 0.16q-4.224 0-7.872 2.176-3.552 2.112-5.632 5.728-2.144 3.744-2.144 8.128 0 4.192 2.144 7.872 2.112 3.52 5.632 5.632 3.68 2.144 7.872 2.144 4.384 0 8.128-2.144 3.616-2.080 5.728-5.632 2.176-3.648 2.176-7.872 0-4.384-2.176-8.128-2.112-3.616-5.728-5.728-3.744-2.176-8.128-2.176zM15.136 8.672h1.728q0.128 0 0.224 0.096t0.096 0.256l-0.384 10.24q0 0.064-0.048 0.112t-0.112 0.048h-1.248q-0.096 0-0.144-0.048t-0.048-0.112l-0.384-10.24q0-0.16 0.096-0.256t0.224-0.096zM16 23.328q-0.48 0-0.832-0.352t-0.352-0.848 0.352-0.848 0.832-0.352 0.832 0.352 0.352 0.848-0.352 0.848-0.832 0.352z";
- const ICON_PATH_BACK = "M21.781 7.844l-9.063 8.594 9.063 8.594q0.25 0.25 0.25 0.609t-0.25 0.578q-0.25 0.25-0.578 0.25t-0.578-0.25l-9.625-9.125q-0.156-0.125-0.203-0.297t-0.047-0.359q0-0.156 0.047-0.328t0.203-0.297l9.625-9.125q0.25-0.25 0.578-0.25t0.578 0.25q0.25 0.219 0.25 0.578t-0.25 0.578z";
- const ICON_PATH_CLOSE = "M17.25 16.156l7.375-7.313q0.281-0.281 0.281-0.641t-0.281-0.641q-0.25-0.25-0.625-0.25t-0.625 0.25l-7.375 7.344-7.313-7.344q-0.25-0.25-0.625-0.25t-0.625 0.25q-0.281 0.25-0.281 0.625t0.281 0.625l7.313 7.344-7.375 7.344q-0.281 0.25-0.281 0.625t0.281 0.625q0.125 0.125 0.281 0.188t0.344 0.063q0.156 0 0.328-0.063t0.297-0.188l7.375-7.344 7.375 7.406q0.125 0.156 0.297 0.219t0.328 0.063q0.188 0 0.344-0.078t0.281-0.203q0.281-0.25 0.281-0.609t-0.281-0.641l-7.375-7.406z";
- function createSvgIconVNode(path, color = "#000", size = 27) {
- return vue.createVNode(
- "svg",
- {
- width: size,
- height: size,
- viewBox: "0 0 32 32"
- },
- [
- vue.createVNode(
- "path",
- {
- d: path,
- fill: color
- },
- null,
- 8,
- ["d", "fill"]
- )
- ],
- 8,
- ["width", "height"]
- );
- }
- function useCurrentPageId() {
- {
- const { $pageInstance } = vue.getCurrentInstance();
- return $pageInstance && $pageInstance.proxy.$page.id;
- }
- }
- function getCurrentPage() {
- const pages = getCurrentPages();
- const len = pages.length;
- if (len) {
- return pages[len - 1];
- }
- }
- function getCurrentPageMeta() {
- const page = getCurrentPage();
- if (page) {
- return page.$page.meta;
- }
- }
- function getCurrentPageId() {
- const meta = getCurrentPageMeta();
- if (meta) {
- return meta.id;
- }
- return -1;
- }
- function getCurrentPageVm() {
- const page = getCurrentPage();
- if (page) {
- return page.$vm;
- }
- }
- const PAGE_META_KEYS = ["navigationBar", "pullToRefresh"];
- function initGlobalStyle() {
- return JSON.parse(JSON.stringify(__uniConfig.globalStyle || {}));
- }
- function initRouteMeta(pageMeta, id2) {
- const globalStyle = initGlobalStyle();
- const res = shared.extend({ id: id2 }, globalStyle, pageMeta);
- PAGE_META_KEYS.forEach((name) => {
- res[name] = shared.extend({}, globalStyle[name], pageMeta[name]);
- });
- const { navigationBar } = res;
- navigationBar.titleText && navigationBar.titleImage && (navigationBar.titleText = "");
- return res;
- }
- function normalizePullToRefreshRpx(pullToRefresh) {
- if (pullToRefresh.offset) {
- pullToRefresh.offset = rpx2px(pullToRefresh.offset);
- }
- if (pullToRefresh.height) {
- pullToRefresh.height = rpx2px(pullToRefresh.height);
- }
- if (pullToRefresh.range) {
- pullToRefresh.range = rpx2px(pullToRefresh.range);
- }
- return pullToRefresh;
- }
- function initPageInternalInstance(openType, url, pageQuery, meta, eventChannel, themeMode) {
- const { id: id2, route } = meta;
- const titleColor = uniShared.normalizeStyles(
- meta.navigationBar,
- __uniConfig.themeConfig,
- themeMode
- ).titleColor;
- return {
- id: id2,
- path: uniShared.addLeadingSlash(route),
- route,
- fullPath: url,
- options: pageQuery,
- meta,
- openType,
- eventChannel,
- statusBarStyle: titleColor === "#ffffff" ? "light" : "dark"
- };
- }
- function invokeHook(vm, name, args) {
- if (shared.isString(vm)) {
- args = name;
- name = vm;
- vm = getCurrentPageVm();
- } else if (typeof vm === "number") {
- const page = getCurrentPages().find((page2) => page2.$page.id === vm);
- if (page) {
- vm = page.$vm;
- } else {
- vm = getCurrentPageVm();
- }
- }
- if (!vm) {
- return;
- }
- const hooks = vm.$[name];
- return hooks && uniShared.invokeArrayFns(hooks, args);
- }
- function getRealRoute(fromRoute, toRoute) {
- if (toRoute.indexOf("/") === 0) {
- return toRoute;
- }
- if (toRoute.indexOf("./") === 0) {
- return getRealRoute(fromRoute, toRoute.slice(2));
- }
- const toRouteArray = toRoute.split("/");
- const toRouteLength = toRouteArray.length;
- let i = 0;
- for (; i < toRouteLength && toRouteArray[i] === ".."; i++) {
- }
- toRouteArray.splice(0, i);
- toRoute = toRouteArray.join("/");
- const fromRouteArray = fromRoute.length > 0 ? fromRoute.split("/") : [];
- fromRouteArray.splice(fromRouteArray.length - i - 1, i + 1);
- return uniShared.addLeadingSlash(fromRouteArray.concat(toRouteArray).join("/"));
- }
- function getRouteOptions(path, alias = false) {
- if (alias) {
- return __uniRoutes.find(
- (route) => route.path === path || route.alias === path
- );
- }
- return __uniRoutes.find((route) => route.path === path);
- }
- const invokeOnCallback = (name, res) => UniServiceJSBridge.emit("api." + name, res);
- let invokeViewMethodId = 1;
- function publishViewMethodName(pageId) {
- return (pageId || getCurrentPageId()) + "." + INVOKE_VIEW_API;
- }
- const invokeViewMethod = (name, args, pageId, callback) => {
- const { subscribe, publishHandler } = UniServiceJSBridge;
- const id2 = callback ? invokeViewMethodId++ : 0;
- callback && subscribe(INVOKE_VIEW_API + "." + id2, callback, true);
- publishHandler(publishViewMethodName(pageId), { id: id2, name, args }, pageId);
- };
- const invokeViewMethodKeepAlive = (name, args, callback, pageId) => {
- const { subscribe, unsubscribe, publishHandler } = UniServiceJSBridge;
- const id2 = invokeViewMethodId++;
- const subscribeName = INVOKE_VIEW_API + "." + id2;
- subscribe(subscribeName, callback);
- publishHandler(publishViewMethodName(pageId), { id: id2, name, args }, pageId);
- return () => {
- unsubscribe(subscribeName);
- };
- };
- const ServiceJSBridge = /* @__PURE__ */ shared.extend(
- /* @__PURE__ */ initBridge(
- "view"
- /* view 指的是 service 层订阅的是 view 层事件 */
- ),
- {
- invokeOnCallback,
- invokeViewMethod,
- invokeViewMethodKeepAlive
- }
- );
- function initAppVm(appVm2) {
- appVm2.$vm = appVm2;
- appVm2.$mpType = "app";
- const locale = vue.ref(useI18n().getLocale());
- Object.defineProperty(appVm2, "$locale", {
- get() {
- return locale.value;
- },
- set(v2) {
- locale.value = v2;
- }
- });
- }
- function initPageVm(pageVm, page) {
- pageVm.route = page.route;
- pageVm.$vm = pageVm;
- pageVm.$page = page;
- pageVm.$mpType = "page";
- pageVm.$fontFamilySet = /* @__PURE__ */ new Set();
- if (page.meta.isTabBar) {
- pageVm.$.__isTabBar = true;
- pageVm.$.__isActive = true;
- }
- }
- function defineGlobalData(app, defaultGlobalData) {
- const options = app.$options || {};
- options.globalData = shared.extend(options.globalData || {}, defaultGlobalData);
- Object.defineProperty(app, "globalData", {
- get() {
- return options.globalData;
- },
- set(newGlobalData) {
- options.globalData = newGlobalData;
- }
- });
- }
- function converPx(value) {
- if (/^-?\d+[ur]px$/i.test(value)) {
- return value.replace(/(^-?\d+)[ur]px$/i, (text, num) => {
- return `${uni.upx2px(parseFloat(num))}px`;
- });
- } else if (/^-?[\d\.]+$/.test(value)) {
- return `${value}px`;
- }
- return value || "";
- }
- function converType(type) {
- return type.replace(/[A-Z]/g, (text) => {
- return `-${text.toLowerCase()}`;
- }).replace("webkit", "-webkit");
- }
- function getStyle(action) {
- const animateTypes1 = [
- "matrix",
- "matrix3d",
- "scale",
- "scale3d",
- "rotate3d",
- "skew",
- "translate",
- "translate3d"
- ];
- const animateTypes2 = [
- "scaleX",
- "scaleY",
- "scaleZ",
- "rotate",
- "rotateX",
- "rotateY",
- "rotateZ",
- "skewX",
- "skewY",
- "translateX",
- "translateY",
- "translateZ"
- ];
- const animateTypes3 = ["opacity", "background-color"];
- const animateTypes4 = ["width", "height", "left", "right", "top", "bottom"];
- const animates = action.animates;
- const option = action.option;
- const transition = option.transition;
- const style = {};
- const transform = [];
- animates.forEach((animate) => {
- let type = animate.type;
- let args = [...animate.args];
- if (animateTypes1.concat(animateTypes2).includes(type)) {
- if (type.startsWith("rotate") || type.startsWith("skew")) {
- args = args.map((value) => parseFloat(value) + "deg");
- } else if (type.startsWith("translate")) {
- args = args.map(converPx);
- }
- if (animateTypes2.indexOf(type) >= 0) {
- args.length = 1;
- }
- transform.push(`${type}(${args.join(",")})`);
- } else if (animateTypes3.concat(animateTypes4).includes(args[0])) {
- type = args[0];
- const value = args[1];
- style[type] = animateTypes4.includes(type) ? converPx(value) : value;
- }
- });
- style.transform = style.webkitTransform = transform.join(" ");
- style.transition = style.webkitTransition = Object.keys(style).map(
- (type) => `${converType(type)} ${transition.duration}ms ${transition.timingFunction} ${transition.delay}ms`
- ).join(",");
- style.transformOrigin = style.webkitTransformOrigin = option.transformOrigin;
- return style;
- }
- function startAnimation(context) {
- const animation2 = context.animation;
- if (!animation2 || !animation2.actions || !animation2.actions.length) {
- return;
- }
- let index2 = 0;
- const actions = animation2.actions;
- const length = animation2.actions.length;
- function animate() {
- const action = actions[index2];
- const transition = action.option.transition;
- const style = getStyle(action);
- Object.keys(style).forEach((key) => {
- context.$el.style[key] = style[key];
- });
- index2 += 1;
- if (index2 < length) {
- setTimeout(animate, transition.duration + transition.delay);
- }
- }
- setTimeout(() => {
- animate();
- }, 0);
- }
- const animation = {
- props: ["animation"],
- watch: {
- animation: {
- deep: true,
- handler() {
- startAnimation(this);
- }
- }
- },
- mounted() {
- startAnimation(this);
- }
- };
- const defineBuiltInComponent = (options) => {
- options.__reserved = true;
- const { props: props2, mixins } = options;
- if (!props2 || !props2.animation) {
- (mixins || (options.mixins = [])).push(animation);
- }
- return defineSystemComponent(options);
- };
- const defineSystemComponent = (options) => {
- options.__reserved = true;
- options.compatConfig = {
- MODE: 3
- // 标记为vue3
- };
- return vue.defineComponent(options);
- };
- const defineUnsupportedComponent = (name) => {
- return defineBuiltInComponent({
- name: shared.capitalize(shared.camelize(name)),
- setup() {
- return () => (vue.openBlock(), vue.createElementBlock("uni-" + name, null, name + " is unsupported"));
- }
- });
- };
- function withWebEvent(fn) {
- return fn.__wwe = true, fn;
- }
- function useCustomEvent(ref, emit2) {
- return (name, evt, detail) => {
- if (ref.value) {
- emit2(name, normalizeCustomEvent(name, evt, ref.value, detail || {}));
- }
- };
- }
- function normalizeCustomEvent(name, domEvt, el, detail) {
- let target;
- target = uniShared.normalizeTarget(el);
- return {
- type: detail.type || name,
- timeStamp: domEvt.timeStamp || 0,
- target,
- currentTarget: target,
- detail
- };
- }
- const hoverProps = {
- hoverClass: {
- type: String,
- default: "none"
- },
- hoverStopPropagation: {
- type: Boolean,
- default: false
- },
- hoverStartTime: {
- type: [Number, String],
- default: 50
- },
- hoverStayTime: {
- type: [Number, String],
- default: 400
- }
- };
- function useHover(props2) {
- const hovering = vue.ref(false);
- let hoverTouch = false;
- let hoverStartTimer;
- let hoverStayTimer;
- function hoverReset() {
- requestAnimationFrame(() => {
- clearTimeout(hoverStayTimer);
- hoverStayTimer = setTimeout(() => {
- hovering.value = false;
- }, parseInt(props2.hoverStayTime));
- });
- }
- function onTouchstartPassive(evt) {
- if (evt.touches.length > 1) {
- return;
- }
- handleHoverStart(evt);
- }
- function onMousedown(evt) {
- if (hoverTouch) {
- return;
- }
- handleHoverStart(evt);
- window.addEventListener("mouseup", handlePCHoverEnd);
- }
- function handleHoverStart(evt) {
- if (evt._hoverPropagationStopped) {
- return;
- }
- if (!props2.hoverClass || props2.hoverClass === "none" || props2.disabled) {
- return;
- }
- if (props2.hoverStopPropagation) {
- evt._hoverPropagationStopped = true;
- }
- hoverTouch = true;
- hoverStartTimer = setTimeout(() => {
- hovering.value = true;
- if (!hoverTouch) {
- hoverReset();
- }
- }, parseInt(props2.hoverStartTime));
- }
- function onTouchend() {
- handleHoverEnd();
- }
- function onMouseup() {
- if (!hoverTouch) {
- return;
- }
- handlePCHoverEnd();
- }
- function handleHoverEnd() {
- hoverTouch = false;
- if (hovering.value) {
- hoverReset();
- }
- }
- function handlePCHoverEnd() {
- handleHoverEnd();
- window.removeEventListener("mouseup", handlePCHoverEnd);
- }
- function onTouchcancel() {
- hoverTouch = false;
- hovering.value = false;
- clearTimeout(hoverStartTimer);
- }
- return {
- hovering,
- binding: {
- onTouchstartPassive: withWebEvent(onTouchstartPassive),
- onMousedown: withWebEvent(onMousedown),
- onTouchend: withWebEvent(onTouchend),
- onMouseup: withWebEvent(onMouseup),
- onTouchcancel: withWebEvent(onTouchcancel)
- }
- };
- }
- function useBooleanAttr(props2, keys) {
- if (shared.isString(keys)) {
- keys = [keys];
- }
- return keys.reduce((res, key) => {
- if (props2[key]) {
- res[key] = true;
- }
- return res;
- }, /* @__PURE__ */ Object.create(null));
- }
- function transformRpx(value) {
- if (/(-?(?:\d+\.)?\d+)[ur]px/gi.test(value)) {
- return value.replace(/(-?(?:\d+\.)?\d+)[ur]px/gi, (text, num) => {
- return `${uni.upx2px(parseFloat(num))}px`;
- });
- }
- return value;
- }
- class UniElement extends HTMLElement {
- constructor() {
- super();
- this._props = {};
- this.__isUniElement = true;
- }
- attachVmProps(props2) {
- this._props = props2;
- }
- getAttribute(qualifiedName) {
- const name = shared.camelize(qualifiedName);
- return name in this._props ? this._props[name] + "" : super.getAttribute(qualifiedName) || null;
- }
- get style() {
- const originalStyle = super.style;
- if (originalStyle.__patchRpx__) {
- return originalStyle;
- }
- originalStyle.__patchRpx__ = true;
- const originalSetProperty = originalStyle.setProperty.bind(originalStyle);
- super.style.setProperty = function(property, value, priority) {
- return originalSetProperty(
- property,
- value ? transformRpx(value + "") : value,
- priority || void 0
- );
- };
- return super.style;
- }
- get tagName() {
- return super.tagName.replace(/^UNI-/, "");
- }
- get nodeName() {
- return super.nodeName.replace(/^UNI-/, "");
- }
- }
- const uniFormKey = PolySymbol(process.env.NODE_ENV !== "production" ? "uniForm" : "uf");
- const index$B = /* @__PURE__ */ defineBuiltInComponent({
- name: "Form",
- emits: ["submit", "reset"],
- setup(_props, {
- slots,
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- provideForm(useCustomEvent(rootRef, emit2));
- return () => vue.createVNode("uni-form", {
- "ref": rootRef
- }, [vue.createVNode("span", null, [slots.default && slots.default()])], 512);
- }
- });
- function provideForm(trigger) {
- const fields2 = [];
- vue.provide(uniFormKey, {
- addField(field) {
- fields2.push(field);
- },
- removeField(field) {
- fields2.splice(fields2.indexOf(field), 1);
- },
- submit(evt) {
- trigger("submit", evt, {
- value: fields2.reduce((res, field) => {
- if (field.submit) {
- const [name, value] = field.submit();
- name && (res[name] = value);
- }
- return res;
- }, /* @__PURE__ */ Object.create(null))
- });
- },
- reset(evt) {
- fields2.forEach((field) => field.reset && field.reset());
- trigger("reset", evt);
- }
- });
- return fields2;
- }
- const labelProps = {
- for: {
- type: String,
- default: ""
- }
- };
- const uniLabelKey = PolySymbol(process.env.NODE_ENV !== "production" ? "uniLabel" : "ul");
- function useProvideLabel() {
- const handlers = [];
- vue.provide(uniLabelKey, {
- addHandler(handler) {
- handlers.push(handler);
- },
- removeHandler(handler) {
- handlers.splice(handlers.indexOf(handler), 1);
- }
- });
- return handlers;
- }
- const index$A = /* @__PURE__ */ defineBuiltInComponent({
- name: "Label",
- props: labelProps,
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- const pageId = useCurrentPageId();
- const handlers = useProvideLabel();
- const pointer = vue.computed(() => props2.for || slots.default && slots.default.length);
- const _onClick = withWebEvent(($event) => {
- const EventTarget = $event.target;
- let stopPropagation = /^uni-(checkbox|radio|switch)-/.test(EventTarget.className);
- if (!stopPropagation) {
- stopPropagation = /^uni-(checkbox|radio|switch|button)$|^(svg|path)$/i.test(EventTarget.tagName);
- }
- if (stopPropagation) {
- return;
- }
- if (props2.for) {
- UniViewJSBridge.emit("uni-label-click-" + pageId + "-" + props2.for, $event, true);
- } else {
- handlers.length && handlers[0]($event, true);
- }
- });
- return () => vue.createVNode("uni-label", {
- "ref": rootRef,
- "class": {
- "uni-label-pointer": pointer
- },
- "onClick": _onClick
- }, [slots.default && slots.default()], 10, ["onClick"]);
- }
- });
- const buttonProps = {
- id: {
- type: String,
- default: ""
- },
- hoverClass: {
- type: String,
- default: "button-hover"
- },
- hoverStartTime: {
- type: [Number, String],
- default: 20
- },
- hoverStayTime: {
- type: [Number, String],
- default: 70
- },
- hoverStopPropagation: {
- type: Boolean,
- default: false
- },
- disabled: {
- type: [Boolean, String],
- default: false
- },
- formType: {
- type: String,
- default: ""
- },
- openType: {
- type: String,
- default: ""
- },
- loading: {
- type: [Boolean, String],
- default: false
- },
- plain: {
- type: [Boolean, String],
- default: false
- }
- };
- const index$z = /* @__PURE__ */ defineBuiltInComponent({
- name: "Button",
- props: buttonProps,
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- const uniForm = vue.inject(uniFormKey, false);
- const {
- hovering,
- binding
- } = useHover(props2);
- const onClick = withWebEvent((e2, isLabelClick) => {
- if (props2.disabled) {
- return e2.stopImmediatePropagation();
- }
- if (isLabelClick) {
- rootRef.value.click();
- }
- const formType = props2.formType;
- if (formType) {
- if (!uniForm) {
- return;
- }
- if (formType === "submit") {
- uniForm.submit(e2);
- } else if (formType === "reset") {
- uniForm.reset(e2);
- }
- return;
- }
- });
- const uniLabel = vue.inject(uniLabelKey, false);
- if (uniLabel) {
- uniLabel.addHandler(onClick);
- }
- return () => {
- const hoverClass = props2.hoverClass;
- const booleanAttrs = useBooleanAttr(props2, "disabled");
- const loadingAttrs = useBooleanAttr(props2, "loading");
- const plainAttrs = useBooleanAttr(props2, "plain");
- const hasHoverClass = hoverClass && hoverClass !== "none";
- return vue.createVNode("uni-button", vue.mergeProps({
- "ref": rootRef,
- "onClick": onClick,
- "id": props2.id,
- "class": hasHoverClass && hovering.value ? hoverClass : ""
- }, hasHoverClass && binding, booleanAttrs, loadingAttrs, plainAttrs), [slots.default && slots.default()], 16, ["onClick", "id"]);
- };
- }
- });
- const props$r = {
- disableScroll: {
- type: [Boolean, String],
- default: false
- }
- };
- class UniCanvasElement extends UniElement {
- get width() {
- return this.querySelector("canvas").width;
- }
- set width(value) {
- this.querySelector("canvas").width = value;
- }
- get height() {
- return this.querySelector("canvas").height;
- }
- set height(value) {
- this.querySelector("canvas").height = value;
- }
- getContext(contextId, options) {
- return this.querySelector("canvas").getContext(contextId, options);
- }
- toBlob(...args) {
- const c = this.querySelector("canvas");
- return c.toBlob.apply(c, args);
- }
- toDataURL(type, encoderOptions) {
- return this.querySelector("canvas").toDataURL(type, encoderOptions);
- }
- }
- const indexX$4 = /* @__PURE__ */ defineBuiltInComponent({
- inheritAttrs: true,
- name: "Canvas",
- compatConfig: {
- MODE: 3
- },
- props: props$r,
- rootElement: {
- name: "uni-canvas",
- class: UniCanvasElement
- },
- setup(props2, {}) {
- const rootRef = vue.ref(null);
- const canvas = vue.ref(null);
- return () => {
- return vue.createVNode("uni-canvas", {
- "ref": rootRef
- }, [vue.createVNode("canvas", {
- "ref": canvas,
- "class": "uni-canvas-canvas"
- }, null, 512)], 512);
- };
- }
- });
- const uniCheckGroupKey = PolySymbol(process.env.NODE_ENV !== "production" ? "uniCheckGroup" : "ucg");
- const props$q = {
- name: {
- type: String,
- default: ""
- }
- };
- const index$y = /* @__PURE__ */ defineBuiltInComponent({
- name: "CheckboxGroup",
- props: props$q,
- emits: ["change"],
- setup(props2, {
- emit: emit2,
- slots
- }) {
- const rootRef = vue.ref(null);
- const trigger = useCustomEvent(rootRef, emit2);
- useProvideCheckGroup(props2, trigger);
- return () => {
- return vue.createVNode("uni-checkbox-group", {
- "ref": rootRef
- }, [slots.default && slots.default()], 512);
- };
- }
- });
- function useProvideCheckGroup(props2, trigger) {
- const fields2 = [];
- const getFieldsValue = () => fields2.reduce((res, field) => {
- if (field.value.checkboxChecked) {
- res.push(field.value.value);
- }
- return res;
- }, new Array());
- vue.provide(uniCheckGroupKey, {
- addField(field) {
- fields2.push(field);
- },
- removeField(field) {
- fields2.splice(fields2.indexOf(field), 1);
- },
- checkboxChange($event) {
- trigger("change", $event, {
- value: getFieldsValue()
- });
- }
- });
- const uniForm = vue.inject(uniFormKey, false);
- if (uniForm) {
- uniForm.addField({
- submit: () => {
- let data = ["", null];
- if (props2.name !== "") {
- data[0] = props2.name;
- data[1] = getFieldsValue();
- }
- return data;
- }
- });
- }
- return getFieldsValue;
- }
- const props$p = {
- checked: {
- type: [Boolean, String],
- default: false
- },
- id: {
- type: String,
- default: ""
- },
- disabled: {
- type: [Boolean, String],
- default: false
- },
- value: {
- type: String,
- default: ""
- },
- color: {
- type: String,
- default: "#007aff"
- },
- backgroundColor: {
- type: String,
- default: ""
- },
- borderColor: {
- type: String,
- default: ""
- },
- activeBackgroundColor: {
- type: String,
- default: ""
- },
- activeBorderColor: {
- type: String,
- default: ""
- },
- iconColor: {
- type: String,
- default: ""
- },
- // 图标颜色,同color,优先级大于iconColor
- foreColor: {
- type: String,
- default: ""
- }
- };
- const index$x = /* @__PURE__ */ defineBuiltInComponent({
- name: "Checkbox",
- props: props$p,
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- const checkboxChecked = vue.ref(props2.checked);
- const checkboxCheckedBool = vue.computed(() => {
- return checkboxChecked.value === "true" || checkboxChecked.value === true;
- });
- const checkboxValue = vue.ref(props2.value);
- function getCheckBoxStyle(checked) {
- if (props2.disabled) {
- return {
- backgroundColor: "#E1E1E1",
- borderColor: "#D1D1D1"
- };
- }
- const style = {};
- if (checked) {
- if (props2.activeBorderColor)
- style.borderColor = props2.activeBorderColor;
- if (props2.activeBackgroundColor)
- style.backgroundColor = props2.activeBackgroundColor;
- } else {
- if (props2.borderColor)
- style.borderColor = props2.borderColor;
- if (props2.backgroundColor)
- style.backgroundColor = props2.backgroundColor;
- }
- return style;
- }
- const checkboxStyle = vue.computed(() => {
- return getCheckBoxStyle(checkboxCheckedBool.value);
- });
- vue.watch([() => props2.checked, () => props2.value], ([newChecked, newModelValue]) => {
- checkboxChecked.value = newChecked;
- checkboxValue.value = newModelValue;
- });
- const reset = () => {
- checkboxChecked.value = false;
- };
- const {
- uniCheckGroup,
- uniLabel
- } = useCheckboxInject(checkboxChecked, checkboxValue, reset);
- const _onClick = ($event) => {
- if (props2.disabled) {
- return;
- }
- checkboxChecked.value = !checkboxChecked.value;
- uniCheckGroup && uniCheckGroup.checkboxChange($event);
- $event.stopPropagation();
- };
- if (!!uniLabel) {
- uniLabel.addHandler(_onClick);
- }
- return () => {
- const booleanAttrs = useBooleanAttr(props2, "disabled");
- let realCheckValue;
- realCheckValue = checkboxChecked.value;
- return vue.createVNode("uni-checkbox", vue.mergeProps(booleanAttrs, {
- "id": props2.id,
- "onClick": _onClick,
- "ref": rootRef
- }), [vue.createVNode("div", {
- "class": "uni-checkbox-wrapper",
- "style": {
- "--HOVER-BD-COLOR": props2.activeBorderColor
- }
- }, [vue.createVNode("div", {
- "class": ["uni-checkbox-input", {
- "uni-checkbox-input-disabled": props2.disabled
- }],
- "style": checkboxStyle.value
- }, [realCheckValue ? createSvgIconVNode(ICON_PATH_SUCCESS_NO_CIRCLE, props2.disabled ? "#ADADAD" : props2.foreColor || props2.iconColor || props2.color, 22) : ""], 6), slots.default && slots.default()], 4)], 16, ["id", "onClick"]);
- };
- }
- });
- function useCheckboxInject(checkboxChecked, checkboxValue, reset) {
- const field = vue.computed(() => ({
- checkboxChecked: Boolean(checkboxChecked.value),
- value: checkboxValue.value
- }));
- const formField = {
- reset
- };
- const uniCheckGroup = vue.inject(uniCheckGroupKey, false);
- if (!!uniCheckGroup) {
- uniCheckGroup.addField(field);
- }
- const uniForm = vue.inject(uniFormKey, false);
- if (!!uniForm) {
- uniForm.addField(formField);
- }
- const uniLabel = vue.inject(uniLabelKey, false);
- return {
- uniCheckGroup,
- uniForm,
- uniLabel
- };
- }
- let resetTimer;
- function iosHideKeyboard() {
- }
- const props$o = {
- cursorSpacing: {
- type: [Number, String],
- default: 0
- },
- showConfirmBar: {
- type: [Boolean, String],
- default: "auto"
- },
- adjustPosition: {
- type: [Boolean, String],
- default: true
- },
- autoBlur: {
- type: [Boolean, String],
- default: false
- }
- };
- const emit$1 = ["keyboardheightchange"];
- function useKeyboard$1(props2, elRef, trigger) {
- function initKeyboard(el) {
- const isApple = vue.computed(
- () => String(navigator.vendor).indexOf("Apple") === 0
- );
- el.addEventListener("focus", () => {
- clearTimeout(resetTimer);
- document.addEventListener("click", iosHideKeyboard, false);
- });
- const onKeyboardHide = () => {
- document.removeEventListener("click", iosHideKeyboard, false);
- if (isApple.value) {
- document.documentElement.scrollTo(
- document.documentElement.scrollLeft,
- document.documentElement.scrollTop
- );
- }
- };
- el.addEventListener("blur", () => {
- if (isApple.value) {
- el.blur();
- }
- onKeyboardHide();
- });
- }
- vue.watch(
- () => elRef.value,
- (el) => el && initKeyboard(el)
- );
- }
- function addBase(filePath) {
- const { base: baseUrl } = __uniConfig.router;
- if (uniShared.addLeadingSlash(filePath).indexOf(baseUrl) === 0) {
- return uniShared.addLeadingSlash(filePath);
- }
- return baseUrl + filePath;
- }
- function getRealPath(filePath) {
- const { base, assets } = __uniConfig.router;
- if (base === "./") {
- if (filePath.indexOf("./") === 0 && (filePath.includes("/static/") || filePath.indexOf("./" + (assets || "assets") + "/") === 0)) {
- filePath = filePath.slice(1);
- }
- }
- if (filePath.indexOf("/") === 0) {
- if (filePath.indexOf("//") === 0) {
- filePath = "https:" + filePath;
- } else {
- return addBase(filePath.slice(1));
- }
- }
- if (uniShared.SCHEME_RE.test(filePath) || uniShared.DATA_RE.test(filePath) || filePath.indexOf("blob:") === 0) {
- return filePath;
- }
- {
- if (process.env.NODE_ENV !== "production") {
- if (!filePath.includes("/static/")) {
- return filePath;
- }
- }
- }
- const pages = getCurrentPages();
- if (pages.length) {
- return addBase(
- getRealRoute(pages[pages.length - 1].$page.route, filePath).slice(1)
- );
- }
- return filePath;
- }
- const HTTP_METHODS = [
- "GET",
- "OPTIONS",
- "HEAD",
- "POST",
- "PUT",
- "DELETE",
- "TRACE",
- "CONNECT",
- "PATCH"
- ];
- function elemInArray(str, arr) {
- if (!str || arr.indexOf(str) === -1) {
- return arr[0];
- }
- return str;
- }
- function validateProtocolFail(name, msg) {
- console.warn(`${name}: ${msg}`);
- }
- function validateProtocol(name, data, protocol, onFail) {
- if (!onFail) {
- onFail = validateProtocolFail;
- }
- for (const key in protocol) {
- const errMsg = validateProp(
- key,
- data[key],
- protocol[key],
- !shared.hasOwn(data, key)
- );
- if (shared.isString(errMsg)) {
- onFail(name, errMsg);
- }
- }
- }
- function validateProtocols(name, args, protocol, onFail) {
- if (!protocol) {
- return;
- }
- if (!shared.isArray(protocol)) {
- return validateProtocol(
- name,
- args[0] || /* @__PURE__ */ Object.create(null),
- protocol,
- onFail
- );
- }
- const len = protocol.length;
- const argsLen = args.length;
- for (let i = 0; i < len; i++) {
- const opts = protocol[i];
- const data = /* @__PURE__ */ Object.create(null);
- if (argsLen > i) {
- data[opts.name] = args[i];
- }
- validateProtocol(name, data, { [opts.name]: opts }, onFail);
- }
- }
- function validateProp(name, value, prop, isAbsent) {
- if (!shared.isPlainObject(prop)) {
- prop = { type: prop };
- }
- const { type, required, validator } = prop;
- if (required && isAbsent) {
- return 'Missing required args: "' + name + '"';
- }
- if (value == null && !required) {
- return;
- }
- if (type != null) {
- let isValid = false;
- const types = shared.isArray(type) ? type : [type];
- const expectedTypes = [];
- for (let i = 0; i < types.length && !isValid; i++) {
- const { valid, expectedType } = assertType(value, types[i]);
- expectedTypes.push(expectedType || "");
- isValid = valid;
- }
- if (!isValid) {
- return getInvalidTypeMessage(name, value, expectedTypes);
- }
- }
- if (validator) {
- return validator(value);
- }
- }
- const isSimpleType = /* @__PURE__ */ shared.makeMap(
- "String,Number,Boolean,Function,Symbol"
- );
- function assertType(value, type) {
- let valid;
- const expectedType = getType(type);
- if (isSimpleType(expectedType)) {
- const t2 = typeof value;
- valid = t2 === expectedType.toLowerCase();
- if (!valid && t2 === "object") {
- valid = value instanceof type;
- }
- } else if (expectedType === "Object") {
- valid = shared.isObject(value);
- } else if (expectedType === "Array") {
- valid = shared.isArray(value);
- } else {
- {
- valid = value instanceof type;
- }
- }
- return {
- valid,
- expectedType
- };
- }
- function getInvalidTypeMessage(name, value, expectedTypes) {
- let message = `Invalid args: type check failed for args "${name}". Expected ${expectedTypes.map(shared.capitalize).join(", ")}`;
- const expectedType = expectedTypes[0];
- const receivedType = shared.toRawType(value);
- const expectedValue = styleValue(value, expectedType);
- const receivedValue = styleValue(value, receivedType);
- if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean(expectedType, receivedType)) {
- message += ` with value ${expectedValue}`;
- }
- message += `, got ${receivedType} `;
- if (isExplicable(receivedType)) {
- message += `with value ${receivedValue}.`;
- }
- return message;
- }
- function getType(ctor) {
- const match = ctor && ctor.toString().match(/^\s*function (\w+)/);
- return match ? match[1] : "";
- }
- function styleValue(value, type) {
- if (type === "String") {
- return `"${value}"`;
- } else if (type === "Number") {
- return `${Number(value)}`;
- } else {
- return `${value}`;
- }
- }
- function isExplicable(type) {
- const explicitTypes = ["string", "number", "boolean"];
- return explicitTypes.some((elem) => type.toLowerCase() === elem);
- }
- function isBoolean(...args) {
- return args.some((elem) => elem.toLowerCase() === "boolean");
- }
- function tryCatch(fn) {
- return function() {
- try {
- return fn.apply(fn, arguments);
- } catch (e2) {
- console.error(e2);
- }
- };
- }
- let invokeCallbackId = 1;
- const invokeCallbacks = {};
- function addInvokeCallback(id2, name, callback, keepAlive = false) {
- invokeCallbacks[id2] = {
- name,
- keepAlive,
- callback
- };
- return id2;
- }
- function invokeCallback(id2, res, extras) {
- if (typeof id2 === "number") {
- const opts = invokeCallbacks[id2];
- if (opts) {
- if (!opts.keepAlive) {
- delete invokeCallbacks[id2];
- }
- return opts.callback(res, extras);
- }
- }
- return res;
- }
- const API_SUCCESS = "success";
- const API_FAIL = "fail";
- const API_COMPLETE = "complete";
- function getApiCallbacks(args) {
- const apiCallbacks = {};
- for (const name in args) {
- const fn = args[name];
- if (shared.isFunction(fn)) {
- apiCallbacks[name] = tryCatch(fn);
- delete args[name];
- }
- }
- return apiCallbacks;
- }
- function normalizeErrMsg(errMsg, name) {
- if (!errMsg || errMsg.indexOf(":fail") === -1) {
- return name + ":ok";
- }
- return name + errMsg.substring(errMsg.indexOf(":fail"));
- }
- function createAsyncApiCallback(name, args = {}, { beforeAll, beforeSuccess } = {}) {
- if (!shared.isPlainObject(args)) {
- args = {};
- }
- const { success, fail, complete } = getApiCallbacks(args);
- const hasSuccess = shared.isFunction(success);
- const hasFail = shared.isFunction(fail);
- const hasComplete = shared.isFunction(complete);
- const callbackId = invokeCallbackId++;
- addInvokeCallback(callbackId, name, (res) => {
- res = res || {};
- res.errMsg = normalizeErrMsg(res.errMsg, name);
- shared.isFunction(beforeAll) && beforeAll(res);
- if (res.errMsg === name + ":ok") {
- shared.isFunction(beforeSuccess) && beforeSuccess(res, args);
- hasSuccess && success(res);
- } else {
- hasFail && fail(res);
- }
- hasComplete && complete(res);
- });
- return callbackId;
- }
- const HOOK_SUCCESS = "success";
- const HOOK_FAIL = "fail";
- const HOOK_COMPLETE = "complete";
- const globalInterceptors = {};
- const scopedInterceptors = {};
- function wrapperHook(hook, params) {
- return function(data) {
- return hook(data, params) || data;
- };
- }
- function queue(hooks, data, params) {
- let promise = false;
- for (let i = 0; i < hooks.length; i++) {
- const hook = hooks[i];
- if (promise) {
- promise = Promise.resolve(wrapperHook(hook, params));
- } else {
- const res = hook(data, params);
- if (shared.isPromise(res)) {
- promise = Promise.resolve(res);
- }
- if (res === false) {
- return {
- then() {
- },
- catch() {
- }
- };
- }
- }
- }
- return promise || {
- then(callback) {
- return callback(data);
- },
- catch() {
- }
- };
- }
- function wrapperOptions(interceptors, options = {}) {
- [HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => {
- const hooks = interceptors[name];
- if (!shared.isArray(hooks)) {
- return;
- }
- const oldCallback = options[name];
- options[name] = function callbackInterceptor(res) {
- queue(hooks, res, options).then((res2) => {
- return shared.isFunction(oldCallback) && oldCallback(res2) || res2;
- });
- };
- });
- return options;
- }
- function wrapperReturnValue(method, returnValue) {
- const returnValueHooks = [];
- if (shared.isArray(globalInterceptors.returnValue)) {
- returnValueHooks.push(...globalInterceptors.returnValue);
- }
- const interceptor = scopedInterceptors[method];
- if (interceptor && shared.isArray(interceptor.returnValue)) {
- returnValueHooks.push(...interceptor.returnValue);
- }
- returnValueHooks.forEach((hook) => {
- returnValue = hook(returnValue) || returnValue;
- });
- return returnValue;
- }
- function getApiInterceptorHooks(method) {
- const interceptor = /* @__PURE__ */ Object.create(null);
- Object.keys(globalInterceptors).forEach((hook) => {
- if (hook !== "returnValue") {
- interceptor[hook] = globalInterceptors[hook].slice();
- }
- });
- const scopedInterceptor = scopedInterceptors[method];
- if (scopedInterceptor) {
- Object.keys(scopedInterceptor).forEach((hook) => {
- if (hook !== "returnValue") {
- interceptor[hook] = (interceptor[hook] || []).concat(
- scopedInterceptor[hook]
- );
- }
- });
- }
- return interceptor;
- }
- function invokeApi(method, api2, options, params) {
- const interceptor = getApiInterceptorHooks(method);
- if (interceptor && Object.keys(interceptor).length) {
- if (shared.isArray(interceptor.invoke)) {
- const res = queue(interceptor.invoke, options);
- return res.then((options2) => {
- return api2(
- wrapperOptions(getApiInterceptorHooks(method), options2),
- ...params
- );
- });
- } else {
- return api2(wrapperOptions(interceptor, options), ...params);
- }
- }
- return api2(options, ...params);
- }
- function hasCallback(args) {
- if (shared.isPlainObject(args) && [API_SUCCESS, API_FAIL, API_COMPLETE].find(
- (cb) => shared.isFunction(args[cb])
- )) {
- return true;
- }
- return false;
- }
- function handlePromise(promise) {
- return promise;
- }
- function promisify(name, fn) {
- return (args = {}, ...rest) => {
- if (hasCallback(args)) {
- return wrapperReturnValue(name, invokeApi(name, fn, args, rest));
- }
- return wrapperReturnValue(
- name,
- handlePromise(
- new Promise((resolve, reject) => {
- invokeApi(
- name,
- fn,
- shared.extend(args, { success: resolve, fail: reject }),
- rest
- );
- })
- )
- );
- };
- }
- function formatApiArgs(args, options) {
- const params = args[0];
- if (!options || !options.formatArgs || !shared.isPlainObject(options.formatArgs) && shared.isPlainObject(params)) {
- return;
- }
- const formatArgs = options.formatArgs;
- const keys = Object.keys(formatArgs);
- for (let i = 0; i < keys.length; i++) {
- const name = keys[i];
- const formatterOrDefaultValue = formatArgs[name];
- if (shared.isFunction(formatterOrDefaultValue)) {
- const errMsg = formatterOrDefaultValue(args[0][name], params);
- if (shared.isString(errMsg)) {
- return errMsg;
- }
- } else {
- if (!shared.hasOwn(params, name)) {
- params[name] = formatterOrDefaultValue;
- }
- }
- }
- }
- function invokeSuccess(id2, name, res) {
- const result = {
- errMsg: name + ":ok"
- };
- result.errSubject = name;
- return invokeCallback(id2, shared.extend(res || {}, result));
- }
- function invokeFail(id2, name, errMsg, errRes = {}) {
- const apiErrMsg = name + ":fail" + (errMsg ? " " + errMsg : "");
- let res = shared.extend({ errMsg: apiErrMsg }, errRes);
- if (typeof UniError !== "undefined") {
- res = typeof errRes.errCode !== "undefined" ? new UniError(name, errRes.errCode, apiErrMsg) : new UniError(apiErrMsg, errRes);
- }
- return invokeCallback(id2, res);
- }
- function beforeInvokeApi(name, args, protocol, options) {
- if (process.env.NODE_ENV !== "production") {
- validateProtocols(name, args, protocol);
- }
- if (options && options.beforeInvoke) {
- const errMsg2 = options.beforeInvoke(args);
- if (shared.isString(errMsg2)) {
- return errMsg2;
- }
- }
- const errMsg = formatApiArgs(args, options);
- if (errMsg) {
- return errMsg;
- }
- }
- function parseErrMsg(errMsg) {
- if (!errMsg || shared.isString(errMsg)) {
- return errMsg;
- }
- if (errMsg.stack) {
- console.error(errMsg.message + "\n" + errMsg.stack);
- return errMsg.message;
- }
- return errMsg;
- }
- function wrapperTaskApi(name, fn, protocol, options) {
- return (args) => {
- const id2 = createAsyncApiCallback(name, args, options);
- const errMsg = beforeInvokeApi(name, [args], protocol, options);
- if (errMsg) {
- return invokeFail(id2, name, errMsg);
- }
- return fn(args, {
- resolve: (res) => invokeSuccess(id2, name, res),
- reject: (errMsg2, errRes) => invokeFail(id2, name, parseErrMsg(errMsg2), errRes)
- });
- };
- }
- function wrapperSyncApi(name, fn, protocol, options) {
- return (...args) => {
- const errMsg = beforeInvokeApi(name, args, protocol, options);
- if (errMsg) {
- throw new Error(errMsg);
- }
- return fn.apply(null, args);
- };
- }
- function wrapperAsyncApi(name, fn, protocol, options) {
- return wrapperTaskApi(name, fn, protocol, options);
- }
- function defineTaskApi(name, fn, protocol, options) {
- return promisify(
- name,
- wrapperTaskApi(name, fn, process.env.NODE_ENV !== "production" ? protocol : void 0, options)
- );
- }
- function defineSyncApi(name, fn, protocol, options) {
- return wrapperSyncApi(
- name,
- fn,
- process.env.NODE_ENV !== "production" ? protocol : void 0,
- options
- );
- }
- function defineAsyncApi(name, fn, protocol, options) {
- return promisify(
- name,
- wrapperAsyncApi(name, fn, process.env.NODE_ENV !== "production" ? protocol : void 0, options)
- );
- }
- const API_ON_TAB_BAR_MID_BUTTON_TAP = "onTabBarMidButtonTap";
- const API_GET_LOCALE = "getLocale";
- const getLocale = /* @__PURE__ */ defineSyncApi(
- API_GET_LOCALE,
- () => {
- const app = getApp({ allowDefault: true });
- if (app && app.$vm) {
- return app.$vm.$locale;
- }
- return useI18n().getLocale();
- }
- );
- const API_GET_STORAGE = "getStorage";
- const GetStorageProtocol = {
- key: {
- type: String,
- required: true
- }
- };
- const API_GET_STORAGE_SYNC = "getStorageSync";
- const GetStorageSyncProtocol = [
- {
- name: "key",
- type: String,
- required: true
- }
- ];
- const API_SET_STORAGE = "setStorage";
- const SetStorageProtocol = {
- key: {
- type: String,
- required: true
- },
- data: {
- required: true
- }
- };
- const API_SET_STORAGE_SYNC = "setStorageSync";
- const SetStorageSyncProtocol = [
- {
- name: "key",
- type: String,
- required: true
- },
- {
- name: "data",
- required: true
- }
- ];
- const API_REMOVE_STORAGE = "removeStorage";
- const RemoveStorageProtocol = GetStorageProtocol;
- const RemoveStorageSyncProtocol = GetStorageSyncProtocol;
- const API_REQUEST = "request";
- const dataType = {
- JSON: "json"
- };
- const RESPONSE_TYPE = ["text", "arraybuffer"];
- const DEFAULT_RESPONSE_TYPE = "text";
- const encode = encodeURIComponent;
- function stringifyQuery(url, data) {
- let str = url.split("#");
- const hash = str[1] || "";
- str = str[0].split("?");
- let query = str[1] || "";
- url = str[0];
- const search = query.split("&").filter((item) => item);
- const params = {};
- search.forEach((item) => {
- const part = item.split("=");
- params[part[0]] = part[1];
- });
- for (const key in data) {
- if (shared.hasOwn(data, key)) {
- let v2 = data[key];
- if (typeof v2 === "undefined" || v2 === null) {
- v2 = "";
- } else if (shared.isPlainObject(v2)) {
- v2 = JSON.stringify(v2);
- }
- params[encode(key)] = encode(v2);
- }
- }
- query = Object.keys(params).map((item) => `${item}=${params[item]}`).join("&");
- return url + (query ? "?" + query : "") + (hash ? "#" + hash : "");
- }
- const RequestProtocol = {
- method: String,
- data: [Object, String, Array, ArrayBuffer],
- url: {
- type: String,
- required: true
- },
- header: Object,
- dataType: String,
- responseType: String,
- withCredentials: Boolean
- };
- const RequestOptions = {
- formatArgs: {
- method(value, params) {
- params.method = elemInArray(
- (value || "").toUpperCase(),
- HTTP_METHODS
- );
- },
- data(value, params) {
- params.data = value || "";
- },
- url(value, params) {
- if (params.method === HTTP_METHODS[0] && shared.isPlainObject(params.data) && Object.keys(params.data).length) {
- params.url = stringifyQuery(value, params.data);
- }
- },
- header(value, params) {
- const header = params.header = value || {};
- if (params.method !== HTTP_METHODS[0]) {
- if (!Object.keys(header).find(
- (key) => key.toLowerCase() === "content-type"
- )) {
- header["Content-Type"] = "application/json";
- }
- }
- },
- dataType(value, params) {
- params.dataType = (value || dataType.JSON).toLowerCase();
- },
- responseType(value, params) {
- params.responseType = (value || "").toLowerCase();
- if (RESPONSE_TYPE.indexOf(params.responseType) === -1) {
- params.responseType = DEFAULT_RESPONSE_TYPE;
- }
- }
- }
- };
- const API_SET_NAVIGATION_BAR_COLOR = "setNavigationBarColor";
- const API_SET_NAVIGATION_BAR_TITLE = "setNavigationBarTitle";
- const SetNavigationBarTitleProtocol = {
- title: {
- type: String,
- required: true
- }
- };
- const API_SHOW_NAVIGATION_BAR_LOADING = "showNavigationBarLoading";
- const API_HIDE_NAVIGATION_BAR_LOADING = "hideNavigationBarLoading";
- var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
- var endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
- var attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
- var empty = /* @__PURE__ */ makeMap(
- "area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr"
- );
- var block = /* @__PURE__ */ makeMap(
- "a,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video"
- );
- var inline = /* @__PURE__ */ makeMap(
- "abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"
- );
- var closeSelf = /* @__PURE__ */ makeMap(
- "colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"
- );
- var fillAttrs = /* @__PURE__ */ makeMap(
- "checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"
- );
- var special = /* @__PURE__ */ makeMap("script,style");
- function HTMLParser(html, handler) {
- var index2;
- var chars;
- var match;
- var stack = [];
- var last = html;
- stack.last = function() {
- return this[this.length - 1];
- };
- while (html) {
- chars = true;
- if (!stack.last() || !special[stack.last()]) {
- if (html.indexOf("<!--") == 0) {
- index2 = html.indexOf("-->");
- if (index2 >= 0) {
- if (handler.comment) {
- handler.comment(html.substring(4, index2));
- }
- html = html.substring(index2 + 3);
- chars = false;
- }
- } else if (html.indexOf("</") == 0) {
- match = html.match(endTag);
- if (match) {
- html = html.substring(match[0].length);
- match[0].replace(endTag, parseEndTag);
- chars = false;
- }
- } else if (html.indexOf("<") == 0) {
- match = html.match(startTag);
- if (match) {
- html = html.substring(match[0].length);
- match[0].replace(startTag, parseStartTag);
- chars = false;
- }
- }
- if (chars) {
- index2 = html.indexOf("<");
- var text = index2 < 0 ? html : html.substring(0, index2);
- html = index2 < 0 ? "" : html.substring(index2);
- if (handler.chars) {
- handler.chars(text);
- }
- }
- } else {
- html = html.replace(
- new RegExp("([\\s\\S]*?)</" + stack.last() + "[^>]*>"),
- function(all, text2) {
- text2 = text2.replace(
- /<!--([\s\S]*?)-->|<!\[CDATA\[([\s\S]*?)]]>/g,
- "$1$2"
- );
- if (handler.chars) {
- handler.chars(text2);
- }
- return "";
- }
- );
- parseEndTag("", stack.last());
- }
- if (html == last) {
- throw "Parse Error: " + html;
- }
- last = html;
- }
- parseEndTag();
- function parseStartTag(tag, tagName, rest, unary) {
- tagName = tagName.toLowerCase();
- if (block[tagName]) {
- while (stack.last() && inline[stack.last()]) {
- parseEndTag("", stack.last());
- }
- }
- if (closeSelf[tagName] && stack.last() == tagName) {
- parseEndTag("", tagName);
- }
- unary = empty[tagName] || !!unary;
- if (!unary) {
- stack.push(tagName);
- }
- if (handler.start) {
- var attrs = [];
- rest.replace(attr, function(match2, name) {
- var value = arguments[2] ? arguments[2] : arguments[3] ? arguments[3] : arguments[4] ? arguments[4] : fillAttrs[name] ? name : "";
- attrs.push({
- name,
- value,
- escaped: value.replace(/(^|[^\\])"/g, '$1\\"')
- // "
- });
- });
- if (handler.start) {
- handler.start(tagName, attrs, unary);
- }
- }
- }
- function parseEndTag(tag, tagName) {
- if (!tagName) {
- var pos = 0;
- } else {
- for (var pos = stack.length - 1; pos >= 0; pos--) {
- if (stack[pos] == tagName) {
- break;
- }
- }
- }
- if (pos >= 0) {
- for (var i = stack.length - 1; i >= pos; i--) {
- if (handler.end) {
- handler.end(stack[i]);
- }
- }
- stack.length = pos;
- }
- }
- }
- function makeMap(str) {
- var obj = {};
- var items = str.split(",");
- for (var i = 0; i < items.length; i++) {
- obj[items[i]] = true;
- }
- return obj;
- }
- function useQuill(props2, rootRef, trigger) {
- vue.watch(
- () => props2.readOnly,
- (value) => {
- }
- );
- vue.watch(
- () => props2.placeholder,
- (value) => {
- }
- );
- useContextInfo();
- useSubscribe();
- }
- const props$n = /* @__PURE__ */ shared.extend({}, props$o, {
- id: {
- type: String,
- default: ""
- },
- readOnly: {
- type: [Boolean, String],
- default: false
- },
- placeholder: {
- type: String,
- default: ""
- },
- showImgSize: {
- type: [Boolean, String],
- default: false
- },
- showImgToolbar: {
- type: [Boolean, String],
- default: false
- },
- showImgResize: {
- type: [Boolean, String],
- default: false
- }
- });
- const index$w = /* @__PURE__ */ defineBuiltInComponent({
- name: "Editor",
- props: props$n,
- emit: ["ready", "focus", "blur", "input", "statuschange", ...emit$1],
- setup(props2, {
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- useQuill(props2);
- useKeyboard$1(props2, rootRef);
- return () => {
- return vue.createVNode("uni-editor", {
- "ref": rootRef,
- "id": props2.id,
- "class": "ql-container"
- }, null, 8, ["id"]);
- };
- }
- });
- const INFO_COLOR = "#10aeff";
- const WARN_COLOR = "#f76260";
- const GREY_COLOR = "#b2b2b2";
- const CANCEL_COLOR = "#f43530";
- const ICONS = {
- success: {
- d: ICON_PATH_SUCCESS,
- c: uniShared.PRIMARY_COLOR
- },
- success_no_circle: {
- d: ICON_PATH_SUCCESS_NO_CIRCLE,
- c: uniShared.PRIMARY_COLOR
- },
- info: {
- d: ICON_PATH_INFO,
- c: INFO_COLOR
- },
- warn: {
- d: ICON_PATH_WARN,
- c: WARN_COLOR
- },
- waiting: {
- d: ICON_PATH_WAITING,
- c: INFO_COLOR
- },
- cancel: {
- d: ICON_PATH_CANCEL,
- c: CANCEL_COLOR
- },
- download: {
- d: ICON_PATH_DOWNLOAD,
- c: uniShared.PRIMARY_COLOR
- },
- search: {
- d: ICON_PATH_SEARCH,
- c: GREY_COLOR
- },
- clear: {
- d: ICON_PATH_CLEAR,
- c: GREY_COLOR
- }
- };
- const index$v = /* @__PURE__ */ defineBuiltInComponent({
- name: "Icon",
- props: {
- type: {
- type: String,
- required: true,
- default: ""
- },
- size: {
- type: [String, Number],
- default: 23
- },
- color: {
- type: String,
- default: ""
- }
- },
- setup(props2) {
- const rootRef = vue.ref(null);
- const path = vue.computed(() => ICONS[props2.type]);
- return () => {
- const {
- value
- } = path;
- return vue.createVNode("uni-icon", {
- "ref": rootRef
- }, [value && value.d && createSvgIconVNode(value.d, props2.color || value.c, rpx2px(props2.size))], 512);
- };
- }
- });
- const ResizeSensor = /* @__PURE__ */ defineBuiltInComponent({
- name: "ResizeSensor",
- props: {
- initial: {
- type: Boolean,
- default: false
- }
- },
- emits: ["resize"],
- setup(props2, {
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- const reset = useResizeSensorReset(rootRef);
- const update = useResizeSensorUpdate(rootRef, emit2, reset);
- return () => vue.createVNode("uni-resize-sensor", {
- "ref": rootRef,
- "onAnimationstartOnce": update
- }, [vue.createVNode("div", {
- "onScroll": update
- }, [vue.createVNode("div", null, null)], 40, ["onScroll"]), vue.createVNode("div", {
- "onScroll": update
- }, [vue.createVNode("div", null, null)], 40, ["onScroll"])], 40, ["onAnimationstartOnce"]);
- }
- });
- function useResizeSensorUpdate(rootRef, emit2, reset) {
- const size = vue.reactive({
- width: -1,
- height: -1
- });
- vue.watch(() => shared.extend({}, size), (value) => emit2("resize", value));
- return () => {
- const rootEl = rootRef.value;
- if (!rootEl)
- return;
- size.width = rootEl.offsetWidth;
- size.height = rootEl.offsetHeight;
- reset();
- };
- }
- function useResizeSensorReset(rootRef) {
- return () => {
- const {
- firstElementChild,
- lastElementChild
- } = rootRef.value;
- firstElementChild.scrollLeft = 1e5;
- firstElementChild.scrollTop = 1e5;
- lastElementChild.scrollLeft = 1e5;
- lastElementChild.scrollTop = 1e5;
- };
- }
- const props$m = {
- src: {
- type: String,
- default: ""
- },
- mode: {
- type: String,
- default: "scaleToFill"
- },
- lazyLoad: {
- type: [Boolean, String],
- default: false
- },
- draggable: {
- type: Boolean,
- default: false
- }
- };
- const FIX_MODES = {
- widthFix: ["offsetWidth", "height", (value, ratio) => value / ratio],
- heightFix: ["offsetHeight", "width", (value, ratio) => value * ratio]
- };
- const IMAGE_MODES = {
- aspectFit: ["center center", "contain"],
- aspectFill: ["center center", "cover"],
- widthFix: [, "100% 100%"],
- heightFix: [, "100% 100%"],
- top: ["center top"],
- bottom: ["center bottom"],
- center: ["center center"],
- left: ["left center"],
- right: ["right center"],
- "top left": ["left top"],
- "top right": ["right top"],
- "bottom left": ["left bottom"],
- "bottom right": ["right bottom"]
- };
- const index$u = /* @__PURE__ */ defineBuiltInComponent({
- name: "Image",
- props: props$m,
- setup(props2, {
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- const state = useImageState(rootRef, props2);
- const trigger = useCustomEvent(rootRef, emit2);
- const {
- fixSize
- } = useImageSize(rootRef, props2, state);
- useImageLoader(state, props2, rootRef, fixSize, trigger);
- return () => {
- return vue.createVNode("uni-image", {
- "ref": rootRef
- }, [vue.createVNode("div", {
- "style": state.modeStyle
- }, null, 4), FIX_MODES[props2.mode] ? vue.createVNode(ResizeSensor, {
- "onResize": fixSize
- }, null, 8, ["onResize"]) : vue.createVNode("span", null, null)], 512);
- };
- }
- });
- function useImageState(rootRef, props2) {
- const imgSrc = vue.ref("");
- const modeStyleRef = vue.computed(() => {
- let size = "auto";
- let position = "";
- const opts = IMAGE_MODES[props2.mode];
- if (!opts) {
- position = "0% 0%";
- size = "100% 100%";
- } else {
- opts[0] && (position = opts[0]);
- opts[1] && (size = opts[1]);
- }
- return `background-image:${imgSrc.value ? 'url("' + imgSrc.value + '")' : "none"};background-position:${position};background-size:${size};`;
- });
- const state = vue.reactive({
- rootEl: rootRef,
- src: vue.computed(() => props2.src ? getRealPath(props2.src) : ""),
- origWidth: 0,
- origHeight: 0,
- origStyle: {
- width: "",
- height: ""
- },
- modeStyle: modeStyleRef,
- imgSrc
- });
- return state;
- }
- function useImageLoader(state, props2, rootRef, fixSize, trigger) {
- let img;
- let draggableImg;
- const setState = (width = 0, height = 0, imgSrc = "") => {
- state.origWidth = width;
- state.origHeight = height;
- state.imgSrc = imgSrc;
- };
- const loadImage = (src) => {
- if (!src) {
- resetImage();
- setState();
- return;
- }
- img = img || new Image();
- img.onload = (evt) => {
- const {
- width,
- height
- } = img;
- setState(width, height, src);
- vue.nextTick(() => {
- fixSize();
- });
- img.draggable = props2.draggable;
- if (draggableImg) {
- draggableImg.remove();
- }
- draggableImg = img;
- rootRef.value.appendChild(img);
- resetImage();
- trigger("load", evt, {
- width,
- height
- });
- };
- img.onerror = (evt) => {
- setState();
- resetImage();
- trigger("error", evt, {
- errMsg: `GET ${state.src} 404 (Not Found)`
- });
- };
- img.src = src;
- };
- const resetImage = () => {
- if (img) {
- img.onload = null;
- img.onerror = null;
- img = null;
- }
- };
- vue.watch(() => state.src, (value) => loadImage(value));
- vue.watch(() => state.imgSrc, (value) => {
- if (!value && draggableImg) {
- draggableImg.remove();
- draggableImg = null;
- }
- });
- }
- function fixNumber(num) {
- return num;
- }
- function useImageSize(rootRef, props2, state) {
- const fixSize = () => {
- const {
- mode: mode2
- } = props2;
- const names = FIX_MODES[mode2];
- if (!names) {
- return;
- }
- const {
- origWidth,
- origHeight
- } = state;
- const ratio = origWidth && origHeight ? origWidth / origHeight : 0;
- if (!ratio) {
- return;
- }
- const rootEl = rootRef.value;
- const value = rootEl[names[0]];
- if (value) {
- rootEl.style[names[1]] = fixNumber(names[2](value, ratio)) + "px";
- }
- };
- const resetSize = () => {
- const {
- style
- } = rootRef.value;
- const {
- origStyle: {
- width,
- height
- }
- } = state;
- style.width = width;
- style.height = height;
- };
- vue.watch(() => props2.mode, (value, oldValue) => {
- if (FIX_MODES[oldValue]) {
- resetSize();
- }
- if (FIX_MODES[value]) {
- fixSize();
- }
- });
- return {
- fixSize,
- resetSize
- };
- }
- function throttle(fn, wait) {
- let last = 0;
- let timeout;
- let waitCallback;
- const newFn = function(...arg) {
- const now = Date.now();
- clearTimeout(timeout);
- waitCallback = () => {
- waitCallback = null;
- last = now;
- fn.apply(this, arg);
- };
- if (now - last < wait) {
- timeout = setTimeout(waitCallback, wait - (now - last));
- return;
- }
- waitCallback();
- };
- newFn.cancel = function() {
- clearTimeout(timeout);
- waitCallback = null;
- };
- newFn.flush = function() {
- clearTimeout(timeout);
- waitCallback && waitCallback();
- };
- return newFn;
- }
- function useUserAction() {
- const state = vue.reactive({
- /**
- * 是否用户激活
- */
- userAction: false
- });
- return {
- state
- };
- }
- function useScopedAttrs() {
- const state = vue.reactive({
- attrs: {}
- });
- return {
- state
- };
- }
- function useFormField(nameKey, value) {
- const uniForm = vue.inject(
- uniFormKey,
- false
- // remove warning
- );
- if (!uniForm) {
- return;
- }
- const instance = vue.getCurrentInstance();
- const ctx = {
- submit() {
- const proxy = instance.proxy;
- return [
- proxy[nameKey],
- shared.isString(value) ? proxy[value] : value.value
- ];
- },
- reset() {
- if (shared.isString(value)) {
- instance.proxy[value] = "";
- } else {
- value.value = "";
- }
- }
- };
- uniForm.addField(ctx);
- }
- function getSelectedTextRange(_, resolve) {
- const activeElement = document.activeElement;
- if (!activeElement) {
- return resolve({});
- }
- const data = {};
- if (["input", "textarea"].includes(activeElement.tagName.toLowerCase())) {
- data.start = activeElement.selectionStart;
- data.end = activeElement.selectionEnd;
- }
- resolve(data);
- }
- const UniViewJSBridgeSubscribe = function() {
- registerViewMethod(
- getCurrentPageId(),
- "getSelectedTextRange",
- getSelectedTextRange
- );
- };
- function getValueString(value, type, maxlength) {
- if (type === "number" && isNaN(Number(value))) {
- value = "";
- }
- const valueStr = value === null || value === void 0 ? "" : String(value);
- if (maxlength == void 0) {
- return valueStr;
- }
- return valueStr.slice(0, maxlength);
- }
- const INPUT_MODES = [
- "none",
- "text",
- "decimal",
- "numeric",
- "tel",
- "search",
- "email",
- "url"
- ];
- const props$l = /* @__PURE__ */ shared.extend(
- {},
- {
- name: {
- type: String,
- default: ""
- },
- modelValue: {
- type: [String, Number]
- },
- value: {
- type: [String, Number]
- },
- disabled: {
- type: [Boolean, String],
- default: false
- },
- /**
- * 已废弃属性,用于历史兼容
- */
- autoFocus: {
- type: [Boolean, String],
- default: false
- },
- focus: {
- type: [Boolean, String],
- default: false
- },
- cursor: {
- type: [Number, String],
- default: -1
- },
- selectionStart: {
- type: [Number, String],
- default: -1
- },
- selectionEnd: {
- type: [Number, String],
- default: -1
- },
- type: {
- type: String,
- default: "text"
- },
- password: {
- type: [Boolean, String],
- default: false
- },
- placeholder: {
- type: String,
- default: ""
- },
- placeholderStyle: {
- type: String,
- default: ""
- },
- placeholderClass: {
- type: String,
- default: ""
- },
- maxlength: {
- type: [Number, String],
- default: Infinity
- },
- confirmType: {
- type: String,
- default: "done"
- },
- confirmHold: {
- type: Boolean,
- default: false
- },
- ignoreCompositionEvent: {
- type: Boolean,
- default: true
- },
- step: {
- type: String,
- default: "0.000000000000000001"
- },
- inputmode: {
- type: String,
- default: void 0,
- validator: (value) => !!~INPUT_MODES.indexOf(value)
- },
- cursorColor: {
- type: String,
- default: ""
- }
- },
- props$o
- );
- const emit = [
- "input",
- "focus",
- "blur",
- "update:value",
- "update:modelValue",
- "update:focus",
- "compositionstart",
- "compositionupdate",
- "compositionend",
- ...emit$1
- ];
- function useBase(props2, rootRef, emit2) {
- const fieldRef = vue.ref(null);
- const trigger = useCustomEvent(rootRef, emit2);
- const selectionStart = vue.computed(() => {
- const selectionStart2 = Number(props2.selectionStart);
- return isNaN(selectionStart2) ? -1 : selectionStart2;
- });
- const selectionEnd = vue.computed(() => {
- const selectionEnd2 = Number(props2.selectionEnd);
- return isNaN(selectionEnd2) ? -1 : selectionEnd2;
- });
- const cursor = vue.computed(() => {
- const cursor2 = Number(props2.cursor);
- return isNaN(cursor2) ? -1 : cursor2;
- });
- const maxlength = vue.computed(() => {
- var maxlength2 = Number(props2.maxlength);
- {
- return isNaN(maxlength2) || maxlength2 < 0 ? Infinity : Math.floor(maxlength2);
- }
- });
- let value = "";
- {
- const modelValueString = getValueString(
- props2.modelValue,
- props2.type,
- maxlength.value
- );
- const valueString = getValueString(props2.value, props2.type, maxlength.value);
- value = props2.modelValue !== void 0 ? modelValueString !== null && modelValueString !== void 0 ? modelValueString : valueString : valueString;
- }
- const state = vue.reactive({
- value,
- valueOrigin: value,
- maxlength,
- focus: props2.focus,
- composing: false,
- selectionStart,
- selectionEnd,
- cursor
- });
- vue.watch(
- () => state.focus,
- (val) => emit2("update:focus", val)
- );
- vue.watch(
- () => state.maxlength,
- (val) => state.value = state.value.slice(0, val),
- {
- immediate: true
- }
- );
- return {
- fieldRef,
- state,
- trigger
- };
- }
- function useValueSync(props2, state, emit2, trigger) {
- let valueChangeFn = null;
- {
- valueChangeFn = throttle((val) => {
- state.value = getValueString(val, props2.type, state.maxlength);
- }, 100);
- }
- vue.watch(() => props2.modelValue, valueChangeFn);
- vue.watch(() => props2.value, valueChangeFn);
- const triggerInputFn = throttle((event, detail) => {
- valueChangeFn.cancel();
- emit2("update:modelValue", detail.value);
- emit2("update:value", detail.value);
- trigger("input", event, detail);
- }, 100);
- const triggerInput = (event, detail, force) => {
- valueChangeFn.cancel();
- triggerInputFn(event, detail);
- if (force) {
- triggerInputFn.flush();
- }
- };
- return {
- trigger,
- triggerInput
- };
- }
- function useAutoFocus(props2, fieldRef) {
- useUserAction();
- const needFocus = vue.computed(() => props2.autoFocus || props2.focus);
- function focus() {
- if (!needFocus.value) {
- return;
- }
- const field = fieldRef.value;
- if (!field || false) {
- setTimeout(focus, 100);
- return;
- }
- {
- field.focus();
- }
- }
- function blur() {
- const field = fieldRef.value;
- if (field) {
- field.blur();
- }
- }
- vue.watch(
- () => props2.focus,
- (value) => {
- if (value) {
- focus();
- } else {
- blur();
- }
- }
- );
- }
- function useEvent(fieldRef, state, props2, trigger, triggerInput, beforeInput) {
- function checkSelection() {
- const field = fieldRef.value;
- if (field && state.focus && state.selectionStart > -1 && state.selectionEnd > -1 && field.type !== "number") {
- field.selectionStart = state.selectionStart;
- field.selectionEnd = state.selectionEnd;
- }
- }
- function checkCursor() {
- const field = fieldRef.value;
- if (field && state.focus && state.selectionStart < 0 && state.selectionEnd < 0 && state.cursor > -1 && field.type !== "number") {
- field.selectionEnd = field.selectionStart = state.cursor;
- }
- }
- function getFieldSelectionEnd(field) {
- if (field.type === "number") {
- return null;
- } else {
- return field.selectionEnd;
- }
- }
- function initField() {
- const field = fieldRef.value;
- if (!field)
- return;
- const onFocus = function(event) {
- state.focus = true;
- trigger("focus", event, {
- value: state.value
- });
- checkSelection();
- checkCursor();
- };
- const onInput = function(event, force) {
- event.stopPropagation();
- if (shared.isFunction(beforeInput) && beforeInput(event, state) === false) {
- return;
- }
- state.value = field.value;
- if (!state.composing || !props2.ignoreCompositionEvent) {
- triggerInput(
- event,
- {
- value: field.value,
- cursor: getFieldSelectionEnd(field)
- },
- force
- );
- }
- };
- const onBlur = function(event) {
- if (state.composing) {
- state.composing = false;
- onInput(event, true);
- }
- state.focus = false;
- trigger("blur", event, {
- value: state.value,
- cursor: getFieldSelectionEnd(event.target)
- });
- };
- field.addEventListener("change", (event) => event.stopPropagation());
- field.addEventListener("focus", onFocus);
- field.addEventListener("blur", onBlur);
- field.addEventListener("input", onInput);
- field.addEventListener("compositionstart", (event) => {
- event.stopPropagation();
- state.composing = true;
- _onComposition(event);
- });
- field.addEventListener("compositionend", (event) => {
- event.stopPropagation();
- if (state.composing) {
- state.composing = false;
- onInput(event);
- }
- _onComposition(event);
- });
- field.addEventListener("compositionupdate", _onComposition);
- function _onComposition(event) {
- if (!props2.ignoreCompositionEvent) {
- trigger(event.type, event, {
- value: event.data
- });
- }
- }
- }
- vue.watch([() => state.selectionStart, () => state.selectionEnd], checkSelection);
- vue.watch(() => state.cursor, checkCursor);
- vue.watch(() => fieldRef.value, initField);
- }
- function useField(props2, rootRef, emit2, beforeInput) {
- UniViewJSBridgeSubscribe();
- const { fieldRef, state, trigger } = useBase(props2, rootRef, emit2);
- const { triggerInput } = useValueSync(props2, state, emit2, trigger);
- useAutoFocus(props2, fieldRef);
- useKeyboard$1(props2, fieldRef);
- const { state: scopedAttrsState } = useScopedAttrs();
- useFormField("name", state);
- useEvent(fieldRef, state, props2, trigger, triggerInput, beforeInput);
- const fixDisabledColor = false;
- return {
- fieldRef,
- state,
- scopedAttrsState,
- fixDisabledColor,
- trigger
- };
- }
- const props$k = /* @__PURE__ */ shared.extend({}, props$l, {
- placeholderClass: {
- type: String,
- default: "input-placeholder"
- },
- textContentType: {
- type: String,
- default: ""
- }
- });
- function resolveDigitDecimalPoint(event, cache, state, input, resetCache) {
- if (cache.value) {
- if (event.data === ".") {
- if (cache.value.slice(-1) === ".") {
- state.value = input.value = cache.value = cache.value.slice(0, -1);
- return false;
- }
- if (cache.value && !cache.value.includes(".")) {
- cache.value += ".";
- if (resetCache) {
- resetCache.fn = () => {
- state.value = input.value = cache.value = cache.value.slice(0, -1);
- input.removeEventListener("blur", resetCache.fn);
- };
- input.addEventListener("blur", resetCache.fn);
- }
- return false;
- }
- } else if (event.inputType === "deleteContentBackward") {
- if (navigator.userAgent.includes("iPhone OS 16")) {
- if (cache.value.slice(-2, -1) === ".") {
- cache.value = state.value = input.value = cache.value.slice(0, -2);
- return true;
- }
- }
- }
- }
- }
- function useCache(props2, type) {
- if (type.value === "number") {
- const value = typeof props2.modelValue === "undefined" ? props2.value : props2.modelValue;
- const cache = vue.ref(typeof value !== "undefined" && value !== null ? value.toLocaleString() : "");
- vue.watch(() => props2.modelValue, (value2) => {
- cache.value = typeof value2 !== "undefined" && value2 !== null ? value2.toLocaleString() : "";
- });
- vue.watch(() => props2.value, (value2) => {
- cache.value = typeof value2 !== "undefined" && value2 !== null ? value2.toLocaleString() : "";
- });
- return cache;
- } else {
- return vue.ref("");
- }
- }
- const Input = /* @__PURE__ */ defineBuiltInComponent({
- name: "Input",
- props: props$k,
- emits: ["confirm", ...emit],
- setup(props2, {
- emit: emit2,
- expose
- }) {
- const INPUT_TYPES = ["text", "number", "idcard", "digit", "password", "tel"];
- const AUTOCOMPLETES = ["off", "one-time-code"];
- const type = vue.computed(() => {
- let type2 = "";
- switch (props2.type) {
- case "text":
- type2 = "text";
- if (props2.confirmType === "search") {
- type2 = "search";
- }
- break;
- case "idcard":
- type2 = "text";
- break;
- case "digit":
- type2 = "number";
- break;
- default:
- type2 = ~INPUT_TYPES.includes(props2.type) ? props2.type : "text";
- break;
- }
- return props2.password ? "password" : type2;
- });
- const autocomplete = vue.computed(() => {
- const camelizeIndex = AUTOCOMPLETES.indexOf(props2.textContentType);
- const kebabCaseIndex = AUTOCOMPLETES.indexOf(shared.hyphenate(props2.textContentType));
- const index2 = camelizeIndex !== -1 ? camelizeIndex : kebabCaseIndex !== -1 ? kebabCaseIndex : 0;
- return AUTOCOMPLETES[index2];
- });
- let cache = useCache(props2, type);
- let resetCache = {
- fn: null
- };
- const rootRef = vue.ref(null);
- const {
- fieldRef,
- state,
- scopedAttrsState,
- fixDisabledColor,
- trigger
- } = useField(props2, rootRef, emit2, (event, state2) => {
- const input = event.target;
- if (type.value === "number") {
- if (resetCache.fn) {
- input.removeEventListener("blur", resetCache.fn);
- resetCache.fn = null;
- }
- if (input.validity && !input.validity.valid) {
- if ((!cache.value || !input.value) && event.data === "-" || cache.value[0] === "-" && event.inputType === "deleteContentBackward") {
- cache.value = "-";
- state2.value = "";
- resetCache.fn = () => {
- cache.value = input.value = "";
- };
- input.addEventListener("blur", resetCache.fn);
- return false;
- }
- const res = resolveDigitDecimalPoint(event, cache, state2, input, resetCache);
- if (typeof res === "boolean")
- return res;
- cache.value = state2.value = input.value = cache.value === "-" ? "" : cache.value;
- return false;
- } else {
- const res = resolveDigitDecimalPoint(event, cache, state2, input, resetCache);
- if (typeof res === "boolean")
- return res;
- cache.value = input.value;
- }
- const maxlength = state2.maxlength;
- if (maxlength > 0 && input.value.length > maxlength) {
- input.value = input.value.slice(0, maxlength);
- state2.value = input.value;
- return false;
- }
- }
- });
- vue.watch(() => state.value, (value) => {
- if (props2.type === "number" && !(cache.value === "-" && value === "")) {
- cache.value = value.toString();
- }
- });
- const NUMBER_TYPES = ["number", "digit"];
- const step = vue.computed(() => NUMBER_TYPES.includes(props2.type) ? props2.step : "");
- function onKeyUpEnter(event) {
- if (event.key !== "Enter") {
- return;
- }
- const input = event.target;
- event.stopPropagation();
- trigger("confirm", event, {
- value: input.value
- });
- !props2.confirmHold && input.blur();
- }
- expose({
- $triggerInput: (detail) => {
- emit2("update:modelValue", detail.value);
- emit2("update:value", detail.value);
- state.value = detail.value;
- }
- });
- return () => {
- let inputNode = props2.disabled && fixDisabledColor ? vue.createVNode("input", {
- "key": "disabled-input",
- "ref": fieldRef,
- "value": state.value,
- "tabindex": "-1",
- "readonly": !!props2.disabled,
- "type": type.value,
- "maxlength": state.maxlength,
- "step": step.value,
- "class": "uni-input-input",
- "style": props2.cursorColor ? {
- caretColor: props2.cursorColor
- } : {},
- "onFocus": (event) => event.target.blur()
- }, null, 44, ["value", "readonly", "type", "maxlength", "step", "onFocus"]) : vue.createVNode("input", {
- "key": "input",
- "ref": fieldRef,
- "value": state.value,
- "onInput": (event) => {
- state.value = event.target.value.toString();
- },
- "disabled": !!props2.disabled,
- "type": type.value,
- "maxlength": state.maxlength,
- "step": step.value,
- "enterkeyhint": props2.confirmType,
- "pattern": props2.type === "number" ? "[0-9]*" : void 0,
- "class": "uni-input-input",
- "style": props2.cursorColor ? {
- caretColor: props2.cursorColor
- } : {},
- "autocomplete": autocomplete.value,
- "onKeyup": onKeyUpEnter,
- "inputmode": props2.inputmode
- }, null, 44, ["value", "onInput", "disabled", "type", "maxlength", "step", "enterkeyhint", "pattern", "autocomplete", "onKeyup", "inputmode"]);
- return vue.createVNode("uni-input", {
- "ref": rootRef
- }, [vue.createVNode("div", {
- "class": "uni-input-wrapper"
- }, [vue.withDirectives(vue.createVNode("div", vue.mergeProps(scopedAttrsState.attrs, {
- "style": props2.placeholderStyle,
- "class": ["uni-input-placeholder", props2.placeholderClass]
- }), [props2.placeholder], 16), [[vue.vShow, !(state.value.length || cache.value === "-" || cache.value.includes("."))]]), props2.confirmType === "search" ? vue.createVNode("form", {
- "action": "",
- "onSubmit": (event) => event.preventDefault(),
- "class": "uni-input-form"
- }, [inputNode], 40, ["onSubmit"]) : inputNode])], 512);
- };
- }
- });
- function entries(obj) {
- return Object.keys(obj).map((key) => [key, obj[key]]);
- }
- const DEFAULT_EXCLUDE_KEYS = ["class", "style"];
- const LISTENER_PREFIX = /^on[A-Z]+/;
- const useAttrs = (params = {}) => {
- const { excludeListeners = false, excludeKeys = [] } = params;
- const instance = vue.getCurrentInstance();
- const attrs = vue.shallowRef({});
- const listeners = vue.shallowRef({});
- const excludeAttrs = vue.shallowRef({});
- const allExcludeKeys = excludeKeys.concat(DEFAULT_EXCLUDE_KEYS);
- instance.attrs = vue.reactive(instance.attrs);
- vue.watchEffect(() => {
- const res = entries(instance.attrs).reduce(
- (acc, [key, val]) => {
- if (allExcludeKeys.includes(key)) {
- acc.exclude[key] = val;
- } else if (LISTENER_PREFIX.test(key)) {
- if (!excludeListeners) {
- acc.attrs[key] = val;
- }
- acc.listeners[key] = val;
- } else {
- acc.attrs[key] = val;
- }
- return acc;
- },
- {
- exclude: {},
- attrs: {},
- listeners: {}
- }
- );
- attrs.value = res.attrs;
- listeners.value = res.listeners;
- excludeAttrs.value = res.exclude;
- });
- return { $attrs: attrs, $listeners: listeners, $excludeAttrs: excludeAttrs };
- };
- function flatVNode(nodes) {
- const array = [];
- if (shared.isArray(nodes)) {
- nodes.forEach((vnode) => {
- if (vue.isVNode(vnode)) {
- if (vnode.type === vue.Fragment) {
- array.push(...flatVNode(vnode.children));
- } else {
- array.push(vnode);
- }
- } else if (shared.isArray(vnode)) {
- array.push(...flatVNode(vnode));
- }
- });
- }
- return array;
- }
- const movableAreaProps = {
- scaleArea: {
- type: Boolean,
- default: false
- }
- };
- const index$t = /* @__PURE__ */ defineBuiltInComponent({
- inheritAttrs: false,
- name: "MovableArea",
- props: movableAreaProps,
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- const _isMounted = vue.ref(false);
- let {
- setContexts,
- events: movableAreaEvents
- } = useMovableAreaState(props2, rootRef);
- const {
- $listeners,
- $attrs,
- $excludeAttrs
- } = useAttrs();
- const _listeners = $listeners.value;
- let events = ["onTouchstart", "onTouchmove", "onTouchend"];
- events.forEach((event) => {
- let existing = _listeners[event];
- let ours = movableAreaEvents[`_${event}`];
- _listeners[event] = existing ? [].concat(existing, ours) : ours;
- });
- let movableViewItems = [];
- const originMovableViewContexts = [];
- function updateMovableViewContexts() {
- const contexts = [];
- for (let index2 = 0; index2 < movableViewItems.length; index2++) {
- let movableViewItem = movableViewItems[index2];
- {
- movableViewItem = movableViewItem.el;
- }
- const movableViewContext = originMovableViewContexts.find((context) => movableViewItem === context.rootRef.value);
- if (movableViewContext) {
- contexts.push(vue.markRaw(movableViewContext));
- }
- }
- setContexts(contexts);
- }
- const addMovableViewContext = (movableViewContext) => {
- originMovableViewContexts.push(movableViewContext);
- updateMovableViewContexts();
- };
- const removeMovableViewContext = (movableViewContext) => {
- const index2 = originMovableViewContexts.indexOf(movableViewContext);
- if (index2 >= 0) {
- originMovableViewContexts.splice(index2, 1);
- updateMovableViewContexts();
- }
- };
- vue.provide("_isMounted", _isMounted);
- vue.provide("movableAreaRootRef", rootRef);
- vue.provide("addMovableViewContext", addMovableViewContext);
- vue.provide("removeMovableViewContext", removeMovableViewContext);
- return () => {
- const defaultSlots = slots.default && slots.default();
- {
- movableViewItems = flatVNode(defaultSlots);
- }
- return vue.createVNode("uni-movable-area", vue.mergeProps({
- "ref": rootRef
- }, $attrs.value, $excludeAttrs.value, _listeners), [vue.createVNode(ResizeSensor, {
- "onResize": movableAreaEvents._resize
- }, null, 8, ["onResize"]), movableViewItems], 16);
- };
- }
- });
- function calc(e2) {
- return Math.sqrt(e2.x * e2.x + e2.y * e2.y);
- }
- function useMovableAreaState(props2, rootRef) {
- const width = vue.ref(0);
- const height = vue.ref(0);
- const gapV = vue.reactive({
- x: null,
- y: null
- });
- const pinchStartLen = vue.ref(null);
- let _scaleMovableView = null;
- let movableViewContexts = [];
- function _updateScale(e2) {
- if (e2 && e2 !== 1) {
- if (props2.scaleArea) {
- movableViewContexts.forEach(function(item) {
- item._setScale(e2);
- });
- } else {
- if (_scaleMovableView) {
- _scaleMovableView._setScale(e2);
- }
- }
- }
- }
- function _find(target, items = movableViewContexts) {
- let root = rootRef.value;
- function get(node) {
- for (let i = 0; i < items.length; i++) {
- const item = items[i];
- if (node === item.rootRef.value) {
- return item;
- }
- }
- if (node === root || node === document.body || node === document) {
- return null;
- }
- return get(node.parentNode);
- }
- return get(target);
- }
- const _onTouchstart = withWebEvent((t2) => {
- let i = t2.touches;
- if (i) {
- if (i.length > 1) {
- let r = {
- x: i[1].pageX - i[0].pageX,
- y: i[1].pageY - i[0].pageY
- };
- pinchStartLen.value = calc(r);
- gapV.x = r.x;
- gapV.y = r.y;
- if (!props2.scaleArea) {
- let touch0 = _find(i[0].target);
- let touch1 = _find(i[1].target);
- _scaleMovableView = touch0 && touch0 === touch1 ? touch0 : null;
- }
- }
- }
- });
- const _onTouchmove = withWebEvent((t2) => {
- let n = t2.touches;
- if (n) {
- if (n.length > 1) {
- t2.preventDefault();
- let i = {
- x: n[1].pageX - n[0].pageX,
- y: n[1].pageY - n[0].pageY
- };
- if (gapV.x !== null && pinchStartLen.value && pinchStartLen.value > 0) {
- let r = calc(i) / pinchStartLen.value;
- _updateScale(r);
- }
- gapV.x = i.x;
- gapV.y = i.y;
- }
- }
- });
- const _onTouchend = withWebEvent((e2) => {
- let t2 = e2.touches;
- if (!(t2 && t2.length)) {
- if (e2.changedTouches) {
- gapV.x = 0;
- gapV.y = 0;
- pinchStartLen.value = null;
- if (props2.scaleArea) {
- movableViewContexts.forEach(function(item) {
- item._endScale();
- });
- } else {
- if (_scaleMovableView) {
- _scaleMovableView._endScale();
- }
- }
- }
- }
- });
- function _resize() {
- _getWH();
- movableViewContexts.forEach(function(item, index2) {
- item.setParent();
- });
- }
- function _getWH() {
- let style = window.getComputedStyle(rootRef.value);
- let rect = rootRef.value.getBoundingClientRect();
- width.value = rect.width - ["Left", "Right"].reduce(function(all, item) {
- const LEFT = "border" + item + "Width";
- const RIGHT = "padding" + item;
- return all + parseFloat(style[LEFT]) + parseFloat(style[RIGHT]);
- }, 0);
- height.value = rect.height - ["Top", "Bottom"].reduce(function(all, item) {
- const TOP = "border" + item + "Width";
- const BOTTOM = "padding" + item;
- return all + parseFloat(style[TOP]) + parseFloat(style[BOTTOM]);
- }, 0);
- }
- vue.provide("movableAreaWidth", width);
- vue.provide("movableAreaHeight", height);
- return {
- setContexts(contexts) {
- movableViewContexts = contexts;
- },
- events: {
- _onTouchstart,
- _onTouchmove,
- _onTouchend,
- _resize
- }
- };
- }
- function e(e2, t2, n) {
- return e2 > t2 - n && e2 < t2 + n;
- }
- function t(t2, n) {
- return e(t2, 0, n);
- }
- function Friction(e2, t2) {
- this._m = e2;
- this._f = 1e3 * t2;
- this._startTime = 0;
- this._v = 0;
- }
- Friction.prototype.setV = function(x, y) {
- const n = Math.pow(Math.pow(x, 2) + Math.pow(y, 2), 0.5);
- this._x_v = x;
- this._y_v = y;
- this._x_a = -this._f * this._x_v / n;
- this._y_a = -this._f * this._y_v / n;
- this._t = Math.abs(x / this._x_a) || Math.abs(y / this._y_a);
- this._lastDt = null;
- this._startTime = (/* @__PURE__ */ new Date()).getTime();
- };
- Friction.prototype.setS = function(x, y) {
- this._x_s = x;
- this._y_s = y;
- };
- Friction.prototype.s = function(t2) {
- if (void 0 === t2) {
- t2 = ((/* @__PURE__ */ new Date()).getTime() - this._startTime) / 1e3;
- }
- if (t2 > this._t) {
- t2 = this._t;
- this._lastDt = t2;
- }
- let x = this._x_v * t2 + 0.5 * this._x_a * Math.pow(t2, 2) + this._x_s;
- let y = this._y_v * t2 + 0.5 * this._y_a * Math.pow(t2, 2) + this._y_s;
- if (this._x_a > 0 && x < this._endPositionX || this._x_a < 0 && x > this._endPositionX) {
- x = this._endPositionX;
- }
- if (this._y_a > 0 && y < this._endPositionY || this._y_a < 0 && y > this._endPositionY) {
- y = this._endPositionY;
- }
- return {
- x,
- y
- };
- };
- Friction.prototype.ds = function(t2) {
- if (void 0 === t2) {
- t2 = ((/* @__PURE__ */ new Date()).getTime() - this._startTime) / 1e3;
- }
- if (t2 > this._t) {
- t2 = this._t;
- }
- return {
- dx: this._x_v + this._x_a * t2,
- dy: this._y_v + this._y_a * t2
- };
- };
- Friction.prototype.delta = function() {
- return {
- x: -1.5 * Math.pow(this._x_v, 2) / this._x_a || 0,
- y: -1.5 * Math.pow(this._y_v, 2) / this._y_a || 0
- };
- };
- Friction.prototype.dt = function() {
- return -this._x_v / this._x_a;
- };
- Friction.prototype.done = function() {
- const t2 = e(this.s().x, this._endPositionX) || e(this.s().y, this._endPositionY) || this._lastDt === this._t;
- this._lastDt = null;
- return t2;
- };
- Friction.prototype.setEnd = function(x, y) {
- this._endPositionX = x;
- this._endPositionY = y;
- };
- Friction.prototype.reconfigure = function(m, f2) {
- this._m = m;
- this._f = 1e3 * f2;
- };
- function Spring(m, k, c) {
- this._m = m;
- this._k = k;
- this._c = c;
- this._solution = null;
- this._endPosition = 0;
- this._startTime = 0;
- }
- Spring.prototype._solve = function(e2, t2) {
- const n = this._c;
- const i = this._m;
- const r = this._k;
- const o = n * n - 4 * i * r;
- if (o === 0) {
- const a = -n / (2 * i);
- const s = e2;
- const l = t2 / (a * e2);
- return {
- x: function(e3) {
- return (s + l * e3) * Math.pow(Math.E, a * e3);
- },
- dx: function(e3) {
- const t3 = Math.pow(Math.E, a * e3);
- return a * (s + l * e3) * t3 + l * t3;
- }
- };
- }
- if (o > 0) {
- const c = (-n - Math.sqrt(o)) / (2 * i);
- const u = (-n + Math.sqrt(o)) / (2 * i);
- const d = (t2 - c * e2) / (u - c);
- const h = e2 - d;
- return {
- x: function(e3) {
- let t3;
- let n2;
- if (e3 === this._t) {
- t3 = this._powER1T;
- n2 = this._powER2T;
- }
- this._t = e3;
- if (!t3) {
- t3 = this._powER1T = Math.pow(Math.E, c * e3);
- }
- if (!n2) {
- n2 = this._powER2T = Math.pow(Math.E, u * e3);
- }
- return h * t3 + d * n2;
- },
- dx: function(e3) {
- let t3;
- let n2;
- if (e3 === this._t) {
- t3 = this._powER1T;
- n2 = this._powER2T;
- }
- this._t = e3;
- if (!t3) {
- t3 = this._powER1T = Math.pow(Math.E, c * e3);
- }
- if (!n2) {
- n2 = this._powER2T = Math.pow(Math.E, u * e3);
- }
- return h * c * t3 + d * u * n2;
- }
- };
- }
- const p2 = Math.sqrt(4 * i * r - n * n) / (2 * i);
- const f2 = -n / 2 * i;
- const v2 = e2;
- const g2 = (t2 - f2 * e2) / p2;
- return {
- x: function(e3) {
- return Math.pow(Math.E, f2 * e3) * (v2 * Math.cos(p2 * e3) + g2 * Math.sin(p2 * e3));
- },
- dx: function(e3) {
- const t3 = Math.pow(Math.E, f2 * e3);
- const n2 = Math.cos(p2 * e3);
- const i2 = Math.sin(p2 * e3);
- return t3 * (g2 * p2 * n2 - v2 * p2 * i2) + f2 * t3 * (g2 * i2 + v2 * n2);
- }
- };
- };
- Spring.prototype.x = function(e2) {
- if (void 0 === e2) {
- e2 = ((/* @__PURE__ */ new Date()).getTime() - this._startTime) / 1e3;
- }
- return this._solution ? this._endPosition + this._solution.x(e2) : 0;
- };
- Spring.prototype.dx = function(e2) {
- if (void 0 === e2) {
- e2 = ((/* @__PURE__ */ new Date()).getTime() - this._startTime) / 1e3;
- }
- return this._solution ? this._solution.dx(e2) : 0;
- };
- Spring.prototype.setEnd = function(e2, n, i) {
- if (!i) {
- i = (/* @__PURE__ */ new Date()).getTime();
- }
- if (e2 !== this._endPosition || !t(n, 0.1)) {
- n = n || 0;
- let r = this._endPosition;
- if (this._solution) {
- if (t(n, 0.1)) {
- n = this._solution.dx((i - this._startTime) / 1e3);
- }
- r = this._solution.x((i - this._startTime) / 1e3);
- if (t(n, 0.1)) {
- n = 0;
- }
- if (t(r, 0.1)) {
- r = 0;
- }
- r += this._endPosition;
- }
- if (!(this._solution && t(r - e2, 0.1) && t(n, 0.1))) {
- this._endPosition = e2;
- this._solution = this._solve(r - this._endPosition, n);
- this._startTime = i;
- }
- }
- };
- Spring.prototype.snap = function(e2) {
- this._startTime = (/* @__PURE__ */ new Date()).getTime();
- this._endPosition = e2;
- this._solution = {
- x: function() {
- return 0;
- },
- dx: function() {
- return 0;
- }
- };
- };
- Spring.prototype.done = function(n) {
- if (!n) {
- n = (/* @__PURE__ */ new Date()).getTime();
- }
- return e(this.x(), this._endPosition, 0.1) && t(this.dx(), 0.1);
- };
- Spring.prototype.reconfigure = function(m, t2, c) {
- this._m = m;
- this._k = t2;
- this._c = c;
- if (!this.done()) {
- this._solution = this._solve(this.x() - this._endPosition, this.dx());
- this._startTime = (/* @__PURE__ */ new Date()).getTime();
- }
- };
- Spring.prototype.springConstant = function() {
- return this._k;
- };
- Spring.prototype.damping = function() {
- return this._c;
- };
- Spring.prototype.configuration = function() {
- function e2(e3, t3) {
- e3.reconfigure(1, t3, e3.damping());
- }
- function t2(e3, t3) {
- e3.reconfigure(1, e3.springConstant(), t3);
- }
- return [
- {
- label: "Spring Constant",
- read: this.springConstant.bind(this),
- write: e2.bind(this, this),
- min: 100,
- max: 1e3
- },
- {
- label: "Damping",
- read: this.damping.bind(this),
- write: t2.bind(this, this),
- min: 1,
- max: 500
- }
- ];
- };
- function STD(e2, t2, n) {
- this._springX = new Spring(e2, t2, n);
- this._springY = new Spring(e2, t2, n);
- this._springScale = new Spring(e2, t2, n);
- this._startTime = 0;
- }
- STD.prototype.setEnd = function(e2, t2, n, i) {
- const r = (/* @__PURE__ */ new Date()).getTime();
- this._springX.setEnd(e2, i, r);
- this._springY.setEnd(t2, i, r);
- this._springScale.setEnd(n, i, r);
- this._startTime = r;
- };
- STD.prototype.x = function() {
- const e2 = ((/* @__PURE__ */ new Date()).getTime() - this._startTime) / 1e3;
- return {
- x: this._springX.x(e2),
- y: this._springY.x(e2),
- scale: this._springScale.x(e2)
- };
- };
- STD.prototype.done = function() {
- const e2 = (/* @__PURE__ */ new Date()).getTime();
- return this._springX.done(e2) && this._springY.done(e2) && this._springScale.done(e2);
- };
- STD.prototype.reconfigure = function(e2, t2, n) {
- this._springX.reconfigure(e2, t2, n);
- this._springY.reconfigure(e2, t2, n);
- this._springScale.reconfigure(e2, t2, n);
- };
- const movableViewProps = {
- direction: {
- type: String,
- default: "none"
- },
- inertia: {
- type: [Boolean, String],
- default: false
- },
- outOfBounds: {
- type: [Boolean, String],
- default: false
- },
- x: {
- type: [Number, String],
- default: 0
- },
- y: {
- type: [Number, String],
- default: 0
- },
- damping: {
- type: [Number, String],
- default: 20
- },
- friction: {
- type: [Number, String],
- default: 2
- },
- disabled: {
- type: [Boolean, String],
- default: false
- },
- scale: {
- type: [Boolean, String],
- default: false
- },
- scaleMin: {
- type: [Number, String],
- default: 0.5
- },
- scaleMax: {
- type: [Number, String],
- default: 10
- },
- scaleValue: {
- type: [Number, String],
- default: 1
- },
- animation: {
- type: [Boolean, String],
- default: true
- }
- };
- function v(a, b) {
- return +((1e3 * a - 1e3 * b) / 1e3).toFixed(1);
- }
- const index$s = /* @__PURE__ */ defineBuiltInComponent({
- name: "MovableView",
- props: movableViewProps,
- emits: ["change", "scale"],
- setup(props2, {
- slots,
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- const trigger = useCustomEvent(rootRef, emit2);
- const {
- setParent
- } = useMovableViewState(props2, trigger, rootRef);
- return () => {
- return vue.createVNode("uni-movable-view", {
- "ref": rootRef
- }, [vue.createVNode(ResizeSensor, {
- "onResize": setParent
- }, null, 8, ["onResize"]), slots.default && slots.default()], 512);
- };
- }
- });
- let requesting = false;
- function _requestAnimationFrame(e2) {
- if (!requesting) {
- requesting = true;
- requestAnimationFrame(function() {
- e2();
- requesting = false;
- });
- }
- }
- function p(t2, n) {
- if (t2 === n) {
- return 0;
- }
- let i = t2.offsetLeft;
- return t2.offsetParent ? i += p(t2.offsetParent, n) : 0;
- }
- function f(t2, n) {
- if (t2 === n) {
- return 0;
- }
- let i = t2.offsetTop;
- return t2.offsetParent ? i += f(t2.offsetParent, n) : 0;
- }
- function g(friction, execute, endCallback) {
- let record = {
- id: 0,
- cancelled: false
- };
- let cancel = function(record2) {
- if (record2 && record2.id) {
- cancelAnimationFrame(record2.id);
- }
- if (record2) {
- record2.cancelled = true;
- }
- };
- function fn(record2, friction2, execute2, endCallback2) {
- if (!record2 || !record2.cancelled) {
- execute2(friction2);
- let isDone = friction2.done();
- if (!isDone) {
- if (!record2.cancelled) {
- record2.id = requestAnimationFrame(fn.bind(null, record2, friction2, execute2, endCallback2));
- }
- }
- if (isDone && endCallback2) {
- endCallback2(friction2);
- }
- }
- }
- fn(record, friction, execute, endCallback);
- return {
- cancel: cancel.bind(null, record),
- model: friction
- };
- }
- function _getPx(val) {
- if (/\d+[ur]px$/i.test(val)) {
- return uni.upx2px(parseFloat(val));
- }
- return Number(val) || 0;
- }
- function useMovableViewLayout(rootRef, _scale, _adjustScale) {
- const movableAreaWidth = vue.inject("movableAreaWidth", vue.ref(0));
- const movableAreaHeight = vue.inject("movableAreaHeight", vue.ref(0));
- const movableAreaRootRef = vue.inject("movableAreaRootRef");
- const _offset = {
- x: 0,
- y: 0
- };
- const _scaleOffset = {
- x: 0,
- y: 0
- };
- const width = vue.ref(0);
- const height = vue.ref(0);
- const minX = vue.ref(0);
- const minY = vue.ref(0);
- const maxX = vue.ref(0);
- const maxY = vue.ref(0);
- function _updateBoundary() {
- let x = 0 - _offset.x + _scaleOffset.x;
- let _width = movableAreaWidth.value - width.value - _offset.x - _scaleOffset.x;
- minX.value = Math.min(x, _width);
- maxX.value = Math.max(x, _width);
- let y = 0 - _offset.y + _scaleOffset.y;
- let _height = movableAreaHeight.value - height.value - _offset.y - _scaleOffset.y;
- minY.value = Math.min(y, _height);
- maxY.value = Math.max(y, _height);
- }
- function _updateOffset() {
- _offset.x = p(rootRef.value, movableAreaRootRef.value);
- _offset.y = f(rootRef.value, movableAreaRootRef.value);
- }
- function _updateWH(scale) {
- scale = scale || _scale.value;
- scale = _adjustScale(scale);
- let rect = rootRef.value.getBoundingClientRect();
- height.value = rect.height / _scale.value;
- width.value = rect.width / _scale.value;
- let _height = height.value * scale;
- let _width = width.value * scale;
- _scaleOffset.x = (_width - width.value) / 2;
- _scaleOffset.y = (_height - height.value) / 2;
- }
- return {
- _updateBoundary,
- _updateOffset,
- _updateWH,
- _scaleOffset,
- minX,
- minY,
- maxX,
- maxY
- };
- }
- function useMovableViewTransform(rootRef, props2, _scaleOffset, _scale, maxX, maxY, minX, minY, _translateX, _translateY, _SFA, _FA, _adjustScale, trigger) {
- const dampingNumber = vue.computed(() => {
- let val = Number(props2.damping);
- return isNaN(val) ? 20 : val;
- });
- const xMove = vue.computed(() => props2.direction === "all" || props2.direction === "horizontal");
- const yMove = vue.computed(() => props2.direction === "all" || props2.direction === "vertical");
- const xSync = vue.ref(_getPx(props2.x));
- const ySync = vue.ref(_getPx(props2.y));
- vue.watch(() => props2.x, (val) => {
- xSync.value = _getPx(val);
- });
- vue.watch(() => props2.y, (val) => {
- ySync.value = _getPx(val);
- });
- vue.watch(xSync, (val) => {
- _setX(val);
- });
- vue.watch(ySync, (val) => {
- _setY(val);
- });
- const _STD = new STD(1, 9 * Math.pow(dampingNumber.value, 2) / 40, dampingNumber.value);
- function _getLimitXY(x, y) {
- let outOfBounds = false;
- if (x > maxX.value) {
- x = maxX.value;
- outOfBounds = true;
- } else {
- if (x < minX.value) {
- x = minX.value;
- outOfBounds = true;
- }
- }
- if (y > maxY.value) {
- y = maxY.value;
- outOfBounds = true;
- } else {
- if (y < minY.value) {
- y = minY.value;
- outOfBounds = true;
- }
- }
- return {
- x,
- y,
- outOfBounds
- };
- }
- function FAandSFACancel() {
- if (_FA) {
- _FA.cancel();
- }
- if (_SFA) {
- _SFA.cancel();
- }
- }
- function _animationTo(x, y, scale, source, r, o) {
- FAandSFACancel();
- if (!xMove.value) {
- x = _translateX.value;
- }
- if (!yMove.value) {
- y = _translateY.value;
- }
- if (!props2.scale) {
- scale = _scale.value;
- }
- let limitXY = _getLimitXY(x, y);
- x = limitXY.x;
- y = limitXY.y;
- if (!props2.animation) {
- _setTransform(x, y, scale, source, r, o);
- return;
- }
- _STD._springX._solution = null;
- _STD._springY._solution = null;
- _STD._springScale._solution = null;
- _STD._springX._endPosition = _translateX.value;
- _STD._springY._endPosition = _translateY.value;
- _STD._springScale._endPosition = _scale.value;
- _STD.setEnd(x, y, scale, 1);
- _SFA = g(_STD, function() {
- let data = _STD.x();
- let x2 = data.x;
- let y2 = data.y;
- let scale2 = data.scale;
- _setTransform(x2, y2, scale2, source, r, o);
- }, function() {
- _SFA.cancel();
- });
- }
- function _setTransform(x, y, scale, source = "", r, o) {
- if (!(x !== null && x.toString() !== "NaN" && typeof x === "number")) {
- x = _translateX.value || 0;
- }
- if (!(y !== null && y.toString() !== "NaN" && typeof y === "number")) {
- y = _translateY.value || 0;
- }
- x = Number(x.toFixed(1));
- y = Number(y.toFixed(1));
- scale = Number(scale.toFixed(1));
- if (!(_translateX.value === x && _translateY.value === y)) {
- if (!r) {
- trigger("change", {}, {
- x: v(x, _scaleOffset.x),
- y: v(y, _scaleOffset.y),
- source
- });
- }
- }
- if (!props2.scale) {
- scale = _scale.value;
- }
- scale = _adjustScale(scale);
- scale = +scale.toFixed(3);
- if (o && scale !== _scale.value) {
- trigger("scale", {}, {
- x,
- y,
- scale
- });
- }
- let transform = "translateX(" + x + "px) translateY(" + y + "px) translateZ(0px) scale(" + scale + ")";
- if (rootRef.value) {
- rootRef.value.style.transform = transform;
- rootRef.value.style.webkitTransform = transform;
- _translateX.value = x;
- _translateY.value = y;
- _scale.value = scale;
- }
- }
- function _revise(source) {
- let limitXY = _getLimitXY(_translateX.value, _translateY.value);
- let x = limitXY.x;
- let y = limitXY.y;
- let outOfBounds = limitXY.outOfBounds;
- if (outOfBounds) {
- _animationTo(x, y, _scale.value, source);
- }
- return outOfBounds;
- }
- function _setX(val) {
- if (xMove.value) {
- if (val + _scaleOffset.x === _translateX.value) {
- return _translateX;
- } else {
- if (_SFA) {
- _SFA.cancel();
- }
- _animationTo(val + _scaleOffset.x, ySync.value + _scaleOffset.y, _scale.value);
- }
- }
- return val;
- }
- function _setY(val) {
- if (yMove.value) {
- if (val + _scaleOffset.y === _translateY.value) {
- return _translateY;
- } else {
- if (_SFA) {
- _SFA.cancel();
- }
- _animationTo(xSync.value + _scaleOffset.x, val + _scaleOffset.y, _scale.value);
- }
- }
- return val;
- }
- return {
- FAandSFACancel,
- _getLimitXY,
- _animationTo,
- _setTransform,
- _revise,
- dampingNumber,
- xMove,
- yMove,
- xSync,
- ySync,
- _STD
- };
- }
- function useMovableViewInit(props2, rootRef, trigger, _scale, _oldScale, _isScaling, _translateX, _translateY, _SFA, _FA) {
- const scaleMinNumber = vue.computed(() => {
- let val = Number(props2.scaleMin);
- return isNaN(val) ? 0.5 : val;
- });
- const scaleMaxNumber = vue.computed(() => {
- let val = Number(props2.scaleMax);
- return isNaN(val) ? 10 : val;
- });
- const scaleValueSync = vue.ref(Number(props2.scaleValue) || 1);
- vue.watch(scaleValueSync, (val) => {
- _setScaleValue(val);
- });
- vue.watch(scaleMinNumber, () => {
- _setScaleMinOrMax();
- });
- vue.watch(scaleMaxNumber, () => {
- _setScaleMinOrMax();
- });
- vue.watch(() => props2.scaleValue, (val) => {
- scaleValueSync.value = Number(val) || 0;
- });
- const {
- _updateBoundary,
- _updateOffset,
- _updateWH,
- _scaleOffset,
- minX,
- minY,
- maxX,
- maxY
- } = useMovableViewLayout(rootRef, _scale, _adjustScale);
- const {
- FAandSFACancel,
- _getLimitXY,
- _animationTo,
- _setTransform,
- _revise,
- dampingNumber,
- xMove,
- yMove,
- xSync,
- ySync,
- _STD
- } = useMovableViewTransform(rootRef, props2, _scaleOffset, _scale, maxX, maxY, minX, minY, _translateX, _translateY, _SFA, _FA, _adjustScale, trigger);
- function _updateScale(scale, animat) {
- if (props2.scale) {
- scale = _adjustScale(scale);
- _updateWH(scale);
- _updateBoundary();
- const limitXY = _getLimitXY(_translateX.value, _translateY.value);
- const x = limitXY.x;
- const y = limitXY.y;
- if (animat) {
- _animationTo(x, y, scale, "", true, true);
- } else {
- _requestAnimationFrame(function() {
- _setTransform(x, y, scale, "", true, true);
- });
- }
- }
- }
- function _beginScale() {
- _isScaling.value = true;
- }
- function _updateOldScale(scale) {
- _oldScale.value = scale;
- }
- function _adjustScale(scale) {
- scale = Math.max(0.5, scaleMinNumber.value, scale);
- scale = Math.min(10, scaleMaxNumber.value, scale);
- return scale;
- }
- function _setScaleMinOrMax() {
- if (!props2.scale) {
- return false;
- }
- _updateScale(_scale.value, true);
- _updateOldScale(_scale.value);
- }
- function _setScaleValue(scale) {
- if (!props2.scale) {
- return false;
- }
- scale = _adjustScale(scale);
- _updateScale(scale, true);
- _updateOldScale(scale);
- return scale;
- }
- function _endScale() {
- _isScaling.value = false;
- _updateOldScale(_scale.value);
- }
- function _setScale(scale) {
- if (scale) {
- scale = _oldScale.value * scale;
- _beginScale();
- _updateScale(scale);
- }
- }
- return {
- // scale
- _updateOldScale,
- _endScale,
- _setScale,
- scaleValueSync,
- // layout
- _updateBoundary,
- _updateOffset,
- _updateWH,
- _scaleOffset,
- minX,
- minY,
- maxX,
- maxY,
- // transform
- FAandSFACancel,
- _getLimitXY,
- _animationTo,
- _setTransform,
- _revise,
- dampingNumber,
- xMove,
- yMove,
- xSync,
- ySync,
- _STD
- };
- }
- function useMovableViewState(props2, trigger, rootRef) {
- const _isMounted = vue.inject("_isMounted", vue.ref(false));
- vue.inject("addMovableViewContext", () => {
- });
- vue.inject("removeMovableViewContext", () => {
- });
- let _scale = vue.ref(1);
- let _oldScale = vue.ref(1);
- let _isScaling = vue.ref(false);
- let _translateX = vue.ref(0);
- let _translateY = vue.ref(0);
- let _SFA = null;
- let _FA = null;
- const frictionNumber = vue.computed(() => {
- let val = Number(props2.friction);
- return isNaN(val) || val <= 0 ? 2 : val;
- });
- new Friction(1, frictionNumber.value);
- vue.watch(() => props2.disabled, () => {
- __handleTouchStart();
- });
- const {
- // scale
- _updateOldScale,
- _endScale,
- _setScale,
- scaleValueSync,
- // layout
- _updateBoundary,
- _updateOffset,
- _updateWH,
- _scaleOffset,
- minX,
- minY,
- maxX,
- maxY,
- // transform
- FAandSFACancel,
- _getLimitXY,
- _setTransform,
- _revise,
- dampingNumber,
- xMove,
- yMove,
- xSync,
- ySync,
- _STD
- } = useMovableViewInit(props2, rootRef, trigger, _scale, _oldScale, _isScaling, _translateX, _translateY, _SFA, _FA);
- function __handleTouchStart() {
- if (!_isScaling.value) {
- if (!props2.disabled) {
- FAandSFACancel();
- if (xMove.value) {
- _translateX.value;
- }
- if (yMove.value) {
- _translateY.value;
- }
- rootRef.value.style.willChange = "transform";
- }
- }
- }
- function setParent() {
- if (!_isMounted.value) {
- return;
- }
- FAandSFACancel();
- let scale = props2.scale ? scaleValueSync.value : 1;
- _updateOffset();
- _updateWH(scale);
- _updateBoundary();
- let limitXY = _getLimitXY(xSync.value + _scaleOffset.x, ySync.value + _scaleOffset.y);
- let x = limitXY.x;
- let y = limitXY.y;
- _setTransform(x, y, scale, "", true);
- _updateOldScale(scale);
- }
- return {
- setParent
- };
- }
- const OPEN_TYPES = [
- "navigate",
- "redirect",
- "switchTab",
- "reLaunch",
- "navigateBack"
- ];
- const ANIMATION_IN = [
- "slide-in-right",
- "slide-in-left",
- "slide-in-top",
- "slide-in-bottom",
- "fade-in",
- "zoom-out",
- "zoom-fade-out",
- "pop-in",
- "none"
- ];
- const ANIMATION_OUT = [
- "slide-out-right",
- "slide-out-left",
- "slide-out-top",
- "slide-out-bottom",
- "fade-out",
- "zoom-in",
- "zoom-fade-in",
- "pop-out",
- "none"
- ];
- const navigatorProps = {
- hoverClass: {
- type: String,
- default: "navigator-hover"
- },
- url: {
- type: String,
- default: ""
- },
- openType: {
- type: String,
- default: "navigate",
- validator(value) {
- return Boolean(~OPEN_TYPES.indexOf(value));
- }
- },
- delta: {
- type: Number,
- default: 1
- },
- hoverStartTime: {
- type: [Number, String],
- default: 50
- },
- hoverStayTime: {
- type: [Number, String],
- default: 600
- },
- exists: {
- type: String,
- default: ""
- },
- hoverStopPropagation: {
- type: Boolean,
- default: false
- },
- animationType: {
- type: String,
- default: "",
- validator(value) {
- return !value || ANIMATION_IN.concat(ANIMATION_OUT).includes(value);
- }
- },
- animationDuration: {
- type: [String, Number],
- default: 300
- }
- };
- function createNavigatorOnClick(props2) {
- return () => {
- if (props2.openType !== "navigateBack" && !props2.url) {
- console.error(
- "<navigator/> should have url attribute when using navigateTo, redirectTo, reLaunch or switchTab"
- );
- return;
- }
- const animationDuration = parseInt(props2.animationDuration);
- switch (props2.openType) {
- case "navigate":
- uni.navigateTo({
- url: props2.url,
- animationType: props2.animationType || "pop-in",
- animationDuration
- });
- break;
- case "redirect":
- uni.redirectTo({
- url: props2.url,
- exists: props2.exists
- });
- break;
- case "switchTab":
- uni.switchTab({
- url: props2.url
- });
- break;
- case "reLaunch":
- uni.reLaunch({
- url: props2.url
- });
- break;
- case "navigateBack":
- uni.navigateBack({
- delta: props2.delta,
- animationType: props2.animationType || "pop-out",
- animationDuration
- });
- break;
- }
- };
- }
- const index$r = /* @__PURE__ */ defineBuiltInComponent({
- name: "Navigator",
- inheritAttrs: false,
- compatConfig: {
- MODE: 3
- },
- props: /* @__PURE__ */ shared.extend({}, navigatorProps, {
- renderLink: {
- type: Boolean,
- default: true
- }
- }),
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- const vm = vue.getCurrentInstance();
- const __scopeId = vm && vm.vnode.scopeId || "";
- const {
- hovering,
- binding
- } = useHover(props2);
- const onClick = createNavigatorOnClick(props2);
- return () => {
- const {
- hoverClass,
- url
- } = props2;
- const hasHoverClass = props2.hoverClass && props2.hoverClass !== "none";
- const innerNode = props2.renderLink ? vue.createVNode("a", {
- "class": "navigator-wrap",
- "href": url,
- "onClick": onEventPrevent,
- "onMousedown": onEventPrevent
- }, [slots.default && slots.default()], 40, ["href", "onClick", "onMousedown"]) : slots.default && slots.default();
- return vue.createVNode("uni-navigator", vue.mergeProps({
- "class": hasHoverClass && hovering.value ? hoverClass : "",
- "ref": rootRef
- }, hasHoverClass && binding, vm ? vm.attrs : {}, {
- [__scopeId]: ""
- }, {
- "onClick": onClick
- }), [innerNode], 16, ["onClick"]);
- };
- }
- });
- const pickerViewProps = {
- value: {
- type: Array,
- default() {
- return [];
- },
- validator: function(val) {
- return shared.isArray(val) && val.filter((val2) => typeof val2 === "number").length === val.length;
- }
- },
- indicatorStyle: {
- type: String,
- default: ""
- },
- indicatorClass: {
- type: String,
- default: ""
- },
- maskStyle: {
- type: String,
- default: ""
- },
- maskClass: {
- type: String,
- default: ""
- }
- };
- function useState$2(props2) {
- const value = vue.reactive([...props2.value]);
- const state = vue.reactive({
- value,
- height: 34
- });
- vue.watch(() => props2.value, (val, oldVal) => {
- {
- state.value.length = val.length;
- val.forEach((val2, index2) => {
- if (val2 !== state.value[index2]) {
- state.value.splice(index2, 1, val2);
- }
- });
- }
- });
- return state;
- }
- const PickerView = /* @__PURE__ */ defineBuiltInComponent({
- name: "PickerView",
- props: pickerViewProps,
- emits: ["change", "pickstart", "pickend", "update:value"],
- setup(props2, {
- slots,
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- const wrapperRef = vue.ref(null);
- const trigger = useCustomEvent(rootRef, emit2);
- const state = useState$2(props2);
- const resizeSensorRef = vue.ref(null);
- let ColumnsPreRef = vue.ref([]);
- let columnsRef = vue.ref([]);
- function getItemIndex(vnode) {
- let columnVNodes = columnsRef.value;
- {
- columnVNodes = columnVNodes.filter((vnode2) => vnode2.type !== vue.Comment);
- }
- let index2 = columnVNodes.indexOf(vnode);
- return index2 !== -1 ? index2 : ColumnsPreRef.value.indexOf(vnode);
- }
- const getPickerViewColumn = function(columnInstance) {
- const ref2 = vue.computed({
- get() {
- const index2 = getItemIndex(columnInstance.vnode);
- return state.value[index2] || 0;
- },
- set(current) {
- const index2 = getItemIndex(columnInstance.vnode);
- if (index2 < 0) {
- return;
- }
- const oldCurrent = state.value[index2];
- if (oldCurrent !== current) {
- state.value[index2] = current;
- const value = state.value.map((val) => val);
- emit2("update:value", value);
- trigger("change", {}, {
- value
- });
- }
- }
- });
- return ref2;
- };
- vue.provide("getPickerViewColumn", getPickerViewColumn);
- vue.provide("pickerViewProps", props2);
- vue.provide("pickerViewState", state);
- return () => {
- const defaultSlots = slots.default && slots.default();
- {
- const vnode = flatVNode(defaultSlots);
- ColumnsPreRef.value = vnode;
- vue.nextTick(() => {
- columnsRef.value = vnode;
- });
- }
- return vue.createVNode("uni-picker-view", {
- "ref": rootRef
- }, [vue.createVNode(ResizeSensor, {
- "ref": resizeSensorRef,
- "onResize": ({
- height
- }) => state.height = height
- }, null, 8, ["onResize"]), vue.createVNode("div", {
- "ref": wrapperRef,
- "class": "uni-picker-view-wrapper"
- }, [defaultSlots], 512)], 512);
- };
- }
- });
- const PickerViewColumn = /* @__PURE__ */ defineBuiltInComponent({
- name: "PickerViewColumn",
- setup(props2, {
- slots,
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- const contentRef = vue.ref(null);
- const getPickerViewColumn = vue.inject("getPickerViewColumn");
- const instance = vue.getCurrentInstance();
- const currentRef = getPickerViewColumn ? getPickerViewColumn(instance) : vue.ref(0);
- const pickerViewProps2 = vue.inject("pickerViewProps");
- const pickerViewState = vue.inject("pickerViewState");
- const indicatorHeight = vue.ref(34);
- const resizeSensorRef = vue.ref(null);
- const maskSize = vue.computed(() => (pickerViewState.height - indicatorHeight.value) / 2);
- const {
- state: scopedAttrsState
- } = useScopedAttrs();
- let scroller;
- const state = vue.reactive({
- current: currentRef.value,
- length: 0
- });
- function updatesScroller() {
- }
- vue.watch(() => currentRef.value, (current) => {
- if (current !== state.current) {
- state.current = current;
- }
- });
- vue.watch(() => state.current, (current) => currentRef.value = current);
- vue.watch([() => indicatorHeight.value, () => state.length, () => pickerViewState.height], updatesScroller);
- let oldDeltaY = 0;
- function handleWheel(event) {
- const deltaY = oldDeltaY + event.deltaY;
- if (Math.abs(deltaY) > 10) {
- oldDeltaY = 0;
- let current = Math.min(state.current + (deltaY < 0 ? -1 : 1), state.length - 1);
- state.current = current = Math.max(current, 0);
- scroller.scrollTo(current * indicatorHeight.value);
- } else {
- oldDeltaY = deltaY;
- }
- event.preventDefault();
- }
- function handleTap({
- clientY
- }) {
- const el = rootRef.value;
- if (!scroller.isScrolling()) {
- const rect = el.getBoundingClientRect();
- const r = clientY - rect.top - pickerViewState.height / 2;
- const o = indicatorHeight.value / 2;
- if (!(Math.abs(r) <= o)) {
- const a = Math.ceil((Math.abs(r) - o) / indicatorHeight.value);
- const s = r < 0 ? -a : a;
- let current = Math.min(state.current + s, state.length - 1);
- state.current = current = Math.max(current, 0);
- scroller.scrollTo(current * indicatorHeight.value);
- }
- }
- }
- return () => {
- const defaultSlots = slots.default && slots.default();
- {
- state.length = flatVNode(defaultSlots).length;
- }
- const padding = `${maskSize.value}px 0`;
- return vue.createVNode("uni-picker-view-column", {
- "ref": rootRef
- }, [vue.createVNode("div", {
- "onWheel": handleWheel,
- "onClick": handleTap,
- "class": "uni-picker-view-group"
- }, [vue.createVNode("div", vue.mergeProps(scopedAttrsState.attrs, {
- "class": ["uni-picker-view-mask", pickerViewProps2.maskClass],
- "style": `background-size: 100% ${maskSize.value}px;${pickerViewProps2.maskStyle}`
- }), null, 16), vue.createVNode("div", vue.mergeProps(scopedAttrsState.attrs, {
- "class": ["uni-picker-view-indicator", pickerViewProps2.indicatorClass],
- "style": pickerViewProps2.indicatorStyle
- }), [vue.createVNode(ResizeSensor, {
- "ref": resizeSensorRef,
- "onResize": ({
- height
- }) => indicatorHeight.value = height
- }, null, 8, ["onResize"])], 16), vue.createVNode("div", {
- "ref": contentRef,
- "class": ["uni-picker-view-content"],
- "style": {
- padding,
- "--picker-view-column-indicator-height": `${indicatorHeight.value}px`
- }
- }, [defaultSlots], 4)], 40, ["onWheel", "onClick"])], 512);
- };
- }
- });
- const FONT_SIZE = 16;
- const PROGRESS_VALUES = {
- activeColor: uniShared.PRIMARY_COLOR,
- backgroundColor: "#EBEBEB",
- activeMode: "backwards"
- };
- const progressProps = {
- percent: {
- type: [Number, String],
- default: 0,
- validator(value) {
- return !isNaN(parseFloat(value));
- }
- },
- fontSize: {
- type: [String, Number],
- default: FONT_SIZE
- },
- showInfo: {
- type: [Boolean, String],
- default: false
- },
- strokeWidth: {
- type: [Number, String],
- default: 6,
- validator(value) {
- return !isNaN(parseFloat(value));
- }
- },
- color: {
- type: String,
- default: PROGRESS_VALUES.activeColor
- },
- activeColor: {
- type: String,
- default: PROGRESS_VALUES.activeColor
- },
- backgroundColor: {
- type: String,
- default: PROGRESS_VALUES.backgroundColor
- },
- active: {
- type: [Boolean, String],
- default: false
- },
- activeMode: {
- type: String,
- default: PROGRESS_VALUES.activeMode
- },
- duration: {
- type: [Number, String],
- default: 30,
- validator(value) {
- return !isNaN(parseFloat(value));
- }
- },
- borderRadius: {
- type: [Number, String],
- default: 0
- }
- };
- const index$q = /* @__PURE__ */ defineBuiltInComponent({
- name: "Progress",
- props: progressProps,
- setup(props2) {
- const rootRef = vue.ref(null);
- const state = useProgressState(props2);
- _activeAnimation(state, props2);
- vue.watch(() => state.realPercent, (newValue, oldValue) => {
- state.strokeTimer && clearInterval(state.strokeTimer);
- state.lastPercent = oldValue || 0;
- _activeAnimation(state, props2);
- });
- return () => {
- const {
- showInfo
- } = props2;
- const {
- outerBarStyle,
- innerBarStyle,
- currentPercent
- } = state;
- return vue.createVNode("uni-progress", {
- "class": "uni-progress",
- "ref": rootRef
- }, [vue.createVNode("div", {
- "style": outerBarStyle,
- "class": "uni-progress-bar"
- }, [vue.createVNode("div", {
- "style": innerBarStyle,
- "class": "uni-progress-inner-bar"
- }, null, 4)], 4), showInfo ? (
- // {currentPercent}% 的写法会影响 SSR Hydration (tsx插件的问题)
- vue.createVNode("p", {
- "class": "uni-progress-info"
- }, [currentPercent + "%"])
- ) : ""], 512);
- };
- }
- });
- function useProgressState(props2) {
- const currentPercent = vue.ref(0);
- const outerBarStyle = vue.computed(() => `background-color: ${props2.backgroundColor}; height: ${props2.strokeWidth}px;`);
- const innerBarStyle = vue.computed(() => {
- const backgroundColor = props2.color !== PROGRESS_VALUES.activeColor && props2.activeColor === PROGRESS_VALUES.activeColor ? props2.color : props2.activeColor;
- return `width: ${currentPercent.value}%;background-color: ${backgroundColor}`;
- });
- const realPercent = vue.computed(() => {
- if (typeof props2.percent === "string" && !/^-?\d*\.?\d*$/.test(props2.percent)) {
- return 0;
- }
- let realValue = parseFloat(props2.percent);
- if (Number.isNaN(realValue) || realValue < 0) {
- realValue = 0;
- } else if (realValue > 100) {
- realValue = 100;
- }
- return realValue;
- });
- const state = vue.reactive({
- outerBarStyle,
- innerBarStyle,
- realPercent,
- currentPercent,
- strokeTimer: 0,
- lastPercent: 0
- });
- return state;
- }
- function _activeAnimation(state, props2) {
- if (props2.active) {
- state.currentPercent = props2.activeMode === PROGRESS_VALUES.activeMode ? 0 : state.lastPercent;
- state.strokeTimer = setInterval(() => {
- if (state.currentPercent + 1 > state.realPercent) {
- state.currentPercent = state.realPercent;
- state.strokeTimer && clearInterval(state.strokeTimer);
- } else {
- state.currentPercent += 1;
- }
- }, parseFloat(props2.duration));
- } else {
- state.currentPercent = state.realPercent;
- }
- }
- const uniRadioGroupKey = PolySymbol(process.env.NODE_ENV !== "production" ? "uniCheckGroup" : "ucg");
- const props$j = {
- name: {
- type: String,
- default: ""
- }
- };
- const index$p = /* @__PURE__ */ defineBuiltInComponent({
- name: "RadioGroup",
- props: props$j,
- // emits: ['change'],
- setup(props2, {
- emit: emit2,
- slots
- }) {
- const rootRef = vue.ref(null);
- const trigger = useCustomEvent(rootRef, emit2);
- useProvideRadioGroup(props2, trigger);
- return () => {
- return vue.createVNode("uni-radio-group", {
- "ref": rootRef
- }, [slots.default && slots.default()], 512);
- };
- }
- });
- function useProvideRadioGroup(props2, trigger) {
- const fields2 = [];
- const getFieldsValue = () => {
- var _a;
- return (_a = fields2.find((field) => field.value.radioChecked)) == null ? void 0 : _a.value.value;
- };
- vue.provide(uniRadioGroupKey, {
- addField(field) {
- fields2.push(field);
- },
- removeField(field) {
- fields2.splice(fields2.indexOf(field), 1);
- },
- radioChange($event, field) {
- const index2 = fields2.indexOf(field);
- _resetRadioGroupValue(index2, true);
- trigger("change", $event, {
- value: getFieldsValue()
- });
- }
- });
- const uniForm = vue.inject(uniFormKey, false);
- const formField = {
- submit: () => {
- let data = ["", null];
- if (props2.name !== "") {
- data[0] = props2.name;
- data[1] = getFieldsValue();
- }
- return data;
- }
- };
- if (uniForm) {
- uniForm.addField(formField);
- }
- function setFieldChecked(field, radioChecked) {
- field.value = {
- radioChecked,
- value: field.value.value
- };
- }
- function _resetRadioGroupValue(key, change) {
- fields2.forEach((value, index2) => {
- if (index2 === key) {
- return;
- }
- if (change) {
- setFieldChecked(fields2[index2], false);
- } else {
- fields2.forEach((v2, i) => {
- if (index2 >= i) {
- return;
- }
- if (fields2[i].value.radioChecked) {
- setFieldChecked(fields2[index2], false);
- }
- });
- }
- });
- }
- return fields2;
- }
- const props$i = {
- checked: {
- type: [Boolean, String],
- default: false
- },
- id: {
- type: String,
- default: ""
- },
- disabled: {
- type: [Boolean, String],
- default: false
- },
- value: {
- type: String,
- default: ""
- },
- color: {
- type: String,
- default: "#007aff"
- },
- backgroundColor: {
- type: String,
- default: ""
- },
- borderColor: {
- type: String,
- default: ""
- },
- activeBackgroundColor: {
- type: String,
- default: ""
- },
- activeBorderColor: {
- type: String,
- default: ""
- },
- iconColor: {
- type: String,
- default: "#ffffff"
- },
- // 图标颜色,同color,优先级大于iconColor
- foreColor: {
- type: String,
- default: ""
- }
- };
- const indexX$3 = /* @__PURE__ */ defineBuiltInComponent({
- name: "Radio",
- props: props$i,
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- const radioChecked = vue.ref(props2.checked);
- const radioValue = vue.ref(props2.value);
- function getRadioStyle(checked) {
- if (props2.disabled) {
- return {
- backgroundColor: "#E1E1E1",
- borderColor: "#D1D1D1"
- };
- }
- const style = {};
- if (radioChecked.value) {
- style.backgroundColor = props2.activeBackgroundColor || props2.color;
- style.borderColor = props2.activeBorderColor || style.backgroundColor;
- } else {
- if (props2.borderColor)
- style.borderColor = props2.borderColor;
- if (props2.backgroundColor)
- style.backgroundColor = props2.backgroundColor;
- }
- return style;
- }
- const radioStyle = vue.computed(() => {
- return getRadioStyle(radioChecked.value);
- });
- vue.watch([() => props2.checked, () => props2.value], ([newChecked, newModelValue]) => {
- radioChecked.value = newChecked;
- radioValue.value = newModelValue;
- });
- const reset = () => {
- radioChecked.value = false;
- };
- const {
- uniCheckGroup,
- uniLabel,
- field
- } = useRadioInject(radioChecked, radioValue, reset);
- const _onClick = ($event) => {
- if (props2.disabled || radioChecked.value) {
- return;
- }
- radioChecked.value = true;
- uniCheckGroup && uniCheckGroup.radioChange($event, field);
- $event.stopPropagation();
- };
- if (!!uniLabel) {
- uniLabel.addHandler(_onClick);
- }
- return () => {
- const booleanAttrs = useBooleanAttr(props2, "disabled");
- let realCheckValue;
- realCheckValue = radioChecked.value;
- return vue.createVNode("uni-radio", vue.mergeProps(booleanAttrs, {
- "onClick": _onClick,
- "ref": rootRef,
- "id": props2.id,
- "class": "uni-radio-wrapper",
- "style": {
- "--HOVER-BD-COLOR": !radioChecked.value ? props2.activeBorderColor : radioStyle.value.borderColor
- }
- }), [vue.createVNode("div", {
- "class": ["uni-radio-input", {
- "uni-radio-input-disabled": props2.disabled
- }],
- "style": radioStyle.value
- }, [realCheckValue ? createSvgIconVNode(ICON_PATH_SUCCESS_NO_CIRCLE, props2.disabled ? "#ADADAD" : props2.foreColor || props2.iconColor, 18) : ""], 6), slots.default && slots.default()], 16, ["onClick", "id"]);
- };
- }
- });
- function useRadioInject(radioChecked, radioValue, reset) {
- const field = vue.computed({
- get: () => ({
- radioChecked: Boolean(radioChecked.value),
- value: radioValue.value
- }),
- set: ({
- radioChecked: checked
- }) => {
- radioChecked.value = checked;
- }
- });
- const formField = {
- reset
- };
- const uniCheckGroup = vue.inject(uniRadioGroupKey, false);
- if (!!uniCheckGroup) {
- uniCheckGroup.addField(field);
- }
- const uniForm = vue.inject(uniFormKey, false);
- if (!!uniForm) {
- uniForm.addField(formField);
- }
- const uniLabel = vue.inject(uniLabelKey, false);
- return {
- uniCheckGroup,
- uniForm,
- uniLabel,
- field
- };
- }
- const TAGS = {
- a: "",
- abbr: "",
- address: "",
- article: "",
- aside: "",
- b: "",
- bdi: "",
- bdo: ["dir"],
- big: "",
- blockquote: "",
- br: "",
- caption: "",
- center: "",
- cite: "",
- code: "",
- col: ["span", "width"],
- colgroup: ["span", "width"],
- dd: "",
- del: "",
- div: "",
- dl: "",
- dt: "",
- em: "",
- fieldset: "",
- font: "",
- footer: "",
- h1: "",
- h2: "",
- h3: "",
- h4: "",
- h5: "",
- h6: "",
- header: "",
- hr: "",
- i: "",
- img: ["alt", "src", "height", "width"],
- ins: "",
- label: "",
- legend: "",
- li: "",
- mark: "",
- nav: "",
- ol: ["start", "type"],
- p: "",
- pre: "",
- q: "",
- rt: "",
- ruby: "",
- s: "",
- section: "",
- small: "",
- span: "",
- strong: "",
- sub: "",
- sup: "",
- table: ["width"],
- tbody: "",
- td: ["colspan", "height", "rowspan", "width"],
- tfoot: "",
- th: ["colspan", "height", "rowspan", "width"],
- thead: "",
- tr: ["colspan", "height", "rowspan", "width"],
- tt: "",
- u: "",
- ul: ""
- };
- const CHARS = {
- amp: "&",
- gt: ">",
- lt: "<",
- nbsp: " ",
- quot: '"',
- apos: "'",
- ldquo: "“",
- rdquo: "”",
- yen: "¥",
- radic: "√",
- lceil: "⌈",
- rceil: "⌉",
- lfloor: "⌊",
- rfloor: "⌋",
- hellip: "…"
- };
- function decodeEntities(htmlString) {
- return htmlString.replace(
- /&(([a-zA-Z]+)|(#x{0,1}[\da-zA-Z]+));/gi,
- function(match, stage) {
- if (shared.hasOwn(CHARS, stage) && CHARS[stage]) {
- return CHARS[stage];
- }
- if (/^#[0-9]{1,4}$/.test(stage)) {
- return String.fromCharCode(stage.slice(1));
- }
- if (/^#x[0-9a-f]{1,4}$/i.test(stage)) {
- return String.fromCharCode(0 + stage.slice(1));
- }
- return match;
- }
- );
- }
- function processClickEvent(node, triggerItemClick) {
- if (["a", "img"].includes(node.name) && triggerItemClick) {
- return {
- onClick: (e2) => {
- triggerItemClick(e2, { node });
- e2.stopPropagation();
- e2.preventDefault();
- e2.returnValue = false;
- }
- };
- }
- }
- function normalizeAttrs(tagName, attrs) {
- if (!shared.isPlainObject(attrs))
- return;
- for (const key in attrs) {
- if (shared.hasOwn(attrs, key)) {
- const value = attrs[key];
- if (tagName === "img" && key === "src")
- attrs[key] = getRealPath(value);
- }
- }
- }
- const nodeList2VNode = (scopeId, triggerItemClick, nodeList) => {
- if (!nodeList || shared.isArray(nodeList) && !nodeList.length)
- return [];
- return nodeList.map((node) => {
- var _a;
- if (!shared.isPlainObject(node)) {
- return;
- }
- if (!shared.hasOwn(node, "type") || node.type === "node") {
- let nodeProps = { [scopeId]: "" };
- const tagName = (_a = node.name) == null ? void 0 : _a.toLowerCase();
- if (!shared.hasOwn(TAGS, tagName)) {
- return;
- }
- normalizeAttrs(tagName, node.attrs);
- nodeProps = shared.extend(
- nodeProps,
- processClickEvent(node, triggerItemClick),
- node.attrs
- );
- return vue.h(
- node.name,
- nodeProps,
- nodeList2VNode(scopeId, triggerItemClick, node.children)
- );
- }
- if (node.type === "text" && shared.isString(node.text) && node.text !== "")
- return vue.createTextVNode(decodeEntities(node.text || ""));
- });
- };
- function removeDOCTYPE(html) {
- return html.replace(/<\?xml.*\?>\n/, "").replace(/<!doctype.*>\n/, "").replace(/<!DOCTYPE.*>\n/, "");
- }
- function parseAttrs(attrs) {
- return attrs.reduce(function(pre, attr2) {
- let value = attr2.value;
- const name = attr2.name;
- if (value.match(/ /) && ["style", "src"].indexOf(name) === -1) {
- value = value.split(" ");
- }
- if (pre[name]) {
- if (Array.isArray(pre[name])) {
- pre[name].push(value);
- } else {
- pre[name] = [pre[name], value];
- }
- } else {
- pre[name] = value;
- }
- return pre;
- }, {});
- }
- function parseHtml(html) {
- html = removeDOCTYPE(html);
- const stacks = [];
- const results = {
- node: "root",
- children: []
- };
- HTMLParser(html, {
- start: function(tag, attrs, unary) {
- const node = {
- name: tag
- };
- if (attrs.length !== 0) {
- node.attrs = parseAttrs(attrs);
- }
- if (unary) {
- const parent = stacks[0] || results;
- if (!parent.children) {
- parent.children = [];
- }
- parent.children.push(node);
- } else {
- stacks.unshift(node);
- }
- },
- end: function(tag) {
- const node = stacks.shift();
- if (node.name !== tag)
- console.error("invalid state: mismatch end tag");
- if (stacks.length === 0) {
- results.children.push(node);
- } else {
- const parent = stacks[0];
- if (!parent.children) {
- parent.children = [];
- }
- parent.children.push(node);
- }
- },
- chars: function(text) {
- const node = {
- type: "text",
- text
- };
- if (stacks.length === 0) {
- results.children.push(node);
- } else {
- const parent = stacks[0];
- if (!parent.children) {
- parent.children = [];
- }
- parent.children.push(node);
- }
- },
- comment: function(text) {
- const node = {
- node: "comment",
- text
- };
- const parent = stacks[0];
- if (parent) {
- if (!parent.children) {
- parent.children = [];
- }
- parent.children.push(node);
- }
- }
- });
- return results.children;
- }
- const props$h = {
- nodes: {
- type: [Array, String],
- default: function() {
- return [];
- }
- }
- };
- const index$o = /* @__PURE__ */ defineBuiltInComponent({
- name: "RichText",
- compatConfig: {
- MODE: 3
- },
- props: props$h,
- emits: ["click", "touchstart", "touchmove", "touchcancel", "touchend", "longpress", "itemclick"],
- setup(props2, {
- emit: emit2
- }) {
- const vm = vue.getCurrentInstance();
- const scopeId = vm && vm.vnode.scopeId || "";
- const rootRef = vue.ref(null);
- const _vnode = vue.ref([]);
- const trigger = useCustomEvent(rootRef, emit2);
- function triggerItemClick(e2, detail = {}) {
- trigger("itemclick", e2, detail);
- }
- function renderVNode() {
- let nodeList = props2.nodes;
- if (shared.isString(nodeList)) {
- nodeList = parseHtml(props2.nodes);
- }
- _vnode.value = nodeList2VNode(scopeId, triggerItemClick, nodeList);
- }
- vue.watch(() => props2.nodes, renderVNode, {
- immediate: true
- });
- return () => vue.h("uni-rich-text", {
- ref: rootRef
- }, vue.h("div", {}, _vnode.value));
- }
- });
- const Refresher = /* @__PURE__ */ defineBuiltInComponent({
- name: "Refresher",
- props: {
- refreshState: {
- type: String,
- default: ""
- },
- refresherHeight: {
- type: Number,
- default: 0
- },
- refresherThreshold: {
- type: Number,
- default: 45
- },
- refresherDefaultStyle: {
- type: String,
- default: "black"
- },
- refresherBackground: {
- type: String,
- default: "transparent"
- }
- },
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- const rootStyle = vue.computed(() => {
- const style = {
- backgroundColor: props2.refresherBackground
- };
- switch (props2.refreshState) {
- case "pulling":
- style.height = props2.refresherHeight + "px";
- break;
- case "refreshing":
- style.height = props2.refresherThreshold + "px";
- style.transition = "height 0.3s";
- break;
- case "":
- case "refresherabort":
- case "restore":
- style.height = "0px";
- style.transition = "height 0.3s";
- break;
- }
- return style;
- });
- const refreshRotate = vue.computed(() => {
- const route = props2.refresherHeight / props2.refresherThreshold;
- return (route > 1 ? 1 : route) * 360;
- });
- return () => {
- const {
- refreshState,
- refresherDefaultStyle,
- refresherThreshold
- } = props2;
- return vue.createVNode("div", {
- "ref": rootRef,
- "style": rootStyle.value,
- "class": "uni-scroll-view-refresher"
- }, [refresherDefaultStyle !== "none" ? vue.createVNode("div", {
- "class": "uni-scroll-view-refresh"
- }, [vue.createVNode("div", {
- "class": "uni-scroll-view-refresh-inner"
- }, [refreshState == "pulling" ? vue.createVNode("svg", {
- "key": "refresh__icon",
- "style": {
- transform: "rotate(" + refreshRotate.value + "deg)"
- },
- "fill": "#2BD009",
- "class": "uni-scroll-view-refresh__icon",
- "width": "24",
- "height": "24",
- "viewBox": "0 0 24 24"
- }, [vue.createVNode("path", {
- "d": "M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"
- }, null), vue.createVNode("path", {
- "d": "M0 0h24v24H0z",
- "fill": "none"
- }, null)], 4) : null, refreshState == "refreshing" ? vue.createVNode("svg", {
- "key": "refresh__spinner",
- "class": "uni-scroll-view-refresh__spinner",
- "width": "24",
- "height": "24",
- "viewBox": "25 25 50 50"
- }, [vue.createVNode("circle", {
- "cx": "50",
- "cy": "50",
- "r": "20",
- "fill": "none",
- "style": "color: #2bd009",
- "stroke-width": "3"
- }, null)]) : null])]) : null, refresherDefaultStyle === "none" ? vue.createVNode("div", {
- "class": "uni-scroll-view-refresher-container",
- "style": {
- height: `${refresherThreshold}px`
- }
- }, [slots.default && slots.default()]) : null], 4);
- };
- }
- });
- const props$g = {
- direction: {
- type: [String],
- default: "vertical"
- },
- scrollX: {
- type: [Boolean, String],
- default: false
- },
- scrollY: {
- type: [Boolean, String],
- default: false
- },
- showScrollbar: {
- type: [Boolean, String],
- default: true
- },
- upperThreshold: {
- type: [Number, String],
- default: 50
- },
- lowerThreshold: {
- type: [Number, String],
- default: 50
- },
- scrollTop: {
- type: [Number, String],
- default: 0
- },
- scrollLeft: {
- type: [Number, String],
- default: 0
- },
- scrollIntoView: {
- type: String,
- default: ""
- },
- scrollWithAnimation: {
- type: [Boolean, String],
- default: false
- },
- enableBackToTop: {
- type: [Boolean, String],
- default: false
- },
- refresherEnabled: {
- type: [Boolean, String],
- default: false
- },
- refresherThreshold: {
- type: Number,
- default: 45
- },
- refresherDefaultStyle: {
- type: String,
- default: "black"
- },
- refresherBackground: {
- type: String,
- default: "transparent"
- },
- refresherTriggered: {
- type: [Boolean, String],
- default: false
- }
- };
- const index$n = /* @__PURE__ */ defineBuiltInComponent({
- name: "ScrollView",
- compatConfig: {
- MODE: 3
- },
- props: props$g,
- emits: ["scroll", "scrolltoupper", "scrolltolower", "refresherrefresh", "refresherrestore", "refresherpulling", "refresherabort", "update:refresherTriggered"],
- setup(props2, {
- emit: emit2,
- slots,
- expose
- }) {
- const rootRef = vue.ref(null);
- const main = vue.ref(null);
- const wrap = vue.ref(null);
- const content = vue.ref(null);
- const trigger = useCustomEvent(rootRef, emit2);
- const {
- state,
- scrollTopNumber,
- scrollLeftNumber
- } = useScrollViewState(props2);
- const {
- realScrollX,
- realScrollY,
- _scrollLeftChanged,
- _scrollTopChanged
- } = useScrollViewLoader(props2, state, scrollTopNumber, scrollLeftNumber, trigger, rootRef, main, content, emit2);
- const mainStyle = vue.computed(() => {
- let style = "";
- realScrollX.value ? style += "overflow-x:auto;" : style += "overflow-x:hidden;";
- realScrollY.value ? style += "overflow-y:auto;" : style += "overflow-y:hidden;";
- return style;
- });
- const scrollBarClassName = vue.computed(() => {
- let className = "uni-scroll-view";
- if (props2.showScrollbar === false) {
- className += " uni-scroll-view-scrollbar-hidden";
- }
- return className;
- });
- expose({
- // 自动化测试需要暴露main从而获取scrollLeft
- $getMain() {
- return main.value;
- }
- });
- return () => {
- const {
- refresherEnabled,
- refresherBackground,
- refresherDefaultStyle,
- refresherThreshold
- } = props2;
- const {
- refresherHeight,
- refreshState
- } = state;
- return vue.createVNode("uni-scroll-view", {
- "ref": rootRef
- }, [vue.createVNode("div", {
- "ref": wrap,
- "class": "uni-scroll-view"
- }, [vue.createVNode("div", {
- "ref": main,
- "style": mainStyle.value,
- "class": scrollBarClassName.value
- }, [refresherEnabled ? vue.createVNode(Refresher, {
- "refreshState": refreshState,
- "refresherHeight": refresherHeight,
- "refresherThreshold": refresherThreshold,
- "refresherDefaultStyle": refresherDefaultStyle,
- "refresherBackground": refresherBackground
- }, {
- default: () => [refresherDefaultStyle == "none" ? slots.refresher && slots.refresher() : null]
- }, 8, ["refreshState", "refresherHeight", "refresherThreshold", "refresherDefaultStyle", "refresherBackground"]) : null, vue.createVNode("div", {
- "ref": content,
- "class": "uni-scroll-view-content"
- }, [slots.default && slots.default()], 512)], 6)], 512)], 512);
- };
- }
- });
- function useScrollViewState(props2) {
- const scrollTopNumber = vue.computed(() => {
- return Number(props2.scrollTop) || 0;
- });
- const scrollLeftNumber = vue.computed(() => {
- return Number(props2.scrollLeft) || 0;
- });
- const state = vue.reactive({
- lastScrollTop: scrollTopNumber.value,
- lastScrollLeft: scrollLeftNumber.value,
- lastScrollToUpperTime: 0,
- lastScrollToLowerTime: 0,
- refresherHeight: 0,
- refreshState: ""
- });
- return {
- state,
- scrollTopNumber,
- scrollLeftNumber
- };
- }
- function useScrollViewLoader(props2, state, scrollTopNumber, scrollLeftNumber, trigger, rootRef, main, content, emit2) {
- let beforeRefreshing = false;
- let triggerAbort = false;
- let __transitionEnd = () => {
- };
- const realScrollX = vue.computed(() => {
- if (props2.direction === "horizontal" || props2.direction === "all") {
- return true;
- }
- return false;
- });
- const realScrollY = vue.computed(() => {
- if (props2.direction === "vertical" || props2.direction === "all") {
- return true;
- }
- return false;
- });
- vue.computed(() => {
- let val = Number(props2.upperThreshold);
- return isNaN(val) ? 50 : val;
- });
- vue.computed(() => {
- let val = Number(props2.lowerThreshold);
- return isNaN(val) ? 50 : val;
- });
- function scrollTo(scrollToValue, direction) {
- const container = main.value;
- let transformValue = 0;
- let transform = "";
- scrollToValue < 0 ? scrollToValue = 0 : direction === "x" && scrollToValue > container.scrollWidth - container.offsetWidth ? scrollToValue = container.scrollWidth - container.offsetWidth : direction === "y" && scrollToValue > container.scrollHeight - container.offsetHeight && (scrollToValue = container.scrollHeight - container.offsetHeight);
- direction === "x" ? transformValue = container.scrollLeft - scrollToValue : direction === "y" && (transformValue = container.scrollTop - scrollToValue);
- if (transformValue === 0)
- return;
- let _content = content.value;
- _content.style.transition = "transform .3s ease-out";
- _content.style.webkitTransition = "-webkit-transform .3s ease-out";
- if (direction === "x") {
- transform = "translateX(" + transformValue + "px) translateZ(0)";
- } else {
- direction === "y" && (transform = "translateY(" + transformValue + "px) translateZ(0)");
- }
- _content.removeEventListener("transitionend", __transitionEnd);
- _content.removeEventListener("webkitTransitionEnd", __transitionEnd);
- __transitionEnd = () => _transitionEnd(scrollToValue, direction);
- _content.addEventListener("transitionend", __transitionEnd);
- _content.addEventListener("webkitTransitionEnd", __transitionEnd);
- if (direction === "x") {
- container.style.overflowX = "hidden";
- } else if (direction === "y") {
- container.style.overflowY = "hidden";
- }
- _content.style.transform = transform;
- _content.style.webkitTransform = transform;
- }
- function _scrollTopChanged(val) {
- if (realScrollY.value) {
- {
- if (props2.scrollWithAnimation) {
- scrollTo(val, "y");
- } else {
- main.value.scrollTop = val;
- }
- }
- }
- }
- function _scrollLeftChanged(val) {
- if (realScrollX.value) {
- {
- if (props2.scrollWithAnimation) {
- scrollTo(val, "x");
- } else {
- main.value.scrollLeft = val;
- }
- }
- }
- }
- function _scrollIntoViewChanged(val) {
- if (val) {
- if (!/^[_a-zA-Z][-_a-zA-Z0-9:]*$/.test(val)) {
- console.error(`id error: scroll-into-view=${val}`);
- return;
- }
- let element = rootRef.value.querySelector("#" + val);
- if (element) {
- let mainRect = main.value.getBoundingClientRect();
- let elRect = element.getBoundingClientRect();
- if (realScrollX.value) {
- let left = elRect.left - mainRect.left;
- let scrollLeft = main.value.scrollLeft;
- let x = scrollLeft + left;
- if (props2.scrollWithAnimation) {
- scrollTo(x, "x");
- } else {
- main.value.scrollLeft = x;
- }
- }
- if (realScrollY.value) {
- let top = elRect.top - mainRect.top;
- let scrollTop = main.value.scrollTop;
- let y = scrollTop + top;
- if (props2.scrollWithAnimation) {
- scrollTo(y, "y");
- } else {
- main.value.scrollTop = y;
- }
- }
- }
- }
- }
- function _transitionEnd(val, direction) {
- content.value.style.transition = "";
- content.value.style.webkitTransition = "";
- content.value.style.transform = "";
- content.value.style.webkitTransform = "";
- let _main = main.value;
- if (direction === "x") {
- _main.style.overflowX = realScrollX.value ? "auto" : "hidden";
- _main.scrollLeft = val;
- } else if (direction === "y") {
- _main.style.overflowY = realScrollY.value ? "auto" : "hidden";
- _main.scrollTop = val;
- }
- content.value.removeEventListener("transitionend", __transitionEnd);
- content.value.removeEventListener("webkitTransitionEnd", __transitionEnd);
- }
- function _setRefreshState(_state) {
- if (!props2.refresherEnabled)
- return;
- switch (_state) {
- case "refreshing":
- state.refresherHeight = props2.refresherThreshold;
- if (!beforeRefreshing) {
- beforeRefreshing = true;
- trigger("refresherpulling", {}, {
- deltaY: state.refresherHeight,
- dy: state.refresherHeight
- });
- trigger("refresherrefresh", {}, {
- dy: touchEnd.y - touchStart.y
- });
- emit2("update:refresherTriggered", true);
- }
- break;
- case "restore":
- case "refresherabort":
- beforeRefreshing = false;
- state.refresherHeight = 0;
- if (_state === "restore") {
- triggerAbort = false;
- trigger("refresherrestore", {}, {
- dy: touchEnd.y - touchStart.y
- });
- }
- if (_state === "refresherabort" && triggerAbort) {
- triggerAbort = false;
- trigger("refresherabort", {}, {
- dy: touchEnd.y - touchStart.y
- });
- }
- break;
- }
- state.refreshState = _state;
- }
- let touchStart = {
- x: 0,
- y: 0
- };
- let touchEnd = {
- x: 0,
- y: props2.refresherThreshold
- };
- vue.watch(scrollTopNumber, (val) => {
- _scrollTopChanged(val);
- });
- vue.watch(scrollLeftNumber, (val) => {
- _scrollLeftChanged(val);
- });
- vue.watch(() => props2.scrollIntoView, (val) => {
- _scrollIntoViewChanged(val);
- });
- vue.watch(() => props2.refresherTriggered, (val) => {
- if (val === true) {
- _setRefreshState("refreshing");
- } else if (val === false) {
- _setRefreshState("restore");
- }
- });
- return {
- realScrollX,
- realScrollY,
- _scrollTopChanged,
- _scrollLeftChanged
- };
- }
- const SLIDER_BLOCK_SIZE_MIN_VALUE = 12;
- const SLIDER_BLOCK_SIZE_MAX_VALUE = 28;
- const props$f = {
- name: {
- type: String,
- default: ""
- },
- min: {
- type: [Number, String],
- default: 0
- },
- max: {
- type: [Number, String],
- default: 100
- },
- value: {
- type: [Number, String],
- default: 0
- },
- step: {
- type: [Number, String],
- default: 1
- },
- disabled: {
- type: [Boolean, String],
- default: false
- },
- color: {
- type: String,
- default: "#e9e9e9"
- },
- backgroundColor: {
- type: String,
- default: "#e9e9e9"
- },
- // 优先级高于 activeColor
- activeBackgroundColor: {
- type: String,
- default: ""
- },
- activeColor: {
- type: String,
- default: "#007aff"
- },
- selectedColor: {
- type: String,
- default: "#007aff"
- },
- blockColor: {
- type: String,
- default: "#ffffff"
- },
- // 优先级高于blockColor
- foreColor: {
- type: String,
- default: ""
- },
- valueColor: {
- type: String,
- default: "#888888"
- },
- blockSize: {
- type: [Number, String],
- default: 28
- },
- showValue: {
- type: [Boolean, String],
- default: false
- }
- };
- const indexX$2 = /* @__PURE__ */ defineBuiltInComponent({
- name: "Slider",
- props: props$f,
- emits: ["changing", "change"],
- setup(props2, {
- emit: emit2
- }) {
- const sliderRef = vue.ref(null);
- const sliderValueRef = vue.ref(null);
- let uniSliderElement;
- vue.watch(() => props2.value, (val) => {
- uniSliderElement.value = Number(val);
- });
- const trigger = useCustomEvent(sliderRef, emit2);
- const state = useSliderState(props2);
- const {
- _onInput,
- _onChange
- } = useSliderLoader(props2, sliderRef, trigger);
- return () => {
- const {
- setTrackBgColor,
- setActiveColor,
- setThumbStyle,
- thumbTrackStyle,
- setValueStyle
- } = state;
- return vue.createVNode("uni-slider", {
- "ref": sliderRef
- }, [vue.createVNode("div", {
- "class": "uni-slider-wrapper"
- }, [vue.createVNode("div", {
- "class": "uni-slider-input"
- }, [vue.createVNode("div", {
- "style": setTrackBgColor.value,
- "class": "uni-slider-track"
- }, [vue.createVNode("div", {
- "style": setActiveColor.value,
- "class": "uni-slider-track-value"
- }, null, 4)], 4), vue.createVNode("div", {
- "style": thumbTrackStyle.value,
- "class": "uni-slider-thumb-track"
- }, [vue.createVNode("div", {
- "style": setThumbStyle.value,
- "class": "uni-slider-thumb-value"
- }, null, 4)], 4), vue.createVNode("input", {
- "class": "uni-slider-browser-input-range",
- "type": "range",
- "min": props2.min,
- "max": props2.max,
- "step": props2.step,
- "value": props2.value,
- "onInput": withWebEvent(_onInput),
- "onChange": withWebEvent(_onChange)
- }, null, 40, ["min", "max", "step", "value", "onInput", "onChange"])]), vue.withDirectives(vue.createVNode("span", {
- "ref": sliderValueRef,
- "style": setValueStyle.value,
- "class": "uni-slider-value"
- }, null, 4), [[vue.vShow, props2.showValue]])]), vue.createVNode("slot", null, null)], 512);
- };
- }
- });
- function useSliderState(props2) {
- const _getBgColor = () => {
- return props2.backgroundColor !== "#e9e9e9" ? props2.backgroundColor : props2.color !== "#007aff" ? props2.color : "#007aff";
- };
- const _getActiveColor = () => {
- const activeColor = props2.activeBackgroundColor || props2.activeColor;
- return activeColor !== "#007aff" ? activeColor : props2.selectedColor !== "#e9e9e9" ? props2.selectedColor : "#e9e9e9";
- };
- const _getBlockSizeString = () => {
- const blockSize = Math.min(Math.max(Number(props2.blockSize), SLIDER_BLOCK_SIZE_MIN_VALUE), SLIDER_BLOCK_SIZE_MAX_VALUE);
- return blockSize + "px";
- };
- const state = {
- setTrackBgColor: vue.computed(() => ({
- backgroundColor: _getBgColor()
- })),
- setActiveColor: vue.computed(() => ({
- backgroundColor: _getActiveColor()
- })),
- thumbTrackStyle: vue.computed(() => ({
- marginRight: _getBlockSizeString()
- })),
- setThumbStyle: vue.computed(() => ({
- width: _getBlockSizeString(),
- height: _getBlockSizeString(),
- backgroundColor: props2.foreColor || props2.blockColor
- })),
- setValueStyle: vue.computed(() => ({
- color: props2.valueColor
- }))
- };
- return state;
- }
- function useSliderLoader(props2, sliderRef, trigger) {
- const _onInput = (event) => {
- if (props2.disabled) {
- return;
- }
- const valueNumber = Number(event.target.value);
- sliderRef.value.updateValue(valueNumber);
- trigger("changing", event, {
- value: valueNumber
- });
- };
- const _onChange = (event) => {
- if (props2.disabled) {
- return;
- }
- const valueNumber = Number(event.target.value);
- sliderRef.value.updateValue(valueNumber);
- trigger("change", event, {
- value: valueNumber
- });
- };
- const uniForm = vue.inject(uniFormKey, false);
- if (!!uniForm) {
- const field = {
- reset: () => {
- sliderRef.value.reset();
- },
- submit: () => {
- const data = ["", null];
- const value = sliderRef.value.value;
- if (props2.name !== "") {
- data[0] = props2.name;
- data[1] = value;
- }
- return data;
- }
- };
- uniForm.addField(field);
- }
- return {
- _onInput,
- _onChange
- };
- }
- const props$e = {
- indicatorDots: {
- type: [Boolean, String],
- default: false
- },
- vertical: {
- type: [Boolean, String],
- default: false
- },
- autoplay: {
- type: [Boolean, String],
- default: false
- },
- circular: {
- type: [Boolean, String],
- default: false
- },
- interval: {
- type: [Number, String],
- default: 5e3
- },
- duration: {
- type: [Number, String],
- default: 500
- },
- current: {
- type: [Number, String],
- default: 0
- },
- indicatorColor: {
- type: String,
- default: ""
- },
- indicatorActiveColor: {
- type: String,
- default: ""
- },
- previousMargin: {
- type: String,
- default: ""
- },
- nextMargin: {
- type: String,
- default: ""
- },
- currentItemId: {
- type: String,
- default: ""
- },
- skipHiddenItemLayout: {
- type: [Boolean, String],
- default: false
- },
- displayMultipleItems: {
- type: [Number, String],
- default: 1
- },
- disableTouch: {
- type: [Boolean, String],
- default: false
- },
- navigation: {
- type: [Boolean, String],
- default: false
- },
- navigationColor: {
- type: String,
- default: "#fff"
- },
- navigationActiveColor: {
- type: String,
- default: "rgba(53, 53, 53, 0.6)"
- }
- };
- function useState$1(props2) {
- const interval = vue.computed(() => {
- const interval2 = Number(props2.interval);
- return isNaN(interval2) ? 5e3 : interval2;
- });
- const duration = vue.computed(() => {
- const duration2 = Number(props2.duration);
- return isNaN(duration2) ? 500 : duration2;
- });
- const displayMultipleItems = vue.computed(() => {
- const displayMultipleItems2 = Math.round(props2.displayMultipleItems);
- return isNaN(displayMultipleItems2) ? 1 : displayMultipleItems2;
- });
- const state = vue.reactive({
- interval,
- duration,
- displayMultipleItems,
- current: Math.round(props2.current) || 0,
- currentItemId: props2.currentItemId,
- userTracking: false
- });
- return state;
- }
- function useLayout(props2, state, swiperContexts, slideFrameRef, emit2, trigger) {
- function cancelSchedule() {
- if (timer) {
- clearTimeout(timer);
- timer = null;
- }
- }
- let timer = null;
- let invalid = true;
- let viewportPosition = 0;
- let viewportMoveRatio = 1;
- let animating = null;
- let requestedAnimation = false;
- let contentTrackViewport = 0;
- let transitionStart;
- let currentChangeSource = "";
- const swiperEnabled = vue.computed(() => swiperContexts.value.length > state.displayMultipleItems);
- const circularEnabled = vue.computed(() => props2.circular && swiperEnabled.value);
- function checkCircularLayout(index2) {
- if (!invalid) {
- for (let items = swiperContexts.value, n = items.length, i = index2 + state.displayMultipleItems, r = 0; r < n; r++) {
- const item = items[r];
- const s = Math.floor(index2 / n) * n + r;
- const l = s + n;
- const c = s - n;
- const u = Math.max(index2 - (s + 1), s - i, 0);
- const d = Math.max(index2 - (l + 1), l - i, 0);
- const h = Math.max(index2 - (c + 1), c - i, 0);
- const p2 = Math.min(u, d, h);
- const position = [s, l, c][[u, d, h].indexOf(p2)];
- item.updatePosition(position, props2.vertical);
- }
- }
- }
- function updateViewport(index2) {
- if (!(Math.floor(2 * viewportPosition) === Math.floor(2 * index2) && Math.ceil(2 * viewportPosition) === Math.ceil(2 * index2))) {
- if (circularEnabled.value) {
- checkCircularLayout(index2);
- }
- }
- const x = props2.vertical ? "0" : 100 * -index2 * viewportMoveRatio + "%";
- const y = props2.vertical ? 100 * -index2 * viewportMoveRatio + "%" : "0";
- const transform = "translate(" + x + ", " + y + ") translateZ(0)";
- const slideFrame = slideFrameRef.value;
- if (slideFrame) {
- slideFrame.style.webkitTransform = transform;
- slideFrame.style.transform = transform;
- }
- viewportPosition = index2;
- if (!transitionStart) {
- if (index2 % 1 === 0) {
- return;
- }
- transitionStart = index2;
- }
- index2 -= Math.floor(transitionStart);
- const items = swiperContexts.value;
- if (index2 <= -(items.length - 1)) {
- index2 += items.length;
- } else if (index2 >= items.length) {
- index2 -= items.length;
- }
- index2 = transitionStart % 1 > 0.5 || transitionStart < 0 ? index2 - 1 : index2;
- trigger("transition", {}, {
- dx: props2.vertical ? 0 : index2 * slideFrame.offsetWidth,
- dy: props2.vertical ? index2 * slideFrame.offsetHeight : 0
- });
- }
- function endViewportAnimation() {
- if (animating) {
- updateViewport(animating.toPos);
- animating = null;
- }
- }
- function normalizeCurrentValue(current) {
- const length = swiperContexts.value.length;
- if (!length) {
- return -1;
- }
- const index2 = (Math.round(current) % length + length) % length;
- if (circularEnabled.value) {
- if (length <= state.displayMultipleItems) {
- return 0;
- }
- } else if (index2 > length - state.displayMultipleItems) {
- return length - state.displayMultipleItems;
- }
- return index2;
- }
- function cancelViewportAnimation() {
- animating = null;
- }
- function animateFrameFuncProto() {
- if (!animating) {
- requestedAnimation = false;
- return;
- }
- const _animating = animating;
- const toPos = _animating.toPos;
- const acc = _animating.acc;
- const endTime = _animating.endTime;
- const source = _animating.source;
- const time = endTime - Date.now();
- if (time <= 0) {
- updateViewport(toPos);
- animating = null;
- requestedAnimation = false;
- transitionStart = null;
- const item = swiperContexts.value[state.current];
- if (item) {
- const currentItemId = item.getItemId();
- trigger("animationfinish", {}, {
- current: state.current,
- currentItemId,
- source
- });
- }
- return;
- }
- const s = acc * time * time / 2;
- const l = toPos + s;
- updateViewport(l);
- requestAnimationFrame(animateFrameFuncProto);
- }
- function animateViewport(current, source, n) {
- cancelViewportAnimation();
- const duration = state.duration;
- const length = swiperContexts.value.length;
- let position = viewportPosition;
- if (circularEnabled.value) {
- if (n < 0) {
- for (; position < current; ) {
- position += length;
- }
- for (; position - length > current; ) {
- position -= length;
- }
- } else if (n > 0) {
- for (; position > current; ) {
- position -= length;
- }
- for (; position + length < current; ) {
- position += length;
- }
- if (position + length - current < current - position) {
- position += length;
- }
- } else {
- for (; position + length < current; ) {
- position += length;
- }
- for (; position - length > current; ) {
- position -= length;
- }
- if (position + length - current < current - position) {
- position += length;
- }
- }
- } else if (source === "click") {
- current = current + state.displayMultipleItems - 1 < length ? current : 0;
- }
- animating = {
- toPos: current,
- acc: 2 * (position - current) / (duration * duration),
- endTime: Date.now() + duration,
- source
- };
- if (!requestedAnimation) {
- requestedAnimation = true;
- requestAnimationFrame(animateFrameFuncProto);
- }
- }
- function scheduleAutoplay() {
- cancelSchedule();
- const items = swiperContexts.value;
- const callback = function() {
- timer = null;
- currentChangeSource = "autoplay";
- if (circularEnabled.value) {
- state.current = normalizeCurrentValue(state.current + 1);
- } else {
- state.current = state.current + state.displayMultipleItems < items.length ? state.current + 1 : 0;
- }
- animateViewport(state.current, "autoplay", circularEnabled.value ? 1 : 0);
- timer = setTimeout(callback, state.interval);
- };
- if (!(invalid || items.length <= state.displayMultipleItems)) {
- timer = setTimeout(callback, state.interval);
- }
- }
- function resetLayout() {
- cancelSchedule();
- endViewportAnimation();
- const items = swiperContexts.value;
- for (let i = 0; i < items.length; i++) {
- items[i].updatePosition(i, props2.vertical);
- }
- viewportMoveRatio = 1;
- const slideFrameEl = slideFrameRef.value;
- if (state.displayMultipleItems === 1 && items.length) {
- const itemRect = items[0].getBoundingClientRect();
- const slideFrameRect = slideFrameEl.getBoundingClientRect();
- viewportMoveRatio = itemRect.width / slideFrameRect.width;
- if (!(viewportMoveRatio > 0 && viewportMoveRatio < 1)) {
- viewportMoveRatio = 1;
- }
- }
- const position = viewportPosition;
- viewportPosition = -2;
- const current = state.current;
- if (current >= 0) {
- invalid = false;
- if (state.userTracking) {
- updateViewport(position + current - contentTrackViewport);
- contentTrackViewport = current;
- } else {
- updateViewport(current);
- if (props2.autoplay) {
- scheduleAutoplay();
- }
- }
- } else {
- invalid = true;
- updateViewport(-state.displayMultipleItems - 1);
- }
- }
- vue.watch([() => props2.current, () => props2.currentItemId, () => [...swiperContexts.value]], () => {
- let current = -1;
- if (props2.currentItemId) {
- for (let i = 0, items = swiperContexts.value; i < items.length; i++) {
- const itemId = items[i].getItemId();
- if (itemId === props2.currentItemId) {
- current = i;
- break;
- }
- }
- }
- if (current < 0) {
- current = Math.round(props2.current) || 0;
- }
- current = current < 0 ? 0 : current;
- if (state.current !== current) {
- currentChangeSource = "";
- state.current = current;
- }
- });
- vue.watch([() => props2.vertical, () => circularEnabled.value, () => state.displayMultipleItems, () => [...swiperContexts.value]], resetLayout);
- vue.watch(() => state.interval, () => {
- if (timer) {
- cancelSchedule();
- scheduleAutoplay();
- }
- });
- function currentChanged(current, history) {
- const source = currentChangeSource;
- currentChangeSource = "";
- const items = swiperContexts.value;
- if (!source) {
- const length = items.length;
- animateViewport(current, "", circularEnabled.value && history + (length - current) % length > length / 2 ? 1 : 0);
- }
- const item = items[current];
- if (item) {
- const currentItemId = state.currentItemId = item.getItemId();
- trigger("change", {}, {
- current: state.current,
- currentItemId,
- source
- });
- }
- }
- vue.watch(() => state.current, (val, oldVal) => {
- currentChanged(val, oldVal);
- emit2("update:current", val);
- });
- vue.watch(() => state.currentItemId, (val) => {
- emit2("update:currentItemId", val);
- });
- function inintAutoplay(enable) {
- if (enable) {
- scheduleAutoplay();
- } else {
- cancelSchedule();
- }
- }
- vue.watch(() => props2.autoplay && !state.userTracking, inintAutoplay);
- inintAutoplay(props2.autoplay && !state.userTracking);
- function onSwiperDotClick(index2) {
- animateViewport(state.current = index2, currentChangeSource = "click", circularEnabled.value ? 1 : 0);
- }
- return {
- onSwiperDotClick,
- circularEnabled,
- swiperEnabled
- };
- }
- const index$m = /* @__PURE__ */ defineBuiltInComponent({
- name: "Swiper",
- props: props$e,
- emits: ["change", "transition", "animationfinish", "update:current", "update:currentItemId"],
- setup(props2, {
- slots,
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- const trigger = useCustomEvent(rootRef, emit2);
- const slidesWrapperRef = vue.ref(null);
- const slideFrameRef = vue.ref(null);
- const state = useState$1(props2);
- const slidesStyle = vue.computed(() => {
- let style = {};
- if (props2.nextMargin || props2.previousMargin) {
- style = props2.vertical ? {
- left: 0,
- right: 0,
- top: rpx2px(props2.previousMargin, true),
- bottom: rpx2px(props2.nextMargin, true)
- } : {
- top: 0,
- bottom: 0,
- left: rpx2px(props2.previousMargin, true),
- right: rpx2px(props2.nextMargin, true)
- };
- }
- return style;
- });
- const slideFrameStyle = vue.computed(() => {
- const value = Math.abs(100 / state.displayMultipleItems) + "%";
- return {
- width: props2.vertical ? "100%" : value,
- height: !props2.vertical ? "100%" : value
- };
- });
- let swiperItems = [];
- const originSwiperContexts = [];
- const swiperContexts = vue.ref([]);
- function updateSwiperContexts() {
- const contexts = [];
- for (let index2 = 0; index2 < swiperItems.length; index2++) {
- let swiperItem = swiperItems[index2];
- if (!(swiperItem instanceof Element)) {
- swiperItem = swiperItem.el;
- }
- const swiperContext = originSwiperContexts.find((context) => swiperItem === context.rootRef.value);
- if (swiperContext) {
- contexts.push(vue.markRaw(swiperContext));
- }
- }
- swiperContexts.value = contexts;
- }
- const addSwiperContext = function(swiperContext) {
- originSwiperContexts.push(swiperContext);
- updateSwiperContexts();
- };
- vue.provide("addSwiperContext", addSwiperContext);
- const removeSwiperContext = function(swiperContext) {
- const index2 = originSwiperContexts.indexOf(swiperContext);
- if (index2 >= 0) {
- originSwiperContexts.splice(index2, 1);
- updateSwiperContexts();
- }
- };
- vue.provide("removeSwiperContext", removeSwiperContext);
- const {
- onSwiperDotClick,
- circularEnabled,
- swiperEnabled
- } = useLayout(props2, state, swiperContexts, slideFrameRef, emit2, trigger);
- let createNavigationTsx = () => null;
- {
- createNavigationTsx = useSwiperNavigation(rootRef, props2, state, onSwiperDotClick, swiperContexts, circularEnabled, swiperEnabled);
- }
- return () => {
- const defaultSlots = slots.default && slots.default();
- swiperItems = flatVNode(defaultSlots);
- return vue.createVNode("uni-swiper", {
- "ref": rootRef
- }, [vue.createVNode("div", {
- "ref": slidesWrapperRef,
- "class": "uni-swiper-wrapper"
- }, [vue.createVNode("div", {
- "class": "uni-swiper-slides",
- "style": slidesStyle.value
- }, [vue.createVNode("div", {
- "ref": slideFrameRef,
- "class": "uni-swiper-slide-frame",
- "style": slideFrameStyle.value
- }, [defaultSlots], 4)], 4), props2.indicatorDots && vue.createVNode("div", {
- "class": ["uni-swiper-dots", props2.vertical ? "uni-swiper-dots-vertical" : "uni-swiper-dots-horizontal"]
- }, [swiperContexts.value.map((_, index2, array) => vue.createVNode("div", {
- "onClick": () => onSwiperDotClick(index2),
- "class": {
- "uni-swiper-dot": true,
- "uni-swiper-dot-active": index2 < state.current + state.displayMultipleItems && index2 >= state.current || index2 < state.current + state.displayMultipleItems - array.length
- },
- "style": {
- background: index2 === state.current ? props2.indicatorActiveColor : props2.indicatorColor
- }
- }, null, 14, ["onClick"]))], 2), createNavigationTsx()], 512)], 512);
- };
- }
- });
- const useSwiperNavigation = (rootRef, props2, state, onSwiperDotClick, swiperContext, circularEnabled, swiperEnabled) => {
- let isNavigationAuto = false;
- let prevDisabled = false;
- let nextDisabled = false;
- let hideNavigation = vue.ref(false);
- vue.watchEffect(() => {
- isNavigationAuto = props2.navigation === "auto";
- hideNavigation.value = props2.navigation !== true || isNavigationAuto;
- swiperAddMouseEvent();
- });
- vue.watchEffect(() => {
- const swiperItemLength = swiperContext.value.length;
- const notCircular = !circularEnabled.value;
- prevDisabled = state.current === 0 && notCircular;
- nextDisabled = state.current === swiperItemLength - 1 && notCircular || notCircular && state.current + state.displayMultipleItems >= swiperItemLength;
- if (!swiperEnabled.value) {
- prevDisabled = true;
- nextDisabled = true;
- isNavigationAuto && (hideNavigation.value = true);
- }
- });
- function navigationHover(event, type) {
- const target = event.currentTarget;
- if (!target)
- return;
- target.style.backgroundColor = type === "over" ? props2.navigationActiveColor : "";
- }
- const navigationAttr = {
- onMouseover: (event) => navigationHover(event, "over"),
- onMouseout: (event) => navigationHover(event, "out")
- };
- function navigationClick($event, type, disabled) {
- $event.stopPropagation();
- if (disabled)
- return;
- const swiperItemLength = swiperContext.value.length;
- let _current = state.current;
- switch (type) {
- case "prev":
- _current--;
- if (_current < 0 && circularEnabled.value) {
- _current = swiperItemLength - 1;
- }
- break;
- case "next":
- _current++;
- if (_current >= swiperItemLength && circularEnabled.value) {
- _current = 0;
- }
- break;
- }
- onSwiperDotClick(_current);
- }
- const createNavigationSVG = () => createSvgIconVNode(ICON_PATH_BACK, props2.navigationColor, 26);
- let setHideNavigationTimer;
- const _mousemove = (e2) => {
- clearTimeout(setHideNavigationTimer);
- const {
- clientX,
- clientY
- } = e2;
- const {
- left,
- right,
- top,
- bottom,
- width,
- height
- } = rootRef.value.getBoundingClientRect();
- let hide = false;
- if (props2.vertical) {
- hide = !(clientY - top < height / 3 || bottom - clientY < height / 3);
- } else {
- hide = !(clientX - left < width / 3 || right - clientX < width / 3);
- }
- if (hide) {
- return setHideNavigationTimer = setTimeout(() => {
- hideNavigation.value = hide;
- }, 300);
- }
- hideNavigation.value = hide;
- };
- const _mouseleave = () => {
- hideNavigation.value = true;
- };
- function swiperAddMouseEvent() {
- if (rootRef.value) {
- rootRef.value.removeEventListener("mousemove", _mousemove);
- rootRef.value.removeEventListener("mouseleave", _mouseleave);
- if (isNavigationAuto) {
- rootRef.value.addEventListener("mousemove", _mousemove);
- rootRef.value.addEventListener("mouseleave", _mouseleave);
- }
- }
- }
- function createNavigationTsx() {
- const navigationClass = {
- "uni-swiper-navigation-hide": hideNavigation.value,
- "uni-swiper-navigation-vertical": props2.vertical
- };
- if (props2.navigation) {
- return vue.createVNode(vue.Fragment, null, [vue.createVNode("div", vue.mergeProps({
- "class": ["uni-swiper-navigation uni-swiper-navigation-prev", shared.extend({
- "uni-swiper-navigation-disabled": prevDisabled
- }, navigationClass)],
- "onClick": (e2) => navigationClick(e2, "prev", prevDisabled)
- }, navigationAttr), [createNavigationSVG()], 16, ["onClick"]), vue.createVNode("div", vue.mergeProps({
- "class": ["uni-swiper-navigation uni-swiper-navigation-next", shared.extend({
- "uni-swiper-navigation-disabled": nextDisabled
- }, navigationClass)],
- "onClick": (e2) => navigationClick(e2, "next", nextDisabled)
- }, navigationAttr), [createNavigationSVG()], 16, ["onClick"])]);
- }
- return null;
- }
- return createNavigationTsx;
- };
- const props$d = {
- itemId: {
- type: String,
- default: ""
- }
- };
- const index$l = /* @__PURE__ */ defineBuiltInComponent({
- name: "SwiperItem",
- props: props$d,
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- return () => {
- return vue.createVNode("uni-swiper-item", {
- "ref": rootRef,
- "style": {
- position: "absolute",
- width: "100%",
- height: "100%"
- }
- }, [slots.default && slots.default()], 512);
- };
- }
- });
- const props$c = {
- name: {
- type: String,
- default: ""
- },
- checked: {
- type: [Boolean, String],
- default: false
- },
- type: {
- type: String,
- default: "switch"
- },
- id: {
- type: String,
- default: ""
- },
- disabled: {
- type: [Boolean, String],
- default: false
- },
- color: {
- type: String,
- default: ""
- },
- backgroundColor: {
- type: String,
- default: "#e9e9ea"
- },
- activeBackgroundColor: {
- type: String,
- default: ""
- },
- foreColor: {
- type: String,
- default: ""
- },
- activeForeColor: {
- type: String,
- default: ""
- }
- };
- const indexX$1 = /* @__PURE__ */ defineBuiltInComponent({
- name: "Switch",
- props: props$c,
- emits: ["change"],
- setup(props2, {
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- const switchChecked = vue.ref(props2.checked);
- const uniLabel = useSwitchInject(rootRef, props2, switchChecked);
- const trigger = useCustomEvent(rootRef, emit2);
- vue.watch(() => props2.checked, (val) => {
- switchChecked.value = val;
- });
- const _onClick = ($event) => {
- if (props2.disabled) {
- return;
- }
- switchChecked.value = !switchChecked.value;
- trigger("change", $event, {
- value: switchChecked.value
- });
- };
- if (!!uniLabel) {
- uniLabel.addHandler(_onClick);
- }
- let checkedCache = vue.ref(switchChecked.value);
- vue.watch(() => switchChecked.value, (val) => {
- checkedCache.value = val;
- });
- return () => {
- const {
- activeBackgroundColor,
- activeForeColor,
- backgroundColor,
- color,
- foreColor,
- type
- } = props2;
- const booleanAttrs = useBooleanAttr(props2, "disabled");
- const switchInputStyle = {};
- const fixColor = activeBackgroundColor || color;
- const bgColor = switchChecked.value ? fixColor : backgroundColor;
- if (bgColor) {
- switchInputStyle["backgroundColor"] = bgColor;
- switchInputStyle["borderColor"] = bgColor;
- }
- const thumbStyle = {};
- const fgColor = switchChecked.value ? activeForeColor : foreColor;
- if (fgColor) {
- thumbStyle["backgroundColor"] = fgColor;
- }
- let realCheckValue;
- realCheckValue = checkedCache.value;
- return vue.createVNode("uni-switch", vue.mergeProps({
- "id": props2.id,
- "ref": rootRef
- }, booleanAttrs, {
- "onClick": _onClick
- }), [vue.createVNode("div", {
- "class": "uni-switch-wrapper"
- }, [vue.withDirectives(vue.createVNode("div", {
- "class": ["uni-switch-input", [switchChecked.value ? "uni-switch-input-checked" : ""]],
- "style": switchInputStyle
- }, [vue.createVNode("div", {
- "class": ["uni-switch-thumb", [switchChecked.value ? "uni-switch-thumb-checked" : ""]],
- "style": thumbStyle
- }, null, 6)], 6), [[vue.vShow, type === "switch"]]), vue.withDirectives(vue.createVNode("div", {
- "class": "uni-checkbox-input"
- }, [realCheckValue ? createSvgIconVNode(ICON_PATH_SUCCESS_NO_CIRCLE, props2.color, 22) : ""], 512), [[vue.vShow, type === "checkbox"]])])], 16, ["id", "onClick"]);
- };
- }
- });
- function useSwitchInject(rootRef, props2, switchChecked) {
- const initialCheckedValue = props2.checked;
- const uniForm = vue.inject(uniFormKey, false);
- const uniLabel = vue.inject(uniLabelKey, false);
- const formField = {
- submit: () => {
- const data = ["", null];
- if (props2.name) {
- data[0] = props2.name;
- data[1] = rootRef.value.checked;
- }
- return data;
- },
- reset: () => {
- switchChecked.value = initialCheckedValue;
- }
- };
- if (!!uniForm) {
- uniForm.addField(formField);
- }
- return uniLabel;
- }
- const SPACE_UNICODE = {
- ensp: " ",
- emsp: " ",
- nbsp: " "
- };
- function normalizeText(text, { space, decode }) {
- let result = "";
- let isEscape = false;
- for (let char of text) {
- if (space && SPACE_UNICODE[space] && char === " ") {
- char = SPACE_UNICODE[space];
- }
- if (isEscape) {
- if (char === "n") {
- result += uniShared.LINEFEED;
- } else if (char === "\\") {
- result += "\\";
- } else {
- result += "\\" + char;
- }
- isEscape = false;
- } else {
- if (char === "\\") {
- isEscape = true;
- } else {
- result += char;
- }
- }
- }
- if (!decode) {
- return result;
- }
- return result.replace(/ /g, SPACE_UNICODE.nbsp).replace(/ /g, SPACE_UNICODE.ensp).replace(/ /g, SPACE_UNICODE.emsp).replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'");
- }
- function parseText(text, options) {
- return normalizeText(text, options).split(uniShared.LINEFEED);
- }
- const index$k = /* @__PURE__ */ defineBuiltInComponent({
- name: "Text",
- props: {
- selectable: {
- type: [Boolean, String],
- default: false
- },
- space: {
- type: String,
- default: ""
- },
- decode: {
- type: [Boolean, String],
- default: false
- }
- },
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- return () => {
- const children = [];
- if (slots.default) {
- slots.default().forEach((vnode) => {
- if (vnode.shapeFlag & 8 && vnode.type !== vue.Comment) {
- const lines = parseText(vnode.children, {
- space: props2.space,
- decode: props2.decode
- });
- const len = lines.length - 1;
- lines.forEach((line, index2) => {
- if (index2 === 0 && !line)
- ;
- else {
- children.push(vue.createTextVNode(line));
- }
- if (index2 !== len) {
- children.push(vue.createVNode("br"));
- }
- });
- } else {
- if (process.env.NODE_ENV !== "production" && vnode.shapeFlag & 6 && vnode.type.name !== "Text") {
- console.warn("Do not nest other components in the text component, as there may be display differences on different platforms.");
- }
- children.push(vnode);
- }
- });
- }
- return vue.createVNode("uni-text", {
- "ref": rootRef,
- "selectable": props2.selectable ? true : null
- }, [vue.createVNode("span", null, children)], 8, ["selectable"]);
- };
- }
- });
- const props$b = /* @__PURE__ */ shared.extend({}, props$l, {
- placeholderClass: {
- type: String,
- default: "input-placeholder"
- },
- autoHeight: {
- type: [Boolean, String],
- default: false
- },
- confirmType: {
- type: String,
- default: "return",
- validator(val) {
- return ConfirmTypes.concat("return").includes(val);
- }
- }
- });
- let fixMargin = false;
- const ConfirmTypes = ["done", "go", "next", "search", "send"];
- const index$j = /* @__PURE__ */ defineBuiltInComponent({
- name: "Textarea",
- props: props$b,
- emits: ["confirm", "linechange", ...emit],
- setup(props2, {
- emit: emit2,
- expose
- }) {
- const rootRef = vue.ref(null);
- const wrapperRef = vue.ref(null);
- const {
- fieldRef,
- state,
- scopedAttrsState,
- fixDisabledColor,
- trigger
- } = useField(props2, rootRef, emit2);
- const valueCompute = vue.computed(() => state.value.split(uniShared.LINEFEED));
- const isDone = vue.computed(() => ConfirmTypes.includes(props2.confirmType));
- const heightRef = vue.ref(0);
- const lineRef = vue.ref(null);
- vue.watch(() => heightRef.value, (height) => {
- const el = rootRef.value;
- const lineEl = lineRef.value;
- const wrapper = wrapperRef.value;
- let lineHeight = parseFloat(getComputedStyle(el).lineHeight);
- if (isNaN(lineHeight)) {
- lineHeight = lineEl.offsetHeight;
- }
- var lineCount = Math.round(height / lineHeight);
- trigger("linechange", {}, {
- height,
- heightRpx: 750 / window.innerWidth * height,
- lineCount
- });
- if (props2.autoHeight) {
- el.style.height = "auto";
- wrapper.style.height = height + "px";
- }
- });
- vue.watch(() => props2.autoHeight, (autoHeight) => {
- const el = rootRef.value;
- const wrapper = wrapperRef.value;
- if (autoHeight) {
- el.style.height = "auto";
- wrapper.style.height = heightRef.value + "px";
- } else {
- el.style.height = "";
- wrapper.style.height = "";
- }
- });
- function onResize({
- height
- }) {
- heightRef.value = height;
- }
- function confirm(event) {
- trigger("confirm", event, {
- value: state.value
- });
- }
- function onKeyDownEnter(event) {
- if (event.key !== "Enter") {
- return;
- }
- if (isDone.value) {
- event.preventDefault();
- }
- }
- function onKeyUpEnter(event) {
- if (event.key !== "Enter") {
- return;
- }
- if (isDone.value) {
- confirm(event);
- const textarea = event.target;
- !props2.confirmHold && textarea.blur();
- }
- }
- expose({
- $triggerInput: (detail) => {
- emit2("update:modelValue", detail.value);
- emit2("update:value", detail.value);
- state.value = detail.value;
- }
- });
- return () => {
- let textareaNode = props2.disabled && fixDisabledColor ? vue.createVNode("textarea", {
- "key": "disabled-textarea",
- "ref": fieldRef,
- "value": state.value,
- "tabindex": "-1",
- "readonly": !!props2.disabled,
- "maxlength": state.maxlength,
- "class": {
- "uni-textarea-textarea": true,
- "uni-textarea-textarea-fix-margin": fixMargin
- },
- "style": {
- overflowY: props2.autoHeight ? "hidden" : "auto",
- /* eslint-disable no-restricted-syntax */
- ...props2.cursorColor && {
- caretColor: props2.cursorColor
- }
- },
- "onFocus": (event) => event.target.blur()
- }, null, 46, ["value", "readonly", "maxlength", "onFocus"]) : vue.createVNode("textarea", {
- "key": "textarea",
- "ref": fieldRef,
- "value": state.value,
- "disabled": !!props2.disabled,
- "maxlength": state.maxlength,
- "enterkeyhint": props2.confirmType,
- "inputmode": props2.inputmode,
- "class": {
- "uni-textarea-textarea": true,
- "uni-textarea-textarea-fix-margin": fixMargin
- },
- "style": {
- overflowY: props2.autoHeight ? "hidden" : "auto",
- /* eslint-disable no-restricted-syntax */
- ...props2.cursorColor && {
- caretColor: props2.cursorColor
- }
- },
- "onKeydown": onKeyDownEnter,
- "onKeyup": onKeyUpEnter
- }, null, 46, ["value", "disabled", "maxlength", "enterkeyhint", "inputmode", "onKeydown", "onKeyup"]);
- return vue.createVNode("uni-textarea", {
- "ref": rootRef
- }, [vue.createVNode("div", {
- "ref": wrapperRef,
- "class": "uni-textarea-wrapper"
- }, [vue.withDirectives(vue.createVNode("div", vue.mergeProps(scopedAttrsState.attrs, {
- "style": props2.placeholderStyle,
- "class": ["uni-textarea-placeholder", props2.placeholderClass]
- }), [props2.placeholder], 16), [[vue.vShow, !state.value.length]]), vue.createVNode("div", {
- "ref": lineRef,
- "class": "uni-textarea-line"
- }, [" "], 512), vue.createVNode("div", {
- "class": "uni-textarea-compute"
- }, [valueCompute.value.map((item) => vue.createVNode("div", null, [item.trim() ? item : "."])), vue.createVNode(ResizeSensor, {
- "initial": true,
- "onResize": onResize
- }, null, 8, ["initial", "onResize"])]), props2.confirmType === "search" ? vue.createVNode("form", {
- "action": "",
- "onSubmit": () => false,
- "class": "uni-input-form"
- }, [textareaNode], 40, ["onSubmit"]) : textareaNode], 512)], 512);
- };
- }
- });
- const index$i = /* @__PURE__ */ defineBuiltInComponent({
- name: "View",
- props: /* @__PURE__ */ shared.extend({}, hoverProps),
- setup(props2, {
- slots
- }) {
- const rootRef = vue.ref(null);
- const {
- hovering,
- binding
- } = useHover(props2);
- return () => {
- const hoverClass = props2.hoverClass;
- if (hoverClass && hoverClass !== "none") {
- return vue.createVNode("uni-view", vue.mergeProps({
- "class": hovering.value ? hoverClass : "",
- "ref": rootRef
- }, binding), [slots.default && slots.default()], 16);
- }
- return vue.createVNode("uni-view", {
- "ref": rootRef
- }, [slots.default && slots.default()], 512);
- };
- }
- });
- function isHTMlElement(node) {
- return !!(node && node.nodeType === 1);
- }
- function getChildren(root) {
- const children = [];
- if (root) {
- walk(root, children);
- }
- return children;
- }
- const ChildType = ["ListItem", "StickySection", "StickyHeader"];
- function walk(vnode, children) {
- if (vnode.component && vnode.component.type && vnode.component.type.name && ChildType.includes(vnode.component.type.name)) {
- children.push(vnode);
- } else if (vnode.component) {
- walk(vnode.component.subTree, children);
- } else if (vnode.shapeFlag & 16) {
- const vnodes = vnode.children;
- for (let i = 0; i < vnodes.length; i++) {
- walk(vnodes[i], children);
- }
- }
- }
- function traverseListView(visibleVNode, callback) {
- const children = getChildren(visibleVNode);
- for (let i = 0; i < children.length; i++) {
- const child = children[i];
- callback(child);
- }
- }
- function traverseStickySection(stickySectionVNode, callback) {
- const children = getChildren(stickySectionVNode.component.subTree);
- for (let i = 0; i < children.length; i++) {
- const child = children[i];
- callback(child);
- }
- }
- const props$a = {
- direction: {
- type: String,
- default: "vertical",
- validator: (val) => {
- return ["none", "vertical", "horizontal"].includes(val);
- }
- },
- showScrollbar: {
- type: [Boolean, String],
- default: true
- },
- upperThreshold: {
- type: [Number, String],
- default: 50
- },
- lowerThreshold: {
- type: [Number, String],
- default: 50
- },
- scrollTop: {
- type: [Number, String],
- default: 0
- },
- scrollLeft: {
- type: [Number, String],
- default: 0
- },
- // 暂不支持
- // scrollIntoView: {
- // type: String,
- // default: '',
- // },
- scrollWithAnimation: {
- type: [Boolean, String],
- default: false
- },
- refresherEnabled: {
- type: [Boolean, String],
- default: false
- },
- refresherThreshold: {
- type: Number,
- default: 45
- },
- refresherDefaultStyle: {
- type: String,
- default: "black"
- },
- refresherBackground: {
- type: String,
- default: "transparent"
- },
- refresherTriggered: {
- type: [Boolean, String],
- default: false
- }
- };
- const index$h = /* @__PURE__ */ defineBuiltInComponent({
- name: "ListView",
- props: props$a,
- emits: [
- "scroll",
- "scrolltoupper",
- "scrolltolower",
- // 有触发时机,但是由于没有原生事件暂不支持
- // 'scrollend',
- "refresherrefresh",
- "refresherrestore",
- "refresherpulling",
- "refresherabort",
- "update:refresherTriggered"
- ],
- setup(props2, {
- slots,
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- const containerRef = vue.ref(null);
- const visibleRef = vue.ref(null);
- const {
- isVertical,
- state
- } = useListViewState(props2);
- vue.provide("__listViewIsVertical", isVertical);
- vue.provide("__listViewDefaultItemSize", state.defaultItemSize);
- const onItemChange = uniShared.debounce(() => {
- vue.nextTick(() => {
- _rearrange();
- });
- }, 10, {
- clearTimeout,
- setTimeout
- });
- vue.provide("__listViewRegisterItem", (status) => {
- onItemChange();
- });
- vue.provide("__listViewUnregisterItem", (status) => {
- onItemChange();
- });
- const trigger = useCustomEvent(rootRef, emit2);
- handleTouchEvent(isVertical, containerRef, props2, state, trigger, emit2);
- function resetContainerSize() {
- const containerEl = containerRef.value;
- state.containerSize = isVertical.value ? containerEl.clientHeight : containerEl.clientWidth;
- }
- vue.watch(isVertical, () => {
- resetContainerSize();
- });
- vue.computed(() => {
- const val = Number(props2.upperThreshold);
- return isNaN(val) ? 50 : val;
- });
- vue.computed(() => {
- const val = Number(props2.lowerThreshold);
- return isNaN(val) ? 50 : val;
- });
- const scrollTopNumber = vue.computed(() => {
- return Number(props2.scrollTop) || 0;
- });
- const scrollLeftNumber = vue.computed(() => {
- return Number(props2.scrollLeft) || 0;
- });
- vue.watch(scrollTopNumber, (val) => {
- if (containerRef.value) {
- containerRef.value.scrollTop = val;
- }
- });
- vue.watch(scrollLeftNumber, (val) => {
- if (containerRef.value) {
- containerRef.value.scrollLeft = val;
- }
- });
- function forceRearrange() {
- traverseAllItems(visibleVNode, (child) => {
- const exposed = child.component.exposed;
- if (exposed == null ? void 0 : exposed.__listViewChildStatus.seen.value) {
- exposed.__listViewChildStatus.seen.value = false;
- }
- });
- vue.nextTick(() => {
- vue.nextTick(() => {
- _rearrange();
- });
- });
- }
- function onResize() {
- resetContainerSize();
- forceRearrange();
- }
- function traverseAllItems(visibleVNode2, callback) {
- traverseListView(visibleVNode2, (child) => {
- var _a;
- const childType = (_a = child.component) == null ? void 0 : _a.type.name;
- if (childType === "StickySection") {
- traverseStickySection(child, function() {
- var _a2;
- const childType2 = (_a2 = child.component) == null ? void 0 : _a2.type.name;
- if (childType2 === "ListItem") {
- callback(child);
- }
- });
- } else if (childType === "ListItem") {
- callback(child);
- } else if (childType === "StickyHeader")
- ;
- else if (child.component && child.component.subTree) {
- traverseAllItems(child.component.subTree, callback);
- }
- });
- }
- function _rearrange() {
- rearrange(visibleVNode, containerRef, isVertical, state);
- }
- const containerStyle = vue.computed(() => {
- return `${props2.direction === "none" ? "overflow: hidden;" : isVertical.value ? "overflow-y: auto;" : "overflow-x: auto;"}scroll-behavior: ${props2.scrollWithAnimation ? "smooth" : "auto"};`;
- });
- const contentStyle = vue.computed(() => {
- return `position: relative; ${isVertical.value ? "height" : "width"}: ${state.totalSize}px;`;
- });
- const visibleStyle = vue.computed(() => {
- return `position: absolute; ${isVertical.value ? "width" : "height"}: 100%; ${isVertical.value ? "top" : "left"}: ${state.placehoderSize}px;`;
- });
- let visibleVNode = null;
- return () => {
- const {
- refresherEnabled,
- refresherBackground,
- refresherDefaultStyle,
- refresherThreshold
- } = props2;
- const {
- refresherHeight,
- refreshState
- } = state;
- const defaultSlot = slots.default && slots.default();
- visibleVNode = vue.createVNode("div", {
- "ref": visibleRef,
- "class": "uni-list-view-visible",
- "style": visibleStyle.value
- }, [defaultSlot], 4);
- return vue.createVNode("uni-list-view", {
- "ref": rootRef,
- "class": "uni-list-view"
- }, [vue.createVNode("div", {
- "ref": containerRef,
- "class": `uni-list-view-container ${props2.showScrollbar === false ? "uni-list-view-scrollbar-hidden" : ""}`,
- "style": containerStyle.value
- }, [refresherEnabled ? vue.createVNode(Refresher, {
- "refreshState": refreshState,
- "refresherHeight": refresherHeight,
- "refresherThreshold": refresherThreshold,
- "refresherDefaultStyle": refresherDefaultStyle,
- "refresherBackground": refresherBackground
- }, {
- default: () => [refresherDefaultStyle == "none" ? slots.refresher && slots.refresher() : null]
- }, 8, ["refreshState", "refresherHeight", "refresherThreshold", "refresherDefaultStyle", "refresherBackground"]) : null, vue.createVNode("div", {
- "class": "uni-list-view-content",
- "style": contentStyle.value
- }, [visibleVNode], 4)], 4), vue.createVNode(ResizeSensor, {
- "onResize": onResize
- }, null, 8, ["onResize"])], 512);
- };
- }
- });
- function useListViewState(props2) {
- const isVertical = vue.computed(() => {
- return props2.direction !== "horizontal";
- });
- const state = vue.reactive({
- defaultItemSize: 40,
- totalSize: 0,
- placehoderSize: 0,
- visibleSize: 0,
- containerSize: 0,
- cacheScreenCount: 5,
- loadScreenThreshold: 3,
- refresherHeight: 0,
- refreshState: ""
- });
- return {
- state,
- isVertical
- };
- }
- function rearrange(visibleVNode, containerRef, isVertical, state) {
- if (!visibleVNode) {
- return;
- }
- const containerEl = containerRef.value;
- if (!containerEl) {
- return;
- }
- const offset = isVertical.value ? containerEl.scrollTop : containerEl.scrollLeft;
- const offsetMin = Math.max(offset - state.containerSize * state.cacheScreenCount, 0);
- const offsetMax = Math.max(offset + state.containerSize * (state.cacheScreenCount + 1), offsetMin + 1);
- let tempTotalSize = 0;
- let tempVisibleSize = 0;
- let tempPlaceholderSize = 0;
- let start = false, end = false;
- function callback(child) {
- var _a, _b, _c;
- const childType = (_a = child.component) == null ? void 0 : _a.type.name;
- const status = (_c = (_b = child.component) == null ? void 0 : _b.exposed) == null ? void 0 : _c.__listViewChildStatus;
- if (childType === "StickySection") {
- const {
- headSize,
- tailSize
- } = status;
- tempTotalSize += headSize.value;
- traverseStickySection(child, callback);
- tempTotalSize += tailSize.value;
- } else if (childType === "ListItem") {
- const {
- cachedSize
- } = status;
- const itemSize = cachedSize;
- tempTotalSize += itemSize;
- if (!start && tempTotalSize > offsetMin) {
- start = true;
- }
- if (!start) {
- tempPlaceholderSize += itemSize;
- }
- if (start && !end) {
- tempVisibleSize += itemSize;
- status.visible.value = true;
- } else {
- status.visible.value = false;
- }
- if (!end && tempTotalSize >= offsetMax) {
- end = true;
- }
- } else if (childType === "StickyHeader") {
- const {
- cachedSize
- } = status;
- tempTotalSize += cachedSize;
- tempVisibleSize += cachedSize;
- }
- }
- traverseListView(visibleVNode, callback);
- state.totalSize = tempTotalSize;
- state.visibleSize = tempVisibleSize;
- state.placehoderSize = tempPlaceholderSize;
- }
- function handleTouchEvent(isVertical, containerRef, props2, state, trigger, emit2) {
- let beforeRefreshing = false;
- let triggerAbort = false;
- let touchStart = {
- x: 0,
- y: 0
- };
- let touchEnd = {
- x: 0,
- y: props2.refresherThreshold
- };
- function _setRefreshState(_state) {
- if (!props2.refresherEnabled)
- return;
- switch (_state) {
- case "refreshing":
- state.refresherHeight = props2.refresherThreshold;
- if (!beforeRefreshing) {
- beforeRefreshing = true;
- trigger("refresherpulling", {}, {
- deltaY: state.refresherHeight,
- dy: state.refresherHeight
- });
- trigger("refresherrefresh", {}, {
- dy: touchEnd.y - touchStart.y
- });
- emit2("update:refresherTriggered", true);
- }
- break;
- case "restore":
- case "refresherabort":
- beforeRefreshing = false;
- state.refresherHeight = 0;
- if (_state === "restore") {
- triggerAbort = false;
- trigger("refresherrestore", {}, {
- dy: touchEnd.y - touchStart.y
- });
- }
- if (_state === "refresherabort" && triggerAbort) {
- triggerAbort = false;
- trigger("refresherabort", {}, {
- dy: touchEnd.y - touchStart.y
- });
- }
- break;
- }
- state.refreshState = _state;
- }
- vue.watch(() => props2.refresherTriggered, (val) => {
- if (val === true) {
- _setRefreshState("refreshing");
- } else if (val === false) {
- _setRefreshState("restore");
- }
- });
- }
- function getSize(isVertical, el) {
- var style = window.getComputedStyle(el);
- if (isVertical) {
- return parseFloat(style.marginTop) + el.getBoundingClientRect().height + parseFloat(style.marginBottom);
- } else {
- return parseFloat(style.marginLeft) + el.getBoundingClientRect().width + parseFloat(style.marginRight);
- }
- }
- const index$g = /* @__PURE__ */ defineBuiltInComponent({
- name: "ListItem",
- props: {},
- setup(props2, {
- slots,
- expose
- }) {
- const rootRef = vue.ref(null);
- const isVertical = vue.inject("__listViewIsVertical");
- const visible = vue.ref(false);
- const seen = vue.ref(false);
- const status = {
- type: "ListItem",
- visible,
- cachedSize: 0,
- seen
- };
- expose({
- __listViewChildStatus: status
- });
- vue.inject("__listViewRegisterItem");
- vue.inject("__listViewUnregisterItem");
- const realVisible = vue.computed(() => {
- return visible.value || !status.seen.value;
- });
- return () => {
- vue.nextTick(() => {
- const rootNode = rootRef.value;
- if (realVisible.value && isHTMlElement(rootNode)) {
- status.cachedSize = getSize(isVertical.value, rootNode);
- seen.value = true;
- }
- });
- if (!realVisible.value) {
- return null;
- }
- return vue.createVNode("uni-list-item", {
- "ref": rootRef
- }, [slots.default && slots.default()], 512);
- };
- }
- });
- const index$f = /* @__PURE__ */ defineBuiltInComponent({
- name: "StickySection",
- props: {
- padding: {
- type: Array,
- default: [0, 0, 0, 0]
- }
- },
- setup(props2, {
- slots,
- expose
- }) {
- const rootRef = vue.ref(null);
- const isVertical = vue.inject("__listViewIsVertical");
- const style = vue.computed(() => {
- return {
- paddingTop: props2.padding[0] + "px",
- paddingRight: props2.padding[1] + "px",
- paddingBottom: props2.padding[2] + "px",
- paddingLeft: props2.padding[3] + "px"
- };
- });
- const headSize = vue.computed(() => {
- return isVertical ? props2.padding[0] : props2.padding[3];
- });
- const tailSize = vue.computed(() => {
- return isVertical ? props2.padding[2] : props2.padding[1];
- });
- const status = {
- type: "StickySection",
- headSize,
- tailSize
- };
- expose({
- __listViewChildStatus: status
- });
- return () => {
- var _a;
- return vue.createVNode("uni-sticky-section", {
- "ref": rootRef,
- "style": style.value
- }, [(_a = slots.default) == null ? void 0 : _a.call(slots)], 4);
- };
- }
- });
- const index$e = /* @__PURE__ */ defineBuiltInComponent({
- name: "StickyHeader",
- props: {
- padding: {
- type: Array,
- default: [0, 0, 0, 0]
- }
- },
- setup(props2, {
- slots,
- expose
- }) {
- const rootRef = vue.ref(null);
- const isVertical = vue.inject("__listViewIsVertical");
- const style = vue.computed(() => {
- return {
- paddingTop: props2.padding[0] + "px",
- paddingRight: props2.padding[1] + "px",
- paddingBottom: props2.padding[2] + "px",
- paddingLeft: props2.padding[3] + "px",
- top: 0 - props2.padding[0] + "px"
- };
- });
- const status = {
- type: "StickyHeader",
- cachedSize: 0
- };
- expose({
- __listViewChildStatus: status
- });
- return () => {
- var _a;
- vue.nextTick(() => {
- const rootEl = rootRef.value;
- const rect = rootEl.getBoundingClientRect();
- status.cachedSize = isVertical ? rect.height : rect.width;
- });
- return vue.createVNode("uni-sticky-header", {
- "ref": rootRef,
- "style": style.value
- }, [(_a = slots.default) == null ? void 0 : _a.call(slots)], 4);
- };
- }
- });
- function useSubscribe(callback, name, multiple, pageId) {
- const instance = vue.getCurrentInstance();
- instance.proxy;
- }
- let index$d = 0;
- function useContextInfo(_id) {
- useCurrentPageId();
- const instance = vue.getCurrentInstance();
- const vm = instance.proxy;
- const type = vm.$options.name.toLowerCase();
- const id2 = _id || vm.id || `context${index$d++}`;
- return `${type}.${id2}`;
- }
- function injectLifecycleHook(name, hook, publicThis, instance) {
- if (shared.isFunction(hook)) {
- vue.injectHook(name, hook.bind(publicThis), instance);
- }
- }
- function initHooks(options, instance, publicThis) {
- var _b;
- const mpType = options.mpType || publicThis.$mpType;
- if (!mpType || mpType === "component") {
- return;
- }
- Object.keys(options).forEach((name) => {
- if (uniShared.isUniLifecycleHook(name, options[name], false)) {
- const hooks = options[name];
- if (shared.isArray(hooks)) {
- hooks.forEach(
- (hook) => injectLifecycleHook(name, hook, publicThis, instance)
- );
- } else {
- injectLifecycleHook(name, hooks, publicThis, instance);
- }
- }
- });
- if (mpType === "page") {
- instance.__isVisible = true;
- try {
- let query = instance.attrs.__pageQuery;
- if (true) {
- query = uniShared.decodedQuery(query);
- }
- if (false)
- ;
- invokeHook(publicThis, uniShared.ON_LOAD, query);
- delete instance.attrs.__pageQuery;
- if (true) {
- if (((_b = publicThis.$page) == null ? void 0 : _b.openType) !== "preloadPage") {
- invokeHook(publicThis, uniShared.ON_SHOW);
- }
- }
- } catch (e2) {
- console.error(e2.message + uniShared.LINEFEED + e2.stack);
- }
- }
- }
- function applyOptions(options, instance, publicThis) {
- initHooks(options, instance, publicThis);
- }
- function set(target, key, val) {
- return target[key] = val;
- }
- function $callMethod(method, ...args) {
- const fn = this[method];
- if (fn) {
- return fn(...args);
- }
- console.error(`method ${method} not found`);
- return null;
- }
- function createErrorHandler(app) {
- return function errorHandler(err, instance, _info) {
- if (!instance) {
- throw err;
- }
- const appInstance = app._instance;
- if (!appInstance || !appInstance.proxy) {
- throw err;
- }
- {
- invokeHook(appInstance.proxy, uniShared.ON_ERROR, err);
- }
- };
- }
- function mergeAsArray(to, from) {
- return to ? [...new Set([].concat(to, from))] : from;
- }
- function initOptionMergeStrategies(optionMergeStrategies) {
- uniShared.UniLifecycleHooks.forEach((name) => {
- optionMergeStrategies[name] = mergeAsArray;
- });
- }
- let realAtob;
- const b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- const b64re = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;
- if (typeof atob !== "function") {
- realAtob = function(str) {
- str = String(str).replace(/[\t\n\f\r ]+/g, "");
- if (!b64re.test(str)) {
- throw new Error(
- "Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded."
- );
- }
- str += "==".slice(2 - (str.length & 3));
- var bitmap;
- var result = "";
- var r1;
- var r2;
- var i = 0;
- for (; i < str.length; ) {
- bitmap = b64.indexOf(str.charAt(i++)) << 18 | b64.indexOf(str.charAt(i++)) << 12 | (r1 = b64.indexOf(str.charAt(i++))) << 6 | (r2 = b64.indexOf(str.charAt(i++)));
- result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255) : r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255) : String.fromCharCode(
- bitmap >> 16 & 255,
- bitmap >> 8 & 255,
- bitmap & 255
- );
- }
- return result;
- };
- } else {
- realAtob = atob;
- }
- function b64DecodeUnicode(str) {
- return decodeURIComponent(
- realAtob(str).split("").map(function(c) {
- return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
- }).join("")
- );
- }
- function getCurrentUserInfo() {
- const token = uni.getStorageSync("uni_id_token") || "";
- const tokenArr = token.split(".");
- if (!token || tokenArr.length !== 3) {
- return {
- uid: null,
- role: [],
- permission: [],
- tokenExpired: 0
- };
- }
- let userInfo;
- try {
- userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]));
- } catch (error) {
- throw new Error("获取当前用户信息出错,详细错误信息为:" + error.message);
- }
- userInfo.tokenExpired = userInfo.exp * 1e3;
- delete userInfo.exp;
- delete userInfo.iat;
- return userInfo;
- }
- function uniIdMixin(globalProperties) {
- globalProperties.uniIDHasRole = function(roleId) {
- const { role } = getCurrentUserInfo();
- return role.indexOf(roleId) > -1;
- };
- globalProperties.uniIDHasPermission = function(permissionId) {
- const { permission } = getCurrentUserInfo();
- return this.uniIDHasRole("admin") || permission.indexOf(permissionId) > -1;
- };
- globalProperties.uniIDTokenValid = function() {
- const { tokenExpired } = getCurrentUserInfo();
- return tokenExpired > Date.now();
- };
- }
- function initApp$1(app) {
- const appConfig = app._context.config;
- appConfig.errorHandler = uniShared.invokeCreateErrorHandler(app, createErrorHandler);
- initOptionMergeStrategies(appConfig.optionMergeStrategies);
- const globalProperties = appConfig.globalProperties;
- {
- if (__UNI_FEATURE_UNI_CLOUD__) {
- uniIdMixin(globalProperties);
- }
- }
- {
- globalProperties.$set = set;
- globalProperties.$applyOptions = applyOptions;
- globalProperties.$callMethod = $callMethod;
- }
- {
- uniShared.invokeCreateVueAppHook(app);
- }
- }
- const pageMetaKey = PolySymbol(process.env.NODE_ENV !== "production" ? "UniPageMeta" : "upm");
- function usePageMeta() {
- return vue.inject(pageMetaKey);
- }
- function providePageMeta(id2) {
- const pageMeta = initPageMeta(id2);
- vue.provide(pageMetaKey, pageMeta);
- return pageMeta;
- }
- function usePageRoute() {
- if (__UNI_FEATURE_PAGES__) {
- return vueRouter.useRoute();
- }
- const url = location.href;
- const searchPos = url.indexOf("?");
- const hashPos = url.indexOf("#", searchPos > -1 ? searchPos : 0);
- let query = {};
- if (searchPos > -1) {
- query = uniShared.parseQuery(
- url.slice(searchPos + 1, hashPos > -1 ? hashPos : url.length)
- );
- }
- const { meta } = __uniRoutes[0];
- const path = uniShared.addLeadingSlash(meta.route);
- return {
- meta,
- query,
- path,
- matched: [{ path }]
- };
- }
- function initPageMeta(id2) {
- if (__UNI_FEATURE_PAGES__) {
- return vue.reactive(
- normalizePageMeta(
- JSON.parse(
- JSON.stringify(
- initRouteMeta(
- vueRouter.useRoute().meta,
- id2
- )
- )
- )
- )
- );
- }
- return vue.reactive(
- normalizePageMeta(
- JSON.parse(JSON.stringify(initRouteMeta(__uniRoutes[0].meta, id2)))
- )
- );
- }
- function normalizePageMeta(pageMeta) {
- if (__UNI_FEATURE_PULL_DOWN_REFRESH__) {
- const { enablePullDownRefresh, navigationBar } = pageMeta;
- {
- const pullToRefresh = normalizePullToRefreshRpx(
- shared.extend(
- {
- support: true,
- color: "#2BD009",
- style: "circle",
- height: 70,
- range: 150,
- offset: 0
- },
- pageMeta.pullToRefresh
- )
- );
- const { type, style } = navigationBar;
- if (style !== "custom" && type !== "transparent") {
- pullToRefresh.offset += uniShared.NAVBAR_HEIGHT + 0;
- }
- pageMeta.pullToRefresh = pullToRefresh;
- }
- }
- if (__UNI_FEATURE_NAVIGATIONBAR__) {
- const { navigationBar } = pageMeta;
- const { titleSize, titleColor, backgroundColor } = navigationBar;
- navigationBar.titleText = navigationBar.titleText || "";
- navigationBar.type = navigationBar.type || "default";
- navigationBar.titleSize = titleSize || "16px";
- navigationBar.titleColor = titleColor || "#000000";
- navigationBar.backgroundColor = backgroundColor || "#F8F8F8";
- __UNI_FEATURE_I18N_LOCALE__ && initNavigationBarI18n(navigationBar);
- }
- return pageMeta;
- }
- function getStateId() {
- {
- return 1;
- }
- }
- function removeNonTabBarPages() {
- const curTabBarPageVm = getCurrentPageVm();
- if (!curTabBarPageVm) {
- return;
- }
- const pagesMap = getCurrentPagesMap();
- const keys = pagesMap.keys();
- for (const routeKey of keys) {
- const page = pagesMap.get(routeKey);
- if (!page.$.__isTabBar) {
- removePage(routeKey);
- } else {
- page.$.__isActive = false;
- }
- }
- if (curTabBarPageVm.$.__isTabBar) {
- curTabBarPageVm.$.__isVisible = false;
- invokeHook(curTabBarPageVm, uniShared.ON_HIDE);
- }
- }
- function isSamePage(url, $page) {
- return url === $page.fullPath || url === "/" && $page.meta.isEntry;
- }
- function getTabBarPageId(url) {
- const pages = getCurrentPagesMap().values();
- for (const page of pages) {
- const $page = page.$page;
- if (isSamePage(url, $page)) {
- page.$.__isActive = true;
- return $page.id;
- }
- }
- }
- function removeLastPage() {
- const page = getCurrentPage();
- if (!page) {
- return;
- }
- const $page = page.$page;
- removePage(normalizeRouteKey($page.path, $page.id));
- }
- function removeAllPages() {
- const keys = getCurrentPagesMap().keys();
- for (const routeKey of keys) {
- removePage(routeKey);
- }
- }
- function navigate({ type, url, tabBarText, events, isAutomatedTesting }, __id__) {
- const router = getApp().$router;
- const { path, query } = uniShared.parseUrl(url);
- return new Promise((resolve, reject) => {
- const state = createPageState(type, __id__);
- router[type === "navigateTo" ? "push" : "replace"]({
- path,
- query,
- state,
- force: true
- }).then((failure) => {
- if (vueRouter.isNavigationFailure(failure)) {
- return reject(failure.message);
- }
- if (type === "switchTab") {
- router.currentRoute.value.meta.tabBarText = tabBarText;
- }
- if (type === "navigateTo") {
- const meta = router.currentRoute.value.meta;
- if (!meta.eventChannel) {
- meta.eventChannel = new uniShared.EventChannel(state.__id__, events);
- } else if (events) {
- Object.keys(events).forEach((eventName) => {
- meta.eventChannel._addListener(
- eventName,
- "on",
- events[eventName]
- );
- });
- meta.eventChannel._clearCache();
- }
- return isAutomatedTesting ? resolve({
- __id__: state.__id__
- }) : resolve({
- eventChannel: meta.eventChannel
- });
- }
- return isAutomatedTesting ? resolve({ __id__: state.__id__ }) : resolve();
- });
- });
- }
- function handleBeforeEntryPageRoutes() {
- if (entryPageState.handledBeforeEntryPageRoutes) {
- return;
- }
- entryPageState.handledBeforeEntryPageRoutes = true;
- const navigateToPages = [...navigateToPagesBeforeEntryPages];
- navigateToPagesBeforeEntryPages.length = 0;
- navigateToPages.forEach(
- ({ args, resolve, reject }) => (
- // @ts-expect-error
- navigate(args).then(resolve).catch(reject)
- )
- );
- const switchTabPages = [...switchTabPagesBeforeEntryPages];
- switchTabPagesBeforeEntryPages.length = 0;
- switchTabPages.forEach(
- ({ args, resolve, reject }) => (removeNonTabBarPages(), navigate(args, getTabBarPageId(args.url)).then(resolve).catch(reject))
- );
- const redirectToPages = [...redirectToPagesBeforeEntryPages];
- redirectToPagesBeforeEntryPages.length = 0;
- redirectToPages.forEach(
- ({ args, resolve, reject }) => (removeLastPage(), navigate(args).then(resolve).catch(reject))
- );
- const reLaunchPages = [...reLaunchPagesBeforeEntryPages];
- reLaunchPagesBeforeEntryPages.length = 0;
- reLaunchPages.forEach(
- ({ args, resolve, reject }) => (removeAllPages(), navigate(args).then(resolve).catch(reject))
- );
- }
- let tabBar;
- function useTabBar() {
- if (!tabBar) {
- tabBar = __uniConfig.tabBar && vue.reactive(initTabBarI18n(__uniConfig.tabBar));
- }
- return tabBar;
- }
- const envMethod = /* @__PURE__ */ (() => "env")();
- function normalizeWindowBottom(windowBottom) {
- return envMethod ? `calc(${windowBottom}px + ${envMethod}(safe-area-inset-bottom))` : `${windowBottom}px`;
- }
- const SEP = "$$";
- const currentPagesMap = /* @__PURE__ */ new Map();
- const entryPageState = {
- handledBeforeEntryPageRoutes: false
- };
- const navigateToPagesBeforeEntryPages = [];
- const switchTabPagesBeforeEntryPages = [];
- const redirectToPagesBeforeEntryPages = [];
- const reLaunchPagesBeforeEntryPages = [];
- function pruneCurrentPages() {
- currentPagesMap.forEach((page, id2) => {
- if (page.$.isUnmounted) {
- currentPagesMap.delete(id2);
- }
- });
- }
- function getCurrentPagesMap() {
- return currentPagesMap;
- }
- function getCurrentPages$1() {
- const curPages = [];
- const pages = currentPagesMap.values();
- for (const page of pages) {
- if (page.$.__isTabBar) {
- if (page.$.__isActive) {
- curPages.push(page);
- }
- } else {
- curPages.push(page);
- }
- }
- return curPages;
- }
- function removeRouteCache(routeKey) {
- const vnode = pageCacheMap.get(routeKey);
- if (vnode) {
- pageCacheMap.delete(routeKey);
- routeCache.pruneCacheEntry(vnode);
- }
- }
- function removePage(routeKey, removeRouteCaches = true) {
- const pageVm = currentPagesMap.get(routeKey);
- pageVm.$.__isUnload = true;
- invokeHook(pageVm, uniShared.ON_UNLOAD);
- currentPagesMap.delete(routeKey);
- removeRouteCaches && removeRouteCache(routeKey);
- }
- let id = /* @__PURE__ */ getStateId();
- function createPageState(type, __id__) {
- return {
- __id__: __id__ || ++id,
- __type__: type
- };
- }
- function initPublicPage(route) {
- const meta = usePageMeta();
- if (!__UNI_FEATURE_PAGES__) {
- return initPageInternalInstance("navigateTo", __uniRoutes[0].path, {}, meta);
- }
- let fullPath = route.fullPath;
- if (route.meta.isEntry && fullPath.indexOf(route.meta.route) === -1) {
- fullPath = "/" + route.meta.route + fullPath.replace("/", "");
- }
- return initPageInternalInstance("navigateTo", fullPath, {}, meta);
- }
- function initPage(vm) {
- const route = vm.$route;
- const page = initPublicPage(route);
- initPageVm(vm, page);
- {
- const pageMeta = page.meta;
- vm.$setPageStyle = (style) => {
- for (const key in style) {
- switch (key) {
- case "navigationBarBackgroundColor":
- pageMeta.navigationBar.backgroundColor = style[key];
- break;
- case "navigationBarTextStyle":
- const textStyle = style[key];
- if (textStyle == null) {
- continue;
- }
- pageMeta.navigationBar.titleColor = ["black", "white"].includes(
- textStyle
- ) ? uniShared.normalizeTitleColor(textStyle || "") : textStyle;
- break;
- case "navigationBarTitleText":
- pageMeta.navigationBar.titleText = style[key];
- break;
- case "titleImage":
- pageMeta.navigationBar.titleImage = style[key];
- break;
- case "navigationStyle":
- pageMeta.navigationBar.style = style[key];
- break;
- default:
- pageMeta[key] = style[key];
- break;
- }
- }
- };
- vm.$getPageStyle = () => new UTSJSONObject({
- navigationBarBackgroundColor: pageMeta.navigationBar.backgroundColor,
- navigationBarTextStyle: pageMeta.navigationBar.titleColor,
- navigationBarTitleText: pageMeta.navigationBar.titleText,
- titleImage: pageMeta.navigationBar.titleImage || "",
- navigationStyle: pageMeta.navigationBar.style || "default",
- disableScroll: pageMeta.disableScroll || false,
- enablePullDownRefresh: pageMeta.enablePullDownRefresh || false,
- onReachBottomDistance: pageMeta.onReachBottomDistance || uniShared.ON_REACH_BOTTOM_DISTANCE,
- backgroundColorContent: pageMeta.backgroundColorContent
- });
- }
- currentPagesMap.set(normalizeRouteKey(page.path, page.id), vm);
- if (currentPagesMap.size === 1) {
- setTimeout(() => {
- handleBeforeEntryPageRoutes();
- }, 0);
- }
- }
- function normalizeRouteKey(path, id2) {
- return path + SEP + id2;
- }
- function useKeepAliveRoute() {
- const route = vueRouter.useRoute();
- const routeKey = vue.computed(
- () => normalizeRouteKey("/" + route.meta.route, getStateId())
- );
- const isTabBar = vue.computed(() => route.meta.isTabBar);
- return {
- routeKey,
- isTabBar,
- routeCache
- };
- }
- const pageCacheMap = /* @__PURE__ */ new Map();
- const routeCache = {
- get(key) {
- return pageCacheMap.get(key);
- },
- set(key, value) {
- pruneRouteCache(key);
- pageCacheMap.set(key, value);
- },
- delete(key) {
- const vnode = pageCacheMap.get(key);
- if (!vnode) {
- return;
- }
- pageCacheMap.delete(key);
- },
- forEach(fn) {
- pageCacheMap.forEach(fn);
- }
- };
- function isTabBarVNode(vnode) {
- return vnode.props.type === "tabBar";
- }
- function pruneRouteCache(key) {
- const pageId = parseInt(key.split(SEP)[1]);
- if (!pageId) {
- return;
- }
- routeCache.forEach((vnode, key2) => {
- const cPageId = parseInt(key2.split(SEP)[1]);
- if (cPageId && cPageId > pageId) {
- if (__UNI_FEATURE_TABBAR__ && isTabBarVNode(vnode)) {
- return;
- }
- routeCache.delete(key2);
- routeCache.pruneCacheEntry(vnode);
- vue.nextTick(() => pruneCurrentPages());
- }
- });
- }
- function initRouter(app) {
- const router = vueRouter.createRouter(createRouterOptions());
- router.beforeEach((to, from) => {
- if (to && from && to.meta.isTabBar && from.meta.isTabBar) {
- saveTabBarScrollPosition(from.meta.tabBarIndex);
- }
- });
- app.router = router;
- app.use(router);
- }
- let positionStore = /* @__PURE__ */ Object.create(null);
- function getTabBarScrollPosition(id2) {
- return positionStore[id2];
- }
- function saveTabBarScrollPosition(id2) {
- if (typeof window !== "undefined") {
- positionStore[id2] = {
- left: window.pageXOffset,
- top: window.pageYOffset
- };
- }
- }
- const scrollBehavior = (to, from, savedPosition) => {
- if (savedPosition) {
- return savedPosition;
- } else {
- if (to && from && to.meta.isTabBar && from.meta.isTabBar) {
- const position = getTabBarScrollPosition(to.meta.tabBarIndex);
- if (position) {
- return position;
- }
- }
- return {
- left: 0,
- top: 0
- };
- }
- };
- function createRouterOptions() {
- return {
- history: initHistory(),
- strict: !!__uniConfig.router.strict,
- routes: __uniRoutes,
- scrollBehavior
- };
- }
- function initHistory() {
- let { routerBase } = __uniConfig.router;
- if (routerBase === "/") {
- routerBase = "";
- }
- {
- return vueRouter.createMemoryHistory(routerBase);
- }
- }
- const index$c = {
- install(app) {
- initApp$1(app);
- if (!app.config.warnHandler) {
- app.config.warnHandler = warnHandler;
- }
- if (__UNI_FEATURE_PAGES__) {
- initRouter(app);
- }
- }
- };
- function warnHandler(msg, instance, trace) {
- if (instance) {
- const name = instance.$.type.name;
- if ("PageMetaHead" === name) {
- return;
- }
- const parent = instance.$.parent;
- if (parent && parent.type.name === "PageMeta") {
- return;
- }
- }
- const warnArgs = [`[Vue warn]: ${msg}`];
- if (trace.length) {
- warnArgs.push(`
- `, trace);
- }
- console.warn(...warnArgs);
- }
- const clazz = { class: "uni-async-loading" };
- const loadingVNode = /* @__PURE__ */ vue.createVNode(
- "i",
- { class: "uni-loading" },
- null,
- -1
- /* HOISTED */
- );
- const AsyncLoadingComponent = /* @__PURE__ */ defineSystemComponent({
- name: "AsyncLoading",
- render() {
- return vue.openBlock(), vue.createBlock("div", clazz, [loadingVNode]);
- }
- });
- function reload() {
- window.location.reload();
- }
- const AsyncErrorComponent = /* @__PURE__ */ defineSystemComponent({
- name: "AsyncError",
- setup() {
- initI18nAsyncMsgsOnce();
- const {
- t: t2
- } = useI18n();
- return () => vue.createVNode("div", {
- "class": "uni-async-error",
- "onClick": reload
- }, [t2("uni.async.error")], 8, ["onClick"]);
- }
- });
- let appVm;
- function getApp$1() {
- return appVm;
- }
- function initApp(vm) {
- appVm = vm;
- Object.defineProperty(appVm.$.ctx, "$children", {
- get() {
- return getCurrentPages().map((page) => page.$vm);
- }
- });
- const app = appVm.$.appContext.app;
- if (!app.component(AsyncLoadingComponent.name)) {
- app.component(AsyncLoadingComponent.name, AsyncLoadingComponent);
- }
- if (!app.component(AsyncErrorComponent.name)) {
- app.component(AsyncErrorComponent.name, AsyncErrorComponent);
- }
- initAppVm(appVm);
- defineGlobalData(appVm);
- }
- function wrapperComponentSetup(comp, { clone, init, setup, before }) {
- if (clone) {
- comp = shared.extend({}, comp);
- }
- before && before(comp);
- const oldSetup = comp.setup;
- comp.setup = (props2, ctx) => {
- const instance = vue.getCurrentInstance();
- init(instance.proxy);
- const query = setup(instance);
- if (oldSetup) {
- return oldSetup(query || props2, ctx);
- }
- };
- return comp;
- }
- function setupComponent(comp, options) {
- if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) {
- return wrapperComponentSetup(comp.default, options);
- }
- return wrapperComponentSetup(comp, options);
- }
- function setupWindow(comp, id2) {
- return setupComponent(comp, {
- init: (vm) => {
- vm.$page = {
- id: id2
- };
- },
- setup(instance) {
- instance.$pageInstance = instance;
- }
- });
- }
- function setupPage(comp) {
- if (process.env.NODE_ENV !== "production") {
- comp.__mpType = "page";
- }
- return setupComponent(comp, {
- clone: true,
- // 页面组件可能会被其他地方手动引用,比如 windows 等,需要 clone 一份新的作为页面组件
- init: initPage,
- setup(instance) {
- instance.$pageInstance = instance;
- const route = usePageRoute();
- const query = uniShared.decodedQuery(route.query);
- instance.attrs.__pageQuery = query;
- instance.proxy.$page.options = query;
- instance.proxy.options = query;
- {
- return query;
- }
- }
- });
- }
- function setupApp(comp) {
- if (process.env.NODE_ENV !== "production") {
- comp.__mpType = "app";
- }
- return setupComponent(comp, {
- init: initApp,
- setup(instance) {
- const route = usePageRoute();
- {
- return route.query;
- }
- },
- before(comp2) {
- comp2.mpType = "app";
- const { setup } = comp2;
- const render = () => {
- return vue.openBlock(), vue.createBlock(LayoutComponent);
- };
- comp2.setup = (props2, ctx) => {
- const res = setup && setup(props2, ctx);
- return shared.isFunction(res) ? render : res;
- };
- comp2.render = render;
- }
- });
- }
- function formatTime(val) {
- val = val > 0 && val < Infinity ? val : 0;
- const h = Math.floor(val / 3600);
- const m = Math.floor(val % 3600 / 60);
- const s = Math.floor(val % 3600 % 60);
- const hStr = (h < 10 ? "0" : "") + h;
- const mStr = (m < 10 ? "0" : "") + m;
- const sStr = (s < 10 ? "0" : "") + s;
- let str = mStr + ":" + sStr;
- if (hStr !== "00") {
- str = hStr + ":" + str;
- }
- return str;
- }
- function useGesture(props2, videoRef, fullscreenState) {
- const state = vue.reactive({
- gestureType: "none",
- volumeOld: 0,
- volumeNew: 0,
- currentTimeOld: 0,
- currentTimeNew: 0
- });
- const touchStartOrigin = {
- x: 0,
- y: 0
- };
- function onTouchstart(event) {
- const toucher = event.targetTouches[0];
- touchStartOrigin.x = toucher.pageX;
- touchStartOrigin.y = toucher.pageY;
- state.gestureType = "none";
- state.volumeOld = 0;
- state.currentTimeOld = state.currentTimeNew = 0;
- }
- function onTouchmove(event) {
- function stop() {
- event.stopPropagation();
- event.preventDefault();
- }
- if (fullscreenState.fullscreen) {
- stop();
- }
- const gestureType = state.gestureType;
- if (gestureType === "stop") {
- return;
- }
- const toucher = event.targetTouches[0];
- const pageX = toucher.pageX;
- const pageY = toucher.pageY;
- const origin = touchStartOrigin;
- const video = videoRef.value;
- if (gestureType === "progress") {
- changeProgress(pageX - origin.x);
- } else if (gestureType === "volume") {
- changeVolume(pageY - origin.y);
- }
- if (gestureType !== "none") {
- return;
- }
- if (Math.abs(pageX - origin.x) > Math.abs(pageY - origin.y)) {
- if (!props2.enableProgressGesture) {
- state.gestureType = "stop";
- return;
- }
- state.gestureType = "progress";
- state.currentTimeOld = state.currentTimeNew = video.currentTime;
- if (!fullscreenState.fullscreen) {
- stop();
- }
- } else {
- if (!props2.pageGesture) {
- state.gestureType = "stop";
- return;
- }
- state.gestureType = "volume";
- state.volumeOld = video.volume;
- if (!fullscreenState.fullscreen) {
- stop();
- }
- }
- }
- function onTouchend(event) {
- const video = videoRef.value;
- if (state.gestureType !== "none" && state.gestureType !== "stop") {
- event.stopPropagation();
- event.preventDefault();
- }
- if (state.gestureType === "progress" && state.currentTimeOld !== state.currentTimeNew) {
- video.currentTime = state.currentTimeNew;
- }
- state.gestureType = "none";
- }
- function changeProgress(x) {
- const video = videoRef.value;
- const duration = video.duration;
- let currentTimeNew = x / 600 * duration + state.currentTimeOld;
- if (currentTimeNew < 0) {
- currentTimeNew = 0;
- } else if (currentTimeNew > duration) {
- currentTimeNew = duration;
- }
- state.currentTimeNew = currentTimeNew;
- }
- function changeVolume(y) {
- const video = videoRef.value;
- const valueOld = state.volumeOld;
- let value;
- if (typeof valueOld === "number") {
- value = valueOld - y / 200;
- if (value < 0) {
- value = 0;
- } else if (value > 1) {
- value = 1;
- }
- video.volume = value;
- state.volumeNew = value;
- }
- }
- return {
- state,
- onTouchstart,
- onTouchmove,
- onTouchend
- };
- }
- function useFullscreen(trigger, containerRef, videoRef, userActionState, rootRef) {
- const state = vue.reactive({
- fullscreen: false
- });
- const isSafari = /^Apple/.test(navigator.vendor);
- function onFullscreenChange($event, webkit) {
- if (webkit && document.fullscreenEnabled) {
- return;
- }
- emitFullscreenChange(!!(document.fullscreenElement || document.webkitFullscreenElement));
- }
- function emitFullscreenChange(val) {
- state.fullscreen = val;
- trigger("fullscreenchange", {}, {
- fullScreen: val,
- direction: "vertical"
- });
- }
- function toggleFullscreen(val) {
- const root = rootRef.value;
- const container = containerRef.value;
- const video = videoRef.value;
- let mockFullScreen;
- if (val) {
- if ((document.fullscreenEnabled || document.webkitFullscreenEnabled) && (!isSafari || userActionState.userAction)) {
- container[document.fullscreenEnabled ? "requestFullscreen" : "webkitRequestFullscreen"]();
- } else if (video.webkitEnterFullScreen) {
- video.webkitEnterFullScreen();
- } else {
- mockFullScreen = true;
- container.remove();
- container.classList.add("uni-video-type-fullscreen");
- document.body.appendChild(container);
- }
- } else {
- if (document.fullscreenEnabled || document.webkitFullscreenEnabled) {
- if (document.fullscreenElement) {
- document.exitFullscreen();
- } else if (document.webkitFullscreenElement) {
- document.webkitExitFullscreen();
- }
- } else if (video.webkitExitFullScreen) {
- video.webkitExitFullScreen();
- } else {
- mockFullScreen = true;
- container.remove();
- container.classList.remove("uni-video-type-fullscreen");
- root.appendChild(container);
- }
- }
- if (mockFullScreen) {
- emitFullscreenChange(val);
- }
- }
- function requestFullScreen() {
- toggleFullscreen(true);
- }
- function exitFullScreen() {
- toggleFullscreen(false);
- }
- return {
- state,
- onFullscreenChange,
- emitFullscreenChange,
- toggleFullscreen,
- requestFullScreen,
- exitFullScreen
- };
- }
- function useVideo(props2, attrs, trigger) {
- const videoRef = vue.ref(null);
- const src = vue.computed(() => getRealPath(props2.src));
- const muted = vue.computed(() => props2.muted === "true" || props2.muted === true);
- const state = vue.reactive({
- start: false,
- src,
- playing: false,
- currentTime: 0,
- duration: 0,
- progress: 0,
- buffered: 0,
- muted
- });
- vue.watch(() => src.value, () => {
- state.playing = false;
- state.currentTime = 0;
- });
- vue.watch(() => state.buffered, (buffered) => {
- trigger("progress", {}, {
- buffered
- });
- });
- vue.watch(() => muted.value, (muted2) => {
- const video = videoRef.value;
- video.muted = muted2;
- });
- function onDurationChange({
- target
- }) {
- state.duration = target.duration;
- }
- function onLoadedMetadata($event) {
- const initialTime = Number(props2.initialTime) || 0;
- const video = $event.target;
- if (initialTime > 0) {
- video.currentTime = initialTime;
- }
- trigger("loadedmetadata", $event, {
- width: video.videoWidth,
- height: video.videoHeight,
- duration: video.duration
- });
- onProgress($event);
- }
- function onProgress($event) {
- const video = $event.target;
- const buffered = video.buffered;
- if (buffered.length) {
- state.buffered = buffered.end(buffered.length - 1) / video.duration * 100;
- }
- }
- function onWaiting($event) {
- trigger("waiting", $event, {});
- }
- function onVideoError($event) {
- state.playing = false;
- trigger("error", $event, {});
- }
- function onPlay($event) {
- state.start = true;
- state.playing = true;
- trigger("play", $event, {});
- }
- function onPause($event) {
- state.playing = false;
- trigger("pause", $event, {});
- }
- function onEnded($event) {
- state.playing = false;
- trigger("ended", $event, {});
- }
- function onTimeUpdate($event) {
- const video = $event.target;
- const currentTime = state.currentTime = video.currentTime;
- trigger("timeupdate", $event, {
- currentTime,
- duration: video.duration
- });
- }
- function toggle() {
- const video = videoRef.value;
- if (state.playing) {
- video.pause();
- } else {
- video.play();
- }
- }
- function play() {
- const video = videoRef.value;
- state.start = true;
- video.play();
- }
- function pause() {
- const video = videoRef.value;
- video.pause();
- }
- function seek(position) {
- const video = videoRef.value;
- position = Number(position);
- if (typeof position === "number" && !isNaN(position)) {
- video.currentTime = position;
- }
- }
- function stop() {
- seek(0);
- pause();
- }
- function playbackRate(rate) {
- const video = videoRef.value;
- video.playbackRate = rate;
- }
- return {
- videoRef,
- state,
- play,
- pause,
- stop,
- seek,
- playbackRate,
- toggle,
- onDurationChange,
- onLoadedMetadata,
- onProgress,
- onWaiting,
- onVideoError,
- onPlay,
- onPause,
- onEnded,
- onTimeUpdate
- };
- }
- function useControls(props2, videoState, seek) {
- const progressRef = vue.ref(null);
- const ballRef = vue.ref(null);
- const centerPlayBtnShow = vue.computed(() => props2.showCenterPlayBtn && !videoState.start);
- const controlsVisible = vue.ref(true);
- const controlsShow = vue.computed(() => !centerPlayBtnShow.value && props2.controls && controlsVisible.value);
- const state = vue.reactive({
- touching: false,
- controlsTouching: false,
- centerPlayBtnShow,
- controlsShow,
- controlsVisible
- });
- function clickProgress(event) {
- const $progress = progressRef.value;
- let element = event.target;
- let x = event.offsetX;
- while (element && element !== $progress) {
- x += element.offsetLeft;
- element = element.parentNode;
- }
- const w = $progress.offsetWidth;
- let progress = 0;
- if (x >= 0 && x <= w) {
- progress = x / w;
- seek(videoState.duration * progress);
- }
- }
- function toggleControls() {
- state.controlsVisible = !state.controlsVisible;
- }
- let hideTiming;
- function autoHideStart() {
- hideTiming = setTimeout(() => {
- state.controlsVisible = false;
- }, 3e3);
- }
- function autoHideEnd() {
- if (hideTiming) {
- clearTimeout(hideTiming);
- hideTiming = null;
- }
- }
- vue.watch(() => state.controlsShow && videoState.playing && !state.controlsTouching, (val) => {
- if (val) {
- autoHideStart();
- } else {
- autoHideEnd();
- }
- });
- vue.watch([() => videoState.currentTime, () => {
- props2.duration;
- }], function updateProgress() {
- if (!state.touching) {
- videoState.progress = videoState.currentTime / videoState.duration * 100;
- }
- });
- return {
- state,
- progressRef,
- ballRef,
- clickProgress,
- toggleControls,
- autoHideStart,
- autoHideEnd
- };
- }
- function useDanmu(props2, videoState) {
- const danmuRef = vue.ref(null);
- const state = vue.reactive({
- enable: Boolean(props2.enableDanmu)
- });
- let danmuIndex = {
- time: 0,
- index: -1
- };
- const danmuList = shared.isArray(props2.danmuList) ? JSON.parse(JSON.stringify(props2.danmuList)) : [];
- danmuList.sort(function(a, b) {
- return (a.time || 0) - (b.time || 0);
- });
- function toggleDanmu() {
- state.enable = !state.enable;
- }
- function updateDanmu(event) {
- const video = event.target;
- const currentTime = video.currentTime;
- const oldDanmuIndex = danmuIndex;
- const newDanmuIndex = {
- time: currentTime,
- index: oldDanmuIndex.index
- };
- if (currentTime > oldDanmuIndex.time) {
- for (let index2 = oldDanmuIndex.index + 1; index2 < danmuList.length; index2++) {
- const element = danmuList[index2];
- if (currentTime >= (element.time || 0)) {
- newDanmuIndex.index = index2;
- if (videoState.playing && state.enable) {
- playDanmu(element);
- }
- } else {
- break;
- }
- }
- } else if (currentTime < oldDanmuIndex.time) {
- for (let index2 = oldDanmuIndex.index - 1; index2 > -1; index2--) {
- const element = danmuList[index2];
- if (currentTime <= (element.time || 0)) {
- newDanmuIndex.index = index2 - 1;
- } else {
- break;
- }
- }
- }
- danmuIndex = newDanmuIndex;
- }
- function playDanmu(danmu) {
- const p2 = document.createElement("p");
- p2.className = "uni-video-danmu-item";
- p2.innerText = danmu.text;
- let style = `bottom: ${Math.random() * 100}%;color: ${danmu.color};`;
- p2.setAttribute("style", style);
- const danmuEl = danmuRef.value;
- danmuEl.appendChild(p2);
- setTimeout(function() {
- style += "left: 0;-webkit-transform: translateX(-100%);transform: translateX(-100%);";
- p2.setAttribute("style", style);
- setTimeout(function() {
- p2.remove();
- }, 4e3);
- }, 17);
- }
- function sendDanmu(danmu) {
- danmuList.splice(danmuIndex.index + 1, 0, {
- text: String(danmu.text),
- color: danmu.color,
- time: videoState.currentTime || 0
- });
- }
- return {
- state,
- danmuRef,
- updateDanmu,
- toggleDanmu,
- sendDanmu
- };
- }
- function useContext(play, pause, stop, seek, sendDanmu, playbackRate, requestFullScreen, exitFullScreen) {
- useContextInfo();
- useSubscribe();
- }
- const props$9 = {
- id: {
- type: String,
- default: ""
- },
- src: {
- type: String,
- default: ""
- },
- duration: {
- type: [Number, String],
- default: ""
- },
- controls: {
- type: [Boolean, String],
- default: true
- },
- danmuList: {
- type: Array,
- default() {
- return [];
- }
- },
- danmuBtn: {
- type: [Boolean, String],
- default: false
- },
- enableDanmu: {
- type: [Boolean, String],
- default: false
- },
- autoplay: {
- type: [Boolean, String],
- default: false
- },
- loop: {
- type: [Boolean, String],
- default: false
- },
- muted: {
- type: [Boolean, String],
- default: false
- },
- objectFit: {
- type: String,
- default: "contain"
- },
- poster: {
- type: String,
- default: ""
- },
- direction: {
- type: [String, Number],
- default: ""
- },
- showProgress: {
- type: Boolean,
- default: true
- },
- initialTime: {
- type: [String, Number],
- default: 0
- },
- showFullscreenBtn: {
- type: [Boolean, String],
- default: true
- },
- pageGesture: {
- type: [Boolean, String],
- default: false
- },
- enableProgressGesture: {
- type: [Boolean, String],
- default: true
- },
- showPlayBtn: {
- type: [Boolean, String],
- default: true
- },
- showCenterPlayBtn: {
- type: [Boolean, String],
- default: true
- }
- };
- const index$b = /* @__PURE__ */ defineBuiltInComponent({
- name: "Video",
- props: props$9,
- emits: ["fullscreenchange", "progress", "loadedmetadata", "waiting", "error", "play", "pause", "ended", "timeupdate"],
- setup(props2, {
- emit: emit2,
- attrs,
- slots
- }) {
- const rootRef = vue.ref(null);
- const containerRef = vue.ref(null);
- const trigger = useCustomEvent(rootRef, emit2);
- const {
- state: userActionState
- } = useUserAction();
- const {
- $attrs: videoAttrs
- } = useAttrs({
- excludeListeners: true
- });
- const {
- t: t2
- } = useI18n();
- initI18nVideoMsgsOnce();
- const {
- videoRef,
- state: videoState,
- play,
- pause,
- stop,
- seek,
- playbackRate,
- toggle,
- onDurationChange,
- onLoadedMetadata,
- onProgress,
- onWaiting,
- onVideoError,
- onPlay,
- onPause,
- onEnded,
- onTimeUpdate
- } = useVideo(props2, attrs, trigger);
- const {
- state: danmuState,
- danmuRef,
- updateDanmu,
- toggleDanmu,
- sendDanmu
- } = useDanmu(props2, videoState);
- const {
- state: fullscreenState,
- onFullscreenChange,
- emitFullscreenChange,
- toggleFullscreen,
- requestFullScreen,
- exitFullScreen
- } = useFullscreen(trigger, containerRef, videoRef, userActionState, rootRef);
- const {
- state: gestureState,
- onTouchstart,
- onTouchend,
- onTouchmove
- } = useGesture(props2, videoRef, fullscreenState);
- const {
- state: controlsState,
- progressRef,
- ballRef,
- clickProgress,
- toggleControls
- } = useControls(props2, videoState, seek);
- useContext();
- return () => {
- return vue.createVNode("uni-video", {
- "ref": rootRef,
- "id": props2.id,
- "onClick": toggleControls
- }, [vue.createVNode("div", {
- "ref": containerRef,
- "class": "uni-video-container",
- "onTouchstart": onTouchstart,
- "onTouchend": onTouchend,
- "onTouchmove": onTouchmove,
- "onFullscreenchange": vue.withModifiers(onFullscreenChange, ["stop"]),
- "onWebkitfullscreenchange": vue.withModifiers(($event) => onFullscreenChange($event, true), ["stop"])
- }, [vue.createVNode("video", vue.mergeProps({
- "ref": videoRef,
- "style": {
- "object-fit": props2.objectFit
- },
- "muted": !!props2.muted,
- "loop": !!props2.loop,
- "src": videoState.src,
- "poster": props2.poster,
- "autoplay": !!props2.autoplay
- }, videoAttrs.value, {
- "class": "uni-video-video",
- "webkit-playsinline": true,
- "playsinline": true,
- "onDurationchange": onDurationChange,
- "onLoadedmetadata": onLoadedMetadata,
- "onProgress": onProgress,
- "onWaiting": onWaiting,
- "onError": onVideoError,
- "onPlay": onPlay,
- "onPause": onPause,
- "onEnded": onEnded,
- "onTimeupdate": (event) => {
- onTimeUpdate(event);
- updateDanmu(event);
- },
- "onWebkitbeginfullscreen": () => emitFullscreenChange(true),
- "onX5videoenterfullscreen": () => emitFullscreenChange(true),
- "onWebkitendfullscreen": () => emitFullscreenChange(false),
- "onX5videoexitfullscreen": () => emitFullscreenChange(false)
- }), null, 16, ["muted", "loop", "src", "poster", "autoplay", "webkit-playsinline", "playsinline", "onDurationchange", "onLoadedmetadata", "onProgress", "onWaiting", "onError", "onPlay", "onPause", "onEnded", "onTimeupdate", "onWebkitbeginfullscreen", "onX5videoenterfullscreen", "onWebkitendfullscreen", "onX5videoexitfullscreen"]), vue.withDirectives(vue.createVNode("div", {
- "class": "uni-video-bar uni-video-bar-full",
- "onClick": vue.withModifiers(() => {
- }, ["stop"])
- }, [vue.createVNode("div", {
- "class": "uni-video-controls"
- }, [vue.withDirectives(vue.createVNode("div", {
- "class": {
- "uni-video-control-button": true,
- "uni-video-control-button-play": !videoState.playing,
- "uni-video-control-button-pause": videoState.playing
- },
- "onClick": vue.withModifiers(toggle, ["stop"])
- }, null, 10, ["onClick"]), [[vue.vShow, props2.showPlayBtn]]), vue.withDirectives(vue.createVNode("div", {
- "class": "uni-video-current-time"
- }, [formatTime(videoState.currentTime)], 512), [[vue.vShow, props2.showProgress]]), vue.withDirectives(vue.createVNode("div", {
- "ref": progressRef,
- "class": "uni-video-progress-container",
- "onClick": vue.withModifiers(clickProgress, ["stop"])
- }, [vue.createVNode("div", {
- "class": "uni-video-progress"
- }, [vue.createVNode("div", {
- "style": {
- width: videoState.buffered + "%"
- },
- "class": "uni-video-progress-buffered"
- }, null, 4), vue.createVNode("div", {
- "ref": ballRef,
- "style": {
- left: videoState.progress + "%"
- },
- "class": "uni-video-ball"
- }, [vue.createVNode("div", {
- "class": "uni-video-inner"
- }, null)], 4)])], 8, ["onClick"]), [[vue.vShow, props2.showProgress]]), vue.withDirectives(vue.createVNode("div", {
- "class": "uni-video-duration"
- }, [formatTime(Number(props2.duration) || videoState.duration)], 512), [[vue.vShow, props2.showProgress]])]), vue.withDirectives(vue.createVNode("div", {
- "class": {
- "uni-video-danmu-button": true,
- "uni-video-danmu-button-active": danmuState.enable
- },
- "onClick": vue.withModifiers(toggleDanmu, ["stop"])
- }, [t2("uni.video.danmu")], 10, ["onClick"]), [[vue.vShow, props2.danmuBtn]]), vue.withDirectives(vue.createVNode("div", {
- "class": {
- "uni-video-fullscreen": true,
- "uni-video-type-fullscreen": fullscreenState.fullscreen
- },
- "onClick": vue.withModifiers(() => toggleFullscreen(!fullscreenState.fullscreen), ["stop"])
- }, null, 10, ["onClick"]), [[vue.vShow, props2.showFullscreenBtn]])], 8, ["onClick"]), [[vue.vShow, controlsState.controlsShow]]), vue.withDirectives(vue.createVNode("div", {
- "ref": danmuRef,
- "style": "z-index: 0;",
- "class": "uni-video-danmu"
- }, null, 512), [[vue.vShow, videoState.start && danmuState.enable]]), controlsState.centerPlayBtnShow && vue.createVNode("div", {
- "class": "uni-video-cover",
- "onClick": vue.withModifiers(() => {
- }, ["stop"])
- }, [vue.createVNode("div", {
- "class": "uni-video-cover-play-button",
- "onClick": vue.withModifiers(play, ["stop"])
- }, null, 8, ["onClick"]), vue.createVNode("p", {
- "class": "uni-video-cover-duration"
- }, [formatTime(Number(props2.duration) || videoState.duration)])], 8, ["onClick"]), vue.createVNode("div", {
- "class": {
- "uni-video-toast": true,
- "uni-video-toast-volume": gestureState.gestureType === "volume"
- }
- }, [vue.createVNode("div", {
- "class": "uni-video-toast-title"
- }, [t2("uni.video.volume")]), vue.createVNode("svg", {
- "class": "uni-video-toast-icon",
- "width": "200px",
- "height": "200px",
- "viewBox": "0 0 1024 1024",
- "version": "1.1",
- "xmlns": "http://www.w3.org/2000/svg"
- }, [vue.createVNode("path", {
- "d": "M475.400704 201.19552l0 621.674496q0 14.856192-10.856448 25.71264t-25.71264 10.856448-25.71264-10.856448l-190.273536-190.273536-149.704704 0q-14.856192 0-25.71264-10.856448t-10.856448-25.71264l0-219.414528q0-14.856192 10.856448-25.71264t25.71264-10.856448l149.704704 0 190.273536-190.273536q10.856448-10.856448 25.71264-10.856448t25.71264 10.856448 10.856448 25.71264zm219.414528 310.837248q0 43.425792-24.28416 80.851968t-64.2816 53.425152q-5.71392 2.85696-14.2848 2.85696-14.856192 0-25.71264-10.570752t-10.856448-25.998336q0-11.999232 6.856704-20.284416t16.570368-14.2848 19.427328-13.142016 16.570368-20.284416 6.856704-32.569344-6.856704-32.569344-16.570368-20.284416-19.427328-13.142016-16.570368-14.2848-6.856704-20.284416q0-15.427584 10.856448-25.998336t25.71264-10.570752q8.57088 0 14.2848 2.85696 39.99744 15.427584 64.2816 53.139456t24.28416 81.137664zm146.276352 0q0 87.422976-48.56832 161.41824t-128.5632 107.707392q-7.428096 2.85696-14.2848 2.85696-15.427584 0-26.284032-10.856448t-10.856448-25.71264q0-22.284288 22.284288-33.712128 31.997952-16.570368 43.425792-25.141248 42.283008-30.855168 65.995776-77.423616t23.712768-99.136512-23.712768-99.136512-65.995776-77.423616q-11.42784-8.57088-43.425792-25.141248-22.284288-11.42784-22.284288-33.712128 0-14.856192 10.856448-25.71264t25.71264-10.856448q7.428096 0 14.856192 2.85696 79.99488 33.712128 128.5632 107.707392t48.56832 161.41824zm146.276352 0q0 131.42016-72.566784 241.41312t-193.130496 161.989632q-7.428096 2.85696-14.856192 2.85696-14.856192 0-25.71264-10.856448t-10.856448-25.71264q0-20.570112 22.284288-33.712128 3.999744-2.285568 12.85632-5.999616t12.85632-5.999616q26.284032-14.2848 46.854144-29.140992 70.281216-51.996672 109.707264-129.705984t39.426048-165.132288-39.426048-165.132288-109.707264-129.705984q-20.570112-14.856192-46.854144-29.140992-3.999744-2.285568-12.85632-5.999616t-12.85632-5.999616q-22.284288-13.142016-22.284288-33.712128 0-14.856192 10.856448-25.71264t25.71264-10.856448q7.428096 0 14.856192 2.85696 120.563712 51.996672 193.130496 161.989632t72.566784 241.41312z"
- }, null)]), vue.createVNode("div", {
- "class": "uni-video-toast-value"
- }, [vue.createVNode("div", {
- "style": {
- width: gestureState.volumeNew * 100 + "%"
- },
- "class": "uni-video-toast-value-content"
- }, [vue.createVNode("div", {
- "class": "uni-video-toast-volume-grids"
- }, [vue.renderList(10, () => vue.createVNode("div", {
- "class": "uni-video-toast-volume-grids-item"
- }, null))])], 4)])], 2), vue.createVNode("div", {
- "class": {
- "uni-video-toast": true,
- "uni-video-toast-progress": gestureState.gestureType === "progress"
- }
- }, [vue.createVNode("div", {
- "class": "uni-video-toast-title"
- }, [formatTime(gestureState.currentTimeNew), " / ", formatTime(videoState.duration)])], 2), vue.createVNode("div", {
- "class": "uni-video-slots"
- }, [slots.default && slots.default()])], 40, ["onTouchstart", "onTouchend", "onTouchmove", "onFullscreenchange", "onWebkitfullscreenchange"])], 8, ["id", "onClick"]);
- };
- }
- });
- const onWebInvokeAppService = ({ name, arg }) => {
- if (name === "postMessage")
- ;
- else {
- uni[name](arg);
- }
- };
- const Invoke = /* @__PURE__ */ uniShared.once(() => UniServiceJSBridge.on(uniShared.ON_WEB_INVOKE_APP_SERVICE, onWebInvokeAppService));
- const props$8 = {
- src: {
- type: String,
- default: ""
- }
- };
- const indexX = /* @__PURE__ */ defineBuiltInComponent({
- inheritAttrs: false,
- name: "WebView",
- props: props$8,
- setup(props2) {
- Invoke();
- const rootRef = vue.ref(null);
- vue.ref(null);
- const {
- $attrs,
- $excludeAttrs,
- $listeners
- } = useAttrs({
- excludeListeners: true
- });
- return () => {
- return vue.createVNode("uni-web-view", vue.mergeProps({
- "class": "uni-webview"
- }, $listeners.value, $excludeAttrs.value, {
- "ref": rootRef
- }), null, 16);
- };
- }
- });
- const ICON_PATH_ORIGIN = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAMAAABmmnOVAAAC01BMVEUAAAAAef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef96quGStdqStdpbnujMzMzCyM7Gyc7Ky83MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMwAef8GfP0yjfNWnOp0qOKKsdyYt9mju9aZt9mMstx1qeJYnekyjvIIfP0qivVmouaWttnMzMyat9lppOUujPQKffxhoOfNzc3Y2Njh4eHp6enu7u7y8vL19fXv7+/i4uLZ2dnOzs6auNgOf/sKff15quHR0dHx8fH9/f3////j4+N6quFdn+iywdPb29vw8PD+/v7c3NyywtLa2tr29vbS0tLd3d38/Pzf39/o6Ojc7f+q0v+HwP9rsf9dqv9Hnv9Vpv/q6urj8P+Vx/9Am/8Pgf8Iff/z8/OAvP95uf/n5+c5l//V6f+52v+y1//7+/vt7e0rkP/09PTQ0NDq9P8Whf+cy//W1tbe3t7A3v/m5ubs7OxOov/r6+vk5OQiaPjKAAAAknRSTlMACBZ9oB71/jiqywJBZATT6hBukRXv+zDCAVrkDIf4JbQsTb7eVeJLbwfa8Rh4G/OlPS/6/kxQ9/xdmZudoJxNVhng7B6wtWdzAtQOipcF1329wS44doK/BAkyP1pvgZOsrbnGXArAg34G2IsD1eMRe7bi7k5YnqFT9V0csyPedQyYD3p/Fje+hDpskq/MwpRBC6yKp2MAAAQdSURBVHja7Zn1exMxGIAPHbrhDsPdneHuNtzd3d3dIbjLh93o2o4i7TpgG1Jk0g0mMNwd/gTa5rq129reHnK5e/bk/TFNk/dJ7r5894XjGAwGg8GgTZasCpDIll1+hxw5vXLJLpEboTx5ZXbIhyzkl9fB28cqUaCgrBKFkI3CcjoUKYolihWXUSI7EihRUjaHXF52CVRKLoe8eZIdUOkyMknkRw6UlcehYAFHiXK+skgURk6Ul8OhQjFnCVRRBolKqRxQ5SzUHaqgNGSj7VCmalqJnDkoS5RF6ZCbroNvufQkUD6qEuXTdUA+3hQdqiEXVKfnUKOmK4latalJ1EEuoZZ6162HJ9x/4OChw0eOHj12/MTJU6dxG7XUu751tjNnz4ET5y9ctLZTSr0beKFLl89bpuUDrqgC1RqNWqsKuqqzNFw7e51S6u3tc+OmZUJ9kCHY6ECwOkRvab51iUrqXej2HYDQsHBjWgx3Ae7dppB6N2wEcF9jdMGDUIDGTaR2aNoM9FqjG7QmaN5CWgc/gIePjG559BigpZQOrYB/4jBfRGRUtDkmJjY6KjLCofkpD62lc2gDfMpWPIuLdwyV8XEpHgaddBZ+wBuSFcwJqSN2ovmZ/dfnOvCTxqGtwzq8SEjv4EhISn48eWgnhUP7DvDSvgzxrs6vV6+FLiro2EkCic4QKkzwJsH1KYreCp0eQhfyDl1B/w4P/xa5JVJ4U03QjbRD9x7wXlgH5IE3wmMBHXoSlugFAcI6f/AkkSi8q6HQm6xDn77wEQ8djTwSj3tqAMguRTe4ikeOQyJ4YV+KfkQl+oNW5GbY4gWOWgbwJ+kwAD6Fi90MK2ZsrIeBBCUGwRXbqJ+/iJMQliIEBhOU6AJhtlG/IpHE2bqrYQg5h6HA4yQiRqwEfkGCdTCMmMRw+IbPDCQaHCsCYAQxiZHw3TbmD/ESOHgHwShiEqPhp/gggYkSztIxxCRawy/bmEniJaJtfwiEscQkxkFgRqJESqQwwHhiEuMBp3Vm8RK/cZoHEzKXhCK2QxEPpiJe0YlKCFaKCNv/cYBNUsBRPlkJSc0U+dM7E9H0ThGJbgZT/iR7yj+VqMS06Qr4+OFm2JdCxIa8lugzkJs5K6MfxAaYPUcBpYG5khZJEkUUSb7DPCnKRfPBXj6M8FwuegoLpCgXcQszVjhbJFUJUee2hBhLoYTIcYtB57KY+opSMdVqwatSlZVj05aV//CwJLMX2DluaUcwhXm4ali2XOoLjxUrPV26zFtF4f5p0Gp310+z13BUWNvbehEXona6iAtX/zVZmtfN4WixfsNky4S6gCCVVq3RPLdfSfpv3MRRZfPoLc6Xs/5bt3EyMGzE9h07/Xft2t15z6i9+zgGg8FgMBgMBoPBYDAYDAYj8/APG67Rie8pUDsAAAAASUVORK5CYII=";
- var MapType = /* @__PURE__ */ ((MapType2) => {
- MapType2["QQ"] = "qq";
- MapType2["GOOGLE"] = "google";
- MapType2["AMAP"] = "AMap";
- MapType2["BMAP"] = "BMapGL";
- MapType2["UNKNOWN"] = "";
- return MapType2;
- })(MapType || {});
- function getMapInfo() {
- if (__uniConfig.bMapKey) {
- return {
- type: "BMapGL",
- key: __uniConfig.bMapKey
- };
- }
- if (__uniConfig.qqMapKey) {
- return {
- type: "qq",
- key: __uniConfig.qqMapKey
- };
- }
- if (__uniConfig.googleMapKey) {
- return {
- type: "google",
- key: __uniConfig.googleMapKey
- };
- }
- if (__uniConfig.aMapKey) {
- return {
- type: "AMap",
- key: __uniConfig.aMapKey,
- securityJsCode: __uniConfig.aMapSecurityJsCode,
- serviceHost: __uniConfig.aMapServiceHost
- };
- }
- return {
- type: "",
- key: ""
- };
- }
- let IS_AMAP = false;
- let hasGetIsAMap = false;
- const getIsAMap = () => {
- if (hasGetIsAMap) {
- return IS_AMAP;
- } else {
- hasGetIsAMap = true;
- return IS_AMAP = getMapInfo().type === "AMap";
- }
- };
- const getIsBMap = () => {
- return getMapInfo().type === "BMapGL";
- };
- const props$7 = {
- id: {
- type: [Number, String],
- default: ""
- },
- latitude: {
- type: [Number, String],
- require: true
- },
- longitude: {
- type: [Number, String],
- require: true
- },
- title: {
- type: String,
- default: ""
- },
- iconPath: {
- type: String,
- require: true
- },
- rotate: {
- type: [Number, String],
- default: 0
- },
- alpha: {
- type: [Number, String],
- default: 1
- },
- width: {
- type: [Number, String],
- default: ""
- },
- height: {
- type: [Number, String],
- default: ""
- },
- callout: {
- type: Object,
- default: null
- },
- label: {
- type: Object,
- default: null
- },
- anchor: {
- type: Object,
- default: null
- },
- clusterId: {
- type: [Number, String],
- default: ""
- },
- customCallout: {
- type: Object,
- default: null
- },
- ariaLabel: {
- type: String,
- default: ""
- }
- };
- function useMarkerLabelStyle(id2) {
- const className = "uni-map-marker-label-" + id2;
- const styleEl = document.createElement("style");
- styleEl.id = className;
- document.head.appendChild(styleEl);
- return function updateMarkerLabelStyle(style) {
- const newStyle = Object.assign({}, style, {
- position: "absolute",
- top: "70px",
- borderStyle: "solid"
- });
- const div = document.createElement("div");
- Object.keys(newStyle).forEach((key) => {
- div.style[key] = newStyle[key] || "";
- });
- styleEl.innerText = `.${className}{${div.getAttribute("style")}}`;
- return className;
- };
- }
- const MapMarker = /* @__PURE__ */ defineSystemComponent({
- name: "MapMarker",
- props: props$7,
- setup(props2) {
- const id2 = String(!isNaN(Number(props2.id)) ? props2.id : "");
- const onMapReady = vue.inject("onMapReady");
- const updateMarkerLabelStyle = useMarkerLabelStyle(id2);
- let marker;
- function removeMarkerCallout(callout) {
- if (getIsAMap()) {
- callout.removeAMapText();
- } else {
- callout.setMap(null);
- }
- }
- onMapReady((map, maps, trigger) => {
- function updateMarker(option) {
- const title = option.title;
- let position;
- if (getIsAMap()) {
- position = new maps.LngLat(option.longitude, option.latitude);
- } else if (getIsBMap()) {
- position = new maps.Point(option.longitude, option.latitude);
- } else {
- position = new maps.LatLng(option.latitude, option.longitude);
- }
- const img = new Image();
- let imgHeight = 0;
- img.onload = () => {
- const anchor = option.anchor || {};
- let icon;
- let w;
- let h;
- let top;
- let x = typeof anchor.x === "number" ? anchor.x : 0.5;
- let y = typeof anchor.y === "number" ? anchor.y : 1;
- if (option.iconPath && (option.width || option.height)) {
- w = option.width || img.width / img.height * option.height;
- h = option.height || img.height / img.width * option.width;
- } else {
- w = img.width / 2;
- h = img.height / 2;
- }
- imgHeight = h;
- top = h - (h - y * h);
- if ("MarkerImage" in maps) {
- icon = new maps.MarkerImage(img.src, null, null, new maps.Point(x * w, y * h), new maps.Size(w, h));
- } else if ("Icon" in maps) {
- icon = new maps.Icon({
- image: img.src,
- size: new maps.Size(w, h),
- imageSize: new maps.Size(w, h),
- imageOffset: new maps.Pixel(x * w, y * h)
- });
- } else {
- icon = {
- url: img.src,
- anchor: new maps.Point(x, y),
- size: new maps.Size(w, h)
- };
- }
- if (getIsBMap()) {
- marker = new maps.Marker(new maps.Point(position.lng, position.lat));
- map.addOverlay(marker);
- } else {
- marker.setPosition(position);
- marker.setIcon(icon);
- }
- if ("setRotation" in marker) {
- marker.setRotation(option.rotate || 0);
- }
- const labelOpt = option.label || {};
- if ("label" in marker) {
- marker.label.setMap(null);
- delete marker.label;
- }
- let label;
- if (labelOpt.content) {
- const labelStyle = {
- borderColor: labelOpt.borderColor,
- borderWidth: (Number(labelOpt.borderWidth) || 0) + "px",
- padding: (Number(labelOpt.padding) || 0) + "px",
- borderRadius: (Number(labelOpt.borderRadius) || 0) + "px",
- backgroundColor: labelOpt.bgColor,
- color: labelOpt.color,
- fontSize: (labelOpt.fontSize || 14) + "px",
- lineHeight: (labelOpt.fontSize || 14) + "px",
- marginLeft: (Number(labelOpt.anchorX || labelOpt.x) || 0) + "px",
- marginTop: (Number(labelOpt.anchorY || labelOpt.y) || 0) + "px"
- };
- if ("Label" in maps) {
- label = new maps.Label({
- position,
- map,
- clickable: false,
- content: labelOpt.content,
- style: labelStyle
- });
- marker.label = label;
- } else if ("setLabel" in marker) {
- if (getIsAMap()) {
- const content = `<div style="
- margin-left:${labelStyle.marginLeft};
- margin-top:${labelStyle.marginTop};
- padding:${labelStyle.padding};
- background-color:${labelStyle.backgroundColor};
- border-radius:${labelStyle.borderRadius};
- line-height:${labelStyle.lineHeight};
- color:${labelStyle.color};
- font-size:${labelStyle.fontSize};
- ">
- ${labelOpt.content}
- <div>`;
- marker.setLabel({
- content,
- direction: "bottom-right"
- });
- } else {
- const className = updateMarkerLabelStyle(labelStyle);
- marker.setLabel({
- text: labelOpt.content,
- color: labelStyle.color,
- fontSize: labelStyle.fontSize,
- className
- });
- }
- }
- }
- const calloutOpt = option.callout || {};
- let callout = marker.callout;
- let calloutStyle;
- if (calloutOpt.content || title) {
- if (getIsAMap() && calloutOpt.content) {
- calloutOpt.content = calloutOpt.content.replaceAll("\n", "<br/>");
- }
- const boxShadow = "0px 0px 3px 1px rgba(0,0,0,0.5)";
- let offsetY = -imgHeight / 2;
- if (option.width || option.height) {
- offsetY += 14 - imgHeight / 2;
- }
- calloutStyle = calloutOpt.content ? {
- position,
- map,
- top,
- // handle AMap callout offset
- offsetY,
- content: calloutOpt.content,
- color: calloutOpt.color,
- fontSize: calloutOpt.fontSize,
- borderRadius: calloutOpt.borderRadius,
- bgColor: calloutOpt.bgColor,
- padding: calloutOpt.padding,
- boxShadow: calloutOpt.boxShadow || boxShadow,
- display: calloutOpt.display
- } : {
- position,
- map,
- top,
- // handle AMap callout offset
- offsetY,
- content: title,
- boxShadow
- };
- if (callout) {
- callout.setOption(calloutStyle);
- } else {
- if (getIsAMap()) {
- const callback = () => {
- if (id2 !== "") {
- trigger("callouttap", {}, {
- markerId: Number(id2)
- });
- }
- };
- callout = marker.callout = new maps.Callout(calloutStyle, callback);
- } else {
- callout = marker.callout = new maps.Callout(calloutStyle);
- callout.div.onclick = function($event) {
- if (id2 !== "") {
- trigger("callouttap", $event, {
- markerId: Number(id2)
- });
- }
- $event.stopPropagation();
- $event.preventDefault();
- };
- if (getMapInfo().type === MapType.GOOGLE) {
- callout.div.ontouchstart = function($event) {
- $event.stopPropagation();
- };
- callout.div.onpointerdown = function($event) {
- $event.stopPropagation();
- };
- }
- }
- }
- } else {
- if (callout) {
- removeMarkerCallout(callout);
- delete marker.callout;
- }
- }
- };
- if (option.iconPath) {
- img.src = getRealPath(option.iconPath);
- } else {
- console.error("Marker.iconPath is required.");
- }
- }
- function addMarker(props3) {
- if (!getIsBMap()) {
- marker = new maps.Marker({
- map,
- flat: true,
- autoRotation: false
- });
- }
- updateMarker(props3);
- const MapsEvent = maps.event || maps.Event;
- if (getIsBMap())
- ;
- else {
- MapsEvent.addListener(marker, "click", () => {
- const callout = marker.callout;
- if (callout && !callout.alwaysVisible) {
- if (getIsAMap()) {
- callout.visible = !callout.visible;
- if (callout.visible) {
- marker.callout.createAMapText();
- } else {
- marker.callout.removeAMapText();
- }
- } else {
- callout.set("visible", !callout.visible);
- if (callout.visible) {
- const div = callout.div;
- const parent = div.parentNode;
- parent.removeChild(div);
- parent.appendChild(div);
- }
- }
- }
- if (id2) {
- trigger("markertap", {}, {
- markerId: Number(id2),
- latitude: props3.latitude,
- longitude: props3.longitude
- });
- }
- });
- }
- }
- addMarker(props2);
- vue.watch(props2, updateMarker);
- });
- if (id2) {
- const addMapChidlContext = vue.inject("addMapChidlContext");
- vue.inject("removeMapChidlContext");
- const context = {
- id: id2,
- translate(data) {
- onMapReady((map, maps, trigger) => {
- const destination = data.destination;
- const duration = data.duration;
- const autoRotate = !!data.autoRotate;
- let rotate = Number(data.rotate) || 0;
- let rotation = 0;
- if ("getRotation" in marker) {
- rotation = marker.getRotation();
- }
- const a = marker.getPosition();
- const b = new maps.LatLng(destination.latitude, destination.longitude);
- const distance = maps.geometry.spherical.computeDistanceBetween(a, b) / 1e3;
- const time = (typeof duration === "number" ? duration : 1e3) / (1e3 * 60 * 60);
- const speed = distance / time;
- const MapsEvent = maps.event || maps.Event;
- const movingEvent = MapsEvent.addListener(marker, "moving", (e2) => {
- const latLng = e2.latLng;
- const label = marker.label;
- if (label) {
- label.setPosition(latLng);
- }
- const callout = marker.callout;
- if (callout) {
- callout.setPosition(latLng);
- }
- });
- const event = MapsEvent.addListener(marker, "moveend", () => {
- event.remove();
- movingEvent.remove();
- marker.lastPosition = a;
- marker.setPosition(b);
- const label = marker.label;
- if (label) {
- label.setPosition(b);
- }
- const callout = marker.callout;
- if (callout) {
- callout.setPosition(b);
- }
- const cb = data.animationEnd;
- if (shared.isFunction(cb)) {
- cb();
- }
- });
- let lastRtate = 0;
- if (autoRotate) {
- if (marker.lastPosition) {
- lastRtate = maps.geometry.spherical.computeHeading(marker.lastPosition, a);
- }
- rotate = maps.geometry.spherical.computeHeading(a, b) - lastRtate;
- }
- if ("setRotation" in marker) {
- marker.setRotation(rotation + rotate);
- }
- if ("moveTo" in marker) {
- marker.moveTo(b, speed);
- } else {
- marker.setPosition(b);
- MapsEvent.trigger(marker, "moveend", {});
- }
- });
- }
- };
- addMapChidlContext(context);
- }
- return () => {
- return null;
- };
- }
- });
- function hexToRgba(hex) {
- if (!hex) {
- return {
- r: 0,
- g: 0,
- b: 0,
- a: 0
- };
- }
- let tmpHex = hex.slice(1);
- const tmpHexLen = tmpHex.length;
- if (![3, 4, 6, 8].includes(tmpHexLen)) {
- return {
- r: 0,
- g: 0,
- b: 0,
- a: 0
- };
- }
- if (tmpHexLen === 3 || tmpHexLen === 4) {
- tmpHex = tmpHex.replace(/(\w{1})/g, "$1$1");
- }
- let [sr, sg, sb, sa] = tmpHex.match(/(\w{2})/g);
- const r = parseInt(sr, 16), g2 = parseInt(sg, 16), b = parseInt(sb, 16);
- if (!sa) {
- return { r, g: g2, b, a: 1 };
- }
- return {
- r,
- g: g2,
- b,
- a: (`0x100${sa}` - 65536) / 255
- };
- }
- const props$6 = {
- points: {
- type: Array,
- require: true
- },
- color: {
- type: String,
- default: "#000000"
- },
- width: {
- type: [Number, String],
- default: ""
- },
- dottedLine: {
- type: [Boolean, String],
- default: false
- },
- arrowLine: {
- type: [Boolean, String],
- default: false
- },
- arrowIconPath: {
- type: String,
- default: ""
- },
- borderColor: {
- type: String,
- default: "#000000"
- },
- borderWidth: {
- type: [Number, String],
- default: ""
- },
- colorList: {
- type: Array,
- default() {
- return [];
- }
- },
- level: {
- type: String,
- default: ""
- }
- };
- const MapPolyline = /* @__PURE__ */ defineSystemComponent({
- name: "MapPolyline",
- props: props$6,
- setup(props2) {
- const onMapReady = vue.inject("onMapReady");
- let polyline;
- let polylineBorder;
- function removePolyline() {
- if (polyline) {
- polyline.setMap(null);
- }
- if (polylineBorder) {
- polylineBorder.setMap(null);
- }
- }
- onMapReady((map, maps) => {
- function updatePolyline(option) {
- removePolyline();
- addPolyline(option);
- }
- function addPolyline(option) {
- const path = [];
- option.points.forEach((point) => {
- let pointPosition;
- if (getIsAMap()) {
- pointPosition = [point.longitude, point.latitude];
- } else if (getIsBMap()) {
- pointPosition = new maps.Point(point.longitude, point.latitude);
- } else {
- pointPosition = new maps.LatLng(point.latitude, point.longitude);
- }
- path.push(pointPosition);
- });
- const strokeWeight = Number(option.width) || 1;
- const {
- r: sr,
- g: sg,
- b: sb,
- a: sa
- } = hexToRgba(option.color);
- const {
- r: br,
- g: bg,
- b: bb,
- a: ba
- } = hexToRgba(option.borderColor);
- const polylineOptions = {
- map,
- clickable: false,
- path,
- strokeWeight,
- strokeColor: option.color || void 0,
- strokeDashStyle: option.dottedLine ? "dash" : "solid"
- };
- const borderWidth = Number(option.borderWidth) || 0;
- const polylineBorderOptions = {
- map,
- clickable: false,
- path,
- strokeWeight: strokeWeight + borderWidth * 2,
- strokeColor: option.borderColor || void 0,
- strokeDashStyle: option.dottedLine ? "dash" : "solid"
- };
- if ("Color" in maps) {
- polylineOptions.strokeColor = new maps.Color(sr, sg, sb, sa);
- polylineBorderOptions.strokeColor = new maps.Color(br, bg, bb, ba);
- } else {
- polylineOptions.strokeColor = `rgb(${sr}, ${sg}, ${sb})`;
- polylineOptions.strokeOpacity = sa;
- polylineBorderOptions.strokeColor = `rgb(${br}, ${bg}, ${bb})`;
- polylineBorderOptions.strokeOpacity = ba;
- }
- if (borderWidth) {
- polylineBorder = new maps.Polyline(polylineBorderOptions);
- }
- if (getIsBMap()) {
- polyline = new maps.Polyline(polylineOptions.path, polylineOptions);
- map.addOverlay(polyline);
- } else {
- polyline = new maps.Polyline(polylineOptions);
- }
- }
- addPolyline(props2);
- vue.watch(props2, updatePolyline);
- });
- return () => {
- return null;
- };
- }
- });
- const props$5 = {
- latitude: {
- type: [Number, String],
- require: true
- },
- longitude: {
- type: [Number, String],
- require: true
- },
- color: {
- type: String,
- default: "#000000"
- },
- fillColor: {
- type: String,
- default: "#00000000"
- },
- radius: {
- type: [Number, String],
- require: true
- },
- strokeWidth: {
- type: [Number, String],
- default: ""
- },
- level: {
- type: String,
- default: ""
- }
- };
- const MapCircle = /* @__PURE__ */ defineSystemComponent({
- name: "MapCircle",
- props: props$5,
- setup(props2) {
- const onMapReady = vue.inject("onMapReady");
- let circle;
- function removeCircle() {
- if (circle) {
- circle.setMap(null);
- }
- }
- onMapReady((map, maps) => {
- function updateCircle(option) {
- removeCircle();
- addCircle(option);
- }
- function addCircle(option) {
- const center = getIsAMap() || getIsBMap() ? [option.longitude, option.latitude] : new maps.LatLng(option.latitude, option.longitude);
- const circleOptions = {
- map,
- center,
- clickable: false,
- radius: option.radius,
- strokeWeight: Number(option.strokeWidth) || 1,
- strokeDashStyle: "solid"
- };
- if (getIsBMap()) {
- circleOptions.strokeColor = option.color;
- circleOptions.fillColor = option.fillColor || "#000";
- circleOptions.fillOpacity = 1;
- } else {
- const {
- r: fr,
- g: fg,
- b: fb,
- a: fa
- } = hexToRgba(option.fillColor);
- const {
- r: sr,
- g: sg,
- b: sb,
- a: sa
- } = hexToRgba(option.color);
- if ("Color" in maps) {
- circleOptions.fillColor = new maps.Color(fr, fg, fb, fa);
- circleOptions.strokeColor = new maps.Color(sr, sg, sb, sa);
- } else {
- circleOptions.fillColor = `rgb(${fr}, ${fg}, ${fb})`;
- circleOptions.fillOpacity = fa;
- circleOptions.strokeColor = `rgb(${sr}, ${sg}, ${sb})`;
- circleOptions.strokeOpacity = sa;
- }
- }
- if (getIsBMap()) {
- let pt = new maps.Point(
- // @ts-ignore
- circleOptions.center[0],
- // @ts-ignore
- circleOptions.center[1]
- );
- circle = new maps.Circle(pt, circleOptions.radius, circleOptions);
- map.addOverlay(circle);
- } else {
- circle = new maps.Circle(circleOptions);
- if (getIsAMap()) {
- map.add(circle);
- }
- }
- }
- addCircle(props2);
- vue.watch(props2, updateCircle);
- });
- return () => {
- return null;
- };
- }
- });
- const props$4 = {
- id: {
- type: [Number, String],
- default: ""
- },
- position: {
- type: Object,
- required: true
- },
- iconPath: {
- type: String,
- required: true
- },
- clickable: {
- type: [Boolean, String],
- default: ""
- },
- trigger: {
- type: Function,
- required: true
- }
- };
- const MapControl = /* @__PURE__ */ defineSystemComponent({
- name: "MapControl",
- props: props$4,
- setup(props2) {
- const imgPath = vue.computed(() => getRealPath(props2.iconPath));
- const positionStyle = vue.computed(() => {
- let positionStyle2 = `top:${props2.position.top || 0}px;left:${props2.position.left || 0}px;`;
- if (props2.position.width) {
- positionStyle2 += `width:${props2.position.width}px;`;
- }
- if (props2.position.height) {
- positionStyle2 += `height:${props2.position.height}px;`;
- }
- return positionStyle2;
- });
- const handleClick = ($event) => {
- if (props2.clickable) {
- props2.trigger("controltap", $event, {
- controlId: props2.id
- });
- }
- };
- return () => {
- return vue.createVNode("div", {
- "class": "uni-map-control"
- }, [vue.createVNode("img", {
- "src": imgPath.value,
- "style": positionStyle.value,
- "class": "uni-map-control-icon",
- "onClick": handleClick
- }, null, 12, ["src", "onClick"])]);
- };
- }
- });
- const CONTEXT_ID = "MAP_LOCATION";
- const MapLocation = /* @__PURE__ */ defineSystemComponent({
- name: "MapLocation",
- setup() {
- const state = vue.reactive({
- latitude: 0,
- longitude: 0,
- rotate: 0
- });
- return () => {
- return state.latitude ? vue.createVNode(MapMarker, vue.mergeProps({
- "anchor": {
- x: 0.5,
- y: 0.5
- },
- "width": "44",
- "height": "44",
- "iconPath": ICON_PATH_ORIGIN
- }, state), null, 16, ["iconPath"]) : null;
- };
- }
- });
- const props$3 = {
- // 边框虚线,腾讯地图支持,google 高德 地图不支持,默认值为[0, 0] 为实线,非 [0, 0] 为虚线,H5 端无法像微信小程序一样控制虚线的间隔像素大小
- dashArray: {
- type: Array,
- default: () => [0, 0]
- },
- // 经纬度数组,[{latitude: 0, longitude: 0}]
- points: {
- type: Array,
- required: true
- },
- // 描边的宽度
- strokeWidth: {
- type: Number,
- default: 1
- },
- // 描边的颜色,十六进制
- strokeColor: {
- type: String,
- default: "#000000"
- },
- // 填充颜色,十六进制
- fillColor: {
- type: String,
- default: "#00000000"
- },
- // 设置多边形 Z 轴数值
- zIndex: {
- type: Number,
- default: 0
- }
- };
- const MapPolygon = /* @__PURE__ */ defineSystemComponent({
- name: "MapPolygon",
- props: props$3,
- setup(props2) {
- let polygonIns;
- const onMapReady = vue.inject("onMapReady");
- onMapReady((map, maps, trigger) => {
- function drawPolygon() {
- const {
- points,
- strokeWidth,
- strokeColor,
- dashArray,
- fillColor,
- zIndex
- } = props2;
- const path = points.map((item) => {
- const {
- latitude,
- longitude
- } = item;
- if (getIsAMap()) {
- return [longitude, latitude];
- } else if (getIsBMap()) {
- return new maps.Point(longitude, latitude);
- } else {
- return new maps.LatLng(latitude, longitude);
- }
- });
- const {
- r: fcR,
- g: fcG,
- b: fcB,
- a: fcA
- } = hexToRgba(fillColor);
- const {
- r: scR,
- g: scG,
- b: scB,
- a: scA
- } = hexToRgba(strokeColor);
- const polygonOptions = {
- //多边形是否可点击。
- clickable: true,
- //鼠标在多边形内的光标样式。
- cursor: "crosshair",
- //多边形是否可编辑。
- editable: false,
- // 地图实例,即要显示多边形的地图
- // @ts-ignore
- map,
- // 区域填充色
- fillColor: "",
- //多边形的路径,以经纬度坐标数组构成。
- path,
- // 区域边框
- strokeColor: "",
- //多边形的边框样式。实线是solid,虚线是dash。
- strokeDashStyle: dashArray.some((item) => item > 0) ? "dash" : "solid",
- //多边形的边框线宽。
- strokeWeight: strokeWidth,
- //多边形是否可见。
- visible: true,
- //多边形的zIndex值。
- zIndex
- };
- if (maps.Color) {
- polygonOptions.fillColor = new maps.Color(fcR, fcG, fcB, fcA);
- polygonOptions.strokeColor = new maps.Color(scR, scG, scB, scA);
- } else {
- polygonOptions.fillColor = `rgb(${fcR}, ${fcG}, ${fcB})`;
- polygonOptions.fillOpacity = fcA;
- polygonOptions.strokeColor = `rgb(${scR}, ${scG}, ${scB})`;
- polygonOptions.strokeOpacity = scA;
- }
- if (polygonIns) {
- polygonIns.setOptions(polygonOptions);
- return;
- }
- if (getIsBMap()) {
- polygonIns = new maps.Polygon(polygonOptions.path, polygonOptions);
- map.addOverlay(polygonIns);
- } else {
- polygonIns = new maps.Polygon(polygonOptions);
- }
- }
- drawPolygon();
- vue.watch(props2, drawPolygon);
- });
- return () => null;
- }
- });
- const props$2 = {
- id: {
- type: String,
- default: ""
- },
- latitude: {
- type: [String, Number],
- default: 0
- },
- longitude: {
- type: [String, Number],
- default: 0
- },
- scale: {
- type: [String, Number],
- default: 16
- },
- markers: {
- type: Array,
- default() {
- return [];
- }
- },
- includePoints: {
- type: Array,
- default() {
- return [];
- }
- },
- polyline: {
- type: Array,
- default() {
- return [];
- }
- },
- circles: {
- type: Array,
- default() {
- return [];
- }
- },
- controls: {
- type: Array,
- default() {
- return [];
- }
- },
- showLocation: {
- type: [Boolean, String],
- default: false
- },
- libraries: {
- type: Array,
- default() {
- return [];
- }
- },
- polygons: {
- type: Array,
- default: () => []
- }
- };
- function getPoints(points) {
- const newPoints = [];
- if (shared.isArray(points)) {
- points.forEach((point) => {
- if (point && point.latitude && point.longitude) {
- newPoints.push({
- latitude: point.latitude,
- longitude: point.longitude
- });
- }
- });
- }
- return newPoints;
- }
- function getAMapPosition(maps, latitude, longitude) {
- return new maps.LngLat(longitude, latitude);
- }
- function getBMapPosition(maps, latitude, longitude) {
- return new maps.Point(longitude, latitude);
- }
- function getGoogleOrQQMapPosition(maps, latitude, longitude) {
- return new maps.LatLng(latitude, longitude);
- }
- function getMapPosition(maps, latitude, longitude) {
- if (getIsBMap()) {
- return getBMapPosition(maps, latitude, longitude);
- } else if (getIsAMap()) {
- return getAMapPosition(maps, latitude, longitude);
- } else {
- return getGoogleOrQQMapPosition(maps, latitude, longitude);
- }
- }
- function getLat(latLng) {
- if ("getLat" in latLng) {
- return latLng.getLat();
- } else {
- if (getIsBMap()) {
- return latLng.lat;
- }
- return latLng.lat();
- }
- }
- function getLng(latLng) {
- if ("getLng" in latLng) {
- return latLng.getLng();
- } else {
- if (getIsBMap()) {
- return latLng.lng;
- }
- return latLng.lng();
- }
- }
- function useMap(props2, rootRef, emit2) {
- const trigger = useCustomEvent(rootRef, emit2);
- const mapRef = vue.ref(null);
- let maps;
- let map;
- const state = vue.reactive({
- latitude: Number(props2.latitude),
- longitude: Number(props2.longitude),
- includePoints: getPoints(props2.includePoints)
- });
- function onMapReady(callback) {
- }
- let isBoundsReady;
- function onBoundsReady(callback) {
- }
- const contexts = {};
- function addMapChidlContext(context) {
- contexts[context.id] = context;
- }
- function removeMapChidlContext(context) {
- delete contexts[context.id];
- }
- vue.watch([() => props2.latitude, () => props2.longitude], ([latitudeVlaue, longitudeVlaue]) => {
- const latitude = Number(latitudeVlaue);
- const longitude = Number(longitudeVlaue);
- if (latitude !== state.latitude || longitude !== state.longitude) {
- state.latitude = latitude;
- state.longitude = longitude;
- }
- });
- vue.watch(() => props2.includePoints, (points) => {
- state.includePoints = getPoints(points);
- }, {
- deep: true
- });
- function updateBounds() {
- if (getIsAMap()) {
- const points = [];
- state.includePoints.forEach((point) => {
- points.push([point.longitude, point.latitude]);
- });
- const bounds = new maps.Bounds(...points);
- map.setBounds(bounds);
- } else if (getIsBMap())
- ;
- else {
- const bounds = new maps.LatLngBounds();
- state.includePoints.forEach(({
- latitude,
- longitude
- }) => {
- const latLng = new maps.LatLng(latitude, longitude);
- bounds.extend(latLng);
- });
- map.fitBounds(bounds);
- }
- }
- try {
- const id2 = useContextInfo();
- useSubscribe((type, data = {}) => {
- switch (type) {
- case "getCenterLocation":
- onMapReady(() => {
- const center = map.getCenter();
- uniShared.callOptions(data, {
- latitude: getLat(center),
- longitude: getLng(center),
- errMsg: `${type}:ok`
- });
- });
- break;
- case "moveToLocation":
- {
- let latitude = Number(data.latitude);
- let longitude = Number(data.longitude);
- if (!latitude || !longitude) {
- const context = contexts[CONTEXT_ID];
- if (context) {
- latitude = context.state.latitude;
- longitude = context.state.longitude;
- }
- }
- if (latitude && longitude) {
- state.latitude = latitude;
- state.longitude = longitude;
- if (map)
- ;
- onMapReady(() => {
- uniShared.callOptions(data, `${type}:ok`);
- });
- } else {
- uniShared.callOptions(data, `${type}:fail`);
- }
- }
- break;
- case "translateMarker":
- onMapReady(() => {
- const context = contexts[data.markerId];
- if (context) {
- try {
- context.translate(data);
- } catch (error) {
- uniShared.callOptions(data, `${type}:fail ${error.message}`);
- }
- uniShared.callOptions(data, `${type}:ok`);
- } else {
- uniShared.callOptions(data, `${type}:fail not found`);
- }
- });
- break;
- case "includePoints":
- state.includePoints = getPoints(data.includePoints);
- if (isBoundsReady || getIsAMap()) {
- updateBounds();
- }
- onBoundsReady(() => {
- uniShared.callOptions(data, `${type}:ok`);
- });
- break;
- case "getRegion":
- onBoundsReady(() => {
- const latLngBounds = map.getBounds();
- const southwest = latLngBounds.getSouthWest();
- const northeast = latLngBounds.getNorthEast();
- uniShared.callOptions(data, {
- southwest: {
- latitude: getLat(southwest),
- longitude: getLng(southwest)
- },
- northeast: {
- latitude: getLat(northeast),
- longitude: getLng(northeast)
- },
- errMsg: `${type}:ok`
- });
- });
- break;
- case "getScale":
- onMapReady(() => {
- uniShared.callOptions(data, {
- scale: map.getZoom(),
- errMsg: `${type}:ok`
- });
- });
- break;
- }
- }, id2, true);
- } catch (error) {
- }
- vue.provide("onMapReady", onMapReady);
- vue.provide("addMapChidlContext", addMapChidlContext);
- vue.provide("removeMapChidlContext", removeMapChidlContext);
- return {
- state,
- mapRef,
- trigger
- };
- }
- const index$a = /* @__PURE__ */ defineBuiltInComponent({
- name: "Map",
- props: props$2,
- emits: ["markertap", "labeltap", "callouttap", "controltap", "regionchange", "tap", "click", "updated", "update:scale", "update:latitude", "update:longitude"],
- setup(props2, {
- emit: emit2,
- slots
- }) {
- const rootRef = vue.ref(null);
- const {
- mapRef,
- trigger
- } = useMap(props2, rootRef, emit2);
- return () => {
- return vue.createVNode("uni-map", {
- "ref": rootRef,
- "id": props2.id
- }, [vue.createVNode("div", {
- "ref": mapRef,
- "style": "width: 100%; height: 100%; position: relative; overflow: hidden"
- }, null, 512), props2.markers.map((item) => vue.createVNode(MapMarker, vue.mergeProps({
- "key": item.id
- }, item), null, 16)), props2.polyline.map((item) => vue.createVNode(MapPolyline, item, null, 16)), props2.circles.map((item) => vue.createVNode(MapCircle, item, null, 16)), props2.controls.map((item) => vue.createVNode(MapControl, vue.mergeProps(item, {
- "trigger": trigger
- }), null, 16, ["trigger"])), props2.showLocation && vue.createVNode(MapLocation, null, null), props2.polygons.map((item) => vue.createVNode(MapPolygon, item, null, 16)), vue.createVNode("div", {
- "style": "position: absolute;top: 0;width: 100%;height: 100%;overflow: hidden;pointer-events: none;"
- }, [slots.default && slots.default()])], 8, ["id"]);
- };
- }
- });
- const props$1 = {
- scrollTop: {
- type: [String, Number],
- default: 0
- }
- };
- const index$9 = /* @__PURE__ */ defineBuiltInComponent({
- name: "CoverView",
- compatConfig: {
- MODE: 3
- },
- props: props$1,
- setup(props2, {
- slots
- }) {
- const root = vue.ref(null);
- const content = vue.ref(null);
- vue.watch(() => props2.scrollTop, (val) => {
- setScrollTop(val);
- });
- function setScrollTop(val) {
- let _content = content.value;
- if (getComputedStyle(_content).overflowY === "scroll") {
- _content.scrollTop = _upx2pxNum(val);
- }
- }
- function _upx2pxNum(val) {
- let _val = String(val);
- if (/\d+[ur]px$/i.test(_val)) {
- _val.replace(/\d+[ur]px$/i, (text) => {
- return String(uni.upx2px(parseFloat(text)));
- });
- }
- return parseFloat(_val) || 0;
- }
- return () => {
- return vue.createVNode("uni-cover-view", {
- "scroll-top": props2.scrollTop,
- "ref": root
- }, [vue.createVNode("div", {
- "ref": content,
- "class": "uni-cover-view"
- }, [slots.default && slots.default()], 512)], 8, ["scroll-top"]);
- };
- }
- });
- const index$8 = /* @__PURE__ */ defineBuiltInComponent({
- name: "CoverImage",
- compatConfig: {
- MODE: 3
- },
- props: {
- src: {
- type: String,
- default: ""
- }
- },
- emits: ["load", "error"],
- setup(props2, {
- emit: emit2
- }) {
- const root = vue.ref(null);
- const trigger = useCustomEvent(root, emit2);
- function load($event) {
- trigger("load", $event);
- }
- function error($event) {
- trigger("error", $event);
- }
- return () => {
- const {
- src
- } = props2;
- return vue.createVNode("uni-cover-image", {
- "ref": root,
- "src": src
- }, [vue.createVNode("div", {
- "class": "uni-cover-image"
- }, [src ? vue.createVNode("img", {
- "src": getRealPath(src),
- "onLoad": load,
- "onError": error
- }, null, 40, ["src", "onLoad", "onError"]) : null])], 8, ["src"]);
- };
- }
- });
- function usePopupStyle(props2) {
- const popupWidth = vue.ref(0);
- const popupHeight = vue.ref(0);
- const isDesktop = vue.computed(
- () => popupWidth.value >= 500 && popupHeight.value >= 500
- );
- const popupStyle = vue.computed(() => {
- const style = {
- content: {
- transform: "",
- left: "",
- top: "",
- bottom: ""
- },
- triangle: {
- left: "",
- top: "",
- bottom: "",
- "border-width": "",
- "border-color": ""
- }
- };
- const contentStyle = style.content;
- const triangleStyle = style.triangle;
- const popover = props2.popover;
- function getNumber(value) {
- return Number(value) || 0;
- }
- if (isDesktop.value && popover) {
- shared.extend(triangleStyle, {
- position: "absolute",
- width: "0",
- height: "0",
- "margin-left": "-6px",
- "border-style": "solid"
- });
- const popoverLeft = getNumber(popover.left);
- const popoverWidth = getNumber(popover.width);
- const popoverTop = getNumber(popover.top);
- const popoverHeight = getNumber(popover.height);
- const center = popoverLeft + popoverWidth / 2;
- contentStyle.transform = "none !important";
- const contentLeft = Math.max(0, center - 300 / 2);
- contentStyle.left = `${contentLeft}px`;
- let triangleLeft = Math.max(12, center - contentLeft);
- triangleLeft = Math.min(300 - 12, triangleLeft);
- triangleStyle.left = `${triangleLeft}px`;
- const vcl = popupHeight.value / 2;
- if (popoverTop + popoverHeight - vcl > vcl - popoverTop) {
- contentStyle.top = "auto";
- contentStyle.bottom = `${popupHeight.value - popoverTop + 6}px`;
- triangleStyle.bottom = "-6px";
- triangleStyle["border-width"] = "6px 6px 0 6px";
- triangleStyle["border-color"] = "#fcfcfd transparent transparent transparent";
- } else {
- contentStyle.top = `${popoverTop + popoverHeight + 6}px`;
- triangleStyle.top = "-6px";
- triangleStyle["border-width"] = "0 6px 6px 6px";
- triangleStyle["border-color"] = "transparent transparent #fcfcfd transparent";
- }
- }
- return style;
- });
- return {
- isDesktop,
- popupStyle
- };
- }
- function useKeyboard() {
- const key = vue.ref("");
- const disable = vue.ref(false);
- return {
- key,
- disable
- };
- }
- function _isSlot(s) {
- return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s);
- }
- function getDefaultStartValue(props2) {
- if (props2.mode === mode.TIME) {
- return "00:00";
- }
- if (props2.mode === mode.DATE) {
- const year = (/* @__PURE__ */ new Date()).getFullYear() - 150;
- switch (props2.fields) {
- case fields.YEAR:
- return year.toString();
- case fields.MONTH:
- return year + "-01";
- default:
- return year + "-01-01";
- }
- }
- return "";
- }
- function getDefaultEndValue(props2) {
- if (props2.mode === mode.TIME) {
- return "23:59";
- }
- if (props2.mode === mode.DATE) {
- const year = (/* @__PURE__ */ new Date()).getFullYear() + 150;
- switch (props2.fields) {
- case fields.YEAR:
- return year.toString();
- case fields.MONTH:
- return year + "-12";
- default:
- return year + "-12-31";
- }
- }
- return "";
- }
- function getDateValueArray(props2, state, valueStr, defaultValue) {
- const splitStr = props2.mode === mode.DATE ? "-" : ":";
- const array = props2.mode === mode.DATE ? state.dateArray : state.timeArray;
- let max;
- if (props2.mode === mode.TIME) {
- max = 2;
- } else {
- switch (props2.fields) {
- case fields.YEAR:
- max = 1;
- break;
- case fields.MONTH:
- max = 2;
- break;
- default:
- max = 3;
- break;
- }
- }
- const inputArray = String(valueStr).split(splitStr);
- let value = [];
- for (let i = 0; i < max; i++) {
- const val = inputArray[i];
- value.push(array[i].indexOf(val));
- }
- if (value.indexOf(-1) >= 0) {
- value = defaultValue ? getDateValueArray(props2, state, defaultValue) : value.map(() => 0);
- }
- return value;
- }
- const mode = {
- SELECTOR: "selector",
- MULTISELECTOR: "multiSelector",
- TIME: "time",
- DATE: "date"
- // 暂不支持城市选择
- // REGION: 'region'
- };
- const fields = {
- YEAR: "year",
- MONTH: "month",
- DAY: "day"
- };
- const selectorType = {
- PICKER: "picker",
- SELECT: "select"
- };
- const props = {
- name: {
- type: String,
- default: ""
- },
- range: {
- type: Array,
- default() {
- return [];
- }
- },
- rangeKey: {
- type: String,
- default: ""
- },
- value: {
- type: [Number, String, Array],
- default: 0
- },
- mode: {
- type: String,
- default: mode.SELECTOR,
- validator(val) {
- return Object.values(mode).includes(val);
- }
- },
- fields: {
- type: String,
- default: ""
- },
- start: {
- type: String,
- default: (props2) => {
- return getDefaultStartValue(props2);
- }
- },
- end: {
- type: String,
- default: (props2) => {
- return getDefaultEndValue(props2);
- }
- },
- disabled: {
- type: [Boolean, String],
- default: false
- },
- selectorType: {
- type: String,
- default: ""
- }
- };
- const index$7 = /* @__PURE__ */ defineBuiltInComponent({
- name: "Picker",
- compatConfig: {
- MODE: 3
- },
- props,
- emits: ["change", "cancel", "columnchange"],
- setup(props2, {
- emit: emit2,
- slots
- }) {
- initI18nPickerMsgsOnce();
- const {
- t: t2
- } = useI18n();
- const rootRef = vue.ref(null);
- const pickerRef = vue.ref(null);
- const selectRef = vue.ref(null);
- const inputRef = vue.ref(null);
- const pickerRender = vue.ref(false);
- const {
- state,
- rangeArray
- } = usePickerState(props2);
- const trigger = useCustomEvent(rootRef, emit2);
- const {
- system,
- selectorTypeComputed,
- _show,
- _l10nColumn,
- _l10nItem,
- _input,
- _fixInputPosition,
- _pickerViewChange,
- _cancel,
- _change,
- _resetFormData,
- _getFormData,
- _createTime,
- _createDate,
- _setValueSync
- } = usePickerMethods(props2, state, trigger, rootRef, pickerRef, selectRef, inputRef);
- usePickerWatch(state, _cancel, _change);
- usePickerForm(_resetFormData, _getFormData);
- _createTime();
- _createDate();
- _setValueSync();
- const popup = usePopupStyle(state);
- vue.watchEffect(() => {
- state.isDesktop = popup.isDesktop.value;
- state.popupStyle = popup.popupStyle.value;
- });
- return () => {
- let _slot2;
- const {
- visible,
- contentVisible,
- valueArray,
- popupStyle,
- valueSync
- } = state;
- const {
- rangeKey,
- mode: mode2,
- start,
- end
- } = props2;
- const booleanAttrs = useBooleanAttr(props2, "disabled");
- return vue.createVNode("uni-picker", vue.mergeProps({
- "ref": rootRef
- }, booleanAttrs, {
- "onClick": withWebEvent(_show)
- }), [pickerRender.value ? vue.createVNode("div", {
- "ref": pickerRef,
- "class": ["uni-picker-container", `uni-${mode2}-${selectorTypeComputed.value}`],
- "onWheel": onEventPrevent,
- "onTouchmove": onEventPrevent
- }, [vue.createVNode(vue.Transition, {
- "name": "uni-fade"
- }, {
- default: () => [vue.withDirectives(vue.createVNode("div", {
- "class": "uni-mask uni-picker-mask",
- "onClick": withWebEvent(_cancel),
- "onMousemove": _fixInputPosition
- }, null, 40, ["onClick", "onMousemove"]), [[vue.vShow, visible]])]
- }), !system.value ? vue.createVNode("div", {
- "class": [{
- "uni-picker-toggle": visible
- }, "uni-picker-custom"],
- "style": popupStyle.content
- }, [vue.createVNode("div", {
- "class": "uni-picker-header",
- "onClick": onEventStop
- }, [vue.createVNode("div", {
- "class": "uni-picker-action uni-picker-action-cancel",
- "onClick": withWebEvent(_cancel)
- }, [t2("uni.picker.cancel")], 8, ["onClick"]), vue.createVNode("div", {
- "class": "uni-picker-action uni-picker-action-confirm",
- "onClick": _change
- }, [t2("uni.picker.done")], 8, ["onClick"])], 8, ["onClick"]), contentVisible ? vue.createVNode(PickerView, {
- "value": _l10nColumn(valueArray),
- "class": "uni-picker-content",
- "onChange": _pickerViewChange
- }, _isSlot(_slot2 = vue.renderList(_l10nColumn(rangeArray.value), (rangeItem, index0) => {
- let _slot;
- return vue.createVNode(PickerViewColumn, {
- "key": index0
- }, _isSlot(_slot = vue.renderList(rangeItem, (item, index2) => vue.createVNode("div", {
- "key": index2,
- "class": "uni-picker-item"
- }, [typeof item === "object" ? item[rangeKey] || "" : _l10nItem(item, index0)]))) ? _slot : {
- default: () => [_slot],
- _: 1
- });
- })) ? _slot2 : {
- default: () => [_slot2],
- _: 1
- }, 8, ["value", "onChange"]) : null, vue.createVNode("div", {
- "ref": selectRef,
- "class": "uni-picker-select",
- "onWheel": onEventStop,
- "onTouchmove": onEventStop
- }, [vue.renderList(rangeArray.value[0], (item, index2) => vue.createVNode("div", {
- "key": index2,
- "class": ["uni-picker-item", {
- selected: valueArray[0] === index2
- }],
- "onClick": () => {
- valueArray[0] = index2;
- _change();
- }
- }, [typeof item === "object" ? item[rangeKey] || "" : item], 10, ["onClick"]))], 40, ["onWheel", "onTouchmove"]), vue.createVNode("div", {
- "style": popupStyle.triangle
- }, null, 4)], 6) : null], 40, ["onWheel", "onTouchmove"]) : null, vue.createVNode("div", null, [slots.default && slots.default()]), system.value ? vue.createVNode("div", {
- "class": "uni-picker-system",
- "onMousemove": withWebEvent(_fixInputPosition)
- }, [vue.createVNode("input", {
- "class": ["uni-picker-system_input", system.value],
- "ref": inputRef,
- "value": valueSync,
- "type": mode2,
- "tabindex": "-1",
- "min": start,
- "max": end,
- "onChange": ($event) => {
- _input($event);
- onEventStop($event);
- }
- }, null, 42, ["value", "type", "min", "max", "onChange"])], 40, ["onMousemove"]) : null], 16, ["onClick"]);
- };
- }
- });
- function usePickerState(props2) {
- const state = vue.reactive({
- valueSync: void 0,
- visible: false,
- contentVisible: false,
- popover: null,
- valueChangeSource: "",
- timeArray: [],
- dateArray: [],
- valueArray: [],
- oldValueArray: [],
- isDesktop: false,
- popupStyle: {
- content: {},
- triangle: {}
- }
- });
- const rangeArray = vue.computed(() => {
- let val = props2.range;
- switch (props2.mode) {
- case mode.SELECTOR:
- return [val];
- case mode.MULTISELECTOR:
- return val;
- case mode.TIME:
- return state.timeArray;
- case mode.DATE: {
- const dateArray = state.dateArray;
- switch (props2.fields) {
- case fields.YEAR:
- return [dateArray[0]];
- case fields.MONTH:
- return [dateArray[0], dateArray[1]];
- default:
- return [dateArray[0], dateArray[1], dateArray[2]];
- }
- }
- }
- return [];
- });
- return {
- state,
- rangeArray
- };
- }
- function useIsiPad() {
- const isiPad = vue.ref(false);
- return isiPad;
- }
- function useSystem() {
- const _system = vue.ref("");
- return _system;
- }
- let __contentVisibleDelay;
- function usePickerMethods(props2, state, trigger, rootRef, pickerRef, selectRef, inputRef) {
- const isiPad = useIsiPad();
- const _system = useSystem();
- const selectorTypeComputed = vue.computed(() => {
- const type = props2.selectorType;
- if (Object.values(selectorType).includes(type)) {
- return type;
- }
- return isiPad.value ? selectorType.PICKER : selectorType.SELECT;
- });
- const system = vue.computed(() => {
- if (props2.mode === mode.DATE && !Object.values(fields).includes(props2.fields) && state.isDesktop) {
- return _system.value;
- }
- return "";
- });
- const startArray = vue.computed(() => {
- return getDateValueArray(props2, state, props2.start, getDefaultStartValue(props2));
- });
- const endArray = vue.computed(() => {
- return getDateValueArray(props2, state, props2.end, getDefaultEndValue(props2));
- });
- function _show(event) {
- if (props2.disabled) {
- return;
- }
- state.valueChangeSource = "";
- let $picker = pickerRef.value;
- let _currentTarget = event.currentTarget;
- $picker.remove();
- (document.querySelector("uni-app") || document.body).appendChild($picker);
- $picker.style.display = "block";
- const rect = _currentTarget.getBoundingClientRect();
- state.popover = {
- top: rect.top,
- left: rect.left,
- width: rect.width,
- height: rect.height
- };
- setTimeout(() => {
- state.visible = true;
- }, 20);
- }
- function _getFormData() {
- return {
- value: state.valueSync,
- key: props2.name
- };
- }
- function _resetFormData() {
- switch (props2.mode) {
- case mode.SELECTOR:
- state.valueSync = 0;
- break;
- case mode.MULTISELECTOR:
- state.valueSync = props2.value.map((val) => 0);
- break;
- case mode.DATE:
- case mode.TIME:
- state.valueSync = "";
- break;
- }
- }
- function _createTime() {
- let hours = [];
- let minutes = [];
- for (let i = 0; i < 24; i++) {
- hours.push((i < 10 ? "0" : "") + i);
- }
- for (let i = 0; i < 60; i++) {
- minutes.push((i < 10 ? "0" : "") + i);
- }
- state.timeArray.push(hours, minutes);
- }
- function getYearStartEnd() {
- let year = (/* @__PURE__ */ new Date()).getFullYear();
- let start = year - 150;
- let end = year + 150;
- if (props2.start) {
- const _year = new Date(props2.start).getFullYear();
- if (!isNaN(_year) && _year < start) {
- start = _year;
- }
- }
- if (props2.end) {
- const _year = new Date(props2.end).getFullYear();
- if (!isNaN(_year) && _year > end) {
- end = _year;
- }
- }
- return {
- start,
- end
- };
- }
- function _createDate() {
- let years = [];
- const year = getYearStartEnd();
- for (let i = year.start, end = year.end; i <= end; i++) {
- years.push(String(i));
- }
- let months = [];
- for (let i = 1; i <= 12; i++) {
- months.push((i < 10 ? "0" : "") + i);
- }
- let days = [];
- for (let i = 1; i <= 31; i++) {
- days.push((i < 10 ? "0" : "") + i);
- }
- state.dateArray.push(years, months, days);
- }
- function _getTimeValue(val) {
- return val[0] * 60 + val[1];
- }
- function _getDateValue(val) {
- const DAY = 31;
- return val[0] * DAY * 12 + (val[1] || 0) * DAY + (val[2] || 0);
- }
- function _cloneArray(val1, val2) {
- for (let i = 0; i < val1.length && i < val2.length; i++) {
- val1[i] = val2[i];
- }
- }
- function _setValueSync() {
- let val = props2.value;
- switch (props2.mode) {
- case mode.MULTISELECTOR:
- {
- if (!shared.isArray(val)) {
- val = state.valueArray;
- }
- if (!shared.isArray(state.valueSync)) {
- state.valueSync = [];
- }
- const length = state.valueSync.length = Math.max(val.length, props2.range.length);
- for (let index2 = 0; index2 < length; index2++) {
- const val0 = Number(val[index2]);
- const val1 = Number(state.valueSync[index2]);
- const val2 = isNaN(val0) ? isNaN(val1) ? 0 : val1 : val0;
- const maxVal = props2.range[index2] ? props2.range[index2].length - 1 : 0;
- state.valueSync.splice(index2, 1, val2 < 0 || val2 > maxVal ? 0 : val2);
- }
- }
- break;
- case mode.TIME:
- case mode.DATE:
- state.valueSync = String(val);
- break;
- default: {
- const valueSync = Number(val);
- state.valueSync = valueSync < 0 ? 0 : valueSync;
- break;
- }
- }
- }
- function _setValueArray() {
- let val = state.valueSync;
- let valueArray;
- switch (props2.mode) {
- case mode.MULTISELECTOR:
- valueArray = [...val];
- break;
- case mode.TIME:
- valueArray = getDateValueArray(props2, state, val, uniShared.formatDateTime({
- mode: mode.TIME
- }));
- break;
- case mode.DATE:
- valueArray = getDateValueArray(props2, state, val, uniShared.formatDateTime({
- mode: mode.DATE
- }));
- break;
- default:
- valueArray = [val];
- break;
- }
- state.oldValueArray = [...valueArray];
- state.valueArray = [...valueArray];
- }
- function _getValue() {
- let val = state.valueArray;
- switch (props2.mode) {
- case mode.SELECTOR:
- return val[0];
- case mode.MULTISELECTOR:
- return val.map((val2) => val2);
- case mode.TIME:
- return state.valueArray.map((val2, i) => state.timeArray[i][val2]).join(":");
- case mode.DATE:
- return state.valueArray.map((val2, i) => state.dateArray[i][val2]).join("-");
- }
- }
- function _change() {
- _close();
- state.valueChangeSource = "click";
- const value = _getValue();
- state.valueSync = shared.isArray(value) ? value.map((val) => val) : value;
- trigger("change", {}, {
- value
- });
- }
- function _cancel($event) {
- if (system.value === "firefox" && $event) {
- const {
- top,
- left,
- width,
- height
- } = state.popover;
- const {
- pageX,
- pageY
- } = $event;
- if (pageX > left && pageX < left + width && pageY > top && pageY < top + height) {
- return;
- }
- }
- _close();
- trigger("cancel", {}, {});
- }
- function _close() {
- state.visible = false;
- setTimeout(() => {
- let $picker = pickerRef.value;
- $picker.remove();
- rootRef.value.prepend($picker);
- $picker.style.display = "none";
- }, 260);
- }
- function _select() {
- if (props2.mode === mode.SELECTOR && selectorTypeComputed.value === selectorType.SELECT) {
- selectRef.value.scrollTop = state.valueArray[0] * 34;
- }
- }
- function _input($event) {
- const EventTarget = $event.target;
- state.valueSync = EventTarget.value;
- vue.nextTick(() => {
- _change();
- });
- }
- function _fixInputPosition($event) {
- if (system.value === "chrome") {
- const rect = rootRef.value.getBoundingClientRect();
- const fontSize = 32;
- inputRef.value.style.left = `${$event.clientX - rect.left - fontSize * 1.5}px`;
- inputRef.value.style.top = `${$event.clientY - rect.top - fontSize * 0.5}px`;
- }
- }
- function _pickerViewChange(event) {
- state.valueArray = _l10nColumn(event.detail.value, true);
- }
- function _l10nColumn(array, normalize) {
- const {
- getLocale: getLocale2
- } = useI18n();
- if (props2.mode === mode.DATE) {
- const locale = getLocale2();
- if (!locale.startsWith("zh")) {
- switch (props2.fields) {
- case fields.YEAR:
- return array;
- case fields.MONTH:
- return [array[1], array[0]];
- default:
- switch (locale) {
- case "es":
- case "fr":
- return [array[2], array[1], array[0]];
- default:
- return normalize ? [array[2], array[0], array[1]] : [array[1], array[2], array[0]];
- }
- }
- }
- }
- return array;
- }
- function _l10nItem(item, index2) {
- const {
- getLocale: getLocale2
- } = useI18n();
- if (props2.mode === mode.DATE) {
- const locale = getLocale2();
- if (locale.startsWith("zh")) {
- const array = ["年", "月", "日"];
- return item + array[index2];
- } else if (props2.fields !== fields.YEAR && index2 === (props2.fields !== fields.MONTH && (locale === "es" || locale === "fr") ? 1 : 0)) {
- let array;
- switch (locale) {
- case "es":
- array = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"];
- break;
- case "fr":
- array = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];
- break;
- default:
- array = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
- break;
- }
- return array[Number(item) - 1];
- }
- }
- return item;
- }
- vue.watch(() => state.visible, (val) => {
- if (val) {
- clearTimeout(__contentVisibleDelay);
- state.contentVisible = val;
- _select();
- } else {
- __contentVisibleDelay = setTimeout(() => {
- state.contentVisible = val;
- }, 300);
- }
- });
- vue.watch([() => props2.mode, () => props2.value, () => props2.range], _setValueSync, {
- deep: true
- });
- vue.watch(() => state.valueSync, _setValueArray, {
- deep: true
- });
- vue.watch(() => state.valueArray, (val) => {
- if (props2.mode === mode.TIME || props2.mode === mode.DATE) {
- const getValue = props2.mode === mode.TIME ? _getTimeValue : _getDateValue;
- const valueArray = state.valueArray;
- const _startArray = startArray.value;
- const _endArray = endArray.value;
- if (props2.mode === mode.DATE) {
- const dateArray = state.dateArray;
- const max = dateArray[2].length;
- const day = Number(dateArray[2][valueArray[2]]) || 1;
- const realDay = (/* @__PURE__ */ new Date(`${dateArray[0][valueArray[0]]}/${dateArray[1][valueArray[1]]}/${day}`)).getDate();
- if (realDay < day) {
- valueArray[2] -= realDay + max - day;
- }
- }
- if (getValue(valueArray) < getValue(_startArray)) {
- _cloneArray(valueArray, _startArray);
- } else if (getValue(valueArray) > getValue(_endArray)) {
- _cloneArray(valueArray, _endArray);
- }
- }
- val.forEach((value, column) => {
- if (value !== state.oldValueArray[column]) {
- state.oldValueArray[column] = value;
- if (props2.mode === mode.MULTISELECTOR) {
- trigger("columnchange", {}, {
- column,
- value
- });
- }
- }
- });
- });
- return {
- selectorTypeComputed,
- system,
- _show,
- _cancel,
- _change,
- _l10nColumn,
- _l10nItem,
- _input,
- _resetFormData,
- _getFormData,
- _createTime,
- _createDate,
- _setValueSync,
- _fixInputPosition,
- _pickerViewChange
- };
- }
- function usePickerWatch(state, _cancel, _change) {
- const {
- key,
- disable
- } = useKeyboard();
- vue.watchEffect(() => {
- disable.value = !state.visible;
- });
- vue.watch(key, (value) => {
- if (value === "esc") {
- _cancel();
- } else if (value === "enter") {
- _change();
- }
- });
- }
- function usePickerForm(_resetFormData, _getFormData) {
- const uniForm = vue.inject(uniFormKey, false);
- if (uniForm) {
- const field = {
- reset: _resetFormData,
- submit: () => {
- const data = ["", null];
- const {
- key,
- value
- } = _getFormData();
- if (key !== "") {
- data[0] = key;
- data[1] = value;
- }
- return data;
- }
- };
- uniForm.addField(field);
- }
- }
- const index$6 = /* @__PURE__ */ defineUnsupportedComponent("ad");
- const index$5 = /* @__PURE__ */ defineUnsupportedComponent("ad-content-page");
- const index$4 = /* @__PURE__ */ defineUnsupportedComponent("ad-draw");
- const index$3 = /* @__PURE__ */ defineUnsupportedComponent("camera");
- const index$2 = /* @__PURE__ */ defineUnsupportedComponent("live-player");
- const index$1 = /* @__PURE__ */ defineUnsupportedComponent("live-pusher");
- const UniViewJSBridge$1 = /* @__PURE__ */ shared.extend(ViewJSBridge, {
- publishHandler(event, args, pageId) {
- UniServiceJSBridge.subscribeHandler(event, args, pageId);
- }
- });
- const request = /* @__PURE__ */ defineTaskApi(
- API_REQUEST,
- ({
- url,
- data,
- header = {},
- method,
- dataType: dataType2,
- responseType,
- withCredentials,
- timeout = __uniConfig.networkTimeout.request
- }, { resolve, reject }) => {
- {
- timeout = timeout == null ? __uniConfig.networkTimeout.request : timeout;
- }
- let body = null;
- const contentType = normalizeContentType(header);
- if (method !== "GET") {
- if (shared.isString(data) || data instanceof ArrayBuffer) {
- body = data;
- } else {
- if (contentType === "json") {
- try {
- body = JSON.stringify(data);
- } catch (error) {
- body = data.toString();
- }
- } else if (contentType === "urlencoded") {
- const bodyArray = [];
- for (const key in data) {
- if (shared.hasOwn(data, key)) {
- bodyArray.push(
- encodeURIComponent(key) + "=" + encodeURIComponent(data[key])
- );
- }
- }
- body = bodyArray.join("&");
- } else {
- body = data.toString();
- }
- }
- }
- const xhr = new XMLHttpRequest();
- const requestTask = new RequestTask(xhr);
- xhr.open(method, url);
- for (const key in header) {
- if (shared.hasOwn(header, key)) {
- xhr.setRequestHeader(key, header[key]);
- }
- }
- const timer = setTimeout(function() {
- xhr.onload = xhr.onabort = xhr.onerror = null;
- requestTask.abort();
- reject("timeout", { errCode: 5 });
- }, timeout);
- xhr.responseType = responseType;
- xhr.onload = function() {
- clearTimeout(timer);
- const statusCode = xhr.status;
- let res = responseType === "text" ? xhr.responseText : xhr.response;
- if (responseType === "text" && dataType2 === "json") {
- try {
- res = UTS.JSON.parse(res);
- } catch (error) {
- }
- }
- resolve({
- data: res,
- statusCode,
- header: parseHeaders(xhr.getAllResponseHeaders()),
- cookies: []
- });
- };
- xhr.onabort = function() {
- clearTimeout(timer);
- reject("abort", { errCode: 600003 });
- };
- xhr.onerror = function() {
- clearTimeout(timer);
- reject(void 0, { errCode: 5 });
- };
- xhr.withCredentials = withCredentials;
- xhr.send(body);
- return requestTask;
- },
- RequestProtocol,
- RequestOptions
- );
- function normalizeContentType(header) {
- const name = Object.keys(header).find(
- (name2) => name2.toLowerCase() === "content-type"
- );
- if (!name) {
- return;
- }
- const contentType = header[name];
- if (name !== "Content-Type") {
- header["Content-Type"] = header[name];
- delete header[name];
- }
- if (contentType.indexOf("application/json") === 0) {
- return "json";
- } else if (contentType.indexOf("application/x-www-form-urlencoded") === 0) {
- return "urlencoded";
- }
- return "string";
- }
- class RequestTask {
- constructor(xhr) {
- this._xhr = xhr;
- }
- abort() {
- if (this._xhr) {
- this._xhr.abort();
- delete this._xhr;
- }
- }
- onHeadersReceived(callback) {
- throw new Error("Method not implemented.");
- }
- offHeadersReceived(callback) {
- throw new Error("Method not implemented.");
- }
- }
- function parseHeaders(headers) {
- const headersObject = {};
- headers.split(uniShared.LINEFEED).forEach((header) => {
- const find = header.match(/(\S+\s*):\s*(.*)/);
- if (!find || find.length !== 3) {
- return;
- }
- headersObject[find[1]] = find[2];
- });
- return headersObject;
- }
- const STORAGE_KEYS = "uni-storage-keys";
- function parseValue(value) {
- const types = ["object", "string", "number", "boolean", "undefined"];
- try {
- const object = shared.isString(value) ? JSON.parse(value) : value;
- const type = object.type;
- if (types.indexOf(type) >= 0) {
- const keys = Object.keys(object);
- if (keys.length === 2 && "data" in object) {
- if (typeof object.data === type) {
- if (type === "object" && !Array.isArray(object.data)) {
- return new UTSJSONObject(object.data);
- }
- return object.data;
- }
- if (type === "object" && /^\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}\.\d{3}Z$/.test(object.data)) {
- return new Date(object.data);
- }
- } else if (keys.length === 1) {
- return "";
- }
- }
- } catch (error) {
- }
- }
- const setStorageSync = /* @__PURE__ */ defineSyncApi(
- API_SET_STORAGE_SYNC,
- (key, data) => {
- const type = typeof data;
- const value = type === "string" ? data : JSON.stringify({
- type,
- data
- });
- localStorage.setItem(key, value);
- },
- SetStorageSyncProtocol
- );
- const setStorage = /* @__PURE__ */ defineAsyncApi(
- API_SET_STORAGE,
- ({ key, data }, { resolve, reject }) => {
- try {
- setStorageSync(key, data);
- resolve();
- } catch (error) {
- reject(error.message);
- }
- },
- SetStorageProtocol
- );
- function getStorageOrigin(key) {
- const value = localStorage && localStorage.getItem(key);
- if (!shared.isString(value)) {
- throw new Error("data not found");
- }
- let data = value;
- try {
- const object = JSON.parse(value);
- const result = parseValue(object);
- if (result !== void 0) {
- data = result;
- }
- } catch (error) {
- }
- return data;
- }
- const getStorageSync = /* @__PURE__ */ defineSyncApi(
- API_GET_STORAGE_SYNC,
- (key) => {
- try {
- return getStorageOrigin(key);
- } catch (error) {
- return "";
- }
- },
- GetStorageSyncProtocol
- );
- const getStorage = /* @__PURE__ */ defineAsyncApi(
- API_GET_STORAGE,
- ({ key }, { resolve, reject }) => {
- try {
- const data = getStorageOrigin(key);
- resolve({
- data
- });
- } catch (error) {
- reject(error.message);
- }
- },
- GetStorageProtocol
- );
- const removeStorageSync = /* @__PURE__ */ defineSyncApi(
- API_REMOVE_STORAGE,
- (key) => {
- if (localStorage) {
- localStorage.removeItem(key);
- }
- },
- RemoveStorageSyncProtocol
- );
- const removeStorage = /* @__PURE__ */ defineAsyncApi(
- API_REMOVE_STORAGE,
- ({ key }, { resolve }) => {
- removeStorageSync(key);
- resolve();
- },
- RemoveStorageProtocol
- );
- const clearStorageSync = /* @__PURE__ */ defineSyncApi(
- "clearStorageSync",
- () => {
- if (localStorage) {
- localStorage.clear();
- }
- }
- );
- const clearStorage = /* @__PURE__ */ defineAsyncApi(
- "clearStorage",
- (_, { resolve }) => {
- clearStorageSync();
- resolve();
- }
- );
- const getStorageInfoSync = /* @__PURE__ */ defineSyncApi(
- "getStorageInfoSync",
- () => {
- const length = localStorage && localStorage.length || 0;
- const keys = [];
- let currentSize = 0;
- for (let index2 = 0; index2 < length; index2++) {
- const key = localStorage.key(index2);
- const value = localStorage.getItem(key) || "";
- currentSize += key.length + value.length;
- if (key !== STORAGE_KEYS) {
- keys.push(key);
- }
- }
- return {
- keys,
- currentSize: Math.ceil(currentSize * 2 / 1024),
- limitSize: Number.MAX_VALUE
- };
- }
- );
- const getStorageInfo = /* @__PURE__ */ defineAsyncApi(
- "getStorageInfo",
- (_, { resolve }) => {
- resolve(getStorageInfoSync());
- }
- );
- function getTheme() {
- if (__uniConfig.darkmode !== true)
- return shared.isString(__uniConfig.darkmode) ? __uniConfig.darkmode : "light";
- try {
- return window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
- } catch (error) {
- return "light";
- }
- }
- let browserInfo;
- function initBrowserInfo() {
- {
- return browserInfo = {};
- }
- }
- const getDeviceInfo = /* @__PURE__ */ defineSyncApi(
- "getDeviceInfo",
- () => {
- initBrowserInfo();
- const {
- deviceBrand,
- deviceModel,
- brand,
- model,
- platform,
- system,
- deviceOrientation,
- deviceType,
- osname,
- osversion
- } = browserInfo;
- return shared.extend(
- {
- brand,
- deviceBrand,
- deviceModel,
- devicePixelRatio: 1,
- deviceId: Date.now() + "" + Math.floor(Math.random() * 1e7),
- deviceOrientation,
- deviceType,
- model,
- platform,
- system
- },
- {
- osName: osname ? osname.toLocaleLowerCase() : void 0,
- osVersion: osversion
- }
- );
- }
- );
- const getAppBaseInfo = /* @__PURE__ */ defineSyncApi(
- "getAppBaseInfo",
- () => {
- initBrowserInfo();
- const { theme, language, browserName, browserVersion } = browserInfo;
- return shared.extend(
- {
- appId: __uniConfig.appId,
- appName: __uniConfig.appName,
- appVersion: __uniConfig.appVersion,
- appVersionCode: __uniConfig.appVersionCode,
- appLanguage: getLocale ? getLocale() : language,
- enableDebug: false,
- hostSDKVersion: void 0,
- hostPackageName: void 0,
- hostFontSizeSetting: void 0,
- hostName: browserName,
- hostVersion: browserVersion,
- hostTheme: theme,
- hostLanguage: language,
- language,
- SDKVersion: "",
- theme,
- version: ""
- },
- {
- uniCompilerVersion: __uniConfig.compilerVersion,
- uniRuntimeVersion: __uniConfig.compilerVersion,
- uniCompilerVersionCode: parseFloat(__uniConfig.compilerVersion),
- uniRuntimeVersionCode: parseFloat(__uniConfig.compilerVersion),
- isUniAppX: true
- }
- );
- }
- );
- const getSystemInfoSync = /* @__PURE__ */ defineSyncApi(
- "getSystemInfoSync",
- () => {
- {
- return {
- deviceId: Date.now() + "" + Math.floor(Math.random() * 1e7),
- platform: "nodejs"
- };
- }
- }
- );
- function updateDocumentTitle(title) {
- {
- const ssrContext = getApp$1().$.appContext.provides[vue.ssrContextKey];
- if (ssrContext) {
- ssrContext[uniShared.UNI_SSR_TITLE] = title;
- }
- }
- UniServiceJSBridge.emit(uniShared.ON_NAVIGATION_BAR_CHANGE, { titleText: title });
- }
- function useDocumentTitle(pageMeta) {
- function update() {
- updateDocumentTitle(pageMeta.navigationBar.titleText);
- }
- vue.watchEffect(update);
- }
- function setNavigationBar(pageMeta, type, args, resolve, reject) {
- if (!pageMeta) {
- return reject("page not found");
- }
- const { navigationBar } = pageMeta;
- switch (type) {
- case API_SET_NAVIGATION_BAR_COLOR:
- const { frontColor, backgroundColor, animation: animation2 } = args;
- const { duration, timingFunc } = animation2;
- if (frontColor) {
- navigationBar.titleColor = frontColor === "#000000" ? "#000000" : "#ffffff";
- }
- if (backgroundColor) {
- navigationBar.backgroundColor = backgroundColor;
- }
- navigationBar.duration = duration + "ms";
- navigationBar.timingFunc = timingFunc;
- break;
- case API_SHOW_NAVIGATION_BAR_LOADING:
- navigationBar.loading = true;
- break;
- case API_HIDE_NAVIGATION_BAR_LOADING:
- navigationBar.loading = false;
- break;
- case API_SET_NAVIGATION_BAR_TITLE:
- const { title } = args;
- navigationBar.titleText = title;
- {
- updateDocumentTitle(args.title);
- }
- break;
- }
- resolve();
- }
- const setNavigationBarTitle = /* @__PURE__ */ defineAsyncApi(
- API_SET_NAVIGATION_BAR_TITLE,
- (args, { resolve, reject }) => {
- setNavigationBar(
- getCurrentPageMeta(),
- API_SET_NAVIGATION_BAR_TITLE,
- args,
- resolve,
- reject
- );
- },
- SetNavigationBarTitleProtocol
- );
- require("localstorage-polyfill");
- global.XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
- const api = /* @__PURE__ */ Object.defineProperty({
- __proto__: null,
- clearStorage,
- clearStorageSync,
- getAppBaseInfo,
- getDeviceInfo,
- getStorage,
- getStorageInfo,
- getStorageInfoSync,
- getStorageSync,
- getSystemInfoSync,
- removeStorage,
- removeStorageSync,
- request,
- setNavigationBarTitle,
- setStorage,
- setStorageSync
- }, Symbol.toStringTag, { value: "Module" });
- const uni$1 = api;
- const UniServiceJSBridge$1 = /* @__PURE__ */ shared.extend(ServiceJSBridge, {
- publishHandler(event, args, pageId) {
- UniViewJSBridge.subscribeHandler(event, args, pageId);
- }
- });
- function onThemeChange(callback) {
- if (__uniConfig.darkmode) {
- UniServiceJSBridge.on(uniShared.ON_THEME_CHANGE, callback);
- }
- }
- function parseTheme(pageStyle) {
- let parsedStyle = {};
- if (__uniConfig.darkmode) {
- parsedStyle = uniShared.normalizeStyles(
- pageStyle,
- __uniConfig.themeConfig,
- getTheme()
- );
- }
- return __uniConfig.darkmode ? parsedStyle : pageStyle;
- }
- function useTheme(pageStyle, onThemeChangeCallback) {
- const isReactivity = vue.isReactive(pageStyle);
- const reactivePageStyle = isReactivity ? vue.reactive(parseTheme(pageStyle)) : parseTheme(pageStyle);
- if (__uniConfig.darkmode && isReactivity) {
- vue.watch(pageStyle, (value) => {
- const _pageStyle = parseTheme(value);
- for (const key in _pageStyle) {
- reactivePageStyle[key] = _pageStyle[key];
- }
- });
- }
- onThemeChangeCallback && onThemeChange(onThemeChangeCallback);
- return reactivePageStyle;
- }
- const _middleButton = {
- width: "50px",
- height: "50px",
- iconWidth: "24px"
- };
- const TabBar = /* @__PURE__ */ defineSystemComponent({
- name: "TabBar",
- setup() {
- const visibleList = vue.ref([]);
- const _tabBar = useTabBar();
- const tabBar2 = useTheme(_tabBar, () => {
- const tabBarStyle = parseTheme(_tabBar);
- tabBar2.backgroundColor = tabBarStyle.backgroundColor;
- tabBar2.borderStyle = tabBarStyle.borderStyle;
- tabBar2.color = tabBarStyle.color;
- tabBar2.selectedColor = tabBarStyle.selectedColor;
- tabBar2.blurEffect = tabBarStyle.blurEffect;
- tabBar2.midButton = tabBarStyle.midButton;
- if (tabBarStyle.list && tabBarStyle.list.length) {
- tabBarStyle.list.forEach((item, index2) => {
- tabBar2.list[index2].iconPath = item.iconPath;
- tabBar2.list[index2].selectedIconPath = item.selectedIconPath;
- });
- }
- });
- useVisibleList(tabBar2, visibleList);
- useTabBarCssVar(tabBar2);
- const onSwitchTab = useSwitchTab(vueRouter.useRoute(), tabBar2, visibleList);
- const {
- style,
- borderStyle,
- placeholderStyle
- } = useTabBarStyle(tabBar2);
- return () => {
- const tabBarItemsTsx = createTabBarItemsTsx(tabBar2, onSwitchTab, visibleList);
- return vue.createVNode("uni-tabbar", {
- "class": "uni-tabbar-" + tabBar2.position
- }, [vue.createVNode("div", {
- "class": "uni-tabbar",
- "style": style.value
- }, [vue.createVNode("div", {
- "class": "uni-tabbar-border",
- "style": borderStyle.value
- }, null, 4), tabBarItemsTsx], 4), vue.createVNode("div", {
- "class": "uni-placeholder",
- "style": placeholderStyle.value
- }, null, 4)], 2);
- };
- }
- });
- function useTabBarCssVar(tabBar2) {
- vue.watch(() => tabBar2.shown, (value) => {
- updatePageCssVar({
- "--window-bottom": normalizeWindowBottom(value ? parseInt(tabBar2.height) : 0)
- });
- });
- }
- function useVisibleList(tabBar2, visibleList) {
- const internalMidButton = vue.ref(shared.extend({
- type: "midButton"
- }, tabBar2.midButton));
- function setVisibleList() {
- let tempList = [];
- tempList = tabBar2.list.filter((item) => item.visible !== false);
- if (__UNI_FEATURE_TABBAR_MIDBUTTON__ && tabBar2.midButton) {
- internalMidButton.value = shared.extend({}, _middleButton, internalMidButton.value, tabBar2.midButton);
- tempList = tempList.filter((item) => !isMidButton(item));
- if (tempList.length % 2 === 0) {
- tempList.splice(Math.floor(tempList.length / 2), 0, internalMidButton.value);
- }
- }
- visibleList.value = tempList;
- }
- vue.watchEffect(setVisibleList);
- }
- function useSwitchTab(route, tabBar2, visibleList) {
- vue.watchEffect(() => {
- const meta = route.meta;
- if (meta.isTabBar) {
- const pagePath = meta.route;
- const index2 = visibleList.value.findIndex((item) => item.pagePath === pagePath);
- tabBar2.selectedIndex = index2;
- }
- });
- return (tabBarItem, index2) => {
- const {
- type
- } = tabBarItem;
- return () => {
- if (__UNI_FEATURE_TABBAR_MIDBUTTON__ && type === "midButton") {
- return UniServiceJSBridge.invokeOnCallback(API_ON_TAB_BAR_MID_BUTTON_TAP);
- }
- const {
- pagePath,
- text
- } = tabBarItem;
- let url = uniShared.addLeadingSlash(pagePath);
- if (url === __uniRoutes[0].alias) {
- url = "/";
- }
- if (route.path !== url) {
- uni.switchTab({
- from: "tabBar",
- url,
- tabBarText: text
- });
- } else {
- invokeHook("onTabItemTap", {
- index: index2,
- text,
- pagePath
- });
- }
- };
- };
- }
- const DEFAULT_BG_COLOR = "#f7f7fa";
- const BLUR_EFFECT_COLOR_DARK = "rgb(0, 0, 0, 0.8)";
- const BLUR_EFFECT_COLOR_LIGHT = "rgb(250, 250, 250, 0.8)";
- const BLUR_EFFECT_COLORS = {
- dark: BLUR_EFFECT_COLOR_DARK,
- light: BLUR_EFFECT_COLOR_LIGHT,
- extralight: BLUR_EFFECT_COLOR_LIGHT
- };
- const BORDER_COLORS = {
- white: "rgba(255, 255, 255, 0.33)",
- black: "rgba(0, 0, 0, 0.33)"
- };
- function useTabBarStyle(tabBar2) {
- const style = vue.computed(() => {
- let backgroundColor = tabBar2.backgroundColor;
- const blurEffect = tabBar2.blurEffect;
- if (!backgroundColor) {
- if (blurEffect && blurEffect !== "none") {
- backgroundColor = BLUR_EFFECT_COLORS[blurEffect];
- }
- }
- return {
- backgroundColor: backgroundColor || DEFAULT_BG_COLOR,
- backdropFilter: blurEffect !== "none" ? "blur(10px)" : blurEffect
- };
- });
- const borderStyle = vue.computed(() => {
- const {
- borderStyle: borderStyle2,
- borderColor
- } = tabBar2;
- if (borderColor && shared.isString(borderColor)) {
- return {
- backgroundColor: borderColor
- };
- }
- return {
- backgroundColor: BORDER_COLORS[borderStyle2] || BORDER_COLORS["black"]
- };
- });
- const placeholderStyle = vue.computed(() => {
- return {
- height: tabBar2.height
- };
- });
- return {
- style,
- borderStyle,
- placeholderStyle
- };
- }
- function isMidButton(item) {
- return item.type === "midButton";
- }
- function createTabBarItemsTsx(tabBar2, onSwitchTab, visibleList) {
- const {
- selectedIndex,
- selectedColor,
- color
- } = tabBar2;
- return visibleList.value.map((item, index2) => {
- const selected = selectedIndex === index2;
- const textColor = selected ? selectedColor : color;
- const iconPath = (selected ? item.selectedIconPath || item.iconPath : item.iconPath) || "";
- const iconfontText = item.iconfont ? selected ? item.iconfont.selectedText || item.iconfont.text : item.iconfont.text : void 0;
- const iconfontColor = item.iconfont ? selected ? item.iconfont.selectedColor || item.iconfont.color : item.iconfont.color : void 0;
- if (!__UNI_FEATURE_TABBAR_MIDBUTTON__) {
- return createTabBarItemTsx(textColor, iconPath, iconfontText, iconfontColor, item, tabBar2, index2, onSwitchTab);
- }
- return isMidButton(item) ? createTabBarMidButtonTsx(textColor, iconPath, iconfontText, iconfontColor, item, tabBar2, index2, onSwitchTab) : createTabBarItemTsx(textColor, iconPath, iconfontText, iconfontColor, item, tabBar2, index2, onSwitchTab);
- });
- }
- function createTabBarItemTsx(color, iconPath, iconfontText, iconfontColor, tabBarItem, tabBar2, index2, onSwitchTab) {
- return vue.createVNode("div", {
- "key": index2,
- "class": "uni-tabbar__item",
- "onClick": onSwitchTab(tabBarItem, index2)
- }, [createTabBarItemBdTsx(color, iconPath || "", iconfontText, iconfontColor, tabBarItem, tabBar2)], 8, ["onClick"]);
- }
- function createTabBarItemBdTsx(color, iconPath, iconfontText, iconfontColor, tabBarItem, tabBar2) {
- const {
- height
- } = tabBar2;
- return vue.createVNode("div", {
- "class": "uni-tabbar__bd",
- "style": {
- height
- }
- }, [iconfontText ? createTabBarItemIconfontTsx(iconfontText, iconfontColor || BLUR_EFFECT_COLOR_DARK, tabBarItem, tabBar2) : iconPath && createTabBarItemIconTsx(iconPath, tabBarItem, tabBar2), tabBarItem.text && createTabBarItemTextTsx(color, tabBarItem, tabBar2), tabBarItem.redDot && createTabBarItemRedDotTsx(tabBarItem.badge)], 4);
- }
- function createTabBarItemIconTsx(iconPath, tabBarItem, tabBar2) {
- const {
- type,
- text
- } = tabBarItem;
- const {
- iconWidth
- } = tabBar2;
- const clazz2 = "uni-tabbar__icon" + (text ? " uni-tabbar__icon__diff" : "");
- const style = {
- width: iconWidth,
- height: iconWidth
- };
- return vue.createVNode("div", {
- "class": clazz2,
- "style": style
- }, [type !== "midButton" && vue.createVNode("img", {
- "src": getRealPath(iconPath)
- }, null, 8, ["src"])], 6);
- }
- function createTabBarItemIconfontTsx(iconfontText, iconfontColor, tabBarItem, tabBar2) {
- var _a;
- const {
- type,
- text
- } = tabBarItem;
- const {
- iconWidth
- } = tabBar2;
- const clazz2 = "uni-tabbar__icon" + (text ? " uni-tabbar__icon__diff" : "");
- const style = {
- width: iconWidth,
- height: iconWidth
- };
- const iconfontStyle = {
- fontSize: ((_a = tabBarItem.iconfont) == null ? void 0 : _a.fontSize) || iconWidth,
- color: iconfontColor
- };
- return vue.createVNode("div", {
- "class": clazz2,
- "style": style
- }, [type !== "midButton" && vue.createVNode("div", {
- "class": "uni-tabbar__iconfont",
- "style": iconfontStyle
- }, [iconfontText], 4)], 6);
- }
- function createTabBarItemTextTsx(color, tabBarItem, tabBar2) {
- const {
- iconPath,
- text
- } = tabBarItem;
- const {
- fontSize,
- spacing
- } = tabBar2;
- const style = {
- color,
- fontSize,
- lineHeight: !iconPath ? 1.8 : "normal",
- marginTop: !iconPath ? "inherit" : spacing
- };
- return vue.createVNode("div", {
- "class": "uni-tabbar__label",
- "style": style
- }, [text], 4);
- }
- function createTabBarItemRedDotTsx(badge) {
- const clazz2 = "uni-tabbar__reddot" + (badge ? " uni-tabbar__badge" : "");
- return vue.createVNode("div", {
- "class": clazz2
- }, [badge], 2);
- }
- function createTabBarMidButtonTsx(color, iconPath, iconfontText, iconfontColor, midButton, tabBar2, index2, onSwitchTab) {
- const {
- width,
- height,
- backgroundImage,
- iconWidth
- } = midButton;
- return vue.createVNode("div", {
- "key": "midButton",
- "class": "uni-tabbar__item",
- "style": {
- flex: "0 0 " + width,
- position: "relative"
- },
- "onClick": onSwitchTab(midButton, index2)
- }, [vue.createVNode("div", {
- "class": "uni-tabbar__mid",
- "style": {
- width,
- height,
- backgroundImage: backgroundImage ? "url('" + getRealPath(backgroundImage) + "')" : "none"
- }
- }, [iconPath && vue.createVNode("img", {
- "style": {
- width: iconWidth,
- height: iconWidth
- },
- "src": getRealPath(iconPath)
- }, null, 12, ["src"])], 4), createTabBarItemBdTsx(color, iconPath, iconfontText, iconfontColor, midButton, tabBar2)], 12, ["onClick"]);
- }
- const LayoutComponent = /* @__PURE__ */ defineSystemComponent({
- name: "Layout",
- setup(_props, {
- emit: emit2
- }) {
- const rootRef = vue.ref(null);
- const keepAliveRoute = __UNI_FEATURE_PAGES__ && useKeepAliveRoute();
- const {
- layoutState,
- windowState
- } = useState();
- useMaxWidth(layoutState, rootRef);
- const topWindow = __UNI_FEATURE_TOPWINDOW__ && useTopWindow(layoutState);
- const leftWindow = __UNI_FEATURE_LEFTWINDOW__ && useLeftWindow(layoutState);
- const rightWindow = __UNI_FEATURE_RIGHTWINDOW__ && useRightWindow(layoutState);
- const showTabBar = __UNI_FEATURE_TABBAR__ && useShowTabBar();
- const clazz2 = useAppClass(showTabBar);
- return () => {
- const layoutTsx = createLayoutTsx(keepAliveRoute, layoutState, windowState, topWindow, leftWindow, rightWindow);
- const tabBarTsx = __UNI_FEATURE_TABBAR__ && createTabBarTsx(showTabBar);
- return vue.createVNode("uni-app", {
- "ref": rootRef,
- "class": clazz2.value
- }, [layoutTsx, tabBarTsx], 2);
- };
- }
- });
- function useAppClass(showTabBar) {
- const showMaxWidth = vue.ref(false);
- return vue.computed(() => {
- return {
- "uni-app--showtabbar": showTabBar && showTabBar.value,
- "uni-app--maxwidth": showMaxWidth.value
- };
- });
- }
- function initMediaQuery(minWidth, callback) {
- {
- return false;
- }
- }
- function useMaxWidth(layoutState, rootRef) {
- const route = usePageRoute();
- function checkMaxWidth() {
- const windowWidth = document.body.clientWidth;
- const pages = getCurrentPages();
- let meta = {};
- if (pages.length > 0) {
- const curPage = pages[pages.length - 1];
- meta = curPage.$page.meta;
- } else {
- const routeOptions = getRouteOptions(route.path, true);
- if (routeOptions) {
- meta = routeOptions.meta;
- }
- }
- const maxWidth = parseInt(String((shared.hasOwn(meta, "maxWidth") ? meta.maxWidth : __uniConfig.globalStyle.maxWidth) || Number.MAX_SAFE_INTEGER));
- let showMaxWidth = false;
- if (windowWidth > maxWidth) {
- showMaxWidth = true;
- } else {
- showMaxWidth = false;
- }
- if (showMaxWidth && maxWidth) {
- layoutState.marginWidth = (windowWidth - maxWidth) / 2;
- vue.nextTick(() => {
- const rootEl = rootRef.value;
- if (rootEl) {
- rootEl.setAttribute("style", "max-width:" + maxWidth + "px;margin:0 auto;");
- }
- });
- } else {
- layoutState.marginWidth = 0;
- vue.nextTick(() => {
- const rootEl = rootRef.value;
- if (rootEl) {
- rootEl.removeAttribute("style");
- }
- });
- }
- }
- vue.watch([() => route.path], checkMaxWidth);
- }
- function useState() {
- const route = usePageRoute();
- if (!__UNI_FEATURE_RESPONSIVE__) {
- const layoutState2 = vue.reactive({
- marginWidth: 0,
- leftWindowWidth: 0,
- rightWindowWidth: 0
- });
- vue.watch(() => layoutState2.marginWidth, (value) => updateCssVar({
- "--window-margin": value + "px"
- }));
- vue.watch(() => layoutState2.leftWindowWidth + layoutState2.marginWidth, (value) => {
- updateCssVar({
- "--window-left": value + "px"
- });
- });
- vue.watch(() => layoutState2.rightWindowWidth + layoutState2.marginWidth, (value) => {
- updateCssVar({
- "--window-right": value + "px"
- });
- });
- return {
- layoutState: layoutState2,
- windowState: vue.computed(() => ({}))
- };
- }
- const topWindowMediaQuery = vue.ref(false);
- const leftWindowMediaQuery = vue.ref(false);
- const rightWindowMediaQuery = vue.ref(false);
- const showTopWindow = vue.computed(() => __UNI_FEATURE_TOPWINDOW__ && route.meta.topWindow !== false && topWindowMediaQuery.value);
- const showLeftWindow = vue.computed(() => __UNI_FEATURE_LEFTWINDOW__ && route.meta.leftWindow !== false && leftWindowMediaQuery.value);
- const showRightWindow = vue.computed(() => __UNI_FEATURE_RIGHTWINDOW__ && route.meta.rightWindow !== false && rightWindowMediaQuery.value);
- const layoutState = vue.reactive({
- topWindowMediaQuery,
- showTopWindow,
- apiShowTopWindow: false,
- leftWindowMediaQuery,
- showLeftWindow,
- apiShowLeftWindow: false,
- rightWindowMediaQuery,
- showRightWindow,
- apiShowRightWindow: false,
- topWindowHeight: 0,
- marginWidth: 0,
- leftWindowWidth: 0,
- rightWindowWidth: 0,
- navigationBarTitleText: "",
- topWindowStyle: {},
- leftWindowStyle: {},
- rightWindowStyle: {}
- });
- const props2 = ["topWindow", "leftWindow", "rightWindow"];
- props2.forEach((prop) => {
- var _a;
- const matchMedia = (_a = __uniConfig[prop]) == null ? void 0 : _a.matchMedia;
- if (matchMedia && shared.hasOwn(matchMedia, "minWidth")) {
- matchMedia.minWidth;
- }
- const matches = initMediaQuery();
- layoutState[`${prop}MediaQuery`] = matches;
- });
- vue.watch(() => layoutState.topWindowHeight, (value) => updateCssVar({
- "--top-window-height": value + "px"
- }));
- vue.watch(() => layoutState.marginWidth, (value) => updateCssVar({
- "--window-margin": value + "px"
- }));
- vue.watch(() => layoutState.leftWindowWidth + layoutState.marginWidth, (value) => {
- updateCssVar({
- "--window-left": value + "px"
- });
- });
- vue.watch(() => layoutState.rightWindowWidth + layoutState.marginWidth, (value) => {
- updateCssVar({
- "--window-right": value + "px"
- });
- });
- UniServiceJSBridge.on(uniShared.ON_NAVIGATION_BAR_CHANGE, (navigationBar) => {
- layoutState.navigationBarTitleText = navigationBar.titleText;
- });
- const windowState = vue.computed(() => ({
- matchTopWindow: layoutState.topWindowMediaQuery,
- showTopWindow: layoutState.showTopWindow || layoutState.apiShowTopWindow,
- matchLeftWindow: layoutState.leftWindowMediaQuery,
- showLeftWindow: layoutState.showLeftWindow || layoutState.apiShowLeftWindow,
- matchRightWindow: layoutState.rightWindowMediaQuery,
- showRightWindow: layoutState.showRightWindow || layoutState.apiShowRightWindow
- }));
- return {
- layoutState,
- windowState
- };
- }
- function createLayoutTsx(keepAliveRoute, layoutState, windowState, topWindow, leftWindow, rightWindow) {
- const routerVNode = __UNI_FEATURE_PAGES__ ? createRouterViewVNode(keepAliveRoute) : createPageVNode();
- if (!__UNI_FEATURE_RESPONSIVE__) {
- return routerVNode;
- }
- const topWindowTsx = __UNI_FEATURE_TOPWINDOW__ ? createTopWindowTsx(topWindow, layoutState, windowState.value) : null;
- const leftWindowTsx = __UNI_FEATURE_LEFTWINDOW__ ? createLeftWindowTsx(leftWindow, layoutState, windowState.value) : null;
- const rightWindowTsx = __UNI_FEATURE_RIGHTWINDOW__ ? createRightWindowTsx(rightWindow, layoutState, windowState.value) : null;
- return vue.createVNode("uni-layout", {
- "class": {
- "uni-app--showtopwindow": __UNI_FEATURE_TOPWINDOW__ && layoutState.showTopWindow,
- "uni-app--showleftwindow": __UNI_FEATURE_LEFTWINDOW__ && layoutState.showLeftWindow,
- "uni-app--showrightwindow": __UNI_FEATURE_RIGHTWINDOW__ && layoutState.showRightWindow
- }
- }, [topWindowTsx, vue.createVNode("uni-content", null, [vue.createVNode("uni-main", null, [routerVNode]), leftWindowTsx, rightWindowTsx])], 2);
- }
- function useShowTabBar(emit2) {
- const route = usePageRoute();
- const tabBar2 = useTabBar();
- const showTabBar = vue.computed(() => route.meta.isTabBar && tabBar2.shown);
- return showTabBar;
- }
- function createTabBarTsx(showTabBar) {
- return vue.withDirectives(vue.createVNode(TabBar, null, null, 512), [[vue.vShow, showTabBar.value]]);
- }
- function createPageVNode() {
- return vue.createVNode(__uniRoutes[0].component);
- }
- function createRouterViewVNode({
- routeKey,
- isTabBar,
- routeCache: routeCache2
- }) {
- return vue.createVNode(vueRouter.RouterView, null, {
- default: vue.withCtx(({
- Component
- }) => [(vue.openBlock(), vue.createBlock(vue.KeepAlive, {
- matchBy: "key",
- cache: routeCache2
- }, [(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(Component), {
- type: isTabBar.value ? "tabBar" : "",
- key: routeKey.value
- }))], 1032, ["cache"]))]),
- _: 1
- /* STABLE */
- });
- }
- function useTopWindow(layoutState) {
- const {
- component,
- style
- } = __uniConfig.topWindow;
- const windowRef = vue.ref(null);
- function updateWindow() {
- const instance = windowRef.value;
- const el = uniShared.resolveOwnerEl(instance.$);
- const height = el.getBoundingClientRect().height;
- layoutState.topWindowHeight = height;
- }
- vue.watch(() => layoutState.showTopWindow || layoutState.apiShowTopWindow, () => vue.nextTick(updateWindow));
- layoutState.topWindowStyle = style;
- return {
- component,
- windowRef
- };
- }
- function useLeftWindow(layoutState) {
- const {
- component,
- style
- } = __uniConfig.leftWindow;
- const windowRef = vue.ref(null);
- function updateWindow() {
- const instance = windowRef.value;
- const el = uniShared.resolveOwnerEl(instance.$);
- const width = el.getBoundingClientRect().width;
- layoutState.leftWindowWidth = width;
- }
- vue.watch(() => layoutState.showLeftWindow || layoutState.apiShowLeftWindow, () => vue.nextTick(updateWindow));
- layoutState.leftWindowStyle = style;
- return {
- component,
- windowRef
- };
- }
- function useRightWindow(layoutState) {
- const {
- component,
- style
- } = __uniConfig.rightWindow;
- const windowRef = vue.ref(null);
- function updateWindow() {
- const instance = windowRef.value;
- const el = uniShared.resolveOwnerEl(instance.$);
- const width = el.getBoundingClientRect().width;
- layoutState.rightWindowWidth = width;
- }
- vue.watch(() => layoutState.showRightWindow || layoutState.apiShowRightWindow, () => vue.nextTick(updateWindow));
- layoutState.rightWindowStyle = style;
- return {
- component,
- windowRef
- };
- }
- function createTopWindowTsx(topWindow, layoutState, windowState) {
- if (topWindow) {
- const {
- component: TopWindow,
- windowRef
- } = topWindow;
- return vue.withDirectives(vue.createVNode("uni-top-window", null, [vue.createVNode("div", {
- "class": "uni-top-window",
- "style": layoutState.topWindowStyle
- }, [vue.createVNode(TopWindow, vue.mergeProps({
- "ref": windowRef,
- "navigation-bar-title-text": layoutState.navigationBarTitleText
- }, windowState), null, 16, ["navigation-bar-title-text"])], 4), vue.createVNode("div", {
- "class": "uni-top-window--placeholder",
- "style": {
- height: layoutState.topWindowHeight + "px"
- }
- }, null, 4)], 512), [[vue.vShow, layoutState.showTopWindow || layoutState.apiShowTopWindow]]);
- }
- }
- function createLeftWindowTsx(leftWindow, layoutState, windowState) {
- if (leftWindow) {
- const {
- component: LeftWindow,
- windowRef
- } = leftWindow;
- return vue.withDirectives(vue.createVNode("uni-left-window", {
- "data-show": layoutState.apiShowLeftWindow || void 0,
- "style": layoutState.leftWindowStyle
- }, [layoutState.apiShowLeftWindow ? vue.createVNode("div", {
- "class": "uni-mask",
- "onClick": () => layoutState.apiShowLeftWindow = false
- }, null, 8, ["onClick"]) : null, vue.createVNode("div", {
- "class": "uni-left-window"
- }, [vue.createVNode(LeftWindow, vue.mergeProps({
- "ref": windowRef
- }, windowState), null, 16)])], 12, ["data-show"]), [[vue.vShow, layoutState.showLeftWindow || layoutState.apiShowLeftWindow]]);
- }
- }
- function createRightWindowTsx(rightWindow, layoutState, windowState) {
- if (rightWindow) {
- const {
- component: RightWindow,
- windowRef
- } = rightWindow;
- return vue.withDirectives(vue.createVNode("uni-right-window", {
- "data-show": layoutState.apiShowRightWindow || void 0,
- "style": layoutState.rightWindowStyle
- }, [layoutState.apiShowRightWindow ? vue.createVNode("div", {
- "class": "uni-mask",
- "onClick": () => layoutState.apiShowRightWindow = false
- }, null, 8, ["onClick"]) : null, vue.createVNode("div", {
- "class": "uni-right-window"
- }, [vue.createVNode(RightWindow, vue.mergeProps({
- "ref": windowRef
- }, windowState), null, 16)])], 12, ["data-show"]), [[vue.vShow, layoutState.showRightWindow || layoutState.apiShowRightWindow]]);
- }
- }
- function updateBackgroundColorContent(backgroundColorContent) {
- {
- return;
- }
- }
- function useBackgroundColorContent(pageMeta) {
- function update() {
- if (pageMeta.backgroundColorContent) {
- updateBackgroundColorContent(
- parseTheme({ backgroundColorContent: pageMeta.backgroundColorContent }).backgroundColorContent
- );
- }
- }
- onThemeChange(update);
- vue.watchEffect(update);
- }
- function usePageHeadTransparentBackgroundColor(backgroundColor) {
- const { r, g: g2, b } = hexToRgba(backgroundColor);
- return `rgba(${r},${g2},${b},0)`;
- }
- function usePageHeadTransparent(headRef, {
- id: id2,
- navigationBar: { titleColor, coverage, backgroundColor }
- }) {
- vue.computed(() => hexToRgba(backgroundColor));
- }
- const ICON_PATHS = {
- none: "",
- forward: "M11 7.844q-0.25-0.219-0.25-0.578t0.25-0.578q0.219-0.25 0.563-0.25t0.563 0.25l9.656 9.125q0.125 0.125 0.188 0.297t0.063 0.328q0 0.188-0.063 0.359t-0.188 0.297l-9.656 9.125q-0.219 0.25-0.563 0.25t-0.563-0.25q-0.25-0.219-0.25-0.578t0.25-0.609l9.063-8.594-9.063-8.594z",
- back: ICON_PATH_BACK,
- select: ICON_PATH_BACK,
- share: "M26.563 24.844q0 0.125-0.109 0.234t-0.234 0.109h-17.938q-0.125 0-0.219-0.109t-0.094-0.234v-13.25q0-0.156 0.094-0.25t0.219-0.094h5.5v-1.531h-6q-0.531 0-0.906 0.391t-0.375 0.922v14.375q0 0.531 0.375 0.922t0.906 0.391h18.969q0.531 0 0.891-0.391t0.359-0.953v-5.156h-1.438v4.625zM29.813 10.969l-5.125-5.375-1.031 1.094 3.438 3.594-3.719 0.031q-2.313 0.188-4.344 1.125t-3.578 2.422-2.5 3.453-1.109 4.188l-0.031 0.25h1.469v-0.219q0.156-1.875 1-3.594t2.25-3.063 3.234-2.125 3.828-0.906l0.188-0.031 3.313-0.031-3.438 3.625 1.031 1.063 5.125-5.375-0.031-0.063 0.031-0.063z",
- favorite: "M27.594 13.375q-0.063-0.188-0.219-0.313t-0.344-0.156l-7.094-0.969-3.219-6.406q-0.094-0.188-0.25-0.281t-0.375-0.094q-0.188 0-0.344 0.094t-0.25 0.281l-3.125 6.438-7.094 1.094q-0.188 0.031-0.344 0.156t-0.219 0.313q-0.031 0.188 0.016 0.375t0.172 0.313l5.156 4.969-1.156 7.063q-0.031 0.188 0.047 0.375t0.234 0.313q0.094 0.063 0.188 0.094t0.219 0.031q0.063 0 0.141-0.031t0.172-0.063l6.313-3.375 6.375 3.313q0.063 0.031 0.141 0.047t0.172 0.016q0.188 0 0.344-0.094t0.25-0.281q0.063-0.094 0.078-0.234t-0.016-0.234q0-0.031 0-0.063l-1.25-6.938 5.094-5.031q0.156-0.156 0.203-0.344t-0.016-0.375zM11.469 19.063q0.031-0.188-0.016-0.344t-0.172-0.281l-4.406-4.25 6.063-0.906q0.156-0.031 0.297-0.125t0.203-0.25l2.688-5.531 2.75 5.5q0.063 0.156 0.203 0.25t0.297 0.125l6.094 0.844-4.375 4.281q-0.125 0.125-0.172 0.297t-0.016 0.328l1.063 6.031-5.438-2.813q-0.156-0.094-0.328-0.078t-0.297 0.078l-5.438 2.875 1-6.031z",
- home: "M23.719 16.5q-0.313 0-0.531 0.219t-0.219 0.5v7.063q0 0.219-0.172 0.391t-0.391 0.172h-12.344q-0.25 0-0.422-0.172t-0.172-0.391v-7.063q0-0.281-0.219-0.5t-0.531-0.219q-0.281 0-0.516 0.219t-0.234 0.5v7.063q0.031 0.844 0.625 1.453t1.438 0.609h12.375q0.844 0 1.453-0.609t0.609-1.453v-7.063q0-0.125-0.063-0.266t-0.156-0.234q-0.094-0.125-0.234-0.172t-0.297-0.047zM26.5 14.875l-8.813-8.813q-0.313-0.313-0.688-0.453t-0.781-0.141-0.781 0.141-0.656 0.422l-8.813 8.844q-0.188 0.219-0.188 0.516t0.219 0.484q0.094 0.125 0.234 0.172t0.297 0.047q0.125 0 0.25-0.047t0.25-0.141l8.781-8.781q0.156-0.156 0.406-0.156t0.406 0.156l8.813 8.781q0.219 0.188 0.516 0.188t0.516-0.219q0.188-0.188 0.203-0.484t-0.172-0.516z",
- menu: "M8.938 18.313q0.875 0 1.484-0.609t0.609-1.453-0.609-1.453-1.484-0.609q-0.844 0-1.453 0.609t-0.609 1.453 0.609 1.453 1.453 0.609zM16.188 18.313q0.875 0 1.484-0.609t0.609-1.453-0.609-1.453-1.484-0.609q-0.844 0-1.453 0.609t-0.609 1.453 0.609 1.453 1.453 0.609zM23.469 18.313q0.844 0 1.453-0.609t0.609-1.453-0.609-1.453-1.453-0.609q-0.875 0-1.484 0.609t-0.609 1.453 0.609 1.453 1.484 0.609z",
- close: ICON_PATH_CLOSE
- };
- const PageHead = /* @__PURE__ */ defineSystemComponent({
- name: "PageHead",
- setup() {
- const headRef = vue.ref(null);
- const pageMeta = usePageMeta();
- const navigationBar = useTheme(pageMeta.navigationBar, () => {
- const _navigationBar = parseTheme(pageMeta.navigationBar);
- navigationBar.backgroundColor = _navigationBar.backgroundColor;
- navigationBar.titleColor = _navigationBar.titleColor;
- });
- const {
- clazz: clazz2,
- style
- } = usePageHead(navigationBar);
- const buttons = __UNI_FEATURE_NAVIGATIONBAR_BUTTONS__ && usePageHeadButtons(pageMeta);
- const searchInput = __UNI_FEATURE_NAVIGATIONBAR_SEARCHINPUT__ && navigationBar.searchInput && usePageHeadSearchInput(pageMeta);
- __UNI_FEATURE_NAVIGATIONBAR_TRANSPARENT__ && navigationBar.type === "transparent" && usePageHeadTransparent(headRef, pageMeta);
- return () => {
- const backButtonTsx = __UNI_FEATURE_PAGES__ ? createBackButtonTsx(navigationBar, pageMeta.isQuit) : null;
- const leftButtonsTsx = __UNI_FEATURE_NAVIGATIONBAR_BUTTONS__ ? createButtonsTsx(buttons.left) : [];
- const rightButtonsTsx = __UNI_FEATURE_NAVIGATIONBAR_BUTTONS__ ? createButtonsTsx(buttons.right) : [];
- const type = navigationBar.type || "default";
- const placeholderTsx = type !== "transparent" && type !== "float" && vue.createVNode("div", {
- "class": {
- "uni-placeholder": true,
- "uni-placeholder-titlePenetrate": navigationBar.titlePenetrate
- }
- }, null, 2);
- return vue.createVNode("uni-page-head", {
- "uni-page-head-type": type
- }, [vue.createVNode("div", {
- "ref": headRef,
- "class": clazz2.value,
- "style": style.value
- }, [vue.createVNode("div", {
- "class": "uni-page-head-hd"
- }, [backButtonTsx, ...leftButtonsTsx]), createPageHeadBdTsx(navigationBar, searchInput), vue.createVNode("div", {
- "class": "uni-page-head-ft"
- }, [...rightButtonsTsx])], 6), placeholderTsx], 8, ["uni-page-head-type"]);
- };
- }
- });
- function createBackButtonTsx(navigationBar, isQuit) {
- if (!isQuit) {
- return vue.createVNode("div", {
- "class": "uni-page-head-btn",
- "onClick": onPageHeadBackButton
- }, [createSvgIconVNode(ICON_PATH_BACK, navigationBar.type === "transparent" ? "#fff" : navigationBar.titleColor, 26)], 8, ["onClick"]);
- }
- }
- function createButtonsTsx(btns) {
- return btns.map(({
- onClick,
- btnClass,
- btnStyle,
- btnText,
- btnIconPath,
- badgeText,
- iconStyle,
- btnSelect
- }, index2) => {
- return vue.createVNode("div", {
- "key": index2,
- "class": btnClass,
- "style": btnStyle,
- "onClick": onClick,
- "badge-text": badgeText
- }, [btnIconPath ? createSvgIconVNode(btnIconPath, iconStyle.color, iconStyle.fontSize) : btnSelect ? vue.createVNode("span", {
- "style": iconStyle
- }, [vue.createVNode("i", {
- "class": "uni-btn-icon",
- "innerHTML": btnText
- }, null, 8, ["innerHTML"]), createSvgIconVNode(ICON_PATHS["select"], "#000", 14)], 4) : vue.createVNode("i", {
- "class": "uni-btn-icon",
- "style": iconStyle,
- "innerHTML": btnText
- }, null, 12, ["innerHTML"])], 14, ["onClick", "badge-text"]);
- });
- }
- function createPageHeadBdTsx(navigationBar, searchInput) {
- if (!__UNI_FEATURE_NAVIGATIONBAR_SEARCHINPUT__ || !navigationBar.searchInput) {
- return createPageHeadTitleTextTsx(navigationBar);
- }
- return createPageHeadSearchInputTsx(navigationBar, searchInput);
- }
- function createPageHeadTitleTextTsx({
- type,
- loading,
- titleSize,
- titleText,
- titleImage
- }) {
- return vue.createVNode("div", {
- "class": "uni-page-head-bd"
- }, [vue.createVNode("div", {
- "style": {
- fontSize: titleSize,
- opacity: type === "transparent" ? 0 : 1
- },
- "class": "uni-page-head__title"
- }, [loading ? vue.createVNode("i", {
- "class": "uni-loading"
- }, null) : titleImage ? vue.createVNode("img", {
- "src": titleImage,
- "class": "uni-page-head__title_image"
- }, null, 8, ["src"]) : titleText], 4)]);
- }
- function createPageHeadSearchInputTsx(navigationBar, {
- text,
- focus,
- composing,
- onBlur,
- onFocus,
- onInput,
- onConfirm,
- onClick
- }) {
- const {
- color,
- align,
- autoFocus,
- disabled,
- borderRadius,
- backgroundColor,
- placeholder,
- placeholderColor
- } = navigationBar.searchInput;
- const searchStyle = {
- borderRadius,
- backgroundColor
- };
- const placeholderClass = ["uni-page-head-search-placeholder", `uni-page-head-search-placeholder-${focus.value || text.value ? "left" : align}`];
- return vue.createVNode("div", {
- "class": "uni-page-head-search",
- "style": searchStyle
- }, [vue.createVNode("div", {
- "style": {
- color: placeholderColor
- },
- "class": placeholderClass
- }, [vue.createVNode("div", {
- "class": "uni-page-head-search-icon"
- }, [createSvgIconVNode(ICON_PATH_SEARCH, placeholderColor, 20)]), text.value || composing.value ? "" : placeholder], 6), disabled ? vue.createVNode(Input, {
- "disabled": true,
- "style": {
- color
- },
- "placeholder-style": "color: " + placeholderColor,
- "class": "uni-page-head-search-input",
- "confirm-type": "search",
- "onClick": onClick
- }, null, 8, ["style", "placeholder-style", "onClick"]) : vue.createVNode(Input, {
- "focus": autoFocus,
- "style": {
- color
- },
- "placeholder-style": "color: " + placeholderColor,
- "class": "uni-page-head-search-input",
- "confirm-type": "search",
- "onFocus": onFocus,
- "onBlur": onBlur,
- "onInput": onInput,
- "onConfirm": onConfirm
- }, null, 8, ["focus", "style", "placeholder-style", "onFocus", "onBlur", "onInput", "onConfirm"])], 4);
- }
- function onPageHeadBackButton() {
- if (getCurrentPages().length === 1) {
- uni.reLaunch({
- url: "/"
- });
- } else {
- uni.navigateBack({
- from: "backbutton",
- success() {
- }
- // 传入空方法,避免返回Promise,因为onBackPress可能导致fail
- });
- }
- }
- function usePageHead(navigationBar) {
- const clazz2 = vue.computed(() => {
- const {
- type,
- titlePenetrate,
- shadowColorType
- } = navigationBar;
- const clazz3 = {
- "uni-page-head": true,
- "uni-page-head-transparent": type === "transparent",
- "uni-page-head-titlePenetrate": titlePenetrate === "YES",
- "uni-page-head-shadow": !!shadowColorType
- };
- if (shadowColorType) {
- clazz3[`uni-page-head-shadow-${shadowColorType}`] = true;
- }
- return clazz3;
- });
- const style = vue.computed(() => {
- const backgroundColor = __UNI_FEATURE_NAVIGATIONBAR_TRANSPARENT__ && navigationBar.type === "transparent" ? usePageHeadTransparentBackgroundColor(navigationBar.backgroundColor) : navigationBar.backgroundColor;
- return {
- backgroundColor,
- color: navigationBar.titleColor,
- transitionDuration: navigationBar.duration,
- transitionTimingFunction: navigationBar.timingFunc
- };
- });
- return {
- clazz: clazz2,
- style
- };
- }
- function usePageHeadButtons({
- id: id2,
- navigationBar
- }) {
- const left = [];
- const right = [];
- const {
- buttons
- } = navigationBar;
- if (shared.isArray(buttons)) {
- const {
- type
- } = navigationBar;
- const isTransparent = type === "transparent";
- const fonts = /* @__PURE__ */ Object.create(null);
- buttons.forEach((btn, index2) => {
- if (btn.fontSrc && !btn.fontFamily) {
- const fontSrc = getRealPath(btn.fontSrc);
- let fontFamily = fonts[fontSrc];
- if (!fontFamily) {
- fontFamily = `font${Date.now()}`;
- fonts[fontSrc] = fontFamily;
- }
- btn.fontFamily = fontFamily;
- }
- const pageHeadBtn = usePageHeadButton(id2, index2, btn, isTransparent);
- if (btn.float === "left") {
- left.push(pageHeadBtn);
- } else {
- right.push(pageHeadBtn);
- }
- });
- }
- return {
- left,
- right
- };
- }
- function usePageHeadButton(pageId, index2, btn, isTransparent) {
- const iconStyle = {
- color: btn.color,
- fontSize: btn.fontSize,
- fontWeight: btn.fontWeight
- };
- if (btn.fontFamily) {
- iconStyle.fontFamily = btn.fontFamily;
- }
- return new Proxy({
- btnClass: {
- // 类似这样的大量重复的字符串,会在gzip时压缩大小,无需在代码层考虑优化相同字符串
- "uni-page-head-btn": true,
- "uni-page-head-btn-red-dot": !!(btn.redDot || btn.badgeText),
- "uni-page-head-btn-select": !!btn.select
- },
- btnStyle: {
- backgroundColor: isTransparent ? btn.background : "transparent",
- width: btn.width
- },
- btnText: "",
- btnIconPath: ICON_PATHS[btn.type],
- badgeText: btn.badgeText,
- iconStyle,
- onClick() {
- invokeHook(pageId, uniShared.ON_NAVIGATION_BAR_BUTTON_TAP, shared.extend({
- index: index2
- }, btn));
- },
- btnSelect: btn.select
- }, {
- get(target, key, receiver) {
- if (["btnText"].includes(key)) {
- return btn.fontSrc && btn.fontFamily ? btn.text.replace("\\u", "&#x") : btn.text;
- } else {
- return Reflect.get(target, key, receiver);
- }
- }
- });
- }
- function usePageHeadSearchInput({
- id: id2,
- navigationBar: {
- searchInput
- }
- }) {
- const focus = vue.ref(false);
- const text = vue.ref("");
- const composing = vue.ref(false);
- const {
- disabled
- } = searchInput;
- if (disabled) {
- const onClick = () => {
- invokeHook(id2, uniShared.ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED);
- };
- return {
- focus,
- text,
- composing,
- onClick
- };
- }
- const onFocus = () => {
- focus.value = true;
- invokeHook(id2, uniShared.ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED, {
- focus: true
- });
- };
- const onBlur = () => {
- focus.value = false;
- invokeHook(id2, uniShared.ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED, {
- focus: false
- });
- };
- const onInput = (evt) => {
- text.value = evt.detail.value;
- invokeHook(id2, uniShared.ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED, {
- text: text.value
- });
- };
- const onConfirm = (evt) => {
- invokeHook(id2, uniShared.ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED, {
- text: text.value
- });
- };
- return {
- focus,
- text,
- composing,
- onFocus,
- onBlur,
- onInput,
- onConfirm
- };
- }
- const _sfc_main = {
- name: "PageRefresh",
- setup() {
- const { pullToRefresh } = usePageMeta();
- return {
- offset: pullToRefresh.offset,
- color: pullToRefresh.color
- };
- }
- };
- const _export_sfc = (sfc, props2) => {
- const target = sfc.__vccOpts || sfc;
- for (const [key, val] of props2) {
- target[key] = val;
- }
- return target;
- };
- const _hoisted_1 = { class: "uni-page-refresh-inner" };
- const _hoisted_2 = ["fill"];
- const _hoisted_3 = /* @__PURE__ */ vue.createElementVNode("path", { d: "M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z" }, null, -1);
- const _hoisted_4 = /* @__PURE__ */ vue.createElementVNode("path", {
- d: "M0 0h24v24H0z",
- fill: "none"
- }, null, -1);
- const _hoisted_5 = [
- _hoisted_3,
- _hoisted_4
- ];
- const _hoisted_6 = {
- class: "uni-page-refresh__spinner",
- width: "24",
- height: "24",
- viewBox: "25 25 50 50"
- };
- const _hoisted_7 = ["stroke"];
- function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
- return vue.openBlock(), vue.createElementBlock("uni-page-refresh", null, [
- vue.createElementVNode("div", {
- style: vue.normalizeStyle({ "margin-top": $setup.offset + "px" }),
- class: "uni-page-refresh"
- }, [
- vue.createElementVNode("div", _hoisted_1, [
- (vue.openBlock(), vue.createElementBlock("svg", {
- fill: $setup.color,
- class: "uni-page-refresh__icon",
- width: "24",
- height: "24",
- viewBox: "0 0 24 24"
- }, _hoisted_5, 8, _hoisted_2)),
- (vue.openBlock(), vue.createElementBlock("svg", _hoisted_6, [
- vue.createElementVNode("circle", {
- stroke: $setup.color,
- class: "uni-page-refresh__path",
- cx: "50",
- cy: "50",
- r: "20",
- fill: "none",
- "stroke-width": "4",
- "stroke-miterlimit": "10"
- }, null, 8, _hoisted_7)
- ]))
- ])
- ], 4)
- ]);
- }
- const PageRefresh = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
- const PageBody = /* @__PURE__ */ defineSystemComponent({
- name: "PageBody",
- setup(props2, ctx) {
- const pageMeta = __UNI_FEATURE_PULL_DOWN_REFRESH__ && usePageMeta();
- const refreshRef = __UNI_FEATURE_PULL_DOWN_REFRESH__ && vue.ref(null);
- const _pageRefresh = null;
- const pageRefresh = vue.ref(null);
- vue.watch(() => {
- return pageMeta.enablePullDownRefresh;
- }, () => {
- pageRefresh.value = pageMeta.enablePullDownRefresh ? _pageRefresh : null;
- }, {
- immediate: true
- });
- return () => {
- const pageRefreshTsx = __UNI_FEATURE_PULL_DOWN_REFRESH__ && createPageRefreshTsx(refreshRef);
- return vue.createVNode(vue.Fragment, null, [pageRefreshTsx, vue.createVNode("uni-page-wrapper", pageRefresh.value, [vue.createVNode("uni-page-body", null, [vue.renderSlot(ctx.slots, "default")])], 16)]);
- };
- }
- });
- function createPageRefreshTsx(refreshRef, pageMeta) {
- return vue.createVNode(PageRefresh, {
- "ref": refreshRef
- }, null, 512);
- }
- const index = /* @__PURE__ */ defineSystemComponent({
- name: "Page",
- setup(_props, ctx) {
- const pageMeta = providePageMeta(getStateId());
- const navigationBar = pageMeta.navigationBar;
- const pageStyle = {};
- useDocumentTitle(pageMeta);
- {
- useBackgroundColorContent(pageMeta);
- }
- return () => vue.createVNode(
- "uni-page",
- {
- "data-page": pageMeta.route,
- style: pageStyle
- },
- __UNI_FEATURE_NAVIGATIONBAR__ && navigationBar.style !== "custom" ? [vue.createVNode(PageHead), createPageBodyVNode(ctx)] : [createPageBodyVNode(ctx)]
- );
- }
- });
- function createPageBodyVNode(ctx) {
- return vue.openBlock(), vue.createBlock(
- PageBody,
- { key: 0 },
- {
- default: vue.withCtx(() => [vue.renderSlot(ctx.slots, "page")]),
- _: 3
- }
- );
- }
- exports.Ad = index$6;
- exports.AdContentPage = index$5;
- exports.AdDraw = index$4;
- exports.AsyncErrorComponent = AsyncErrorComponent;
- exports.AsyncLoadingComponent = AsyncLoadingComponent;
- exports.Button = index$z;
- exports.Camera = index$3;
- exports.Canvas = indexX$4;
- exports.Checkbox = index$x;
- exports.CheckboxGroup = index$y;
- exports.CoverImage = index$8;
- exports.CoverView = index$9;
- exports.Editor = index$w;
- exports.Form = index$B;
- exports.Icon = index$v;
- exports.Image = index$u;
- exports.Input = Input;
- exports.Label = index$A;
- exports.LayoutComponent = LayoutComponent;
- exports.ListItem = index$g;
- exports.ListView = index$h;
- exports.LivePlayer = index$2;
- exports.LivePusher = index$1;
- exports.Map = index$a;
- exports.MovableArea = index$t;
- exports.MovableView = index$s;
- exports.Navigator = index$r;
- exports.PageComponent = index;
- exports.Picker = index$7;
- exports.PickerView = PickerView;
- exports.PickerViewColumn = PickerViewColumn;
- exports.Progress = index$q;
- exports.Radio = indexX$3;
- exports.RadioGroup = index$p;
- exports.ResizeSensor = ResizeSensor;
- exports.RichText = index$o;
- exports.ScrollView = index$n;
- exports.Slider = indexX$2;
- exports.StickyHeader = index$e;
- exports.StickySection = index$f;
- exports.Swiper = index$m;
- exports.SwiperItem = index$l;
- exports.Switch = indexX$1;
- exports.Text = index$k;
- exports.Textarea = index$j;
- exports.UniServiceJSBridge = UniServiceJSBridge$1;
- exports.UniViewJSBridge = UniViewJSBridge$1;
- exports.Video = index$b;
- exports.View = index$i;
- exports.WebView = indexX;
- exports.clearStorage = clearStorage;
- exports.clearStorageSync = clearStorageSync;
- exports.getApp = getApp$1;
- exports.getAppBaseInfo = getAppBaseInfo;
- exports.getCurrentPages = getCurrentPages$1;
- exports.getDeviceInfo = getDeviceInfo;
- exports.getRealPath = getRealPath;
- exports.getStorage = getStorage;
- exports.getStorageInfo = getStorageInfo;
- exports.getStorageInfoSync = getStorageInfoSync;
- exports.getStorageSync = getStorageSync;
- exports.getSystemInfoSync = getSystemInfoSync;
- exports.plugin = index$c;
- exports.removeStorage = removeStorage;
- exports.removeStorageSync = removeStorageSync;
- exports.request = request;
- exports.setNavigationBarTitle = setNavigationBarTitle;
- exports.setStorage = setStorage;
- exports.setStorageSync = setStorageSync;
- exports.setupApp = setupApp;
- exports.setupPage = setupPage;
- exports.setupWindow = setupWindow;
- exports.uni = uni$1;
- exports.useI18n = useI18n;
- exports.useTabBar = useTabBar;
|