From dd9552aad15351571aee888c1ad528de3e168403 Mon Sep 17 00:00:00 2001 From: metacryst Date: Fri, 20 Feb 2026 03:51:31 -0600 Subject: [PATCH] rebranding to forum, adding settings and stripe page --- .gitignore | 3 +- db/networks/comalyr/db.json | 0 server/db/db.js | 2 +- server/ws/ws.js | 7 ++++- ui/_/code/shared.css | 2 ++ ui/_/icons/Column.svg | 11 +++++-- ui/_/icons/columnnew.svg | 9 ++++++ ui/_/icons/columnnewbig.png | Bin 0 -> 17777 bytes ui/_/icons/columnnewsmall.png | Bin 0 -> 4361 bytes ui/_/icons/columnred.svg | 9 ++++++ ui/_/icons/settings.svg | 3 ++ ui/_/icons/settingsdark.svg | 3 ++ ui/desktop/apps/Settings/Settings.js | 42 +++++++++++++++++++++++++++ ui/desktop/components/AppMenu.js | 3 +- ui/desktop/components/AppWindow.js | 4 +++ ui/desktop/components/Sidebar.js | 2 +- ui/desktop/index.html | 4 +-- ui/desktop/index.js | 21 ++++++++++++-- ui/mobile/index.js | 2 +- 19 files changed, 113 insertions(+), 14 deletions(-) create mode 100644 db/networks/comalyr/db.json create mode 100644 ui/_/icons/columnnew.svg create mode 100644 ui/_/icons/columnnewbig.png create mode 100644 ui/_/icons/columnnewsmall.png create mode 100644 ui/_/icons/columnred.svg create mode 100644 ui/_/icons/settings.svg create mode 100644 ui/_/icons/settingsdark.svg create mode 100644 ui/desktop/apps/Settings/Settings.js diff --git a/.gitignore b/.gitignore index 2c338e6..e23b00e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ package-lock.json node_modules .env -db/db.json \ No newline at end of file +db/db.json +ui/_/code/env.js \ No newline at end of file diff --git a/db/networks/comalyr/db.json b/db/networks/comalyr/db.json new file mode 100644 index 0000000..e69de29 diff --git a/server/db/db.js b/server/db/db.js index b90a78b..ebde400 100644 --- a/server/db/db.js +++ b/server/db/db.js @@ -1,7 +1,7 @@ import fs from 'fs/promises'; import chalk from 'chalk'; import path from 'path'; -import {nodeModels, edgeModels} from './model/import.js' +import { nodeModels, edgeModels } from './model/import.js' import Edge from "./model/edge.js" import { fileURLToPath } from "url" const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/server/ws/ws.js b/server/ws/ws.js index d5ac2fd..b280438 100644 --- a/server/ws/ws.js +++ b/server/ws/ws.js @@ -46,7 +46,12 @@ export default class Socket { const cookies = parseCookies(req.headers.cookie); const token = cookies.auth_token; if (!token) throw new Error("No auth token"); - const payload = jwt.verify(token, process.env.JWT_SECRET); + let payload; + try { + payload = jwt.verify(token, process.env.JWT_SECRET); + } catch(e) { + console.error("error: jwt is expired ", e) + } ws.userEmail = payload.email; ws.on('message', (msg) => { diff --git a/ui/_/code/shared.css b/ui/_/code/shared.css index 4eb9571..fe97d86 100644 --- a/ui/_/code/shared.css +++ b/ui/_/code/shared.css @@ -18,6 +18,7 @@ --nodes-src: /_/icons/nodes.svg; --forum-src: /_/icons/forum.svg; --people-src: /_/icons/people.svg; + --settings-src: /_/icons/settings.svg; } :root.dark { @@ -30,6 +31,7 @@ --nodes-src: /_/icons/nodesdark.svg; --forum-src: /_/icons/forumdark.svg; --people-src: /_/icons/peopledark.svg; + --settings-src: /_/icons/settingsdark.svg; } :root.red { diff --git a/ui/_/icons/Column.svg b/ui/_/icons/Column.svg index ab79e11..e4bdbdf 100644 --- a/ui/_/icons/Column.svg +++ b/ui/_/icons/Column.svg @@ -1,4 +1,9 @@ - - - + + + + + + + + diff --git a/ui/_/icons/columnnew.svg b/ui/_/icons/columnnew.svg new file mode 100644 index 0000000..d7a9037 --- /dev/null +++ b/ui/_/icons/columnnew.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ui/_/icons/columnnewbig.png b/ui/_/icons/columnnewbig.png new file mode 100644 index 0000000000000000000000000000000000000000..eae44d0a299e519150233e0f53961bd1aec3349d GIT binary patch literal 17777 zcmch82|SeD+weVO&qSLo;;BekCR>(bC`p!(b?hSv*+%vxQ?^7rm94TQp%{z|*$s*( zBSiK+4`Q-s-@bEup8xyo@B9CM@Av!W_bc~(opY{po$FlZTF)J>r=z}m*TG#71nt(i zcwQfZ=()i^Ic7!x(dX^I5B{*=FPeHlkeC+y50S1E_Zk2Z9{TF%pxh?D3GhO1fA-Q@ z2+EIU-LPSRAT>sf^Jfix5#RbxCJLI|M1Ordim1I%TkdeKQCs|42H#l3g<9vA`^qk~ zKCifNUD8^RWlAbG;elYPQ<_e`&GmfCm)v7&aS1209;Cf8H1RPpGHF+M$P<`6zI^6! zzj$}nl$H!#FyItVIn60W_uFCkp6Mk|;#Z{8mXL6j+a z6rfS%6aus>zDtAfAp{$*TdfF)F9fYm;9}-Bt`|N8dejT!isM8G-3#jU5F{ar40U>q zOi&6u51I;&;0WCYxd@07SG;X0f}m?mzOfsEir#I`=(7NZL4@l_m}AeM5)k0et0fN# zE*J*rjf@kjnRi2k#o1YALR!guYML4n!r3V*B8MDuZ+&G3gNrm@(?PpoG`~Il8R0P; zn8RQ4(Eg#*@I=L2ZIX!GqW}m&S${_W-2XppBBNT-mD352k)#;DJ%5Fs3_ut;T+VHQ~;s^X6feXuaR z3vzzg$MIYVQCqi)2O{^J;g{K`5Qv}`Hvs`dYV6G12ijqhPPQI_>Hh;sBthvz502vi zm>~3I!r}aXPW!(kYG+y5OUD7K`X6uvqcY~khhJGCTmV=)U(&Bnjmg4Epu>VN4!5K@ z0mLgo`Oh;_sHi{$R4fPJ<&CrP*QK65nP;M-1OqfG9>06}!@OXx%AXuAVBQhFv5%-H zYI}aq_rl!_sHfgwVw?!?E^e7A@I)~rUj%=k_Wyooew$^=`g8sdn17`OfFSqKj7`CAPg3UVuSl#goup`zjTAD}I~dlm)cj^{ z*;|KP4qRg9o}7{j-DUr23xG*7LKepl*QUO?!vyG!ybi>fus9L6_<__^TfxFToyps= zUb}WYiv#rS$ZE!ZoYiQ&UM!8M?f(|K=x!(qz|J52=y&@Z!4>zT?}Fh_-Sg_iP;+MP z+_w=pKsdoDp0F${BAA#bdnh-S~Eu3pB{*qDS)M1nfsUEI{8Zcx7X0&G)l;I?Sr|qLK{@ z0f3U|Y3hEewnv1!G}4H*42Il-S8Htek(5EOkt60wHCX~Ep@b$KidrX9%%Wb4jS7v! z3m|lNH{=^Zc->LNYWHX~S7733tMUw0;KFOOE_kvy8ZELNrF<-v2iL-t%x4M$m z5+x*;38_?HR5~8+C+;6N7aZOlit=FNE|m|3^)Q>}PqX!n-?^zJj3~=sSnOusU~Gj{ zQ=UArrL?FO0{|p9Azk~UjVnTxYZyM36iB*b>| z{?lHR**VgdIsg(5hUF66JdR|dxHXGs;j^Z~S{9k9bt`4ReEW~}mUXF7FwA^(rNLg| zjRBuQ_ikDQfItQ-A|nIquc9og^+I)S#qYnB27si)>dKY#UDDiJd683K8z72j)a_fN zl60X`pXcBXP`zGM-UiI*y?ohfSGZIU0b+*^L`i+0<3^~)OImz|m(6FMB6&5zlfPC{ z=i!PB*gPO&v1oPqkM5H^D7)#JKz0DZYX&|JAD7hbKJsZdEerr44?QzM&Fu3jEC6Qn z>L{>}d`{DHknqyAW6rS&S!yrH7s_FA#p#r4e-@Ecv*=fI0_qEDY!}SgXF$H_@Bq9J zR-e8!df^oj+yS4bgevp{b0M>$i=Lkj!fe(0L^gV17xAtheu;ZQ*1Yxff|-#-qFqfI zd{hY^Hg03r4X<-Z#B|()0hHG7wKqj$%}{ z-4jaSfDZ(DzQ=h8&4CI%170Xav6CT#14}2%bMM;xa$cM*72e$N>8+YAB~;^K@qX?* zQxv#T${D`hm;jt+2}D;a^l=9JkTIa2f)IUdq$ zCP;=cKqmcN$J`AVf|g);7_yTq(&#%N;SdcG!fy66+d%}ovL%`DXRdc{a~sFMKQY*( z2D%YG#4Oz#tlWs`G?IwX4?{-?!pkRwTlOAvx1{Wt9Lh)UliM|3h@e$?_w#IiX5(Gf z^v3u5pG$#h!ap;K%DzkO94;7F`k~(wPNEQ0B$Wrp;i2NxLh%4SXnv_ zR#;G9Mx*u0)UdFLD7WU!FN-UVcy!n^ETx=p$KmK}pPr@LacO4ts;;t_(1pGQn@pKg z+9lS0GKfEK>y+%!-r|BAbH!k_B=;)RO+`Zq?pfx(2$)kp#h#50Bc#FvQ#Lmh!-h>v z0&A`-mRV4o9iCY`}TvR2O0BqFHc71JPHZyjXRh6QFKbnLozR}(!-40v@f<}@F_~sZlJ+69` zt=`ZoSV$yi&&)espj@z(=#j^GVLo)5n-)XRWXPz9G}jtHCT5-D9$hO{VTxp&Xt|NZ z1msQ$!>ZLD3n!OK0<_u?8mjvT!ws{5GNd%jc zjS{eCr>o$t>I9;8reaZreruggc2m-bEkC} z2N?6G5XOv!8)i48*cUCrO*k0Efh2f2E_M%md8LIjrALu22lN0hmr_bzbKX8d8H*vD zErpNJ=dTPX(xpHRUJ-7v52fT!OkIilB*;AuQ14M3XuqG*h$Fa6wuKT9P)E8JZvY`@ z;*bGL@8_&jniL4KQ0J9(ZjMGWGDg>ok=I&gkPz|1OzQ;!oYQTYpC4AMbtPh4HjY7* zryH^^UAB}Zhlhj*02?O@gyrHuQB+^!2)ifSbhsegB{PiTS32hp1*!}|KO&0KbkA5q zgi{l(QA&)?>V8$*D|N9cQ17fk4=_r^%ki?6>?DqW)f83AtQf_Ze6z|25cq0`z!k04 z6uI0j`mSJOL=YkxBI#K60L*IETj~sS&bleG{7euw%{XOliJNq2eO?*K*p+NNvkcB2 z@sk@&yXfs?nlCfpr+JH%_Gb_W(LQJ0O?8%EgEAM6*Uv9tMkY_}3m_CaDY&Uc&_hIn zc<;*H_|sepq5II~de!(9HC(@0MYC4%^Sgkk*SG3?9BcXMI%eX-5=`hACyo#YF)lz& zgHA>wONb8Fz?D0@7`x((XBOZkJ8?*Sqa*g8^hY7+oa;|kT;45z772BHe6Bu}o4cF4 zeATAkjLjFAB%&!bjKwT}I3`0$<4Z_bf?N4__9_;Vv32GHslaNMeZXb1?D=S+e`0s0 z%#_ByljT)|#Zv;v?ACdD76`ZL?U>fC%7(jbbzI+90oTQZO~WuMBBA91z{H-9caUSF z9lJs?V-l2u0V&==Q9o`NuKNE0x-GSOnTBuIU zk#9F7)@j=F=@^3Qk!)TQ^2H0G`sqd*lCK^!1#Ba9KW>>mg#r7tlQAgI>7l&D1V`M+ zEv&%H-M}lP7>V}^CfEJoh`o>Taj34;Vo;s)BcwZ+-gu>igo-D{re4K_juyAAFXnQf zlCRWAeRq`W%b&dpqVDS;0LeTQ+e$*cW%E%ic4AOH5p*LF)o4u>M!+sLCBoa$e=SJU zF`;Uq@36)3>4Opn1~w$z0(#hd`WT=gBYVe8l)v+-Hbg>QlE9S#VO&@J!&nLX^*%|{ z@-*P@%x1B->9BAq{uI30GtTcHS=NM;@3Q;$fpKhHC*ZOVIb!)VgfEZ^vq_OHwb|S= zWNf!^`(avHr~f8~0~Id9n2^0d&av`U2A;f==|orN)Cnv}Q<#}+tLeL_%N0oVOjx^A!-Z#$I{b4Q15vnfnP;!5PZsaZ`3)=d z6yYxFHOvqCMHkNKu6MJ-crXnWwdkquwQGu$*WU~zJqv+H+NH)pmv}B^PP+#)b?X#y z8RUqR*CUsOa$-6n1X`D3b`7~^iM(_Y;l3YWC^>t-r|Cz*N9u`6gKQ7)!>a zKFs1CT4^#UsdvcV|LukDuBg||31UTtIw1;RJ8QqSRo+i+44p*sX)WG*Tcug?NFwg} z6|N!ftr+*``l6O1YeeW+DmPnP25-k(M-!V>>)N#wB4Wc>3{OYr>(7%T<~7Xq?#b?1 zPFh*O1L0h9G=Hxb@X7Z$yp}BE#8$0c7?OHD+{w-`V+R-_S zu^eqC^gIMJWq$O&R98OWmW*b5HHaW`9Ab+vbhlX2Pp6lk9Mo7}b^T~A$hPJXOW@3K zcyPQnz7&M_nZXEwbn%>hoqN!;kO3-syZeCnJ|=*$=|Ik2%eoW!RX{Sx4SOGNKP@ss z1&}pW9xT{w8XS{ad{H{@i z`jhSNGmhEhn43Scjr;t!WL{-xY!6T)pK{0g3HsMq`vC(_|E#Ieny3jAppF|lI%b2Yk z(XDN(T2la^%#!MzO7Xaw$;`b=Rlr7Ol(*{p(bF)xXO=xFB9~*BoW z&C9LtRXB?rvkt4Pt*UH-)hx)izuqTAIqr`-OlRIUeoy#4cqQLoV;#$ACI=2`Ih_Y5XjPP*yXq&I zwMJY4gS!3_XJ8|0t1{&VW3AD)Byn4AM4J(tjcL2x5{n-O@xGY4&+3{>kLa^pspXu; zbbaxUX0cV{cF}WU(h_goG4@Z;?}H5{rCo|~(@08ROc^l(@{w*=41Ez1=iHHPh;AHn zSW_ThwD7_Z*^#tX`yPBMZ-)s2XBEtf7Z|n5pvtT{e7Kg>FyJRUd`_~HF1+c*qdQ(- zr31FDHGaON!3f3W#`x;;(8sK&ORZcMqI1%#30Y`t>=WT;Yf5``XOt!#P^>qG2A&b& z)bVARlxwHMpfq-|Ua{JcD`-{zJOeZo_(48~Augl&y8uprjg~?Ok@&-ygbh#uVhwn| zAOX`X{r-hPse+<=*<(FN+++2R!F`ACg0uQRXdYfT>lkGmB?;8;wsh28J-;@ zl`mMovflGvPaQa97_DsC7Mj58rTluF!kSIR<0oOP@Am-$OE2;~c^gn?dnF@LukZaj zNHT?D-iAV#n(m4lwT=!nXp4?zHQ%iv2^mW8eK%FnV1Bmfm!Z7%>K3Hq7rYX_fNX^P88%uM0{D z)cX>;`x12@7Jsa=BZl`d=wz06Z`)wEeKJgHLaNvy%F@OnY3mwx`>7*{9ok4+-qB8_GlUlNJO_i%-#`)VjaL zW;UeTPtG8x7I~<#TSE1Rfj%l8n4b5V{4ur5ddtWAQ`{wgp`X?=BbPV9@)b%7=}}C9 zO$jn_-6%9f*00IlmL+Zr|1z$BdVZ1nu&OfAO{(eY$}<(-bfFjIFB|5@S6vXQm-V0P zUwM%jZWeZa4lBMl1SZYZJ3gu!nFX! zS0=KngQLal2iAd%jwrvpvem$!_DzY(@0s$TOP`_EsGo#+@ZgZ`>(+M6@$9)y!QV;mRi*?sJ}+y*++|}j!=?f z!qn}8mc63#BA7JH+wE1S_H=gZN4)cDl8z(B%&%aa&!$LzLOZ35tV`HVfQ={k??Y3R zV*GQYc!x*$;LtzS<;od0@y=)0!-|`FfD~sd*E{Za@{vFELfdu9<6ye@xCY24##z>p zh6g=v*?qn0Sih-NrxePhO*2^H-j*KWw-t~bJmQ{&zM0waGd{A#USTUSBuMpcB}jZ^ z>dCGLHcs%%c=7ZW3`Tc^pGv6Zw~eDm$8m2(Sc92;!i<&2*o|Q+% zF@v1cSLtN24tsuYzslwz^3sz|ep^X;lvin_knv1i=zPN1Q^B~nd(B9Q@<{Q+g!!@D z$tyawC-|1Qt;fk8r#UZCTAEA^Piem{AErL5AfNpveX^fac~99NBBY;QJh5M{Tg|BU z^Ab-`$b8oB7mo<373h%=m9CaLjO{C+VHGNeci*4~DUKU?rXoCJ*oS7*rv@XGE{K8! zJ$B~|(@Q;!s3n&&^G;`%S8Lr>9M?_zR(aX?)x*t-@r%zgUVxzu; z92m&nIepJ0F09OD`$wXiRl|h7Noo>i1Co`?KhI03f@0c)mD%Wv*|FFZ-HCd|lS(3a zfgcv+{8OeXK2XD&!Vn;P(eN!qxH~SJU7AXpk(w4CD4#zaTg#tTWf7)SXEXRI?EM}I zV)HY<+lPzS7Jgntyc_-)uvl+0I9ooMoiN~}Ef0}6LG>qk__Ss6jQDgx{qeQ<+Z*#% zL9u%zRFZDkh%az=d~Rk0aq1>%Abj^p#V%gN^%(Z&k8Ui3*nD)PL)9=iG@=+CvTvzuVkB%I z*+DDaOncEP27w&U3%7sry*=X!ObN*38`OjZvb4l7nMxd*0=1Kc8}bNef#)Uaotrgk zgbTr-y1jrKLu!AE<$+OV-6B-%ujfZViTVN{?A3{&=Tnc*e*`Bg>p$D0KvwYajr#y5 zAm9uU#{KKP<%hG`B@_^Je7Y(5mS1QP#G8J2^Z~0E`M#1G$?7v;;Tj4iU!+XL4p8P(v1Z4%fP2CC%` zxYXu^u0Z^%El9(Q3ZIYh7bxJw9p*D&q3UBSsy_I>90epA$h#zYuyAgTleTQIfovph zGeKNQsf`j($NF%xtc)WQ6gR3kLJYxBzA$s+R!f-=0tM7-kK$ZHaB5K?+9$OZ;0aPO zcNws|5p+aduCsKIgd1=KqyU5iKuqE#9ekJP>md?y?5h}-XJBQOgelvQBuRlhS!jVx zfIJb@TjX;C>I_ItN3jH>{SuU-7{YMctLtEYjP3@vBImrwXDQdf^l;rX34_E9v?Zu3}PkvZQM z4+xl*$KES2n*?sfiz?6LfwaIczoCJcLAd(zk3UKfNCw$ptu3}d78UJXyXK4C=2<=g zN%;4Z(7D8!P%ln_FA&AC{E4KY?^CXs%OL10=oo#^K9ik&i{lo#_6o5c+2ImOdNIly8Fc9S>WvM*-S!homHz8fS9ym+z?RQ@DyFkHDT zU`a6YJAiX3jl6UA!EJ1F=;FswS^>B#uqr{rPsGarkRRfO*2;&PtTH4YBDEP7Yi-`0?uM zUX$Acqw*lDELF9OQhO-b!D3u*Q4i!JsIdY9TdUCs$c$#SHs>Z4${f}ZEN8ogkU${l zBw}wYz|}PpiyK_%dk!W6e_kEKf&c%U%?345;7LK|cIxy@?TA{qj8oJQ#mq*&2zPG( z?H&e2<7+P?&JqR)r@HYHynelb^IMO-o{S+^l>n54dlr+c8>qc~7yv-%ti;ghTxAlzqmS~ux7Ux#(>Mo;y#`0SN_ zQYke>nGGWO0W$cBF&h4lO0dAONRiY#t~_m!8I0;DdDq@tpXY$O_K16uFyQh8GbKXP zsHU@a?U?QJS=$UF5nj;44LftKToz%mXgpba33maA76$Ao#RK5Fv3gUp%mzenn@}Vy za-oVyAg+_a`$RTCsM9{kpBP&Oc$uqaQ@YPWw|uu7G=0IKPI+TRu|J!w+&6c~nDnkzi*5`{L3JMPlxUM8Ap3 z3h7n+fKB}b3JvrCy_jlB{`FzSUT~E~N|6<)1;DL@s(?CtYV*=}o+=-@9}u`PdXz=8 z`w-+YXIGcG;^Y?Yo7BpA1r3f|0^tr#fsGHx)?lz+fS(mS2L{7LHyU(b3_M`9v;z== z0lKd(eD}G|?*IRlg-;PVpHL_Ix=Xv zYH!!_vu=Fe=+~bxnM&PXH0tu^HX+fGX@G|>H z%asG0q{@<8Qyv!SJtI?*sm!E<(^j}}z6;E>Huw&J7H}H^qSAty%WMLCS9@A9BcGm* zDMtnek?BqhupJ729i|Dm4*nid@&ubEYUaai6;#yEJ?by&ZVleRc5ob`H9Y z=CRhX59(6nfQ72(Sclc?cQ;PAP;x7}zKS4Dd(a z?>}2q#5|jSzasQ)YOB1N%C}xjosTWqn-fhkd=EkDf-t^SDVNwb?&PaVm{JRI zP=}S@1q6goU6~lrGXY}zj!Z*IPsdE%-a#K|h!I|TR7U}qncKVZ7mYS6M_e2qLxiJn z1=0Omn~of@fLJHW#5djQo%;?Gs)VHc42Y7bfHV8fo59=fa+QWiqm=r6=v(_CoIWh= zR@C9BGUCYRd!60sF0plf5J7{5+c!rY@w^o?MaDF^Hx1~XX?}4D2^|x{4Hcr1Dj_>X zmF^3RHPz^;%E5hT_~h^aqP1zDWRpG_5)?OBpa7;lyaS_=7p#iL-Rsgs&4Gsn?cWDz zC7Zci*D7wgo>n0^>hH=y1Q$nf=U{4dsMU7^fATIoxa7bF5CS2G+E%rCy07@Zs~#b@ z-8jYwUwB1883nq$;^TY7F0T&wII1#$uIJ&d6K!>9a@Liv;QidM?`6YNdmxX&^{6c>1P`?Jo2 zzy)TX_N#qBpK4RUoPRK-kcXWLJ1cCrp#)L7n^(ntdBzo86{CW(xRus*KxTPU9&+}e z{)on+Nr!Ij+FXN3sp$6f3_5UYjKt4`>tC}`qWUU%2GC<61RZ5AhIiEMq&0i?g_7{; z&_do0;448|o{MY6&D`kE_yBr&z;uddgF#WA^ngrY(ztHFnL_XZYwN9z*`KGKu`^@u zGyNft8^xI0k0tfw>lWSRh|6Erm|OaUgK?wLb7sPM;RF?7}+br(Q2b|0Z*G}@xs4#Do;LV>h+4I{TRDJTlafL)QZ89t}3XIn*q5ySW*OFTmLT;Fmmge8Hz-F`pgk z1ZUjBjmkTP8L1mym{qx-U|JYZWIpxTeq#Uxu6f`%m1i}Y&&FIA^OubuK6^m2z$}b5 z(qn$a)u3{@6@56E!574lAi*}aD%M-+S2?K>jH0}2Yy*XpU$nL3r3s7qEVo6;a#sx;3P1AG&W^qwjpJajY?DJGRp%4dg}sr#Z3mrpI3u zLUT^kqLg>#EeP7`?It+_hq-8xC(J9U^;vC?WhICeK8{95NU?s&q;}eySm~xa%M3KF zEFx(g?6janV>x1d$>v&@b#Cpcc|*3&`g%myaReR7F2F3A^YXRiz8vw_eSB4NL?3C_ z&t-kOC3gncY0s#gn0h1RlbIXadA!&tOs0bP3k!kf`Hi)eYtxy{+%kz@)_mnHzc>Oh zA;f-_a`njR%v-);Q5GqeoKqG3rdyf1>GsYEgfz`!Bh9OZG{+u!tz+9}@o&5xM;tT2 zLuJ(Jfvr6vikH@BMjWFCk<0Sb73t*KNhH*07H`*Yk$7F{gL@3`c(h02#})S4wIlUq zHtWYfgm{hId@9@Y=tEUUI?=Mn_vu7chftodLX@qw05ve1>RyZ)aPdMw*K(+DT+urD zw|{a^wA^~DGq)LVYs92|X{9Ickp;FhH`8%M?8$~xg`d*t;lTCwLM>ih>CMj5b2nw$ zw`VdHqS!s2io6oIQJxyB``7~eHWw`+>@xEZGERljcKE8c+40N8DPLW)i5z8lX&g@L zY$LnJX>S#x?WS7m+O)R|(eAO!H{u;*m+oY0pmoXt9T-*%0XJ(9V!3Mzkxq>g=P_+3 zbVnPsgDrLPsJ=(H-7^eApC;XGP;9B|$cgn{>i3mY1X-jLnp2H^v0R-nqUf?9I>UHof-{b!lBYjq0d#qd5A;iknkF?2x)ZqM2LA%xGfvKj{7tFNgc|{UOt=uRUuK13pRCv0 zN`lZXRm}^K$LBYtG%=d<1K)16OExz>i6R0L7KJ^TN$drO#8X;h5jVgMliOyDs2Te+ zW>x~tbR^){;2t#873uO?7G18ux1{$Ql_X?bKS&Ymq1(p$5VB|;_*2(!)+0b~)aWR*KT4>=7aGFwnKB>XNWfm~A z4iSNw!al=H$&$^*wv|>?dyWTk1`rgwGLwuu?+M+Mb1B9kvkSrrXZ;nO8@Ab*DjG60I zOMzZX0kFJ#V0n)*Q_g;bZX-*=sjqDpxbDlfO?$jxr)UC4%c?zuPOgQ-mILnV;(xdo z`qB5m^aU`L2Dr6?A7VTxOWnQbL@vcVt%VAF_QFjd-$kB_hcdq#Oi%UjPNMl>EU?dm zt=dLG+Q0XT^xl8wgdKSZGKxI=5*R%25tfsPVBC&dM@2lE$IL21*~;Q$Iz?)0tGxlJ}V~fvCQQ++Q04Bzk2*BWBBK_Moof5GK70Tk5c#A3!bn?e>(?%PoSI!H@^=E zl>uX~vDJ=%>@j%!N8o!UJG=a+ zFCRgW2RYQ>O`sw;dDs#>oC`TWBi!+y_XP4xFk#^?7S^=~-!avs9eoZbdLZW*b#)c3 z|BxvavN+!ZfG%)>T^0vlDFB`0e_;h9cqM0A9fWWme|Y+h!!ApR zAX)hHh=i(cCRC3vEEQXS$prs*v;HkXd>_(CRy#b5`uPYk{&&*%JK5?&7Jxt%{+bfU z+6X>>g^t0Sg$s&VMv#x;egNMvq?NNj-}y{-XA-=4dI3e;;s`Xv0e0W%L=uDRFbHMg zSOoljm$-)7Bhw)e;yZnrW+UvEj6(uPj2K=9&gam1m_fgap8E4>cH9&U;JbstB#6!l zEA?mj1$}?Vc*@nr?y4t)yo5ryRG?j# zxcO|g0)gcPLEA~iOLX8<5}@feYT9HV$QQ&~VDLXn^Z&Yu#ImC^V(3xMHELk0gkOpx zaSqqgd*I#8O@F@!H+Ic9OB@FT!^{kY`1d~u0_H ziH-x~MOjHKYbw|H#BOrpc_AI?V1t5mZrK|T}{MTWi zOz^OQb&`CMj5^JD!Zps6cIIb*+4&&#ek7v#dhjLCh((4zo-YQU#uB{tNF>J87XmDQ zF!Atm2)#TUz-IQ{As~vAE*}PD9r`=PRrH8ZeE|4vkbHV9Ju0IG@RV}G@gYnYK$381 z_etESlpQ;M&MIKTSM&Duc6?JQ{4|6qZM?ii1hhsbTT=EXQ7x!3zd2UIr z4p9k2f}=&Y#~*G<*`ehfJCAD1<3`kjer3{DcHBc~i+5e&}MCR=E}q z!j1PGVz0Vt&PHsu`eF&=w6-;8!}GyU(4PJO8UtQ_nc$`bkGJDaqf!E@Oy&-P;I&Fc zKrNvFZ|TM;a4uDGpfhyk7X*IE7GPe&R%0(j=tveeVPJ%wD=)}G&y{{#4y2-uBaHE# z0rVUHAfe(BbqLHYy5}!b|6y%AjDSb(Ocu!S?c?IyMyKS1r?#Kn2ZysSdn5`p=S10k z=1U{ie=Ho6Z!e!IxUcn5vf*YQHoC-gW{<-cHtfAtQeFcK{7pTip{8>__Z;r-{{aSE Bm%{)6 literal 0 HcmV?d00001 diff --git a/ui/_/icons/columnnewsmall.png b/ui/_/icons/columnnewsmall.png new file mode 100644 index 0000000000000000000000000000000000000000..eb80d8121eaca5042d8178645236e1da228a04ec GIT binary patch literal 4361 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 + + + + + + + + diff --git a/ui/_/icons/settings.svg b/ui/_/icons/settings.svg new file mode 100644 index 0000000..73807d5 --- /dev/null +++ b/ui/_/icons/settings.svg @@ -0,0 +1,3 @@ + + + diff --git a/ui/_/icons/settingsdark.svg b/ui/_/icons/settingsdark.svg new file mode 100644 index 0000000..a5f9e01 --- /dev/null +++ b/ui/_/icons/settingsdark.svg @@ -0,0 +1,3 @@ + + + diff --git a/ui/desktop/apps/Settings/Settings.js b/ui/desktop/apps/Settings/Settings.js new file mode 100644 index 0000000..e6ca655 --- /dev/null +++ b/ui/desktop/apps/Settings/Settings.js @@ -0,0 +1,42 @@ +import env from "/_/code/env.js" + +class Settings extends Shadow { + + handleConnectStripe = () => { + const params = new URLSearchParams({ + response_type: 'code', + client_id: env.client_id, + scope: 'read_write', + redirect_uri: `${env.baseURL}/stripe/onboardingcomplete`, + }); + + window.location.href = `https://connect.stripe.com/oauth/authorize?${params}`; + }; + + render() { + ZStack(() => { + h1("Settings") + .fontWeight("bold") + .marginTop(4, pct) + .marginLeft(5, pct) + + VStack(() => { + HStack(() => { + p("Stripe Integration") + button("Set up Stripe") + .maxWidth(10, em) + .onClick((done) => { + this.handleConnectStripe() + }) + }) + .gap(10, pct) + .verticalAlign("center") + }) + .gap(0.5, em) + .paddingLeft(5, pct) + .marginTop(4, em) + }) + } +} + +register(Settings) \ No newline at end of file diff --git a/ui/desktop/components/AppMenu.js b/ui/desktop/components/AppMenu.js index 0e22b5a..88dd99a 100644 --- a/ui/desktop/components/AppMenu.js +++ b/ui/desktop/components/AppMenu.js @@ -2,7 +2,8 @@ class AppMenu extends Shadow { images = { "Dashboard": {src: "house-src", size: "1.5em"}, - "People": {src: "people-src", size: "1.7em"} + "People": {src: "people-src", size: "1.7em"}, + "Settings": {src: "settings-src", size: "1.7em"} } render() { diff --git a/ui/desktop/components/AppWindow.js b/ui/desktop/components/AppWindow.js index 61d71c5..f59709f 100644 --- a/ui/desktop/components/AppWindow.js +++ b/ui/desktop/components/AppWindow.js @@ -5,6 +5,7 @@ import "../apps/Messages/Messages.js" import "../apps/Market/Market.js" import "../apps/Jobs/Jobs.js" import "../apps/People/People.js" +import "../apps/Settings/Settings.js" class AppWindow extends Shadow { @@ -29,6 +30,9 @@ class AppWindow extends Shadow { case "People": People() break; + case "Settings": + Settings() + break; } }) .overflow("scroll") diff --git a/ui/desktop/components/Sidebar.js b/ui/desktop/components/Sidebar.js index 233d533..1086309 100644 --- a/ui/desktop/components/Sidebar.js +++ b/ui/desktop/components/Sidebar.js @@ -17,7 +17,7 @@ class Sidebar extends Shadow { VStack(() => { let selected = window.location.pathname.startsWith("/my") - img(document.documentElement.classList.contains("red") ? "/_/icons/quillblack.svg" : "/_/icons/quill.svg", "2.5em", "2.5em") + img(document.documentElement.classList.contains("red") ? "/_/icons/column.svg" : "/_/icons/columnred.svg", "2.5em", "2.5em") .marginTop(6, vh) .marginBottom(2, vh) .attr({selected: selected ? "" : null}) diff --git a/ui/desktop/index.html b/ui/desktop/index.html index 94be050..ec7f25a 100644 --- a/ui/desktop/index.html +++ b/ui/desktop/index.html @@ -1,9 +1,9 @@ - Parchment + Forum - +