From 623bff5b092e11a36bb01c63f3d471c303c08284 Mon Sep 17 00:00:00 2001 From: Eric RANDRIANARISOA Date: Sat, 20 Jul 2024 21:44:21 +0300 Subject: [PATCH] ProfileSideBar done at 80% --- .../composeResources/drawable/android.png | Bin 0 -> 3184 bytes .../composeResources/drawable/compose.png | Bin 0 -> 13589 bytes .../composeResources/drawable/css3.png | Bin 0 -> 17423 bytes .../composeResources/drawable/git.png | Bin 0 -> 17959 bytes .../composeResources/drawable/html5.png | Bin 0 -> 18097 bytes .../composeResources/drawable/java.png | Bin 0 -> 6423 bytes .../composeResources/drawable/js.png | Bin 0 -> 17179 bytes .../composeResources/drawable/kotlin.png | Bin 0 -> 2200 bytes .../composeResources/drawable/mongodb.png | Bin 0 -> 19862 bytes .../composeResources/drawable/mysql.png | Bin 0 -> 18561 bytes .../composeResources/drawable/react.png | Bin 0 -> 23181 bytes .../composeResources/values/string.xml | 3 + .../src/wasmJsMain/kotlin/data/StaticData.kt | 34 ++++- .../src/wasmJsMain/kotlin/model/SkillData.kt | 8 ++ .../kotlin/ui/uiComponent/NavigationBar.kt | 56 +++++---- .../ui/uiComponent/ProfileInfoSideBar.kt | 118 +++--------------- .../kotlin/ui/uiCore/ProfilePicture.kt | 23 ++++ .../src/wasmJsMain/kotlin/ui/uiCore/Skills.kt | 95 ++++++++++++++ .../kotlin/ui/uiCore/UserDetails.kt | 84 +++++++++++++ .../kotlin/ui/uiScreen/AppScreen.kt | 8 +- 20 files changed, 304 insertions(+), 125 deletions(-) create mode 100644 composeApp/src/commonMain/composeResources/drawable/android.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/compose.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/css3.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/git.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/html5.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/java.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/js.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/kotlin.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/mongodb.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/mysql.png create mode 100644 composeApp/src/commonMain/composeResources/drawable/react.png create mode 100644 composeApp/src/commonMain/composeResources/values/string.xml create mode 100644 composeApp/src/wasmJsMain/kotlin/model/SkillData.kt create mode 100644 composeApp/src/wasmJsMain/kotlin/ui/uiCore/ProfilePicture.kt create mode 100644 composeApp/src/wasmJsMain/kotlin/ui/uiCore/Skills.kt create mode 100644 composeApp/src/wasmJsMain/kotlin/ui/uiCore/UserDetails.kt diff --git a/composeApp/src/commonMain/composeResources/drawable/android.png b/composeApp/src/commonMain/composeResources/drawable/android.png new file mode 100644 index 0000000000000000000000000000000000000000..db47475e9ac8b668e2cdde549850ddd4beb67e70 GIT binary patch literal 3184 zcmcJSS2!Dv8pabsiMC>dpd;EMh|!wWQZZvxjTk`{t*RZHk`fhr)QDP9wf@A4S+S~> z7BNeQS&dP9RJADoI{lyLIalZA+?o%t z9`ZM|-(IDT{3Offo>{J9lr}_)H13fLb0>{wZFp-%B(pxF%T-yR1x4AO-G93^*j_ig zXjw~n*n=FWO33o=|Ng}e^x@rykXkT8Q#)&q@9)J<1>(m)__EeMdfZ>|v)VnUT60!| zOZyOHl{_uKI`=#YuBx>zOIX1He`f~6Gja*NJr2pPuz|Q+ufHFJ|K?m-HisTobPg(`Z$DGJHV`%Ez<@gH6Y1ZsoBfIS;Um9nL;` z$4!RWn8od_P`wzQo|q5Y-N@@n|2_mMFkVZ~*vP>-d>VRx3_yf_k9Y+jivs{)aRVI` zCM17@9EQVuINNjMWkaZqcDcNJ^=MH*RjK2O{`;s*d#?6((8+v0p2S6XpAn>fg*!8fYL4-k9Q_6pak< zm3)20fO-LZoP(})<$diA-RulJyGZ1nLavf$`C2#MeV$N%c1Z4E!3c5JKQvr&f^r8Cqq5u!1RV3SG z7?;#q5ENB!&l0WZUz>&Ksf_(Qm^w5jC9LkIJz`rVdasc@zdrEle9Z0c=V$2mE{0!@ z{D#nnsp^#0D)GnF^EtIi`2decBVSs)t!z#hdbM7bSHX(hp0lgIQKsa(WbMo`-x|*H@BfG}5lCi?U2jUf-4v*YPk`lpSJv=5x54%Tygf}-t zKQ+~>z-3i4%_LL=(tFu}-Gz+{Xv})l3HX_b^zZ}g*o)%-diXmI3~O3Vh6!M7_ld*BnDMuEh z58&fo597bvN6WTPWcHX&DwIK!E>EXz0h`*v=CgDcmZg&<6C%mZ_P|f7k2d-G8)Z6u zxCMZjkcyG45dQjJEQih5VqgBQIMb2%fh*#cOXnOT4{oH4%ZFv1CYd-r6&CpUC=P2> zC}v;0jp}q})ok(gRjU2*8~bzt3u{#pdtFy7wWH#YE{D3bJZF9H)2SUo^;|JtZd~eT zT)p~@=RZbf)MvSczD#yuX{s{=ihHO$lFijC9faDAus-E0SY~!O{bQ{B zVVCKCP!QGtF&*9N!+%xffsCHXB9<`UFj&mU(`#w3BoAi#MiK0K{rRv^=spoq*?O`R zVJ*arvfsIzok6*u+~1PVWj@>Mc``M6MZip#Ylb}fJsH&-a-47IN9hll7R1J!kHwdp z?Rv$-pLK01ej0TAD{41M0@K#GqHqCSn7=hzW`QymT#Abp{w`~q#Psx-QP=+~s{G1W zX@|2Wsdzwgvz3_7=`4bHeAGCIFLN!LRk=OkzZa9VXv9*SKOrsKxyg9au#$Jd_;oQB zNz`fbiFzyX*5#~u=H0Wh5ZD&QIaoZ7{S1>~RrlP`Whx%iLS3w(i6;fQRE|SXhRJz{ z!7o6XZW!jvp>?QGDS6$`N#d@U=cmglyr(yo3jYCMw<*eL(< zBk$JzJ{_*YSHl4!~X{f|<%6dBVa!I*{Y z$oNF}(1yLOXH~^VRP#rb+cT(ZawJV6w8H(-N4sCUA4H9meT_$6&9lV1_#wB2qMMp? z#yn3A@3EC+iW2h>8zSVgW9=J_nQc5@U65Bm7pc_FoFV?1MB_tSEb7{eQ(|v>g31+f zvHd1Z%xEv?a|@=n9M*d&xx$fe)^b>`%30+|Nw{7$zV;eo^Q0e^sHxS~0)7aRlzFZ^ z08hS@o#s)%Oz~R45o*8Yo1uri;P32WjZe;B=g{*G?sLor&2xT#Rh^_Bq!=p#_<#$0 z7-uRhK1&rZL>epelo(5r_pdUGnR(ob&py{NSN1RL_>nN<*RF-TzR>uSg)>R%bpq}!i)J+yTA z$m{(WZ;P$C^n$C3VaU%U$Xv4#kecM_suyZ!9eDg(M29B<8r)(>g`ias4fse_6yX2TDEEY zyEWpWYgh(7>Le0fL%*|Hz{52sGz8*=9Vve0A+*vWp4uICZ2r?6s>hm*O4|wzS)c2F zKs{rH$g{c`=+EA!fLf)v@i4L0KNHwCK6`CFty!mqX@gE>8pU4U@N5yi?&x8&#mJwU zmr6gAZ2Z2h^f*8iZ+>Cs zV^e4RlCIxuuY)Lw;$%>!*i5)0)V=v6YQRJco9Ce+_@9(@@PCK>AMg&$y94ViSjiTe zPy<3aU*z^(D$1+ksfG)CKhY-!#~3!aOP!@m$Z;;a-iX_b94Jq$%6gu$s}HqYtf(4I zzuo%xPB`pRi0G&Anm7zZhAB(zpe^t)4eS)?+g{w9-3SK5`0kFZ$Q z3`LXJg4FD~-)@0@K){v|g;M=yzXT2ooeB)|?A-_0aB;ad>dV5k1jBA2=j?LeBFnLI j%*{kf=oAqzcyxX~1eOre=BD`PTL2j7n&{MMIY#{pU6$&{ literal 0 HcmV?d00001 diff --git a/composeApp/src/commonMain/composeResources/drawable/compose.png b/composeApp/src/commonMain/composeResources/drawable/compose.png new file mode 100644 index 0000000000000000000000000000000000000000..79ccfecc99ab80c211ee594ff43ec4278be2cc20 GIT binary patch literal 13589 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 literal 0 HcmV?d00001 diff --git a/composeApp/src/commonMain/composeResources/drawable/css3.png b/composeApp/src/commonMain/composeResources/drawable/css3.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6b17afb5bee7d3ec081ffdd8e374007cabde7e GIT binary patch literal 17423 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 literal 0 HcmV?d00001 diff --git a/composeApp/src/commonMain/composeResources/drawable/git.png b/composeApp/src/commonMain/composeResources/drawable/git.png new file mode 100644 index 0000000000000000000000000000000000000000..1c82cf7d837b6003a297df886bec1dbb9b61613c GIT binary patch literal 17959 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 Dki7A! literal 0 HcmV?d00001 diff --git a/composeApp/src/commonMain/composeResources/drawable/java.png b/composeApp/src/commonMain/composeResources/drawable/java.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1ea47a18c8e77ba03540eaad7d91f8a933dbd7 GIT binary patch literal 6423 zcmV+y8R+JTP)(RCt{2oq3pDRhjO8@7m|ocn(R(oK$KE257KR0dWE!=vEsD zgMx`TBP|iZK;KrorSWQ>ZinvHr&R((P!XlIFoOXi&Kd3Ze{(NovRd2@sN+ ztIl5U{i7xo2GjZC^-*R}xMA|Zt zLsk%x%-{Jtg~KP(mVq3yf+YC(7ym1r(@;8=j5C%_+xc5gUzkW+269LWvbLsXL9k!B zYeS@Q;;h-7LsF1T$XsM80NC#GCOt9HHtpn)6Xf|RQziiy@7f^!s)5F?iL+>T4mm+~ zxGlmh^Ea;l-9*_m z7%zE28tdv723TP!*}2W|LT}o0h zV!%sGkcS}KTwA|P!Pmpi7f^i|c0gP_`{}2*PLO#c;wAG8SvzI^q>zs{AT2JE+)WxU ztlQB1n*-fXOHEB>&4vx#f_R{H72_o#$cDM|k1Qnd7D=z!E725yrS%({Zr|Vfn`&#P zKyotpgf#X4+za>fvLMB2p4V_r8vG5R8G9v~0{9bk&5hsK*Lt6xIkUPmTX{+ddJp)N zi0>@)bbW5Y7~k>^T0tIzvZ~tpf3mm|DBCmL&>P|7^P3x&kF-vM*3F&2Aj$Xx-S!0m z8VtWo9Tp$avhKlAJ%B+tD7(FXo;h{RvS@l0N8d2xMH({G2V zD>T;BzgY>(WKN;~?V(_68vTzCwlscsF{EQ~7{hW<2x7=I*VbQ!bQO@@JA-ZXv*5x9 zYKL*BH`Uh8hwufY^LEu`8}u`|@R8b9^Yd6Qj zr{1_>L+4=i7_v?C>MoY_&%3=b#N9UkT4-+k;sWR%o1+*xB`wI4)28Jss`CFOv9M?c zyVLe3>ROss4CM}aYVO>cvZUys%Kqo!#gc*6y$eHFhB3@?l}Jy&pfkbv}_(NO3t}x2r}17I<<-ty2%ubE@^04|C6EW=%3K} zP4@QqKAKH?&a2tBar;7)-d#@vGArNT3Uv5@b$g6<@UYn@Dp2`8eerH^p398qfg1S5Q5%U zbl?YoZyiny00pjuVuJcx2ZI<;O1&&`TG8!xq}N{_uJ}{6wZ{hY+G1%1``!aHZu}^T z7V;F7OR6cBX7PvmO-&CES4URK86M;U%XFxu!bOLoBw9#*=FALs@rxt+rz5E&;Jshp z_LEkmxxvy(jgk=LzGt540*X5Z&9JQlz%Jgx05T!_>ix59{3!`R7DHxt_>z3Z$SXbAuf0m6eB_l{6-rDz~Xm?UP ztyum&8LWi?2+DEz=L4~CyeJt#zTMpXfW;$wB_!dP5mjIw7%Dly1x>ZJgL#ijhLRCv z8AMrM*t3<$ym=($J6!lF_TX;}MFzr(^^@x-AE2pYO34TU@T=zaw}XDM+eUH9Q?q7G zAFk}N8#X)-+&N?>=?D(f*AB?YF{Y#hSq!NQ@p9V(rzw|bv*jNcN%=JDKV%OXEfVni z8f)s_dq9ScAtfaUK>enshq3=~%Z0 zNnEvldi|{7%GNbEuXBu77VAO}MCNarYHQy#RGx{TBn1IDc5CC)F8H0;+W;g@4V4kIJfmZs}L|7XZdQh@OOQ80B>DOo|F?|I_r_wMY@3SZDXum0`Bm0JvH3|?XwZrbz7 zqhjbNQqqC|)Ng3I+X@#0J(d!SYuC+am^oazhQ`JhL zJ)ADZ6p-d*D!pPP3n2GBPkhA?&yzt1k`u*2AqYTSbMp-`=yFWK=Izb34Ids!x$m?z zt^^G-w@{Cdrj4V)K_du2L*u#?5q}J+VDaU(H8l%{E3*tD_~v415f3|uWV|`31OaGh zZoFR6OMr?b$$Z0*3|FS$bT7xFVS6_1Eh^MRa?l9^P}|aYQ#9|Fd2Q3Yx{nN(KUL*( zdv25cg_?~U_u4+u9F&3p%x_-5GDglv`uMsTGluMSmD4q4w+-h0+UCZujH!Y9Nl8SV z>@N))8h_k4x9)vOMb$;X7YEB12`BEl^6YgX7T&GVjMG|jefF@5hWZ!_^At3Rn5G4L zYm)Y^ZTtFp`xMkYv5|{QuFvK|{ghDFGbvT3vJlI2HzP`S`v9Wou)fF1+ z>VGD58n`j`_MFkMY163838}jLt`idUQNvq->7a5!urW9awORh1%(q)J?LXivi-+xI zkDDO5OKzLtr2JI`A1~=R5sosR33>|qe&AfWe~?l(M&d|rK1 z)B4elO2-9R{D@*_78!cZig^iaEcV(Wpkv|cYgZ>;&BCC()zVCem+#aV<*Ux z>$8>FIVUDba)$8RfMX2RSUt%1qi{z-tm*1#-pCCf8Iv&2_0(6WRzF96%HpF9jg6zX zg7vBQWVrXVLeaEED=TxesxOxGIR?y6G42eG7w=ep_V)&>cGLx_zI64gLq_igztgBz zkmLvUE*(F2;9|gv-Du3B4F2W&ULA({1vdEI)JHX1O-j)%``1raR_s z*syWD_F0VF$JV?H@n1V{UjT+bwry@Zj$0S+wL-*!39{t+Y`%Qng@{iYj?kXnX#2sW zwdZXw-1Lr;S?qqFSh8|bby8jzvSmjQ)5EduZ@qTmpZ2j9`kfdj}218v@(@Pf5E3k&w~3z~~8*n_YDz=8S<&ac@gFBcJ9T=knFJ zJMs&nA8(_hh3gi#?eBhvWzovANz;0(yTjzek{Bi_<0%lQ0yD8@AZA<46{^9WtGsUE^U*ev`o=>8aVcl+1Qc=Q0y&n|M8-}Oone!tuP;E!!rpLz72c@Jcy?$+fC zzm&i1wi^j$=UO@w^g3Y9Ue6Nxnkjt``!b0z>O?jQ(oc1oDh=Z661vYh{*^*}(O~xd{U9J0zArIinb1Ff-_9TB#5g^KNLdA@_bF-OX+ zizj4>rQJC7o=pC@&L@FgabPx%?memFnsXo8GkeL*!hNYyy>#`3LO1R<4zd4l+wz4) z1HTVi_xr&>Zt0rof-mkqD0C+={ky@+OpqYfVVC}>WIpCNCM;T+NZcf8S8$(=<#-(L<0HtT zl}T=9?oxt3V{5A9tGZX5Tk^|X>>pNc>FWOgT{^)1o(f;tcFkGCMqZA+AWN>#=F6*Z zHJqdV(MYt%+|xT^mMsev&mLcAWy1cv9NUcxzg>~b-~CMp@7eX-u(v95QR}q}?;1%J zW8TZkEnWQ)p%v`b%b*MR_ujPk=I-mxUCVfUt>DyUnTn%dRg)xT3zYb19R33QN=e7s zOcJ!)@xyJ`oOSE|R9|t)-SyeBc#Ex*B!scWZ87#<-f_*jBVM>*%mu0b*qVO`fxW)< z)bC0$W()8X(njIUM7AJpN#*B4$~K2&d#1ayt(VGiqiIBX-+Ye{9uzLf`a;!~5%b z#MVEyFF$iciyjPQ?8hOO-jmBGoj*mqVPA^%`kk`(<|{??E7NM&)Qov_YW#Y|M38yMiTZ9MSA^?<>&mr1GQs(N9v1KmgQzuorQEh z)?0w-a9~&TzObv+iB$GlOAi}vZ3nYa_N?4C@1 zOWPSSgm*y4SK9C8_rn)@=`$hj_v*`5{dMlS&PT{3cZNW={hEa@i_y=x_p++5Sp6PF zzN?)d3pQ;=pJ?lDy@eYV?EsBU&uG!ggnW5bRfUdDLO2eEnZ&N^`(px1hH)1pfBEXQ zp!r3T+HL<1@i@_qHXA^jlzOuZ>DKnb^V?~!j!fBR{@T&ZRV%pew6Tj7+Xu#9kfp2dLpo(&%JexR z=~dqvCT;zz1@%YFD+tPsbBIY;75h5!x7j3nIX&^4tv8(g?7oy8ZN^=Y++{yLmL&c} zFn7H7Jpx`JdPQr`hR=@G6p7)Okdb=jC9CEp+3+Q#^Ht=dkmE_e+oc=)fX&VAJ?*z~ z!{Q11oW+E?PO6u#dX-2%0zMBhU1(f-eSHCS?7;q|#a(GvT+?~O+0Emz@8KA|`60c@ zq!_yEkftX|HtRxRhv|5t{klcZ4BK;Bw6d~#R@Ix3{yM;$v5vKMkh-gXQ&Z$+5E}kkzm$Fxuw0meKp@& z{QN%E|Nie*SLdfLQ1AkwBP`Vdvn8e(PnM~+R0ayzmguo*m$V)GIpb##8*Lf`UYojX zZO1il-8^Pp>cP0^NBMo7GdXfW7OhOGrHYg}9A^SG9Jfzvsqt+c*?nnf5y=%X48?HtN+P zoMicR60Zj3Z93%m6IuVZ|7n>=toRV- z5f#$MTGOhh*|x2-*j((=W?A6Ex-#-J%PQe8peES!CFV=vNE{bfG{B1k*}e&)UQ6T$ zA;jviYcv}aPWXNcX~eXg=)Uxe^ZLw=~iS%2DW#B34H zK;TSpKHIy^vvM1?bj=2v7UY&_Z$>>GU_jb3zXV9NYJ&+ik`Bw_NjWLK19p{F`YvXhlziloDdo<>NfL!2Qq3z&|=bntYW z$r1?zLfHF$I|_CfKPvcf?DbDOp6z&KBwgG7;JU9m#=XA;!7$^H%1c(w4Q1i4WZsN8 z5o;cOx3cmBjiu^uSv|s?hIUzl4mf!dHa zVV(dUm-u~mjDPG=vVNaqv6kJF$vxkGw5$&y-V2%utRtoiTdz60=n_$*chW9hnX3qs zrc3F}j5OPh^CV`2X4}j{o{5=;s1PbM&VsV^%_krA=*1U<=Nv)35>`-k^=$-Rb7xBN&HZ>6-E!93kS_D7?dPf*{lH(ELfECtWgBAon<5#TFOc znX9TIpE{FENOFNR7ekU4>0v=s+f*4AyEt&6)jn8qikF3a$jCskGUrul3VYSN&i1V@370WA>J8LIcZ z#r98Q*lzr&;YT6muKid!XpCCONAH?aog@o`d>VK<@SNoqk!+w)*qq|0W8m3Lq0rtI z^WD(Z%bZ*f%T7&4-$ib5>b(iC*_x$&N?ESFx2zCd6++=~rJ0!|%nD+*p~lv{AkDEo z6EPiAHu&To3g8!HJq7#{`TjH(9^9ANQpFhaTUO;2t7?;|6K&og=>%Yb&}8>@ox5yW zCAar=eQ7sp6K+SL9j9GZ=(1xEQg31k0mp*-Cc^|dV3IT_30Bs`auLdrE9rX{RSV}W zs$^9eauPX1)kv23*xBWkXfr$~`_IvO0>?jC>0=#fvX&KR?az`;gEIclkPE+EQIVTE zI~%ieV@T@-bp+L5W(#J54(~s4Wx&qfSO!M6s!uWc$2_KQ8eJ;X3+}bm3v?m3$vkUm z3-;4On<8wG3mb@Gv(&St_1Z_b6?1irHYNB_w^(#*MSeR7qxM3}(PF6VtRelog1vH%dL(=&tVIu3&YB;I7_6+LZ)4Ix>fK luyJe0!ROw2nU^_K`Tu0-inrB{aaI5T002ovPDHLkV1lxX*+l>V literal 0 HcmV?d00001 diff --git a/composeApp/src/commonMain/composeResources/drawable/js.png b/composeApp/src/commonMain/composeResources/drawable/js.png new file mode 100644 index 0000000000000000000000000000000000000000..d924398db6a7adf6bde57a22d248e4ee0e6a1111 GIT binary patch literal 17179 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 literal 0 HcmV?d00001 diff --git a/composeApp/src/commonMain/composeResources/drawable/mysql.png b/composeApp/src/commonMain/composeResources/drawable/mysql.png new file mode 100644 index 0000000000000000000000000000000000000000..83b1839f7d80b95faa44f8be4eaa304ecaa098c7 GIT binary patch literal 18561 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 + Technical skills + \ No newline at end of file diff --git a/composeApp/src/wasmJsMain/kotlin/data/StaticData.kt b/composeApp/src/wasmJsMain/kotlin/data/StaticData.kt index b8deb07..6c08689 100644 --- a/composeApp/src/wasmJsMain/kotlin/data/StaticData.kt +++ b/composeApp/src/wasmJsMain/kotlin/data/StaticData.kt @@ -1,8 +1,8 @@ package data +import model.SkillData import model.UserInfo -import myresume.composeapp.generated.resources.Res -import myresume.composeapp.generated.resources.photo_profile +import myresume.composeapp.generated.resources.* val myInfo = UserInfo( firstName = "Eric Eugène", @@ -13,4 +13,32 @@ val myInfo = UserInfo( pictureProfile = Res.drawable.photo_profile, linkedinLink = "https://www.linkedin.com/in/eric-eug%C3%A8ne-randrianarisoa-a853696a/", githubLink = "https://github.com/raneric" -) \ No newline at end of file +) + +val mobileSkills = SkillData( + tittle = "Mobile", + skills = mapOf( + "Android" to Res.drawable.android, + "JetpackCompose" to Res.drawable.compose + ) +) + +val programmingLanguage = SkillData( + tittle = "Programming Language", + skills = mapOf( + "Kotlin" to Res.drawable.kotlin, + "Java" to Res.drawable.java, + "JavaScript" to Res.drawable.js + ) +) + +val web = SkillData( + tittle = "Front-End", + skills = mapOf( + "React.js" to Res.drawable.react, + "Html" to Res.drawable.html5, + "CSS3" to Res.drawable.css3 + ) +) + +val techSkills = listOf(programmingLanguage, mobileSkills, web) diff --git a/composeApp/src/wasmJsMain/kotlin/model/SkillData.kt b/composeApp/src/wasmJsMain/kotlin/model/SkillData.kt new file mode 100644 index 0000000..111f13e --- /dev/null +++ b/composeApp/src/wasmJsMain/kotlin/model/SkillData.kt @@ -0,0 +1,8 @@ +package model + +import org.jetbrains.compose.resources.DrawableResource + +data class SkillData( + val tittle: String, + val skills: Map +) diff --git a/composeApp/src/wasmJsMain/kotlin/ui/uiComponent/NavigationBar.kt b/composeApp/src/wasmJsMain/kotlin/ui/uiComponent/NavigationBar.kt index 53c3660..21cfb7f 100644 --- a/composeApp/src/wasmJsMain/kotlin/ui/uiComponent/NavigationBar.kt +++ b/composeApp/src/wasmJsMain/kotlin/ui/uiComponent/NavigationBar.kt @@ -3,6 +3,7 @@ package ui.uiComponent import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material.Text import androidx.compose.material.TextButton @@ -14,37 +15,50 @@ import myresume.composeapp.generated.resources.Res import myresume.composeapp.generated.resources.rubik_light import org.jetbrains.compose.resources.Font import ui.theme.darkPrimaryBlue -import ui.theme.wheatFontColor import ui.theme.navigationTypo import ui.theme.primaryBlue +import ui.theme.wheatFontColor @Composable -fun NavigationBar(modifier: Modifier = Modifier) { - val rubikRegular = Font(Res.font.rubik_light) +fun NavigationBar( + modifier: Modifier = Modifier, elements: @Composable RowScope.() -> Unit +) { Row( - modifier = modifier.fillMaxWidth().background(navGradientColor), - horizontalArrangement = Arrangement.End + modifier = modifier.fillMaxWidth().background(navGradientColor), horizontalArrangement = Arrangement.Center ) { - link.forEach { - TextButton(onClick = {}) { - Text( - text = it, - style = navigationTypo.copy( - color = wheatFontColor, - fontFamily = FontFamily(rubikRegular) - ) - ) - } - } + elements() + } +} + +@Composable +fun NavigationItem( + tittle: String, + modifier: Modifier = Modifier +) { + val rubikRegular = Font(Res.font.rubik_light) + TextButton(modifier = modifier, onClick = {}) { + Text( + text = tittle, + style = navigationTypo.copy( + color = wheatFontColor, fontFamily = FontFamily(rubikRegular) + ) + ) } } +sealed class Destination( + val tittle: String, + val route: String +) { + object AboutMe : Destination(tittle = "About me", route = "about_me") + object Experience : Destination(tittle = "Experiences", route = "experience") + object PersonalProject : Destination(tittle = "Personal project", route = "personal_project") + object MyResume : Destination(tittle = "My Resume", route = "my_resume") +} + val pattern = arrayOf( - 0.0f to darkPrimaryBlue, - 0.3f to primaryBlue, - 0.7f to primaryBlue, - 1f to darkPrimaryBlue + 0.0f to darkPrimaryBlue, 0.3f to primaryBlue, 0.7f to primaryBlue, 1f to darkPrimaryBlue ) val navGradientColor = Brush.horizontalGradient(colorStops = pattern) -private val link = listOf("About me", "Experiences", "Personal project", "My Resume") \ No newline at end of file +val link = listOf("About me", "Experiences", "Personal project", "My Resume") \ No newline at end of file diff --git a/composeApp/src/wasmJsMain/kotlin/ui/uiComponent/ProfileInfoSideBar.kt b/composeApp/src/wasmJsMain/kotlin/ui/uiComponent/ProfileInfoSideBar.kt index adaf7f7..c6c8b8a 100644 --- a/composeApp/src/wasmJsMain/kotlin/ui/uiComponent/ProfileInfoSideBar.kt +++ b/composeApp/src/wasmJsMain/kotlin/ui/uiComponent/ProfileInfoSideBar.kt @@ -1,28 +1,23 @@ package ui.uiComponent -import androidx.compose.foundation.Image -import androidx.compose.foundation.background import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.Card import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import data.techSkills import model.UserInfo -import myresume.composeapp.generated.resources.* -import org.jetbrains.compose.resources.DrawableResource -import org.jetbrains.compose.resources.Font -import org.jetbrains.compose.resources.painterResource -import ui.theme.darkBlueBackground -import ui.theme.wheatFontColor +import myresume.composeapp.generated.resources.Res +import myresume.composeapp.generated.resources.tech_skill_section +import org.jetbrains.compose.resources.stringResource +import ui.uiCore.ProfilePicture +import ui.uiCore.Skills +import ui.uiCore.TechSkillsRow +import ui.uiCore.UserDetails @Composable fun ProfileInfoSideBar( @@ -37,7 +32,7 @@ fun ProfileInfoSideBar( shape = MaterialTheme.shapes.small ) { Column( - modifier = Modifier.padding( + modifier = Modifier.verticalScroll(rememberScrollState()).padding( top = 16.dp, start = 8.dp, end = 8.dp @@ -47,91 +42,14 @@ fun ProfileInfoSideBar( ) { ProfilePicture(userInfo.pictureProfile) UserDetails(userInfo) - SectionTitle("Compétances techniques") - } - } -} - -@Composable -fun ProfilePicture( - picture: DrawableResource, - modifier: Modifier = Modifier -) { - Image( - modifier = modifier.size(190.dp).clip(CircleShape), - painter = painterResource(picture), - contentDescription = "" - ) -} - -@Composable -fun UserDetails( - userInfo: UserInfo, - modifier: Modifier = Modifier -) { - Card(modifier = modifier.fillMaxWidth(), elevation = 4.dp) { - Column( - modifier = Modifier.padding(8.dp), - verticalArrangement = Arrangement.SpaceAround, - horizontalAlignment = Alignment.Start - ) { - UserDetailsItem( - icon = painterResource(Res.drawable.name_svg), - text = userInfo.fullName - ) - UserDetailsItem( - icon = painterResource(Res.drawable.birthdate_svg), - text = userInfo.birthDate - ) - UserDetailsItem( - icon = painterResource(Res.drawable.phone_svg), - text = userInfo.phoneNumber - ) - UserDetailsItem( - icon = painterResource(Res.drawable.mail_svg), - text = userInfo.email + Skills( + tittle = stringResource(Res.string.tech_skill_section), + element = { + techSkills.forEach { + TechSkillsRow(skill = it) + } + } ) } } } - -@Composable -fun UserDetailsItem( - icon: Painter, - text: String, - modifier: Modifier = Modifier -) { - val rubikRegular = Font(Res.font.rubik_light) - Row( - modifier = modifier, - horizontalArrangement = Arrangement.spacedBy(8.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Image( - modifier = Modifier.size(16.dp), - painter = icon, - contentDescription = null - ) - Text( - text = text, - style = MaterialTheme.typography.body2.copy( - fontWeight = FontWeight.Bold, - fontFamily = FontFamily(rubikRegular) - ) - ) - } -} - -@Composable -fun SectionTitle(title: String, modifier: Modifier = Modifier) { - Text( - text = title, - color = wheatFontColor, - textAlign = TextAlign.Center, - modifier = modifier - .fillMaxWidth() - .padding(vertical = 2.dp) - .clip(MaterialTheme.shapes.small) - .background(darkBlueBackground) - ) -} \ No newline at end of file diff --git a/composeApp/src/wasmJsMain/kotlin/ui/uiCore/ProfilePicture.kt b/composeApp/src/wasmJsMain/kotlin/ui/uiCore/ProfilePicture.kt new file mode 100644 index 0000000..84d1bb8 --- /dev/null +++ b/composeApp/src/wasmJsMain/kotlin/ui/uiCore/ProfilePicture.kt @@ -0,0 +1,23 @@ +package ui.uiCore + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.resources.DrawableResource +import org.jetbrains.compose.resources.painterResource + +@Composable +fun ProfilePicture( + picture: DrawableResource, + modifier: Modifier = Modifier +) { + Image( + modifier = modifier.size(160.dp).clip(CircleShape), + painter = painterResource(picture), + contentDescription = "" + ) +} diff --git a/composeApp/src/wasmJsMain/kotlin/ui/uiCore/Skills.kt b/composeApp/src/wasmJsMain/kotlin/ui/uiCore/Skills.kt new file mode 100644 index 0000000..240d446 --- /dev/null +++ b/composeApp/src/wasmJsMain/kotlin/ui/uiCore/Skills.kt @@ -0,0 +1,95 @@ +package ui.uiCore + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.* +import androidx.compose.material.Card +import androidx.compose.material.Divider +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import model.SkillData +import org.jetbrains.compose.resources.DrawableResource +import org.jetbrains.compose.resources.painterResource +import ui.theme.darkBlueBackground +import ui.theme.wheatFontColor + +@Composable +fun Skills( + tittle: String, + element: @Composable () -> Unit, + modifier: Modifier = Modifier +) { + Column(modifier) { + SectionTitle(title = tittle) + Spacer(modifier = Modifier.size(8.dp)) + Card { + Column { + element() + } + } + } +} + + +@Composable +fun SectionTitle(title: String, modifier: Modifier = Modifier) { + Text( + text = title, + color = wheatFontColor, + textAlign = TextAlign.Center, + modifier = modifier + .fillMaxWidth() + .padding(vertical = 2.dp) + .clip(MaterialTheme.shapes.small) + .background(darkBlueBackground) + ) +} + +@Composable +fun TechSkillsRow( + skill: SkillData, + modifier: Modifier = Modifier +) { + Column(modifier) { + Divider() + Text( + text = skill.tittle, + modifier = Modifier.fillMaxWidth(), + textAlign = TextAlign.Center + ) + Divider() + Row( + horizontalArrangement = Arrangement.SpaceAround, + modifier = Modifier.padding(vertical = 8.dp).fillMaxWidth() + ) { + skill.skills.forEach { + TechSkillItem(name = it.key, icon = it.value) + } + } + } +} + +@Composable +fun TechSkillItem(name: String, icon: DrawableResource, modifier: Modifier = Modifier) { + Column( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Image( + painter = painterResource(icon), + modifier = Modifier.size(32.dp), + contentDescription = null + ) + Text( + text = name, + textAlign = TextAlign.Center, + style = MaterialTheme.typography.caption + ) + } +} \ No newline at end of file diff --git a/composeApp/src/wasmJsMain/kotlin/ui/uiCore/UserDetails.kt b/composeApp/src/wasmJsMain/kotlin/ui/uiCore/UserDetails.kt new file mode 100644 index 0000000..e92d1cc --- /dev/null +++ b/composeApp/src/wasmJsMain/kotlin/ui/uiCore/UserDetails.kt @@ -0,0 +1,84 @@ +package ui.uiCore + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.material.Card +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import model.UserInfo +import myresume.composeapp.generated.resources.* +import myresume.composeapp.generated.resources.Res +import myresume.composeapp.generated.resources.birthdate_svg +import myresume.composeapp.generated.resources.mail_svg +import myresume.composeapp.generated.resources.name_svg +import myresume.composeapp.generated.resources.phone_svg +import org.jetbrains.compose.resources.Font +import org.jetbrains.compose.resources.painterResource + +@Composable +fun UserDetails( + userInfo: UserInfo, + modifier: Modifier = Modifier +) { + Card(modifier = modifier.fillMaxWidth(), elevation = 4.dp) { + Column( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.SpaceAround, + horizontalAlignment = Alignment.Start + ) { + UserDetailsItem( + icon = painterResource(Res.drawable.name_svg), + text = userInfo.fullName + ) + UserDetailsItem( + icon = painterResource(Res.drawable.birthdate_svg), + text = userInfo.birthDate + ) + UserDetailsItem( + icon = painterResource(Res.drawable.phone_svg), + text = userInfo.phoneNumber + ) + UserDetailsItem( + icon = painterResource(Res.drawable.mail_svg), + text = userInfo.email + ) + } + } +} + + + + +@Composable +fun UserDetailsItem( + icon: Painter, + text: String, + modifier: Modifier = Modifier +) { + val rubikRegular = Font(Res.font.rubik_light) + Row( + modifier = modifier, + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Image( + modifier = Modifier.size(16.dp), + painter = icon, + contentDescription = null + ) + Text( + text = text, + style = MaterialTheme.typography.body2.copy( + fontWeight = FontWeight.Bold, + fontFamily = FontFamily(rubikRegular) + ) + ) + } +} diff --git a/composeApp/src/wasmJsMain/kotlin/ui/uiScreen/AppScreen.kt b/composeApp/src/wasmJsMain/kotlin/ui/uiScreen/AppScreen.kt index 4791205..cb13733 100644 --- a/composeApp/src/wasmJsMain/kotlin/ui/uiScreen/AppScreen.kt +++ b/composeApp/src/wasmJsMain/kotlin/ui/uiScreen/AppScreen.kt @@ -5,6 +5,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import model.UserInfo import ui.uiComponent.NavigationBar +import ui.uiComponent.NavigationItem +import ui.uiComponent.link @Composable fun AppScreen( @@ -12,7 +14,11 @@ fun AppScreen( modifier: Modifier = Modifier ) { Column(modifier) { - NavigationBar() + NavigationBar { + link.forEach { + NavigationItem(tittle = it) + } + } ContentScreen(userInfo) } } \ No newline at end of file