From 548bead17b07f40b799cdad3eadcf7efcab05516 Mon Sep 17 00:00:00 2001 From: SethBurkart123 Date: Thu, 21 Sep 2023 11:52:26 +1000 Subject: [PATCH] fix settings --- bun.lockb | Bin 118808 -> 120968 bytes interface/.eslintrc.cjs | 8 ++ interface/bun.lockb | Bin 109500 -> 110973 bytes interface/package.json | 1 + interface/src/App.tsx | 32 ++----- interface/src/components/ColorPicker.d.ts | 6 -- interface/src/components/ColorPicker.tsx | 9 +- interface/src/components/Slider.tsx | 5 +- interface/src/components/Switch.d.ts | 7 -- interface/src/components/Switch.tsx | 6 +- interface/src/components/TabbedContainer.tsx | 11 +-- interface/src/hooks/settingsState.ts | 79 ++++++++++++++++ interface/src/pages/Settings.tsx | 33 +++---- interface/src/types/AppProps.ts | 53 +++++++++++ interface/src/types/ColorPickerProps.ts | 4 + interface/src/types/SettingsProps.ts | 11 +++ .../Slider.d.ts => types/SliderProps.ts} | 2 +- interface/src/types/SwitchProps.ts | 6 ++ .../TabbedContainerProps.ts} | 4 +- interface/tsconfig.json | 2 +- public/manifest.json | 8 ++ public/popup/info.css | 3 +- src/SEQTA.js | 85 +++++++++++------- src/inject/injected.css | 14 ++- src/inject/injected/popup.css | 5 ++ src/inject/popup.css | 1 - webpack.config.js | 1 + 27 files changed, 271 insertions(+), 125 deletions(-) delete mode 100644 interface/src/components/ColorPicker.d.ts delete mode 100644 interface/src/components/Switch.d.ts create mode 100644 interface/src/hooks/settingsState.ts create mode 100644 interface/src/types/AppProps.ts create mode 100644 interface/src/types/ColorPickerProps.ts create mode 100644 interface/src/types/SettingsProps.ts rename interface/src/{components/Slider.d.ts => types/SliderProps.ts} (85%) create mode 100644 interface/src/types/SwitchProps.ts rename interface/src/{components/TabbedContainer.d.ts => types/TabbedContainerProps.ts} (77%) delete mode 100644 src/inject/popup.css diff --git a/bun.lockb b/bun.lockb index 1feb1c37cfdf8a4ef7338cac4dcc9f1ab9c48575..7b9e683a6b16dbe3a2fbf38588a6840ef1a3bfe6 100755 GIT binary patch delta 25828 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 V)FE4yYXw!J77X6lY6?4R{(q*fQ5OIJ delta 24439 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 diff --git a/interface/.eslintrc.cjs b/interface/.eslintrc.cjs index d6c95379..2e04b2a0 100644 --- a/interface/.eslintrc.cjs +++ b/interface/.eslintrc.cjs @@ -15,4 +15,12 @@ module.exports = { { allowConstantExport: true }, ], }, + overrides: [ + { + files: ['*.ts', '*.tsx'], + rules: { + '@typescript-eslint/no-explicit-any': 'off', + }, + }, + ], } diff --git a/interface/bun.lockb b/interface/bun.lockb index b124928df54836849e219b0cde0e2ea9b3a23dd1..3ddeef7c67d2010aeb66e84d060aa8dd5667f026 100755 GIT binary patch delta 25126 zcmeHvd0i3^__?)%Z+H3E<*4o3__vYMv z=%2N3U#UGmJS4hB{SLuxuRf9Dl|O0N#wGiARF3`f*u*jYCmeGravil}@>e^VK$ri5 z41asDugVBQeqMfYKEyWxqaZj6td^`Iq?4fV2>7=_N#0eX=aClx{+uWXbwOVNZ2)=@ zv>xcGT7uvTT3l3MvqCq+Nf6w?AA-C-=xNAY5|Lo^6C6SPO?2+j2$-0WgJHbpdSzdJ9U8L9c?6 z{4I??0!sPYHTg14J_D4D%h&ippq}76s&dH@i3An&)fDQ2QpG^H1D^aVuomX!jJFC0y)n|j z?*gTU)`L>_XIl!%F5w##CI^-yXr6*ya4hy!6|xEot%X^F@H8^0Kq)BNc9dAg=1{?S z@MKUvC{;YfPpxRUrf)#2B+sXC;ku4|ifjh*$)RqVUb0qxb^z+LBV%}hB@2-kgg~`| zG*B|20+bpYZ7Z@-g|@;lCE7iMRK3<(#X+E?H`ZD(${H;Qy4)vN?UIp}!lH2~UtldR zB-<`QPL8c?hWOJ=yM_eyO+Br^h@A1%p5Ucfnw6b5#x}xIfEhYsgsmXozlCbx7El@k zmfVuDmZGd|OTj3mTpg67u`m}Lb(IwpEVoDyHixK&uhM8}DB@2cTcimtgsKH|tmAX3 zrZeCvf15`4g3=fmVYTLm*$Rbnlq19SK~@5u9O@6+9CUPHn9_SNEZ2U<*vK49QIU0o&1G**>=*ouE{@Ux$Tn3|c8ZOh7rnyt_}k!tA~uQnH8 zQb%gOr6@aWjI{(kl`{tUA45*zz|;tXiK8xnr+T)vRrP-YrSMxutK*@#z!o;T5G!|a zZb??&2Yo{u`s=1f zzW}AVIkUa$pAGud-x4U*TMVO#w}Dc*Makq~f59;u39@_&C}oV$==&+^Vu*=t$+3*E zo&`@090sMiIRF(AJ<>sySAe1|$EXhcQD;B<{7&lHIs=rd4Ng;e28v1O__VX?XEE}r zU-jWL2s}0OZWlqo9B~{5Z3?;$l;Sc{)Bn7qI)Q$tL+qnIgfV2_@AXV{cQv48s2Hn- z<0n)|0UoU`WrBo;sE6Bt`h&jLQ#GIp)E9g`$f;aPZ#Cd0mYf`0VUZ97-j4#?5DCm? z$2n9?tL!vT>gfUmiabMyDLqoJuiC(wbSxW?Uj=Oj8qrUUT%mRBcx!a<8W z*gKl@ysvRd!157S-kjH9 z)5|TYxW%xq_0X98$1i`nYTt-$=Jd$wm3N~9?9%0 zUgDAL>R($BFdZD46~Yf_rzPL%R_Bqa$mxU}vU_2RHY9UBs>yWiKwaC_(^=KlbNuui zailY^^e~IhIrD0e8_qnz(=3M6;iaBt!vsXB16gS}fK(En5}YX3GV%m3v)IANOTEm7 zX!KuaKE*51FafD9ynT}-CnUNlB4^B+&ipV$NT{O4NOe&%FDaQ*ypx>J#cJkgq^zwMLcgoIkM4dx%r@J(_;LKRgarRqClPN;46LQ3LOnkG3R zp{iX$N>z)%!%UHhGhBIspV@c{0y839i!)D?c)^WV`kBQ6jd(T4GmUtHzgfK0h?j!2 zZp^MpXN!PP?$BKd8%L_;c4 zu@q&o*n?LGn#C7ActVib*c2Na%rJ+*Qv*$gLEt(mS}Q$yHL}k^fF;_&c&fiibn)V) z!DfSm>6bu_8q1Nw`he18y;l>S(9A4OZNf{NnT=<$j8a}Lp4!+X`grqdM4Y&$G)e0~fCxPpu)KKPTGM)yfb|5CF(HNkbQj4al*fW5ahMJ8F zA*A^$a)#osfm2Oq?j~d1K-C;)#en|c$P=TvNs~Ve( z8Q{np*bk0_BU@^7RBbp5E`i_nPc*a+rp}*&us)6yX&5+bZW31p^U5%@_)Rdc4l^5r znyEE2&R~0HGhP~QHg1711qB#~v*OKWyc$Atb3sT}S}hATiBp>M(g?G0D}-bUdd$xx zUTw~+Aq>L`PUEK*ufq7Tw&11iW@9CUG%`f0)9BPvS1F4y8I!<;BM$~5I-|j*Djc=G zwI#2NGK(Iqcy*N7xEnhdYEMvV`C8-DF%TQ7<|%O$^Fw)cwApwK!mdiQ7|X_})@q-k zI3i~Or&h)qAug?Xb&OfO(3&U2n#JHYyfoHq7}Q1((r7LjS0hFJf;rpVWV`^5B81i1 z!(?a@hFvgkADC!dij>+>7)-`9;3yF4Ky!wR)XxY@W0OGwXXaC46OFTxqOoD%RRJc$ zVQ}a`w?y&BaGqc?i)|x#smW|Cj8JPf(6}(Z1dh5?c{&(xYg}z5FA<}bT2(a*!I4E6 zoUmvQI4Xw#fcp*{1xJaWp;HvX!Ebj;s)Iz$VBG@_dKi!lUG=fXIdK+gGWtiW)nU40 z+6{^3l?i4ehcHcT5d|)QqxMDeT5J%*OB2n;-Z4LSRe(vH6T_<^JON=ZrCe2%$>;$K zDBc(otxRHJEU!#58=rxY!j6gKXEJ`HsbE%PiiO1eJVOzn5^(Amq&c}Oj#sxg8$W^& z9S2*e4;#QNiiI;-W*iR=rcz(Ix2^LtL&1I*965xc3oZ=1*$&{8*>21Or?!)dN;ZL` zN)R11@Ethna7<+k`FN<2rrKq>NU9x3wjTgTb*cl!fNifjsmfwaVrn~Hnrb$#f{;1| z#nI54;HWYbK=HZ=R3C84ur@pjZm_cK?L}$;J9`HQ#B|<(6HJG=dVJ1J^HPMjL1uGXRib7XjDw)NeU3n$QlU;eWWH#J{MS~T^{@wH<+mK4- zhr1_=Uv=ZvJVKjM3ZqpIMs0)h~I*vUdJjOYBHus`c!1Gh&MQj zFqZWgli>(BJk%l*4gW@}Bfs4v(U1&3MkvOtN2;S@!Z$s5WpA?~uqRe}5*UUdWg&+Q zH<41E?1SO)n3B5{DJ!Ln-FoYjl}62UaF{Y`{}>K{dt9mBs}HYEHyek-XmvWlQo{yt z0~I@}k;w%-5vJ^fJj>4|a>ILAm5r)mho8YJxrJUgr%qT3}*j02# zil&!p%IaTm$ph~(Q(QlgR}VCc?+@e&8D?X%3~W7rE>{SSy2_1LC78q)GI%vqTr>3$ zVor!%GI?pHS)858D>D=9Zi4cmMW_Yp4luw&qn@C25hb}7U;vr|blpou@csbl1!y!7 zlrEwq4+5Nk78;L7vmHr6Ktj2QQbl+YD;H5J7^<=gt%r1+#uKG{^n>C6)-mO}A0?*{ zC*`W4YWw%e__g9g;LN<3Q=UAFU0!eS(sWuR=ko z;6#llN_+`GT`~!v>wc8-rzp95Vg z46b`A$>#txq~-y1-AgHdfg)8Y=`9AR{w13H9!fLeml+~=v8rY*Lk<;NPAa(Wr6gaW zNL5PwN`Pj{I!#WLo3mShfCH=iXbKs(uPn6`BG@dApk1O;vr0WVm6@Cnm;wJ!Ie?&>|Q&QqnMtUlK zTqO?IA5kjxnWCjqYV~uCCrbHWX!J{seg#SwQOf@spwV|-3P41@2|A>-f?wTH`IzUKZM24T1L6i&$(0HPh4Al60Dd`1k`OQF`!ME1*?nlYs z2;`F?(M)Y032=&_h8mDGX>y{}P&?2Dp!63ry8eh#1Cpk9KUx?01C(`x5}G1WN)FU$ z1}HT=2$U)utnouN-U5pM!f?9%ijpWx%O9cT6Qz1aX}p~h6p}HTfG8>Cg3_2P0;Q~C zjgAMU$V}4s$&`ufev}NKs^t?U-T_MW&Qy83FiTS)N_{sEltlA2xT%Y9yI>^0ctBi zqk*7w5hZyLKwZ>A<6DB#buT4PLlmh>soaBXJnZD@{dOEw7s=_l-J2L(4}q%l?;%wD zv%%zm6`-;8+l>d>rwHT$6tV~1dHiJ?4}7Xru6uVNWRL@(KAi^8bwB#QjRyilLHggu zLmj>U+j!6%#&y392+b;YEgw`}cu4TSjR%En03t!r`QOIl@7Z{?{u3LI=a-J|QQIEl zy31|$%vX*MkGM4S?%w=?k2GC<{9MS$GcS1$=rH7J=4W3>DXYFH$gwB&FPypP(wMX3 zI-cM4(`vur#b3G>wDxpdLFY2zPJ=t>?X=SH>e|vEFfs3b)FD$>ha#W5_$FP32KH6XZT9@#M)=kFwb~&^q<-+W}&Vv^& z9eH?~e7#;#^NOu4?nZ8F)A!4&$6$?aox5%tsM8|<$$LNBbI>!fbni!RzPi==oz-{U z>&+&!C2w8L&3a*wxAaN-A3n}{qDfja{~eb2?}t2lE9|jtF_o7d9kOrh#rJl(eb2)R zy!a>i68>-;H7<j0q9?a8=Ggvde1^4Ehjn7~$_#oU{@?E&M;>HOXEQDKd59J4NZ_QmN zX0SHghI<&V!abZfDal|Fd>rnP{3PyCJg_u_Me`EeWBA$93_feJ3y+&5u{d5fDTBA2 z;=(@xXW~(l;RU$GlO@)UUj|n()rEJSBH?T81yeG3SGx=U9$b5#IyHme1h;Xj#FF`S zaGM=2e1KhIseG+HgJ+hxaDzi)9eKJVgV&kn!e0Q_nX|GCz8{>mOk!R5E^yh?UAX%+ ziFM>rEQvkF7tDfx zPr^TNLwM?J_y=y|Y>7S2uY=n>2mU=NF$-V&B>Z~{{>_nC7Ehl8|DJ|_;H;cI1^>WV zpOV-pz6)ITT=@62#BAL1H2j+f|Gh42sD;)N0`;g`WxEP{VrVw3m+ z4*wRzKX6lc>LU0DZsQ_}+4*&Fo0q`9#S$yyYZt>m8U8Ji*mR!01pZaPKXB!o$?y-H zRhHNjd>6RvrSPvpVzarW0{$(7f8geD*QM|eT=7zgJJv58TGp5?jr$gWJ3o{;iSNTE2D-{96bA)=F$WPhSiF*26z=8#!AC z|G-(-No*6}1ulC7{97-vE!?sm{%wSR;I?wt4e$?K@dk-K$E(0id{M!!y zz#Zr8Irs<8`kcgG<-5RT?|^^XC3ccqw!^=j@DJQ+?z#j1fh*o2vDbMOxQV;q-%g30 z;p29~zuoW;+*uyD3;uyC-zBlP_*rnXo`-+CC3cRN?S_AQ;2*eu@~G$GAGpQOOY8!_ z46fn@__s&G%QXx3z`wol58Qh^6<^Wc1h?@8iG9GYgWJ3h{_U06WxjSV{M!%z_DSp` zp1u$M9e{t}KH+RX`~zp*FR`n97r5+7_;)~J*SO^X{5uH$zr{c8 zcnJO-l-M_X+(Gzv82*8~&I1p@KXB!TB=#?U7Tl~C;oo72eb37d!@rl{AGjZR)Qj*B z+~OA{yb^R7T*VRi_maeZ;tO7ae^u}g+-;tE1pa~Bctm1%`E_uckHWtyNyM8<>#7Fw z%$MQdQAw=Dc;BM~d7WeM@TkNLoV^SW!C7CHm^0r6F8eqO#JOsD+r1G2tS8*C1o|5QEcS?EE;og*|o>rc8r!(4p8$)|Py6VwqWr5z_ z+F5U@@}+^vNrUr@z*S{ayFe*M01d;d4CxisB$E$J>e&Yjqh}RFIdGLodC5 z0=)*B-hV2i`t-NYzsGk+_3?$agM|94=q7x2(2eV z%0i?48p7gT(T*H-u^>qGlW`2TxP{$#^iyY~O9hP8I>KZjr4 z2dF>0F}6})qNjnW{}kup$na~bhu_E_v|-nNX!K{jQ)YzrTcJ5&>Q5%f5&ic=4=S@i zsNzG?vn%2MvsV8V#!v(cY&`A!5BAZq>Tf$Jfcg)Y{zjP^gI_mH_6?3#A2lOE8)`H5 zua{vBqSg4}Hu48;*dMBQf6%bjF8u$yLVaIj)L#@ntnkw~vH_2vi`|lI#!-z7{_BIQ zM)>_Khyg%Z&p) z;;Qxnk`G&^uWtWY!}L8t+pg-b*zPs@!DZ-KeEIMA&kFwqW$pKb`oXRK3mVqiwX6NE z{772(v`5V;X{_$>DSr+7Y%FeqW|&zf&(^Sq(9s!P^9&rOzN{v`J?b}g!fZ? zNHRP9fb(Z-9#SKJ&_Q&6<~+tB=Fvghwyj*92=g9Gl1HEvFIvwhWX9B($2+j+5M z`<=V$MRqkr7Uk+M?CCspXC*1%(qBicg>;Ptpa$p_qEt=MQ&XfbLq-8~d1*3?VdX_Vk~Ps}*s%yhkfz4GLCH9LlOvQM zO^r3x^zhgdz6I#=Q)HMF^!}O^3{~t8N`>)dq%ag|syIkdR9{UTrpfeoBJrqH^r#Mc zKNA1xNCAQLNY-4F(JO8A79rK!LX*+oiHDO1R7p!s*ow@;bs|W1^Jb%6s4{wIZXd8; zUhK{ME$fh64{QK70%gE7fO?I-X^sWr0J4YLr}n7&RzL`_7gg>D4gl1v2Z2MtVcB-T=-5Zvt-tZv*FmcYyQ21>ju(dnx)|gYr&WA5a=7eSv-e z4Uh~V6BqrveXpgz(K z0Gbqa03%QfZ~_bfy%T&Fs0Mxlz5+f2t^rqp<@EjLr$}4@J_0@g-UHqTE&~^VEx@zD zHed%pZ;P)1WMCmM4|ocA0+bPu2> z&Hb9@Q|DPvoXGnk)+X1Gk|)IRJ;IBKwj(5eEjZG(iiXnXmZ2=(LfXs zDWCLblD!N`2QUeskW=U>A{0gnDUF}O0FAE^Ko&sNQEN0|hX9WPgMfhmO?X-WXq4iJG7rXjh;M&=E)lQh*LXCm;>z43L~;y#X4;G?-~1Q@S6} z7oZh~R+<3-tuz?`8AnEwGmioE;A=wTVW^fd9CR2!9+091pxH#T>fRYegN!0G5uiax zgE1eV2$7ryWFbJ~gmh?dP5{u9QXlElKqlQ0B%BOTPft!E0eBwR4eSDT0NVf>z*_(s{WSg70LuXC+6q7h>`QQ443IU8fQ7&UU^Xxx zm&d? z=mzNHfEuU%P60Lo&jQ(RvM_D3Niefqww617`p-in@*PPv9Nk9Pl>a1JD?w zu|@KWz`NA{=Yb0VDNvyg09qB_2YnCl0O%P*a(do;19}U%3;Y}S3HTiN8u$$O82AVv z!><6Bfe(SJz^A|`fL@3FCYY~)FM%%rs)#C}!q>Dk@l-icDyZxHi1fF>4d7qEb>KVT zd*BCv8l!wCfXYfh51<;*jI}EnWW*idHb6#DLGqRg5$H)P0u&tq^g|+`dWCv)XxXMG zGd)}ADNRmLSCEXlhNv#5r+E(bKRp=effNe`TAt}qPy1JTP~}0k1jq;I(N9|fy^=Q| zqXuac=K<&y%UYSapnBc3tdk)$ooOpeTU^E1_DGPmq(};srpm~2GKysMe4xiD?MZ0= z-Y^t5T<;Ft_fB&*gEi8RkP$^ij@xOuUrQF_LnA8y>-%??8@#dZjiWi*tuf zQw)p>kHmr}|Em>D%8*-zu%15psdq15ern0sc`>z}*wD!Ew&Brun9B1)Sd3La4sX%2 zl(jofdK?v5WVk7ux>P?1Pd`^jWTBAKr5}~oLOXe}m;`PJzTAy2AaCXdYH7b#0V=0_(4F69!_mR^+8++6V#zn#U zNMWu~o=RmmXc}JC)lq#<#anAM^b_z_`9xN}buH`Bnw-~-@@pvT`yt9=iEy}hcDlA| z`}kLDG=4BHX@ko3L-uS3k~YWI9{XvHf_@C&#pxr{qL#c{Rg)80SMEh+wUhfCThnYq z3X)r{sL{~R_B*?_Vbf!+uJx|T$*(J~Kv`e?G{Br;>+Zg@;6Q4P#FTsMMw`woYn_2Ft{-kGHfJg3A#Eh;XY zrb)h=oDzXx=*Ru_zV-48hn$8l)0)DJ)DHw4v^Ds1m-6w4kP{Chkh9!Po*MyI8#aI!HqzY@tpo7tfG2sD4c#71{H+zcyry350((E0&)d8e6q$=jotx46SY zzLbPGY3D6EGSc7fIpn*Om+xuNQ@#_0;%B_%9?{U$4_LhAY8`VY_VuNTCYGj1;jWkL zfJVH2^y08?S@nWu4|o?EF-k0j-zys{toN4xLAC40GEU!VJrmll_W{ig6ZT==vKRyN zzwwddL4Eae8P~UzXviS427fs>7OT$e0QuWkxIv$BFasRz|8->7sfKac&@`$2nuZ)2El!!y{a>&B z>~ZA8sW}yavN;aD(=$lUjDxZDg5{^c`|4*czSL&rR z5WN&Ew~A*yeD%W?=Zsji>(IL=KM+|on!v~wRyLF8$D@sF&E#iEQ$Npf)y#t(H{Y)R zjL4?a&_y8pTgYxE)QQQEW`gGI0QD&`VAz*;tLIyOfEDzx!bsiHLf&pdo!Yda7+gU~ zU;Sjg!b1bLZWkL|M~PUJK(uVFAw0oicL-|Fuqs5b1T$n03zB!A+l2fBBCxW zUUHuV43X#%IfsOaA@UlcX(964MEi%xbrL~KLgb`Gw5}f`=`UUxn*R0Icxo%vqV@6+ zIUgGF`azWeG$O;>QN#L~mQ8~$2Olv8(YV$YiOnJMi&Q&KyHtkTqin^+ zv>#Vf?b@K)7Anuh9F^-PVWrZ~xZIzz`X7>T=zFLk+SJ6EP&p+DeWst1Iq|^vCPP9u z@}7oHJT_=*MZWsEnQfPZEed?u4Lvh861xlZjHaP23(;akgxs(_jMERc9GHH(m!;vJ zS2godVo!wJsXfM)e#B+OCi9U`%ZE>a2CZe#NQjcRwa2`=XC0bsMp(6V$X7oFb8Lv; z@Mjkd?=7+zbu!`HOZj7H`s(LgRxC<6_V)fvFVr0uj)#Qa?Ot;CWaiea4>lv-n3nqS zmzJY}$GcQCp%BGF9j2f{M>2-FM&;efte4m`UKUd@$O24qpA`72AEwwV;^?|2r(SNX z6jwa?*d)(LVbSsW0hq(bHEW+zuR&XAP=qm$^dm9PW#Zsjy>kqMVzG_+Y(Wm&%rj<|NtN0a5t<;nzJ$eyRiN z*3ZY>8ko7Ry8Lc4)U7==ZYIe`NJBq4^NU9Un$(-tJQ^AlY_yIEbfW_c6|>B8Ku6}4 zdETsid+_s7nRyjw8cdzlLq-X#0B|Z&KTI=bVOD9?$~EZm{ABeHfckNpU5*TuC%LyS zP|Hv&i<0H}s9oRDiP!z)V;vFE-`2G=MXl>FC?0W+FA^=5lhM75ichiOu_n{m6uC_& z)b)OfoYo2P(jMr(`kza6iyN|Tsp`5ns)M{8CF1qdDNjG|-#vMBx9O-8%SbdhjS2Cq^*W>C^y4*SCqG^B-Q?Zx*W|S6B)^8TzWM>3U9RMG4z1cp%Z6fU zRNSCWOVVJ*$WC&8SLWdt6{jCE>V0$US6if@Cx2Eo&FCaI?9M!EndWzrv(s27aa|{Q zdm2md)z2qwe*Bq!Eqz8i=|$oMmL`Wws6IGN_Ui(w`QrQgzLa&5bD-(Fu8Z<9+i}XH z+P!Xr>*s3fJlsWILmK+2rwz8=*;c%)S$$n2UeJ8f?3E2&S)8ac9!_yWO-gmz>z+K# zK2fQ`vsRp{>m^2am%r;uYa%ufw4b_XPAi*Ce9&zrr*wmdnA?wbL;r4TE6)Y*``ejJ z6B)~_78?)wd^hIn``b@)`gTG$LErqTyCZjbPS+1}6HoCL&S_4{Tm9f?i$Gyt<8HU$y zW)?J*wV)l&ZIwTk@D$Kb<6iE*?{n|+Lt~&3sV=?R=J40^Ctg3=HP`Q7FP%Hztewc> z!|`N9ob|I}7hLSdcAp*gL`}}sbon2cdt$x5@{!&wTK4XV)jzba`U(2?i>Z4AFW=wS z&@0^A6VHW+e)8Zxc`MN_* za5NvZT}^}m&mL`iBB%6$C#qYanIQw!54HL$e+T+IChcgr`DR0=NAkX#KV_SspSOGB zTI{yso$r4M%ayHhw6J8L{62#A-*l_oDV?>cs~e&Bwd+86Q91&z_sWOq%uNjKE8j?G z0lwd6D1R1o9DeFXTH|j@@F@?QDdl3Ba%5i?UAI*RzF@)iS%#d`mlfG3x~dWDVkh4>A+k&#RfONlkGRN@E`u@MpFD%X~ zuoPN_y~p$GE$``Gu-i@5zc^shhK#KNO%8*nk7;F|1M1&x9P9J`NeCK3aJ=2){gTHg z{L?E_HSm+2a%n&Iu}ex(Nxro(A}hNfZ>)9S(EhByK^{4a`N(~?Fz5EFI3i5T55pro zJUTW$yl7OZR&b;($68oYSY#cm32^*+*vPyBoWw3K*uVmtM$`yUPYn}B+etZp5er(f ukr`qmYAS+S4Wl#}6Z5MUC*Y`lYk|^$zoM)Pw2~^LmW delta 23862 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 z { const [settingsState, setSettingsState] = useState({ notificationCollector: false, lessonAlerts: false, animatedBackground: false, - animatedBackgroundSpeed: false, + animatedBackgroundSpeed: "0", customThemeColor: "#db6969", betterSEQTAPlus: true }); - // Handler for Switches - const switchChange = (key: string, isOn: boolean) => { - setSettingsState({ - ...settingsState, - [key]: isOn, - }); - }; - - // Handler for ColorPicker - const colorChange = (color: string) => { - setSettingsState({ - ...settingsState, - customThemeColor: color, - }); - }; + useSettingsState({ settingsState, setSettingsState }); const tabs = [ { title: 'Settings', - content: + content: }, { title: 'Shortcuts', @@ -59,7 +39,7 @@ const App: React.FC = () => { {/*
*/} return ( -
+
diff --git a/interface/src/components/ColorPicker.d.ts b/interface/src/components/ColorPicker.d.ts deleted file mode 100644 index 4de668ec..00000000 --- a/interface/src/components/ColorPicker.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -interface ColorPickerProps { - color: string; - onChange: (color: string) => void; -} -declare const Picker: ({ color, onChange }: ColorPickerProps) => import("react/jsx-runtime").JSX.Element; -export default Picker; diff --git a/interface/src/components/ColorPicker.tsx b/interface/src/components/ColorPicker.tsx index 4719d4ba..f710ae8b 100644 --- a/interface/src/components/ColorPicker.tsx +++ b/interface/src/components/ColorPicker.tsx @@ -1,10 +1,7 @@ +// @ts-expect-error There aren't any types for the below library import ColorPicker from 'react-best-gradient-color-picker'; -import React, { useState, useRef, useEffect } from 'react'; - -interface ColorPickerProps { - color: string; - onChange: (color: string) => void; -} +import { useState, useRef, useEffect } from 'react'; +import type { ColorPickerProps } from '../types/ColorPicker'; const Picker = ({ color, onChange }: ColorPickerProps) => { const [showPicker, setShowPicker] = useState(false); diff --git a/interface/src/components/Slider.tsx b/interface/src/components/Slider.tsx index 664d357d..58e00d7f 100644 --- a/interface/src/components/Slider.tsx +++ b/interface/src/components/Slider.tsx @@ -1,9 +1,6 @@ import React, { useState } from 'react'; import "./Slider.css"; - -interface Slider { - onValueChange: (value: number) => void; -} +import type { Slider } from '../types/Slider'; const Slider: React.FC = ({ onValueChange }) => { const [sliderValue, setSliderValue] = useState(0); diff --git a/interface/src/components/Switch.d.ts b/interface/src/components/Switch.d.ts deleted file mode 100644 index 369a70ca..00000000 --- a/interface/src/components/Switch.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import "./Switch.css"; -interface SwitchProps { - onChange: (isOn: boolean) => void; - state: boolean; -} -export default function Switch(props: SwitchProps): import("react/jsx-runtime").JSX.Element; -export {}; diff --git a/interface/src/components/Switch.tsx b/interface/src/components/Switch.tsx index 62dacfec..263d55d1 100644 --- a/interface/src/components/Switch.tsx +++ b/interface/src/components/Switch.tsx @@ -1,10 +1,6 @@ import { motion } from "framer-motion"; import "./Switch.css"; - -interface SwitchProps { - onChange: (isOn: boolean) => void; - state: boolean; -} +import type { SwitchProps } from "../types/Switch"; export default function Switch(props: SwitchProps) { const toggleSwitch = () => { diff --git a/interface/src/components/TabbedContainer.tsx b/interface/src/components/TabbedContainer.tsx index 91df24dd..5d851564 100644 --- a/interface/src/components/TabbedContainer.tsx +++ b/interface/src/components/TabbedContainer.tsx @@ -1,15 +1,6 @@ import React, { useState, useRef, useEffect } from 'react'; import { motion } from 'framer-motion'; - -interface Tab { - title: string; - content: JSX.Element; -} - -interface TabbedContainerProps { - tabs: Tab[]; - themeColor: string; -} +import type { TabbedContainerProps } from '../types/TabbedContainer'; const TabbedContainer: React.FC = ({ tabs, themeColor }) => { const [activeTab, setActiveTab] = useState(0); diff --git a/interface/src/hooks/settingsState.ts b/interface/src/hooks/settingsState.ts new file mode 100644 index 00000000..a7d417b8 --- /dev/null +++ b/interface/src/hooks/settingsState.ts @@ -0,0 +1,79 @@ +/*global chrome*/ +import { useEffect, useMemo } from "react"; +import { SettingsProps } from "../types/SettingsProps"; +import { MainConfig, SettingsState } from "../types/AppProps"; + +let RanOnce = false; +type StorageKeyToStateKeyMap = { + [key in keyof MainConfig]?: keyof SettingsState; +}; +let previousSettingsState: SettingsState + +const useSettingsState = ({ settingsState, setSettingsState }: SettingsProps) => { + // run the following code once + useEffect(() => { + if (RanOnce) return; + RanOnce = true; + + // get the current settings state + chrome.storage.local.get(function(result: MainConfig) { + setSettingsState({ + notificationCollector: result.notificationcollector, + lessonAlerts: result.lessonalert, + animatedBackground: result.animatedbk, + animatedBackgroundSpeed: result.bksliderinput, + customThemeColor: result.selectedColor, + betterSEQTAPlus: result.onoff + }); + }); + }); + + const keyToStateMap = useMemo(() => ({ + "notificationcollector": "notificationCollector", + "lessonalert": "lessonAlerts", + "animatedbk": "animatedBackground", + "bksliderinput": "animatedBackgroundSpeed", + "selectedColor": "customThemeColor", + "onoff": "betterSEQTAPlus", + }), []); + + const storageChangeListener = (changes: chrome.storage.StorageChange) => { + for (const [key, { newValue }] of Object.entries(changes)) { + const stateKey = keyToStateMap[key as keyof MainConfig]; + if (stateKey) { + setSettingsState((prevState: SettingsState) => ({ + ...prevState, + [stateKey]: newValue + })); + } + } + }; + + useEffect(() => { + chrome.storage.onChanged.addListener(storageChangeListener); + return () => { + chrome.storage.onChanged.removeListener(storageChangeListener); + }; + }); + + const setStorage = (key: keyof MainConfig, value: any) => { + console.log(chrome.storage.local.set({ [key]: value })); + } + + useEffect(() => { + console.log("settingsState", settingsState) + console.log("previousSettingsState", previousSettingsState) + if (previousSettingsState) { + for (const [key, value] of Object.entries(settingsState)) { + const storageKey = Object.keys(keyToStateMap).find(k => keyToStateMap[k] === key); + if (storageKey && value !== previousSettingsState[key]) { + console.log("key", storageKey) + setStorage(storageKey as keyof MainConfig, value); + } + } + } + previousSettingsState = settingsState; + }, [settingsState, keyToStateMap]) +} + +export default useSettingsState; \ No newline at end of file diff --git a/interface/src/pages/Settings.tsx b/interface/src/pages/Settings.tsx index 547593be..68bbb4d6 100644 --- a/interface/src/pages/Settings.tsx +++ b/interface/src/pages/Settings.tsx @@ -1,21 +1,24 @@ import Switch from '../components/Switch'; import ColorPicker from '../components/ColorPicker'; -import { SettingsState } from '../../../src/popup/App'; +import { SettingsProps, SettingsList } from '../types/SettingsProps'; -interface ISetting { - title: string; - description: string; - modifyElement: JSX.Element; -} +const Settings: React.FC = ({ settingsState, setSettingsState }) => { -interface SettingsProps { - settingsState: SettingsState; - switchChange: (key: string, isOn: boolean) => void; - colorChange: (color: string) => void; -} + const switchChange = (key: string, isOn: boolean) => { + setSettingsState({ + ...settingsState, + [key]: isOn, + }); + }; -const Settings: React.FC = ({ settingsState, switchChange, colorChange }) => { - const settings: ISetting[] = [ + const colorChange = (color: string) => { + setSettingsState({ + ...settingsState, + customThemeColor: color, + }); + }; + + const settings: SettingsList[] = [ { title: "Notification Collector", description: "Uncaps the 9+ limit for notifications, showing the real number.", @@ -34,7 +37,7 @@ const Settings: React.FC = ({ settingsState, switchChange, colorC { title: "Animated Background Speed", description: "Controls the speed of the animated background.", - modifyElement: switchChange('animatedBackgroundSpeed', isOn)} /> + modifyElement:
Insert Slider Please
}, { title: "Custom Theme Colour", @@ -43,7 +46,7 @@ const Settings: React.FC = ({ settingsState, switchChange, colorC }, { title: "BetterSEQTA+", - description: "Unlocks premium features.", + description: "Enables BetterSEQTA+ features", modifyElement: switchChange('betterSEQTAPlus', isOn)} /> } ]; diff --git a/interface/src/types/AppProps.ts b/interface/src/types/AppProps.ts new file mode 100644 index 00000000..b562bd17 --- /dev/null +++ b/interface/src/types/AppProps.ts @@ -0,0 +1,53 @@ +export interface SettingsState { + notificationCollector: boolean; + lessonAlerts: boolean; + animatedBackground: boolean; + animatedBackgroundSpeed: string; + customThemeColor: string; + betterSEQTAPlus: boolean; +} + +// Define the ToggleItem interface for the nested objects in menuitems +interface ToggleItem { + toggle: boolean; +} + +// Define the Shortcut interface for the objects in the shortcuts array +interface Shortcut { + enabled: boolean; + name: string; +} + +// Define the MainConfig interface for the top-level object +export interface MainConfig { + DarkMode: boolean; + animatedbk: boolean; + bksliderinput: string; + customshortcuts: any[]; + defaultmenuorder: any[]; + lessonalert: boolean; + menuitems: { + assessments: ToggleItem; + courses: ToggleItem; + dashboard: ToggleItem; + documents: ToggleItem; + forums: ToggleItem; + goals: ToggleItem; + home: ToggleItem; + messages: ToggleItem; + myed: ToggleItem; + news: ToggleItem; + notices: ToggleItem; + portals: ToggleItem; + reports: ToggleItem; + settings: ToggleItem; + timetable: ToggleItem; + welcome: ToggleItem; + }; + menuorder: any[]; + notificationcollector: boolean; + onoff: boolean; + selectedColor: string; + shortcuts: Shortcut[]; + subjectfilters: Record; // Could be more specific based on what types are allowed +} diff --git a/interface/src/types/ColorPickerProps.ts b/interface/src/types/ColorPickerProps.ts new file mode 100644 index 00000000..5eda91c8 --- /dev/null +++ b/interface/src/types/ColorPickerProps.ts @@ -0,0 +1,4 @@ +export interface ColorPickerProps { + color: string; + onChange: (color: string) => void; +} \ No newline at end of file diff --git a/interface/src/types/SettingsProps.ts b/interface/src/types/SettingsProps.ts new file mode 100644 index 00000000..f3961ae3 --- /dev/null +++ b/interface/src/types/SettingsProps.ts @@ -0,0 +1,11 @@ +import type { SettingsState } from './AppProps'; + +export interface SettingsList { + title: string; + description: string; + modifyElement: JSX.Element; +} +export interface SettingsProps { + settingsState: SettingsState; + setSettingsState: React.Dispatch>; +} diff --git a/interface/src/components/Slider.d.ts b/interface/src/types/SliderProps.ts similarity index 85% rename from interface/src/components/Slider.d.ts rename to interface/src/types/SliderProps.ts index 311cbbaa..7ae50459 100644 --- a/interface/src/components/Slider.d.ts +++ b/interface/src/types/SliderProps.ts @@ -1,6 +1,6 @@ import React from 'react'; import "./Slider.css"; -interface Slider { +export interface Slider { onValueChange: (value: number) => void; } declare const Slider: React.FC; diff --git a/interface/src/types/SwitchProps.ts b/interface/src/types/SwitchProps.ts new file mode 100644 index 00000000..8a43742d --- /dev/null +++ b/interface/src/types/SwitchProps.ts @@ -0,0 +1,6 @@ +import "./Switch.css"; + +export interface SwitchProps { + onChange: (isOn: boolean) => void; + state: boolean; +} \ No newline at end of file diff --git a/interface/src/components/TabbedContainer.d.ts b/interface/src/types/TabbedContainerProps.ts similarity index 77% rename from interface/src/components/TabbedContainer.d.ts rename to interface/src/types/TabbedContainerProps.ts index 193c7fcb..fee6f452 100644 --- a/interface/src/components/TabbedContainer.d.ts +++ b/interface/src/types/TabbedContainerProps.ts @@ -1,9 +1,9 @@ import React, { JSX } from 'react'; -interface Tab { +export interface Tab { title: string; content: JSX.Element; } -interface TabbedContainerProps { +export interface TabbedContainerProps { tabs: Tab[]; themeColor: string; } diff --git a/interface/tsconfig.json b/interface/tsconfig.json index a7fc6fbf..2460ee18 100644 --- a/interface/tsconfig.json +++ b/interface/tsconfig.json @@ -4,7 +4,7 @@ "useDefineForClassFields": true, "lib": ["ES2020", "DOM", "DOM.Iterable"], "module": "ESNext", - "skipLibCheck": true, + "skipLibCheck": true, /* Bundler mode */ "moduleResolution": "bundler", diff --git a/public/manifest.json b/public/manifest.json index 24c45fbd..a59b294a 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -58,6 +58,14 @@ { "resources": ["index.css"], "matches": ["*://*/*"] + }, + { + "resources": ["interface/*"], + "matches": ["*://*/*"] + }, + { + "resources": ["client/*"], + "matches": ["*://*/*"] } ] } diff --git a/public/popup/info.css b/public/popup/info.css index 8b1e6f3c..a5a2b462 100644 --- a/public/popup/info.css +++ b/public/popup/info.css @@ -14,13 +14,12 @@ @import url("https://fonts.googleapis.com/css?family=Rubik:300,400,500,600"); .outside-container { - width: 350px; margin: 0; - background-color: #131313; overflow: hidden; position: absolute; right: 10px; top: 80px; + height: 590px; z-index: 20; } diff --git a/src/SEQTA.js b/src/SEQTA.js index e3ac28ba..43b05b9c 100644 --- a/src/SEQTA.js +++ b/src/SEQTA.js @@ -13,7 +13,7 @@ let SettingsClicked = false; let MenuOptionsOpen = false; let UserInitalCode = ""; let currentSelectedDate = new Date(); -let WhatsNewOpen = false; +//let WhatsNewOpen = false; let LessonInterval; let DarkMode; @@ -25,7 +25,7 @@ function SetDisplayNone(ElementName) { return `li[data-key=${ElementName}]{display:var(--menuHidden) !important; transition: 1s;}`; } -function animbkEnable (item) { +function animbkEnable(item) { if (item.animatedbk) { CreateBackground(); } else { @@ -38,7 +38,9 @@ function bkValues (item) { const bg = document.getElementsByClassName("bg"); const bg2 = document.getElementsByClassName("bg2"); const bg3 = document.getElementsByClassName("bg3"); - const value = 200 - item.bksliderinput; + const value = 200 - item.bksliderinput; // reverse the slider direction to match the animation direction + + if (bg.length == 0 || bg2.length == 0 || bg3.length == 0) return; const minDuration = 1; // minimum duration in seconds const maxDuration = 10; // maximum duration in seconds @@ -172,12 +174,12 @@ function OpenWhatsNewPopup() { var bkelement = document.getElementById("whatsnewbk"); bkelement.addEventListener("click", function () { DeleteWhatsNew(); - WhatsNewOpen = false; + //WhatsNewOpen = false; }); var closeelement = document.getElementById("whatsnewclosebutton"); closeelement.addEventListener("click", function () { DeleteWhatsNew(); - WhatsNewOpen = false; + //WhatsNewOpen = false; }); } @@ -193,7 +195,7 @@ async function finishLoad() { chrome.storage.local.get(["justupdated"], function (result) { if (result.justupdated) { - WhatsNewOpen = true; + //WhatsNewOpen = true; OpenWhatsNewPopup(); } }); @@ -233,6 +235,9 @@ function RemoveBackground() { var bk = document.getElementsByClassName("bg"); var bk2 = document.getElementsByClassName("bg2"); var bk3 = document.getElementsByClassName("bg3"); + + if (bk.length == 0 || bk2.length == 0 || bk3.length == 0) return; + bk[0].remove(); bk2[0].remove(); bk3[0].remove(); @@ -760,7 +765,6 @@ chrome.storage.onChanged.addListener(function (changes) { "--better-main", changes.selectedColor.newValue, ); - // document.documentElement.style.setProperty('--better-sub', ColorLuminance(changes.selectedColor.newValue, -0.15)); if (changes.selectedColor.newValue == "#ffffff") { document.documentElement.style.setProperty("--better-light", "#b7b7b7"); @@ -801,7 +805,7 @@ async function CheckLoadOnPeriods() { } } -function RunFunctionOnTrue(storedSetting) { +function main(storedSetting) { DarkMode = storedSetting.DarkMode; // If the option is 'on', open BetterSEQTA if (typeof storedSetting.onoff == "undefined") { @@ -891,7 +895,6 @@ function RunFunctionOnTrue(storedSetting) { "--better-main", storedSetting.selectedColor, ); - // document.documentElement.style.setProperty('--better-sub', ColorLuminance(storedSetting.selectedColor, -0.15)); if (storedSetting.selectedColor == "#ffffff") { document.documentElement.style.setProperty("--better-light", "#b7b7b7"); @@ -966,7 +969,7 @@ document.addEventListener( document.getElementsByTagName("html")[0].appendChild(link); chrome.storage.local.get(null, function (items) { - RunFunctionOnTrue(items); + main(items); }); } if ( @@ -978,7 +981,7 @@ document.addEventListener( }, true, ); - +/* function RunExtensionSettingsJS() { const whatsnewsettings = document.getElementById("whatsnewsettings"); whatsnewsettings.addEventListener("click", function () { @@ -1043,9 +1046,9 @@ function RunExtensionSettingsJS() { function FindSEQTATab() { chrome.runtime.sendMessage({ type: "reloadTabs" }); } - /* - Store the currently selected settings using chrome.storage.local. - */ + + // Store the currently selected settings using chrome.storage.local. + function storeSettings() { chrome.storage.local.set({ onoff: onoffselection.checked }, function () { FindSEQTATab(); @@ -1072,10 +1075,10 @@ function RunExtensionSettingsJS() { FindSEQTATab(); } - /* - Update the options UI with the settings values retrieved from storage, - or the default settings if the stored settings are empty. - */ + + // Update the options UI with the settings values retrieved from storage, + // or the default settings if the stored settings are empty. + function updateUI(restoredSettings) { if (typeof restoredSettings.onoff == "undefined") { chrome.runtime.sendMessage({ type: "setDefaultStorage" }); @@ -1310,7 +1313,7 @@ function RunExtensionSettingsJS() { chrome.storage.local.set({ selectedColor: b }); } }); -} +}*/ function CallExtensionSettings() { // Injecting CSS File to the webpage to overwrite iFrame default CSS @@ -1333,7 +1336,7 @@ function CallExtensionSettings() { fileref.setAttribute("href", cssFile); document.head.append(fileref); - let Settings = + /*let Settings = stringToHTML( String.raw`
`); - document.body.append(Settings.firstChild); +
`);*/ + let Settings2 = + stringToHTML( + String.raw` +
+
+ `); + document.body.append(Settings2.firstChild); - // override old popup with new (experimental) - const script = document.createElement("script"); - script.type = "module"; - script.src = chrome.runtime.getURL("client.js"); - (document.head||document.documentElement).appendChild(script); + // add an iframe to the div: + let iframe = document.createElement("iframe"); + iframe.src = chrome.runtime.getURL("interface/index.html"); + iframe.allowTransparency = "true"; + iframe.style.width = "384px"; + iframe.style.height = "590px"; + iframe.style.border = "none"; + iframe.setAttribute("excludeDarkCheck", "true"); + + document.getElementById("ExtensionPopup").append(iframe); var container = document.getElementById("container"); var extensionsettings = document.getElementById("ExtensionPopup"); container.onclick = function () { if (!SettingsClicked) { - extensionsettings.classList.add("hidden"); + extensionsettings.classList.add("hide"); } SettingsClicked = false; }; @@ -2056,8 +2070,9 @@ function AddBetterSEQTAElements(toggle) { } CallExtensionSettings(); - RunExtensionSettingsJS(); + //RunExtensionSettingsJS(); + // If betterSEQTA+ is enabled, run the code if (toggle) { // Creates settings and dashboard buttons next to alerts var SettingsButton = stringToHTML( @@ -2118,6 +2133,11 @@ function AddBetterSEQTAElements(toggle) { for (let i = 0; i < alliframes.length; i++) { const element = alliframes[i]; + + if (element.getAttribute("excludeDarkCheck") == "true") { + continue; + } + element.contentDocument.documentElement.childNodes[1].style.color = "white"; element.contentDocument.documentElement.firstChild.appendChild( @@ -2151,6 +2171,11 @@ function AddBetterSEQTAElements(toggle) { for (let i = 0; i < alliframes.length; i++) { const element = alliframes[i]; + + if (element.getAttribute("excludeDarkCheck") == "true") { + continue; + } + element.contentDocument.documentElement.childNodes[1].style.color = "black"; element.contentDocument.documentElement.firstChild.lastChild.remove(); @@ -2174,7 +2199,7 @@ function AddBetterSEQTAElements(toggle) { var AddedSettings = document.getElementById("AddedSettings"); var extensionsettings = document.getElementById("ExtensionPopup"); AddedSettings.addEventListener("click", function () { - extensionsettings.classList.toggle("hidden"); + extensionsettings.classList.toggle("hide"); SettingsClicked = true; }); } diff --git a/src/inject/injected.css b/src/inject/injected.css index 7fc8c467..55e9d3e6 100644 --- a/src/inject/injected.css +++ b/src/inject/injected.css @@ -1,6 +1,5 @@ @import url("https://fonts.googleapis.com/css?family=Rubik:300,400,500,600"); @import "./injected/popup.css"; -@import "./popup.css"; :root { background-color: var(--better-main) !important; @@ -24,11 +23,6 @@ html { --theme-fg-parts: white; } -#title { - color: var(--text-primary); - font-weight: 500 !important; -} - @media (min-width: 900px) { #title > span { transform: translateY(2px); @@ -611,10 +605,12 @@ div > ol:has(.uiFileHandlerWrapper) { #title { background: var(--background-primary); + color: var(--text-primary); height: 4rem; - box-shadow: rgb(0 0 0 / 35%) 0px 0px 10px; min-height: 48px; + box-shadow: rgb(0 0 0 / 35%) 0px 0px 10px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); + font-weight: 500 !important; z-index: 1; } @@ -1085,7 +1081,7 @@ div > ol:has(.uiFileHandlerWrapper) { #ExtensionPopup { border-radius: 1rem; - box-shadow: 0px 10px 15px -3px rgba(0, 0, 0, 0.4); + box-shadow: 0px 0px 20px -2px rgba(0,0,0,0.6) } #menu li.active { @@ -1676,7 +1672,7 @@ body { } .MessageList__MessageList___3DxoC > ol > li.MessageList__unread___3imtO { - box-shadow: inset 3px 0 rgb(255, 255, 255); + box-shadow: inset 3px 0 var(--better-main); } .connectedNotificationsWrapper > div > button { diff --git a/src/inject/injected/popup.css b/src/inject/injected/popup.css index c914f5b8..10c8715d 100644 --- a/src/inject/injected/popup.css +++ b/src/inject/injected/popup.css @@ -5,3 +5,8 @@ .topmenu { margin-top: 0; } + +.hide { + opacity: 0; + pointer-events: none; +} \ No newline at end of file diff --git a/src/inject/popup.css b/src/inject/popup.css deleted file mode 100644 index 2335576d..00000000 --- a/src/inject/popup.css +++ /dev/null @@ -1 +0,0 @@ -.switch[data-ison=true]{background-color:#30d259}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:sticky!important}.left-0{left:0!important}.top-0{top:0!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-50{z-index:50!important}.mb-2{margin-bottom:.5rem!important}.flex{display:flex!important}.grid{display:grid!important}.hidden{display:none!important}.h-1{height:.25rem!important}.h-6{height:1.5rem!important}.h-8{height:2rem!important}.h-\[590px\]{height:590px!important}.h-full{height:100%!important}.h-screen{height:100vh!important}.w-14{width:3.5rem!important}.w-16{width:4rem!important}.w-4\/5{width:80%!important}.w-6{width:1.5rem!important}.w-\[24rem\]{width:24rem!important}.w-full{width:100%!important}.w-screen{width:100vw!important}.flex-1{flex:1 1 0%!important}.cursor-pointer{cursor:pointer!important}.flex-col{flex-direction:column!important}.place-items-center{place-items:center!important}.items-center{align-items:center!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.gap-2{gap:.5rem!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0 !important;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--tw-divide-y-reverse))!important}.divide-zinc-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1 !important;border-color:rgb(244 244 245 / var(--tw-divide-opacity))!important}.divide-zinc-100\/50>:not([hidden])~:not([hidden]){border-color:#f4f4f580!important}.overflow-hidden{overflow:hidden!important}.overflow-x-clip{overflow-x:clip!important}.overflow-y-scroll{overflow-y:scroll!important}.rounded-full{border-radius:9999px!important}.rounded-lg{border-radius:.5rem!important}.rounded-md{border-radius:.375rem!important}.rounded-xl{border-radius:.75rem!important}.border{border-width:1px!important}.border-b{border-bottom-width:1px!important}.border-b-zinc-200\/40{border-bottom-color:#e4e4e766!important}.bg-\[\#DDDDDD\]{--tw-bg-opacity: 1 !important;background-color:rgb(221 221 221 / var(--tw-bg-opacity))!important}.bg-white{--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.p-1{padding:.25rem!important}.p-4{padding:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.pb-2{padding-bottom:.5rem!important}.pl-1{padding-left:.25rem!important}.pr-4{padding-right:1rem!important}.pt-2{padding-top:.5rem!important}.pt-4{padding-top:1rem!important}.text-\[0\.875rem\]{font-size:.875rem!important}.text-lg{font-size:1rem!important}.text-sm{font-size:.775rem!important}.text-xs{font-size:.65rem!important}.font-bold{font-weight:700!important}.text-blue-500{--tw-text-opacity: 1 !important;color:rgb(59 130 246 / var(--tw-text-opacity))!important}.underline{text-decoration-line:underline!important}.opacity-40{opacity:.4!important}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25) !important;--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.drop-shadow-md{--tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / .07)) drop-shadow(0 2px 2px rgb(0 0 0 / .06)) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}.hover\:text-blue-600:hover{--tw-text-opacity: 1 !important;color:rgb(37 99 235 / var(--tw-text-opacity))!important}.focus\:outline-none:focus{outline:2px solid transparent!important;outline-offset:2px!important}:is(.dark .dark\:block){display:block!important}:is(.dark .dark\:hidden){display:none!important}:is(.dark .dark\:bg-\[\#38373D\]){--tw-bg-opacity: 1 !important;background-color:rgb(56 55 61 / var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-\[\#FEFEFE\]){--tw-bg-opacity: 1 !important;background-color:rgb(254 254 254 / var(--tw-bg-opacity))!important}:is(.dark .dark\:bg-zinc-800){--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}:is(.dark .dark\:text-white){--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important} diff --git a/webpack.config.js b/webpack.config.js index 58b2b428..47b0165b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -64,6 +64,7 @@ export default { { from: "public", to: "." }, { from: "src/inject/preview", to: "inject/preview" }, { from: "node_modules/webextension-polyfill/dist/browser-polyfill.js", to: "."}, + { from: "interface/dist/client", to: "client" } ], }), ],