From e5f120c2e0c4611580c061b6d2a2bcb7f704b202 Mon Sep 17 00:00:00 2001 From: everestmcarthur Date: Sat, 1 Aug 2026 18:37:30 +0000 Subject: [PATCH] deploy: c4b114c574867ad5cb62afe35e5dbb8f24c5d029 --- plugins-data.json | 28 + server-drawer/index.html | 736 +++++++++++++++++++++ server-drawer/install/11d89273b5bd6cc6.png | Bin 0 -> 776 bytes server-drawer/install/3a73d84a21043a5e.png | Bin 0 -> 1407 bytes server-drawer/install/4d1aef97fe869aaf.png | Bin 0 -> 1353 bytes server-drawer/install/88eacd3588829ded.png | Bin 0 -> 844 bytes server-drawer/install/8b628d7e3fc05957.png | Bin 0 -> 1224 bytes server-drawer/install/9901722947705011.png | Bin 0 -> 938 bytes server-drawer/install/a738efc867a225ee.png | Bin 0 -> 1097 bytes server-drawer/install/b0d124bd12658047.png | Bin 0 -> 2184 bytes server-drawer/install/cb7a2c9b3fb9561c.png | Bin 0 -> 1289 bytes server-drawer/install/cb8b45023e70bb61.png | Bin 0 -> 1121 bytes server-drawer/install/cba17334eeaf3198.png | Bin 0 -> 1077 bytes server-drawer/install/d170a10bd3781e4a.png | Bin 0 -> 1453 bytes server-drawer/install/d6a4e512cdcf1078.png | Bin 0 -> 915 bytes server-drawer/install/ea31146eb15fdde7.png | Bin 0 -> 769 bytes server-drawer/install/f47fd463dcaac61e.png | Bin 0 -> 1139 bytes server-drawer/install/f944dbd033a60207.png | Bin 0 -> 1186 bytes server-drawer/install/fead9e69933db668.png | Bin 0 -> 1287 bytes server-drawer/install/index.js | 1 + server-drawer/install/manifest.json | 1 + 21 files changed, 766 insertions(+) create mode 100644 server-drawer/index.html create mode 100644 server-drawer/install/11d89273b5bd6cc6.png create mode 100644 server-drawer/install/3a73d84a21043a5e.png create mode 100644 server-drawer/install/4d1aef97fe869aaf.png create mode 100644 server-drawer/install/88eacd3588829ded.png create mode 100644 server-drawer/install/8b628d7e3fc05957.png create mode 100644 server-drawer/install/9901722947705011.png create mode 100644 server-drawer/install/a738efc867a225ee.png create mode 100644 server-drawer/install/b0d124bd12658047.png create mode 100644 server-drawer/install/cb7a2c9b3fb9561c.png create mode 100644 server-drawer/install/cb8b45023e70bb61.png create mode 100644 server-drawer/install/cba17334eeaf3198.png create mode 100644 server-drawer/install/d170a10bd3781e4a.png create mode 100644 server-drawer/install/d6a4e512cdcf1078.png create mode 100644 server-drawer/install/ea31146eb15fdde7.png create mode 100644 server-drawer/install/f47fd463dcaac61e.png create mode 100644 server-drawer/install/f944dbd033a60207.png create mode 100644 server-drawer/install/fead9e69933db668.png create mode 100644 server-drawer/install/index.js create mode 100644 server-drawer/install/manifest.json diff --git a/plugins-data.json b/plugins-data.json index 6e6f65a..aee9517 100644 --- a/plugins-data.json +++ b/plugins-data.json @@ -131,6 +131,34 @@ "sourceUrl": "https://github.com/everestmcarthur/revenge-plugins/tree/main/plugins/role-color-everywhere", "issueUrl": "https://github.com/everestmcarthur/revenge-plugins/issues/new?title=%5BRoleColorEverywhere%5D%20" }, + { + "id": "server-drawer", + "name": "ServerDrawer", + "description": "Replaces the Quest Dock with a server grid drawer above the YouBar - tap to expand, long-press a server for its context menu, plus a one-tap create/join button.", + "authors": [ + "everestmcarthur", + "kmmiio99o" + ], + "category": "Moderation & Appearance", + "status": "revived", + "accent": "#F97316", + "tagline": "Turns the Quest Dock into an expandable server grid, above the YouBar.", + "note": "Fork of kmmiio99o's ServerDrawer. One lookup (useMobileQuestDock) was missing an optional-chaining guard - if that lookup came back empty, the whole onLoad threw and every patch after it in the sequence never got applied, not just that one surface. Fixed, plus every patch call is now wrapped so a single bad lookup only skips its own surface.", + "howItWorks": "Hijacks the Quest Dock - the strip Discord normally uses for daily quests, right above the tab bar - and puts a grid of your servers there instead. Tap it to expand, tap a server to jump to it, long-press for the usual context menu (mark as read, notification settings, leave, etc). A + button opens Discord's own create/join-server modal. Optionally hides the left server rail down to a single DMs icon, since your servers now live in the drawer instead.", + "features": [ + "Tap-to-expand server grid with folders, unread badges, and mention counts", + "Long-press a server for its real context menu, not a rebuilt one", + "One-tap create/join through Discord's native modal", + "Optional: collapse the left server rail to a single DMs icon", + "Toggle unread badges independently" + ], + "commands": [], + "limitations": "Depends on several internal Quest Dock lookups (11 in total) - each is individually guarded, so a future Discord rename degrades one surface at a time instead of breaking the whole plugin. Drawer position (left/right/top) is planned but not in this build yet - it currently only replaces the Quest Dock's native bottom position.", + "pageUrl": "https://rp.jarviscli.dev/server-drawer/", + "installUrl": "https://rp.jarviscli.dev/server-drawer/install/", + "sourceUrl": "https://github.com/everestmcarthur/revenge-plugins/tree/main/plugins/server-drawer", + "issueUrl": "https://github.com/everestmcarthur/revenge-plugins/issues/new?title=%5BServerDrawer%5D%20" + }, { "id": "staff-tags", "name": "Staff Tags", diff --git a/server-drawer/index.html b/server-drawer/index.html new file mode 100644 index 0000000..d3dce5e --- /dev/null +++ b/server-drawer/index.html @@ -0,0 +1,736 @@ + + + + + +revenge-plugins + + + + + + +
+ + +
+
+ + Revenge Plugins +
+

Discord, your way.

+

A hand-built collection of plugins for Revenge, the Discord Android client mod - rebuilt from scratch where the old ecosystem broke, and net-new where nothing existed yet.

+ + +
+
+ +
+
+
+ + ⌘K +
+
+
+ +
+

+
+ +
+
+ +
+ + + +
+ +
+
+ +
+
+
+ + + + diff --git a/server-drawer/install/11d89273b5bd6cc6.png b/server-drawer/install/11d89273b5bd6cc6.png new file mode 100644 index 0000000000000000000000000000000000000000..323afc3cf582b7c11e68c6cfddbcdda83e83f552 GIT binary patch literal 776 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77c#(L+3xA$7*Y}U_QpcL!vQj_AM+(9WH`LxRB&u` zQhLZc!Fz*-K}wp2%8$K_9x7ZiH}5sxYGe|bv3u$7<+nXOHb1#HCw|is+q+u(OhjM% zsLj8TlwG)?l22ud)Cz8%2Eh+g?G|q-eLQ{oOOYRZR_u9=y%mZ-+4LHIS1k0*^uNHc zBU-4vi$`uLaBxRCAIa zaQyIiKKnqi^AYCEQ-oHW z^p_FK@qYS?FN%F#JV0UWWLx##=)yFIe31|AYTh2rPozylLDA{y>gTe~DWM4fN*D9W literal 0 HcmV?d00001 diff --git a/server-drawer/install/3a73d84a21043a5e.png b/server-drawer/install/3a73d84a21043a5e.png new file mode 100644 index 0000000000000000000000000000000000000000..6beb211df484aa3ee88dda03dc862a8952d4db1c GIT binary patch literal 1407 zcmZ8hc}$aM9R7OIa(o4$C=>=1IVxAm-6~{$r3A{^70Mx^g^5s+BNPM#l~zDO3`Gu6 zP(MHg5o#3zBFL&kWV5SS2Wp+JiD;;bs3>fRY+u!6$=>97pXYbK`Tg-$aiT&%1F``C z03bV*#YH$&2ZA1Q^XB?O5JCyLAxuE3wALa9HXVwD0N`@1;Ytb)vGsF96NLakyr~1q zoElb!I4$yn6Y^tncIFqRNK0VvWV2lW0%G6* zG71Nv5EX{N>YLWRhKj;`@uLy#i9!P=2ya0kIE4M;--T%1dA|n*%wqoI{|yC@kOU84 zkxZJGHw^`U?W&uIgTHoaK(y|lk-q3JnOp`PQQxXOX*69_k-fGwEN0dk*@Oq11;rL^ zn`^m#WGm0&(3ynYW(hJ+*_b;zPUJ|rOmK>j-5X~+J}w8#`Kv(U50fN6*XlTN1w{rC z1pbYu!qF7lpkuy^6eFgawYe%HZ9(a^I1!q4?#Ys!wx4K@Cn4Y{^O*p&`r zx8Nw~qWs#vsElVdMrAFF#nPjUUnpJpQlnBB)VILcqBp4}M;e42<08V!F*ebU6fJ13 zCyARxS!Vb5P;XgazRzf`9}qA5wPj}nIgOSyzJMb&nV`2<|J0?~YQG#~wTl~Gb4Qie z+=tIvXU#R!le58aTBfl&UvjV!^ibG$&C_}SDQ1}5)UGv2!r5RhWd`jWmnWTzmkLfU z!t>wFXfF4-M(*X@t(L2BUP;9>o1T@dAurUFMl z{AVqVF>GGJD@TeTqTf<}r37B`rH=gw2I%W=?1oU|PYY^IP5av+RFltJCx_X?dKC%N z@_Gq;kW5NV#zZs4BlKR8GX*-3!6DSD+M6WsIx>krb9L#WgTrhg=p{6yzbK~11&2;% zfnJ_y<)f;!&Rur);y0NRQQP(3Ij>!c|dp$jwoPaQ7gf_I9MP7&9!>kNk|4+Lwx$#j#? zM4s3~FnR1JA6kI4vEdn+$`f;AoF`sw5uEh*;dEn@r(j&i=8vxndVM1MSG!I7F{L}E za;(PduB@KZBeDjg`*!3~KP~ZCqM4BX*JdqmYK%11;se7NkaVHEnRZXuy@lbZ0m#G!Qff^xbXd00G zT5MOAWBR03@pFpC8+0y;Q}Jd-moIcI=ENs!Au|u)3|+wvFTfWio0WrugQwyL_g$kB zTCPT`kMJB>M_;*olKuu2^r-)SC-{Vy&wPdlYDC+6ZMsK7OL^F#dsCEY%e7+r6~jk2 V9!*&8(8TF}5q5ACOUmSn{{;+cCa(Yh literal 0 HcmV?d00001 diff --git a/server-drawer/install/4d1aef97fe869aaf.png b/server-drawer/install/4d1aef97fe869aaf.png new file mode 100644 index 0000000000000000000000000000000000000000..8a5e8af71f9c5240a42e50a21cff903375bc60f7 GIT binary patch literal 1353 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77cvYC%s)I`978JN-p)465OEY~+aK{%s#~N>L8Vt9 zNF!p#W)H;p-gPvj=ilbI5q|e3s^6nvvqEqw8z4PqPa~~36nz}iLzbZvGnY1 zf%&_Qt9NfUmd>~5VE=#U&fW6O#+yH@DevCBe}(7s4!*2^%fwO^!cgLo%R1K>(i)2o zcqVYon2_!Mw3Ppc=KA<2>)F>Z@8{q0bgB_+FLUvMRKdy9^$gZJ$4^mQ!K!m=wYFM= ztn9A?PbIFfY-`xw_q4?MB$QWWmyz{ zyt=ERp?AFH$rhk`p^#+3Ez6nvT@EH{69H*CbzB> zqnpz%E4*JCGG*ympBXHQs`HFiN!UKfXGMQ zIIn-wjLVJ;X(bChg`WIca3x)q;~M{S#@Fc{LR(feH`QEk3~1dn>8r5{XOZtM$1_?} zrar1);i>9*VHO{kfaEp%Pz~+K>+zmVR-0IFT^46kVVd{i1B2pfHN$JimpjUt#(WN4 zc5A|y#>ZAR9zpz{j+)D|BzUvWn$T1u!kSZarBQ9kg6mcs4W-*nmMoa7BflZV?xllp zkU&s9|4B~S3@7eaEbm;e1@BqNs_4r2x@w8avt0i#p#obt?_6K#-m|+qRDk6}gchIT zj44e{N{Zo^Jb!5XRT1o5QD0`a`ciX}Si^0`V@ob>;oY-}(&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77c#(L`R(cA7*Y}U_U1;f=t7CMkM1wkI&LgY33QB+ z(SG^FRHTZ%Oz2=_5vN|CYH;hjuWWmmj`ry7Z8+k(_VCQopYk2@o$oUZ)oUL9)qPlF zdHlfR>CTJ1`}_TGl${_gb0uMkK?YFKWYl%?o)lTN2EJ7p%3&I2g9f zLAvllQ?E~>RpEs;pT=hkCu?5F0?L~PFEF!bz8Yr4I*XfKNXFyDm(;J8e9Lxd+&^;t z^z!%qsdemknD`H9e$b6Ezqp8XRm0p*%dc!NX|VUr`_uhR?6rA^v*mL6_Q^Vz*i7%v zi(0IEYK!Ay3yxWN{%cQ)^%}A6>S;C;e( z^n({DZeaf-^?NOU!}_oLGyYw!{3+R76f^bu4d%9)d6$YOW;Q=N)W`yIT7kkrnlR!R Y3XVnGPw(7!9F!zHUHx3vIVCg!07)YpcmMzZ literal 0 HcmV?d00001 diff --git a/server-drawer/install/8b628d7e3fc05957.png b/server-drawer/install/8b628d7e3fc05957.png new file mode 100644 index 0000000000000000000000000000000000000000..64417951ad1bd53ea9c7191feb5f390e8f04b9c5 GIT binary patch literal 1224 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77cvYC%;lagjv*CsZ)e+Pi#SR&%-?LKyJeRGn@+Ou z5v7%>!u1UkPVpZJQ8SCW$syL%yYa%a3$L0K!WgYrdvCbr^kvnQrtl2GcU&90&+abR zcjw%jbLaBX?By(WR6kF9|1I&^-1WQ9UA)*bEyeGp!|DH9nsneOMO1{5`GK_oW1se? z87Io+PS`G4Ho0gMr|{lOZ&6&Aq{tO^!zr)}hnVzRp) z;CDtO!gQ-jG~cW15qw4YwX$=Ls%WeVJZHEu&+CqwV|mGfV=DJndtT_`yE5ZQwW;b$ z&trd#+3qpcH}EDzPVH~7eZW(|y<@>C|4Et!e(W1LtgbOKCqLl&5FJ_wt9pmh9;BDg_Fq&1(G%1UIndylUdfIc4g$OF<;Yed9!(PmdC<^!w)RQ#Jw0&oQN|DpS*BZ-qu3^?JSQ%`!k7cKhP3)^Fefo}i-2T(8 zmOl2rpnQ|1`z6!))bJvu^Xbc3ZC480?3-jFdcR0j)AP4TNa-`KPgjp-d263=I?>c- z#2Cxq$2|Q>LBg8*5h@FxEtq|vT2`bg=-Kaxnmj(PzzLpyJ(ypb+ODg;mG-$UbU$CY@!y1# z4*Abc+@890$$7q1k=tIsnlw*nvtLdZ*Uiw`nYe;G?Z(-Qwp`0K9D^l$#Tv6eMa(D; zuwdF2s-w|$!f{)T5yQJ>74ZTh7n^c^rbI{ey{&b8u$%Smk~_~o8h)D6iPw9C#YB2ozQ-bvXeh0%S+|1 zw6^(PP%MbP7TtS9jpJq3YTvhc%PKF}DE(x9(={hV%+}xPV`V^?W3RHWc(%z}1#UR{ Z&oE8wPrj;<#RpJ!^mO%eS?83{1OUpp%NGCu literal 0 HcmV?d00001 diff --git a/server-drawer/install/9901722947705011.png b/server-drawer/install/9901722947705011.png new file mode 100644 index 0000000000000000000000000000000000000000..e2485b5004318ebea02c362e2c841db4f4386f3f GIT binary patch literal 938 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77cxL~k)AG&Ar*0NXK&03aTICWAF(8QTE~jJwnX<(KpYWdh*2YUu+4l@gMm+ zkN$jrCnjJ1?2O!vsUItvG>diFp4o`0Y*1)q<<#*=aAe{ZikNVqiG`X%Yq_PE@-LhA zm_JWk`f$I}8>aP6+t~N;-CVjwD}$ki>6hYsrq>6)PY};6?VMY3f-%DP`?F=Pj?M|{ zZIagAZ`^gctoj_;Kie?#a#iu<9No~o_RE?jOMQ2-*D&WTuVSfTIJPp*J1DLCvPSNW z^p)?Hs5+i+XkJstQgbG2(t`5HzcLnQUU6^PbcF3d-HEz3sRzX?zF$u7-lFtEW$TAI zvlp`Mkk7jLEm|NX>otE8!=0|itlzpET3g>p8)~F5&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77cxL~KRjI=Ln`9l&f1$N94OG*pQ+U7((C=CZ9kh_ zOVd2{1ug*sJDmb7O!XQ34|E3zE@oTi~PAz~uetVqqCZ|~-AeST)|^;`bC&K8>}W6BeXdOQ><|+Qa$B`s1EUM_Z0F+uxpl|I_cTF~Ux2#L@-XmUtH4F1azxc5OEz&EI=ncIPHP0^RE4PXjgMVoR z(`(y|@Oxg{FUc@htUWBX@gM73ug%60{Luj*GC1Hef)vPRtJX*t{a7y)ERfv&gXuuE zWjy1biPCnyBEbTSn{6*O#+>?I`hpe2S(^3lLZi5jV-Mf46*F5^J1!oSFx|X?#n4J( zaoV(vk#9H-c+Xtw^`{Us zbxfRb@BWMhFLaYcqATOG{~i)ZZqj?Awr$FC?rW2OrS!4aU8}Om)_Yo;YAs>ZRMu+P zY+)y&gngyg^B=pQm+rtWS`Z7s>$CY`_Vb&6JSeNed z-7L#5e^lhgVo~`aAYiuFPO>-mGwJPso<$gOL{m?#jvXFx0(t_-3gH zQh)D-!=_kk38Cr*3ww^;xKyY0H+hlzr<1eg*Y*_ryeK>;%kNO|1;avHZtakMoNS7gQu&X%Q~loCIGcZis=9V literal 0 HcmV?d00001 diff --git a/server-drawer/install/b0d124bd12658047.png b/server-drawer/install/b0d124bd12658047.png new file mode 100644 index 0000000000000000000000000000000000000000..f6346dcd3e910fd99ffc12a32ca5a3b0ce077dda GIT binary patch literal 2184 zcmZ8ic{CJy8=e`)GK?iAj5TE683sefZiX?2n8tEN)=aj^R+fnvyWA2Ydr^}tgJfy4 zQ`V$Zh(3|XgyJ6eUf<~6bG~!F_ni0lJn#0r?|;8cJkAaZfkOZQ0Mxn4Q^BOLlj0N` zBE>a4kP>@7Dgb~#A99JJg|l&!Lul!0AtggL>e)T*0YryD2M09(4?6$@;6N|{$YvO} zOa9A`uTcSV{K|vaTo(ue2(gjG_K*zDU-?irKenA1AYh&2fB1h(0qjx%H-MAfsiUW_ z1FZZ<^>`z=@*ky}Y<_GYwl3&bC&3uWX8%s<>gXI-UtT(S72~=t1psgxIas6J;(WI5 zc+=bh#D|k({F_fm3L~?{GINQu*FR=WUC*;tv}X9!Q+bu_Nj!-ukOUXoE=$q0Wu@9m zLZcXbffL=imdyDn$rB;rqb#4d6jlx9FF8 ze18vH32y=u1yN+l=qSD?{AJu)^Fu9P>MUTsvQ5&&KuK)1fD{LAf2=j(6dr~Ibwf1T zbIq#3Wgv46&w9PoJs}-|KS5zzHOO_Za5eYbuOv*Bh9I27e0v!`hV|}0tR|0OJ3vri z#rn6^Q@o5fls8|QvY~fgMcOGIMEQymYn)}2sQZ^+T2d77-~+8;8)uH7l2+UW6 zWzzKA(8P<|M>S!h8g!Ogp~v5#7?%Wj`F2RF0kjP=)gS0GX=)xphzbXb9-w)>b5uW; zSI25`!#?Ue@#~f{v*B|kqw4sx5@g3RlcpM3hq9`BS5-d0b_!sXn5j-0{5IW`m8lP= zlK_!Z#vWhbsPxwvS!CA82HFbJ(wuS?fDFwQwuOngb8j?XVJ`CfS3Lkr@ zk$**T)s7@LJ|-H0OvQ)DlW|z3SDbKAQZ8q&Mt|rT7COBFsjWHgBU{IR>utnC^-Gj>sw9eNqjPei5Qu)0fXk|c|5L!eeByLPGA&kB-{J70-L>au<8EDa}83r{;|i+$gPJY9rCK1%nS zuDQ<1b(>!f_5~*lgek|ZJ{Muf2O^#wqgk;z&*)Wh$3r_i`3TyKkIV=)R-~&BaX_Li={HaYGDtPvLrXV%do+1_t;vPPLZc3RFh| zA#!y00aZa!h`Bwns~OI_o1C4C<_&s;-pt|r+U@ouVJtF!L4)dG@drb%<)$`z4IfUh3>o{szw8FSw z%WJUKeR8K6AztWlK8wF0rrT~HvH#AXhCjJv=eESR2e)(A2Cr@N>(*xy)SuJ1)c#nF|k*WsP`_JKBJuu|#5r=aLXd&mO5(l;f zG;XsvEkPU;<>|Q~qvpg_)B+A&=d~_6^5EwT;7hZ9$AxNCOR6+`AXaBfEB(81&oXbL zw=VfeL*=g%_2pSUZQc#{sp0CP|+S5`bb@d=Vo7Wy!2>=vvY^? P@ptNAgR^e5^u6|9H6o%P literal 0 HcmV?d00001 diff --git a/server-drawer/install/cb7a2c9b3fb9561c.png b/server-drawer/install/cb7a2c9b3fb9561c.png new file mode 100644 index 0000000000000000000000000000000000000000..e58245246f1a1e9f663fac90c253a452724ff960 GIT binary patch literal 1289 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77cvYC%sV_?978JN-p;nox$Gd)u-|Ay>-?3er`mQ+ z(c?IHAb{1-Ineq*%dUegt_??GjvP4eBIqnBxkAHQ=@p05DF&XDw=Oegt%#n!$;SKH z)qR`Ki$8z!YqFB+c}wemMc?23nd9^JU0;UB^BH_5fBcnCIKfezqillg4_==MMttox_j+d<_FitmH`q=w|zwC(y@7b3= zDrN-h{rhxj>NdwshAT%ZwcPtTwIpd^SHMW^&1#vrNV}*%Lh3 z)myHs$flp%s9wr6X>u38Bg69&1!lcmujA7drgQs)oipKd>vE85R9`F7|bBsk;CuK8)$v#oY z4J$S9^RPX!w5M8lN7#Z{0v}zo9=CJ2Uf|dO#B=q#C3e#tI@t?Sgm zk~f9iQYZedpLfR3Gv%zcaAHi8o00U~i5qL>EM^xh-oS4Yv~huiJKv_KlUJO{s*V@v zSDo36SOFHr7 zX!`;$mFVy;F0QJH&za?$vU~#_i>(68yMX+Fo2y0D99MELkuVPOwv@P>>?^+^$EWGv z3x|_DOMch|`ZR4TU62yy91%T}rS?jr(970MH3pooto}LNVLy1K!>4J&C6{R_Zzp@! z8MbfWyftyZ_B2h+U%_z#H&_(!Kdb4ypA~SubXiq^knGDq?x1|XUxE&Sek}&ou1`cu ko}4f`(r41Ezzs+L8U9r(Uw83z%>?CVPgg&ebxsLQ0R8XkYXATM literal 0 HcmV?d00001 diff --git a/server-drawer/install/cb8b45023e70bb61.png b/server-drawer/install/cb8b45023e70bb61.png new file mode 100644 index 0000000000000000000000000000000000000000..48151f66c5056cacae5f8bd4fad7c311442e9637 GIT binary patch literal 1121 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77cvYC%mSV+jv*CsZ)a`n5^)r0`#<%p$miQG&B89u z{Kf~D8yH-;64QK?U7*!;|BVMu@-F8B3=J-%m``#(c!JqCEAj8kSMO%NT=i1&S2O3k z{REZ1=AJ5HWc|3JfIcKxb% z2?Zio+ya<#Swim~e4vuCNtVa2N$ob6`I+B}!|D#_pW7d+jvj4MZ>%=2xqRbE-i+2V zrnNg*A85BHPqc25D^57U%y&#Be1bZ^rNrbI$8;HqqTXi1lcHOuU2d2Czu3TTp< zC^5arWHZx-7X^DCI~_WGU@!N||Bd-_K=Im{UyKE0SbWQPw;c}($l*2nVtM@Sj$0t+ zwdtY_#SHa)^Y(3Lc=x$?=?0M$!~Zs{1^t_p8TvJ}+m6bTfRjhckdU&@8^zjj zpAn{1`bx}MGP;<~hpm#xHLt@f@G0}-($rL#|#f#|cMliwz2=)7oQ zP6WnaD{JJM>1n1-Tk@+twr^Z0Ob=;S3j3^P6&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77cxL~Pdr^5Ln`9l&f2(2I8dPNe?(+fdX|1i$JDL; z54bs|HR%`VFWD6GNcm3CI{##KrKW41({J4Mo4t9#;dApWEkB>1*ZaJ=)gY4X)5gt{ zXWqT~@B_E(Tx+8XKd0+yIEznN$bISpYw8T=3t|WKWTStkX1j3TV%ov-K|yx< z|NK@AJJge^8L|bl+fHb|NOIw0xHGkJT8GG&2sR=6)CHm zh-^6lVn%hE-aROwlCe>i$FWK5HjwF|z5bcC1Q#ps>;v~(k6X{w_!u;&oZ*ApJQMS4 ztv5GtrWCUj#Irp=qLnc{Y>D8SlmtI7uQ&UTXuVj>Gr{82fjbebv5Y?^h`rJ2V=yza zFuzuPVdb4Ad8#)VD)gImllC_GrEWC7!4Q4HS<=JAzM0p6HS_#IF+&hTw~9?Vfh+0@ zkJ$l{BR7=xNz7!oKRwwdkt?ZW!**rm^TrJ4UC;0?Q&@W>%WB57Vs+-Y4J?__N0MFH zFBb*vR`LdVGwa@y3q{waag7WlaZToEhO^Vy&86>vnXknh{e^3eNBCQe#&c{1DU zkDh9tId12+%FVO99%gC4Va0lk=h%tNCPk0m&c|mQ%qp7oLF~wk=@OP_E4Y)+c=yan z+ryfpmWezHswlWKy~(EbYB$GWx@4(7Ler39Hv}P}=u&^>bP0l+XkKc0q(p literal 0 HcmV?d00001 diff --git a/server-drawer/install/d170a10bd3781e4a.png b/server-drawer/install/d170a10bd3781e4a.png new file mode 100644 index 0000000000000000000000000000000000000000..53973561ce272a155a60998e942149ab7183077f GIT binary patch literal 1453 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 VeBrsI&)lG#vd$@?2>|@;lg0o5 literal 0 HcmV?d00001 diff --git a/server-drawer/install/f944dbd033a60207.png b/server-drawer/install/f944dbd033a60207.png new file mode 100644 index 0000000000000000000000000000000000000000..c691abc5cd3a33c73efa062ba09365f1d2d8eb5d GIT binary patch literal 1186 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77cvYC%z>URjv*CsZ)X|$i#Uoj*ykARocGSe(6A)J zVJYjyLr0vYxi=^TYIAUIyyWt~p))K>{vTns93(hl)<&B1>W~@1@BLb2*Uom|?Ae-RC&$asiYeGDKi^`G(eI7HJ z*S$K(B-Usu%j0{w$?AZKf%fLqkotoM`3gMQlP^qJFwbLW;Dqo~0=C~%u4t~{*0G+H zEBfnzscety%-ns1bJHEiB_pTBrM z`$L%z!R*Nog|9H$SwBhXd17~6RipmwiyzZ&>``3K$ycIaX6NW_CD0HUd2Q`M^^6#H zri+&wXZ&E9s{87d+OadGkAy|KJI&56GUH;ZxH>K7N|vu`tfO&Es9NCovD&{K|O*p!SZ%d~Y>&{69?(9V+OXsiHdPVcZ*0ANJ3di^G zJ*m)JYY==u*x&WOM(MK!ybq@Fd2P>HzhLP)=061{F>9H>mjpz$P1pWrJ#DE0`&G>h z#)_5AmcI^6D_K?AD|_Zu;2Ep5+UqO49yiq(FX9TdjuCGVH$Ah$$q{H+?Sp-Ma?QuB z5;m~Ke9RGI4qUF#;On{Kcxvprz^SQGP;= zMe*{#MLAb@R|Ra;c4D76d1Kib$v*{MBku+rOlRzB0|2S-iT0?CEywr;6r zJ^QApw|*D!3gFokl)z@8|9{ROzwOG#=|@%DgY{O3%{t|{ybUQi*I#Aax`gvb*DFv) N^K|udS?83{1OV$OsTBYK literal 0 HcmV?d00001 diff --git a/server-drawer/install/fead9e69933db668.png b/server-drawer/install/fead9e69933db668.png new file mode 100644 index 0000000000000000000000000000000000000000..d9aa7941e2b526729e03c6049c1ccddbb4dd2e52 GIT binary patch literal 1287 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enP@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEW}u^O-77cvYC%-cL&978JN-pT9<4xR_D=$ueXaA;&{W|)*4psMKLI$MNYg6BM2v!+62tCc{B4DU-Vtu9OFW$MN6 z=iWS*{Jv=alFVQ4yS}~Nn|`kL&5>KT@|n`gUMOsss&K+l;E4i9kpPQjMsNW84EAe{ zp$qt3e);AaU%ZsOk6DNLcc>k6OmO7tErv}>4=Vd)8Zu?K_+AFGB@0~kE4;bpc-utx z1!F-_`(mHTO}`FQ%Jy0La_-`Zxw??wL~#ZCnO7IYUx{5|mV13c{gsFaGq=^3-d!w5 z4@f60uRCb|O5h6XyuN0cEP*SGalJ{0&2>V#UPVk3xEC~a0Y^njq*Fz=Z-C0(_gWiX z{`mFyw$LICGe`3!zh!4v8S$7oDsTUKfz8bE|JM_q8#%dH9P^qK*c~S{Bl(G=NruId z4=DUtVa5E-e=l9nKNaxm@3z~rv#l~ZIAtSVFx@ZZP&ptcdurWteOV^vgz0>e&4MON znIE?EwbWV()V)$TTJD%$qEK_S@xs-{4a=HE=CdB1mV0lyl>pys2LsNpVFBzFE1VT4 z7Vos_d+G3FMYD)J>(0LEVvW4Ar@k1?-KFzd;i$Re#y^J3>`fT+UI!S6eqs5s;IPPi zmZi`CE}PhV$N7}@4#5J?_CwsVDIYyA=pL{9&-1~h{m>NGH*@$l{kWpBE}BJ`L7aE1 zI+L9w%UTBZk{L&r3#J@WW4B~DJDIs4o?UA80vC4O;_$z77}6WL#Vj{I%}Zgrb9v!0 zwTwWZc zZ)H}NnE9%hKHa-m=0?@hm{lSz9#&UB2yalY?R&lH*C7M>t*fF0jB1vrth??S?smp} z=ZZY7W15-kLuOgAD0c6EZ0ga~czx4Zt7r!vqqRAECr#bOqBv>QpAvunET4<&PaULA zUb?L1J-2B>Q$<+2b5St6*t92sajO)b2X0q*GJVgY!-_XnH_KdldOT&O`_5i97REah zqc+Iey;eBf^+$MDXwNL2(9%n;GxYvMA53wE36t~fF2hzduf z+nfn6gJ)0C@#S_>*=wr9?xVhF?Zpt@Q=1YaC-vMC^VV*fpn5X!WdXZUQCiCR^d%X| jU6roU$|t0e65IoQhQJ-iChb)40p(^-S3j3^P6=40?16:8;return r.icon?n.createElement(o.Image,{source:{uri:`https://cdn.discordapp.com/icons/${r.id}/${r.icon}.png?size=${t*2}`},style:{width:t,height:t,borderRadius:s}}):n.createElement(o.View,{style:[de.fallback,{width:t,height:t,borderRadius:s,backgroundColor:Ke?.BG_ACCENT??"#5865f2"}]},n.createElement(o.Text,{style:[de.letter,{fontSize:Math.max(10,t*.4)}]},r.name?.split(" ").map(function(u){return u[0]}).join("").slice(0,2).toUpperCase()||"?"))}const de=o.StyleSheet.create({fallback:{alignItems:"center",justifyContent:"center"},letter:{color:"#fff",fontWeight:"700"}}),Ye=i.findByStoreName("ThemeStore"),Ze=i.find(function(e){return e?.default?.internal?.resolveSemanticColor})?.default?.internal?.resolveSemanticColor??i.find(function(e){return e?.meta?.resolveSemanticColor})?.meta?.resolveSemanticColor??function(){};function $e(e,t=Ye?.theme){if(e)try{return Ze(t,e)}catch{return}}const fe=i.findByProps("TextStyleSheet")?.TextStyleSheet,pe=i.findByProps("triggerHapticFeedback","HapticFeedbackTypes");function Q(e,t){return $e(e)??t}const B=12,v=12,ge=42,q=220,he=4,I=16,M=20,ye={tension:200,friction:20};function Ne({visible:e,items:t,title:r,anchorX:s,anchorY:u,onClose:d}){const{width:f,height:k}=o.Dimensions.get("window"),w=(r?v+20+he:0)+t.length*ge;let m=s,g=u+48+10;m+q>f-B&&(m=f-q-B),mk-B&&(g=u-w-10),g0?n.createElement(o.View,{style:A.outline},n.createElement(o.View,{style:A.badge},n.createElement(o.Text,{style:A.text},t>99?"99+":String(t)))):r?n.createElement(o.View,{style:A.dotOutline},n.createElement(o.View,{style:A.dot})):null:null}function Ee({node:e,onPick:t}){const r=n.useRef(null),s=n.useRef(new o.Animated.Value(1)).current,u=function(){return o.Animated.spring(s,{toValue:.85,useNativeDriver:!0}).start()},d=function(){return o.Animated.spring(s,{toValue:1,useNativeDriver:!0}).start()},[f,k]=n.useState({visible:!1,items:[],title:"",x:0,y:0}),w=n.useCallback(function(){const R=e.id,l=et?.getGuild?.(R),b=i.find(function(h){return h?.default?.name==="getGuildsBarGuildMenuItems"})?.default??i.find(function(h){return typeof h?.default=="function"&&h.default.length<=2&&/guild/i.test(h.default.name??"")})?.default;if(!l||!b)return;const ne=tt?.getGuildsTree?.()?.version,D=b(R,ne);if(!D?.length)return;const P=r.current;P?.measure&&P.measure(function(h,oe,re,V,H,E){k({visible:!0,items:D.map(function(C){return{label:C.label??C.title??"Unknown",action:C.action,danger:C.variant==="destructive",iconSource:C.iconSource,IconComponent:C.IconComponent}}),title:l.name,x:H,y:E})})},[e.id]),m=n.useCallback(function(){be?.triggerHapticFeedback?.(be.HapticFeedbackTypes.IMPACT_MEDIUM),w()},[w]),g=e.id;return n.createElement(n.Fragment,null,n.createElement(o.Pressable,{onPressIn:u,onPressOut:d,onPress:function(){return t(g)},onLongPress:m,delayLongPress:500},n.createElement(o.View,{ref:r,style:Ce.outer,collapsable:!1},n.createElement(o.Animated.View,{style:[Ce.icon,{transform:[{scale:s}]}]},n.createElement(ce,{id:g})),n.createElement(nt,{guildId:g}))),n.createElement(Ne,{visible:f.visible,items:f.items,title:f.title,anchorX:f.x,anchorY:f.y,onClose:function(){return k(function(R){return{...R,visible:!1}})}}))}const Ce=o.StyleSheet.create({outer:{width:W,height:W},icon:{width:W,height:W,borderRadius:16,overflow:"hidden"}}),A=o.StyleSheet.create({outline:{position:"absolute",bottom:-3,right:-3,minWidth:23,minHeight:23,borderRadius:12,backgroundColor:"#1a1a2e",alignItems:"center",justifyContent:"center"},badge:{minWidth:19,height:19,borderRadius:9,backgroundColor:"#ed4245",alignItems:"center",justifyContent:"center",paddingHorizontal:5},text:{color:"#fff",fontSize:10,fontWeight:"700",lineHeight:19},dotOutline:{position:"absolute",bottom:-2,right:-2,width:14,height:14,borderRadius:7,backgroundColor:"#1a1a2e",alignItems:"center",justifyContent:"center"},dot:{width:10,height:10,borderRadius:5,backgroundColor:"#ed4245"}}),ot=i.findByProps("useStateFromStores");i.findByProps("colors","unsafe_rawColors")?.colors;const Se=i.findByStoreName("ExpandedGuildFolderStore");function rt(e){return ot?.useStateFromStores?.([Se],function(){const t=Se?.getExpandedFolders?.();return t instanceof Set?t.has(e):!1},[e])??!1}const it=i.findByProps("toggleGuildFolderExpand"),st=i.findByProps("useStateFromStores"),ke=i.findByStoreName("GuildReadStateStore"),x=48,X=16,ut=[{top:6,left:6},{top:6,right:6},{bottom:6,left:6},{bottom:6,right:6}],lt=ae.getAssetIDByName("FolderIcon");function we(e){return e==null?"#5865f2":`#${e.toString(16).padStart(6,"0")}`}function at({node:e}){const t=st?.useStateFromStores?.([ke],function(){let r=0;for(const s of e.children)r+=ke?.getMentionCount?.(s.id)??0;return r},[e.children])??0;return t>0?n.createElement(o.View,{style:Y.outline},n.createElement(o.View,{style:Y.badge},n.createElement(o.Text,{style:Y.text},t>99?"99+":String(t)))):null}function ct({node:e}){const t=we(e.color);return n.createElement(o.View,{style:K.outer},n.createElement(o.View,{style:[K.icon,{backgroundColor:t}]},e.children.slice(0,4).map(function(r,s){return n.createElement(o.View,{key:r.id,style:[K.cell,ut[s]]},n.createElement(ce,{id:r.id,size:X}))})),n.createElement(at,{node:e}))}const K=o.StyleSheet.create({outer:{width:x,height:x},icon:{width:x,height:x,borderRadius:16,overflow:"hidden"},cell:{position:"absolute",width:X,height:X,borderRadius:8,overflow:"hidden"}});function dt({children:e}){const t=n.useRef(new o.Animated.Value(0)).current;return n.useEffect(function(){o.Animated.timing(t,{toValue:1,duration:180,useNativeDriver:!0}).start()},[]),n.createElement(o.Animated.View,{style:{opacity:t}},e)}function ft({node:e,onPick:t}){const r=rt(e.id),s=function(){it?.toggleGuildFolderExpand?.(e.id)};return r?n.createElement(n.Fragment,null,n.createElement(o.Pressable,{onPress:s},n.createElement(o.View,{style:[Re.openIcon,{backgroundColor:we(e.color)}]},n.createElement(o.Image,{source:lt,style:Re.folderImg,tintColor:"#fff"}))),e.children.map(function(u){return n.createElement(dt,{key:u.id},n.createElement(Ee,{node:u,onPick:t}))})):n.createElement(o.Pressable,{onPress:s},n.createElement(ct,{node:e}))}const Re=o.StyleSheet.create({openIcon:{width:x,height:x,borderRadius:16,alignItems:"center",justifyContent:"center"},folderImg:{width:24,height:24}}),Y=o.StyleSheet.create({outline:{position:"absolute",bottom:-3,right:-3,minWidth:23,minHeight:23,borderRadius:12,backgroundColor:"#1a1a2e",alignItems:"center",justifyContent:"center"},badge:{minWidth:19,height:19,borderRadius:9,backgroundColor:"#ed4245",alignItems:"center",justifyContent:"center",paddingHorizontal:5},text:{color:"#fff",fontSize:10,fontWeight:"700",lineHeight:19}}),pt=i.findByProps("useStateFromStores"),Be=i.findByStoreName("SortedGuildStore"),gt=i.findByProps("getRootNavigationRef"),L=i.findByProps("triggerHapticFeedback","HapticFeedbackTypes"),De=i.findByProps("transitionToGuild"),ht=i.find(function(e){return typeof e?.handleCreateJoinGuildPress=="function"}),Pe=i.find(function(e){return e?.CirclePlusIcon})?.CirclePlusIcon,xe=i.findByProps("colors","unsafe_rawColors")?.unsafe_rawColors,yt=xe?.GREEN_360,Ie=xe?.WHITE,mt=i.find(function(e){return e?.QuestDockExternalCoordinationContext}),Ae=mt?.QuestDockExternalCoordinationContext,Te=i.find(function(e){return e?.QuestDockMode?.COLLAPSED!=null})?.QuestDockMode,j=48,_=6,bt=12;function Et(){const e=n.useRef(new o.Animated.Value(1)).current,t=n.useCallback(function(){o.Animated.spring(e,{toValue:.9,useNativeDriver:!0}).start()},[e]),r=n.useCallback(function(){o.Animated.spring(e,{toValue:1,useNativeDriver:!0}).start()},[e]),s=n.useCallback(function(){L?.triggerHapticFeedback?.(L.HapticFeedbackTypes.SOFT),ht?.handleCreateJoinGuildPress?.()},[]);return n.createElement(o.Pressable,{onPress:s,onPressIn:t,onPressOut:r},n.createElement(o.Animated.View,{style:[z.createJoin,{transform:[{scale:e}]}]},Pe?n.createElement(Pe,{size:"md",color:Ie}):n.createElement(o.Text,{style:z.createJoinFallback},"+")))}function Ve({gestureContext:e}){const t=n.useCallback(function(l){L?.triggerHapticFeedback(L.HapticFeedbackTypes.SOFT),De?.transitionToGuild?De.transitionToGuild(l,null):gt?.getRootNavigationRef()?.navigate("guilds",{guildId:l})},[]),r=pt?.useStateFromStores?.([Be],function(){return(Be?.getGuildsTree()?.root?.children||[]).filter(function(l){return l.type!=="root"})})??[],s=e?n.useContext(e):null,u=s?.minExpandedContentHeight,d=n.useCallback(function(l){if(!u)return;const b=l.nativeEvent.layout.height;u.get()!==b&&u.set(b)},[u]),f=(Ae?n.useContext(Ae):null)?.setRestingQuestDockMode,k=s?.questDockWrapperSpecs;n.useEffect(function(){if(!f||!Te||!k)return;const l=o.BackHandler.addEventListener("hardwareBackPress",function(){return(k.get()?.height??56)>80?(f(Te.COLLAPSED),!0):!1});return function(){return l.remove()}},[f,k]);const{width:w}=o.Dimensions.get("window"),m=Math.max(3,Math.floor((w-bt*2+_)/(j+_))),g=m*j+(m-1)*_,R=Math.max(0,(w-g)/2);return n.createElement(o.View,{style:z.alignTop},n.createElement(o.View,{style:[z.grid,{paddingHorizontal:R,gap:_}],onLayout:d},r.map(function(l){return l.type==="folder"?n.createElement(ft,{key:l.id,node:l,onPick:t}):n.createElement(Ee,{key:l.id,node:l,onPick:t})}),n.createElement(Et,null)))}const z=o.StyleSheet.create({alignTop:{flex:1,justifyContent:"flex-start",alignItems:"flex-start"},grid:{flexDirection:"row",flexWrap:"wrap",paddingTop:4,paddingBottom:16},createJoin:{width:j,height:j,borderRadius:16,backgroundColor:yt,alignItems:"center",justifyContent:"center"},createJoinFallback:{color:Ie,fontSize:28,fontWeight:"700",lineHeight:30}}),Z=new Map;let S=null,U=!1;function He(e,t,r){Z.set(e,{replacement:t,extraProps:r})}function Ct(e){if(U)return;if(S=a.React.createElement,!S){console.warn("[ServerDrawer] React.createElement is null, skipping patch");return}const t=function(r,s,...u){if(!S)return a.React.createElement(r,s,...u);const d=Z.get(r);if(d){const f=d.extraProps?{...s,...d.extraProps}:s;return S.call(a.React,d.replacement,f,...u)}return S.call(a.React,r,s,...u)};Object.assign(t,S),a.React.createElement=t,U=!0,e.push(function(){U&&S&&(a.React.createElement=S,U=!1),Z.clear()})}const $="[ServerDrawer]";let N=null;function Fe(){return N||(N=i.find(function(e){return e?.QuestDockGestureContext})?.QuestDockGestureContext??null),N}function St(e){const t=i.find(function(s){return s?.type?.displayName==="QuestDockContentExpanded"||s?.type?.name==="QuestDockContentExpanded"});if(!t?.type)return console.log($,"WARN: QuestDockContentExpanded not found (will retry)"),!1;const r=t.type;return He(r,Ve,{gestureContext:Fe()}),t.type=function(){return a.React.createElement(Ve,{gestureContext:Fe()})},e.push(function(){t.type=r}),console.log($,"PATCH: QuestDockContentExpanded replaced"),!0}function T(e,t){const r=i.find(function(d){return d?.type?.displayName===e||d?.type?.name===e});if(!r?.type)return console.log($,`WARN: ${e} not found`),!1;const s=r.type,u=s;return r.type=function(){return null},u&&(Object.defineProperties(r.type,Object.getOwnPropertyDescriptors(u)),r.type.displayName=e),t.push(function(){r.type=s}),!0}const kt="[ServerDrawer]",wt=ae.getAssetIDByName("ChatIcon"),Ge=i.findByProps("triggerHapticFeedback","HapticFeedbackTypes"),Qe=i.findByProps("selectPrivateChannel"),Rt=i.findByName("SelectedChannelStore"),Bt=i.findByProps("useStateFromStores"),Dt=Bt?.useStateFromStores,ee=i.findByProps("getGuildId"),te=i.findByProps("colors","unsafe_rawColors")?.colors,Pt=i.findByProps("ME"),xt=Pt?.ME??"/channels/@me";function It(){if(Ge?.triggerHapticFeedback(Ge.HapticFeedbackTypes.SOFT),Qe?.selectPrivateChannel){const e=Rt?.getLastSelectedChannelId?.();Qe.selectPrivateChannel(e)}}function At(){try{return ee?Dt([ee],function(){const e=ee?.getGuildId?.();return e==null||e===xt}):!1}catch{return!1}}function Me(){const e=At(),t=e?te?.WHITE??"#fff":te?.INTERACTIVE_NORMAL??"#80848e";return n.createElement(o.Pressable,{onPress:It,style:{flex:1,alignItems:"center",justifyContent:"center"}},e?n.createElement(o.View,{style:{position:"absolute",left:0,top:"25%",width:4,height:"50%",borderRadius:2,backgroundColor:te?.WHITE??"#fff"}}):null,n.createElement(o.Image,{source:wt,style:{width:28,height:28,tintColor:t}}))}function Tt(){const e=i.findByName("GuildsBar");if(e)return{default:e};let t=i.find(function(r){try{return r?.default?.type?.name==="GuildsBar"}catch{return!1}});return t?.default||(t=i.find(function(r){try{return r?.default?.displayName==="GuildsBar"}catch{return!1}}),t?.default)?t:null}function Vt(e){const t=Tt();if(!t?.default)return console.log(kt,"WARN: GuildsBar not found"),!1;const r=t.default;return He(r,Me),t.default=function(){return n.createElement(Me)},t.default.displayName="GuildsBar",e.push(function(){t.default=r}),!0}const{ScrollView:Ht,View:Ft}=a.ReactNative;function Gt({children:e}){return a.React.createElement(Ht,{style:{flex:1}},e,a.React.createElement(Ft,{style:{height:24}}))}const{View:Qt,Text:Mt}=a.ReactNative;function Wt({children:e,style:t}){return a.React.createElement(Qt,{style:[{marginHorizontal:16,marginVertical:8,padding:10,borderRadius:8,borderWidth:1,borderColor:"rgba(128,128,128,0.25)"},t]},a.React.createElement(Mt,{style:{fontSize:12.5,lineHeight:18,opacity:.75}},e))}const{FormSection:Ot,FormSwitchRow:We}=_e.Forms;function Lt(){return le.useProxy(y.storage),a.React.createElement(Gt,null,a.React.createElement(Wt,null,"Server Drawer takes over the Quest Dock (the strip above the tab bar) to show your servers as a grid instead - tap to expand, long-press a server for its usual context menu, and use the + button to create or join a server through Discord's own modal."),a.React.createElement(Ot,{title:"Layout"},a.React.createElement(We,{label:"Hide the left server rail",subLabel:"Replaces it with a single DMs icon since your servers now live in the drawer",value:y.storage.hideGuildsBar!==!1,onValueChange:function(e){y.storage.hideGuildsBar=e,je()}}),a.React.createElement(We,{label:"Unread badges",subLabel:"Show mention counts and unread dots on server icons in the drawer",value:y.storage.showUnreadBadges!==!1,onValueChange:function(e){y.storage.showUnreadBadges=e}})))}let c=[];function p(e,t){try{return t()}catch(r){return ue.logger.error(`[ServerDrawer] "${e}" patch threw, skipping: ${r}`),!1}}function Oe(){const e=[];Ct(c),p("questDockRender",function(){return ze(c)})&&e.push("questDockRender"),p("questDockBase",function(){return Ue(c)})&&e.push("questDockBase"),p("mobileQuestDock",function(){return ve(c)})&&e.push("mobileQuestDock"),p("getQuestAsset",function(){return Je(c)})&&e.push("getQuestAsset"),p("expanded",function(){return St(c)})&&e.push("expanded"),p("collapsed",function(){return T("QuestDockContentCollapsed",c)})&&e.push("collapsed"),p("enrolledHeader",function(){return T("QuestDockEnrolledHeader",c)})&&e.push("enrolledHeader"),p("unenrolledHeader",function(){return T("QuestDockUnenrolledHeader",c)})&&e.push("unenrolledHeader"),p("enrolledBody",function(){return T("QuestDockEnrolledBody",c)})&&e.push("enrolledBody"),p("unenrolledBody",function(){return T("QuestDockUnenrolledBody",c)})&&e.push("unenrolledBody"),y.storage.hideGuildsBar&&p("hideGuildsBar",function(){return Vt(c)})&&e.push("hideGuildsBar"),ue.logger.log(`[ServerDrawer] onLoad done - ${e.length}/11 patches applied (${e.join(", ")||"none"})`)}function Le(){for(const e of c)try{e()}catch{}c=[]}function je(){Le(),Oe()}var jt={onLoad:function(){y.storage.hideGuildsBar??=!0,y.storage.showUnreadBadges??=!0,Oe()},onUnload:function(){return Le()},settings:Lt};return F.default=jt,F.restart=je,Object.defineProperty(F,"__esModule",{value:!0}),F})({},vendetta,vendetta.plugin,vendetta.metro,vendetta.metro.common,window.React,vendetta.metro.common.ReactNative,vendetta.storage,vendetta.ui,vendetta.ui.assets,vendetta.ui.components); diff --git a/server-drawer/install/manifest.json b/server-drawer/install/manifest.json new file mode 100644 index 0000000..1b66d07 --- /dev/null +++ b/server-drawer/install/manifest.json @@ -0,0 +1 @@ +{"name":"ServerDrawer","description":"Replaces the Quest Dock with a server grid drawer above the YouBar - tap to expand, long-press a server for its context menu, plus a one-tap create/join button.","authors":[{"name":"everestmcarthur"},{"name":"kmmiio99o"}],"main":"index.js","vendetta":{"icon":"ServerIcon"},"hash":"2254b8b66310e9b63158997b9c661cfa1a9971f762e8b9578bf312f472076a4e"} \ No newline at end of file