6S
zy?t&Wl&w;no1@_r0(Ysf{9y7|iM?84+*T!Z@ZV~G)J1Sm`rrs;ls3Z0r2UEK6521c
zL{Ur^Zq@I&VVaUtgg!hXUj&kHQ8uBcq*S~hN2ji2xy}fY6x2XOcb|Aj%LBpDI=lf6
zx}v?E;O^hTTgui&l|q&-lf&e;Yx&>m*U+V7Xbw36L>(ZWk0HFW(mSeawX!l?51<__
z!wX}A8_US@a>V&V8j&4AzJq%sx|u;pp^!#zx}SIZ8h9K`WdwdW
zFywYdoHAiUW9WW9=zZB61O;nj64SCkF}%hC5JTuumU)9g?=nTf87ZqVp4GAfO8B{6
zmk(ab*^vB!Gw3us;d_zeW^`tpQ5lK`p;;0`@vNi-VxG5hZ@CN(le>;H1u>#cn-iNh
zB{pxuR%X$RE3e&gJ%2x6-H9xK^1gOjCqM3eP1(E|w#l;$IZ!1WlDr`1bsw7IT*hl9E5WuytQ}p+Pkp;uO8vmg)C`~
z)5f&b{NAzC05jAmWpO+#t~m62hRk?Ggpb?1da;5t#0CiQgCuze#*fYvQj;x$KyJO}}FdTz5UL
zI&c{wrlaU$8tH)Y7UiTJIjIbdpF+OnG@3M`DLhw(q>Fikqm<c+)~gT6S}z+uxsFG*2K6;ijEWL2u9;0
zVY?#nGpqGy#c@-zg{&AlDMvSqRVSXb1#D01<0km*LcEVMAS~*Dtx5jur0oK`fD%}+
zF(*J;!
zeduHnKmDPeZ*qel6I3bSCevN_8DSzA((a&?8I&{Wq=dX20(w3-1Pj5A$oY5Qf6oPT
z=U%XS@X|}pJZ>;xKhS#NO-uWBtx8uoTTi}y-O}s!%?STVf!0u@_SJOfJ@?;zex%kO
z7(DLGOD@%Zq^u2ARisz#>RbD@%NFgJN6%3sRI$;d
zTe{`MvQ|dZB6|dBt33?4TUKC~F$Ir@M21wZsN@GKEA;jrk!DLrAm2QYZ+eEOB+1+*
zDJ6^KNd)=Kw4_W(CoV*YG9hWC+{B^wRY(*_7)_nH9q6I=VUxvzn5P~@m*e5$kikF|{1*vl
z_@Zwajo(V1$WQOx(2GAU$CY_!&BLE|?TONh|7Nfozm?e2yJ2)guQKn^q*%H7;Yuw4E+;ya}j?`r_%;-yvPbc$~47{CAAtQ
zwM!p_GL5EUJS)hM$Ap3-HS5G*AQp`Z>Md$cyaP0ZyzXOo)&DLo1zQlAZus4CcjSK&
zm-_Dd^WuW$Q+`BMT@PpwVdY&71ISgSo;Y`2hyUfo9;-&+dxs;D06}kUogUj}mmVH{5&hE-fcy?Gf;+0(&?LX-hd^
zWB?k(1|r_=)3etZcal>*LqFvN{P1~=;43#cNl!x3UJlDV2P+)J9`d&v;|+y_4RK?;
zKNJh(qF;m&4sD~1;Qv{P!aGSBECvyft!b9EryAPZ8+f1GT!X=+CuFnu)8IzZKMvL_
z@j!@wlPJXvrz|fi{F`gm06j(8*)KbFT{Vs3C!eCOj?z|s^gy0-Xxh%+;gZVwYEfks
z6ez1xhK5do+FHq#>O(?n>6b}s4X1Xt9O7RYD&8`5@^(cjwc`f4O80M?&}g^M!P_Vc
z-Nt1Ugp~9&nW@|vmcvfB+&*G-ggw6mDzfN01X0o#DSRP|>0OQy?S{S5t6J6*^+5`8
zV2mq)SY4Dx6h0sW`&^@aAja@H`7*ha8NofezUEG2)EPDETPMW*M2hw3AlIeZdD?mW
zQtc5wm(SH6(WM52L+^&AP5tu`W~Gg^L0kFKOZ>i<3fgV|{_p&Re=q!AmmvBkN5NQe
ztKJSEA&UXBgH9XB!{QUZ9a)*wZ}NEK7{6)U8wL*G*G+_UAc;XHH1b>_&zb;63@b@b
z>NJRf|0R3b*oc;=%Q{bMasaVr3st&Ngh6LjxfDy5*c-{i6`_j5$v56g9>Kwpr1aoh
z39YhHOK91*5=Sa3j=(Gx@~1>YusHrT8Ztt+loIj(0xj`s1x%3r7wCy@%LAieFPcv^
z5L65BvV6WAK^4&eV!H@z7mJ}F58`H@*{@6UlCOyXE(~1ASUT(TXJT}Oh^}571GQ)(GDaCcgIqh)Rj{zB6|FFG7AdZvf;UIPm|tw%xVE=t?zBc+
zGPlfatm@4)1-pBiOm?mv@Wm>m3d|ji`6Auj(!y{$Rb{Ys&+n3(TIS-*0pIz_#QDD3
zmbokE#pCl@{QmQsJmDpX@X{r}A1`^V##5C{x4G>tDZixs%;z$=+uV}dkB9uQK2hzi
zF}u8YwxEZ1vdf-;qDbH=6bxKj~?Bo_J$`04J<}FDU!l?2|pwyuS~WtUGc#3
zrHQkCXSNQcH*7v}-_}jNnL<svW)CaidOZY(zu^0v&mRxEEWX|q~2mA)7OnS
zvDb{#aa@L%`i@(o3i
zSvEUuG_hN|BYC5Lc84F=Jw9IxzU_%B+RvtZJgDDry`r3w*qvOTrLIV{K@4&RGz7(Y
z(R>u|Vdsn(kFtk({=Ee6f!)HpDb70vdmM^~!fVnK?%EL?3`ArAqS_Fd_LXG0guX4JU^*EUXuucoS=+lHq
zjvW;=Nx9KSv+i3!K4PG~N4YoXt{$H_!geLTdw=41DMy_zWe~|F7*n*+2Rquo^PR-b
z4~k>814yw`rZ7qYc^G*>W)NA@FqZ9;w~ZLl|>J%2F`rxygfU<3FX#3g^C&(4IpfKxcxFC~qWjY>~C+fOH|Va&k@<
z^_~l8HbvR^VtFsO$>fccY>5Z~XPf^*yOn&wBl!7lE&|(zp-xe#nv_{el+rYFY3F;^sx$jihea_;xO3DY1Tc-hm>+Ubu{tNqrX4u*`ZI1
z+(8l|=%goR%LX;xOWu5Q@}`^gZMh~~lDPTi(%%H_iT)I0KjkBa6N&>AT~h5Nnf-_i
zlxqkt6JgW7y40j7Wm;7(YRE^IEgRFu&_+QkqK$g2yKD<(p
z(~IvAynDQKkRiH`)PNPKq1#{YN2cuQer`N8Lpy{6v_+TeQXcV+FwN2_8v4SrndCjx
zrIpBZBId(G1G^9G9`JjjO)XBZ(jMtjS{H9v-1;159NwE``AY$i$pe&`e_wsh&r;hdx#erp(Ip8{{CxLzyG
z1#%x9)q|A-5fM*HW`}Gxp?I%5Eh8Cob|D!O)=>{*A8`DjSX<0dmgftZ&Dg1reGTjy|*}_HIF8h|Ua+Q21
zGwg?QuPz%o98nf5E8C!Q@#&}d2vq$teT=ZlVl0a_Fy-QRNDm`Ve3Xh4#V&={5~sbN
z&|ZVWo6v9)()T=x^GWT{zb3DuNWGc;W!O?0OZ@%x#8^3r^|pQm44@NQQ0gbXu}WyC
z+@QU#y*}gh*CDfm+MyYT&4}GG1WEawGi9K|oU5?yxI(sFLD+T@;vmv-cDuH=Xx#C&^a%YqKazfeI7^5!c~*|>
z0yn{Tbef8LSYdt?DLZNJjD~^0g?ta<9=F(PooLV3Z8a`ut&MLm%FbFJ_i9_Te@Z{l
z^0r2+mbah*9JR69Av%&~+Fg=GJ7h3%CysV%b6Ha&lmV=lMWT}HPK0Qsu61(
z$-$#A!*45R8ke2}8ZJJ^jYJkt2RTyP4is29`Jtn%XMRGtQJ82C@({$AR>o#QJy|7~
z9O~;(&X6>GAu!`a!$)JDa;oo*}V!liD9_^&aI2){o(V3LK%G
z0@p)Q4w<4bo>wljB_EaVW9t_$YHe?CU9|Y#(!rIJ(-oxLQCIX^wA|#(n<8$2pfpfa
z#0_N!u*?+=58NGne30LNP>~#3zr(?wusExM8AL7j600gaYHPCbsL@hoEj(y<8u)@Y
z`SW5~&A~G0yfR{|)(ze@pH`L=5rA()WW>kmRo$
z)|WX>3WUTif4xYk)P6z7IiL=IQ8&p(Et}^dTq?HV4k<&FLUxQ89l7V3WWmPWRfnJ8
zD4s3QIOsHTls+n7KT)n;45JO<{;y`Dg@!4oLd)mXb?sH^XI4_EpBNB6!b6b7Jj(=q
zAJz759B`F1TSup{Dwvr6KrQzh~
z77wJI;NId$>wCR_*knPYMVsj8s5a_95Q7l2;ig2hVF67oP$UCsBIGfpVtAr`>q_m@
zWeSf%BwG28NUXqW;l|=YNw$Cvbs2-N7yB0|$t1mh5*gtE>J!LT`x-K&rG6D&Cw!nY
z)F;{gfp#Vb%PI;uP-ng8kl=c!Hn=k$;llUGhK7+aO
zE&8Sr7D#roZv`en4IE(#x{V$dV^0rBd3=vD+Rz?kvqW`^j&l#PXD9I{?92M3T05ClnZ4ttXDi1%b+?Pcs
z5F7)PEghQ^E1Cid1`Hp`XxPviO`yQt3`&z(+TBjxz!pPy>COK@+VwCSBtcE5%l7e_wi`T
zhzgVm6C&2z$Wv6Zq+igCJ!ehmLJHW|MD13*Q<-V?I1BX
z5Rxk>BZP3$gi^jRqNgRtP$E=7odsoZffLcjha?TUtw@)8Fj+S?iQkA8h`!~Al2+xdXieWy2ZUeZ<4hbTVn|iir
z0?7T7CIFtp5QDr3?Iw&;bxljk!WS_f%=~t2_#_>x?V(
zD*b(rNq@vqB}t2@+h0K%0i|1*YC<(BR3OGLe{k@@ZLhqN_*+HA-}sI{{2}p9Ma4V4
z($}jC8>GxDuO$D5OzGQN@a2~iZ{g@I8k-||`A2v>(Ni;3@m_pXdr%xglW80%Er%8xq&cBTkda@8
z`I@q&79Njwl{4AoC++_K~eR-t6Z~+@!7{m4A
zF|7QtytHz%X5wz#ATD1$Sru_(KCg|43)Jb-8*oJbO17JVc!V2zlp(rMbO}rOB?kg7
zsN|3x+WXr3W>>XU=*8-q8cOv{
zSkfR<_sHbsFbt(_i9n|AK@xZh$tMx_ZlU;X*_fG(94)N@LQ#24M4}u?I1{D``#9
zpxJHPSFcQVP=W5~&UI^g(-v*J!nawvI+iWpQpPcmXIav{Yu4@5=fHF%SFYZ!Y+1gn
zqYDXJA^S!q`pc-+L5X_ZctwUX`IsZ`*OT`VUX&W8
zdUKSTM~nb3R5CRLHBy*p4_`yCLhlKqK7(e@gUK;5q-O-PVC|TmZ66)I_p14$cDvPV
z$EkUvyiW_%Pn%ZHRcsHxF>fCCj*fEm>Ur9mqf>8teDVSFq|>Kd8J#z8-sH7{vG}NZ
zdaShUs(a^M&DGIS?VibdCSMMmOqKs$cvEe(=Gn1XaG6MP)?^_T;(dOxj)DiVw=h52
zbG&i5fEu_-LdimSq@z)7GiD#Xtq8rK^E;%fmdFiHl0^gEmyT+`9p>QnB2VNdbj2rp
zqzq{ZXp0fZl^lsSG6i8-6cjmhI4i@&$61)?IE&awu8>venVRC?{TvOE;7
z!Yq30+D$WWST;0cUVAKLvAb?|C#xOK%Ib!uHfO+(`Q(;Hn`E`L*EIx;4gED|8s$K<
zrP(LPlY3`ZRXc2Tx6m?S9nSV_D)}dn%UO(vsJW(U70BkJoiN=R
zfc>Fczf^~!Q;}Xi8_=uUnIbbq8_DGqP(ofOu23K*hYBIgvdjr51Eta!46>qAGj)6U
zNLJn{p
znkbJ)95SWYNiRi%_(P}k+BBg#sc^_|mX~)Vmaf>kY1xwG1y9-CbNbe<-+A)3E$K`q
zy=B|UTi2{S-8b8_ZO*)9TT#r^p`E7OlH}P<%a=pIE48s_OcBp>Q4
zMG>|%>Q1?}%ia8xfSaEK@9>7e!i6cfJEd*)@KZ0hGd4S@$@nUTAqD%u&UBRlTgE_eM8Azs|+4bh)(0(VL+5IKPt5
z)K0CPJ-f^4?84UNn(s={j4Qs*RmabFYX=BPkGovb-?hiJ1AOK%B4%`>e)}nSZ#0@h
zn{-A-Jnm<-KBZgFq3G+UCBXowFoWdMMV9Z!yw6}W@V;O;+H~4XrMtGaTbX%U6Bur_
z_7oOf=?kuCotx_Jwpf#Xf6{8{?oQ2ZT~VU*Ec8G%d4)%3>97m|LYSFSe2kd$%T^yn
zEcZzMY0`RK0gTi|FSk@6OJiMM#NpjohikpgH#C=%xueLU8TEjO3G-Z<;!#RQ^`?z5
zYGor;BS)S4`Du=jgP&%$Ry(xo%r3Kbouk^yZ{doT({dr&@hn%Q&%9u{ttejZTJB{6}!)2r;lYGvabczv2j=r{~xO3NE@gRpI@}Tamig;dVO;61G?x?z_sX%6BHM&Z%YGV=J7_
z6}a;d-7f_lm{c6%u=});Nkj9fa&8^BC3}Aw>^zcTx|}*@CRo|XzIn=QC&WGe)%3*A
zC+0gPav+6&ZB2>$r%rj&9zEq0Aybv-W2on*SwDKwuanX+ZHN#cd=b&Ju1*p+
z#q}GZY{GF6G1iFSc||A}1h4O^+;G~)io2-Tj#LX@pl7*45({Zh*s$ECRnlfpRW^MK
z7xqo68tqLz={2DJysd3-eRDIyl|t`41|3>MtK5>mfkjcg7-bkwq5v4nRnU9|*j1u>
zr?gHAgs{YBiRDoGMy6{`(?|Nm8Y$Y3<8$KtRcwx0ASH>VRHU4kZjzd@V+Q_GTl;AW
zinearyq1=E)1p{1WnxtnBbG_gb=RMy*JPS;5<~k05mNi~#VyI*hfSW8GDod_7}C+w
zy*{1I!kx@)=$_)=NU52-2Y`pZkwMFPC7)N;n`e!@)V6s2qPDh0>le3`;u=}-#}J!`
zwTPF|s7-bCQTjePGle|=;*6BAxFDhd6SGt>RRvl$gEB0+=a+FnByGh4fpn$;JXo@eBB*Og#?7vhG9{^IPbj&@X=ipNI8afme^eQgq4)
zftb!j?L2|yun<0u!bZYYzO2$_tJKcb&ZRxSOnZe#c@*0*gs4XlG@jT?7Z_`6O<(zn
zskYYmmE1Y!oTJ_R&_l}~dPsZeLE7o!Mc-_fL$IG{J`W@em5@^^H6jWX8z@*eRo0Mg
zlYyz86U!Wm1=x6Amws7nrIQM|G5W0;TCfpgs4wc)hW={`-NS(mh&RNFVfpAX<9G5x
zc|I&dT0<2zYFs9bN?pf)nB+hOxXd5oYN2;Q2-Irc^soox)ih2X>ftJ2NdvAMy&)058qH5QygV&|SYMbfn
z4)V6P)6VYJp5lGoXP?%F)i<>Zb<)#`a13AWYr!T!D=vcwVN-{IM`2U5a#+J!B0W4b
zY5GO^E5L-3!x!O4g>+*vUl%=`M-)8-m1n#;ahZQ)G?2#U3^XDsq|F+a74`BffUd)6(PE;
zU&v2BPN8^Hme2uQ=jDgwIHKM@VgD3s(@T})W;YpRlrmeyX%-{@R$`HujlTFQ;X-B+
z3p<-5r?0I|F4j)cn{(r0?L~e+wM6?iVPA}?h+j=3AH8h+>eFhzoTz9lQ_5L3Yo15|
zI};1GOdOP}`1)t!YrM9YRfGNaAo`DK63C#VXb0Y`?%mQ<6+O5eM?5=&)pf0UsU&!3
zigB1d#vlyB9<&*>r-EU{@8uru@%jTbD_awhxpO0l)|E8@{`)!U?ry6!;rA!3*6!}~
zoVFG8CEbW@3ue4X=X$-FU`H$xF_{}@&1%HtiwKkf>=?{R+79_vi^zKm&9l*MuA-nJ
zlWJ1H(4xo?IaGeCJ5dApq8OoJLYb4BkAR6eB#-t0CVYW-Nc;>5eKAxLG}2?Z
zX=n%=?N8*fQj(O~qVp5i?NB{ZE!v{%1QK(Ye-|c2kfK?GZm%8@Oo5)l*=U_2F?ej)
z!?8s)nu6~La434>3n#L;g?v8Y;2{*2%aVnfg^^0H#pcLc(qY*{lods#DmV1;Twi5K
zwuI<9;zE!i3NDKLw1}gZxO)nYXqh6aA&5h*5|`@ho`5k)v{Fch<|1PyiyZYjug{Il
zORUIwh)4^!lpK0$T~0ynm?k+e3GaVIenxJFE}(fU`dnUL_bdvGPz)swR|nBHBuruy
zF!B4`aIbNm)`6s%;Il9<3m-A*$d8L@dFd5aYrQpKyTV=J3-)$iGNgSC&dnxxcpF{e
z&Yo-Lh615F^IUr~mglLXWq0PbuWf9uby&4)H}Nx?yS7X3T!F9GS*=$zgyvk+(-m@Q
zUv;@QyHhT{ap;n+o<@I#c4KI5+Z+e})#=ZfW3Fp#-qF=ek2u|CM~GafKaBZ<(lgMn
zl${{@gNpO{%}H9;3r2tW<5FC9$>!JIJG8ld_~$P^vwG$1v2T5Oc4GR~*Izk(ZG7v_
z<607-1q&85UIns9#iEksxLwC@ORn3pdF|>s3l`2z&Kw-*UmtI6Ye|N}p~eTueM?8t
zCZdHm<*&nD3gLqhesUx99>t>kK44V_eq-?{I2H}$r)!!8p-a;b6WrveHjk?|U!~Ok
zu$4P1wIin+9MukkR2Sp6>T1&i+7U~YjT=7m8I#F{Wgj1~dR;vBhQ(^NFcG_^*oDwh
zLYFZ2Csw^ey#OdnK1T0TPSp<`0truvUvMI}2>U8h4q>3|LBA%Ux
ztrh|gQ*DQsx2juCV8j&all(>iISW9SJ}VCkzd-NPD(+Y%#Y~u$LdpfNCtl}OiPsa_
zg{}sRb_?HQX>h@B=9lO5g?A<{{z8#M$O!!!ClYk?K4+Cu<-|nwkn(8p++&m$LTlKO
z-^wF$0$$flrW7>-Ex1lAz&XK|A}kKyATxnj1dmXIic3WSOeS&)%ZYizQ2S%tynWe<
z2UjfHZpPZ1D+h-bDN65_SrzBdh@MxuYUaQ-12b1uo<|?Y?C!AQTu|SP;ehYOh@p^ZAU^eS8RJu9+HQU#iQ2K%Dh-oyf~{5
z1CDS`$ux<{P-i`078oedbv?q>fdOdl!eaW6*gTl%>e_UsvVO_J*7mMM1Ee)1aXU>Z^Hy>Ac7HWiKC6NA*oIyP;_?c5knWow5*>Vz-kd}H1on{wDjVN=?
z#NE={l|kE;72NttS7qhpm5mjj)BX!AeO*PxXOT4T;&s}gMLT(H=c4!Igq2rZS@p99fs)(^K|=L3
zz#1)>7SD`Hxj9q}HiwV=q^+lr>u&$zL&?7&0;oV=D09z>TyaI@tQXG=Z0sSe*0VA2
z#P@MokNKg`M_!d5lpEoLHlfcnyA0F)5h^#uGVVB(LR6nj9k0ThGJcfm$zQ27Tc7IW
zZrev6**sF`(-y4f>OId`V?6KLoqxD9`ot5lu|M#4x!?M@_Ev?%c=5$XM+NshZuRq)
z!#3OD>z)eT{>td+E4POT-SqyCWr&-ik13{jVzw)39V`Tgu3`!-Rz;hLJ<5S9zw$
zIvi^|{fu?NU|Y-RzV^4Vcz5G4Ee|)idU(KxxRt-^euX&Vt4BSp|NaMuNcXSah{B?C>Viq6}M&AYlEfWh3G~z$PEWT
zMnM>rGf>ObM#6B1X`an)UDv&PclWw-(^ksP5`k$kHipf=A)9k}sA&Zpg4cnkrxJOKqJX)kQjoV>Z%j_GVRMw80oKBXmQ
za)|X@_a-aD>iWTL<2oom$tqpVpZyWo&eOpg6vzh-yib%
zKGERQw^4&%4)ry~!u588rM0y-X5r>WM@>^xO;cY;+gzN02xbQ|zl_=kGpG^y8y=1$
zBkB*62-gYFUsB&>Mu+3_h?cwbFn3+bTPb4~tsB3Tucf`Nzi+xs+Pz2FQ`m^i#CRZf
zB5cS@FoQR))$;RCq*s~2dpY@vBEF)~(fx?IAW)2=@v=w@8{=NmE5Z%MM5rPKhLKyJ
zIEz>+!Y{ElZY~{o^HQjgKW2=PGw~c;c(y+r_MiRIExUK`)>d}vpBB8dz<_@XJ}(=M
z@`9s=o-p~?t+yTt`#%SyaMs!1c|2!f|6G5#&M1FQHm)(sbFoF=AXf;NQXc*!Wv6;3
zP!|@+B4&AK?w-
z1$YnflLww4*1_=~O~LSJ;Dr$dVEvGucnPz^0k8+y2(E5UQgR0mPQjh4uJ9k=ADE&X
z#eK8%8HISq7X2MGd!(7-M3^R0;#ctwq5?OBiXI#1aj!eh!#S7nXdE7OH
zpJHrt+1$DR#EYvw_rr6wH~0ykuNkD
z4S#pleeX`rFwl~6W8ow*+(kZoy~u}gMA;QoQ-F#;U3&GziOdB1rFt?H`4JyLgL*ZV
zV94k(At7MOo9FLn&QGA~p!SzoHXhH$&c(`^_=h<8y8}J@y+Q4KoY2?P^aiub%Hr{{
zTeWmg&u#eg2C)lzd!Bukv!M6cU(olypl`ka{7#OspzH9bP#l%XA-sh?f~iWBrjvFd
zhlW#Jic&-e4?+QesY*mvr12_eh#x7EIqbUPxc(Ti3Zb8d{yV%vKhersX)0VniKJe$
zGC;qAVD^}GErGfLO4{bj(%W%-?i`M#f|f3=RydzCw|H0{6zq8?5SQf_zI1B=p>AoY@MEBl#tqB?9@2eGnk(>$
zY(M3y?35!eu5E{GPwwanMr~kfR)?12oSX}xpu91A`X>@Ncp=_PzAdfHi-ZZSdovkT
zD!RCO_!9&p<+D=+IXZ}f1*$H|kusEWB+?jA1;hCy6hb)9`}5{NhzZvBpSu
zC4RG_$!edT*|z<(o|JdWNrS;*G!*`B8=BV8jo@gjGjzt1amIIpPejx@%GR(VrBr)}SsnQpgEIay)p?F%;s;@tsXW$ThNLt%&E
zZ)<#1Qb#vbUaHQa3B*H}EXA;;IEoq-S9892*7uRV0NG@w27sCL0OzVQuy
z=Dxzk`~LRm)qGK!FS`0se%M-VcR+YH$M8>wr#IHdU5#l
z)6aPH;Nryx7vFX9w%1WU|
zQfUhJ!oLTp>7`3VW}poEy(1zlDu@ujr&j!pH4qU$1HZJ9iPTqH@f#fYJ&GEbP5$l%
zSEQ!F7TBHY?6R9=Yh9?O#?yOIueYW>!Y#6?vb!@i3V9&O*3H+ow9Fb9-TU$0(Scbl
z@oNSRW<$jqlcTc6?zc%ctI;W&OqIdbfKfI_1Fpfo;T3)HX_(+4Ra&d;4o7vRN0z+a
zmgtP-Yx)LUuI|9un19=N(fW&Y@p)<?gV;!CKw`LARQhM8euD$a6~vem8xc;7Vf{BFz)uKFW|CaKDlHWr_tXsUTH}AE
z?zE*V*6&!mWx?Xsda15HHDkrhfu7E!@3fU`wpLfoJ$I`wVv2jXzjj2Kv0aPuHB!gY
zO-nmoh&dVpyXVZ@C@tHxr^eeBo7UAeZQ0r3rq(ut9IroT`S9@OrG53&;?vh$9*gsa
zTAQ!wl-}Nzz8XWoxAfW81=FT27+lkRNG~9rL()r?+XMy?n;m3tMqpH9Dd1db2+EA)W%!u
z>SK+^&+rAR8%!Rn!)>>?4b9%>Z4Iprl`iWvFK=6tFqv#NpSLdJt*N$En4P8?SHobv
zv({y)sPy<;P2B5pRz^Iv+*4I&i}W^j%GG_VOj3h;`bsme9}Yy!-Oc8ehE{it!DOy&
zO!UIbs&Q9USWH$=O?-i~&QZ;c_+=aVwHt%Yf*ET(>d*8qTeEzl(mNB+PDJ>g|qoyS@0W9J6FInk|M33w}z-?d%H1Dl0?Nx@Yz#n?p9g
z43ACd$PxG(r8;ZqNUExIhV_LRp&!Rel`SZ9$PZi5*u!Gr})>7&PN&
zVOYYn7LD$g>D9Fq|HIJ12O}!LI73lk1a&Gh8GH1SNL;6*Slq#}W@9`;d_(M%!4Vb2
z&=I~oe_+P0-S6(+HDh4nU?^v73{78qO>4WT0A6~g0=XU6K;dbI134D{6x5^Rp9Hkslif@uriQEYKLdh^tJkr|e
z2}(Gq(^!dz!c`QsBVhryz>WARDN36`Un9C0cE{o-Vk*?7(+&}y6jo6q#E5-dFSCkZ
zIWImkBhuxp?C7wWJt2$PZZpk5xn*NL?~DYS8tY}NE6}kq;%^Q%#cLuPI|44Np?Afc
zhG2y(ArsTm>$X|FZLRIg=Y`EVOLXC~w$>QD11|~|gQ3Q{V8fcOCc85&83OKVr>$Dz
zHQ=YJimJNi@Uqp5LynFuEplVXZ7_O5jdIKXQ`(mR##Pn*&i~xmm&}&gk|voYOOtex
zCT)_YZMxIamTr`krRyY_B-2hZ>CB`hh!Pf`K2#95r+|LSrlbhsCt^WCMJb3Mplm7v
z3RO}3p6FBDIydk4KX)ce#m|rTAiZ<$+3s2X=f9tG_O<%fY+ZY_)@AkjeGiLgYmJMS
z#)FG9isJ0;l{qTZ=UA|D+0=?IayM4{&B2pfytc`X>Xo0_3e6`BuRbur~9I_6>
zm3qsvcsO7)DQmlymP5~AP&DkJSQvYV+Q8E8ExWevS=F|ju?H@KQuK^H97ddTQ08Au
z?#d2{_cgtq1M+OM^qXQ_3_FL^f!CA2%fx&DK-kN-pf*G_T94CKnZ`pm1wR{bkZ{}(
zx~2QqI40NJKQw{6P0Q2|)>Ka(xw~!2@~>8nQ2-c{YIxC2+~4?%MOzmw+IkT`L~_xN
zwwHHa+_OAMYA0DCN8>kRG2=;JMbA*>$LjU^gFCnFJLD9HQuC{m73-Tf+;Prc6K%gh
zC@(8b(YoF({*YdYZ){w&xmkTn{jIsFZTGH+FN*C=d`3^o`YzJ#-n;*{C2i(AuzEDy
zez%yEdY=}))g1@?Ned(Nt&CB9ksj&V!W3Gg(MD63HibZ3I4rm1I)%MyL-BOy)z@9!
znT`*4g(LbicjzPGF7X*-dpizF+P$;A-S}I3xy@E?_k=>fwv`9U?V;L`*d0$dE?U%x
zLd!O7*|nzGw`BHUh*gg(WsukiXNf&
zu2Or{>&2@g6!DXY1<$+*eH?!2y#`mg2+*C1+GLLg$Vxx9hl4^1HlF#Kc*xP-^SKOY`CBn+R
z9W5=}c08~{8_*s51JP*Ua?VQ=@`uY_e%|#f+t}oW_m@gNuwz?G
zOSCn@nK9O-w)36ItLC+z371C5aUCsI##yZn@U@T>W1bH?j#wjsUe0O%Oh?r2{rt&!
zO@EL6EwjUDblKl!uZTJJy{5S=*f1Np2>*2AG4Z^tu>~0b)-@m*Fr2oEuFiUK
zpR3trP=DcXZsG!b+AJ-}t8
zs1wnheIA4f>k9W~YTirm?NFYK1kaofMj}CFK`@dn>=9E_3}WgOtH8yt3a9u@bR)+u
zwR;LM6lsN`1vGs6Hs#yOdbFKkXq&uAcy=B93pj$RwxlVI7Cj}~{dI7DWkiKr%$Y}m
zk2@AVusZXFK-0>HIG4(bjEW*{%h)U-J1fkEiT$
zwta~*4?SR3d<)FGChRtAg?;^a;lY)|3oVsC#oRK!!4b0Bs69QeO8&^txWfBNHOs*5
zpZAmru9GW1VO!wVTL;?>p$e;^@}jQbwsxCvSJ=8Qsx;Ut7{P&0#AJ+#58!7GykOm|
z;*)Y2R+W9~xXWiYS9-terG{?b$LQkn<&DCtjyv@vJdc)lFQoF1BC@et&MO{Y#6BbD
znHWpXJH5Ky&-1E)`7Xn?6QJL~Lwq@E(N(cazAATx+yxyFum@)agnA3T;>2XQXM0ok
zq2)>lY7UC7*w9@oLeZdjuCRymi77l+7N+P$!({XJm65Lf%dT~Yd@jQz%u3;|$ouh9
zgk$9bu>md9;VcLA4{SY-yaGrI$iycZS}6i(rRpNEx?4q?6JRT0n<_QX{@t4{xg<*K
z;zwK`Hg~Kh00dSV_>>xft7mBk7o`A}h5C!xqAT$k1BG2pZmPm(T*lx3#SKR~ITzFK
z#XUL+gkiOaWAx#szysuCiUJ80Ix~o`603<6g_g{IsqtpeK{?ISnUWm~_9(py-N$
z>)b(bjlsRE(^sTd%f}lyNO|EoyZE90XUNm+4u#y!o{;#vseJ8XXW_X>cTC_@QIlwn
zERTuurj-WjUf?OyH`~j60(BRja|Hz;Ml|y`5NLP$;M2_2Paavl`baNo-_Y2&0iWna
zpA
z;x_tvd^g|Z>uL7SyozfIf2YGY`I>rsH{I-A<}>+_mEUf@NqduP40mIbawW97aou)I
zsNC}eI>H!;y<6aM0hDAizOCIGyV`odTC&8q0t!~X_~jNOKsCC4Ik!w2_W*RXJ5
z!*%-(K0ODf)Qbq(
z!<0y!LWFt(#7L)1-kWJm_B)6TYT%VAOvj;(yqwx9e}RRJ)C$qk558
zSgoEqVyp4njvTT1Yi#K`VR1lRj#AN@ml~4`e_dJKxG@&^ou{?j_)?jh7FHYSQI!8%
z+7_tc!eOn7Fo)q|$e?clZM_R{c#%9MgZF)}MlW~i4(Nu^S6~p0YX?5)(zXk=cT$Wm
zsAI#o_OEVkE=D>tMdZ#R9`u=jGBdM*VNmRioqeyR`7FS{XaF(LCj(5@kdm7oDivgpfzJZ~E@kNot@awUzv4hTJOpBK<
zwmTY{90$(7Akq>RwCnu+dPh@(-F``Tw?|*y>UoF;zGSPeDmPke9TdOu#`1W;;=Uzj
zzAG51@|o_o#y)FwTLSU&Pe)swt#x|mr|D*!(Hf|#vVtpvoHl(Qc(S#S(`s=x!9~)(
zD9I02gZzaqh~XFXS_;>^PXvCVvguk_kz_<}8D?DHDq@U?njr#VrLJHe2_~9${{$9^
z=#I20AD=g5=lALS}vQO-+!F&94O_O10ngO@1-G
zS{8DX-7wVgTfd0UMmf6^8M18?h{1NtyNH&s_FqM)m7Z?9E!xPYMWhbQcM
zbN}ry%Wn9ZU2o}ox=h#=Y!mo7e0qu?@2-a1STh{)z#|oD6{LPp81{tGz+RRnzIV~G=(lhwE-FiJQ%5_2LX1c8NS<*|4jpr@M6;9A6fvxvsSN_9ur
zQn)qT6%#c}!xs8WF!G#19b!@G6f>W<(@|F|JWj-$fN7IbxRuL(F%U&PU*tkuT+JgG@JsDDIB-a5Dv+40*F};{tV!!N%G>&QWLduHQRt22$)Ouy
zeFdyZQqIwC%>Z>WvDVEO0gv1;!@uE33V$8qvA+n@27>`}4$Mz*!h9gxbLNE7s~)Ls
z?a-?S3>~etl1ck`l-V&IT2Hrz+vQ(UBUSss4RN=X^&}=yZFmuu1WfUA^pUeDekATho5Jrls$zhrYmm0
zpP!S=#rS+6CyQoBB-W0#*xL&tMZHXB(0la+-T=qk-&d5c0I&U5`+^!wUN~%=M|a`?
zPr6g?3;K@3yZL|88CAVPr5xRfO+gpNH>+bTS<;6$t3ReMsj7O<8mtYuRz9KpMoB|z
z!M+=*WdaAvY>QmXkd^<1n62De5p4N{3#yHeul(>a4F$`eIRFjK&TaA5*7&xa
zCrbgkZQJIJD?SdLhwBrqZL4~;tgBcl^OJcQWeGH~$g5w8y`sDq6Y~OIYrZdpBu;WQ
zXpjx%27rF%d=c?o@B6v)1vsI49q;!FkB!c=c^+w4*U+$TJ3l_;^!ciNK5@qZxbrWT
z1NF4Sd%)&&K3>d$Y(dUa?PI)%f%_%>40?VYP@%REAypZpboxb$!%Fwt9K!sf$wlTb
z8GR0y*YG9iGPH71hJ~~aqpg%Vf$;r6M6D1yqYz@Tw=3doavLc)BgH-e1&xscpfnI=
zU5kMx43J_`AL~axtNct^Q`F6FVR-_6Y-dq@mI&)hyf-JBihMYSy)`Tz)&RT9Y?3^d
z2)!w0TJo^Bg7?T(z(QkWPhR>a!uTux+^8(4Cc9e@lFv*!I2SGKRvc#Ido0e@oz0(L
z!~4WBreSSErK;o1UI^953}}?kIbrHIPN5E&DTJI;7O?u3u1N`}Q_A0!^C36E4+s*E
zNf^)%3_3ux!(FSu{sjmyMS!tE^t+g%b}8QrR2WvMzjr%d^Tlm&WLT-M3YwJ54Lb@!
zQ8m1CAiJk`tV-EsXb7m!tcRkm(v-J3efBc?>UxR?8H=OlL@GW6@G-
z2L#wGrMFkr_3oxG((S$Dp{iN&T7&`KA=t={184jMPRUNgE))kfp1?Ix#L
z!R54@a7yWU=OiQQEp#Bduf@8kLfykio2#QK3O3tX?*W2RH>%%;ERO1Eh5D37!S9|W
zuNsXtsP0v_FffQo9Hi->SqFCxxZYWGFsq3(%<7zHxdNO>bmQBh!k()TCc`e|<}$Oj
zARL9V)rhroN_h?Zau||NMt8aHgSwkBm(pM=jXfZmZ^O*Y(O9EPymBysEDmbEDPE~N
zC?4Ac4+J)e@c(e%U>+3ed1Zqzq;>sHi-lKU>Xw!WdE{sR~9dwk!;AE;ZXI*%UO-?fb8@==E?vbw@)
zwuYL^&)v1GYyY7in2dVGT;>hg8y5F$_U_)$v9QKxH|h<}GQH7{Jw+Qm+g2^E^}B3F
zc*ZE^2O6RW!?m^HgVBcD?C=gSIVvpBb@H#uT1rcW!(?)3zjXJZySm-gwe`MoYxz+M_5%~aRaaPT+Sin8Skn>RJZ!D7Rv>@8Pr?A?MbE$X9skJ;#Shsv#0
zZod-phJ)2khuLE>7_HHzZa?h9?rKkYnH?voi)ODC|JB>9R@-WSqgg3;`5R68a+j&m
zkE;aDjeZv}tDIX+Cr}RQ-4Fg-J7ZuLUT0yr&TCKtFkA68pKQOw?m$>j_<}Kcxs^$I
zlmQgPtY_5>sZzhZOMPh9!07p{P+{QxUPfaT?+B=l(JJ`KKfvRrheFNFPLmXbIw6>hL
zWACmHFSdm}CI#etJHOa#JZ5#OX~)WNci(c>ZN`?z!pkBi1dDyg06c}ePtk4o3hAg3
z>yVjT4Qnb-p2;fL%{3v=`@p$D*3{(QdogZn@GUdal)a}8{gld`WRn`9Mi&DyO?2G}L*x`2h|
z93X?c=e2`nv^8=hGFH2kMMU8&wfyXgFDJNKpccGfK0+|aqN^D&TuP3`T%`l1zo5ii~E
zjaWEriFl_TQQ!3l%%6{R?(M|i!p+O7JNAW_Y~<3Kt@R7ab)e5Yhukk-bv1H6>J&p;
z9h_rX%#vgfymXnU!^G6#%6b?Sfa{ovE^1LEV=YN0nD`GBs=CDw)NiQYsAwrpgTr5`
zK1lAuW4I0gn(WgTvwq}Igmo%fkR`NG_nGTk$HuJHl}4qVC+y6VWkHwzb+NT@;XZ?M
zK-8NqMiJ$#!kXWRzCsK^FXqAygnD@o8&id5+;YMCSp(eH;6&B11ZU3UplAl34oFh)
zJLcPtSfmn5+gjT;Tz>fm{Lqu@H>merb)@3@SFeJ}ukGB`RiS8f)5G1}>$hyBJGw5!
zKJ>{@@WQ`*f8*$7hh49{NBueP?Cx2=rY1r<_$;rT*oYyOw(Mt=Gmr->q%61-wy;56
zPB)3+)-H)-rUMpioY;iJjaWS?b^c&Z_%I1jA5Gie#SLtT$!2SU3}oK93jp%dtfC(&
zoC&08ZmePMi*ik*D;!-O#gZ;u7Fkv!BHhrc#l)n(aE&`ibOA8C!yvAPhMsnNLglb2
zz8mr(i$ahOpMwO+K}e93A@}nf1YVkyf)I3pv#EqIE8-wohLlDT>)x;;N-FFAMD2?8
z-BBV|7xuC--~|zK^Vj@NqiCdxa8OYRB_Uh6wVzLEIzA6%R78FXkzU8)}_tr
z=sS5Y733nYbRgBN`k1S$f7`Qvl+v&%b2x3i?rdF!rdC&VGwKkj+F%{WT2|aNRTuS{
zH2Dv@5m^Id<01NDp#%xU~D@YZ9q6jK;HHu59d3}8cW1FojXwg0S
zOW(_Q^VW}E_mrW2U46s4^YB<}#nxy1sjoq&*igS_-FD6+Z4K&aMopXAMYooP*4mcs
zY|#+V+94lZ`T!2`Y>jSM_r_!O>$Y)Scsyg{+T5@-M}phduc@yG{$-wMr-tYv-FBDD
z&JUhznpUT;&{5!1>b68b2vV8?;SA
zW=WF+QA0e}vb{x}Y~9|{vb~ii@iL`OM%$E@2)!@DKYt5()*ifmVWYIgE^4~5f9R;e
zx@p!E84QXp(UbTCX1VB66Fbow5~e_Q(1>6gfd5m`fr5WWDtZh#IhPX_PDqY
zdJEWSylm-V{S;cIk#z&CY^)~74uKMlUuHdR36@D0fZ&-^cDM3j>uHk88Jdajd|njlhw7y4Xg*_#xeh?lRr`bRW}w
zPItHNK?u!l4G}El|8kfis&xX1!pV6qrkjWMuo`C3Bv!=i%RFrQ&tLvu%FwfeR6AIX
z9Ssc|8Va>|;7|M%kB<~;7c`58DueiGRTF*-_xhZ*E}zd;>-32_`6DCl_c?zGRR=%R
zkIZKIn%`N+(REJ$SLIW_-#=Tf@ZvkjymZ^PGV!>&dExqn_@n#fZ=_*?x?Z-8zK$Pt
zv(xX#eq`sopKH+M8nol>ey*OEbACB_`_deoy&U-M65V0U{I$9pbyK#%OX&>te5;+4%wMQk*TGJ1G!#FcM;oH)~|v
zNM+$lQZkkXITR
zl6Dge>>zzRwn&}0J50;@dDcJi|Czcu|st1u(*=jrKtKV!H5uc@+oKkcx8^3Lq6
zag%N-iKR;}#R1YEJ?SjF*L^z_2`hr4!@lV-rFihYql7U%lt!OO67sp5b$l2Pq+LIq5ZNN*$@5_OAP$+(~lM*Jf9
z==HF|7^mgkDjkySvd$mE&xH3AFM_X03r6BR_|R>~F87_-@23OIvw0|n-oo}HwFsCq
z9Do7A0kRsno+Z+BWWWt1N`p!1lG;`n2BhrCLK}|6U_BNWjs;AsnL&nQ2Xl>5;*g2#
z3ytGUM08WEr%v?ZM%A6m2UaSVMA}6}w8jbsFcneJ78M2n8?_X+MZ{ZAeWX0{Td(H^
zoD_0{#|z;ixELC7yTcL)MOH*VxBZWMxB8IgbC#F+p@lj&Zd8Qc;V-j#lxCc@Z(0Ut
zv(5v{EUi(@Schnd;C2A4Jh&-6UznuYCxYtN-w3sOZm`>L@U(_dzt>|Vt4VK(cCUbI
ztj~t3$q{f^J?3M_c;}22FDA)DUjhHPD{)Sac2<6;yc-(BrJafa3(#CnV4f%idOt^_
zfpt=Mwh5!CpQs{nmwLhznuOg?G?O^ZSccAr^
zI2Oi8pj97>jvQDvqdS|?ra|3XvIxzXhGLi`MwjwQSH5eWEs2dvZ(|^$J)HsI8BRxEI
zpoO@)7$#^X?kt7{bY&-tVYt`nP8Gv?gkLCz4bXr7su(sRo&kdEwCeW2b3zN-boJD~
zKATMBlLO(tiEyevGdh?V%^x3#b1-*)a%eoA$d+D9zk8C|Tq-jfZfjXwirSPMO=e5g
zgh-B7TvHc
zHHJ+Tt@yvxpHlu7+0PM}7Bv84UE$mP2RBtg3hBv!gG5b){W;icV1o~x145OPT=01D
zU~fY?Hc|U=aviMcR6&)r01_CR#=;b#D8;B2r>xeau7%LHHo>QG5sqbL&+poww5x
zT1p+%2^ZUC)J@CbW4KcK8?L4`w3gP!s=h9}{LR;xP+D6-H2km4HBkiUO
z2o6_tAzefl(AQ_?r#tBL^aZ*TMzIrg7p!h~
z(>?Shx|hC;V>7=(_t97Be)<}nqzC9h`Z|4s9-@b_jpJMNZR`X24t|=^b);Huh7rv=kzMQMyKf)^h^2`
zy-vTT-_RTMTl!D>-}F129`$?r1N|TRBmIfqqCeAL=&$rQ`a7MW0;x1DbONU&2oOAB
z5Ria{Sy+Ts*o0lcJR_XKCEUUzyrNvdH&z4$Byv$9D#Zd(g|pmiL>P28Dq^Bm)QNi0
zAQtMJOgi0{=syxn#536ebTBb+cs!RMNsi|GGwJb>QG@)J8R$GUmP_Th
zS(w!EF`iNnS3JL4201{+Y?8ZWzATd&iKF4x{P6flpPYGfE}3VTY18Kt$C9>j5T*1$
zoZD@Zxl^NNE%W$TDKVYQv
zHf^Q!6gpWPCeNI3G1(}gsZGxn8;qR*6?e%^zj^+&Jf1(8yp6=$zLCE8^th
z8y|De28($drI>7LXgFW4bzH82nSm+O1_tXahn1KP%quZFer_$BtVhdf*J_h7ZKmRY
zTeQgWu{Lw5UNa{hPhGQX3n4iuD&=##r!fx=AS`5T3@xn
zE>Fbgws;^j-j`0!;5}J*W<-6nd1Vz^W~=NCG_bk6X)u$O19B{tJRa8;qfLfKG6Uo3
zWF^u^68ZSCWHz7bPo(3CbZTf+>w-n*OQ&*qm$s@0lDYom=m6GTb+OoRCY!npeA-OG
zzDz!!88I9kPmU)oSpVa3UYRx-(pG8di~mp*Ysi|2XET{Rf6`e*B&9D_ynRD?IR0s4
z&{#~_g10ZJC0gW+aV`46bYe)~pBYH%F|B!HBA-w64;%V{74lXP6<~P84*=HE7=uJs
zNsNsd`ZAd#IRIpq%UNXJ_*kkGLOg&E<>P(heV9aBAE;U~FA1KbFO?WQoJyyX2xJVY
z5dfeuofyL?ScWs>*&zU94lPNi%SJMNsdO@aEY-&hw0*
zslmKqY&et8%)_5KWIB?x&ut0tHt@P*2m=HnFqp(DPwG*}5%g>VGJ!dr0Zsw3<$!Fv
zQR|%Xs2oAVaAqXgre{oOkWDjb1wcQtU=j>D49c)Fp6fH@GnsTwe;i`~T%5qSB<(bU
z?*Jqla=da~i8$77e<}wmGMd7OfbeCHrTUYoe=MhrrA83}b|X0e(gxP1*lOA4+;C>h
zj$+9YO|;+x$@p;qCDZUE2*Z(4AQu}$H@cb`OOBdl!q~u|QH!(|)4(?9Ims&1*n}hIltNjs|c#QnWIC
z7*~B?VklS4$vC!%)Fq;GY8B*%QyMF1>`#n9zO-tDlS^A?*)_+U%;RGU5}Zep6LKlU
zHO|bO&n8B5gUPHVIRO@n8)_`3@RylQF^#4A^MDppkwef!Djv`S`jfmiMzMI4qnTqF
zJ%cddkXbAnra2wgTE?+v-uF|Xp!JlZ~iE~$s$b^xwCXXf3<8pmCv-AP(P3v
z9kOau0NaVODcy4Mhv+zEEp3g!6>k|mDf#N
zR%4Q@Co^iyX7WHTWpW&_@RM;KL-))ufpP#j<&tK^@G8jZnG@7Ag>cC31M=iF8YEmg
e<-}-RWaMfX%4AT65xa#OA!`TInoUYE_WuG`CfK9^
literal 0
HcmV?d00001
diff --git a/uni_modules/wot-design-uni/components/wd-img-cropper/index.scss b/uni_modules/wot-design-uni/components/wd-img-cropper/index.scss
new file mode 100644
index 0000000..36be968
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-img-cropper/index.scss
@@ -0,0 +1,199 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+@include b(img-cropper) {
+ background: rgba(0, 0, 0, 1);
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ z-index: 1;
+ // 裁剪框包裹器
+ @include e(wrapper) {
+ position: relative;
+ background: rgba(0, 0, 0, 0.45);
+ }
+ @include e(cut) {
+ z-index: 9;
+ position: absolute;
+ width: 100vw;
+ height: 100vh;
+ display: flex;
+ flex-direction: column;
+ pointer-events: none;
+
+ .wd-img-cropper__cut--top,
+ .wd-img-cropper__cut--bottom,
+ .wd-img-cropper__cut--left,
+ .wd-img-cropper__cut--right {
+ // 拖动中背景蒙层为0 拖动结束为0.85
+ background-color: rgba(0, 0, 0, 0.85);
+ transition: background 0.2s;
+ @include when(hightlight) {
+ background-color: rgba(0, 0, 0, 0);
+ }
+ }
+ .wd-img-cropper__cut--bottom,
+ .wd-img-cropper__cut--right {
+ flex: auto;
+ }
+ @include m(middle) {
+ display: flex;
+ }
+ @include m(body) {
+ // 若需要变化窗体大小,支持控制窗体的大小来控制下方所有对应的展示
+ background-color: transparent;
+ position: relative;
+ // 节选框的窗体最外部边缘线
+ &::before {
+ content: "";
+ border: 1px solid #fff;
+ width: calc(200% - 1px);
+ height: calc(200% - 1px);
+ position: absolute;
+ transform: scale(0.5) translate(-1px, -1px);
+ top: -50%;
+ left: -50%;
+ }
+
+ // 结算框对角尺寸
+ $border-size: 2px;
+ // 节选框的四个角
+ .is-left-top,
+ .is-left-bottom,
+ .is-right-top,
+ .is-right-bottom {
+ &::before {
+ content: "";
+ position: absolute;
+ width: $border-size;
+ height: 20px;
+ background-color: #fff;
+ }
+ &::after {
+ content: "";
+ position: absolute;
+ width: 20px;
+ height: $border-size;
+ background-color: #fff;
+ }
+ }
+ .is-left-top {
+ &::before,
+ &::after {
+ left: -$border-size;
+ top: -$border-size;
+ }
+ }
+ .is-left-bottom {
+ &::before,
+ &::after {
+ left: -$border-size;
+ bottom: -$border-size;
+ }
+ }
+ .is-right-top {
+ &::before,
+ &::after {
+ right: -$border-size;
+ top: -$border-size;
+ }
+ }
+ .is-right-bottom {
+ &::before,
+ &::after {
+ right: -$border-size;
+ bottom: -$border-size;
+ }
+ }
+
+ // 内部网格线
+ .is-gridlines-x,
+ .is-gridlines-y {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0;
+ top: 0;
+ display: flex;
+ }
+ .is-gridlines-x {
+ justify-content: center;
+ &::before {
+ content: "";
+ display: inline-block;
+ width: 66.66%;
+ height: 200%;
+ border: 1px solid #fff;
+ border-top: none;
+ border-bottom: none;
+ transform: scale(0.5) translate(0, -50%);
+ }
+ }
+ // 内部网格线 - y轴
+ .is-gridlines-y {
+ align-items: center;
+ &::after {
+ content: "";
+ flex-shrink: 0;
+ display: inline-block;
+ width: 200%;
+ height: 66.66%;
+ border: 1px solid #fff;
+ border-left: none;
+ border-right: none;
+ transform: scale(0.5) translate(-50%, 0);
+ }
+ }
+ }
+ }
+ @include e(img) {
+ z-index: 2;
+ top: 0;
+ left: 0;
+ position: absolute;
+ border: none;
+ width: 100%;
+ backface-visibility: hidden;
+ transform-origin: center;
+ }
+ @include e(canvas) {
+ position: fixed;
+ background: white;
+ width: 150px;
+ height: 150px;
+ z-index: 10;
+ top: -200%;
+ pointer-events: none;
+ }
+ @include e(footer) {
+ position: fixed;
+ z-index: 10;
+ bottom: 10px;
+ width: 100%;
+ height: 15vh;
+ text-align: center;
+ @include m(button) {
+ position: relative;
+ text-align: left;
+ margin: 0 20px;
+ padding-top: 4vh;
+ // line-height: 32px;
+ box-sizing: border-box;
+ .is-cancel {
+ display: inline-block;
+ color: #fff;
+ font-size: 16px;
+ }
+ .is-confirm {
+ position: absolute;
+ right: 0;
+ // height: 32px;
+ width: 56px;
+ border-radius: 16px;
+ font-size: 16px;
+ }
+ }
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-img-cropper/wd-img-cropper.vue b/uni_modules/wot-design-uni/components/wd-img-cropper/wd-img-cropper.vue
new file mode 100644
index 0000000..df0730e
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-img-cropper/wd-img-cropper.vue
@@ -0,0 +1,670 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-img/index.scss b/uni_modules/wot-design-uni/components/wd-img/index.scss
new file mode 100644
index 0000000..90cada3
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-img/index.scss
@@ -0,0 +1,18 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+@include b(img) {
+ position: relative;
+ display: inline-block;
+
+ image {
+ display: block;
+ width: 100%;
+ height: 100%;
+ box-sizing: border-box;
+ }
+ @include when(round) {
+ overflow: hidden;
+ border-radius: 50%;
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-img/wd-img.vue b/uni_modules/wot-design-uni/components/wd-img/wd-img.vue
new file mode 100644
index 0000000..f9bf9c1
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-img/wd-img.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-input-number/index.scss b/uni_modules/wot-design-uni/components/wd-input-number/index.scss
new file mode 100644
index 0000000..32879c2
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-input-number/index.scss
@@ -0,0 +1,132 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(input-number) {
+ @include e(action) {
+ color: $-dark-color;
+ @include when(disabled) {
+ color: $-dark-color-gray;
+ }
+ }
+
+ @include e(input) {
+ color: $-dark-color;
+ }
+
+ @include when(disabled) {
+ .wd-input-number__input {
+ color: $-dark-color-gray;
+ }
+ .wd-input-number__sub,
+ .wd-input-number__add {
+ color: $-dark-color-gray;
+ }
+ }
+ }
+}
+
+@include b(input-number) {
+ display: inline-block;
+ user-select: none;
+ line-height: 1.15;
+
+ @include e(action) {
+ position: relative;
+ display: inline-block;
+ width: $-input-number-btn-width;
+ height: $-input-number-height;
+ vertical-align: middle;
+ color: $-input-number-icon-color;
+ -webkit-tap-highlight-color: transparent;
+ box-sizing: border-box;
+
+ // 左右加减号的边框
+ &::after {
+ position: absolute;
+ content: "";
+ width: calc(200% - 2px);
+ height: calc(200% - 2px);
+ left: 0;
+ top: 0;
+ border: 1px solid $-input-number-border-color;
+ border-top-left-radius: calc($-input-number-radius * 2);
+ border-bottom-left-radius: calc($-input-number-radius * 2);
+ transform: scale(0.5);
+ transform-origin: left top;
+ }
+ &:last-child::after {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-top-right-radius: calc($-input-number-radius * 2);
+ border-bottom-right-radius: calc($-input-number-radius * 2);
+ }
+ @include when(disabled) {
+ color: $-input-number-disabled-color;
+ }
+ }
+
+ @include e(inner) {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ @include e(input) {
+ position: relative;
+ display: block;
+ width: $-input-number-input-width;
+ height: $-input-number-height;
+ padding: 0 2px;
+ box-sizing: border-box;
+ z-index: 1;
+ background: transparent;
+ border: none;
+ outline: none;
+ text-align: center;
+ color: $-input-number-color;
+ font-size: $-input-number-fs;
+ -webkit-appearance: none;
+ -webkit-tap-highlight-color: transparent;
+ }
+
+ @include e(input-border) {
+ position: absolute;
+ width: 100%;
+ height: calc(200% - 2px);
+ left: 0;
+ top: 0;
+ border-top: 1px solid $-input-number-border-color;
+ border-bottom: 1px solid $-input-number-border-color;
+ transform: scaleY(0.5);
+ transform-origin: left top;
+ z-index: 0;
+ }
+
+ @include edeep(action-icon) {
+ position: absolute;
+ display: inline-block;
+ font-size: $-input-number-icon-size;
+ width: $-input-number-icon-size;
+ height: $-input-number-icon-size;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ }
+
+ @include when(disabled) {
+ .wd-input-number__input {
+ color: $-input-number-disabled-color;
+ z-index: inherit;
+ }
+ .wd-input-number__sub,
+ .wd-input-number__add {
+ color: $-input-number-disabled-color;
+ }
+ }
+ @include when(without-input) {
+ .wd-input-number__action:last-child::after {
+ border-left: none;
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-input-number/wd-input-number.vue b/uni_modules/wot-design-uni/components/wd-input-number/wd-input-number.vue
new file mode 100644
index 0000000..961b07a
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-input-number/wd-input-number.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-input/index.scss b/uni_modules/wot-design-uni/components/wd-input/index.scss
new file mode 100644
index 0000000..fa12a18
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-input/index.scss
@@ -0,0 +1,332 @@
+@import "../common/abstracts/variable";
+@import "../common/abstracts/mixin";
+
+.wot-theme-dark {
+ @include b(input) {
+ background: $-dark-background2;
+
+ &::after {
+ background: $-dark-color-gray;
+ }
+
+ @include when(not-empty) {
+ &:not(.is-disabled) {
+ &::after {
+ background-color: $-dark-color;
+ }
+ }
+ }
+
+
+ @include e(inner) {
+ color: $-dark-color;
+
+ &::-webkit-input-placeholder {
+ color: $-dark-color3;
+ }
+ }
+
+ @include e(placeholder) {
+ color: $-dark-color3;
+ }
+
+ @include e(count) {
+ color: $-dark-color3;
+ background: transparent;
+ }
+
+ @include e(count-current) {
+ color: $-dark-color;
+ }
+
+ :deep(.wd-input__icon),
+ :deep(.wd-input__clear) {
+ color: $-dark-color;
+ background: transparent;
+ }
+
+ @include when(cell) {
+ background-color: $-dark-background2;
+
+ @include when(border) {
+ @include halfPixelBorder("top", $-input-cell-padding, $-dark-border-color);
+ }
+ }
+
+ @include when(disabled) {
+
+ .wd-input__inner {
+ color: $-dark-color-gray;
+ background: transparent;
+ }
+ }
+
+
+ @include e(label) {
+ color: $-dark-color;
+ }
+ }
+}
+
+@include b(input) {
+ position: relative;
+ -webkit-tap-highlight-color: transparent;
+ text-align: left;
+ background: $-input-bg;
+
+ &::after {
+ position: absolute;
+ content: "";
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 1px;
+ background: $-input-border-color;
+ transform: scaleY(0.5);
+ transition: background-color 0.2s ease-in-out;
+ }
+
+ @include when(not-empty) {
+ &:not(.is-disabled) {
+ &::after {
+ background-color: $-input-not-empty-border-color;
+ }
+ }
+ }
+
+ @include e(label) {
+ position: relative;
+ width: $-input-cell-label-width;
+ color: $-cell-title-color;
+ margin-right: $-cell-padding;
+ box-sizing: border-box;
+ font-size: $-input-fs;
+ flex-shrink: 0;
+
+ @include when(required) {
+ padding-left: 12px;
+
+ &::after {
+ position: absolute;
+ left: 0;
+ top: 2px;
+ content: "*";
+ font-size: $-cell-required-size;
+ line-height: 1.1;
+ color: $-cell-required-color;
+ }
+ }
+ }
+
+ @include e(label-inner) {
+ display: inline-block;
+ font-size: $-input-fs;
+ line-height: $-cell-line-height;
+ }
+
+ @include e(body) {
+ flex: 1;
+ }
+
+ @include e(value) {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ }
+
+
+ @include e(prefix) {
+ margin-right: $-input-icon-margin;
+ font-size: $-input-fs;
+
+ :deep(.wd-input__icon),
+ :deep(.wd-input__clear) {
+ margin-left: 0;
+ }
+ }
+
+ @include e(suffix) {
+ flex-shrink: 0;
+ margin-left: $-input-icon-margin;
+ line-height: initial;
+ }
+
+ @include e(error-message){
+ color: $-form-item-error-message-color;
+ font-size: $-form-item-error-message-font-size;
+ line-height: $-form-item-error-message-line-height;
+ text-align: left;
+ vertical-align: middle;
+ }
+
+ @include when(disabled) {
+
+ .wd-input__inner {
+ color: $-input-disabled-color;
+ background: transparent;
+ }
+ }
+
+ @include when(error) {
+
+ .wd-input__inner {
+ color: $-input-error-color;
+ background: transparent;
+ }
+ }
+
+ @include when(no-border) {
+ &::after {
+ display: none;
+ }
+
+ .wd-input__inner {
+ height: $-input-inner-height-no-border;
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+ }
+
+ @include when(cell) {
+ display: flex;
+ align-items: flex-start;
+ padding: $-input-cell-padding $-input-padding;
+ background-color: $-input-cell-bg;
+
+ &.is-error::after {
+ background: $-input-cell-border-color;
+ }
+
+ :deep(.wd-input__icon),
+ :deep(.wd-input__clear) {
+ height: $-input-cell-height;
+ line-height: $-input-cell-height;
+ }
+
+ .wd-input__prefix {
+ display: inline-block;
+ margin-right: $-cell-icon-right;
+ }
+
+ .wd-input__inner {
+ height: $-input-cell-height;
+ }
+
+ &.wd-input::after {
+ display: none;
+ }
+
+
+ @include when(center) {
+ align-items: center;
+ }
+
+ @include when(border) {
+ @include halfPixelBorder("top", $-input-cell-padding);
+ }
+ }
+
+ @include when(large) {
+ padding: $-input-cell-padding-large;
+
+ .wd-input__prefix {
+ font-size: $-input-fs-large;
+ }
+
+ .wd-input__label-inner {
+ font-size: $-input-fs-large;
+ }
+
+ .wd-input__inner {
+ font-size: $-input-fs-large;
+ }
+
+
+ .wd-input__count {
+ font-size: $-input-count-fs-large;
+ }
+
+ :deep(.wd-input__icon),
+ :deep(.wd-input__clear) {
+ font-size: $-input-icon-size-large;
+ }
+
+ }
+
+
+ @include e(inner) {
+ flex: 1;
+ height: $-input-inner-height;
+ font-size: $-input-fs;
+ color: $-input-color;
+ outline: none;
+ border: none;
+ padding: 0;
+ box-sizing: border-box;
+
+ &::-webkit-input-placeholder {
+ color: $-input-placeholder-color;
+ }
+
+ @include when(align-right) {
+ text-align: right;
+ }
+ }
+
+ @include e(readonly-mask) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 2;
+ width: 100%;
+ height: 100%;
+ }
+
+
+ @include edeep(icon) {
+ margin-left: $-input-icon-margin;
+ font-size: $-input-icon-size;
+ color: $-input-icon-color;
+ vertical-align: middle;
+ background: $-input-bg;
+ }
+
+ @include edeep(clear) {
+ margin-left: $-input-icon-margin;
+ font-size: $-input-icon-size;
+ color: $-input-clear-color;
+ vertical-align: middle;
+ background: $-input-bg;
+ }
+
+ @include e(count) {
+ margin-left: 15px;
+ font-size: $-input-count-fs;
+ color: $-input-count-color;
+ vertical-align: middle;
+ background: $-input-bg;
+ }
+
+ @include e(count-current) {
+ color: $-input-count-current-color;
+
+ @include when(error) {
+ color: $-input-error-color;
+ }
+ }
+
+
+ @include e(placeholder) {
+ color: $-input-placeholder-color;
+
+ &.is-error {
+ color: $-input-error-color;
+ }
+ }
+
+ .wd-input__count,
+ .wd-input__count-current {
+ display: inline-flex;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-input/wd-input.vue b/uni_modules/wot-design-uni/components/wd-input/wd-input.vue
new file mode 100644
index 0000000..86d03ba
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-input/wd-input.vue
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ String(inputValue).length }}
+
+ /{{ maxlength }}
+
+
+
+
+
+ {{ errorMessage }}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-loading/index.scss b/uni_modules/wot-design-uni/components/wd-loading/index.scss
new file mode 100644
index 0000000..32885eb
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-loading/index.scss
@@ -0,0 +1,35 @@
+@import "../common/abstracts/_mixin.scss";
+@import "../common/abstracts/variable.scss";
+
+@include b(loading) {
+ font-size: 0;
+ line-height: 0;
+ vertical-align: middle;
+ display: inline-block;
+
+ @include e(body) {
+ width: 100%;
+ height: 100%;
+ animation: wd-rotate 0.8s linear infinite;
+ animation-duration: 2s;
+
+ }
+ @include e(svg) {
+ width: 100%;
+ height: 100%;
+ background-size: cover;
+ background-repeat: no-repeat;
+ }
+}
+
+@keyframes wd-rotate {
+ from {
+ transform: rotate(0deg);
+ }
+
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-loading/type.ts b/uni_modules/wot-design-uni/components/wd-loading/type.ts
new file mode 100644
index 0000000..45347a2
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-loading/type.ts
@@ -0,0 +1,2 @@
+// 'circle-outline' | 'circle-ring' 废弃
+export type LoadingType = 'outline' | 'ring' | 'circle-outline' | 'circle-ring' // 提示信息加载状态类型
diff --git a/uni_modules/wot-design-uni/components/wd-loading/wd-loading.vue b/uni_modules/wot-design-uni/components/wd-loading/wd-loading.vue
new file mode 100644
index 0000000..6ebb0b9
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-loading/wd-loading.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-loadmore/index.scss b/uni_modules/wot-design-uni/components/wd-loadmore/index.scss
new file mode 100644
index 0000000..ebae2d8
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-loadmore/index.scss
@@ -0,0 +1,36 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+.wot-theme-dark {
+ @include b(loadmore) {
+ color: $-dark-color;
+ }
+}
+
+@include b(loadmore) {
+ width: 100%;
+ height: $-loadmore-height;
+ line-height: $-loadmore-height;
+ text-align: center;
+ color: $-loadmore-color;
+
+ @include edeep(loading) {
+ display: inline-block;
+ margin-right: 8px;
+ vertical-align: middle;
+ }
+ @include e(text) {
+ display: inline-block;
+ font-size: $-loadmore-fs;
+ vertical-align: middle;
+
+ @include when(light) {
+ margin: 0 6px;
+ color: $-loadmore-error-color;
+ }
+ }
+ @include edeep(refresh) {
+ display: inline-block;
+ color: $-loadmore-error-color;
+ vertical-align: middle;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-loadmore/wd-loadmore.vue b/uni_modules/wot-design-uni/components/wd-loadmore/wd-loadmore.vue
new file mode 100644
index 0000000..58a04f0
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-loadmore/wd-loadmore.vue
@@ -0,0 +1,89 @@
+
+
+ {{ finishedText }}
+
+
+ {{ errorText }}
+
+
+ 加载失败
+ 点击重试
+
+
+
+
+
+ {{ loadingText }}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-message-box/index.scss b/uni_modules/wot-design-uni/components/wd-message-box/index.scss
new file mode 100644
index 0000000..46ba651
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-message-box/index.scss
@@ -0,0 +1,122 @@
+@import "../common/abstracts/variable.scss";
+@import "../common/abstracts/_mixin.scss";
+
+.wot-theme-dark {
+ @include bdeep(message-box) {
+ @include e(body) {
+ background-color: $-dark-background2;
+ }
+
+ @include e(title) {
+ color: $-dark-color;
+ }
+
+ @include e(content) {
+ color: $-dark-color3;
+
+ &::-webkit-scrollbar-thumb {
+ background: $-dark-border-color;
+ }
+ }
+ }
+}
+
+:deep(.wd-message-box){
+ border-radius: $-message-box-radius;
+ overflow: hidden;
+}
+
+@include bdeep(message-box) {
+ border-radius: $-message-box-radius;
+ overflow: hidden;
+
+ @include e(container) {
+ width: $-message-box-width;
+ box-sizing: border-box;
+ }
+
+ @include e(body) {
+ background-color: $-message-box-bg;
+ padding: $-message-box-padding;
+
+ @include when(no-title) {
+ padding: 25px 24px 0px;
+ }
+ }
+
+ @include e(title) {
+ text-align: center;
+ font-size: $-message-box-title-fs;
+ color: $-message-box-title-color;
+ line-height: 20px;
+ font-weight: 500;
+ padding-top: 5px;
+ padding-bottom: 10px;
+ }
+
+ @include e(content) {
+ max-height: $-message-box-content-max-height;
+ color: $-message-box-content-color;
+ font-size: $-message-box-content-fs;
+ text-align: center;
+ overflow: auto;
+ word-break: break-all;
+ line-height: 20px;
+
+ &::-webkit-scrollbar {
+ width: $-message-box-content-scrollbar-width;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ width: $-message-box-content-scrollbar-width;
+ background: $-message-box-content-scrollbar-color;
+ border-radius: calc($-message-box-content-scrollbar-width / 2);
+ }
+ }
+
+ @include e(input-error) {
+ min-height: 18px;
+ margin-top: 2px;
+ color: $-message-box-input-error-color;
+ text-align: left;
+
+ @include when(hidden) {
+ visibility: hidden;
+ }
+ }
+
+ @include e(actions) {
+ padding: 24px;
+ }
+
+ @include e(flex) {
+ display: flex;
+ }
+
+ @include e(block) {
+ display: block;
+ }
+
+ @include e(cancel) {
+ margin-right: 16px;
+ }
+}
+
+.zoomIn-enter-active,
+.zoomIn-leave-active {
+ opacity: 1;
+ transform: translate3d(-50%, -50%, 0) scale(1);
+ transition: all .2s;
+}
+
+.zoomIn-enter {
+ opacity: 0;
+ transform: translate3d(-50%, -50%, 0) scale(0.7);
+ transition: all .2s ease-out;
+}
+
+.zoomIn-leave-to {
+ opacity: 0;
+ transform: translate3d(-50%, -50%, 0) scale(0.9);
+ transition: all .2s ease-out;
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-message-box/index.ts b/uni_modules/wot-design-uni/components/wd-message-box/index.ts
new file mode 100644
index 0000000..fbfae0b
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-message-box/index.ts
@@ -0,0 +1,92 @@
+/*
+ * @Author: weisheng
+ * @Date: 2022-12-14 17:33:21
+ * @LastEditTime: 2023-09-07 00:29:51
+ * @LastEditors: weisheng
+ * @Description:
+ * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-message-box\index.ts
+ * 记得注释
+ */
+import { provide, ref } from 'vue'
+import type { Message, MessageOptions, MessageResult, MessageType } from './types'
+import { deepMerge } from '../common/util'
+
+/**
+ * useMessage 用到的key
+ *
+ * @internal
+ */
+export const messageDefaultOptionKey = '__MESSAGE_OPTION__'
+
+// 默认模板
+export const defaultOptions: MessageOptions = {
+ title: '',
+ showCancelButton: false,
+ show: false,
+ closeOnClickModal: true,
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ msg: '',
+ type: 'alert',
+ inputType: 'text',
+ inputValue: '',
+ inputPlaceholder: '请输入',
+ inputValidate: null,
+ showErr: false,
+ zIndex: 99,
+ lazyRender: true,
+ inputError: ''
+}
+
+export function useMessage(selector: string = ''): Message {
+ const messageOption = ref(defaultOptions) // Message选项
+ const messageOptionKey = selector ? messageDefaultOptionKey + selector : messageDefaultOptionKey
+ provide(messageOptionKey, messageOption)
+
+ const createMethod = (type: MessageType) => {
+ // 优先级:options->toastOptions->defaultOptions
+ return (options: MessageOptions | string) => {
+ const messageOptions = deepMerge({ type: type }, typeof options === 'string' ? { title: options } : options) as MessageOptions
+ if (messageOptions.type === 'confirm' || messageOptions.type === 'prompt') {
+ messageOptions.showCancelButton = true
+ } else {
+ messageOptions.showCancelButton = false
+ }
+ return show(messageOptions)
+ }
+ }
+
+ const show = (option: MessageOptions | string) => {
+ // 返回一个promise
+ return new Promise((resolve, reject) => {
+ const options = deepMerge(defaultOptions, typeof option === 'string' ? { title: option } : option) as MessageOptions
+ messageOption.value = deepMerge(options, {
+ show: true,
+ onConfirm: (res: MessageResult) => {
+ resolve(res)
+ },
+ onCancel: (res: MessageResult) => {
+ reject(res)
+ }
+ }) as MessageOptions
+ })
+ }
+
+ // 打开Alert 弹框
+ const alert = createMethod('alert')
+ // 打开Confirm 弹框
+ const confirm = createMethod('confirm')
+ // 打开Prompt 弹框
+ const prompt = createMethod('prompt')
+
+ const close = () => {
+ messageOption.value = { ...defaultOptions }
+ }
+ return {
+ show,
+ alert,
+ confirm,
+ prompt,
+ close
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-message-box/types.ts b/uni_modules/wot-design-uni/components/wd-message-box/types.ts
new file mode 100644
index 0000000..ea7e230
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-message-box/types.ts
@@ -0,0 +1,88 @@
+export type MessageType = 'alert' | 'confirm' | 'prompt'
+
+export type MessageOptions = {
+ /**
+ * 标题
+ */
+ title?: string
+ /**
+ * 是否展示取消按钮
+ */
+ showCancelButton?: boolean
+
+ show?: boolean
+ /**
+ * 是否支持点击蒙层进行关闭,点击蒙层回调传入的action为'modal'
+ */
+ closeOnClickModal?: boolean
+ /**
+ * 确定按钮文案
+ */
+ confirmButtonText?: string
+ /**
+ * 取消按钮文案
+ */
+ cancelButtonText?: string
+ /**
+ * 消息文案
+ */
+ msg?: string
+ /**
+ * 弹框类型
+ */
+ type?: MessageType
+ /**
+ * 当type为prompt时,输入框类型
+ */
+ inputType?: string
+ /**
+ * 当type为prompt时,输入框初始值
+ */
+ inputValue?: string | number
+ /**
+ * 当type为prompt时,输入框placeholder
+ */
+ inputPlaceholder?: string
+ /**
+ * 当type为prompt时,输入框正则校验,点击确定按钮时进行校验
+ */
+ inputPattern?: RegExp
+ /**
+ * 当type为prompt时,输入框校验函数,点击确定按钮时进行校验
+ */
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ inputValidate?: Function | null
+ /**
+ * 当type为prompt时,输入框检验不通过时的错误提示文案
+ */
+ inputError?: string
+ showErr?: boolean
+ /**
+ * 弹窗层级
+ */
+ zIndex?: number
+ /**
+ * 弹层内容懒渲染,触发展示时才渲染内容
+ */
+ lazyRender?: boolean
+}
+
+export type ActionType = 'confirm' | 'cancel' | 'modal'
+
+export interface MessageResult {
+ action: ActionType
+ value?: string | number
+}
+
+export interface Message {
+ // 打开Message
+ show(toastOptions: MessageOptions | string): Promise
+ // 打开Alert 弹框
+ alert(toastOptions: MessageOptions | string): Promise
+ // 打开Confirm 弹框
+ confirm(toastOptions: MessageOptions | string): Promise
+ // 打开Prompt 弹框
+ prompt(toastOptions: MessageOptions | string): Promise
+ // 关闭Message
+ close(): void
+}
diff --git a/uni_modules/wot-design-uni/components/wd-message-box/wd-message-box.vue b/uni_modules/wot-design-uni/components/wd-message-box/wd-message-box.vue
new file mode 100644
index 0000000..a9acc67
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-message-box/wd-message-box.vue
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+ {{ inputError || '输入的数据不合法' }}
+
+
+
+
+
+ {{ msg }}
+
+
+
+
+
+ {{ cancelButtonText || '取消' }}
+
+
+ {{ confirmButtonText || '确定' }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-navbar-capsule/index.scss b/uni_modules/wot-design-uni/components/wd-navbar-capsule/index.scss
new file mode 100644
index 0000000..2fc79cd
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-navbar-capsule/index.scss
@@ -0,0 +1,65 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(navbar-capsule) {
+ &::before {
+ border: 2rpx solid $-dark-border-color;
+ }
+
+ &::after {
+ background: $-dark-border-color;
+ }
+
+ :deep(.wd-navbar-capsule__icon) {
+ color: $-dark-color;
+ }
+ }
+}
+
+
+@include b(navbar-capsule) {
+ position: relative;
+ box-sizing: border-box;
+ width: $-navbar-capsule-width;
+ height: $-navbar-capsule-height;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 200%;
+ height: 200%;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ box-sizing: border-box;
+ border-radius: calc($-navbar-capsule-border-radius * 2);
+ border: 2rpx solid $-navbar-capsule-border-color;
+ }
+
+ &::after {
+ content: '';
+ display: block;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 1px;
+ height: 36rpx;
+ background: $-navbar-capsule-border-color;
+ }
+
+ &:empty {
+ display: none;
+ }
+
+ @include edeep(icon) {
+ flex: 1;
+ position: relative;
+ color: $-navbar-desc-font-color;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-navbar-capsule/wd-navbar-capsule.vue b/uni_modules/wot-design-uni/components/wd-navbar-capsule/wd-navbar-capsule.vue
new file mode 100644
index 0000000..36e0069
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-navbar-capsule/wd-navbar-capsule.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-navbar/index.scss b/uni_modules/wot-design-uni/components/wd-navbar/index.scss
new file mode 100644
index 0000000..0d646ff
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-navbar/index.scss
@@ -0,0 +1,104 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(navbar) {
+ background-color: $-dark-background;
+
+ @include e(title) {
+ color: $-dark-color;
+ }
+
+ @include e(text) {
+ color: $-dark-color;
+ @include m(hover){
+ background-color: $-dark-background3;
+ }
+ }
+
+ :deep(.wd-navbar__arrow) {
+ color: $-dark-color;
+ }
+ }
+}
+
+
+@include b(navbar) {
+ position: relative;
+ text-align: center;
+ user-select: none;
+ height: $-navbar-height;
+ line-height: $-navbar-height;
+ background-color: $-navbar-background;
+ box-sizing: content-box;
+
+ @include e(content) {
+ position: relative;
+ height: 100%;
+ width: 100%;
+ }
+
+ @include e(title) {
+ max-width: 60%;
+ height: 100%;
+ margin: 0 auto;
+ color: $-navbar-color;
+ font-weight: $-navbar-title-font-weight;
+ font-size: $-navbar-title-font-size;
+ @include lineEllipsis();
+ }
+
+ @include e(text) {
+ display: inline-block;
+ vertical-align: middle;
+ color: $-navbar-desc-font-color;
+ }
+
+ @include e(left, right, capsule) {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ font-size: $-navbar-desc-font-size;
+ display: flex;
+ align-items: center;
+ padding: 0 12px;
+
+ @include when(disabled) {
+ opacity: $-navbar-disabled-opacity;
+ }
+ }
+
+ @include e(left, capsule) {
+ left: 0;
+ }
+
+ @include e(left) {
+ @include m(hover){
+ background-color: $-navbar-hover-color;
+ }
+ }
+
+ @include e(right) {
+ right: 0;
+ @include m(hover){
+ background-color: $-navbar-hover-color;
+ }
+ }
+
+ @include edeep(arrow) {
+ font-size: $-navbar-arrow-size;
+ color: $-navbar-color;
+ }
+
+ @include when(fixed) {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 500;
+ }
+
+ @include when(border) {
+ @include halfPixelBorder('bottom');
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-navbar/wd-navbar.vue b/uni_modules/wot-design-uni/components/wd-navbar/wd-navbar.vue
new file mode 100644
index 0000000..c44d419
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-navbar/wd-navbar.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ leftText }}
+
+
+
+
+ {{ title }}
+
+
+
+
+
+ {{ rightText }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-notice-bar/index.scss b/uni_modules/wot-design-uni/components/wd-notice-bar/index.scss
new file mode 100644
index 0000000..80494bc
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-notice-bar/index.scss
@@ -0,0 +1,93 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(notice-bar) {
+ display: flex;
+ padding: $-notice-bar-padding;
+ align-items: center;
+ font-size: $-notice-bar-fs;
+ border-radius: $-notice-bar-border-radius;
+ position: relative;
+ box-sizing: border-box;
+ @include when(warning) {
+ background: $-notice-bar-warning-bg;
+ color: $-notice-bar-warning-color;
+ }
+ @include when(info) {
+ background: $-notice-bar-info-bg;
+ color: $-notice-bar-info-color;
+ }
+ @include when(danger) {
+ background: $-notice-bar-danger-bg;
+ color: $-notice-bar-danger-color;
+ }
+ @include edeep(prefix) {
+ padding-right: 4px;
+ width: $-notice-bar-prefix-size;
+ height: $-notice-bar-prefix-size;
+ line-height: $-notice-bar-prefix-size;
+ }
+
+
+
+ @include edeep(suffix) {
+ text-align: center;
+ width: $-notice-bar-close-size;
+ height: $-notice-bar-close-size;
+ line-height: $-notice-bar-close-size;
+ display: inline-block;
+ background-color: $-notice-bar-close-bg;
+ color: $-notice-bar-close-color;
+ padding: 0;
+ border-radius: 0px 8px 0px 4px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ }
+ @include e(wrap) {
+ position: relative;
+ flex: 1;
+ height: $-notice-bar-line-height;
+ overflow: hidden;
+ line-height: $-notice-bar-line-height;
+ }
+ @include e(content) {
+ position: absolute;
+ white-space: nowrap;
+
+ @include m(play) {
+ animation: notice-bar-play linear both;
+ }
+ @include m(play-infinite) {
+ animation: notice-bar-play-infinite linear infinite both;
+ }
+ }
+ @include m(ellipse) {
+ .wd-notice-bar__content {
+ position: static;
+ @include lineEllipsis;
+ }
+ }
+ @include m(wrap) {
+
+ .wd-notice-bar__wrap {
+ height: auto;
+ }
+ .wd-notice-bar__content {
+ position: static;
+ white-space: normal;
+ }
+ }
+}
+
+@keyframes notice-bar-play {
+ 100% {
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@keyframes notice-bar-play-infinite {
+ 100% {
+ transform: translate3d(-100%, 0, 0);
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-notice-bar/wd-notice-bar.vue b/uni_modules/wot-design-uni/components/wd-notice-bar/wd-notice-bar.vue
new file mode 100644
index 0000000..a17da03
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-notice-bar/wd-notice-bar.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-notify/index.scss b/uni_modules/wot-design-uni/components/wd-notify/index.scss
new file mode 100644
index 0000000..5df8f4d
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-notify/index.scss
@@ -0,0 +1,34 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(notify) {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: $-notify-padding;
+ font-size: $-notify-font-size;
+ line-height: $-notify-line-height;
+ color: $-notify-text-color;
+
+ // allow newline character
+ white-space: pre-wrap;
+ text-align: center;
+ word-wrap: break-word;
+
+ @include m(primary) {
+ background: $-notify-primary-background;
+ }
+
+ @include m(success) {
+ background: $-notify-success-background;
+ }
+
+ @include m(danger) {
+ background: $-notify-danger-background;
+ }
+
+ @include m(warning) {
+ background: $-notify-warning-background;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-notify/index.ts b/uni_modules/wot-design-uni/components/wd-notify/index.ts
new file mode 100644
index 0000000..86bdcde
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-notify/index.ts
@@ -0,0 +1,56 @@
+import { provide, reactive } from 'vue'
+import type { NotifyProps } from './type'
+import { deepMerge, isString } from '../common/util'
+
+let timer: ReturnType
+let currentOptions = getDefaultOptions()
+const notifyDefaultOptionKey = '__NOTIFY_OPTION__'
+export const setNotifyDefaultOptions = (options: NotifyProps) => {
+ currentOptions = deepMerge(currentOptions, options) as NotifyProps
+}
+export const resetNotifyDefaultOptions = () => {
+ currentOptions = getDefaultOptions()
+}
+export const useNotify = (selector: string = '') => {
+ const notifyOption = reactive(currentOptions)
+ const showNotify = (option: NotifyProps | string) => {
+ const options = deepMerge(currentOptions, isString(option) ? { message: option } : option) as NotifyProps
+
+ Object.assign(notifyOption, options, { visible: true })
+ if (notifyOption.duration && notifyOption.duration > 0) {
+ timer && clearTimeout(timer)
+ timer = setTimeout(() => closeNotify(), options.duration)
+ }
+ }
+ const closeNotify = () => {
+ timer && clearTimeout(timer)
+ notifyOption.visible = false
+ }
+
+ // provide
+ provide(getNotifyOptionKey(selector), notifyOption)
+
+ return {
+ showNotify,
+ closeNotify
+ }
+}
+export const getNotifyOptionKey = (selector: string) => {
+ return selector ? `${notifyDefaultOptionKey}${selector}` : notifyDefaultOptionKey
+}
+
+function getDefaultOptions(): NotifyProps {
+ return {
+ type: 'danger',
+ color: undefined,
+ zIndex: 99,
+ message: '',
+ duration: 3000,
+ position: 'top',
+ safeHeight: undefined,
+ background: undefined,
+ onClick: undefined,
+ onClosed: undefined,
+ onOpened: undefined
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-notify/type.ts b/uni_modules/wot-design-uni/components/wd-notify/type.ts
new file mode 100644
index 0000000..84db4e5
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-notify/type.ts
@@ -0,0 +1,91 @@
+import type { PropType, ExtractPropTypes } from 'vue'
+
+export type NotifyMessage = string | number
+export type NotifyType = 'primary' | 'success' | 'danger' | 'warning'
+export type NotifyPosition = 'top' | 'bottom'
+export type NotifyProps = Omit>, 'selector'> & {
+ onClick?: (event: MouseEvent) => void
+ onClosed?: () => void
+ onOpened?: () => void
+}
+export type NotifyThemeVars = {
+ notifyPadding?: string
+ notifyFontSize?: string
+ notifyTextColor?: string
+ notifyLineHeight?: number | string
+ notifyDangerBackground?: string
+ notifyPrimaryBackground?: string
+ notifySuccessBackground?: string
+ notifyWarningBackground?: string
+}
+export const notifyProps = {
+ /**
+ * 类型,可选值为 primary success danger warning
+ */
+ type: {
+ type: String as PropType,
+ default: 'danger'
+ },
+ /**
+ * 字体颜色
+ */
+ color: {
+ type: String,
+ default: ''
+ },
+ /**
+ * 将组件的 z-index 层级设置为一个固定值
+ */
+ zIndex: {
+ type: Number,
+ default: 99
+ },
+ /**
+ * 显示
+ */
+ visible: {
+ type: Boolean,
+ default: false
+ },
+ /**
+ * 展示文案,支持通过\n换行
+ */
+ message: {
+ type: [Number, String] as PropType,
+ default: ''
+ },
+ /**
+ * 指定唯一标识
+ */
+ selector: {
+ type: String,
+ default: ''
+ },
+ /**
+ * 展示时长(ms),值为 0 时,notify 不会消失
+ */
+ duration: {
+ type: Number,
+ default: 3000
+ },
+ /**
+ * 弹出位置,可选值为 top bottom
+ */
+ position: {
+ type: String as PropType,
+ default: 'top'
+ },
+ /**
+ * 顶部安全高度(
+ */
+ safeHeight: {
+ type: Number
+ },
+ /**
+ * 背景颜色
+ */
+ background: {
+ type: String,
+ default: ''
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-notify/wd-notify.vue b/uni_modules/wot-design-uni/components/wd-notify/wd-notify.vue
new file mode 100644
index 0000000..f74d479
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-notify/wd-notify.vue
@@ -0,0 +1,78 @@
+
+
+
+ {{ state.message }}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-number-keyboard/index.scss b/uni_modules/wot-design-uni/components/wd-number-keyboard/index.scss
new file mode 100644
index 0000000..51ad061
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-number-keyboard/index.scss
@@ -0,0 +1,72 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(number-keyboard) {
+ }
+}
+
+@include b(number-keyboard) {
+ width: 100%;
+ background: $-number-keyboard-background;
+ user-select: none;
+
+ @include m(with-title) {
+ border-radius: 20px 20px 0 0;
+ }
+
+ @include e(header) {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: content-box;
+ height: $-number-keyboard-title-height;
+ padding-top: 6px;
+ color: $-number-keyboard-title-color;
+ font-size: $-number-keyboard-title-font-size;
+ }
+
+ @include e(title) {
+ display: inline-block;
+ font-weight: normal;
+
+ &-left {
+ position: absolute;
+ left: 0;
+ }
+ }
+
+ @include e(body) {
+ display: flex;
+ padding: 6px 0 0 6px;
+ }
+
+ @include e(keys) {
+ display: flex;
+ flex: 3;
+ flex-wrap: wrap;
+ }
+
+ @include e(close) {
+ position: absolute;
+ display: flex;
+ align-items: center;
+ right: 0;
+ height: 100%;
+ padding: $-number-keyboard-close-padding;
+ color: $-number-keyboard-close-color;
+ font-size: $-number-keyboard-close-font-size;
+ background-color: transparent;
+ border: none;
+ @include m(hover){
+ opacity: 0.6;
+ }
+ }
+
+ @include e(sidebar) {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.scss b/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.scss
new file mode 100644
index 0000000..0bdef55
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.scss
@@ -0,0 +1,63 @@
+@import "./../../common/abstracts/_mixin.scss";
+@import "./../../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(key) {}
+}
+
+.wd-key-wrapper {
+ position: relative;
+ flex: 1;
+ flex-basis: 33%;
+ box-sizing: border-box;
+ padding: 0 6px 6px 0;
+
+ @include m(wider){
+ flex-basis: 66%;
+ }
+}
+
+@include b(key) {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: $-number-keyboard-key-height;
+ font-size: $-number-keyboard-key-font-size;
+ line-height: 1.5;
+ background: $-number-keyboard-key-background;
+ border-radius: $-number-keyboard-key-border-radius;
+ &:active{
+ background-color: $-number-keyboard-key-active-color;
+ }
+
+ @include m(large) {
+ position: absolute;
+ top: 0;
+ right: 6px;
+ bottom: 6px;
+ left: 0;
+ height: auto;
+ }
+
+ @include m(delete,close) {
+ font-size: $-number-keyboard-delete-font-size;
+ }
+
+ @include m(active) {
+ background-color: $-number-keyboard-key-active-color;
+ }
+
+ @include m(close) {
+ color: $-number-keyboard-button-text-color;
+ background: $-number-keyboard-button-background;
+
+ &:active{
+ background: $-number-keyboard-button-background;
+ opacity: $-number-keyboard-button-active-opacity;
+ }
+ }
+
+ @include edeep(loading-icon) {
+ color: $-number-keyboard-button-text-color;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.vue b/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.vue
new file mode 100644
index 0000000..dc16c84
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
+ {{ text }}
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-number-keyboard/wd-number-keyboard.vue b/uni_modules/wot-design-uni/components/wd-number-keyboard/wd-number-keyboard.vue
new file mode 100644
index 0000000..54cf0b9
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-number-keyboard/wd-number-keyboard.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-overlay/index.scss b/uni_modules/wot-design-uni/components/wd-overlay/index.scss
new file mode 100644
index 0000000..6786cb9
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-overlay/index.scss
@@ -0,0 +1,17 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(overlay) {
+ background: $-overlay-bg-dark;
+ }
+}
+
+@include bdeep(overlay) {
+ position: fixed;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ background: $-overlay-bg;
+}
diff --git a/uni_modules/wot-design-uni/components/wd-overlay/wd-overlay.vue b/uni_modules/wot-design-uni/components/wd-overlay/wd-overlay.vue
new file mode 100644
index 0000000..974d481
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-overlay/wd-overlay.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-pagination/index.scss b/uni_modules/wot-design-uni/components/wd-pagination/index.scss
new file mode 100644
index 0000000..7f9cfb1
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-pagination/index.scss
@@ -0,0 +1,52 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(pager) {
+ background-color: $-dark-background;
+ @include e(message) {
+ color: $-dark-color3;
+ }
+ }
+}
+
+@include b(pager) {
+ user-select: none;
+ background-color: #fff;
+ @include e(content) {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+ padding: $-pagination-content-padding;
+ }
+ @include e(message) {
+ text-align: center;
+ color:$-pagination-message-color;
+ font-size: $-pagination-message-fs;
+ padding: $-pagination-message-padding;
+ }
+ @include edeep(nav) {
+ min-width: $-pagination-nav-width;
+ @include m(active){
+ color: rgba(0,0,0,0.65)
+ }
+ @include m(disabled){
+ color: rgba(0,0,0,0.15)
+ }
+ }
+ @include e(size){
+ flex: 1;
+ text-align: center;
+ font-size: $-pagination-nav-content-fs;
+ }
+ @include e(separator){
+ padding: $-pagination-nav-sepatator-padding;
+ }
+ @include edeep(left){
+ transform: rotate(180deg) translateY(1px);
+ display: inline-block;
+ }
+ @include e(current){
+ color: $-pagination-nav-current-color;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-pagination/wd-pagination.vue b/uni_modules/wot-design-uni/components/wd-pagination/wd-pagination.vue
new file mode 100644
index 0000000..8948b21
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-pagination/wd-pagination.vue
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-password-input/index.scss b/uni_modules/wot-design-uni/components/wd-password-input/index.scss
new file mode 100644
index 0000000..347bb00
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-password-input/index.scss
@@ -0,0 +1,124 @@
+@import "../common/abstracts/variable";
+@import "../common/abstracts/mixin";
+
+.wot-theme-dark {
+ @include b(password-input) {
+ @include e(item) {
+ color: $-dark-color;
+ background: $-dark-background2;
+
+ @include when(border) {
+ border-color: $-dark-border-color;
+ }
+ }
+
+ @include e(mask) {
+ background-color: $-dark-color;
+ }
+
+ @include e(cursor) {
+ background-color: $-dark-color;
+ }
+
+ @include e(info) {
+ color: $-dark-color;
+
+ @include when(border) {
+ color: $-dark-color2;
+ }
+ }
+ }
+}
+
+@include b(password-input) {
+ position: relative;
+ margin: 0 $-password-input-margin;
+ user-select: none;
+
+ @include e(security) {
+ display: flex;
+ width: 100%;
+ height: $-password-input-height;
+ cursor: pointer;
+ }
+
+ @include e(item) {
+ position: relative;
+ display: flex;
+ flex: 1;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ color: $-password-input-text-color;
+ font-size: $-password-input-font-size;
+ line-height: 1.2;
+ background: $-password-input-background;
+
+ @include when(border) {
+ border: 1px solid $-password-input-border-color;
+
+ &:not(:last-child) {
+ border-right: none;
+ }
+
+ &:first-child {
+ border-top-left-radius: $-password-input-radius;
+ border-bottom-left-radius: $-password-input-radius;
+ }
+
+ &:last-child {
+ border-top-right-radius: $-password-input-radius;
+ border-bottom-right-radius: $-password-input-radius;
+ }
+ }
+ }
+
+ @include e(mask) {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: $-password-input-dot-size;
+ height: $-password-input-dot-size;
+ background: $-password-input-dot-color;
+ border-radius: 100%;
+ transform: translate(-50%, -50%);
+ visibility: hidden;
+ }
+
+ @include e(cursor) {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: $-password-input-cursor-width;
+ height: $-password-input-cursor-height;
+ background: $-password-input-cursor-color;
+ transform: translate(-50%, -50%);
+ animation: $-password-input-cursor-duration cursor-flicker infinite;
+ }
+
+ @include e(info) {
+ margin-top: $-password-input-margin;
+ font-size: $-password-input-info-font-size;
+ text-align: center;
+ color: $-password-input-info-color;
+
+ @include when(error) {
+ color: $-password-input-error-info-color;
+ }
+
+ }
+}
+
+@keyframes cursor-flicker {
+ from {
+ opacity: 0;
+ }
+
+ 50% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-password-input/wd-password-input.vue b/uni_modules/wot-design-uni/components/wd-password-input/wd-password-input.vue
new file mode 100644
index 0000000..47b3da0
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-password-input/wd-password-input.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+ {{ modelValue[index] }}
+
+
+
+
+ {{ errorInfo || info }}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-picker-view/index.scss b/uni_modules/wot-design-uni/components/wd-picker-view/index.scss
new file mode 100644
index 0000000..83d4aaf
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-picker-view/index.scss
@@ -0,0 +1,92 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(picker-view) {
+ @include e(columns) {
+ background: $-dark-background2;
+ }
+
+ :deep(.wd-picker-view__roller) {
+ background: $-dark-background4;
+ }
+ }
+
+ @include b(picker-view-column) {
+ color: $-dark-color;
+
+ @include e(item) {
+ @include m(disabled) {
+ color: $-dark-color-gray;
+ }
+ }
+ }
+}
+
+
+@include b(picker-view) {
+ position: relative;
+ padding: 10px 0;
+
+ @include e(columns) {
+ position: relative;
+ display: flex;
+ background: $-picker-bg;
+ overflow: hidden;
+ align-items: center;
+ }
+
+ @include edeep(mask) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: $-picker-mask;
+ background-position: top, bottom;
+ background-repeat: no-repeat;
+ z-index: 2;
+ pointer-events: none;
+ filter: blur(4px);
+ }
+
+ @include e(loading) {
+ position: absolute;
+ display: flex;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ align-items: center;
+ justify-content: center;
+ z-index: 3;
+ background: $-picker-loading-bg;
+ }
+
+ @include edeep(roller) {
+ background: rgba(245, 245, 245, 1);
+ z-index: 0;
+
+ &::before,
+ &::after {
+ display: none;
+ }
+ }
+}
+
+@include b(picker-view-column) {
+ flex: 1;
+ font-size: $-picker-column-fs;
+ color: $-picker-column-color;
+ text-align: center;
+ transition-timing-function: cubic-bezier(0.28, 0.8, 0.63, 1);
+
+ @include e(item) {
+ padding: $-picker-column-padding;
+ @include lineEllipsis;
+
+ @include m(disabled) {
+ color: $-picker-column-disabled-color;
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-picker-view/type.ts b/uni_modules/wot-design-uni/components/wd-picker-view/type.ts
new file mode 100644
index 0000000..b9d39fa
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-picker-view/type.ts
@@ -0,0 +1,81 @@
+/*
+ * @Author: weisheng
+ * @Date: 2023-08-21 13:03:42
+ * @LastEditTime: 2023-08-21 17:24:57
+ * @LastEditors: weisheng
+ * @Description:
+ * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-picker-view\type.ts
+ * 记得注释
+ */
+
+import { getType } from '../common/util'
+
+export type ColumnItem = {
+ value?: string | number | boolean
+ label?: string
+ disabled?: boolean
+}
+
+/**
+ * @description 为props的value为array类型时提供format
+ * @param {Array} array 列数组
+ * @param {string} valueKey valueKey
+ * @param {string} labelKey labelKey
+ */
+export function formatArray(array: Array>, valueKey: string, labelKey: string) {
+ let tempArray: Array> = array instanceof Array ? array : [array]
+ // 检测第一层的type
+ const firstLevelTypeList = new Set(array.map(getType))
+ /**
+ * 存在三种类型的合法数据
+ * 1.数组是一维元素,所有元素都是原始值
+ * 2.数组是一维元素,所有元素都是object
+ * 3.数组是二维元素,二维元素可以是任意内容
+ */
+ if (firstLevelTypeList.size !== 1 && firstLevelTypeList.has('object')) {
+ // 原始值和引用类型不用混用
+ throw Error('The columns are correct')
+ }
+ /**
+ * 数组的所有一维子元素都不是array,说明是它是一个一维数组
+ * 所以需要把一维的转成二维,这样方便统一处理
+ */
+ if (!(array[0] instanceof Array)) {
+ tempArray = [tempArray as Array]
+ }
+ // 经过上述处理,都已经变成了二维数组,再把每一项二维元素包装成object
+ const result: Array> = (tempArray as Array>).map((col) => {
+ return col.map((row) => {
+ const isObj = getType(row)
+ /* 针对原始值,包装成{valueKey,labelKey} */
+ if (isObj !== 'object') {
+ return {
+ [valueKey]: row,
+ [labelKey]: row
+ }
+ }
+ /**
+ * 针对已经是object的,修补成{valueKey,labelKey}
+ * 如果没有labelKey,用valueKey代替
+ * 如果没有valueKey,用labelKey代替
+ * valueKey,labelKey都没有,直接抛错
+ */
+ // eslint-disable-next-line no-prototype-builtins
+ if (!row.hasOwnProperty(valueKey) && !row.hasOwnProperty(labelKey)) {
+ // eslint-disable-next-line prettier/prettier
+ throw Error('Can\'t find valueKey and labelKey in columns')
+ }
+ // eslint-disable-next-line no-prototype-builtins
+ if (!row.hasOwnProperty(labelKey)) {
+ row[labelKey] = row[valueKey]
+ }
+ // eslint-disable-next-line no-prototype-builtins
+ if (!row.hasOwnProperty(valueKey)) {
+ row[valueKey] = row[labelKey]
+ }
+ return row as ColumnItem
+ })
+ })
+
+ return result
+}
diff --git a/uni_modules/wot-design-uni/components/wd-picker-view/wd-picker-view.vue b/uni_modules/wot-design-uni/components/wd-picker-view/wd-picker-view.vue
new file mode 100644
index 0000000..542b827
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-picker-view/wd-picker-view.vue
@@ -0,0 +1,409 @@
+
+
+
+
+
+
+
+
+
+ {{ row[labelKey] }}
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-picker/index.scss b/uni_modules/wot-design-uni/components/wd-picker/index.scss
new file mode 100644
index 0000000..d98f386
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-picker/index.scss
@@ -0,0 +1,215 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+
+.wot-theme-dark {
+ @include b(picker) {
+ @include when(border) {
+ .wd-picker__cell {
+ @include halfPixelBorder('top', $-cell-padding, $-dark-border-color);
+ }
+ }
+
+
+ @include e(label) {
+ color: $-dark-color;
+ }
+ @include e(value) {
+ color: $-dark-color;
+ }
+
+ @include e(placeholder) {
+ color: $-dark-color-gray;
+ }
+
+ :deep(.wd-picker__arrow){
+ color: $-dark-color;
+ }
+
+ @include e(cell) {
+ background-color: $-dark-background2;
+ color: $-dark-color;
+ @include when(disabled) {
+ .wd-picker__value {
+ color: $-dark-color3;
+ }
+ .wd-picker__placeholder {
+ color: $-dark-color-gray;
+ }
+ }
+ }
+
+ @include when(disabled) {
+ .wd-picker__value {
+ color: $-dark-color3;
+ }
+
+ .wd-picker__placeholder {
+ color: $-dark-color-gray;
+ }
+ }
+
+ @include e(action) {
+ @include m(cancel) {
+ color: $-dark-color;
+ }
+ @include when(loading) {
+ color: $-dark-color3;
+ }
+ }
+ }
+}
+
+
+@include b(picker) {
+ @include edeep(popup) {
+ border-radius: 16px 16px 0px 0px;
+ }
+
+ @include when(border) {
+ .wd-picker__cell {
+ @include halfPixelBorder('top', $-cell-padding);
+ }
+ }
+ @include when(large) {
+ .wd-picker__cell {
+ font-size: $-cell-title-fs-large;
+ }
+ :deep(.wd-picker__arrow) {
+ font-size: $-cell-icon-size-large;
+ }
+ }
+ @include when(error) {
+ .wd-picker__value,
+ :deep(.wd-picker__arrow) {
+ color: $-input-error-color;
+ }
+ }
+ @include when(align-right) {
+ .wd-picker__value {
+ text-align: right;
+ }
+ }
+ @include e(cell) {
+ position: relative;
+ display: flex;
+ padding: $-cell-wrapper-padding $-cell-padding;
+ align-items: flex-start;
+ background-color: $-color-white;
+ text-decoration: none;
+ color: $-cell-title-color;
+ font-size: $-cell-title-fs;
+ overflow: hidden;
+ line-height: $-cell-line-height;
+
+ @include when(disabled) {
+ .wd-picker__value {
+ color: $-input-disabled-color;
+ }
+ }
+ }
+
+ @include when(disabled) {
+ .wd-picker__value {
+ color: $-picker-column-disabled-color;
+ }
+ }
+
+ @include e(error-message){
+ color: $-form-item-error-message-color;
+ font-size: $-form-item-error-message-font-size;
+ line-height: $-form-item-error-message-line-height;
+ text-align: left;
+ vertical-align: middle;
+ }
+
+ @include e(label) {
+ position: relative;
+ width: $-input-cell-label-width;
+ margin-right: $-cell-padding;
+ color: $-cell-title-color;
+ box-sizing: border-box;
+
+ @include when(required) {
+ padding-left: 12px;
+
+ &::after {
+ position: absolute;
+ left: 0;
+ top: 2px;
+ content: '*';
+ font-size: $-cell-required-size;
+ line-height: 1.1;
+ color: $-cell-required-color;
+ }
+ }
+ }
+
+ @include e(value-wraper) {
+ display: flex;
+ }
+
+ @include e(value) {
+ flex: 1;
+ margin-right: 10px;
+ color: $-cell-value-color;
+
+ @include when(ellipsis) {
+ @include lineEllipsis;
+ }
+ }
+
+ @include e(body) {
+ flex: 1;
+ }
+
+ @include e(placeholder) {
+ color: $-input-placeholder-color;
+ }
+
+ @include edeep(arrow) {
+ display: block;
+ font-size: $-cell-icon-size;
+ color: $-cell-arrow-color;
+ line-height: $-cell-line-height;
+ }
+
+ @include e(wraper) {
+ padding-bottom: var(--window-bottom);
+ }
+
+ @include e(toolbar) {
+ position: relative;
+ display: flex;
+ font-size: $-picker-toolbar-fs;
+ height: $-picker-toolbar-height;
+ line-height: $-picker-action-height;
+ justify-content: space-between;
+ align-items: center;
+ box-sizing: border-box;
+ }
+
+ @include e(action) {
+ display: block;
+ border: none;
+ outline: none;
+ font-size: $-picker-toolbar-fs;
+ color: $-picker-toolbar-finish-color;
+ background: transparent;
+ padding: 24px 15px 14px 15px;
+
+ @include m(cancel) {
+ color: $-picker-toolbar-cancel-color;
+ }
+
+ @include when(loading) {
+ color: $-picker-loading-button-color;
+ }
+ }
+ @include e(title) {
+ display: block;
+ padding-top: 10px;
+ color: $-picker-toolbar-title-color;
+ font-weight: $-action-sheet-weight;
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-picker/wd-picker.vue b/uni_modules/wot-design-uni/components/wd-picker/wd-picker.vue
new file mode 100644
index 0000000..cb9fef3
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-picker/wd-picker.vue
@@ -0,0 +1,490 @@
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+ {{ showValue ? showValue : placeholder }}
+
+
+
+ {{ errorMessage }}
+
+
+
+
+
+
+
+
+
+
+ {{ cancelButtonText }}
+
+
+ {{ title }}
+
+
+ {{ confirmButtonText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-popover/index.scss b/uni_modules/wot-design-uni/components/wd-popover/index.scss
new file mode 100644
index 0000000..6d6e1f7
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-popover/index.scss
@@ -0,0 +1,116 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(popover) {
+
+ @include e(pos) {
+ background: rgb(75, 76, 77);
+ color: $-dark-color;
+ box-shadow: 0px 2px 10px 0px rgba(75, 76, 77, 0.1);
+ }
+
+ @include e(menu) {
+ background: rgb(75, 76, 77);
+ }
+
+ @include e(inner) {
+ background-color: rgb(75, 76, 77);
+ }
+
+ @include e(menu-inner) {
+
+ @include halfPixelBorder("top", 0, $-dark-border-color);
+ }
+
+ @include squareArrow($-popover-arrow-size, rgb(75, 76, 77), $-popover-z-index - 1, $-popover-arrow-box-shadow);
+
+ }
+}
+
+@include b(popover) {
+ position: relative;
+ display: inline-block;
+
+ @include edeep(icon) {
+ vertical-align: middle;
+ font-size: 18px;
+ margin-right: 5px;
+ }
+
+ @include e(menu-inner) {
+ position: relative;
+ padding: $-popover-padding 0;
+ display: flex;
+ align-items: center;
+
+ @include halfPixelBorder("top", 0, $-popover-border-color);
+
+ &:first-child::after {
+ display: none;
+ }
+ }
+
+ @include e(menu) {
+ display: inline-block;
+ padding: 0 $-popover-padding;
+ white-space: nowrap;
+ z-index: $-popover-z-index;
+ position: relative;
+ background: $-popover-bg;
+ border-radius: $-popover-radius;
+ }
+
+ @include edeep(pos) {
+ position: absolute;
+ box-sizing: border-box;
+ background-clip: padding-box;
+ text-align: center;
+ min-height: 36px;
+ z-index: $-popover-z-index;
+ line-height: $-popover-line-height;
+ font-size: $-popover-fs;
+ border-radius: $-popover-radius;
+ transition: opacity 0.2s;
+ background: $-popover-bg;
+ box-shadow: $-popover-box-shadow;
+ color: $-popover-color;
+ }
+
+ // @include edeep(transition) {
+ // position: relative;
+ // z-index: $-popover-z-index;
+ // }
+
+ @include e(hidden) {
+ left: -100vw;
+ visibility: hidden;
+ }
+
+ @include e(container) {
+ position: relative;
+ line-height: $-tooltip-line-height;
+ font-size: $-tooltip-fs;
+ }
+
+ @include e(inner) {
+ position: relative;
+ white-space: nowrap;
+ padding: $-popover-padding;
+ line-height: $-popover-line-height;
+ z-index: $-popover-z-index;
+ background-color: $-popover-bg;
+ border-radius: $-popover-radius;
+ }
+
+ @include edeep(close-icon) {
+ font-size: 12px;
+ position: absolute;
+ right: -8px;
+ top: -10px;
+ transform: scale(0.5);
+ padding: 10px;
+ }
+
+ @include squareArrow($-popover-arrow-size, $-popover-bg, $-popover-z-index - 1, $-popover-arrow-box-shadow);
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-popover/wd-popover.vue b/uni_modules/wot-design-uni/components/wd-popover/wd-popover.vue
new file mode 100644
index 0000000..3cc0020
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-popover/wd-popover.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-popup/index.scss b/uni_modules/wot-design-uni/components/wd-popup/index.scss
new file mode 100644
index 0000000..72f7229
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-popup/index.scss
@@ -0,0 +1,112 @@
+@import './../common/abstracts/_mixin.scss';
+@import './../common/abstracts/variable.scss';
+@import '../wd-overlay/index.scss';
+
+.wot-theme-dark {
+ @include b(popup) {
+ background: $-dark-background2;
+
+ @include e(close) {
+ color: $-dark-color;
+ }
+ }
+}
+
+@include b(popup) {
+ position: fixed;
+ max-height: 100%;
+ overflow-y: auto;
+ background: #fff;
+
+ @include edeep(close) {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ color: $-popup-close-color;
+ font-size: $-popup-close-size;
+ transform: rotate(-45deg);
+ }
+
+ @include m(center) {
+ left: 50%;
+ top: 50%;
+ transform: translate3d(-50%, -50%, 0);
+ }
+
+ @include m(left) {
+ top: 0;
+ bottom: 0;
+ left: 0;
+ }
+
+ @include m(right) {
+ top: 0;
+ right: 0;
+ bottom: 0;
+ }
+
+ @include m(top) {
+ top: 0;
+ left: 0;
+ right: 0;
+ }
+
+ @include m(bottom) {
+ right: 0;
+ bottom: 0;
+ left: 0;
+ }
+}
+
+.wd-center-enter-active,
+.wd-center-leave-active {
+ transition-property: opacity;
+}
+
+.wd-center-enter,
+.wd-center-leave-to {
+ opacity: 0;
+}
+
+.wd-top-enter-active,
+.wd-top-leave-active,
+.wd-bottom-enter-active,
+.wd-bottom-leave-active,
+.wd-left-enter-active,
+.wd-left-leave-active,
+.wd-right-enter-active,
+.wd-right-enter-active {
+ transition-property: transform;
+}
+
+.wd-top-enter,
+.wd-top-leave-to {
+ transform: translate3d(0, -100%, 0);
+}
+
+.wd-bottom-enter,
+.wd-bottom-leave-to {
+ transform: translate3d(0, 100%, 0);
+}
+
+.wd-left-enter,
+.wd-left-leave-to {
+ transform: translate3d(-100%, 0, 0);
+}
+
+.wd-right-enter,
+.wd-right-leave-to {
+ transform: translate3d(100%, 0, 0);
+}
+
+.wd-zoom-in-enter-active,
+.wd-zoom-in-leave-active {
+ transition-property: opacity, transform;
+ transform-origin: center center;
+}
+
+.wd-zoom-in-enter,
+.wd-zoom-in-leave-to {
+ opacity: 0;
+ transform: translate3d(-50%, -50%, 0) scale(0.7);
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-popup/type.ts b/uni_modules/wot-design-uni/components/wd-popup/type.ts
new file mode 100644
index 0000000..2291597
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-popup/type.ts
@@ -0,0 +1 @@
+export type PopupType = 'center' | 'top' | 'right' | 'bottom' | 'left'
diff --git a/uni_modules/wot-design-uni/components/wd-popup/wd-popup.vue b/uni_modules/wot-design-uni/components/wd-popup/wd-popup.vue
new file mode 100644
index 0000000..9736b4a
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-popup/wd-popup.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-progress/index.scss b/uni_modules/wot-design-uni/components/wd-progress/index.scss
new file mode 100644
index 0000000..1229227
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-progress/index.scss
@@ -0,0 +1,62 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(progress) {
+ @include e(label) {
+ color: $-dark-color3;
+ }
+ }
+}
+
+@include b(progress) {
+ width: 100%;
+ height: $-progress-height;
+ display: flex;
+ align-items: center;
+ padding: $-progress-padding;
+
+ @include e(outer) {
+ display: block;
+ position: relative;
+ flex: 1;
+ height: $-progress-height;
+ border-radius: calc($-progress-height / 2);
+ background: $-progress-bg;
+ }
+ @include e(inner) {
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ border-radius: calc($-progress-height / 2);
+ background: $-progress-color;
+ transition-property: width;
+ transition-timing-function: linear;
+ font-size: $-progress-icon-fs;
+
+ @include when(danger) {
+ background: $-progress-linear-danger-color;
+ }
+ @include when(success) {
+ background: $-progress-linear-success-color;
+ }
+ }
+ @include edeep(label) {
+ width: 30px;
+ margin-left: 9px;
+ color: $-progress-label-color;
+ font-size: $-progress-label-fs;
+ }
+ @include edeep(icon) {
+ font-size: $-progress-icon-fs;
+
+ @include when(danger) {
+ color: $-progress-danger-color;
+ }
+ @include when(success) {
+ color: $-progress-success-color;
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-progress/wd-progress.vue b/uni_modules/wot-design-uni/components/wd-progress/wd-progress.vue
new file mode 100644
index 0000000..92b974a
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-progress/wd-progress.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+ {{ percentage }}%
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-radio-group/index.scss b/uni_modules/wot-design-uni/components/wd-radio-group/index.scss
new file mode 100644
index 0000000..b21629c
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-radio-group/index.scss
@@ -0,0 +1,23 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(radio-group) {
+ background-color: $-dark-background2;
+ }
+}
+
+@include b(radio-group) {
+ background-color: $-radio-bg;
+ font-size: 0;
+
+ // 上下20px 左右15px 内部间隔12px
+ @include when(button) {
+ width: 100%;
+ height: 100%;
+ padding: 8px 3px 20px 15px;
+ box-sizing: border-box;
+ overflow: hidden;
+ height: auto;
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-radio-group/wd-radio-group.vue b/uni_modules/wot-design-uni/components/wd-radio-group/wd-radio-group.vue
new file mode 100644
index 0000000..dbad6bc
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-radio-group/wd-radio-group.vue
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-radio/index.scss b/uni_modules/wot-design-uni/components/wd-radio/index.scss
new file mode 100644
index 0000000..32ae110
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-radio/index.scss
@@ -0,0 +1,299 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+ @include b(radio) {
+ @include e(shape) {
+ background: transparent;
+ }
+ @include e(label) {
+ color: $-dark-color;
+ }
+ @include when(button) {
+ .wd-radio__label {
+ background-color: $-dark-background;
+ }
+ @include when(checked) {
+ .wd-radio__label {
+ background-color: $-dark-background2;
+ }
+ }
+ }
+
+ @include when(dot) {
+ .wd-radio__shape {
+
+ &::before {
+ background-color: $-radio-dot-checked-bg;
+ }
+ }
+ @include when(checked) {
+ .wd-radio__shape {
+ background-color: transparent;
+ }
+ }
+ }
+
+ @include when(disabled) {
+ .wd-radio__label {
+ color: $-dark-color-gray;
+ }
+ @include when(checked) {
+ .wd-radio__label {
+ color: $-dark-color-gray;
+ }
+ }
+
+ @include when(button) {
+ .wd-radio__label {
+ border-color: #c8c9cc;
+ background: #3a3a3c;
+ color: $-dark-color-gray;
+ }
+ @include when(checked) {
+ .wd-radio__label {
+ border-color: #c8c9cc;
+ background: #3a3a3c;
+ color: #c8c9cc;
+ }
+ }
+ }
+
+ @include when(dot) {
+ .wd-radio__shape {
+ border-color: #c8c9cc;
+ background: #3a3a3c;
+ &::before {
+ background-color: #c8c9cc;
+ }
+ }
+ }
+ }
+ }
+}
+
+@include b(radio) {
+ display: flex;
+ margin-top: $-radio-margin;
+ justify-content: space-between;
+ align-items: center;
+ text-align: center;
+ line-height: 1.2;
+
+ @include when(first) {
+ margin-top: 0;
+ }
+ @include e(shape) {
+ position: relative;
+ display: inline-block;
+ width: $-radio-size;
+ height: $-radio-size;
+ font-size: $-radio-size;
+ color: transparent;
+ display: none;
+ background: $-radio-bg;
+ vertical-align: middle;
+ transition: background 0.2s;
+ }
+ @include e(input) {
+ position: absolute;
+ width: 0;
+ height: 0;
+ margin: 0;
+ opacity: 0;
+ }
+ @include e(label) {
+ display: inline-block;
+ vertical-align: top;
+ font-size: $-radio-label-fs;
+ color: $-radio-label-color;
+ line-height: 20px;
+ }
+ @include when(checked) {
+ .wd-radio__shape {
+ color: $-radio-checked-color;
+ border-color: currentColor;
+ display: inline-block;
+ }
+ .wd-radio__check {
+ color: $-radio-checked-color;
+ opacity: 1;
+ }
+ }
+
+ @include when(dot) {
+ .wd-radio__shape {
+ border: 2px solid $-radio-dot-border-color;
+ border-radius: 50%;
+ position: relative;
+ display: inline-block;
+ box-sizing: border-box;
+ transition: none;
+
+ &::before {
+ content: "";
+ position: absolute;
+ width: $-radio-dot-size;
+ height: $-radio-dot-size;
+ left: 2px;
+ top: 2px;
+ border-radius: 50%;
+ background-color: #fff;
+ transform: scale(0);
+ transition: transform .2s ease-in;
+ }
+ }
+ @include when(checked) {
+ .wd-radio__shape {
+ background-color: $-radio-dot-checked-bg;
+ border-color: $-radio-dot-checked-border-color;
+ &::before {
+ transform: scale(1);
+ }
+ }
+ }
+ }
+
+ @include when(button) {
+ display: inline-block;
+ margin-top: 0;
+ margin-right: 10px;
+
+ .wd-radio__shape {
+ display: none;
+ }
+ .wd-radio__label {
+ height: $-radio-button-height;
+ min-width: $-radio-button-min-width;
+ max-width: $-radio-button-max-width;
+ padding: 5px 15px;
+ margin-right: 0;
+ border-radius: $-radio-button-radius;
+ background-color: $-radio-button-bg;
+ font-size: $-radio-button-fs;
+ box-sizing: border-box;
+ border: 1px solid $-radio-button-border;
+ transition: all 0.2s;
+ @include lineEllipsis;
+ }
+ @include when(checked) {
+ .wd-radio__label {
+ color: $-radio-checked-color;
+ border-color: currentColor;
+ background-color: $-radio-bg;
+ }
+ }
+ }
+
+ @include when(inline) {
+ display: inline-block;
+ margin-top: 0;
+ margin-right: $-radio-margin;
+
+ @include when(first) {
+ margin-left: 0;
+ }
+ .wd-radio__shape {
+ display: block;
+ margin-right: 4px;
+ float: left;
+ &::after {
+ content: "";
+ display: table;
+ clear: both;
+ }
+ }
+
+ @include when(dot) {
+ .wd-radio__shape {
+ margin-top: 2px;
+ }
+ @include when(large) {
+ .wd-radio__shape {
+ margin-top: 0;
+ }
+ }
+ }
+ }
+
+ @include when(disabled) {
+ .wd-radio__label {
+ color: $-radio-disabled-label-color;
+ }
+ @include when(checked) {
+ .wd-radio__shape {
+ color: $-radio-disabled-label-color;
+ }
+ .wd-radio__check {
+ color: $-radio-disabled-label-color;
+ }
+ .wd-radio__label {
+ color: $-radio-disabled-label-color;
+ }
+ }
+
+ @include when(button) {
+ .wd-radio__label {
+ border-color: $-radio-disabled-color;
+ background: $-radio-disabled-color;
+ border-color: $-radio-button-border;
+ color: $-radio-disabled-label-color;
+ }
+ @include when(checked) {
+ .wd-radio__label {
+ border-color: $-radio-button-disabled-border;
+ background: $-radio-disabled-color;
+ }
+ }
+ }
+
+ @include when(dot) {
+ .wd-radio__shape {
+ background: $-radio-dot-disabled-bg;
+ border-color: $-radio-dot-disabled-border;
+ }
+ }
+ }
+
+ // 以下内容用于解决父子组件样式隔离的问题 —— START
+ @include when(cell-radio) {
+ padding: 13px 15px;
+ margin: 0;
+
+ @include when(large) {
+ padding: 14px 15px;
+ }
+ }
+
+ @include when(button-radio) {
+ display: inline-flex;
+ width: 33.3333%;
+ padding: 12px 12px 0px 0px;
+ box-sizing: border-box;
+
+ .wd-radio__label {
+ width: 100%;
+ max-width: inherit;
+ }
+ }
+ @include when(large) {
+ .wd-radio__shape {
+ width: $-radio-large-size;
+ height: $-radio-large-size;
+ font-size: $-radio-large-size;
+ }
+ .wd-radio__label {
+ font-size: $-radio-large-label-fs;
+ }
+
+ @include when(dot) {
+ .wd-radio__shape {
+ &::before {
+ width: $-radio-dot-large-size;
+ height: $-radio-dot-large-size;
+ }
+ }
+ }
+ }
+ // 以下内容用于解决父子组件样式隔离的问题 —— END
+}
diff --git a/uni_modules/wot-design-uni/components/wd-radio/wd-radio.vue b/uni_modules/wot-design-uni/components/wd-radio/wd-radio.vue
new file mode 100644
index 0000000..abe948c
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-radio/wd-radio.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-rate/index.scss b/uni_modules/wot-design-uni/components/wd-rate/index.scss
new file mode 100644
index 0000000..c40fb18
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-rate/index.scss
@@ -0,0 +1,24 @@
+@import './../common/abstracts/_mixin.scss';
+@import './../common/abstracts/variable.scss';
+
+@include b(rate) {
+ display: inline-block;
+ vertical-align: middle;
+ line-height: 1;
+
+ @include e(item) {
+ position: relative;
+ display: inline-block;
+ }
+ @include e(item-star) {
+ display: inline-block;
+ vertical-align: top;
+
+ @include m(active) {
+ position: absolute;
+ left: 0;
+ top: 0;
+ overflow: hidden;
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-rate/wd-rate.vue b/uni_modules/wot-design-uni/components/wd-rate/wd-rate.vue
new file mode 100644
index 0000000..540e5c0
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-rate/wd-rate.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-resize/index.scss b/uni_modules/wot-design-uni/components/wd-resize/index.scss
new file mode 100644
index 0000000..cb0a039
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-resize/index.scss
@@ -0,0 +1,27 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(resize) {
+
+ @include e(container) {
+ position: absolute;
+ min-width: 1px;
+ min-height: 1px;
+ }
+
+ @include e(wrapper) {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: -9999;
+ overflow: hidden;
+ visibility: hidden;
+
+ @include m(placeholder) {
+ transition: 0s;
+ animation: none;
+ }
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-resize/wd-resize.vue b/uni_modules/wot-design-uni/components/wd-resize/wd-resize.vue
new file mode 100644
index 0000000..46fbbd2
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-resize/wd-resize.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-row/index.scss b/uni_modules/wot-design-uni/components/wd-row/index.scss
new file mode 100644
index 0000000..26ffdbd
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-row/index.scss
@@ -0,0 +1,10 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(row) {
+ &::after {
+ display: table;
+ clear: both;
+ content: "";
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-row/wd-row.vue b/uni_modules/wot-design-uni/components/wd-row/wd-row.vue
new file mode 100644
index 0000000..98a5eae
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-row/wd-row.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-search/index.scss b/uni_modules/wot-design-uni/components/wd-search/index.scss
new file mode 100644
index 0000000..627d202
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-search/index.scss
@@ -0,0 +1,151 @@
+@import '../common/abstracts/_mixin.scss';
+@import '../common/abstracts/variable.scss';
+
+.wot-theme-dark {
+ @include b(search) {
+ background: $-dark-background4;
+
+ @include e(block) {
+ background-color: $-dark-background;
+ }
+
+ @include e(input) {
+ color: $-dark-color;
+ }
+
+ @include e(cover) {
+ background-color: $-dark-background;
+ }
+
+ @include e(search-icon) {
+ color: $-dark-color;
+ }
+ @include e(search-left-icon) {
+ color: $-dark-color;
+ }
+ @include e(clear) {
+ color: $-dark-color;
+ }
+ @include e(cancel) {
+ color: $-dark-color;
+ }
+
+ @include when(light) {
+ background: $-dark-background4;
+
+ .wd-search__block {
+ background: $-dark-background7;
+ }
+
+ .wd-search__cover {
+ background: $-dark-background7;
+ }
+ }
+ }
+}
+
+@include b(search) {
+ display: flex;
+ padding: $-search-padding;
+ align-items: center;
+ background: #fff;
+
+ @include e(block) {
+ flex: 1;
+ background-color: $-search-input-bg;
+ border-radius: $-search-input-radius;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ position: relative;
+ }
+ @include e(field) {
+ flex: 1;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ position: relative;
+ }
+ @include e(input) {
+ flex: 1;
+ height: $-search-input-height;
+ box-sizing: border-box;
+ padding: $-search-input-padding;
+ border: none;
+ background: transparent;
+ font-size: $-search-input-fs;
+ -webkit-appearance: none;
+ outline: none;
+ color: $-search-input-color;
+ z-index: 0;
+
+ @include lineEllipsis;
+
+ &::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+ }
+ }
+ @include e(cover) {
+ width: 100%;
+ height: $-search-input-height;
+ background-color: $-search-input-bg;
+ line-height: $-search-input-height;
+ font-size: $-search-input-fs;
+ border-radius: $-search-input-radius;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ }
+ @include edeep(search-icon) {
+ margin-right: 8px;
+ color: $-search-icon-color;
+ font-size: $-search-input-fs;
+ height: $-search-input-height;
+ }
+ @include edeep(search-left-icon) {
+ position: absolute;
+ display: inline-block;
+ height: $-search-input-height;
+ line-height: $-search-input-height;
+ top: 50%;
+ left: 16px;
+ transform: translateY(-50%);
+ color: $-search-icon-color;
+ font-size: $-search-input-fs;
+ }
+ @include e(placeholder-txt) {
+ color: $-search-placeholder-color;
+ font-size: $-search-input-fs;
+ }
+ @include edeep(clear) {
+ position: absolute;
+ right: 0;
+ padding: 6px 9px 6px 7px;
+ color: $-search-cancel-color;
+ }
+ @include edeep(clear-icon) {
+ vertical-align: middle;
+ }
+ @include e(cancel) {
+ padding: $-search-cancel-padding;
+ height: $-search-input-height;
+ line-height: $-search-input-height;
+ font-size: $-search-cancel-fs;
+ color: $-search-cancel-color;
+ -webkit-tap-highlight-color: transparent;
+ }
+ @include when(light) {
+ background: $-search-light-bg;
+
+ .wd-search__block {
+ background: #fff;
+ }
+
+ .wd-search__cover {
+ background: #fff;
+ }
+ }
+ @include when(without-cancel) {
+ padding-right: $-search-side-padding;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-search/wd-search.vue b/uni_modules/wot-design-uni/components/wd-search/wd-search.vue
new file mode 100644
index 0000000..3c7dc78
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-search/wd-search.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+ {{ placeholder || '搜索' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ cancelTxt || '取消' }}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-segmented/index.scss b/uni_modules/wot-design-uni/components/wd-segmented/index.scss
new file mode 100644
index 0000000..f79061e
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-segmented/index.scss
@@ -0,0 +1,101 @@
+@import './../common/abstracts/_mixin.scss';
+@import './../common/abstracts/variable.scss';
+
+.wot-theme-dark {
+ @include b(segmented) {
+ background: $-dark-background2;
+
+ @include e(item) {
+ color: $-dark-color3;
+
+ @include when(active) {
+ color: $-dark-color;
+
+ @include when(disabled) {
+ color: $-dark-color3;
+ }
+ }
+
+ @include when(disabled) {
+ color: $-dark-color-gray;
+ }
+
+ @include m(active) {
+ background-color: $-color-theme;
+
+ @include when(disabled) {
+ opacity: 0.6;
+ }
+ }
+ }
+
+ }
+}
+
+@include b(segmented) {
+ position: relative;
+ display: flex;
+ align-items: stretch;
+ justify-items: flex-start;
+ width: 100%;
+ background-color: $-segmented-item-bg-color;
+ padding: $-segmented-padding;
+ border-radius: 4px;
+ box-sizing: border-box;
+
+
+ @include e(item) {
+ position: relative;
+ text-align: center;
+ border-radius: 4px;
+ flex: 1;
+ min-width: 0;
+ z-index: 1;
+ min-height: 28px;
+ line-height: 28px;
+ padding: 0 12px;
+ font-size: 14px;
+ color: $-segmented-item-color;
+ font-weight: 400;
+
+ @include when(active) {
+ font-weight: 550;
+ }
+
+ @include when(large) {
+ min-height: 32px;
+ line-height: 32px;
+ padding: 0 12px;
+ font-size: 16px;
+ }
+
+
+ @include when(small) {
+ min-height: 24px;
+ line-height: 24px;
+ padding: 0 7px;
+ font-size: 12px;
+ }
+
+ @include when(disabled) {
+ cursor: no-drop;
+ color: $-segmented-item-disabled-color;
+ }
+
+ @include m(active) {
+ background-color: $-segmented-item-acitve-bg;
+ border-radius: 4px;
+ height: calc(100% - $-segmented-padding * 2);
+ @include when(disabled) {
+ opacity: 0.8;
+ }
+ }
+ }
+
+ @include e(item-label) {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-segmented/wd-segmented.vue b/uni_modules/wot-design-uni/components/wd-segmented/wd-segmented.vue
new file mode 100644
index 0000000..7ef6c40
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-segmented/wd-segmented.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+ {{ isObj(option) ? option.value : option }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-select-picker/index.scss b/uni_modules/wot-design-uni/components/wd-select-picker/index.scss
new file mode 100644
index 0000000..a9d0ce2
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-select-picker/index.scss
@@ -0,0 +1,253 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(select-picker) {
+ @include when(border) {
+ .wd-select-picker__cell {
+ @include halfPixelBorder('top', $-cell-padding, $-dark-border-color);
+ }
+ }
+
+ @include e(cell) {
+ background-color: $-dark-background2;
+ color: $-dark-color;
+ @include when(disabled) {
+ .wd-select-picker__value {
+ color: $-dark-color3;
+ }
+ }
+ }
+
+ @include e(label) {
+ color: $-dark-color;
+ }
+ @include e(value) {
+ color: $-dark-color;
+ @include m(placeholder) {
+ color: $-dark-color-gray;
+ }
+ }
+
+ :deep(.wd-select-picker__arrow),
+ :deep(.wd-select-picker__close) {
+ color: $-dark-color;
+ }
+
+ }
+
+}
+
+@include b(select-picker) {
+ @include when(border) {
+ .wd-select-picker__cell {
+ @include halfPixelBorder('top', $-cell-padding);
+ }
+ }
+ @include e(cell) {
+ position: relative;
+ display: flex;
+ padding: $-cell-wrapper-padding $-cell-padding;
+ align-items: flex-start;
+ background-color: $-color-white;
+ text-decoration: none;
+ color: $-cell-title-color;
+ font-size: $-cell-title-fs;
+ overflow: hidden;
+ line-height: $-cell-line-height;
+ }
+ @include e(cell) {
+ @include when(disabled) {
+ .wd-select-picker__value {
+ color: $-input-disabled-color;
+ }
+ }
+ @include when(align-right) {
+ .wd-select-picker__value {
+ text-align: right;
+ }
+ }
+ @include when(error) {
+ .wd-select-picker__value {
+ color: $-input-error-color;
+ }
+ :deep(.wd-select-picker__arrow) {
+ color: $-input-error-color;
+ }
+ }
+ @include when(large) {
+ font-size: $-cell-title-fs-large;
+
+ :deep(.wd-select-picker__arrow ){
+ font-size: $-cell-icon-size-large;
+ }
+ }
+ }
+ @include e(error-message){
+ color: $-form-item-error-message-color;
+ font-size: $-form-item-error-message-font-size;
+ line-height: $-form-item-error-message-line-height;
+ text-align: left;
+ vertical-align: middle;
+ }
+ @include e(label) {
+ position: relative;
+ width: $-input-cell-label-width;
+ color: $-cell-title-color;
+ margin-right: $-cell-padding;
+ box-sizing: border-box;
+
+ @include when(required) {
+ padding-left: 12px;
+
+ &::after {
+ position: absolute;
+ left: 0;
+ top: 2px;
+ content: '*';
+ font-size: $-cell-required-size;
+ line-height: 1.1;
+ color: $-cell-required-color;
+ }
+ }
+ }
+ @include e(value-wraper) {
+ display: flex;
+ }
+ @include e(value) {
+ flex: 1;
+ margin-right: 10px;
+ color: $-cell-value-color;
+
+ @include when(ellipsis) {
+ @include lineEllipsis;
+ }
+ @include m(placeholder) {
+ color: $-input-placeholder-color;
+ }
+ }
+ @include e(body) {
+ flex: 1;
+ }
+ @include edeep(arrow) {
+ display: block;
+ font-size: $-cell-icon-size;
+ color: $-cell-arrow-color;
+ line-height: $-cell-line-height;
+ }
+ @include e(selected) {
+ height: $-col-picker-selected-height;
+ font-size: $-col-picker-selected-fs;
+ color: $-col-picker-selected-color;
+ overflow: hidden;
+ }
+ @include e(selected-container){
+ position: relative;
+ display: flex;
+ user-select: none;
+ }
+ @include e(selected-item) {
+ flex: 0 0 auto;
+ height: $-col-picker-selected-height;
+ line-height: $-col-picker-selected-height;
+ padding: $-col-picker-selected-padding;
+
+ @include when(selected) {
+ font-weight: $-col-picker-selected-fw;
+ }
+ }
+ @include e(selected-line) {
+ position: absolute;
+ bottom: 5px;
+ width: $-col-picker-line-width;
+ left: 0;
+ height: $-col-picker-line-height;
+ background: $-col-picker-line-color;
+ z-index: 1;
+ border-radius: calc($-col-picker-line-height / 2);
+ box-shadow: $-col-picker-line-box-shadow;
+ }
+ @include e(list-container){
+ position: relative;
+ }
+ @include e(list) {
+ height: $-col-picker-list-height;
+ padding-bottom: $-col-picker-list-padding-bottom;
+ box-sizing: border-box;
+ overflow: auto;
+ color: $-col-picker-list-color;
+ font-size: $-col-picker-list-fs;
+ -webkit-overflow-scrolling: touch;
+ }
+ @include e(list-item) {
+ display: flex;
+ padding: $-col-picker-list-item-padding;
+ align-items: flex-start;
+
+ @include when(selected) {
+ color: $-col-picker-list-color-checked;
+
+ .wd-select-picker__checked {
+ opacity: 1;
+ }
+ }
+ @include when(disabled) {
+ color: $-col-picker-list-color-disabled;
+ }
+ }
+ @include e(list-item-label) {
+ line-height: 1.285;
+ }
+ @include e(list-item-tip) {
+ margin-top: 2px;
+ font-size: $-col-picker-list-fs-tip;
+ color: $-col-picker-list-color-tip;
+ }
+ @include e(checked) {
+ display: block;
+ margin-left: 4px;
+ font-size: $-col-picker-list-checked-icon-size;
+ color: $-col-picker-list-color-checked;
+ opacity: 0;
+ }
+ @include e(loading) {
+ position: absolute;
+ display: flex;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ align-items: center;
+ justify-content: center;
+ z-index: 3;
+ background: $-picker-loading-bg;
+ }
+ // selectPiceker多出的样式
+ @include edeep(header) {
+ height: 72px;
+ line-height: 72px;
+ }
+ @include e(wrapper) {
+ padding: 0 10px;
+ position: relative;
+ max-height: 356px;
+ box-sizing: border-box;
+ overflow: auto;
+
+ @include when(filterable) {
+ height: 314px;
+ max-height: 314px;
+ }
+
+ @include when(loading) {
+ overflow: hidden;
+ }
+ }
+ @include e(text-active) {
+ color: $-color-theme;
+ }
+
+ @include e(footer) {
+ padding: 24px 15px;
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-select-picker/wd-select-picker.vue b/uni_modules/wot-design-uni/components/wd-select-picker/wd-select-picker.vue
new file mode 100644
index 0000000..becbb39
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-select-picker/wd-select-picker.vue
@@ -0,0 +1,492 @@
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+ {{ showValue || placeholder || '请选择' }}
+
+
+
+
+ {{ errorMessage }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ text.label }}
+ {{ text.label }}
+
+
+
+ {{ item[labelKey] }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ text.label }}
+
+
+
+ {{ item[labelKey] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-sidebar-item/index.scss b/uni_modules/wot-design-uni/components/wd-sidebar-item/index.scss
new file mode 100644
index 0000000..a192ed8
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sidebar-item/index.scss
@@ -0,0 +1,107 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(sidebar-item) {
+ background: $-dark-background2;
+ color: $-dark-color;
+
+ &:active {
+ background-color: $-dark-background4;
+ }
+
+ @include m(active) {
+ background: $-dark-background;
+ color: $-sidebar-active-color;
+ }
+
+ @include m(disabled) {
+ color: $-dark-color-gray;
+
+ &:active {
+ background-color: $-dark-background2;;
+ }
+ }
+ }
+
+}
+
+@include b(sidebar-item) {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ padding: 32rpx;
+ font-size: $-sidebar-font-size;
+ color: $-sidebar-color;
+ background: $-sidebar-bg;
+ min-height: $-sidebar-item-height;
+ box-sizing: border-box;
+ white-space: wrap;
+ line-height: $-sidebar-item-line-height;
+
+ &:active {
+ background-color: $-sidebar-hover-bg;
+ }
+
+ @include m(active) {
+ font-weight: 600;
+ background: $-sidebar-active-bg;
+ color: $-sidebar-active-color;
+
+ &::before {
+ position: absolute;
+ top: 50%;
+ left: 0;
+ width: $-sidebar-active-border-width;
+ height: $-sidebar-active-border-height;
+ background: $-sidebar-active-color;
+ transform: translateY(-50%);
+ content: '';
+ border-radius: $-sidebar-active-border-width;
+ }
+
+ &:active {
+ background-color: transparent;
+ }
+ }
+
+ @include m(prefix) {
+ border-bottom-right-radius: $-sidebar-border-radius;
+ }
+
+ @include m(suffix) {
+ border-top-right-radius: $-sidebar-border-radius;
+ }
+
+
+ @include m(disabled) {
+ color: $-sidebar-disabled-color;
+ cursor: not-allowed;
+
+ &:active {
+ background-color: $-sidebar-bg;
+ }
+ }
+
+ @include edeep(badge) {
+ z-index: 2;
+ }
+
+ @include edeep(icon) {
+ font-size: $-sidebar-icon-size;
+ margin-right: 2px;
+ }
+
+ // @include e(line) {
+ // width: 6rpx;
+ // height: 28rpx;
+ // position: absolute;
+ // left: 0;
+ // top: 50%;
+ // transform: translateY(-50%);
+ // background: $-sidebar-active-color;
+ // border-radius: 8rpx;
+ // }
+
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-sidebar-item/wd-sidebar-item.vue b/uni_modules/wot-design-uni/components/wd-sidebar-item/wd-sidebar-item.vue
new file mode 100644
index 0000000..d993803
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sidebar-item/wd-sidebar-item.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-sidebar/index.scss b/uni_modules/wot-design-uni/components/wd-sidebar/index.scss
new file mode 100644
index 0000000..2e268fa
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sidebar/index.scss
@@ -0,0 +1,25 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(sidebar) {
+ background: $-dark-background;
+ @include e(padding){
+ background: $-dark-background2;
+ }
+ }
+}
+
+@include b(sidebar) {
+ display: flex;
+ flex-direction: column;
+ overflow-y: auto;
+ width: $-sidebar-width;
+ height: $-sidebar-height;
+ background: $-color-white;
+
+ @include e(padding){
+ flex: 1 1 auto;
+ background: $-sidebar-bg;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-sidebar/wd-sidebar.vue b/uni_modules/wot-design-uni/components/wd-sidebar/wd-sidebar.vue
new file mode 100644
index 0000000..5073ef6
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sidebar/wd-sidebar.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-skeleton/index.scss b/uni_modules/wot-design-uni/components/wd-skeleton/index.scss
new file mode 100644
index 0000000..6c0f25c
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-skeleton/index.scss
@@ -0,0 +1,96 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(skeleton) {
+ @include e(col) {
+ background-color: $-dark-background4;
+ }
+ }
+}
+@include b(skeleton) {
+ box-sizing: border-box;
+
+ @include e(row) {
+ justify-content: space-between;
+ margin-bottom: $-skeleton-row-margin-bottom;
+ display: flex;
+ align-items: center;
+
+ &:only-child,
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ @include e(col) {
+ border-radius: $-skeleton-border-radius-text;
+ background-color: $-skeleton-background-color;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ &:first-child:last-child,
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+ @include m(type) {
+ &-text {
+ width: 100%;
+ height: $-skeleton-text-height-default;
+ border-radius: $-skeleton-border-radius-text;
+ }
+
+ &-rect {
+ width: 100%;
+ height: $-skeleton-rect-height-default;
+ border-radius: $-skeleton-border-radius-rect;
+ }
+
+ &-circle {
+ flex-shrink: 0;
+ width: $-skeleton-circle-height-default;
+ height: $-skeleton-circle-height-default;
+ border-radius: $-skeleton-border-radius-circle;
+ }
+ }
+ @include m(animation) {
+ &-gradient {
+ position: relative;
+ overflow-x: hidden;
+
+ &::after {
+ content: ' ';
+ position: absolute;
+ animation: wd-skeleton-gradient 1.5s linear 2s infinite;
+ background: linear-gradient(90deg, rgba(255, 255, 255, 0), $-skeleton-animation-gradient, rgba(255, 255, 255, 0));
+ inset: 0;
+ }
+ }
+
+ &-flashed {
+ animation: wd-skeleton-flashed 2s linear 2s infinite;
+ }
+ }
+
+ @keyframes wd-skeleton-gradient {
+ 0% {
+ transform: translateX(-100%) skewX(-15deg);
+ }
+ 100% {
+ transform: translateX(100%) skewX(-15deg);
+ }
+ }
+ @keyframes wd-skeleton-flashed {
+ 0% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0.3;
+ background-color: $-skeleton-animation-flashed;
+ }
+ 100% {
+ opacity: 1;
+ }
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-skeleton/index.ts b/uni_modules/wot-design-uni/components/wd-skeleton/index.ts
new file mode 100644
index 0000000..43e0049
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-skeleton/index.ts
@@ -0,0 +1 @@
+export type { SkeletonThemeVars } from './types'
diff --git a/uni_modules/wot-design-uni/components/wd-skeleton/types.ts b/uni_modules/wot-design-uni/components/wd-skeleton/types.ts
new file mode 100644
index 0000000..97575ed
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-skeleton/types.ts
@@ -0,0 +1,76 @@
+import type { PropType, CSSProperties } from 'vue'
+
+type SkeletonTheme = 'text' | 'avatar' | 'paragraph' | 'image'
+type SkeletonAnimation = 'gradient' | 'flashed'
+export type SkeletonRowColObj = {
+ type?: 'rect' | 'circle' | 'text'
+ size?: string | number
+ width?: string | number
+ height?: string | number
+ margin?: string | number
+ background?: string
+ marginLeft?: string | number
+ marginRight?: string | number
+ borderRadius?: string | number
+ backgroundColor?: string
+}
+export type SkeletonRowCol = Array>
+export type SkeletonThemeVars = {
+ notifyPadding?: string
+ notifyFontSize?: string
+ notifyTextColor?: string
+ notifyLineHeight?: number | string
+ notifyDangerBackground?: string
+ notifyPrimaryBackground?: string
+ notifySuccessBackground?: string
+ notifyWarningBackground?: string
+}
+export const skeletonProps = {
+ /**
+ * 骨架图风格,有基础、头像组合等两大类
+ */
+ theme: {
+ type: String as PropType,
+ default: 'text'
+ },
+ /**
+ * 用于设置行列数量、宽度高度、间距等。
+ * @example
+ * 【示例一】,`[1, 1, 2]` 表示输出三行骨架图,第一行一列,第二行一列,第三行两列。
+ * 【示例二】,`[1, 1, { width: '100px' }]` 表示自定义第三行的宽度为 `100px`。
+ * 【示例三】,`[1, 2, [{ width, height }, { width, height, marginLeft }]]` 表示第三行有两列,且自定义宽度、高度和间距
+ */
+ rowCol: {
+ type: Array as PropType,
+ default() {
+ return []
+ }
+ },
+ /**
+ * 是否为加载状态,如果是则显示骨架图,如果不是则显示加载完成的内容
+ * @default true
+ */
+ loading: {
+ type: Boolean,
+ default: true
+ },
+ /**
+ * 动画效果,有「渐变加载动画」和「闪烁加载动画」两种。值为空则表示没有动画
+ */
+ animation: {
+ type: String as PropType,
+ default: ''
+ },
+ // 自定义类名
+ customClass: {
+ type: [String, Array, Object],
+ default: ''
+ },
+ // 自定义样式
+ customStyle: {
+ type: Object as PropType,
+ default() {
+ return {}
+ }
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-skeleton/wd-skeleton.vue b/uni_modules/wot-design-uni/components/wd-skeleton/wd-skeleton.vue
new file mode 100644
index 0000000..6df53f1
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-skeleton/wd-skeleton.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-slider/index.scss b/uni_modules/wot-design-uni/components/wd-slider/index.scss
new file mode 100644
index 0000000..72d6cfd
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-slider/index.scss
@@ -0,0 +1,92 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(slider) {
+ @include e(label-min, label-max) {
+ color: $-dark-color;
+ }
+
+ @include e(label) {
+ color: $-dark-color;
+ background-color: rgba($color: $-dark-background2, $alpha: 0.5);
+ }
+
+ @include m(disabled) {
+ @include me(label-min, label-max) {
+ color: $-dark-color-gray;
+ }
+ }
+ }
+}
+
+
+@include b(slider) {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ height: calc($-slider-handle-radius * 3);
+
+ @include e(label-min, label-max) {
+ font-size: $-slider-fs;
+ color: $-slider-color;
+ }
+ @include e(label) {
+ text-align: center;
+ width: calc($-slider-handle-radius * 2);
+ line-height: calc($-slider-handle-radius * 2);
+ font-size: $-slider-fs;
+ line-height: 1.2;
+ color: $-slider-color;
+ background-color: rgba($color: #fff, $alpha: 0.5);
+ border-radius: 100%;
+ position: absolute;
+ bottom: calc($-slider-handle-radius * 2 + 8px);
+ }
+ @include e(bar-wrapper) {
+ flex: 1;
+ position: relative;
+ border-radius: calc($-slider-axie-height / 2);
+ background-color: #e5e5e5;
+ margin: calc($-slider-handle-radius - $-slider-axie-height / 2) 0;
+ }
+ @include e(bar) {
+ position: relative;
+ border-radius: inherit;
+ height: $-slider-axie-height;
+ background: $-slider-line-color;
+ }
+ @include e(button-wrapper) {
+ width: calc($-slider-handle-radius * 2);
+ position: absolute;
+ right: 0;
+ top: 0;
+ transform: translate3d(-50%, -50%, 0);
+ }
+ @include e(has-label) {
+ padding-top: calc($-slider-fs * 1.2 + 8px);
+ }
+ @include e(button) {
+ height: calc($-slider-handle-radius * 2);
+ width: calc($-slider-handle-radius * 2);
+ background: $-slider-handle-bg;
+ border-radius: 100%;
+ border: 1px solid $-slider-axie-bg;
+ box-sizing: border-box;
+ box-shadow: 0 2px 4px 0 rgba($color: #9b9b9b, $alpha: 0.5);
+ }
+ @include e(label-min) {
+ margin-right: $-slider-handle-radius + 11px;
+ }
+ @include e(label-max) {
+ margin-left: $-slider-handle-radius + 11px;
+ }
+ @include m(disabled) {
+ @include me(bar) {
+ opacity: 0.25;
+ }
+ @include me(label-min, label-max) {
+ color: $-slider-disabled-color;
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-slider/wd-slider.vue b/uni_modules/wot-design-uni/components/wd-slider/wd-slider.vue
new file mode 100644
index 0000000..df381c3
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-slider/wd-slider.vue
@@ -0,0 +1,373 @@
+
+
+
+ {{ minValue }}
+
+
+
+
+
+
+ {{ leftNewValue }}
+
+
+
+
+
+
+ {{ rightNewValue }}
+
+
+
+
+
+ {{ maxValue }}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-sort-button/index.scss b/uni_modules/wot-design-uni/components/wd-sort-button/index.scss
new file mode 100644
index 0000000..bbc9af2
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sort-button/index.scss
@@ -0,0 +1,89 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(sort-button) {
+ @include e(wrapper) {
+ color: $-dark-color;
+ }
+ }
+
+}
+
+@include b(sort-button) {
+ display: inline-block;
+ height: $-sort-button-height;
+ line-height: $-sort-button-height;
+
+ @include m(line) {
+ .wd-sort-button__left {
+ &::after {
+ position: absolute;
+ content: '';
+ width: 19px;
+ height: 3px;
+ bottom: 6px;
+ left: 50%;
+ transform: translate(-50%, 0);
+ background: $-sort-button-line-color;
+ border-radius: calc($-sort-button-line-height / 2);
+ transition: opacity .15s;
+ opacity: 0;
+ }
+
+ &.is-active::after {
+ opacity: 1;
+ }
+ }
+ }
+
+ @include e(wrapper) {
+ font-size: $-sort-button-fs;
+ color: $-sort-button-color;
+ word-break: break-all;
+ white-space: nowrap;
+ }
+
+ @include e(left) {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+
+ @include when(active) {
+ font-weight: $-fw-medium;
+
+ .wd-sort-button__right {
+ justify-content: center;
+ }
+
+ }
+ }
+
+ @include e(right) {
+ display: inline-block;
+ min-width: 14px;
+ margin-left: 2px;
+ vertical-align: middle;
+ line-height: 1.1;
+
+ @include when(active) {
+
+ :deep(.wd-sort-button__icon-up),
+ :deep(.wd-sort-button__icon-down) {
+ transform: scale(calc((10 / 14)));
+ }
+ }
+ }
+
+ @include edeep(icon-up) {
+ display: block !important;
+ line-height: 1.1;
+ transform: scale(calc((10 / 14))) translate(0, 7px);
+ }
+
+ @include edeep(icon-down) {
+ display: block !important;
+ line-height: 1.1;
+ transform: scale(calc((10 / 14))) translate(0, -7px);
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-sort-button/wd-sort-button.vue b/uni_modules/wot-design-uni/components/wd-sort-button/wd-sort-button.vue
new file mode 100644
index 0000000..a6aa3bb
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sort-button/wd-sort-button.vue
@@ -0,0 +1,82 @@
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-status-tip/index.scss b/uni_modules/wot-design-uni/components/wd-status-tip/index.scss
new file mode 100644
index 0000000..e69ead2
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-status-tip/index.scss
@@ -0,0 +1,38 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ background-color: $-dark-background2;
+ @include b(status-tip) {
+ @include e(text) {
+ color: $-dark-color3;
+ }
+ }
+}
+
+@include b(status-tip) {
+ padding: $-statustip-padding;
+ width: 100%;
+ margin: 0 auto;
+ color: $-statustip-color;
+ font-size: $-statustip-fs;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+
+ @include e(image) {
+ margin: 0 auto;
+ display: block;
+ width: 160px;
+ height: 160px;
+ }
+ @include e(text) {
+ margin: 20px auto 0;
+ font-size: $-statustip-fs;
+ line-height: $-statustip-line-height;
+ color: $-statustip-color;
+ text-align: center;
+ word-break: break-all;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-status-tip/wd-status-tip.vue b/uni_modules/wot-design-uni/components/wd-status-tip/wd-status-tip.vue
new file mode 100644
index 0000000..ee62686
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-status-tip/wd-status-tip.vue
@@ -0,0 +1,105 @@
+
+
+
+
+ {{ tip }}
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-step/index.scss b/uni_modules/wot-design-uni/components/wd-step/index.scss
new file mode 100644
index 0000000..5feb063
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-step/index.scss
@@ -0,0 +1,235 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(step) {
+ @include e(icon) {
+ background: $-dark-background2;
+ }
+
+ @include e(content){
+ color: $-dark-color3;
+ }
+
+ @include e(line) {
+ background: $-dark-color-gray;
+ }
+
+ @include e(dot) {
+ background: $-dark-color-gray;
+ }
+
+ @include e(description) {
+ color: $-dark-color3;
+ }
+
+ @include when(wait) {
+ .wd-step__description {
+ color: $-dark-color-gray;
+ }
+ }
+
+ :deep(.wd-step__icon-outer),:deep(.wd-step__icon-inner){
+ color: $-dark-color3;
+ border-color: $-dark-color-gray;
+ }
+ }
+}
+
+
+@include b(step) {
+ position: relative;
+ display: inline-block;
+ vertical-align: top;
+
+ @include e(header) {
+ position: relative;
+ font-size: 0;
+
+ @include when(dot) {
+ .wd-step__line {
+ margin-top: -1px;
+ }
+ }
+ }
+ @include e(icon) {
+ display: inline-block;
+ position: relative;
+ width: $-steps-icon-size;
+ height: $-steps-icon-size;
+ background: #fff;
+ z-index: 1;
+
+ @include when(icon) {
+ width: $-steps-is-icon-width;
+ text-align: center;
+ }
+ @include when(dot) {
+ width: $-steps-dot-size;
+ height: $-steps-dot-size;
+ border: 1px solid transparent;
+ margin-left: -1px;
+ border-radius: 50%;
+ background: transparent;
+ }
+ }
+ @include edeep(icon-inner) {
+ font-size: $-steps-icon-size;
+ color: $-steps-inactive-color;
+ }
+ @include e(icon-outer) {
+ width: calc($-steps-icon-size - 2px);
+ height: calc($-steps-icon-size - 2px);
+ border: 1px solid $-steps-inactive-color;
+ color: $-steps-inactive-color;
+ text-align: center;
+ line-height: calc($-steps-icon-size - 2px);
+ border-radius: 50%;
+ font-size: $-steps-icon-text-fs;
+ }
+ @include e(line) {
+ position: absolute;
+ width: 100%;
+ height: 1px;
+ background: $-steps-line-color;
+ transform: scaleY(0.5);
+ top: 50%;
+ left: 0;
+ }
+ @include e(dot) {
+ position: relative;
+ display: block;
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ background: $-steps-line-color;
+ }
+ @include e(content){
+ margin-top: 7px;
+ color: $-steps-inactive-color;
+ font-size: $-steps-label-fs;
+ }
+ @include e(title) {
+ font-weight: $-steps-title-fw;
+ line-height: 1.43;
+
+ @include when(description) {
+ font-size: $-steps-title-fs;
+ }
+ }
+ @include e(description) {
+ margin-top: 5px;
+ padding: 0 2px;
+ color: $-steps-description-color;
+ }
+ @include when(wait) {
+ .wd-step__description {
+ color: $-steps-inactive-color;
+ }
+ }
+ @include when(finished) {
+ :deep(.wd-step__icon-inner) {
+ color: $-steps-finished-color;
+ }
+ .wd-step__icon-outer {
+ color: $-steps-finished-color;
+ border-color: $-steps-finished-color;
+ }
+ .wd-step__title {
+ color: $-steps-finished-color;
+ }
+ .wd-step__dot {
+ background: $-steps-finished-color;
+ }
+ }
+ @include when(process) {
+ .wd-step__icon.is-icon {
+ :deep(.wd-step__icon-inner) {
+ color: $-steps-finished-color;
+ }
+ }
+ .wd-step__icon-outer {
+ color: #fff;
+ background: $-steps-finished-color;
+ border-color: $-steps-finished-color;
+ }
+ .wd-step__title {
+ color: $-steps-finished-color;
+ }
+ .wd-step__icon {
+ border-color: $-steps-finished-color;
+
+ &.is-dot {
+ &::after {
+ position: absolute;
+ content: '';
+ width: $-steps-dot-size + 10px;
+ height: $-steps-dot-size + 10px;
+ left: -5px;
+ top: -5px;
+ border-radius: 50%;
+ background: $-steps-finished-color;
+ opacity: 0.2;
+ }
+ }
+ }
+ .wd-step__dot {
+ background: $-steps-finished-color;
+ }
+ }
+ @include when(error) {
+ :deep(.wd-step__icon-inner), .wd-step__title {
+ color: $-steps-error-color;
+ }
+ .wd-step__icon-outer {
+ color: $-steps-error-color;
+ border-color: $-steps-error-color;
+ }
+ .wd-step__dot {
+ background: $-steps-error-color;
+ }
+ }
+ @include when(center) {
+ text-align: center;
+
+ .wd-step__line {
+ left: 50%;
+ right: -50%;
+ }
+ }
+ @include when(vertical) {
+ display: block;
+
+ .wd-step__header {
+ position: absolute;
+ left: 0;
+ top: 0;
+ height: 100%;
+
+ &.is-dot {
+ top: 6px;
+
+ .wd-step__line {
+ margin-left: -1px;
+ margin-top: 0;
+ }
+ }
+ }
+ .wd-step__content {
+ margin-left: 30px;
+ margin-top: 0;
+ padding-bottom: 20px;
+ }
+ .wd-step__line {
+ top: 0;
+ left: 50%;
+ width: 1px;
+ height: 100%;
+ transform: scaleX(0.5);
+ }
+ .wd-step__icon.is-dot {
+ margin-left: 0;
+ margin-top: -1px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-step/wd-step.vue b/uni_modules/wot-design-uni/components/wd-step/wd-step.vue
new file mode 100644
index 0000000..1a2898a
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-step/wd-step.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+
+
+
+
+ {{ currentTitle }}
+
+
+
+ {{ description }}
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-steps/index.scss b/uni_modules/wot-design-uni/components/wd-steps/index.scss
new file mode 100644
index 0000000..e436a2d
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-steps/index.scss
@@ -0,0 +1,10 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(steps) {
+ font-size: 0;
+
+ @include when(vertical) {
+ display: block;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-steps/wd-steps.vue b/uni_modules/wot-design-uni/components/wd-steps/wd-steps.vue
new file mode 100644
index 0000000..6526cce
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-steps/wd-steps.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-sticky-box/index.scss b/uni_modules/wot-design-uni/components/wd-sticky-box/index.scss
new file mode 100644
index 0000000..9456c8b
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sticky-box/index.scss
@@ -0,0 +1,6 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(sticky-box) {
+ position: relative;
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-sticky-box/wd-sticky-box.vue b/uni_modules/wot-design-uni/components/wd-sticky-box/wd-sticky-box.vue
new file mode 100644
index 0000000..683a9d8
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sticky-box/wd-sticky-box.vue
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-sticky/index.scss b/uni_modules/wot-design-uni/components/wd-sticky/index.scss
new file mode 100644
index 0000000..36392a0
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sticky/index.scss
@@ -0,0 +1,9 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(sticky) {
+ display: inline-block;
+ @include e(container) {
+ display: inline-block;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-sticky/wd-sticky.vue b/uni_modules/wot-design-uni/components/wd-sticky/wd-sticky.vue
new file mode 100644
index 0000000..4a74aa9
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-sticky/wd-sticky.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-swipe-action/index.scss b/uni_modules/wot-design-uni/components/wd-swipe-action/index.scss
new file mode 100644
index 0000000..5310e70
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-swipe-action/index.scss
@@ -0,0 +1,22 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(swipe-action) {
+ position: relative;
+ overflow: hidden;
+ @include e(left) {
+ left: 0;
+ transform: translate3d(-100%, 0, 0);
+ }
+ @include e(right) {
+ right: 0;
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+.wd-swipe-action__left,
+.wd-swipe-action__right {
+ position: absolute;
+ top: 0;
+ height: 100%;
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-swipe-action/wd-swipe-action.vue b/uni_modules/wot-design-uni/components/wd-swipe-action/wd-swipe-action.vue
new file mode 100644
index 0000000..3c6cb33
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-swipe-action/wd-swipe-action.vue
@@ -0,0 +1,310 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-swiper-nav/index.scss b/uni_modules/wot-design-uni/components/wd-swiper-nav/index.scss
new file mode 100644
index 0000000..f7207ca
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-swiper-nav/index.scss
@@ -0,0 +1,159 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(swiper-nav) {
+
+ @include e(btn) {
+ @include m(prev, next) {
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ width: $-swiper-nav-btn-size;
+ height: $-swiper-nav-btn-size;
+ border-radius: 50%;
+ background: $-swiper-nav-btn-bg-color;
+
+ &::after {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ display: block;
+ content: '';
+ width: 12rpx;
+ height: 12rpx;
+ border-color: $-swiper-nav-btn-color;
+ border-style: solid;
+ }
+ }
+
+ @include m(prev) {
+ left: 30rpx;
+
+ &::after {
+ margin-left: 4rpx;
+ border-width: 2rpx 0 0 2rpx;
+ transform: translate(-50%, -50%) rotateZ(-45deg);
+ }
+ }
+
+ @include m(next) {
+ right: 30rpx;
+
+ &::after {
+ margin-left: -4rpx;
+ border-width: 2rpx 2rpx 0 0;
+ transform: translate(-50%, -50%) rotateZ(45deg);
+ }
+ }
+ }
+
+ @include m(dots, dots-bar) {
+ display: flex;
+ flex-direction: row;
+ }
+
+ @include m(fraction) {
+ padding: 0 16rpx;
+ height: $-swiper-nav-fraction-height;
+ line-height: $-swiper-nav-fraction-height;
+ border-radius: calc($-swiper-nav-fraction-height / 2);
+ background: $-swiper-nav-fraction-bg-color;
+ color: $-swiper-nav-fraction-color;
+ font-size: $-swiper-nav-fraction-font-size;
+ }
+
+
+ @include e(item) {
+ @include m(dots, dots-bar) {
+ width: $-swiper-nav-dot-size;
+ height: $-swiper-nav-dot-size;
+ background: $-swiper-nav-dot-color;
+ border-radius: 50%;
+ margin: 0 10rpx;
+ transition: all 0.4s ease-in;
+
+ @include when(vertical) {
+ margin: 10rpx 0;
+ }
+
+ @include when(active) {
+ background-color: $-swiper-nav-dot-active-color;
+ }
+ }
+
+ @include m(dots-bar) {
+
+ @include when(vertical) {
+ @include when(active) {
+ width: $-swiper-nav-dot-size;
+ height: $-swiper-nav-dots-bar-active-width;
+ }
+ }
+
+ @include when(active) {
+ width: $-swiper-nav-dots-bar-active-width;
+ border-radius: calc($-swiper-nav-dot-size / 2);
+ background-color: $-swiper-nav-dot-active-color;
+ }
+ }
+
+ }
+
+
+ @include m(left) {
+ position: absolute;
+ left: 24rpx;
+ top: 50%;
+ transform: translateY(-50%);
+ }
+
+ @include m(right) {
+ position: absolute;
+ right: 24rpx;
+ top: 50%;
+ transform: translateY(-50%);
+ }
+
+ @include m(top-left) {
+ position: absolute;
+ top: 24rpx;
+ left: 24rpx;
+ }
+
+ @include m(top) {
+ position: absolute;
+ left: 50%;
+ top: 24rpx;
+ transform: translateX(-50%);
+ }
+
+ @include m(top-right) {
+ position: absolute;
+ top: 24rpx;
+ right: 24rpx;
+ }
+
+ @include m(bottom-left) {
+ position: absolute;
+ left: 24rpx;
+ bottom: 24rpx;
+ }
+
+ @include m(bottom) {
+ position: absolute;
+ left: 50%;
+ bottom: 24rpx;
+ transform: translateX(-50%);
+ }
+
+ @include m(bottom-right) {
+ position: absolute;
+ right: 24rpx;
+ bottom: 24rpx;
+ }
+
+ @include m(vertical) {
+ flex-direction: column;
+ }
+
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-swiper-nav/type.ts b/uni_modules/wot-design-uni/components/wd-swiper-nav/type.ts
new file mode 100644
index 0000000..fae0cd7
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-swiper-nav/type.ts
@@ -0,0 +1,4 @@
+/**
+ * 指示器类型,点状(dots)、点条状(dots-bar)、分式(fraction)等
+ */
+export type SwiperIndicatorType = 'dots' | 'dots-bar' | 'fraction'
diff --git a/uni_modules/wot-design-uni/components/wd-swiper-nav/wd-swiper-nav.vue b/uni_modules/wot-design-uni/components/wd-swiper-nav/wd-swiper-nav.vue
new file mode 100644
index 0000000..3a807af
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-swiper-nav/wd-swiper-nav.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+ {{ current + 1 }}/{{ total }}
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-swiper/index.scss b/uni_modules/wot-design-uni/components/wd-swiper/index.scss
new file mode 100644
index 0000000..76fd34d
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-swiper/index.scss
@@ -0,0 +1,23 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(swiper) {
+ position: relative;
+ @include e(track){
+ border-radius: $-swiper-radius;
+ overflow: hidden;
+ transform: translateY(0);
+ }
+
+ @include e(item){
+ display: flex;
+ align-items: center;
+ box-sizing: border-box;
+ padding: $-swiper-item-padding;
+ }
+
+ @include e(image){
+ width: 100%;
+ transition: all 0.3s ease;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-swiper/type.ts b/uni_modules/wot-design-uni/components/wd-swiper/type.ts
new file mode 100644
index 0000000..cd8c4ce
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-swiper/type.ts
@@ -0,0 +1,59 @@
+import type { SwiperIndicatorType } from '../wd-swiper-nav/type'
+
+/**
+ * 轮播滑动方向
+ */
+export type DirectionType = 'horizontal' | 'vertical'
+
+/**
+ * 切换动画
+ */
+export type EasingType = 'default' | 'linear' | 'easeInCubic' | 'easeOutCubic' | 'easeInOutCubic'
+
+/**
+ * 指示器位置
+ */
+export type IndicatorPositionType = 'left' | 'top-left' | 'top' | 'top-right' | 'bottom-left' | 'bottom' | 'bottom-right' | 'right'
+
+export interface SwiperList {
+ [key: string]: any
+ value: string
+}
+
+export interface SwiperIndicatorProps {
+ /**
+ * 当前轮播在哪一项(下标)
+ * @default 0
+ */
+ current?: number
+ /**
+ * 轮播滑动方向,包括横向滑动和纵向滑动两个方向
+ * @default horizontal
+ */
+ direction?: DirectionType
+ /**
+ * 小于这个数字不会显示导航器
+ * @default 2
+ */
+ minShowNum?: number
+ /**
+ * 页码信息展示位置
+ * @default bottom
+ */
+ indicatorPosition?: IndicatorPositionType
+ /**
+ * 是否显示两侧的控制按钮
+ * @default false
+ */
+ showControls?: boolean
+ /**
+ * 总共的项数
+ * @default 0
+ */
+ total?: number
+ /**
+ * 导航器类型,点状(dots)、点条状(dots-bar)、分式(fraction)等
+ * @default dots
+ */
+ type?: SwiperIndicatorType
+}
diff --git a/uni_modules/wot-design-uni/components/wd-swiper/wd-swiper.vue b/uni_modules/wot-design-uni/components/wd-swiper/wd-swiper.vue
new file mode 100644
index 0000000..1235046
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-swiper/wd-swiper.vue
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-switch/index.scss b/uni_modules/wot-design-uni/components/wd-switch/index.scss
new file mode 100644
index 0000000..6facd99
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-switch/index.scss
@@ -0,0 +1,58 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@include b(switch) {
+ display: inline-block;
+ position: relative;
+ width: $-switch-width;
+ height: $-switch-height;
+ border-radius: $-switch-circle-size;
+ background: $-switch-inactive-color;
+ font-size: $-switch-size;
+ transition: all .3s;
+
+ @include e(checkbox) {
+ position: absolute;
+ width: 0;
+ height: 0;
+ opacity: 0;
+ margin: 0;
+ }
+ @include e(circle) {
+ box-sizing: border-box;
+ position: absolute;
+ display: inline-block;
+ width: $-switch-circle-size;
+ height: $-switch-circle-size;
+ top: 2px;
+ left: 2px;
+ background: #fff;
+ border-radius: 50%;
+ transition: left .3s ease-out;
+ box-shadow: 0 2px 4px 0 $-switch-inactive-shadow-color;
+
+ &::after {
+ position: absolute;
+ content: '';
+ width: calc(200% - 2px);
+ height: calc(200% - 2px);
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%) scale(0.5);
+ border: 1px solid $-switch-border-color;
+ border-radius: 50%;
+ }
+ }
+ @include when(checked) {
+ background: $-switch-active-color;
+ border-color: $-switch-active-color;
+
+ .wd-switch__circle {
+ left: calc($-switch-width - $-switch-circle-size - 2px);
+ box-shadow: 0 2px 4px 0 $-switch-active-shadow-color
+ }
+ }
+ @include when(disabled) {
+ opacity: 0.5;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-switch/wd-switch.vue b/uni_modules/wot-design-uni/components/wd-switch/wd-switch.vue
new file mode 100644
index 0000000..52ae160
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-switch/wd-switch.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-tab/index.scss b/uni_modules/wot-design-uni/components/wd-tab/index.scss
new file mode 100644
index 0000000..04ade60
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tab/index.scss
@@ -0,0 +1,9 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+
+@include b(tab) {
+ width: 100%;
+ flex-shrink: 0;
+ box-sizing: border-box;
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-tab/wd-tab.vue b/uni_modules/wot-design-uni/components/wd-tab/wd-tab.vue
new file mode 100644
index 0000000..e28b2a9
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tab/wd-tab.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-tabbar-item/index.scss b/uni_modules/wot-design-uni/components/wd-tabbar-item/index.scss
new file mode 100644
index 0000000..132bf16
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tabbar-item/index.scss
@@ -0,0 +1,51 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(tabbar-item) {
+ @include e(body) {
+ :deep(){
+ @include when(inactive) {
+ color: $-dark-color-gray;
+ }
+ }
+ }
+ }
+}
+
+
+@include b(tabbar-item) {
+ flex: 1;
+ text-align: center;
+ text-decoration: none;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ @include e(body) {
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ line-height: 1;
+ padding: 0;
+ position: relative;
+
+ :deep(){
+ @include when(active) {
+ color: $-tabbar-active-color;
+ }
+
+ @include when(inactive) {
+ color: $-tabbar-inactive-color;
+ }
+ }
+ }
+
+
+ @include e(body-title) {
+ font-size: $-tabbar-item-title-font-size;
+ line-height: $-tabbar-item-title-line-height;
+ }
+
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-tabbar-item/types.ts b/uni_modules/wot-design-uni/components/wd-tabbar-item/types.ts
new file mode 100644
index 0000000..ad1114b
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tabbar-item/types.ts
@@ -0,0 +1,7 @@
+/**
+ * 折叠面板子项
+ */
+export interface TabbarItem {
+ // 唯一标识
+ name: string
+}
diff --git a/uni_modules/wot-design-uni/components/wd-tabbar-item/wd-tabbar-item.vue b/uni_modules/wot-design-uni/components/wd-tabbar-item/wd-tabbar-item.vue
new file mode 100644
index 0000000..3ea3596
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tabbar-item/wd-tabbar-item.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-tabbar/index.scss b/uni_modules/wot-design-uni/components/wd-tabbar/index.scss
new file mode 100644
index 0000000..878cf20
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tabbar/index.scss
@@ -0,0 +1,44 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(tabbar) {
+ background: $-dark-background;
+ }
+}
+
+
+@include b(tabbar) {
+ display: flex;
+ align-items: center;
+ flex-wrap: nowrap;
+ position: relative;
+ background: $-color-white;
+ height: $-tabbar-height;
+
+ @include m(round) {
+ margin-left: 32rpx;
+ margin-right: 32rpx;
+ border-radius: 999px;
+ box-shadow: $-tabbar-box-shadow;
+ }
+
+ @include m(default) {
+ @include when(border) {
+ @include halfPixelBorder('top');
+ }
+ }
+
+ @include when(fixed) {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ z-index: 500;
+
+ @include when(safe) {
+ padding-bottom: constant(safe-area-inset-bottom);
+ padding-bottom: env(safe-area-inset-bottom);
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-tabbar/wd-tabbar.vue b/uni_modules/wot-design-uni/components/wd-tabbar/wd-tabbar.vue
new file mode 100644
index 0000000..53124a3
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tabbar/wd-tabbar.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-table-col/index.scss b/uni_modules/wot-design-uni/components/wd-table-col/index.scss
new file mode 100644
index 0000000..d1d1f35
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-table-col/index.scss
@@ -0,0 +1,46 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@import '../wd-table/index';
+
+.wot-theme-dark {
+ @include b(table-col) {
+ @include when(shadow) {
+ &::after {
+ background: linear-gradient(270deg, rgba(17, 17, 17, 0.2) 0%, rgba(0, 0, 0, 0) 100%);
+ }
+ }
+ }
+}
+
+
+@include b(table-col) {
+ .wd-table__cell {
+ width: 100%;
+ }
+
+ @include m(fixed) {
+ position: sticky;
+ z-index: 1;
+ left: 0;
+ }
+
+ @include when(shadow) {
+ &::after {
+ content: ' ';
+ position: absolute;
+ height: 100%;
+ right: -30rpx;
+ top: 0;
+ width: 30rpx;
+ height: 100%;
+ background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.04) 100%);
+ }
+ }
+
+ .wd-table__cell:last-child {
+ @include when(border) {
+ border-bottom: none;
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-table-col/types.ts b/uni_modules/wot-design-uni/components/wd-table-col/types.ts
new file mode 100644
index 0000000..6538657
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-table-col/types.ts
@@ -0,0 +1,20 @@
+type AlignType = 'left' | 'center' | 'right' // 列的对齐方式
+
+export type SortDirection = 0 | 1 | -1 // 列的排序方向
+
+export interface TableColumn {
+ // 列对应字段
+ prop: string
+ // 列对应字段标题
+ label: string
+ // 列宽度
+ width: string
+ // 是否开启列排序
+ sortable?: boolean
+ // 列的对齐方式,可选值left,center,right
+ align?: AlignType
+ // 列的排序方向
+ sortDirection: SortDirection
+ // 是否i固定列
+ fixed?: boolean
+}
diff --git a/uni_modules/wot-design-uni/components/wd-table-col/wd-table-col.vue b/uni_modules/wot-design-uni/components/wd-table-col/wd-table-col.vue
new file mode 100644
index 0000000..8244714
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-table-col/wd-table-col.vue
@@ -0,0 +1,185 @@
+
+
+
+
+ {{ row }}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-table/index.scss b/uni_modules/wot-design-uni/components/wd-table/index.scss
new file mode 100644
index 0000000..ff7d957
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-table/index.scss
@@ -0,0 +1,137 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+.wot-theme-dark {
+ @include b(table) {
+ background: $-dark-background;
+
+ @include when(border) {
+ border: 1px solid $-dark-border-color;
+ }
+
+ @include e(cell) {
+ color: $-dark-color;
+ background: $-dark-background2;
+
+ @include when(stripe) {
+ background: $-dark-background4;
+ }
+
+ @include when(border) {
+ border-right: 1px solid $-dark-border-color;
+ border-bottom: 1px solid $-dark-border-color;
+ }
+
+ @include when(shadow) {
+ &::after {
+ background: linear-gradient(270deg, rgba(17, 17, 17, 0.2) 0%, rgba(0, 0, 0, 0) 100%);
+ }
+ }
+ }
+ }
+}
+
+
+
+@include b(table) {
+ position: relative;
+ width: 100%;
+ overflow: auto;
+ background: $-table-bg;
+
+ @include when(border) {
+ border: 1px solid $-table-border-color;
+ }
+
+
+ :deep() {
+ .wd-table-col:last-child {
+ .wd-table__cell {
+ @include when(border) {
+ border-right: none;
+ }
+ }
+ }
+ }
+
+ @include e(header) {
+ width: 100%;
+ height: 50px;
+ position: sticky;
+ top: 0;
+ z-index: 2;
+ display: flex;
+ overflow-x: auto;
+ white-space: nowrap;
+ }
+
+ @include e(body) {
+ width: 100%;
+ box-sizing: border-box;
+ }
+
+ @include e(content) {
+ display: flex;
+ }
+
+ @include e(cell) {
+ display: flex;
+ align-items: center;
+ box-sizing: border-box;
+ background: $-table-bg;
+ width: 100px;
+ min-height: 50px;
+ padding: 8px 10px;
+ font-size: $-table-font-size;
+ color: $-table-color;
+ --wot-sort-button-height: 30px;
+
+ @include when(border) {
+ border-right: 1px solid $-table-border-color;
+ border-bottom: 1px solid $-table-border-color;
+ }
+
+ @include when(stripe) {
+ background: $-table-stripe-bg;
+ }
+
+ @include when(fixed) {
+ position: sticky;
+ z-index: 1;
+ left: 0;
+ }
+
+ @include when(shadow) {
+ &::after {
+ content: ' ';
+ position: absolute;
+ height: 100%;
+ right: -30rpx;
+ top: 0;
+ width: 30rpx;
+ height: 100%;
+ background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.04) 100%);
+ }
+ }
+
+ @include when(left) {
+ justify-content: flex-start;
+ }
+
+ @include when(center) {
+ justify-content: center;
+ }
+
+ @include when(right) {
+ justify-content: flex-end;
+ }
+ }
+
+
+ @include e(value) {
+ @include when(ellipsis) {
+ word-break: break-all;
+ @include multiEllipsis(2);
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-table/wd-table.vue b/uni_modules/wot-design-uni/components/wd-table/wd-table.vue
new file mode 100644
index 0000000..18df332
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-table/wd-table.vue
@@ -0,0 +1,384 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-tabs/index.scss b/uni_modules/wot-design-uni/components/wd-tabs/index.scss
new file mode 100644
index 0000000..0498cd3
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tabs/index.scss
@@ -0,0 +1,279 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+
+.wot-theme-dark {
+ @include b(tabs) {
+ background: $-dark-background2;
+
+ @include e(nav) {
+ background: $-dark-background2;
+ }
+
+ @include e(nav-item) {
+ color: $-dark-color3;
+
+ @include when(active) {
+ font-weight: 600;
+ color: $-dark-color;
+ }
+
+ @include when(disabled) {
+ color: $-dark-color-gray;
+ }
+
+ }
+
+ @include e(map-nav-btn) {
+ background-color: $-dark-background4;
+ color: $-dark-color3;
+
+ @include when(active) {
+ color: $-dark-color;
+ border: 1px solid $-tabs-nav-active-color;
+ background-color: $-dark-background;
+ }
+
+ @include when(disabled) {
+ color: $-dark-color-gray;
+ border-color: #f4f4f4;
+ }
+ }
+
+ @include e(map-btn) {
+ background: $-dark-background2;
+ color: $-dark-color3;
+ }
+
+ @include e(map-header) {
+ background: $-dark-background2;
+ color: $-dark-color;
+
+ &::after {
+ background: $-dark-background4;
+ }
+ }
+
+ @include e(map-body) {
+ background: $-dark-background2;
+ }
+
+ }
+}
+
+@include b(tabs) {
+ position: relative;
+ background: #fff;
+ width: 100%;
+
+ @include e(nav) {
+ left: 0;
+ right: 0;
+ height: $-tabs-nav-height;
+ background-color: #fff;
+ width: 100%;
+ position: relative;
+
+ @include m(wrap) {
+ height: 100%;
+ overflow: hidden;
+ }
+
+ @include m(sticky) {
+ width: 100vw;
+ }
+ }
+
+ @include e(nav-container) {
+ position: relative;
+ display: flex;
+ user-select: none;
+ }
+
+ @include e(nav-item) {
+ flex: 1;
+ min-width: 0;
+ text-align: center;
+ height: $-tabs-nav-height;
+ line-height: $-tabs-nav-height;
+ font-size: $-tabs-nav-fs;
+ color: $-tabs-nav-color;
+ transition: color .3s;
+
+ @include when(active) {
+ font-weight: 600;
+ }
+
+ @include when(disabled) {
+ color: $-tabs-nav-disabled-color;
+ }
+ }
+
+ @include e(line) {
+ position: absolute;
+ bottom: 4px;
+ left: 0;
+ height: $-tabs-nav-line-height;
+ background: $-tabs-nav-line-bg-color;
+ z-index: 1;
+ border-radius: 1.5px;
+ }
+
+ @include e(container) {
+ overflow: hidden;
+ }
+
+ @include e(body) {
+ position: relative;
+ width: 100%;
+ height: 100%;
+
+ @include when(animated) {
+ display: flex;
+ transition-property: left;
+ }
+ }
+
+ @include e(map) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 1;
+ }
+
+ @include e(map-btn) {
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: $-tabs-nav-height;
+ height: $-tabs-nav-height;
+ line-height: $-tabs-nav-height;
+ text-align: center;
+ color: $-tabs-nav-map-arrow-color;
+ z-index: 1;
+ background: $-tabs-nav-bg;
+ -webkit-tap-highlight-color: transparent;
+
+ &::before {
+ position: absolute;
+ content: '';
+ top: 0;
+ left: -24px;
+ width: 24px;
+ height: $-tabs-nav-height - 1;
+ background: $-tabs-nav-map-btn-before-bg;
+ }
+ }
+
+ @include e(map-arrow) {
+ display: block;
+ transition: transform .3s;
+
+ @include when(open) {
+ transform: rotate(180deg);
+ }
+ }
+
+ @include e(map-header) {
+ position: relative;
+ padding-left: 17px;
+ height: $-tabs-nav-height;
+ line-height: $-tabs-nav-height;
+ font-size: $-tabs-nav-map-fs;
+ color: $-tabs-nav-map-color;
+ transition: opacity .3s;
+ background: #fff;
+ opacity: 0;
+
+ @include halfPixelBorder;
+
+ &::after {
+ z-index: 3;
+ }
+ }
+
+ @include e(map-body) {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 20px 15px 10px;
+ background: #fff;
+ transition: transform .3s;
+ transform: scaleY(0);
+ transform-origin: center top;
+
+ @include when(open) {
+ transform: scaleY(1);
+ }
+ }
+
+ @include e(map-nav-item) {
+ flex-basis: 33%;
+
+ &:nth-child(3n + 2) {
+ text-align: center;
+ }
+
+ &:nth-child(3n + 3) {
+ text-align: right;
+ }
+ }
+
+ @include e(map-nav-btn) {
+ @include buttonClear;
+ @include lineEllipsis;
+ display: inline-block;
+ width: 107px;
+ height: 32px;
+ line-height: 32px;
+ background-color: $-tabs-nav-map-button-back-color;
+ border-color: transparent;
+ margin-bottom: 10px;
+ border-radius: $-tabs-nav-map-button-radius;
+ color: $-tabs-nav-map-color;
+ font-size: $-tabs-nav-map-fs;
+ text-align: center;
+ transition: color .3s, border-color .3s;
+
+ @include when(active) {
+ color: $-tabs-nav-active-color;
+ border: 1px solid $-tabs-nav-active-color;
+ background-color: $-tabs-nav-bg
+ }
+
+ @include when(disabled) {
+ color: $-tabs-nav-disabled-color;
+ border-color: #f4f4f4;
+ }
+ }
+
+ @include e(mask) {
+ position: absolute;
+ top: $-tabs-nav-height;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: $-tabs-nav-map-modal-bg;
+ opacity: 0;
+ transition: opacity .3s;
+ }
+
+ @include when(slide) {
+ .wd-tabs__nav-item {
+ flex: 0 0 auto;
+ padding: 0 17px;
+ }
+ }
+
+ @include when(map) {
+ .wd-tabs__nav--wrap {
+ padding-right: 40px;
+ }
+ }
+}
+
+@media screen and (max-width: 330px) {
+ .wd-tabs__map-nav-btn {
+ width: 90px;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue b/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue
new file mode 100644
index 0000000..f1fd302
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue
@@ -0,0 +1,493 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-tag/index.scss b/uni_modules/wot-design-uni/components/wd-tag/index.scss
new file mode 100644
index 0000000..f2b092f
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tag/index.scss
@@ -0,0 +1,114 @@
+@import '../common/abstracts/variable';
+@import '../common/abstracts/mixin';
+
+@mixin tag-type-style ($normalColor, $normalBg) {
+ background: $normalBg;
+
+ @include when(plain) {
+ background: transparent;
+ color: $normalColor;
+ border: 1px solid $normalColor;
+ padding: 0 4px;
+ }
+ @include when(round) {
+ line-height: 1.2;
+ font-size: $-tag-fs;
+ padding: 4px 11px;
+ background: transparent;
+ color: if($normalColor != $-tag-info-color, $normalColor, $-tag-round-color);
+ border: 1px solid if($normalColor != $-tag-info-color, $normalColor, $-tag-round-border-color);
+ border-radius: $-tag-round-radius;
+ }
+ @include when(mark) {
+ padding: 1px 6px;
+ border-radius: $-tag-mark-radius;
+
+ @include when(plain) {
+ padding: 0 6px;
+ }
+ }
+ @include when(active) {
+ color: $-tag-primary-color;
+ border-color: $-tag-primary-color;
+ }
+}
+@include b(tag) {
+ font-size: $-tag-small-fs;
+ display: inline-block;
+ color: $-tag-color;
+ padding: 0 3px;
+ border-radius: 2px;
+ transition: opacity .3s;
+ vertical-align: middle;
+
+ @include when(default) {
+ @include tag-type-style($-tag-info-color, $-tag-info-bg);
+ }
+ @include when(primary) {
+ @include tag-type-style($-tag-primary-color, $-tag-primary-bg);
+ }
+ @include when(danger) {
+ @include tag-type-style($-tag-danger-color, $-tag-danger-bg);
+ }
+ @include when(warning) {
+ @include tag-type-style($-tag-warning-color, $-tag-warning-bg);
+ }
+ @include when(success) {
+ @include tag-type-style($-tag-success-color, $-tag-success-bg);
+ }
+ @include when(icon) {
+ font-size: $-tag-fs;
+ line-height: 1.2;
+ padding: 2px 5px;
+ }
+ @include when(dynamic) {
+ box-sizing: border-box;
+ width: 88px;
+ transition: .3s;
+
+ &:active {
+ color: $-tag-primary-color;
+ border-color: $-tag-primary-color;
+ }
+ }
+ @include when(dynamic-input) {
+ border-color: $-tag-primary-color;
+ }
+ @include edeep(icon) {
+ display: inline-block;
+ margin-right: 4px;
+ font-size: $-tag-fs;
+ line-height: 1.2;
+ vertical-align: baseline;
+ }
+ @include e(text) {
+ display: inline-block;
+ vertical-align: text-top;
+ }
+ @include e(add-text) {
+ width: 60px;
+ height: 14px;
+ min-height: 14px;
+ display: inline-block;
+ font-size: $-tag-fs;
+ vertical-align: middle;
+ padding: 0;
+ }
+ @include edeep(close) {
+ display: inline-block;
+ margin-left: 24px;
+ margin-right: -4px;
+ font-size: $-tag-close-size;
+ height: 14px;
+ line-height: 1.1;
+ vertical-align: text-bottom;
+ color: $-tag-close-color;
+
+ &:active {
+ color: $-tag-close-active-color;
+ }
+ }
+ @include edeep(add) {
+ vertical-align: bottom;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-tag/wd-tag.vue b/uni_modules/wot-design-uni/components/wd-tag/wd-tag.vue
new file mode 100644
index 0000000..688a3f1
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tag/wd-tag.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新增标签
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-textarea/index.scss b/uni_modules/wot-design-uni/components/wd-textarea/index.scss
new file mode 100644
index 0000000..8ca116e
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-textarea/index.scss
@@ -0,0 +1,350 @@
+@import "../common/abstracts/variable";
+@import "../common/abstracts/mixin";
+
+.wot-theme-dark {
+ @include b(textarea) {
+ background: $-dark-background2;
+
+ &::after {
+ background: $-dark-color-gray;
+ }
+
+ @include when(not-empty) {
+ &:not(.is-disabled) {
+ &::after {
+ background-color: $-dark-color;
+ }
+ }
+ }
+
+ @include e(value) {
+ background: $-dark-background2;
+ }
+
+ @include e(inner) {
+ color: $-dark-color;
+
+ &::-webkit-input-placeholder {
+ color: $-dark-color3;
+ }
+ }
+
+ @include e(placeholder) {
+ color: $-dark-color3;
+ }
+
+ @include e(count) {
+ color: $-dark-color3;
+ background: transparent;
+ }
+
+ @include e(count-current) {
+ color: $-dark-color;
+ }
+
+ :deep(.wd-textarea__icon) {
+ color: $-dark-color;
+ background: transparent;
+ }
+
+ @include when(cell) {
+ background-color: $-dark-background2;
+
+ @include when(border) {
+ @include halfPixelBorder("top", $-textarea-cell-padding, $-dark-border-color);
+ }
+ }
+
+ @include when(disabled) {
+
+ .wd-textarea__inner {
+ color: $-dark-color-gray;
+ background: transparent;
+ }
+ }
+
+
+ @include e(label) {
+ color: $-dark-color;
+ }
+ }
+}
+
+@include b(textarea) {
+ position: relative;
+ -webkit-tap-highlight-color: transparent;
+ text-align: left;
+ background: $-textarea-bg;
+ padding: $-textarea-cell-padding $-textarea-padding;
+
+ &::after {
+ position: absolute;
+ display: none;
+ content: "";
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 1px;
+ background: $-textarea-border-color;
+ transform: scaleY(0.5);
+ transition: background-color 0.2s ease-in-out;
+ }
+
+
+
+ @include e(label) {
+ position: relative;
+ width: $-input-cell-label-width;
+ color: $-cell-title-color;
+ margin-right: $-cell-padding;
+ box-sizing: border-box;
+ font-size: $-textarea-fs;
+ flex-shrink: 0;
+
+ @include when(required) {
+ padding-left: 12px;
+
+ &::after {
+ position: absolute;
+ left: 0;
+ top: 2px;
+ content: "*";
+ font-size: $-cell-required-size;
+ line-height: 1.1;
+ color: $-cell-required-color;
+ }
+ }
+ }
+
+ @include e(label-inner) {
+ display: inline-block;
+ line-height: $-cell-line-height;
+ font-size: $-textarea-fs;
+ }
+
+ @include e(prefix) {
+ margin-right: $-textarea-icon-margin;
+ font-size: $-textarea-fs;
+
+ :deep(.wd-textarea__icon) {
+ margin-left: 0;
+ }
+ }
+
+ @include e(suffix) {
+ flex-shrink: 0;
+ margin-left: $-textarea-icon-margin;
+ line-height: initial;
+ }
+
+ @include e(value) {
+ position: relative;
+ padding: 0;
+ font-size: 0;
+ background: $-textarea-bg;
+
+ @include when(show-limit) {
+ padding-bottom: 36px;
+ }
+ }
+
+
+ @include e(inner) {
+ padding: 0;
+ width: 100%;
+ font-size: $-textarea-fs;
+ line-height: $-cell-line-height;
+ color: $-textarea-color;
+ outline: none;
+ box-sizing: border-box;
+ border: none;
+ word-break: break-word;
+
+ &::-webkit-input-placeholder {
+ color: $-input-placeholder-color;
+ }
+
+ @include when(suffix) {
+ padding-right: calc($-textarea-icon-size + 8px);
+ }
+ }
+
+ @include e(suffix) {
+ position: absolute;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ }
+
+ @include edeep(icon) {
+ margin-left: $-textarea-icon-margin;
+ font-size: $-textarea-icon-size;
+ color: $-textarea-icon-color;
+ background: $-textarea-bg;
+ vertical-align: middle;
+ line-height: $-cell-line-height;
+ }
+
+ @include edeep(clear) {
+ margin-left: $-textarea-icon-margin;
+ font-size: $-textarea-icon-size;
+ color: $-textarea-clear-color;
+ vertical-align: middle;
+ background: $-textarea-bg;
+ line-height: $-cell-line-height;
+ }
+
+
+ @include e(count) {
+ position: absolute;
+ bottom: 8px;
+ right: 0;
+ font-size: $-textarea-count-fs;
+ color: $-textarea-count-color;
+ background: $-textarea-bg;
+ line-height: 20px;
+ display: inline-flex;
+ }
+
+ @include e(count-current) {
+ color: $-textarea-count-current-color;
+
+ @include when(error) {
+ color: $-input-error-color;
+ }
+ }
+
+ @include e(placeholder) {
+ color: $-input-placeholder-color;
+
+ &.is-error {
+ color: $-input-error-color;
+ }
+ }
+
+
+ @include e(readonly-mask) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 2;
+ width: 100%;
+ height: 100%;
+ }
+
+ @include e(error-message){
+ color: $-form-item-error-message-color;
+ font-size: $-form-item-error-message-font-size;
+ line-height: $-form-item-error-message-line-height;
+ text-align: left;
+ vertical-align: middle;
+ }
+
+ @include when(not-empty) {
+ &:not(.is-disabled) {
+ &::after {
+ background-color: $-textarea-not-empty-border-color;
+ }
+ }
+ }
+
+ @include when(disabled) {
+
+ .wd-textarea__inner {
+ color: $-input-disabled-color;
+ background: transparent;
+ }
+ }
+
+ @include when(error) {
+
+ .wd-textarea__inner {
+ color: $-input-error-color;
+ background: transparent;
+ }
+ }
+
+ @include when(no-border) {
+ &::after {
+ display: none;
+ }
+ }
+
+ @include when(auto-height) {
+ &:not(.is-cell) {
+ padding: 5px 0;
+ }
+
+ &::after {
+ display: block;
+ }
+ }
+
+ @include when(cell) {
+ display: flex;
+
+ &.is-error::after {
+ background: $-textarea-cell-border-color;
+ }
+
+ .wd-textarea__value {
+ flex: 1;
+ }
+
+ :deep(.wd-textarea__icon) {
+ height: $-textarea-cell-height;
+ line-height: $-textarea-cell-height;
+ }
+
+ .wd-textarea__prefix {
+ display: inline-block;
+ margin-right: $-cell-icon-right;
+ }
+
+ &.wd-textarea::after {
+ display: none;
+ }
+
+
+ .wd-textarea__inner {
+ padding-right: 24px;
+ }
+
+ .wd-textarea__suffix {
+ right: 0;
+ }
+
+ @include when(center) {
+ align-items: center;
+ }
+
+ @include when(border) {
+ @include halfPixelBorder("top", $-textarea-cell-padding);
+ }
+ }
+
+ @include when(large) {
+ padding: $-textarea-cell-padding-large;
+
+ .wd-textarea__prefix {
+ font-size: $-textarea-fs-large;
+ }
+
+ .wd-textarea__label-inner {
+ font-size: $-textarea-fs-large;
+ }
+
+ .wd-textarea__inner {
+ font-size: $-textarea-fs-large;
+ }
+
+ .wd-textarea__count {
+ font-size: $-textarea-count-fs-large;
+ }
+
+ :deep(.wd-textarea__icon),
+ :deep(.wd-textarea__clear) {
+ font-size: $-textarea-icon-size-large;
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-textarea/wd-textarea.vue b/uni_modules/wot-design-uni/components/wd-textarea/wd-textarea.vue
new file mode 100644
index 0000000..ca326a7
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-textarea/wd-textarea.vue
@@ -0,0 +1,339 @@
+
+
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+ {{ errorMessage }}
+
+
+
+
+
+
+ {{ String(inputValue).length }}
+
+ /{{ maxlength }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-toast/index.scss b/uni_modules/wot-design-uni/components/wd-toast/index.scss
new file mode 100644
index 0000000..681319f
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-toast/index.scss
@@ -0,0 +1,62 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+@include b(toast) {
+ display: inline-block;
+ max-width: $-toast-max-width;
+ padding: $-toast-padding;
+ background-color: $-toast-bg;
+ border-radius: $-toast-radius;
+ color: #fff;
+ transition: all 0.2s;
+ font-size: $-toast-fs;
+ box-sizing: border-box;
+ box-shadow: $-toast-box-shadow;
+
+ @include e(msg) {
+ font-size: $-toast-fs;
+ line-height: 20px;
+ text-align: left;
+ font-family: "San Francisco", Rotobo, arial, "PingFang SC", "Noto SansCJK", "Microsoft Yahei", sans-serif;
+ }
+ @include e(icon) {
+ display: inline-block;
+ margin-right: 16px;
+ }
+ @include e(iconWrap){
+ font-size: 0;
+ line-height: 0;
+ vertical-align: middle;
+ }
+ @include e(iconBox){
+ display: block;
+ width: 100%;
+ height: 100%;
+ }
+ @include e(iconSvg){
+ background-size: cover;
+ background-repeat: no-repeat;
+ }
+ @include e(loading) {
+ margin-bottom: 16px;
+ display: inline-block;
+ }
+ @include m(top) {
+ transform: translate3d(0, -40vh, 0);
+ }
+ @include m(middle){
+ transform: translate3d(0%,-18.8vh,0);
+ }
+ @include m(bottom) {
+ transform: translate3d(0, 40vh, 0);
+ }
+ @include m(with-icon) {
+ min-width: $-toast-with-icon-min-width;
+ display: inline-flex;
+ align-items: center;
+ }
+ @include m(loading) {
+ min-width: auto;
+ padding: $-toast-loading-padding;
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-toast/index.ts b/uni_modules/wot-design-uni/components/wd-toast/index.ts
new file mode 100644
index 0000000..cac2dda
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-toast/index.ts
@@ -0,0 +1,94 @@
+import { provide, ref } from 'vue'
+import type { Toast, ToastOptions } from './type'
+import { deepMerge } from '../common/util'
+
+/**
+ * useToast 用到的key
+ *
+ * @internal
+ */
+export const toastDefaultOptionKey = '__TOAST_OPTION__'
+
+// 默认模板
+export const defaultOptions: ToastOptions = {
+ msg: '',
+ duration: 2000,
+ loadingType: 'outline',
+ loadingColor: '#4D80F0',
+ iconColor: '#4D80F0',
+ iconSize: 42,
+ loadingSize: 42,
+ customIcon: false,
+ position: 'middle',
+ show: false,
+ zIndex: 100
+}
+
+export function useToast(selector: string = ''): Toast {
+ let timer: NodeJS.Timeout | null = null
+ const toastOption = ref(defaultOptions) // Toast选项
+ const toastOptionKey = selector ? toastDefaultOptionKey + selector : toastDefaultOptionKey
+ provide(toastOptionKey, toastOption)
+
+ const createMethod = (toastOptions: ToastOptions) => {
+ // 优先级:options->toastOptions->defaultOptions
+ return (options: ToastOptions | string) => {
+ return show(deepMerge(toastOptions, typeof options === 'string' ? { msg: options } : options) as ToastOptions)
+ }
+ }
+
+ const show = (option: ToastOptions | string) => {
+ const options = deepMerge(defaultOptions, typeof option === 'string' ? { msg: option } : option) as ToastOptions
+ toastOption.value = deepMerge(options, {
+ show: true
+ }) as ToastOptions
+ // 开始渲染,并在 duration ms之后执行清除
+ if (toastOption.value.duration && toastOption.value.duration > 0) {
+ timer && clearTimeout(timer)
+ timer = setTimeout(() => {
+ timer && clearTimeout(timer)
+ close()
+ }, options.duration)
+ }
+ }
+
+ const loading = createMethod({
+ iconName: 'loading',
+ duration: 0
+ })
+ const success = createMethod({
+ iconName: 'success',
+ duration: 1500
+ })
+ const error = createMethod({ iconName: 'error' })
+ const warning = createMethod({ iconName: 'warning' })
+ const info = createMethod({ iconName: 'info' })
+
+ const close = () => {
+ toastOption.value = { show: false }
+ }
+ return {
+ show,
+ loading,
+ success,
+ error,
+ warning,
+ info,
+ close
+ }
+}
+
+export const toastIcon = {
+ success() {
+ return ''
+ },
+ warning() {
+ return ''
+ },
+ info() {
+ return ''
+ },
+ error() {
+ return ''
+ }
+}
diff --git a/uni_modules/wot-design-uni/components/wd-toast/type.ts b/uni_modules/wot-design-uni/components/wd-toast/type.ts
new file mode 100644
index 0000000..f61154e
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-toast/type.ts
@@ -0,0 +1,48 @@
+/*
+ * @Author: weisheng
+ * @Date: 2023-06-19 12:47:57
+ * @LastEditTime: 2023-09-07 00:34:18
+ * @LastEditors: weisheng
+ * @Description:
+ * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-toast\type.ts
+ * 记得注释
+ */
+import type { LoadingType } from '../wd-loading/type'
+
+export type ToastIconType = 'success' | 'error' | 'warning' | 'loading' | 'info' // 图标类型
+
+export type ToastPositionType = 'top' | 'middle' | 'bottom' // 提示信息框的位置类型
+
+export type ToastLoadingType = LoadingType // 提示信息加载状态类型
+
+export type ToastOptions = {
+ msg?: string
+ duration?: number
+ iconName?: ToastIconType
+ iconSize?: number
+ loadingType?: ToastLoadingType
+ loadingColor?: string
+ iconColor?: string
+ loadingSize?: number
+ customIcon?: boolean
+ position?: ToastPositionType
+ show?: boolean
+ zIndex?: number
+}
+
+export interface Toast {
+ // 打开Toast
+ show(toastOptions: ToastOptions | string): void
+ // 成功提示
+ success(toastOptions: ToastOptions | string): void
+ // 关闭提示
+ error(toastOptions: ToastOptions | string): void
+ // 常规提示
+ info(toastOptions: ToastOptions | string): void
+ // 警告提示
+ warning(toastOptions: ToastOptions | string): void
+ // 加载提示
+ loading(toastOptions: ToastOptions | string): void
+ // 关闭Toast
+ close(): void
+}
diff --git a/uni_modules/wot-design-uni/components/wd-toast/wd-toast.vue b/uni_modules/wot-design-uni/components/wd-toast/wd-toast.vue
new file mode 100644
index 0000000..aa71755
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-toast/wd-toast.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ msg }}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-tooltip/index.scss b/uni_modules/wot-design-uni/components/wd-tooltip/index.scss
new file mode 100644
index 0000000..c16949f
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tooltip/index.scss
@@ -0,0 +1,66 @@
+@import "./../common/abstracts/_mixin.scss";
+@import "./../common/abstracts/variable.scss";
+
+.wot-theme-dark {
+
+ @include b(tooltip) {
+
+ @include e(pos) {
+ background: $-dark-background4;
+ color: $-tooltip-color;
+ }
+
+ @include triangleArrow($-tooltip-arrow-size, $-dark-background4);
+
+ }
+
+}
+
+@include b(tooltip) {
+ position: relative;
+ display: inline-block;
+
+ @include edeep(pos) {
+ position: absolute;
+ min-width: 138px;
+ min-height: 36px;
+ font-size: $-tooltip-fs;
+ backdrop-filter: blur($-tooltip-blur);
+ background-clip: padding-box;
+ border-radius: $-tooltip-radius;
+ background: $-tooltip-bg;
+ color: $-tooltip-color;
+ text-align: center;
+ box-sizing: border-box;
+ z-index: $-tooltip-z-index;
+ }
+
+
+ @include e(hidden) {
+ left: -100vw;
+ bottom: -100vh;
+ visibility: hidden;
+ }
+
+ @include e(container) {
+ line-height: $-tooltip-line-height;
+ font-size: $-tooltip-fs;
+ }
+
+ @include e(inner) {
+ padding: $-tooltip-padding;
+ white-space: nowrap;
+ line-height: $-tooltip-line-height;
+ }
+
+ @include edeep(close-icon) {
+ font-size: 12px;
+ position: absolute;
+ right: -8px;
+ top: -10px;
+ transform: scale(0.5);
+ padding: 10px;
+ }
+
+ @include triangleArrow($-tooltip-arrow-size, $-tooltip-bg);
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-tooltip/wd-tooltip.vue b/uni_modules/wot-design-uni/components/wd-tooltip/wd-tooltip.vue
new file mode 100644
index 0000000..fdaca6e
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-tooltip/wd-tooltip.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+ {{ content }}
+
+
+
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-transition/index.scss b/uni_modules/wot-design-uni/components/wd-transition/index.scss
new file mode 100644
index 0000000..c098c97
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-transition/index.scss
@@ -0,0 +1,91 @@
+.wd-transition {
+ transition-timing-function: ease;
+}
+
+.wd-fade-enter-active,
+.wd-fade-leave-active {
+ transition-property: opacity;
+}
+
+.wd-fade-enter,
+.wd-fade-leave-to {
+ opacity: 0;
+}
+
+.wd-fade-up-enter-active,
+.wd-fade-up-leave-active,
+.wd-fade-down-enter-active,
+.wd-fade-down-leave-active,
+.wd-fade-left-enter-active,
+.wd-fade-left-leave-active,
+.wd-fade-right-enter-active,
+.wd-fade-right-enter-active {
+ transition-property: opacity, transform;
+}
+
+.wd-fade-up-enter,
+.wd-fade-up-leave-to {
+ transform: translate3d(0, 100%, 0);
+ opacity: 0;
+}
+
+.wd-fade-down-enter,
+.wd-fade-down-leave-to {
+ transform: translate3d(0, -100%, 0);
+ opacity: 0;
+}
+
+.wd-fade-left-enter,
+.wd-fade-left-leave-to {
+ transform: translate3d(-100%, 0, 0);
+ opacity: 0;
+}
+
+.wd-fade-right-enter,
+.wd-fade-right-leave-to {
+ transform: translate3d(100%, 0, 0);
+ opacity: 0;
+}
+
+.wd-slide-up-enter-active,
+.wd-slide-up-leave-active,
+.wd-slide-down-enter-active,
+.wd-slide-down-leave-active,
+.wd-slide-left-enter-active,
+.wd-slide-left-leave-active,
+.wd-slide-right-enter-active,
+.wd-slide-right-enter-active {
+ transition-property: transform;
+}
+
+.wd-slide-up-enter,
+.wd-slide-up-leave-to {
+ transform: translate3d(0, 100%, 0);
+}
+
+.wd-slide-down-enter,
+.wd-slide-down-leave-to {
+ transform: translate3d(0, -100%, 0);
+}
+
+.wd-slide-left-enter,
+.wd-slide-left-leave-to {
+ transform: translate3d(-100%, 0, 0);
+}
+
+.wd-slide-right-enter,
+.wd-slide-right-leave-to {
+ transform: translate3d(100%, 0, 0);
+}
+
+.wd-zoom-in-enter-active,
+.wd-zoom-in-leave-active {
+ transition-property: opacity, transform;
+ transform-origin: center center;
+}
+
+.wd-zoom-in-enter,
+.wd-zoom-in-leave-to {
+ opacity: 0;
+ transform: scale(0.7);
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-transition/wd-transition.vue b/uni_modules/wot-design-uni/components/wd-transition/wd-transition.vue
new file mode 100644
index 0000000..9dab131
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-transition/wd-transition.vue
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-upload/index.scss b/uni_modules/wot-design-uni/components/wd-upload/index.scss
new file mode 100644
index 0000000..7e35e0f
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-upload/index.scss
@@ -0,0 +1,134 @@
+@import "../common/abstracts/variable.scss";
+@import "../common/abstracts/_mixin.scss";
+
+.wot-theme-dark {
+ @include b(upload) {
+ @include e(evoke) {
+ background-color: $-dark-background4;
+ color: $-dark-color3;
+
+ @include when(disabled) {
+ color: $-dark-color-gray;
+ }
+ }
+ }
+
+}
+
+@include b(upload) {
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+
+ @include e(evoke) {
+ position: relative;
+ display: inline-flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ width: $-upload-size;
+ height: $-upload-size;
+ font-size: $-upload-evoke-icon-size;
+ background-color: $-upload-evoke-bg;
+ color: $-upload-evoke-color;
+ margin-bottom: 12px;
+
+ @include when(disabled) {
+ color: $-upload-evoke-disabled-color;
+ }
+
+ @include when(slot-default) {
+ width: auto;
+ height: auto;
+ background-color: transparent;
+ }
+ }
+
+ @include e(evoke-num) {
+ font-size: 14px;
+ line-height: 14px;
+ margin-top: 8px;
+ }
+
+ @include edeep(evoke-icon) {
+ width: 32px;
+ height: 32px;
+ }
+
+ @include e(input) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ opacity: 0;
+ }
+
+ @include e(preview) {
+ position: relative;
+ width: $-upload-size;
+ height: $-upload-size;
+ margin: 0 12px 12px 0;
+ }
+
+ @include e(preview-list) {
+ display: flex;
+ }
+
+ @include e(picture) {
+ display: block;
+ width: 100%;
+ height: 100%;
+ }
+
+ @include edeep(close) {
+ position: absolute;
+ right: calc($-upload-close-icon-size / 2 * -1);
+ top: calc($-upload-close-icon-size / 2 * -1);
+ font-size: $-upload-close-icon-size;
+ z-index: 1;
+ color: $-upload-close-icon-color;
+ width: $-upload-close-icon-size;
+ height: $-upload-close-icon-size;
+
+ &::after {
+ position: absolute;
+ content: "";
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ background-color: $-color-white;
+ left: 0;
+ z-index: -1;
+ }
+ }
+
+ @include e(mask) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ background-color: $-upload-preview-name-bg;
+ }
+
+ @include e(progress-txt) {
+ font-size: $-upload-progress-fs;
+ line-height: $-upload-progress-fs;
+ margin-top: 9px;
+ color: $-color-white;
+ }
+
+ @include edeep(icon) {
+ font-size: $-upload-preview-icon-size;
+ color: $-color-white;
+ }
+
+ @include e(status-content) {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-upload/utils.ts b/uni_modules/wot-design-uni/components/wd-upload/utils.ts
new file mode 100644
index 0000000..4b29ad6
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-upload/utils.ts
@@ -0,0 +1,21 @@
+/*
+ * @Author: weisheng
+ * @Date: 2023-08-01 11:12:05
+ * @LastEditTime: 2023-08-15 22:58:47
+ * @LastEditors: weisheng
+ * @Description:
+ * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-upload\utils.ts
+ * 记得注释
+ */
+// 后续会对外暴露选中视频文件
+export function chooseFile({ multiple, sizeType, sourceType, maxCount }) {
+ return new Promise((resolve, reject) => {
+ uni.chooseImage({
+ count: multiple ? Math.min(maxCount, 9) : 1, // 最多可以选择的数量,如果不支持多选则数量为1
+ sizeType,
+ sourceType,
+ success: resolve,
+ fail: reject
+ })
+ })
+}
diff --git a/uni_modules/wot-design-uni/components/wd-upload/wd-upload.vue b/uni_modules/wot-design-uni/components/wd-upload/wd-upload.vue
new file mode 100644
index 0000000..dd92e57
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-upload/wd-upload.vue
@@ -0,0 +1,553 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ file.percent }}%
+
+
+
+
+ {{ file.error || '上传失败' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ({{ uploadFiles.length }}/{{ limit }})
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wd-watermark/index.scss b/uni_modules/wot-design-uni/components/wd-watermark/index.scss
new file mode 100644
index 0000000..8bfa97d
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-watermark/index.scss
@@ -0,0 +1,18 @@
+@import "../common/abstracts/variable.scss";
+@import "../common/abstracts/_mixin.scss";
+
+@include b(watermark) {
+ position: absolute;
+ z-index: 1100;
+ opacity: 0.5;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ pointer-events: none;
+ background-repeat: repeat;
+
+ @include when(fullscreen) {
+ position: fixed;
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/components/wd-watermark/wd-watermark.vue b/uni_modules/wot-design-uni/components/wd-watermark/wd-watermark.vue
new file mode 100644
index 0000000..9836dc6
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wd-watermark/wd-watermark.vue
@@ -0,0 +1,570 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/components/wot-design-uni/wot-design-uni.vue b/uni_modules/wot-design-uni/components/wot-design-uni/wot-design-uni.vue
new file mode 100644
index 0000000..a8da816
--- /dev/null
+++ b/uni_modules/wot-design-uni/components/wot-design-uni/wot-design-uni.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/uni_modules/wot-design-uni/global.d.ts b/uni_modules/wot-design-uni/global.d.ts
new file mode 100644
index 0000000..358b056
--- /dev/null
+++ b/uni_modules/wot-design-uni/global.d.ts
@@ -0,0 +1,102 @@
+/*
+ * @Author: weisheng
+ * @Date: 2023-09-25 17:28:12
+ * @LastEditTime: 2023-12-23 22:42:18
+ * @LastEditors: weisheng
+ * @Description:
+ * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\global.d.ts
+ * 记得注释
+ */
+// For this project development
+import '@vue/runtime-core'
+
+declare module '@vue/runtime-core' {
+ // Helper for Volar
+ export interface GlobalComponents {
+ WdActionSheet: typeof import('./components/wd-action-sheet/wd-action-sheet.vue')['default']
+ WdBadge: typeof import('./components/wd-badge/wd-badge.vue')['default']
+ WdButton: typeof import('./components/wd-button/wd-button.vue')['default']
+ WdCalendar: typeof import('./components/wd-calendar/wd-calendar.vue')['default']
+ WdCalendarView: typeof import('./components/wd-calendar-view/wd-calendar-view.vue')['default']
+ WdCard: typeof import('./components/wd-card/wd-card.vue')['default']
+ WdCell: typeof import('./components/wd-cell/wd-cell.vue')['default']
+ WdCellGroup: typeof import('./components/wd-cell-group/wd-cell-group.vue')['default']
+ WdCheckbox: typeof import('./components/wd-checkbox/wd-checkbox.vue')['default']
+ WdCheckboxGroup: typeof import('./components/wd-checkbox-group/wd-checkbox-group.vue')['default']
+ WdCol: typeof import('./components/wd-col/wd-col.vue')['default']
+ WdColPicker: typeof import('./components/wd-col-picker/wd-col-picker.vue')['default']
+ WdCollapse: typeof import('./components/wd-collapse/wd-collapse.vue')['default']
+ WdCollapseItem: typeof import('./components/wd-collapse-item/wd-collapse-item.vue')['default']
+ WdConfigProvider: typeof import('./components/wd-config-provider/wd-config-provider.vue')['default']
+ WdCurtain: typeof import('./components/wd-curtain/wd-curtain.vue')['default']
+ WdDatetimePicker: typeof import('./components/wd-datetime-picker/wd-datetime-picker.vue')['default']
+ WdDatetimePickerView: typeof import('./components/wd-datetime-picker-view/wd-datetime-picker-view.vue')['default']
+ WdDivider: typeof import('./components/wd-divider/wd-divider.vue')['default']
+ WdDropMenu: typeof import('./components/wd-drop-menu/wd-drop-menu.vue')['default']
+ WdDropMenuItem: typeof import('./components/wd-drop-menu-item/wd-drop-menu-item.vue')['default']
+ WdGrid: typeof import('./components/wd-grid/wd-grid.vue')['default']
+ WdGridItem: typeof import('./components/wd-grid-item/wd-grid-item.vue')['default']
+ WdIcon: typeof import('./components/wd-icon/wd-icon.vue')['default']
+ WdImg: typeof import('./components/wd-img/wd-img.vue')['default']
+ WdImgCropper: typeof import('./components/wd-img-cropper/wd-img-cropper.vue')['default']
+ WdInput: typeof import('./components/wd-input/wd-input.vue')['default']
+ WdInputNumber: typeof import('./components/wd-input-number/wd-input-number.vue')['default']
+ WdLoading: typeof import('./components/wd-loading/wd-loading.vue')['default']
+ WdLoadmore: typeof import('./components/wd-loadmore/wd-loadmore.vue')['default']
+ WdMessageBox: typeof import('./components/wd-message-box/wd-message-box.vue')['default']
+ WdModal: typeof import('./components/wd-overlay/wd-overlay.vue')['default']
+ WdNoticeBar: typeof import('./components/wd-notice-bar/wd-notice-bar.vue')['default']
+ WdPagination: typeof import('./components/wd-pagination/wd-pagination.vue')['default']
+ WdPicker: typeof import('./components/wd-picker/wd-picker.vue')['default']
+ WdPickerView: typeof import('./components/wd-picker-view/wd-picker-view.vue')['default']
+ WdPopover: typeof import('./components/wd-popover/wd-popover.vue')['default']
+ WdPopup: typeof import('./components/wd-popup/wd-popup.vue')['default']
+ WdProgress: typeof import('./components/wd-progress/wd-progress.vue')['default']
+ WdRadio: typeof import('./components/wd-radio/wd-radio.vue')['default']
+ WdRadioGroup: typeof import('./components/wd-radio-group/wd-radio-group.vue')['default']
+ WdRate: typeof import('./components/wd-rate/wd-rate.vue')['default']
+ WdResize: typeof import('./components/wd-resize/wd-resize.vue')['default']
+ WdRow: typeof import('./components/wd-row/wd-row.vue')['default']
+ WdSearch: typeof import('./components/wd-search/wd-search.vue')['default']
+ WdSelectPicker: typeof import('./components/wd-select-picker/wd-select-picker.vue')['default']
+ WdSlider: typeof import('./components/wd-slider/wd-slider.vue')['default']
+ WdSortButton: typeof import('./components/wd-sort-button/wd-sort-button.vue')['default']
+ WdStatusTip: typeof import('./components/wd-status-tip/wd-status-tip.vue')['default']
+ WdStep: typeof import('./components/wd-step/wd-step.vue')['default']
+ WdSteps: typeof import('./components/wd-steps/wd-steps.vue')['default']
+ WdSticky: typeof import('./components/wd-sticky/wd-sticky.vue')['default']
+ WdStickyBox: typeof import('./components/wd-sticky-box/wd-sticky-box.vue')['default']
+ WdSwipeAction: typeof import('./components/wd-swipe-action/wd-swipe-action.vue')['default']
+ WdSwitch: typeof import('./components/wd-switch/wd-switch.vue')['default']
+ WdTab: typeof import('./components/wd-tab/wd-tab.vue')['default']
+ WdTabs: typeof import('./components/wd-tabs/wd-tabs.vue')['default']
+ WdTag: typeof import('./components/wd-tag/wd-tag.vue')['default']
+ WdToast: typeof import('./components/wd-toast/wd-toast.vue')['default']
+ WdTooltip: typeof import('./components/wd-tooltip/wd-tooltip.vue')['default']
+ WdTransition: typeof import('./components/wd-transition/wd-transition.vue')['default']
+ WdUpload: typeof import('./components/wd-upload/wd-upload.vue')['default']
+ WdNotify: typeof import('./components/wd-notify/wd-notify.vue')['default']
+ WdWatermark: typeof import('./components/wd-watermark/wd-watermark.vue')['default']
+ WdCircle: typeof import('./components/wd-circle/wd-circle.vue')['default']
+ WdSwiper: typeof import('./components/wd-swiper/wd-swiper.vue')['default']
+ WdSwiperNav: typeof import('./components/wd-swiper-nav/wd-swiper-nav.vue')['default']
+ WdSegmented: typeof import('./components/wd-segmented/wd-segmented.vue')['default']
+ WdTabbar: typeof import('./components/wd-tabbar/wd-tabbar.vue')['default']
+ WdTabbarItem: typeof import('./components/wd-tabbar-item/wd-tabbar-item.vue')['default']
+ WdNavbar: typeof import('./components/wd-navbar/wd-navbar.vue')['default']
+ WdNavbarCapsule: typeof import('./components/wd-navbar-capsule/wd-navbar-capsule.vue')['default']
+ WdTable: typeof import('./components/wd-table/wd-table.vue')['default']
+ WdTableCol: typeof import('./components/wd-table-col/wd-table-col.vue')['default']
+ WdSidebar: typeof import('./components/wd-sidebar/wd-sidebar.vue')['default']
+ WdSidebarItem: typeof import('./components/wd-sidebar-item/wd-sidebar-item.vue')['default']
+ WdFab: typeof import('./components/wd-fab/wd-fab.vue')['default']
+ WdCountDown: typeof import('./components/wd-count-down/wd-count-down.vue')['default']
+ WdNumberKeyboard: typeof import('./components/wd-number-keyboard/wd-number-keyboard.vue')['default']
+ WdGap: typeof import('./components/wd-gap/wd-gap.vue')['default']
+ WdPasswordInput: typeof import('./components/wd-password-input/wd-password-input.vue')['default']
+ WdForm: typeof import('./components/wd-form/wd-form.vue')['default']
+ WdTextarea: typeof import('./components/wd-textarea/wd-textarea.vue')['default']
+ }
+}
+
+export {}
diff --git a/uni_modules/wot-design-uni/index.ts b/uni_modules/wot-design-uni/index.ts
new file mode 100644
index 0000000..8034bc1
--- /dev/null
+++ b/uni_modules/wot-design-uni/index.ts
@@ -0,0 +1,26 @@
+/*
+ * @Author: weisheng
+ * @Date: 2021-12-21 14:22:03
+ * @LastEditTime: 2023-10-31 22:20:14
+ * @LastEditors: weisheng
+ * @Description:
+ * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\index.ts
+ * 记得注释
+ */
+
+// Toast
+export { useToast } from './components/wd-toast'
+// Messageb
+export { useMessage } from './components/wd-message-box'
+
+// useQueue
+export { useQueue } from './components/composables/useQueue'
+
+// Notify
+export * from './components/wd-notify'
+
+export { dayjs } from './components/common/dayjs'
+
+export * as CommonUtil from './components/common/util'
+
+export * as clickOut from './components/common/clickoutside'
diff --git a/uni_modules/wot-design-uni/package.json b/uni_modules/wot-design-uni/package.json
new file mode 100644
index 0000000..13127ee
--- /dev/null
+++ b/uni_modules/wot-design-uni/package.json
@@ -0,0 +1,90 @@
+{
+ "id": "wot-design-uni",
+ "name": "wot-design-uni",
+ "displayName": "wot-design-uni 基于vue3+Typescript的高颜值组件库",
+ "version": "0.2.3",
+ "description": "一个基于Vue3+TS开发的uni-app组件库,提供60+高质量组件,支持暗黑模式和自定义主题。",
+ "keywords": [
+ "wot-design-uni",
+ "wot-design",
+ "组件库",
+ "vue3",
+ "暗黑模式"
+ ],
+ "main": "index.ts",
+ "repository":"https://github.com/Moonofweisheng/wot-design-uni.git",
+ "engines": {
+ "HBuilderX": "^3.8.7"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/wot-design-uni"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "n",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "u",
+ "IE": "u",
+ "Edge": "u",
+ "Firefox": "u",
+ "Safari": "u"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/wot-design-uni/readme.md b/uni_modules/wot-design-uni/readme.md
new file mode 100644
index 0000000..7147d54
--- /dev/null
+++ b/uni_modules/wot-design-uni/readme.md
@@ -0,0 +1,110 @@
+
+
+
+Wot Design Uni
+
+📱 一个参照Wot-design,基于 Vue3 打造的uni-app组件库
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 🚀 文档网站 (官网)
+ 🔥 文档网站 (Netlify)
+
+
+## ✨ 特性
+
+- 🚀 支持 APP、H5、微信小程序 等平台.
+- 🚀 60+ 个高质量组件,覆盖移动端主流场景.
+- 💪 使用 Typescript 构建,提供良好的组件类型系统.
+- 💪 采用 Vue3 最新特性,提升组件性能.
+- 📖 提供丰富的文档和组件示例.
+- 🎨 支持修改 CSS 变量实现主题定制.
+- 🍭 支持暗黑模式
+
+## 📱 预览
+
+扫描二维码访问演示,注意:因微信审核机制限制,当前的微信小程序示例可能不是最新版本,可以clone代码到本地预览。
+
+
+
+
+
+
+## 快速上手
+
+详细说明见 [快速上手](https://wot-design-uni.cn/guide/quick-use.html)。
+
+## 链接
+
+* [意见反馈](https://github.com/Moonofweisheng/wot-design-uni/issues)
+* [更新日志](https://wot-design-uni.cn/guide/changelog.html)
+* [常见问题](https://wot-design-uni.cn/guide/common-problems.html)
+* [Discussions 讨论区](https://github.com/Moonofweisheng/wot-design-uni/discussions)
+* [QQ 群](https://qm.qq.com/cgi-bin/qm/qr?k=O1Z3pal6StL39qHtABqR54Tb56igr90O&jump_from=webapi&authKey=MtVWfi/EQbT03wW7tKXv4bmyKYHBHtzI8VewlzSsOdxFjN0wbgNy17np9Z9yC4Z8)
+* [快速上手项目](https://github.com/Moonofweisheng/wot-starter)
+* [Vue3路由库](https://moonofweisheng.gitee.io/uni-mini-router/)
+
+## 开发计划
+
+开发计划已公布在[Discussions 讨论区](https://github.com/Moonofweisheng/wot-design-uni/discussions/45)中,欢迎参与讨论,提出意见和建议。
+
+## 贡献指南
+
+修改代码请阅读我们的 [贡献指南](https://github.com/Moonofweisheng/wot-design-uni/blob/develop/.github/CONTRIBUTING.md)。
+
+使用过程中发现任何问题都可以提 [Issue](https://github.com/Moonofweisheng/wot-design-uni/issues) 给我们,当然,我们也非常欢迎你给我们发 [PR](https://github.com/Moonofweisheng/wot-design-uni/pulls)。
+
+## 贡献者们
+感谢以下所有给 Wot Design Uni 贡献过代码的 [开发者](https://github.com/Moonofweisheng/wot-design-uni/graphs/contributors)。
+
+
+
+
+
+
+
+## 捐赠本项目
+
+捐赠本项目,支持组件库的更好的发展,捐赠后你的昵称和主页将会被展示在 `wot design uni` 文档的捐赠榜单上。
+
+### 爱发电捐赠
+
+https://afdian.net/a/weisheng233
+
+### 扫码捐赠
+
+
+
+
+
+
+## LICENSE
+
+[MIT](https://github.com/Moonofweisheng/wot-design-uni/blob/develop/LICENSE)
diff --git a/utils/app.js b/utils/app.js
new file mode 100644
index 0000000..e705bd1
--- /dev/null
+++ b/utils/app.js
@@ -0,0 +1,122 @@
+// const tabbar = [
+// "pages/index/index",
+// "pages/cat/cat",
+// "pages/shoppingCart/index",
+// "pages/my/my",
+// ];
+
+/**
+ * @des 小程序版本更新管理器
+ */
+export function getUpdateManager() {
+ // #ifdef MP-WEIXIN || MP-ALIPAY
+ const updateManager = uni.getUpdateManager();
+ updateManager.onCheckForUpdate((res) => {
+ // 检测新版本后的回调
+ if (res.hasUpdate) {
+ uni.showModal({
+ content: "新版本已经准备好,是否重启应用?",
+ showCancel: false,
+ confirmText: "确定",
+ success: (res) => {
+ if (res.confirm) {
+ updateManager.onUpdateReady(() => {
+ // 新版本下载完成的回调
+ updateManager.applyUpdate(); // 强制当前小程序应用上新版本并重启
+ });
+
+ updateManager.onUpdateFailed(() => {
+ // 新版本下载失败的回调
+ // 新版本下载失败,提示用户删除后通过冷启动重新打开
+ uni.showModal({
+ content: "下载失败,请删除当前小程序后重新打开",
+ showCancel: false,
+ confirmText: "知道了",
+ });
+ });
+ }
+ },
+ });
+ }
+ });
+ // #endif
+}
+
+/**
+ * @des 获取头部高度
+ * @return {Object} {} 获取手机头部高度
+ */
+export function getHeaderHeight() {
+ // 获取手机信息
+ let sysinfo = uni.getSystemInfoSync(),
+ // 状态栏高度
+ statusBarHeight = sysinfo.statusBarHeight,
+ // 判断是否是ios
+ isiOS = sysinfo.system.indexOf("iOS") > -1,
+ headHeight;
+
+ // 标题栏高度:安卓:48px,iOS:44px
+ if (!isiOS) {
+ headHeight = 48;
+ } else {
+ headHeight = 44;
+ }
+
+ return {
+ statusBarHeight,
+ headHeight,
+ headAllHeight: statusBarHeight + headHeight,
+ };
+}
+
+/**
+ * @des 设置状态栏高度和标题高度
+ */
+export function setHeaderHeight() {
+ let heightObj = getHeaderHeight();
+
+ uni.setStorageSync("statusBarHeight", heightObj.statusBarHeight);
+ uni.setStorageSync("headHeight", heightObj.headHeight);
+ uni.setStorageSync("headAllHeight", heightObj.headAllHeight);
+}
+
+/**
+ * @des 获取当前路由
+ */
+export function getCurPage() {
+ let pages = getCurrentPages();
+ let curPage = pages[pages.length - 1];
+ return curPage;
+}
+
+/**
+ * @des 获取当前平台
+ */
+export function getOrigin() {
+ let origin = "";
+
+ // #ifdef APP-PLUS
+ origin = "APP_PLUS";
+ // #endif
+ // #ifdef H5
+ origin = "H5";
+ // #endif
+ // #ifdef MP-WEIXIN
+ origin = "MP_WEIXIN";
+ // #endif
+ // #ifdef MP-ALIPAY
+ origin = "MP_ALIPAY";
+ // #endif
+ return origin;
+}
+
+/**
+ * @des 获取tabbar索引
+ */
+// export function getTabbarIndex() {
+// const routes = getCurrentPages(),
+// last = routes[routes.length - 1],
+// index = tabbar.indexOf(last.route);
+
+// return index;
+// }
\ No newline at end of file
diff --git a/utils/eventBus.js b/utils/eventBus.js
new file mode 100644
index 0000000..67624d4
--- /dev/null
+++ b/utils/eventBus.js
@@ -0,0 +1,3 @@
+import Vue from "vue";
+const Emit = new Vue();
+export { Emit };
diff --git a/utils/location.js b/utils/location.js
new file mode 100644
index 0000000..3dd08d7
--- /dev/null
+++ b/utils/location.js
@@ -0,0 +1,120 @@
+export const isGetLocation = () => {
+ // #ifdef MP-ALIPAY
+ return new Promise((resolve, reject) => {
+ const systemSetting = my.getSystemSetting();
+ if (!systemSetting.locationEnabled) {
+ my.showModal({
+ title: '提示',
+ content: '需要获取您的位置信息,请前往设置页面开启位置权限',
+ success(modalRes) {
+ if (modalRes.confirm) {
+ my.showAuthGuide({
+ authType: 'LBS',
+ success() {
+ const systemSetting = my.getSystemSetting();
+ if (systemSetting.locationEnabled) {
+ // 用户在引导页面开启了位置权限,调用my.getLocation获取位置信息
+ resolve(true);
+ } else {
+ // 用户依然未开启位置权限
+ resolve(false);
+ }
+ },
+ fail() {
+ // 引导页面调用失败,可能用户取消了操作
+ resolve(false);
+ }
+ });
+ } else {
+ // 用户点击取消
+ resolve(false);
+ }
+ }
+ });
+
+ } else {
+ console.log("系统已授权");
+ my.getSetting({
+ success(settingRes) {
+ console.log("小程序授权了吗");
+ console.log(settingRes);
+ if (!settingRes.authSetting['location']) {
+ // 用户未授权位置权限,引导用户去设置页面开启权限
+ uni.showModal({
+ title: '提示',
+ content: '需要获取您的位置信息,请前往设置页面开启位置权限',
+ success(modalRes) {
+ if (modalRes.confirm) {
+ uni.openSetting({
+ success(openSettingRes) {
+ if (openSettingRes.authSetting['location']) {
+ // 用户在设置页面开启了位置权限,调用uni.getLocation获取位置信息
+ resolve(true);
+ } else {
+ // 用户依然未开启位置权限
+ resolve(false);
+ }
+ }
+ });
+ } else {
+ // 用户点击取消
+ resolve(false);
+ }
+ }
+ });
+ } else {
+ // 用户已授权,调用my.getLocation获取位置信息
+ resolve(true);
+ }
+ },
+ fail(err) {
+ reject(err);
+ }
+ });
+ }
+ });
+ // #endif
+
+ // #ifdef MP-WEIXIN
+ return new Promise((resolve, reject) => {
+ uni.getSetting({
+ success(settingRes) {
+ console.clear(settingRes);
+ console.log(settingRes);
+ if (!settingRes.authSetting['scope.userLocation']) {
+ // 用户未授权位置权限,引导用户去设置页面开启权限
+ uni.showModal({
+ title: '提示',
+ content: '需要获取您的位置信息,请前往设置页面开启位置权限',
+ success(modalRes) {
+ if (modalRes.confirm) {
+ uni.openSetting({
+ success(openSettingRes) {
+ if (openSettingRes.authSetting['scope.userLocation']) {
+ // 用户在设置页面开启了位置权限,调用uni.getLocation获取位置信息
+ resolve(true);
+ } else {
+ // 用户依然未开启位置权限
+ resolve(false);
+ }
+ }
+ });
+ } else {
+ // 用户点击取消
+ resolve(false);
+ }
+ }
+ });
+ } else {
+ // 用户已授权,调用uni.getLocation获取位置信息
+ resolve(true);
+ }
+ },
+ fail(err) {
+ reject(err);
+ }
+ });
+ });
+ // #endif
+
+}
diff --git a/utils/pay.js b/utils/pay.js
new file mode 100644
index 0000000..cf53bd7
--- /dev/null
+++ b/utils/pay.js
@@ -0,0 +1,48 @@
+/**
+ * @des 支付方法
+ */
+export function paymentMethod(type) {
+ switch (type) {
+ case "1":
+ console.log("支付宝");
+ break;
+
+ case "2":
+ console.log("微信");
+ break;
+
+ case "3":
+ console.log("余额");
+ break;
+
+ case "4":
+ console.log("货到付款");
+ break;
+ }
+
+}
+
+/**
+ * @des 订单类型
+ */
+export function getOrderType(type) {
+ const obj = {
+ 1: "商城订单",
+ 2: "秒杀订单",
+ 3: "拼团订单",
+ };
+ return obj[type];
+}
+
+/**
+ * @des 支付类型
+ */
+export function getPayType(type) {
+ const obj = {
+ 1: "支付宝",
+ 2: "微信",
+ 3: "余额",
+ 3: "货到付款",
+ };
+ return obj[type];
+}
diff --git a/utils/regExp.js b/utils/regExp.js
new file mode 100644
index 0000000..77fc7a0
--- /dev/null
+++ b/utils/regExp.js
@@ -0,0 +1,8 @@
+export function regMobile(mobile) {
+ let re = /^1[2,3,4,5,6,7,8,9][0-9]{9}$/,
+ result = re.test(mobile);
+ if (!result) {
+ return false;
+ }
+ return true;
+}
diff --git a/utils/request.js b/utils/request.js
new file mode 100644
index 0000000..a88b180
--- /dev/null
+++ b/utils/request.js
@@ -0,0 +1,142 @@
+import _env from "../env";
+import {
+ getOrigin
+} from "./app";
+import utils from "./utils";
+
+let extConfig = {};
+
+const env = {
+ ..._env,
+ ...extConfig
+}
+
+/**
+ * 请求基类
+ * @param {Object} options 请求参数 { url: String 路径, [data: Object 请求携带的数据], [method: String 请求方式] }
+ */
+export function request(options) {
+
+
+ options.header = {
+ Authorization: `Bearer ${uni.getStorageSync("token")}`,
+ }
+
+ if (options.externalRequest) {
+
+ } else {
+ options.noclient ? (options.url = env.host + options.url) : (options.url = env.host + "" + options.url);
+ }
+
+ return new Promise((resolve, reject) => {
+ uni.request({
+ url: options.url,
+ timeout: env.NETWORK_TIME_OUT,
+ // data: { ...options.data, store_id: env.store_id, mini_id: env.mini_id, origin: getOrigin() },
+ data: { ...options.data, ...env, origin: getOrigin() },
+ header: options.header,
+ method: options.method,
+ success: (res) => {
+ uni.hideLoading();
+ let { statusCode } = res;
+ switch (statusCode) {
+ case 200:
+ resolve(res.data);
+ break;
+
+ case 401:
+ // 401 过期
+ setTimeout(() => {
+ utils.loginOut();
+ }, 300)
+ break;
+
+ default:
+ console.log("请求失败(" + statusCode + ")")
+ reject(res)
+ uni.$u.toast(res?.data?.message || "出错了");
+ break;
+ }
+ },
+
+ fail: (res) => {
+ console.log(res, 'reslogin')
+ // #ifdef MP-ALIPAY
+ if (res.statusCode == 401) {
+ setTimeout(() => {
+ utils.loginOut();
+ }, 300)
+ }
+ // #endif
+ reject(res.data.data);
+ },
+ });
+ });
+}
+
+export function uploadFile({
+ filePath,
+ name,
+ formData
+}) {
+
+ return new Promise((resolve, reject) => {
+
+ // #ifdef MP-ALIPAY
+ let fileType = ""
+ let contentType = '';
+ if (filePath.endsWith('.image')) {
+ contentType = 'image/png';
+ fileType = 'image';
+ } else if (filePath.endsWith('.video')) {
+ contentType = 'video/mp4';
+ fileType = 'video';
+ }
+ // #endif
+
+ uni.uploadFile({
+ url: env.host + '/client/common/upload',
+ name: "file",
+ filePath: filePath,
+
+ fileName: "file",
+ // #ifdef MP-ALIPAY
+ fileType: fileType,
+ // #endif
+
+ headers: {
+ // #ifdef MP-ALIPAY
+ "Content-Type": "application/x-www-form-urlencoded"
+ // #endif
+ },
+ formData: {
+ ...formData,
+ store_id: env.store_id,
+ origin: getOrigin()
+ },
+ timeout: 10000,
+ success: (res) => {
+ switch (res.statusCode) {
+ case 200:
+ resolve(JSON.parse(res.data))
+ break;
+
+ case 401:
+ // 401 过期
+ utils.loginOut();
+ break;
+
+ default:
+ uni.$u.toast(console.log("请求失败(" + statusCode + ")"));
+ break;
+ }
+ },
+ fail: (err) => {
+ my.alert({
+ title: '上传失败',
+ content: JSON.stringify(err)
+ });
+ },
+ });
+ })
+}
\ No newline at end of file
diff --git a/utils/utils.js b/utils/utils.js
new file mode 100644
index 0000000..98dc002
--- /dev/null
+++ b/utils/utils.js
@@ -0,0 +1,300 @@
+import { isGetLocation } from "./location.js";
+
+const tabBarList = [
+ "/pages/index/index",
+ "/pages/cat/cat",
+ "/pages/shoppingCart/index",
+ "/pages/my/my",
+];
+
+export default {
+ // 跳转页面
+ toUrl(url, type) {
+ console.log(url);
+
+ if (
+ tabBarList.some((item) => url.indexOf(item) !== -1) &&
+ type != "reLaunch"
+ ) {
+ uni.switchTab({
+ url: url,
+ });
+
+ return;
+ }
+
+ if (type == "redirectTo") {
+ uni.redirectTo({
+ url,
+ });
+ } else if (type == "reLaunch") {
+ uni.reLaunch({
+ url,
+ });
+ } else {
+ uni.navigateTo({
+ url,
+ });
+ }
+ },
+
+ // 后退页面
+ backTo(num = 1) {
+ const current = getCurrentPages();
+ if (current.length <= 1) {
+ this.toUrl("/pages/home/home");
+ } else {
+ uni.navigateBack({
+ delta: num,
+ });
+ }
+ },
+
+ /**
+ * @des 复制
+ */
+ copy(data, toast = "内容已复制") {
+ uni.setClipboardData({
+ data,
+ success: () => {
+ uni.$u.toast(toast);
+ },
+ });
+ },
+
+ /**
+ * @des 将 Date 转化为指定格式的String
+ * @des 月(m)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
+ * @des 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
+ * @des 例子: DateFormat("yyyy-MM-dd hh:mm:ss.s","2006-07-02") ==> 2006-07-02 08:09:04.423
+ * @param fmt
+ * @param date
+ * @returns {String}
+ */
+ DateFormat(fmt, date) {
+ const newDate = date || new Date();
+
+ const o = {
+ "M+": newDate.getMonth() + 1, // 月份
+ "d+": newDate.getDate(), // 日
+ "h+": newDate.getHours(), // 小时
+ "m+": newDate.getMinutes(), // 分
+ "s+": newDate.getSeconds(), // 秒
+ "q+": Math.floor((newDate.getMonth() + 3) / 3), // 季度
+ S: newDate.getMilliseconds(), // 毫秒
+ };
+ if (/(y+)/.test(fmt)) {
+ fmt = fmt.replace(
+ RegExp.$1,
+ (newDate.getFullYear() + "").substr(4 - RegExp.$1.length)
+ );
+ }
+ for (var k in o) {
+ if (new RegExp("(" + k + ")").test(fmt)) {
+ fmt = fmt.replace(
+ RegExp.$1,
+ RegExp.$1.length === 1 ?
+ o[k] :
+ ("00" + o[k]).substr(("" + o[k]).length)
+ );
+ }
+ }
+ return fmt;
+ },
+
+ getRouterInfo() {
+ let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
+ let curRoute = routes[routes.length - 1].route // 获取当前页面路由,也就是最后一个打开的页面路由
+ let curParam = routes[routes.length - 1].options; //获取路由参数
+
+ const params = Object.entries(curParam).reduce((param, [key, val], index) => {
+ if (index === 0) {
+ return param + key + '=' + val
+ }
+
+ return param += '&' + key + '=' + val
+ }, "?")
+
+ return [curRoute, params]
+ },
+
+ loginOut() {
+ const [curRoute, curRouteParam] = this.getRouterInfo()
+ uni.setStorageSync("backPage", "/" + curRoute + curRouteParam)
+
+ uni.removeStorageSync("token");
+ uni.removeStorageSync("user_info");
+ this.toUrl("/subPackages/login/login/index", "redirectTo");
+ },
+
+ kmUnit(m) {
+ var v;
+ if (typeof m === 'number' && !isNaN(m)) {
+ if (m >= 1000) {
+ v = (m / 1000).toFixed(2) + ' km'
+ } else {
+ v = m.toFixed(2) + ' m'
+ }
+ } else {
+ v = '0 m'
+ }
+ return v;
+ },
+
+ objectToQueryString(obj) {
+ var params = '';
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ if (params !== '') {
+ params += '&';
+ }
+ params += encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]);
+ }
+ }
+ return '?' + params;
+ },
+
+ oneValues(url) {
+ var name, value;
+ var str = url; //取得整个地址栏
+ var num = str.indexOf("?");
+ str = str.substr(num + 1); //取得所有参数 stringvar.substr(start [, length ]
+ let obj = {};
+ var arr = str.split("&"); //各个参数放到数组里
+ for (var i = 0; i < arr.length; i++) {
+ num = arr[i].indexOf("=");
+ if (num > 0) {
+ name = arr[i].substring(0, num);
+ value = arr[i].substr(num + 1);
+ obj[name] = value;
+ }
+ }
+ return obj;
+ },
+
+ // 下载图片
+ downloadImage(imageUrl) {
+ return new Promise((resolve, reject) => {
+
+ function downloadFile() {
+ uni.downloadFile({
+ url: imageUrl,
+ success: function (res) {
+ // 检查下载是否成功
+ if (res.statusCode === 200) {
+ console.log('图片下载成功:', res.tempFilePath);
+ // 将图片保存到相册
+ uni.saveImageToPhotosAlbum({
+ filePath: res.tempFilePath,
+ success: function () {
+ console.log('图片保存成功');
+ resolve(res.tempFilePath); // 返回下载的图片路径
+ },
+ fail: function (saveErr) {
+ console.error('图片保存失败:', saveErr);
+ reject(new Error('图片保存失败'));
+ }
+ });
+ } else {
+ // 下载失败,拒绝 Promise
+ uni.showToast({
+ title: "保存失败,请检查是否开启权限 (2)",
+ icon: "none",
+ });
+
+ console.error('图片下载失败:', res);
+ reject(new Error('图片下载失败'));
+ }
+ },
+ fail: function (err) {
+ uni.showToast({
+ title: "保存失败,请检查是否开启权限 (1)",
+ icon: "none",
+ });
+
+ // 下载失败,拒绝 Promise
+ console.error('图片下载失败:', err);
+ reject(err);
+ }
+ });
+ }
+
+ // #ifdef MP-WEIXIN
+ //获取相册授权
+ uni.getSetting({
+ success(res) {
+ if (!res.authSetting["scope.writePhotosAlbum"]) {
+ uni.authorize({
+ scope: "scope.writePhotosAlbum",
+ success(e) {
+ //这里是用户同意授权后的回调
+ downloadFile();
+ },
+ fail(fail) {
+ uni.showModal({
+ title: "提示",
+ content: "需要获取您的相册保存权限,请到小程序的设置中打开授权",
+ success(res) {
+ if (res.confirm) {
+ wx.openSetting()
+ }
+ }
+ })
+ },
+ });
+ } else {
+ //用户已经授权过了
+ downloadFile();
+ }
+ },
+ });
+ // #endif
+
+
+ // #ifdef MP-ALIPAY
+ downloadFile();
+ // #endif
+
+ });
+ },
+
+ // 判断参数中是否存在 distributor_id 属性,并将其存储到本地
+ // 将传入的 url 参数解析为对象,并保存到本地
+ saveDistributorIdToLocal(params, url) {
+ try {
+ if (url) {
+ return this.saveDistributorIdToLocal(this.oneValues(url))
+ }
+
+ if (params && typeof params === 'object' && 'distributor_id' in params) {
+ // 如果 params 是一个对象,并且包含 distributor_id 属性,将其存储到本地
+ const distributorId = params.distributor_id;
+ uni.setStorageSync('distributor_id', distributorId);
+ return distributorId
+ } else {
+ // 如果 params 不符合条件,则将 distributor_id 设置为 0
+ uni.setStorageSync('distributor_id', 0);
+ }
+ } catch (error) {
+ console.log(error);
+ }
+ },
+
+ // 小程序跳转
+ navigateToMiniProgramWithParams(appId, path, params) {
+ uni.navigateToMiniProgram({
+ appId: appId,
+ path: path,
+ extraData: params,
+ success: function (res) {
+ console.log('跳转成功', res);
+ },
+ fail: function () {
+ uni.$u.toast("跳转失败:" + JSON.stringify({ appId, path, params }))
+ }
+ });
+ },
+
+ // 判断位置权限
+ isGetLocation: isGetLocation,
+};
\ No newline at end of file
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..4650ae9
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,35 @@
+import path from "path";
+import { defineConfig } from "vite";
+import uni from "@dcloudio/vite-plugin-uni";
+import vwt from "weapp-tailwindcss-webpack-plugin/vite";
+import postcssWeappTailwindcssRename from "weapp-tailwindcss-webpack-plugin/postcss";
+
+const isH5 = process.env.UNI_PLATFORM === "h5";
+
+// vite 插件配置,注意一定要把 uni 注册在 vwt 前
+const vitePlugins = [uni()];
+
+const resolve = (p) => {
+ return path.resolve(__dirname, p);
+};
+
+const postcssPlugins = [
+ require("autoprefixer")(),
+ require("tailwindcss")({
+ config: resolve("./tailwind.config.js"),
+ }),
+];
+if (!isH5) {
+ vitePlugins.push(vwt());
+ postcssPlugins.push(postcssWeappTailwindcssRename({}));
+}
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: vitePlugins,
+ css: {
+ postcss: {
+ // 内联写法
+ plugins: postcssPlugins,
+ },
+ },
+});
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..98b6b85
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,1052 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@alloc/quick-lru@^5.2.0":
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
+ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
+
+"@babel/code-frame@^7.18.6", "@babel/code-frame@^7.22.13":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
+ integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
+ dependencies:
+ "@babel/highlight" "^7.23.4"
+ chalk "^2.4.2"
+
+"@babel/generator@7.20.5":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95"
+ integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==
+ dependencies:
+ "@babel/types" "^7.20.5"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ jsesc "^2.5.1"
+
+"@babel/generator@^7.20.5":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
+ integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
+ dependencies:
+ "@babel/types" "^7.23.6"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ "@jridgewell/trace-mapping" "^0.3.17"
+ jsesc "^2.5.1"
+
+"@babel/helper-environment-visitor@^7.18.9":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
+ integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
+
+"@babel/helper-function-name@^7.19.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+ integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+ dependencies:
+ "@babel/template" "^7.22.15"
+ "@babel/types" "^7.23.0"
+
+"@babel/helper-hoist-variables@^7.18.6":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+ integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.18.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+ integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
+ integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
+
+"@babel/helper-validator-identifier@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
+"@babel/highlight@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
+ integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.20"
+ chalk "^2.4.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@7.20.5":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8"
+ integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==
+
+"@babel/parser@^7.20.5", "@babel/parser@^7.22.15":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
+ integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
+
+"@babel/template@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
+ integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
+ dependencies:
+ "@babel/code-frame" "^7.22.13"
+ "@babel/parser" "^7.22.15"
+ "@babel/types" "^7.22.15"
+
+"@babel/traverse@7.20.5":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133"
+ integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==
+ dependencies:
+ "@babel/code-frame" "^7.18.6"
+ "@babel/generator" "^7.20.5"
+ "@babel/helper-environment-visitor" "^7.18.9"
+ "@babel/helper-function-name" "^7.19.0"
+ "@babel/helper-hoist-variables" "^7.18.6"
+ "@babel/helper-split-export-declaration" "^7.18.6"
+ "@babel/parser" "^7.20.5"
+ "@babel/types" "^7.20.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+
+"@babel/types@^7.20.5", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd"
+ integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@jridgewell/gen-mapping@^0.3.2":
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
+ integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+ dependencies:
+ "@jridgewell/set-array" "^1.0.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
+ integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
+
+"@jridgewell/set-array@^1.0.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
+ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+ version "1.4.15"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
+ version "0.3.20"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
+ integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+arg@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
+ integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+
+autoprefixer@^10.4.8:
+ version "10.4.16"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8"
+ integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==
+ dependencies:
+ browserslist "^4.21.10"
+ caniuse-lite "^1.0.30001538"
+ fraction.js "^4.3.6"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.2, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browserslist@^4.21.10:
+ version "4.22.2"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b"
+ integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==
+ dependencies:
+ caniuse-lite "^1.0.30001565"
+ electron-to-chromium "^1.4.601"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.13"
+
+camelcase-css@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+ integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565:
+ version "1.0.30001572"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz#1ccf7dc92d2ee2f92ed3a54e11b7b4a3041acfa0"
+ integrity sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==
+
+chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chokidar@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+commander@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+cross-spawn@^7.0.0:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+debug@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+didyoumean@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
+ integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+
+dlv@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+ integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+electron-to-chromium@^1.4.601:
+ version "1.4.616"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz#4bddbc2c76e1e9dbf449ecd5da3d8119826ea4fb"
+ integrity sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+fast-glob@^3.3.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fastq@^1.6.0:
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320"
+ integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==
+ dependencies:
+ reusify "^1.0.4"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+foreground-child@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+ integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^4.0.1"
+
+fraction.js@^4.3.6:
+ version "4.3.7"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+ integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
+
+fsevents@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@^10.3.10:
+ version "10.3.10"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^2.3.5"
+ minimatch "^9.0.1"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry "^1.10.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+hasown@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c"
+ integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==
+ dependencies:
+ function-bind "^1.1.2"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-core-module@^2.13.0:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+ dependencies:
+ hasown "^2.0.0"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+jackspeak@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+ integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
+jiti@^1.19.1:
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
+ integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
+
+js-md5@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/js-md5/-/js-md5-0.8.3.tgz#921bab7efa95bfc9d62b87ee08a57f8fe4305b69"
+ integrity sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json5@^2.1.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+lilconfig@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
+ integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+
+lilconfig@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc"
+ integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+loader-utils@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c"
+ integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^2.1.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+"lru-cache@^9.1.1 || ^10.0.0":
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484"
+ integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4, micromatch@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+minimatch@^9.0.1:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+ integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
+nanoid@^3.3.4, nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+object-assign@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-hash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+ integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.10.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+ integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+ dependencies:
+ lru-cache "^9.1.1 || ^10.0.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pirates@^4.0.1:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
+ integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
+
+postcss-import@^15.1.0:
+ version "15.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
+ integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==
+ dependencies:
+ postcss-value-parser "^4.0.0"
+ read-cache "^1.0.0"
+ resolve "^1.1.7"
+
+postcss-js@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
+ integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
+ dependencies:
+ camelcase-css "^2.0.1"
+
+postcss-load-config@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3"
+ integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
+ dependencies:
+ lilconfig "^3.0.0"
+ yaml "^2.3.4"
+
+postcss-nested@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
+ integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==
+ dependencies:
+ postcss-selector-parser "^6.0.11"
+
+postcss-rem-to-responsive-pixel@^5.1.3:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/postcss-rem-to-responsive-pixel/-/postcss-rem-to-responsive-pixel-5.1.3.tgz#d9486de84137bbca71bc4e903b92db66c9bf5fb3"
+ integrity sha512-qi17MnTWzJ/3PnPrlspG5njMgmUomLXdgRc4AGqjfyMzn896V6tB4u5jW3xjtkxMM5IHB1z8LHnS81cLMpQ2Kg==
+
+postcss-selector-parser@^6.0.11:
+ version "6.0.14"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.14.tgz#9d45f1afbebedae6811a17f49d09754f2ad153b3"
+ integrity sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@8.4.20:
+ version "8.4.20"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.20.tgz#64c52f509644cecad8567e949f4081d98349dc56"
+ integrity sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==
+ dependencies:
+ nanoid "^3.3.4"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+postcss@^8.4.14, postcss@^8.4.23:
+ version "8.4.32"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9"
+ integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+read-cache@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
+ integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
+ dependencies:
+ pify "^2.3.0"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+resolve@^1.1.7, resolve@^1.22.2:
+ version "1.22.8"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+semver@^7.3.8:
+ version "7.5.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+ integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+ dependencies:
+ lru-cache "^6.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
+ name string-width-cjs
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ name strip-ansi-cjs
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+sucrase@^3.32.0:
+ version "3.35.0"
+ resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
+ integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.2"
+ commander "^4.0.0"
+ glob "^10.3.10"
+ lines-and-columns "^1.1.6"
+ mz "^2.7.0"
+ pirates "^4.0.1"
+ ts-interface-checker "^0.1.9"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+tailwindcss@^3.1.7:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.0.tgz#045a9c474e6885ebd0436354e611a76af1c76839"
+ integrity sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==
+ dependencies:
+ "@alloc/quick-lru" "^5.2.0"
+ arg "^5.0.2"
+ chokidar "^3.5.3"
+ didyoumean "^1.2.2"
+ dlv "^1.1.3"
+ fast-glob "^3.3.0"
+ glob-parent "^6.0.2"
+ is-glob "^4.0.3"
+ jiti "^1.19.1"
+ lilconfig "^2.1.0"
+ micromatch "^4.0.5"
+ normalize-path "^3.0.0"
+ object-hash "^3.0.0"
+ picocolors "^1.0.0"
+ postcss "^8.4.23"
+ postcss-import "^15.1.0"
+ postcss-js "^4.0.1"
+ postcss-load-config "^4.0.1"
+ postcss-nested "^6.0.1"
+ postcss-selector-parser "^6.0.11"
+ resolve "^1.22.2"
+ sucrase "^3.32.0"
+
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+ts-interface-checker@^0.1.9:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
+ integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+
+update-browserslist-db@^1.0.13:
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
+ integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
+util-deprecate@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+weapp-tailwindcss-webpack-plugin@^1.6.10:
+ version "1.12.8"
+ resolved "https://registry.yarnpkg.com/weapp-tailwindcss-webpack-plugin/-/weapp-tailwindcss-webpack-plugin-1.12.8.tgz#2a59ada930a985c7abf0f77d19c7de4522583e4d"
+ integrity sha512-nGRaB7HwWLXC4XZxKg3nG4VKinXx3ucH7pekRIavBpoZmmIupINMXhQYEf5D64r/YIJwHfhuCoYxoSZOmCv/Xg==
+ dependencies:
+ "@babel/generator" "7.20.5"
+ "@babel/parser" "7.20.5"
+ "@babel/traverse" "7.20.5"
+ loader-utils "^2.0.2"
+ micromatch "^4.0.5"
+ postcss "8.4.20"
+ postcss-selector-parser "^6.0.11"
+ semver "^7.3.8"
+ webpack-sources "^3.2.3"
+
+webpack-sources@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+ integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^2.3.4:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2"
+ integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==