From e046514fee9e7879bbb51cf696e091ab320882c1 Mon Sep 17 00:00:00 2001 From: admin <362324317@qq.com> Date: Fri, 15 May 2026 06:01:49 +0800 Subject: [PATCH] feat: icons moved to repo-managed PNG files - Convert all brand icons (aliyun/baidu/quark/115/tianyi/123pan/uc/xunlei/pikpak) to 64x64 PNG - CLOUD_ICONS now references /icons/xxx.png instead of data URI - Backend cloud-types.service.ts synchronized - Added magnet/ed2k/others placeholder icons - .gitignore allows public/icons/ --- .gitignore | 1 + .../backend/src/cloud/cloud-types.service.ts | 34 +++++++--------- packages/frontend/public/icons/115.png | Bin 0 -> 4095 bytes packages/frontend/public/icons/123pan.png | Bin 0 -> 3352 bytes packages/frontend/public/icons/aliyun.png | Bin 0 -> 4907 bytes packages/frontend/public/icons/baidu.png | Bin 0 -> 2083 bytes packages/frontend/public/icons/ed2k.png | Bin 0 -> 2002 bytes packages/frontend/public/icons/magnet.png | Bin 0 -> 1278 bytes packages/frontend/public/icons/others.png | Bin 0 -> 1271 bytes packages/frontend/public/icons/pikpak.png | Bin 0 -> 3333 bytes packages/frontend/public/icons/quark.png | Bin 0 -> 2906 bytes packages/frontend/public/icons/tianyi.png | Bin 0 -> 4750 bytes packages/frontend/public/icons/uc.png | Bin 0 -> 6703 bytes packages/frontend/public/icons/xunlei.png | Bin 0 -> 6395 bytes packages/frontend/src/types/index.ts | 38 +++++++----------- 15 files changed, 31 insertions(+), 42 deletions(-) create mode 100644 packages/frontend/public/icons/115.png create mode 100644 packages/frontend/public/icons/123pan.png create mode 100644 packages/frontend/public/icons/aliyun.png create mode 100644 packages/frontend/public/icons/baidu.png create mode 100644 packages/frontend/public/icons/ed2k.png create mode 100644 packages/frontend/public/icons/magnet.png create mode 100644 packages/frontend/public/icons/others.png create mode 100644 packages/frontend/public/icons/pikpak.png create mode 100644 packages/frontend/public/icons/quark.png create mode 100644 packages/frontend/public/icons/tianyi.png create mode 100644 packages/frontend/public/icons/uc.png create mode 100644 packages/frontend/public/icons/xunlei.png diff --git a/.gitignore b/.gitignore index bf00eca..e2ad194 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ deploy.sh backup.sh check.sh icons/ +!/packages/frontend/public/icons/ scripts/ Dockerfile Dockerfile.bak diff --git a/packages/backend/src/cloud/cloud-types.service.ts b/packages/backend/src/cloud/cloud-types.service.ts index 3d20553..1d40f94 100755 --- a/packages/backend/src/cloud/cloud-types.service.ts +++ b/packages/backend/src/cloud/cloud-types.service.ts @@ -12,27 +12,23 @@ export interface CloudTypeInfo { * 图标存放在 /app/dist/frontend/icons/,通过 Express static 中间件对外提供 */ /** - * 网盘图标 — 内联 SVG data URI,无需外部文件 +/** + * 网盘图标 — 使用仓库中的 PNG 图标文件 + * 图标存放在 /app/dist/frontend/icons/,通过 Express static 对外提供 */ -function makeSvgIcon(bg: string, letter: string): string { - const c = encodeURIComponent(bg); - const l = encodeURIComponent(letter); - return `data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2224%22%20height%3D%2224%22%20rx%3D%224%22%20fill%3D%22${c}%22%2F%3E%3Ctext%20x%3D%2212%22%20y%3D%2217%22%20font-size%3D%2213%22%20font-weight%3D%22bold%22%20fill%3D%22%23fff%22%20text-anchor%3D%22middle%22%20font-family%3D%22Arial%2Csans-serif%22%3E${l}%3C%2Ftext%3E%3C%2Fsvg%3E`; -} - const ICONS: Record = { - baidu: makeSvgIcon('#4e6ef2', '百'), - aliyun: makeSvgIcon('#ff6a00', '阿'), - quark: makeSvgIcon('#07c160', '夸'), - '115': makeSvgIcon('#9b59b6', '1'), - tianyi: makeSvgIcon('#00a1d6', '天'), - '123pan': makeSvgIcon('#e74c3c', '1'), - uc: makeSvgIcon('#f39c12', 'U'), - xunlei: makeSvgIcon('#2ecc71', '迅'), - pikpak: makeSvgIcon('#8e44ad', 'P'), - magnet: 'data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2224%22%20height%3D%2224%22%20rx%3D%224%22%20fill%3D%22%236366F1%22%2F%3E%3Cpath%20d%3D%22M7%2016l5-5m-5%200l5%205m5-5l-5-5m5%200l-5%205%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20fill%3D%22none%22%2F%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2211%22%20r%3D%221%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E', - ed2k: 'data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2224%22%20height%3D%2224%22%20rx%3D%224%22%20fill%3D%22%238B4513%22%2F%3E%3Ctext%20x%3D%2212%22%20y%3D%2217%22%20font-size%3D%2211%22%20font-weight%3D%22bold%22%20fill%3D%22%23fff%22%20text-anchor%3D%22middle%22%20font-family%3D%22Arial%2Csans-serif%22%3EeD%3C%2Ftext%3E%3C%2Fsvg%3E', - others: 'data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2224%22%20height%3D%2224%22%20rx%3D%224%22%20fill%3D%22%239CA3AF%22%2F%3E%3Cpath%20d%3D%22M6%2013c0-2.8%202.2-5%205-5a5%205%200%200%201%204.5%202.7A4%204%200%200%201%2020%2014a4%204%200%200%201-3%203.9h-8A4%204%200%200%201%206%2013z%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%221.5%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E', + baidu: '/icons/baidu.png', + aliyun: '/icons/aliyun.png', + quark: '/icons/quark.png', + '115': '/icons/115.png', + tianyi: '/icons/tianyi.png', + '123pan': '/icons/123pan.png', + uc: '/icons/uc.png', + xunlei: '/icons/xunlei.png', + pikpak: '/icons/pikpak.png', + magnet: '/icons/magnet.png', + ed2k: '/icons/ed2k.png', + others: '/icons/others.png', }; const ALL_CLOUD_TYPES: { type: string; label: string; icon: string }[] = [ diff --git a/packages/frontend/public/icons/115.png b/packages/frontend/public/icons/115.png new file mode 100644 index 0000000000000000000000000000000000000000..e3148cd673221a722f4f3e03c2347726c17be116 GIT binary patch literal 4095 zcmV9qP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Rl1r8PfCYh2jH~;_-14%?dRCwCmntO2E)pf@| z=iYtjwUYI+EZdT83>ZHFBgYR4AvEBGNuihm37vRoXYeFtTACTAoi+(1%`llxn@K!` zWG0=a8Ba1KDHIr}!4z!6w8jQMkROr(;g^tCvL4oICGGQfPyhI>q?Ig;6}+~RGb4L{ zzu)ffp7TAAd(OE>I1km-)X?4C&3C{1-N?Fi>lWA7*RPI5BG-n);YMq1g@{^5e)kr&;gQ2jF---nMh+&b6NBv0=joWXqN< zM5ED)jT<-qTU}k%n7pSsqvy zU}|qTm(uC<;NioEA6&U|<+FBha4@od{rZ0>FE78oFxpq1+w1X@?T*2ukjx5+%!U7@ zvO?Cu_4DA7^+8HP=2LTIj0qWI_|A8}vn{ZG{rbh_<>hM%W%}I%$}{hHcn)licOCVD zPj&}I2wJ%BGnVSIPcJ<9TV#28`I`0X*Dns#*VnHOg+g@&ksjsM!&zERgUJD`>ic29 zj@|qCUqjF+Usx{Ow(R0&-JwvZuD-s0bs!RnTx+cj7ef5*0p;1fj%-f*st^t;cU>pk zw8#<;ezMh-gy5RlLZs;8Xn%yPwc$u4a%~_S4mTFc_qQF&(we7zr^*+X3*WpmL{aGS zW|tyDI2>*?*4m0fEN~`I`yzfcuPK8sueO(6_z|+!R+z$+w92+a9!I0T_EiB@)-M-U zG)#*M8UPWo7uT_JbS9=eyVo1lK0v?%3VV)uoa*sNq!rbvB}Ijxz{P*1^2(ts??uOa zUj#e{zkXYJZhw}lQfRCemdz1vSYTK_*H9A?E=SdQ(E;d+DgTuh`A0}{u8_vY^&nQXnoe0Lp*Ao8`!9f6McnA|j)S>xf*!SZqjVp*5-; zjXGXD;CNuI;ht3i%8Lu)orMJ;>p^9yaNjDScM!Vc%9*&*KkRE>)fZfHV2l7_b6}k4 zg@1Y3@$RV%kA5*gLv`T;=0yd-8sYAy0DpRe55{m>=^Io|_9{m@90yJ+t*4cqK|dxK zkuj?fu;N#LTMsH{hcbNc9++2CSP-PUyL)dDhN_91Q@WC?s4n+p_6%L4NiZA^zs`hMF?Pb4vb> zDB@ek>#fRf_GAmXU0y-}@&y#?Dhyw{HORkyIl$t2U*i)&a8CH`+m7Si?hgxq(Z!9h z?kdao?+vnKwhzL1prHLMymrLnLQ3b~I{a0NT?`*iMw7f0L2&3J^H-|Af3$xyF6J{AyNcY1!>q%GXVMq zmCl%A@(^&UTv033T%?ZhvC(>)ly?{-&dU7>w~#Un9z$*9ni@9;CRyE%ZwcfT}O} z?lzC7cYEwT0a+)x#;Fo1f(Od3^r8cxstl+6WAK1wwC~qHteomq4xDuC zYV(^Ri3|vS=2sN-Pk}>I9ZdXpn;Or2b9fpB~-x~x7 z7$^=xZA4koAl$ypaN|{$iV~raK3{MEM1+Rw0Qar2tXt%GKk7Kvt#l9QsHvBRm09J& z{941pnZm3JLomQ46}(^oj8HfzESzasIMY88nwZ~Dm(jaR6a>e*ztfGTMIv-L>7rVI zs^Zj-?!zgFCzXLD#FPH#p%f(2e$|)t{IdbS0}LVSXMQCip{&TS03$_0c?pz-g_1CY z0-ropa>)R2swC3TI|v;ye~UZSr*!lyX9kqMVHiyMX91}UIOiuh&iNprd3C>np#G6r z&Rqf{fCQnuSg0-&>SqXZtAxfHp|M(+HAAQ@^?~_aW6A{s;G7amz^Sv!(N3kc)6sTD zIo+?E9rlIHIvv-~8r{(H1(gxM^95B^7)gH>oc|A52gx+_JLu@s(dRxmLP-c}B0@v8 zu&7>GGS_f*y)dUrC=FjYAm;@jnejDx=(Mu$l%pl8eAKTDCL!zTcp-s+kx{MY3aF}= zeT&%DBNSRrLbSd9keX&+Feh?s&7!air7HH>9}(OkX%F zGHR+K6C}X*>)bd5s>+ys=r~^=(X{5hARP4XCDS@iSZf5&%R4&DtsM*qAq$Dr7#kxd zZ*u!u##7q6m6K=Sl>?62a=3QB;g+R_wTldMYYfhLvB1`YiBlh@GweB`bjFper@qkQ zGax#S_jAapAH1qcgm}u2@Ifn-g&{T!rD37GXv{)l!~Tv?6cp}WY1nqyv1)-(8iJ>H zdstCSPP-eLES^&iw<}lI3#B2UCIYjog!Ufg-*qZTalghW=s23cPT@@#4E4b7uF-A$H( zgkxs8@6Rh54L^K2%loGt>1@sG8C%>q z)#Ep(aMM+W6>|-hC4Tz*g{6i$GyL(^fPuM{!ZUk4-fD9=^>YGi;I^fP?zq42SC;yD zKx4JR7&y@lMIqt3`NE3_JgQ2dC*)g`5tvgc)Rh|!99K?syN`_#=K}-MUFqS@JvLBQ zJ5W6LhLtu{x^yyAn%ua?{%`MtLmiHruC(lU&++E_j#xrjHplRKtK*L4hMF>A%|gSH z*+OenX{<8b_ZiFgU&`|Qevishp)02RXj_&&ZH~@r>@jGU>;F5jY20!@K&+YPmek(oHc2ol;)pv-op|MTqLS87OvOY7n zFR^St>WB^~3u=Vra}2MwIvT2kwl3xM7RP6I^q7vYZ+42Q6DWl-Q7RsNIqEgrXqKsWQCL>S*myj>IRWPsIr*2Wu;ZxXgDxdDtjwwO17FtwoE>sxvWB3A z86|#0q`BQ8z(7KCWi#B>WZC_JW8+N$_8oKVX>+W-${(xy#+D4j$tiIQC|>I9%ZZP+ zzn1Q6Auw>{MH(OYWo+ogt{<9E=}H?aTR0^ICP97V+8X%kTFdbsW$$sv7nU22oc6c1 zga@y+cz7PvMtoskI^bcAKP#jPE9VDlC<+Qr zh5aX$V?D|Z^Mq9k3`aYar+0hQMue|@F2LuPSZ-NtSiR7&aHe7DT*IwPEZ5Js96O`j zzs9onnDSAd|9QzA;g%(qTb5W#!m#ySMY&WrlU=ybO7d4SJvJ|Bvz@6;}v z?8^?E_@~&xAOAF1wK(1Pe~+FESpA)wNu4FT`D5};i-&YV=~^xQkNswLU} zeNT-0{y9^K$&S6)(ps(k+&_LaaOjy=B@jL+Vn9p;Ofe$%Tu~slIKQ*s&)Pr~YSial@@`@uOQb*|B{R#hr(2Nj2XZ z>ftB1emhdqxOTBEo3+}6Bi9-mZUkEa*iq}xM?OC`OpFsF-k?l~9eU1pCw&i-yif5| zy_jZGr(8PT>uDah@!ZEpZEwX0000bbVXQnWMOn= zI%9HWVRU5xGB7eWEig4LF*8&#GCDLgIy5mWFfckWFo@Mm@&Et;C3HntbYx+4Wjbwd xWNBu305UK#HZ3qUEip4xF)}(dGCD9ZD=;uRFfef3it_*f002ovPDHLkV1i%M$m9S3 literal 0 HcmV?d00001 diff --git a/packages/frontend/public/icons/123pan.png b/packages/frontend/public/icons/123pan.png new file mode 100644 index 0000000000000000000000000000000000000000..c936c8ec3b74ecb86cdbfea2a4dd60e81bf0313c GIT binary patch literal 3352 zcmV+z4d?QSP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Rl1r8PfCYh2jH~;_)97#k$RCwCu+ijCv)o};# z-AjWb+Y_Kck#BUP2QYkx0m0l$uMED(4<%>8dmBb$)i5)7H zvN2Wy!9a|VEU?iN+Lcz?m9#rgColTknc3CO?&>KBrK_f9=H7eG?bF?-yZ_zyCflIH zN7~iTam2iFejIR$9 z>6^7?^m7#}e89e7a6kK!5p9$q3nic#q^U+`Aq zxQO@3|Bbifx0AYQLDo@|;pnT4p%$L z;qP!w3QMRTez}QG4HJ^*B!5o&2KGwE@A>_{9ZE(d4~Q_nTs~KDy;wkPhw%2#h&{ho zc=`K{_Tjt2su!?OlM~V|(wBv|-&Z7dKhiXwlN^#fhMCF-%nFbHV)=bP(+KA99J-On zq%?!aanSwY^fso-sF-S->O1omU9A$W5LQOO8KWjnCD%sW+%4`@EmgJ;Uve20U?X2K9ekggT zjH_)ie_dF>9^u=b7rD*8VFMZi8Xlx2yiez+nqy5PT~bz<`h8J!=t{20eyO|i??xuO zx-D?@m5rlmuhNv;iF!k-?Z5wuhcLk2gdOZvijK zUKChl`$4&ycV@in++xf4Wh0oC+jH^1UJH%1 zhfJHBxTE_a$HraEY0QFapb zQqOoo-o5~~qOxt$B>5>^)!*O41e$OWC#8{jsoAF1Ewe3&{k|8Uh7i=t!k;bo+sFr0 z%2*cuXkNhFO7mAlIcyL9Sfsye9OCT=pesE1A<67E1+ahva_u-y%C$>n+qC6$QR<$R zU63q`s4#~YM6O~B0h}d&h<9{5=QPH;I_(aYiOYS_ig+7aH3C2xrNt_wLhS{O09CTRegU&M46p8H@{`fk;XMf+mcQ>Ud?;my3BH` zxOz9JA&}<-vT3=tzVdWCkgQ5^C!{p!Fvsu(;S1J;!n@Pa8J@#;aGf+SG!o7sOfmXUI{ ztEOhB*d77SdSb{+_-(-)*GR20YPATp62Nhs6;?sYJB1^CRz#AWWx}3y-YE-M!h0g- zejsA z_sjl7@<*hHH)8zu1P~f(;WXZq{j3P!JXWM!ZGno>uEfz-!sZ7u#wn4cJS(cwqXYA& zBFqoSzrab!W%~0}bok{W@04ryZfHGS)X(xZQA}!JTJoU2MQs>eZdCxq z3FSq+T{QoG5eBb}@Pp+fkB(rRG>ZD+BkfccUWQ5I{O3qQoiE z3E3q{Q`cF^QbCz7$iC;JUa8Z+X6#Xr#N!A$iR}elYf%~*+vb8 z?ko-!r`EXbenUis*^N#VexO~V&c7Kg7^7RycF1yG!Wk)@6M04t4BZMAsJwDhmF*Q+ zZ@NxykBEGH@}>oRdla6ZnKc;WQk}4ri=tkzCW_n|7)r9FBc%?hE9HQ*i>-QTwNDr< zP3N2Z-0ZlZHtBj~iK$xw zqIz!YB+l*4gddSj$MJj-zbWbS z;F$FSx=Q*q?&&OI@qPYA1r)yPXt0XE?+JYHfVB;cPQe6KL6xK>tC6QjU%~hAw6LDz z_(zdstuMJHRnLM|IbS1P!ucpy8mMC5JR0opu-wfXoEt*jXq83nZJ{tcczr*SNgCxA zZK+FyuVn#?QKvW*IsS~rCi%8+IdRk_PYv`lVZPCjNEFCu@cTf5zA}zlAq1`0_&-y*beAD@s=JcO4_hr zS9$1l-ZkyQ^HNA&)p-e%I#3p#g=c-C9NVaSyWZ;$iN~p`_Z=wA5*?jt{$YKA_4g_u zD;>a>3V)j>*~2VgM!?hS`k7xx?|p$DtUOROwld^4gXpcXjRjODU$H%hZw&CU6%AsH zscl@J8l}g7Ef&~|=i>uX-|XI#?O?tpWiA}QO7}!LaZL7W`95-rSuTCb(|AMnrtCc0k(tdMtcn>Q z;qUPeB0soaXjL?A-W46JH$@d$BdWM1SLs^7u@VLLMWMo86^{PAMTdxLOG5MS%Kk%a zfeYOD-e6REqp$uRekh#9cLlPl8rh#Gs`mWPh34N?weJcIdvi3Nxs6w5za!;C0-Ej? z9i5F{o$aH(wYdAn*M^4AY!xQIN`^4!mG}sog@?Bvr zuZ#ZO?+E<=u&4=43b0Z^=4#GCRyR6+Ga}e(-Vu?;pA*sSqG*V|Ewa4}qCB^_(GAuJ zU_de%t;0u}7jdz8%%yVw-2wuSmY!Q_3H6@g8GIDJs_k)WFIf*8UmdS3FZOyoRen}H zqwt2@Jwc}>HOjlfH`YY{7j6YSWgv=miU0rrC3HntbYx+4WjbSWWnpw>05UK#HZ3qU zEip4xF)}(dG&(dfD=;uRFffSKO!5E#03~!qSaf7zbY(hiZ)9m^c>ppnGBzzRH7zkS iR53C-G%`9cF)J`IIxsMB+=}x60000004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Rl1r8Pf6VD;^8vp5%2$ ztiD$fW&stL1V#~hfirLvcoE?z;Lig8?&lvw`3ZOdK2*2>+5qT`U;;FlVB6y8kR)j3 zN4Zu2RP+BtxqS)$SFds{vA!CmLFj<3ge+o46R28{lcLQ$(+PCI9(Z&sf9=OJ@QAW= z#k7SYgta1Ea4l9AdQtVWT zvftT~vksDwMhi*%sJ|<+g*bJ^sE`H3fVN?0~OO{t5UK!oRrn zpRv$byML+u8=t(fTAAo1ulBPE5*CT??)4QxvO|THffl9ncs~G7z_Ta^zrcj)ax22Q zLHG{XqI~UE|Gf+UTTF8yc>N{oCgH^0LZGVhxhnr(Dx$oedidz_v-_@;^9mrQ4)X}0 zDU%@3DIm%bI07TW7PvIP9~3qsJfn-4e-PMc2!1C3(*na)D-*J=psDR>8)zDPUsq7q zSrJKiKjs;xDWBt*C(t?oLzy~mUSo94R^POA!w^+>Y-SW-fRlN$~ zn;NFY3KytG6!bb_3fEc3aqQVYkVOXq&o)%goy!A-6Js68h<0#~eJoJANLu_Rc#&<9|T(t1t3b$4=ts#aFt zxX>YZ9J{S4q-#w{byX+;SHK8YSHLis@aGGhI@nxHA;XZpVV;V75usEHzjTY*W!eLy z%iE(&ja$8PmybGMebM#R1#jHqF8E;w4|_ZIyZhE}nw%6v1M_Uiq*Ovbm;%mcIGywR z^VyVh9Xu>PmmBUZ8Ko0bLIrFU=EkjFxmHS$bN4Drj`vM#fT`@caOe52lQ5 z5&umCO_jYSN@GfZMG}lqxC|Bor!yQ+@b&@kuE2}fZ>G`1qQnb#mM*zEY*Y|OzjMUC zxB^mhv(RV(p(@OUyB4-v6a3R7JU_x$Pw?r<6tUl0NHlfM5hV_|(XHllgv4;op73!r z52}jtDOhSBN0_37qMs`aA!FyTc>=US*q zG>e3{_8C7{?xKzlnlp3P#{DOy6A+*H*3Lzr706sAimu;gPzBIVSP_V{a}K=zMJ5`yudH7%F8>P&cblbpry>x zb&=RMexFNkzl}AN&|5-bn+(LRS3`&W1^UXWo>~yxGzjH?o4c?{bKhQ9(AGIa@3wZ+ z-8Q?WVs3ru;p1cqczIJ^-pmW$KHzjw#)$>sDRYeF0;6b#tDu@Ky=kMp*4$#(Vr$yM zZfCjWe9ln&9zVV2DsMs{EiQmbVf{^O8sB-R*LC)th-LiY3a5*^{<{hO>aL#>UzDg7 z(=!WHswsX|mAV$Y?;Y?d>aiIv7lJ2{QrmAPH34J6A4gNd`_YoqaJ7;Zf(pwVQ=ZX`93!NT=X~G&4jw%* zHb50?>x8aV+BU=QfY&7`y6*w&98eM-RaQV8q4~i0xp7g8L+|4Q{6yUA$_6*WM~o(d zL>U}Noi4)e;%%^Ze`v-h5gJXM!$S(bL6^E%@H)*}_7Xuw5{%N*)VZaNi%e4icZVg7 z73gf~fa~|A&*g8UHNLuXhpQwAJ+EMNtg+-9*S=o1%jJERegDc`qVzNc{9H3RlUwUL zdJQfbp6L7*N$3kq%bFgaHP`k4Pt)Yrjo+@yW64gh^qLG@s=r!%yE0Cxgu0}&i#Bx4 z;0CK(*802SqjX;>T9Z}w_M9+IV!eecV)SF4i~K@v+SW?=0<-=Z98hSWU&Jy*OkLD&r-_mQP@CGe|ztlT-a=^V`eJOGmQyaPc z<1gv<4#|A;{Y>_-Ve}s31Rq=bo31mjycQvsjis5%THP~#quhbQ*|fKOofa{@W`+}E zw65=8(!$?(C3itKkvB|_IJm3YIpgF|okYbvo0 z^lG#6c~TGS+!x$>z*_jR7*~x2r>9x?w(J*LCo-Gd{AlSpWoXD}Wlz7K$-Tz;vLspS z8aAyabh_V}CsdU|=Ht=m^z+GCBliYoyDqx&04c4cnaCWj`M6#)7at&`ZSx#(TQp18 zsi+PG2`Zn$rr>A>`x1J`eV|>nt}Mckt%?WO*x9m{egFX8l4Hh!Qm2 zL3x9FLO|lS_CDUpjQtKSy)aI>!<(g`!|#Fe`%##n@hlFxJNpE_B1`Af|;H*?|2CYk@vs$8zxq%a8{_9QMK{CQ+hHK99IujGVbR zClQ@wnoAZMZxXCsXJswDz!rS&jq&Na41R*GiFUbdVefm|!rhwMV)b|~rbFX097^j) zax3>9JnYTlF^N9xg?%xTn5Kf3cSh=?V5K4itULOW2P8(Mh=$<(9Ez60ZoT%0GRj$A zK-2BU+&4{$`s|+5te%?TY_q@5-^qv9V9c@hXXCLXHFd3oOjQv2Y!^~%t7dEl|#z(eGZv%BYTe@awW26qF{q@5zga!WU+s} zdbxG!ya$=F!IKKMLE>5zg4&Z&eYZ<4I>cT;jyVBER@XUKj(Hb&A;Zxaa)i(c3zT$x zQ4UK31g_|dZ2#gyzkQhHKYS8BT#YXX7xtt)i!kH+g~9d+^-1`Md~35)eza?3-hKiY z?K`8b%+1PKM9c~zajh}Ah~%wuE9%P1uci_ioJ8z9ND1$~On7Ro@5K~k(-WIL zLw|0>9wMrJyWEV}X2R5~uDX@QC`)xgmPTeiUGi>^y(=NMyeyTFJ)!h~C~sGf_qFhs zVy{s`c}4z7^muW`D1`wyVO!>VU}{i)@*UMXkC6u3G8>yFb4e)jRixHAI!Dbz&BPrH z>Wdc}VLNJ!_O)qrxebo&{%h;^gC->eh6usSoubQ`WAcRw;p)P_0WTnDU~GW@^w@uJ z7iocm+GkM}?h_VTDnza4o{JcEr3|BT>4kH#@o}*yaFy-z$PKQerV?Aya?wY`oN(c# z6pJ%OOhB*jF7Pw(SC9{|ho=4m+bRAG%qTmAC+sPb3ZZuP<_02v&O7GW_vl>nuCac| zLZ>8HK0HxeB)Yc91qm|*E4}FK3X2zn3Q_yatHb&)!2bZ>1Fz~2O#Inh{%fonJOIz) zkC~vfB2s&Dyw&z%3X(M+v8-;%>Y96q)K5f7T<%m{Uu@7;K_Gs6yt1Ud0q@M z7Z$v^Dx`6jtT$T(yv>4(T(LxVa^ZhO_(95X(m@KX442Wg|RPHOpJ~Q6Dw5SQ1cY*sRzldG1~tEen5D^L*N%I2V9Gbj=&M+1L1f6-L&wA;1Xo9#~|gO#i(md_!aLL6KA=z zbEGV1Qdm64c)0rLnZC68&uTIMqgdSkH}DsQpT(5ZH?F0gytgo+Sztz`E(ETK&D821 zKdD0(-V)PcfA1LufI^r;w;Gvk}`5z8z5%@xnOnv)ddZ~!~OpXya=3X7#gkS zK_(f!veiJR_JGj_#GWNqK4H(^+9Ne;9hD0omM9?7?Ms&b+$609EzW%^qM=A`nn+SvYA{4blC)f1jSvcvEs>P6 zOBzdBh!)vq#>^PQ?E7}-{rG;k=XuWgJ!koSIa^-fAuo+}2I~L-8b01|gaTpz)3quJ zTi%{UQ^1-tZvJinJkMV*L8>ZzqeyRrKLBZa0Ki-WK%@v^C;%iu0HB@(09p)yUP4*N zVJ85TDS>{$9*P3_zYCu)d+?AM5JI+u5}e?~OK95npQ7=v!Z_42^dJ#&j9gL85{cxC zWQlJO$;4{G!Vcfo&aH1^o7vzGhmx0RQlG=5`33RRH<76|J}8VVmCBPY(_-SOPg^(~ zj?B@Wh$o1@{SdkNEDDA4m#?|~@A%nys|7`j>$g__E@YfbT)vb_J9B}G&Y(q~r>0?6 zE})ig-KAf-wt~r7EvsZz)vyXnm_MgQQ{P34BuQi}^+-6yCyTC=l~;l2at-( znIf^AKor}$5IVYfP0u;Y%Tj?r=Hb6+Zi^2&L1D9H`B(;>F5PF3Z)jq_>EfZ%XxI`) z&~dV}2Qem&`tCiyyN?%jj(XrAk;{|GWb)7B!rmEJ_-5<_>pIq zUUhK4P6jQ-6FS(a7E0iV4(`L@= zPVTQ+aqb=Z#H7&1i7-7Qnw=BF{TBU#NcV~vVMvNZB0qG5%;m~fR;9`5w3Zi~u3jF4 zDUDBBPD!V+*s|tU&f{A4^ES@Vh=4?vAdZplV(G)90y|eiNQ7cc%one?`|a`fA24}* z*+n!hJ!{3>c443W!k>{8M|VY+7U6zGHy`2>RWdmxJeNp)JIE`qWWv0OM3Q)7QULQ_ zY-{JZcoE+Z^RMNtrf1Q9{t`B~vg@9*I(xXG5o8-@!ofd?li!534eZ#2<*FwvxbI@X zQBq)tB88VoWOTa3!Hs|$<{t?so7pUslryrfubhZl3Jf8M#WJBt#^FeLJSmGMRrI&0 zlvz~9;Pa(%C@OVXav4LjbHS%%(4N$@diuF{3g}JG+3g+N)>quF9v+z@Iq18Xn6g~@ zh-r0zz+_1?vR86%(~HWOA3h33#{|z>IcW}YIK{53qY#IJfNB0D`?o@AH~vABwIZl= z%GV37Bv-bWRXA!WAAb)us;cH@p!;bjXRG4IcKg8Hf(te6IbFRePw)2_18r@unsP)~vw0H@W^U4~*}1!Qd_)u4 zE&5jSW9G+?nN+$(*PQEtxj8yt+7f@}`i!N1AR2AZ-M4pOl(K}>emjjzX^Y#Lp3#*z z7k@r^+m+&Z>tt8pLgD8#WrGn5NCvTbKf_Q@TYr-uH)rP)%&iZVPFHLD>-_)f)yKDl z@1jD?zAO}71fJQ+GWXpT+V@9q^f)2DhJ@FvqPMg;T4V91RsRj#KKMq}!YFN*ZRiE> z2!G=;)SVr$+vhQs0(FQe%o#I$8@X;gXv_9SwS?`FHx7!@Jm)IZAa^X^?Jn=57&&7c z-b1!8!972HRw*9VkKXBA`URN=d~PcRM7EkYnWTYv&)C;_l;DO5j5RFH{kpNW*;Y(h zsqw%z#86@N*?k~2h!tZ(aZ&s8eoN#jxVwI~0$^t-tG6ut*) zd2bXo)4V3is;2N%iu2f0o%mSWiI;Ho&;jgJ!3XG&r^>LcRf!rFV;~eBz57m-rdm;7 z5_RruRaADY@kr;a-=6ckgWqSTI&|kzml|@`+%y)Da$C%EsYdLFdixsgAGHN-H4A(% z;z0Gd=F2Zx>&x@!D_=HljR7%R`5YJM!`nL=N#Mb_&)C#NrzkNxF;P~D8EkAp-WrRZ z9?`M7>e%hnryEcptNqM4JLp_Io}~0Jbu$$7VKld6E+FjHKvQ%GriWZ%4X%C4g{l(U zZe&cS(9mw6E2e$Ao$%E+Sv-o?qM?-0r*|gyb~Fb08TG}XQZ>#*sLgAn&rDFXKl}A; zu$skMJArgFoKi&qI=f3F9Gpbk88S5Md4z@8tPJsN(%QiEJwq5fq{?F#*yj1me<_KN zr-DqxR`_Fn<$55&s5!vS$SZtddRhrLu$qs*V0`;F?tq~mUlD8shM85$#73ohCk!KF zeSQ^ktoG62J~D-sW6*+C6Cmm`xVD?;HfUs+fuS}{4K1xq9MEI{+&esfB*#XOZEiAe zq}AfyAVZg__UWdE!PaSkYWppcC31wpp#lodO8#wbO%megjIO}<%|~UfN0O!?sM?hz zwCGjY+_%F)_Pu%Fk>y)aH`eQ+D`7DNACW1y?q#C+A3Oejde_-TOy98BkE?S*Nkfie z(NsE zMtOvyqL8T5(8!CY6#%RtR(2K;TMJ8@U@I#q1Ol~mG*egzWHdp!_WuYM;-k(+r~W&k T!=gj+kO1)UI0S#@e)8%+1Bg#- literal 0 HcmV?d00001 diff --git a/packages/frontend/public/icons/ed2k.png b/packages/frontend/public/icons/ed2k.png new file mode 100644 index 0000000000000000000000000000000000000000..bba27cdd95d7814f3e889b54fcd87785eddc1e0e GIT binary patch literal 2002 zcmbVNdpOgL7yr^LbD4Nkldo=KX}K&Sw`7Fo5|)0G+~%I;x>>d{E0=PA$uPXir9!_V zE0rM%y(xE_E}~qT<`RZ2ig$1S{r>np&+qx2=Q-!|oO3?sInO!&d{SLb+d*YjWdQ(y zqEDT~h|%&NSCkaTm}1i|G5i*cazX*XgKW7UI4N>W?0H7xUz?!&3pBA%` z0KoSJ0MkMMfJK%xx|)j{Tm2mDPHz4(8F%4`xFStNJK0F{r4)7oaAq#jSj^#~Pomsn z-_I3Ok&Fv!FB7g#Jc$|6dub^9XXtez>KgYJIFLDX3X%Lfw@?SslTY05bsNOr!c>PL zY{F)_{PG=$S78SxqsNI_xv$$c7KbuOw`~V4c+7h|!LZqwut~7qEimad|3)q~$@s|r zv&8M}Wh;ox05opKMIxz85@Ic-m?FDReut$Bf{t_pa82$)x}${T_vaGx8%UK8v5*9z|S+FwUZ;J% zGa^U!K(4B#{4sSfqBq~gyZpT0WYF`+uLvCMgo=AKp0RftuJSHcW3G{m<3DZR%Yd1O zE&Us!hiLmaht;}CBDl79ryO&=HivvHHc=;&df|Hzz{6OFJAu_9ZujXxDkkbmS4H6t+kR;-#oux}+C+fq? z&iK}yZ{i?c`Hu>ZrD(V4*IVqb`+3ppTocS}{|Q0~^BKM?%?YEuOUlF{YBeRLB{qyZ zGQrhC2`n@HeLL=TV6l#PVEBziz^D$dRq^}riF1r-brP7=!k&V*PCl^QI%z306i@Wk zc5ltI+tYwz@@CXo$4&HthgRH{ItGKg^PguP1L18}?(4dr9aUFa<2>ZdSvoH;O6&5- z`NyOig64Gp_Swq*km+OtJ_Yf8Sm*b0>$QQN``N`f3N5~!Zg**exqN5cdM%BDr<5z_ z8YZsPH#fj9_73Fm4i(&8|1`h7-@-W&E|E%up|Bc=<(`zZdh7#-6E6LmT`g@J#&3af+>?kiZ5YZxPh&86L^q?b z*v>g0-jA<7#oeK28JhTcyHa*Sq_VxEsDXT+lKafyXQjfYnVtO=%SQFq^yP{q4jeRa zg!AwTtwGBeI+gMEgC8_SaKOjKKJAKiW+YP6|S z4-`x}X*fF^XDHapV6N1vciOmjpcAqd-GM5}Pa{ZILxS+xrLG#$f=ej_g41Q#Z=o*< zQ{(P*NkCzMid3qI66Ad5aXR>ga{R4Dcx^Qe9x3Aff zRFy6Gl$cyl{n}J}0xJ17{Ve_CGbsq`M(|HBS(0!19r3eky@~_*&^$|NTY&PcCH#qS zZrctKf@b2e=E+O-NZd|CbtIL0)@`B77$f{Vw|G1PMVv#^9!Jg@xa)yF_w=rQK7iBB zIYCOSXs`q9y^j>fg{n*aC~8{zEaLkq_toEBb4itM6Xg151+@g9K32n&wiA1=M2@yu|2p`+19wi2{Vx~K;uU_Z z_XPK#*;0%&De*v+>P5rsN5jm#Cy_C}>MV?h2789_hmQyEdnNWBTVq z%r?VZs8Jtswp|75QGbOp(s6eWC5KYMl+3k`@b@F((6OAriG0*iK-=2Ps({cC{GE|1 zODSrMj*|1e#!Gk}4^4EzI0{5M_OP|i%iuqQQRX2KQtUAu}#Vz~>9$Hqg z;P&E4O$K7DsS*ERn?kS%9$~$1wHbDB+VP1&BjZB}BBbUi)}m=VVE#)+7Up!%(DH%! zK^t^4tiu2fInoVuy}T){|NjfaFDWTZ0E~t+w_jke#F__a5^dax0XSlyseg2!7yx~w zzL5^nQ0K@|H+_9mB+}Ht_^>!4k$UP1;r}rZ77=hEi2UCNyb~G*{#k*xIeqfJmG70m E0m2EK@c;k- literal 0 HcmV?d00001 diff --git a/packages/frontend/public/icons/magnet.png b/packages/frontend/public/icons/magnet.png new file mode 100644 index 0000000000000000000000000000000000000000..7eee508be80ba19ae6a90d1c2e37fb9d01bcce19 GIT binary patch literal 1278 zcmeAS@N?(olHy`uVBq!ia0vp^4j?SR1SCsmTb%+@Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJco~stp(zUL`OvSj}Ky5HFasE6@fg!ItFh?(!cDI3vE_0gAAf zc>21szhdPRV^Etp$-n|=K9i@5V@SoVx3hCIg2N>m&j0mba@xIUqwj5rrCGXnZ<+4= zxiI;J!-}r1Q!^BPG`6T+2~4p#uE07`QDf1AD9yRjv#;e}Sam}_I#i>>KIdI%^u&ir z_DOGzX5Ui#eR0;E{=XJ4&uo}4R(Zbk{pZ&oCKXr2&#S&y{jRaVZvK7weqk04IjhG1 z)*1{FA`CoS3~a0n%}foBj0YAlBm^)R5D<22@oNxp>MNCxoOE?ot#-Bicgx-*F&mqY zEy~w!p19vSZS$vH2e)qB7H@8zAC>T1$@t&j>tDYrf9rdA?p%m?&fA`M4An>Eo>Yl# z+Y#e*JLlTONpgpS_+!te7-%&pnR@h2yPR)+y{;}!wf^|kM@1hu2mM%==y%}6-id;r z1ZAuDPD;tF+g-Y3$?*+W_U=^6Hc(&i`Nd)>)3hlPd7mt^6ei{CwS9o8XI@WH<*g4N-W8G)ZHz!%&vhKU z4`lS3{Asb2$vY{^QmuJ7-wZBiZe#TGCIkckT$EqWOe?Q3| zeYl~l*KG;g%8Nx=pCTjwMn3;B=~4c)dt%!zbDTcgerN?lSIpd-9V(u49{E1dTeU)9 z_0Ib{e=qs6-dlf8)tAam_4~uvV~?k7(0$NT6vQhe|8cTQ-Ok5W`&TWnt>3$$a?yS7 z^>OmH&I>23$!l7dkTpZh;LpYov1*);2(vg@MrSzCE8?DX%IWVw)j)BTT1 zV1};6f$J81)-p}zpUs0VE$*)^J84#I^IJriqvEBU)e`ny)5^=U7n?lFogj7ei|oYQ ziP^B<~nzNlH=oyl@!8{fZW z^|xkUu6EU5G*NWj(?zL)Kksd_GW@%z-6-yQ+CdX0jkk)CeoOZ=Ut6>0&9<<}+iUhu znEY|`#~mL(2k(77Nv!Q$VcHCzhMelV9U1qRCqF&&_siXh7un}NK4UPmp^=%H`PUtf zFOh5i%{Q)FCQ*Fwq5acD!<&2+{~d_TGZ;B+Mm@t>qo5bjmmYit77(f>t`Q|Ei6yC4 z$wjF^iowXh$V}J3RM*fX#K_3Xz`)AbLK{dL80ahU<)LWE%}>cptHiA#u72Akpaup{ LS3j3^P6!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJco~stp(zUL`OvSj}Ky5HFasE6@fg!ItFh?(!cDI3vE_0gAAf zc>21szhdPRV^Etp$-shvf%&(mi(^Q|t+%sceS*_vj@_RpcFQS~n|W!AsLEAE?YW;9 zOH9nWA$d0?EoOq(9)lEdY2!0GEs~pcPCx2#);sa2Cw_vC;w;@G6JA`gFjef)ja_cA z^1zZc7cXr%7499qahlR@i_?!bap}g{EdTs}w^e1)y=OnaPyasW+m=Psrfu8S$LH4Y z-~#Ksat{UxA%-@V21UjMqL~vHa3AUV!Ct7mJ#K&g*JvyMvWuJA&K!RAc$L4XdaC&n zwalYmt~UlB%$k2PTs&igIDeS+n#tD7qL#t8v{ z#eILjM<2g8<4k8vpU1PlJqu302&v7eh$*QJop?uUztZ05GhH+KeDBP+dQpA;=ij@c z@60b2ySQJlR@fi4`rO5t!9JpHw)12DF8l1g`n>7$b6-pTeXqIsJ1D$p$tSZg=HP@x0wEW+IGh2-wkV%wR|t;eY^I##n0wao9f@6 z``4GfdnW7}_Dbz%e^BR_fFkRvSuZ%E8aCOiHTo)4Z!`7bR-byo(^~&G9ys}6UH#rZ z9bMI{P4m>On#2qynpfUkW0)kF|fBmF#Any_nnPGlQ7l`JLM>PWK%1t!%rq zAx(GwZLg|HzxsRnD%SP(FS6FVAs_oda+P`USEbL_c-QZbUUYVL<;SLD=brDM_ipV= z`AxUkl=}X@=ritgk+=KV!mEJAw+4DEu@c$3SyLxs)K@PvRUf$gVOCA)zqWU!*UneXt$DQm<9x1nNk!Mr z?Yi*xk+LGIO@x{8p9=-gn;%a7{_7tn>#sHGhC-i&zSJuzmNzWZ+O7H8;b-gFpRc!n zJ{jt{{C1R`+?*dLeoKH|(s1L@OUvzlHofWDGSh#DnBSS)RHb7#;!1Y^Sl}%n;rL(a zn~j4t0}m&IGt+?y3zFZ(kPSTd-VxJHzuB$lLFB^RXvDF!10BQsqC zQ(Z%o5F;Zi0|P5#3vD22V4$zWmxrPuH$NpatrE9}xcY6EfEpM)UHx3vIVCg!0JDTY AcmMzZ literal 0 HcmV?d00001 diff --git a/packages/frontend/public/icons/pikpak.png b/packages/frontend/public/icons/pikpak.png new file mode 100644 index 0000000000000000000000000000000000000000..c833bd5047501a982a724920f53c8c589055a614 GIT binary patch literal 3333 zcmV+g4f^tlP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 P00000NkvXXu0mjf=58j5 literal 0 HcmV?d00001 diff --git a/packages/frontend/public/icons/quark.png b/packages/frontend/public/icons/quark.png new file mode 100644 index 0000000000000000000000000000000000000000..def9d10dcaef5e124ebd5a97ce5e3d9049bf6880 GIT binary patch literal 2906 zcmV-g3#IglP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 J)e6Xv{{r+?00004XF*Lt006O% z3;baP0000WV@Og>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 FV1ft=tlIzp literal 0 HcmV?d00001 diff --git a/packages/frontend/public/icons/xunlei.png b/packages/frontend/public/icons/xunlei.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ca7d3a8bb132f1b7806876e033c55a49a37131 GIT binary patch literal 6395 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 = { /** * 网盘图标映射 — 全部使用内联 SVG data URI,无需外部文件 - * 每个网盘类型使用其品牌色圆角底 + 首字母/中文标识 +/** + * 网盘图标映射 — 使用仓库中的 PNG 图标文件 + * 图标存储在 public/icons/ 目录下,Vite 构建时自动打包 */ -function makeSvgIcon(bg: string, letter: string): string { - const c = encodeURIComponent(bg) - const l = encodeURIComponent(letter) - return `data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2224%22%20height%3D%2224%22%20rx%3D%224%22%20fill%3D%22${c}%22%2F%3E%3Ctext%20x%3D%2212%22%20y%3D%2217%22%20font-size%3D%2213%22%20font-weight%3D%22bold%22%20fill%3D%22%23fff%22%20text-anchor%3D%22middle%22%20font-family%3D%22Arial%2Csans-serif%22%3E${l}%3C%2Ftext%3E%3C%2Fsvg%3E` -} -const ICON_SVGS: Record = { - magnet: 'data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2224%22%20height%3D%2224%22%20rx%3D%224%22%20fill%3D%22%236366F1%22%2F%3E%3Cpath%20d%3D%22M7%2016l5-5m-5%200l5%205m5-5l-5-5m5%200l-5%205%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20fill%3D%22none%22%2F%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2211%22%20r%3D%221%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E', - ed2k: 'data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2224%22%20height%3D%2224%22%20rx%3D%224%22%20fill%3D%22%238B4513%22%2F%3E%3Ctext%20x%3D%2212%22%20y%3D%2217%22%20font-size%3D%2211%22%20font-weight%3D%22bold%22%20fill%3D%22%23fff%22%20text-anchor%3D%22middle%22%20font-family%3D%22Arial%2Csans-serif%22%3EeD%3C%2Ftext%3E%3C%2Fsvg%3E', - others: 'data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2224%22%20height%3D%2224%22%20rx%3D%224%22%20fill%3D%22%239CA3AF%22%2F%3E%3Cpath%20d%3D%22M6%2013c0-2.8%202.2-5%205-5a5%205%200%200%201%204.5%202.7A4%204%200%200%201%2020%2014a4%204%200%200%201-3%203.9h-8A4%204%200%200%201%206%2013z%22%20fill%3D%22none%22%20stroke%3D%22%23fff%22%20stroke-width%3D%221.5%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E', -} export const CLOUD_ICONS: Record = { - baidu: makeSvgIcon('#4e6ef2', '百'), - aliyun: makeSvgIcon('#ff6a00', '阿'), - quark: makeSvgIcon('#07c160', '夸'), - '115': makeSvgIcon('#9b59b6', '1'), - tianyi: makeSvgIcon('#00a1d6', '天'), - '123pan': makeSvgIcon('#e74c3c', '1'), - uc: makeSvgIcon('#f39c12', 'U'), - xunlei: makeSvgIcon('#2ecc71', '迅'), - pikpak: makeSvgIcon('#8e44ad', 'P'), - magnet: ICON_SVGS.magnet, - ed2k: ICON_SVGS.ed2k, - others: ICON_SVGS.others, + baidu: '/icons/baidu.png', + aliyun: '/icons/aliyun.png', + quark: '/icons/quark.png', + '115': '/icons/115.png', + tianyi: '/icons/tianyi.png', + '123pan': '/icons/123pan.png', + uc: '/icons/uc.png', + xunlei: '/icons/xunlei.png', + pikpak: '/icons/pikpak.png', + magnet: '/icons/magnet.png', + ed2k: '/icons/ed2k.png', + others: '/icons/others.png', } /* ===== 视频解析类型 ===== */