From d1c1ee7a1ef0ab3d749fa59bed054632f26710dc Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 22 Sep 2026 21:58:11 -0700 Subject: [PATCH] Feature: Plex mono font support, card + block styles (#7169) --- docs/assets/block-style-refined.webp | Bin 0 -> 10848 bytes docs/assets/card-style-hairline.webp | Bin 0 -> 11450 bytes docs/assets/font-plex-data.webp | Bin 0 -> 11094 bytes docs/assets/font-plex.webp | Bin 0 -> 10896 bytes docs/assets/style-default.webp | Bin 0 -> 11270 bytes docs/configs/settings.md | 58 +++++++++++ src/components/bookmarks/item.jsx | 7 +- src/components/bookmarks/item.test.jsx | 10 ++ src/components/services/item.jsx | 7 +- src/components/services/widget/block.jsx | 18 +++- src/components/services/widget/block.test.jsx | 18 ++++ src/components/widgets/widget/resource.jsx | 4 +- src/pages/_app.jsx | 1 + src/pages/index.jsx | 6 +- src/styles/font/IBMPlexMono-Bold.woff2 | Bin 0 -> 50380 bytes src/styles/font/IBMPlexMono-LICENSE.txt | 93 ++++++++++++++++++ src/styles/font/IBMPlexMono-Medium.woff2 | Bin 0 -> 50400 bytes src/styles/font/IBMPlexMono-Regular.woff2 | Bin 0 -> 49248 bytes src/styles/font/IBMPlexMono-SemiBold.woff2 | Bin 0 -> 50600 bytes src/styles/plex-mono.css | 56 +++++++++++ 20 files changed, 270 insertions(+), 8 deletions(-) create mode 100644 docs/assets/block-style-refined.webp create mode 100644 docs/assets/card-style-hairline.webp create mode 100644 docs/assets/font-plex-data.webp create mode 100644 docs/assets/font-plex.webp create mode 100644 docs/assets/style-default.webp create mode 100644 src/styles/font/IBMPlexMono-Bold.woff2 create mode 100644 src/styles/font/IBMPlexMono-LICENSE.txt create mode 100644 src/styles/font/IBMPlexMono-Medium.woff2 create mode 100644 src/styles/font/IBMPlexMono-Regular.woff2 create mode 100644 src/styles/font/IBMPlexMono-SemiBold.woff2 create mode 100644 src/styles/plex-mono.css diff --git a/docs/assets/block-style-refined.webp b/docs/assets/block-style-refined.webp new file mode 100644 index 0000000000000000000000000000000000000000..d2cc236e58d0a40cf0da15e7b9352776905c623b GIT binary patch literal 10848 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 WPyBZCFD}y0;uxZwf4?(vjQ;_naSU|; literal 0 HcmV?d00001 diff --git a/docs/assets/font-plex-data.webp b/docs/assets/font-plex-data.webp new file mode 100644 index 0000000000000000000000000000000000000000..dfd2f82f04ab2255328bce2a775f59d389be1eb4 GIT binary patch literal 11094 zcmb_?Wn7d^)c3W)(v3(d-Q6MGNH++G#L~GmQW8pwfOL0@bgD?Fgmj2<(=7-R!n5eD z-tY5%c|W|fzq#gr&YYMzyR&;{XS9^$<<(dLKwnN;Lr+7<00RI3He?Ni0Qew4Nk&FP z0~<*K*cxUoE)HNk0C042M`$TXQyCaOphDdO&;dN;3k@JPvv6~f($G-3k^bG@;J@W$ z3IN?u6YMv({__8y5WXec%>n>G8c1n#OE(KgB(4JhFq?%7!W{r0%Sb-0m%9rRL!n4a zgg_1uiAip-^)GxgF(UI{Sn{Wgj+P8kMh5`Uu*}R5)&PL@2+61Nw6I3n!3siRE+7Oj0-X@H}-|h|6|AcKiJI7{EtmDGwVP2*IbaANXN3aZY~aH zK0k^7pASa|4`jT47AE8q%LbvSg=|HUaXYYgR{n#X%+=I?^KFr{`;Bcp6m@@N3pW{L zEPv^`IcO{W#+GKX%D*w(Nk-~7wz8G~BjeDSg>2^s5O815#g{Tm~kwf>C3 z3h~#D83HNsue^u7?jQR$aHT&seQk8~f6I8<>Z$$4ZuZ)L#^!4y^M{Y{(E2kkxRZkP zZ+R<({GXUOx*@s$`n9oD`lIV^qoeqnZ(;U#{BS3!zc$?r{*28ME-Uw29`2<3XTC1( z(tmupIQ(2QKjQ;;Q24`l^VI&M>yFU*!*_Al_!C1rv->ye;ioR34OjpO0FHb)0aQrJ z1~5a?wn)kvN$VjI0&oXBkX#2OEsLbx02d@S1AN@!-pJ280LVDI_#kYpZQQA(kSi2U zrQ~G6!A8Zy#UlU!H|zaI1^|vUf39N?@z7sh$R_|0dwYF--TIez|1AK#76br{=D$29 zAppR~1c1I~3lD_nFMBu36+i(n09=3wAO-FMv;Y&p4)6d1z&$_`kOS@m>VOVl2s}j2 z&<1cs&ch4v1D*g+fhZsjcnPEd*+4!}0#pJuKqJrwbO1fTATSC{0`tH!unKGg2fzt% z0Rn+gLD(Qd5GjZfL=R#G@qmOt;vhMY3P=lN2zmsv204K|Kz^VQP!uR0lm^NLm4aS_ znn4|)e$W_b7W5gk3Hk~;2SdPEU?T7xFawwqECiMUD}!~wCSYr@E7%tt3XTP*fb+l= z;0AC9cn~}ZUIuT2zd-;9CWIJ54Pl1}L1ZB6kOvSe2m%rSiG(CU@*q`^7Dz8-0fJJ=X(1@;XU6_pf~ z6;%vX9n}og9rY<{DryDlThwvXRn+fjm}rz}JZSQ0573;@g3*%D%Fy1RjiarjU7+Kk z)1!-^tD{?@`=CEZFF<8HH*s<89*qzu* z*xzvoaX4_4a4c~Ganf-baK>@=aM5w;aiwq{;`-ty;nw1Qz}>+^$78^g!85}Pz)Qz# z#+%0bhEIskjjxXHh#!q#hTo6BL4ZoYKp;n8Nf1hqPtZxQLI@$GC6pnwAPgZaAnYbw zC4vz#5-Abc5k(PI5{(cY+#?YEYRA;b*CO2iJt&xvb@r-;vQ-?=Sy z8-6?DcGd0i+ovStB$6a>l1P$QB$FiPq*SDGr1qpQNE=BP$)IE`WSV4NWLae0WIN5;f~9l)H|JbcJ312mAq?rH}US9yPK4R zl;V`Ol!=sYDYvL@QAtrbP^D0HQ5{fIP%BbgjG>WXgOP+$iP4v_oN<8(n@NJn zl_`(uBQuOyh}oVwlX;W{%)-xN!;;SOffdXuz-r5y$vVb{!Y0h-#Foc4&5p$`#qP;o z&iD0*c7A_d?c75I4wjZq#+b7)F+H0 zEG--;+$MY`A|T=}QX{f|kNuwgy|Q~7qKu+&(E`yGF&Z&5v0SlbaVqgg;yL2W64VlA z5_u9|BxxlrC5t52rI@Acq$;HLq`9OK()H4(G9ohmGVf#|vI?@1vLkW?a=LP9a!c|w z^49X@@&^k13Xc`uDWWJUE51;iR=T5Pp;W4La9{Ag|NSmyEM;xwH03WUEGh_<7FDq7 zebofj1vPp#C$&a(KwU{aL48q!QNvZERTHMEp_#6^rp2x0r`4-XsBNlUrhTF#t@B)G zUYAMNL-)NNuAZ@8sotr+tbV-yvH_=ozrmm(nW3#=(*x88dJl>od^3_WdTF$3%y0bE zc*=y)#M`9*A=yKRhwY}gre>zKk5C@zKPr24X{K(LXZFop$vngSz(U3%*<#yL(lXI< z6D|gihp$_SS;bpzSc_RFSZ~@$*d*EP*vi_p&X@6_dd*V)^7%!SqEsmrpfi0ez&1B5c7$PMIX;@0F&giNf4JeWMfJU)Ahd!~DS z_tNvK^~U#h@*eVG@rm$R_m%f8d<=bT@%X(TwciuJ&;C;WxdEU6^MLn(w1J_4t3e7u zB~LJ(*gqK#<_eAvJ`T|jX$id(8Wg$`rVv*C6z3`8>GZRE&$7dz;kMx;5xfzp5m%9x zkpod&QAtsk(H7AIG2AgJG1swHu_Mm~o@d3u;+*29UP!zsiN}xkjbBMnO=w7@N{mcA zerfu$KZ!3XI~gO{BY8PRC8a5qE;TOoGR-D!GF>|TRR%>yM8;{RW#)L6WL8!7o$RRW z^BmipnOue3hCGJ6qbyss6it*WE1%cv);k8A)n_%s|e z+B7aV88(eI-*0~3a<8Snm7}$|jk+zp{Z{+)HyCe1-(0`-ef#a5%e$Qp>yDN8rtjxF z4LUz|X?BftD|h$x$oF*iO7*_&6YFd17wK;v5E^J46c}t6;vcFX<{z#f5g2LsAo!ta zRCu&yOmytcxWstJgzQAmN2QO0lWLP=Q@T?#)5g=wGnO+OvktR|bDnb-^Fa$J3z3U> zi%ClqOL?D|KfPKOSZ@C;`+4Y#_Lun;iL*vbk3z7`{MYeN7a97X02 zM!)j$pAw*7dk7>3{abI?{|o=h*>5_KIRsEe1OS>l$n0hs0ICZBfB|VA*BAh9b~ZY~ z0GOBePyMNa+~fSr^8vuj>}H=rz~|`sD7paOw^UjnP>70BQl^~m{k z*!tD`n%0hK7i&{uYK_Gd1JW{iai|5iwrU)r=)tk0i+ZS;lC!BnC{+ z)a}xm=MB+E51;bzsGF4}<_-n8Rj%W_z_rAJA_BDm6!&yE z7Db9{_bppr!+gVR`ol+9Su7~Q6anM)4WEv8jfY?Fx(UQO&Nn!w8y!X<+u;>AeEZ?+ zv~3CfCToY{8tvkNDlIa%9gzlBeWmor28*QY;PF{Cr+0I@@@4L&y7zRq3XVoN8zx)o zc;{z4wF+x9jlt#7+#w@ytrq1>>iGtGnT9XdrXPIXG%EKtIL>>{XGVszkIkLbIUXAk z8;x^@>>$#gZdRNIQVtCb)lCEnMbk0I)3kb=wk=KMZoh|aO}kuS9-HP|gMZxKc$=%> zVjFA}vgdeUIa(`abdu5JHyR(;dftf{IGTtVBGDwsRA7VM$#B-8S?d<-goPm$g7!Kj zKVSZFZjM}6SZpj=X0ceE`1V35B~+CrU?xFyox#f*VuI+gCG*pjN)D&&bF+Xr)(H6| zj4~v|dGR|U_8hg=6cMrE}PEE6V{Tc@c z|J56hQ&UjB}3{CWV5h(A=&q2rG>k(laiuR^r*B zZfCr5Aap$VoN1^-aJBaA=)-Z`^S}(}(#K_6U)$$1^oJURKeTu&3*@IzqiJTa>rhQE6mV!Heh zX7Yj8e;~n8g6VNsv1#+`NWmkO?EB`FZx6K~7k#G|WZkM0-NL@@vXA;Gu?p4mVmwNwMtVmL9AGg;?W&ZF7jOTY; z-$bkBQdkjI=68z+OfCxSJh|M-_oz2+bQl*RDrfS2;UsYs|yH zX+@~fOyhk3S8sX8!H5-Z%U$A1=52Xf(;z7{J3M2ZupDQ}#ffEyV3fmYcsMe9Ub?upmNC`~#9Q0Hd*qlQXb( zwD#c>vLU%xgvkVpOp_du$)?~>(v4RfXpGE`ztP<0J&D5PPT_t?s;7&d@Is!-tx+bU(s9J=| z;tIz807cL0qu5)NkXMm_&{S)eX(5tbeyfwd@eg#l#$CQ+BSzMu8XcJxg%X`h!d~@6 zBtF*+pv|>~882;oQf<p@rHVfd^J_IOw;6W9{M2S zAPoL~q^Rb4x2}{zwZ#pM<4Ku7|71A1Tl!diJw1L*lP*SatXnvlOMZ*^k2lyy$BEK* z@brOi+dTcSs+n`#7e1S~CS6Mb$OGJ68 z+M`gIPKpZl$RJ(wfcCLO5eE;-%AZ;~6^rh5)CT{SyIAIKj;8uk6M@-3X4YnP{Xhq1PZO8px8 ztOm`i9%GhpD3;r_I47Q4J@hfm?1c8`mGPSN7>^zu`!eFRIM$WHbBppyGA2_ZuwuVz zJAQYejV(Eol`B{J;MqQ0A&{W)noC;snF>mLtPDzC$?zvXmSFuho#*S|QcT{Nvm zul%+sg78T%Jb<}n7Hxc4Wq#e@n_l{1673^%+76{bQ{h|uzj?!b`{(u?rZNEt(<`VWS>t{;-(+S(lMAD z9)r%9OOL&ZUwM|ZH{~i~=Pt0=c13Pz-YzP0mDGAKvWdR!)6ThUa4S3&ZRbVmUHsKo z95u6c?lz+cQCs1=Zy$J<-#X(A)^eTUiI&+#V+xIW6yaay^vMWv;hvElU36+2l3`Ak z(#35l9-uR6*>k~O;D)7dsQbvE+RB!9al6ePyRvqVzdY5cT0S=ibZe#)Yd3>RV;cie zpAg{I*|touL39Y)XmU07xqXR{TO+*A#~ObFISL~?B9xt85{V^znaq9B_K61?@~u5L zYW}<6tV!+^BH^IWrsSSRg~~%r0=QO@yR$E)ur)1PuE^(%+ zLR@p!G&A2P2P?st6?Rl>6j&pTSAi|9=9OynbJ%5_EOl^L`rPFkmyAXKuh}qJY9miACtf!B(UVXmw1V{7PAi`kJU*jkR~I#Ta8Vqj6d7ql|zvs_a+{@x!Y{ zVwy@TqAimaaQ9$2ti7*vPCZeBE$m#jlBH9bm6Xa*-OH6_*aN`NYLC3Wn4p~aEO*P< zg^(8+pp?OOlQ6Po4A2$A`M9^yKtGKe{GdszP^eNq;r6>6HRf*9z4R-zeKx(viZ7j3 zOS4L|J}Vdud4vdHa#=#c-YyaT&}=jX)VL>ebb^ypF)%ZW&Y!Z=uMj7=u8v7{?CNz% z$53>!hs&C~PSxj2o<3fzZ>fQhiN2;?>1gw^W`0=lb9rdhgK@KzMv zkGS+kcp5B~%VpV^yH1ddtglPN-Luf%9~n3o>eoS;ZHFCFJx6jHhE*Y}hL98r;7epV zj`a6h&%qvrbLL|ag0h|srX-`fymD2lP!BH_8z=!_<>YM{w`+;6lf3h zTuY}096#82xVGI+K~g1(+d_8u9VCN+5*q6Kj)Y9rzk{_+0()cnwdP59$p*t;$wPZ$@-NW;! zOWX3yPWe&WB+S~nl!=ycSOxEITYSuh72Ge0cdtA)aMbZJtP3yqeN;=WvC^d`wErS} zB)0DXSbJ_EuN;r7URUpRh2Qi{-%0{=Ra#6_&}a{A@2MU(o?Q2|TvTiAt&w{S3Zv{# zSRH+Ihr;Ky7~bj^_}yWqe9?a^dNh2Z$1&SrjAQ;@1L?>`FI&$02PKyBli~)F$dkF% z##oJTf`lMx-qkTV<+c_H98#QVWk=XUwlrAiwVu>;-y9=@dfmQ=F>`QfFJqnCD=AIw z3gvIfQMU(XvDf|AC%>bGVa(oVA*JQvezV2(vZiV@c4A>y(&i|3qPv-VDnMwzUoKWQ zd8lGzGH+C?bXsmOZzSx?=d_3)lA>k=!EKg3UC-n~i!uV#)e&2Cn*u$vc%k7tj<@i5 zwhF%WsM%DQiO`97s5hfy8%hM%D44)o3+ff6JS!QkbECa)cII5 zraEZ-Y0^9Fn4bhWOfZF{bBWw}O4fTx!M(u}c0$@q`lv2<+txyy*SZAFinFel!J=o! zmxT}V9354W%R#I)Hf>lkoq}ses9!`Vs>q%9oNJ~in>#-XLuIQ&5POryF|1)zbgtKB zrI#qP826auLF- z?SuFin4bxQSb84*4?*(dh;Slh1@z8n?zQ1Z_(KajozD-S7EkLQCt8O*o@J7oiQ~Ll z5AXE#iF{j_S>RsqKu`g7AhL8q_27j-_J&=as!*F;q93EF-4YgYN0-SV6w`4$vT7*} z{p6OEoDu^vJ6p1dB+(pqB0F{aA-=t8Ru^v}tFIDyJHl@9O|OOvoWH2e1NEHl`<8t}s{j3+g(1A@Q!FPU0oE}XQ?rXZtMO_W5*=H#rmXj|$RH6j{u zUiXc5cxWu4tc*#;Z0Sf1o4DgXQwk2RxU=Wj@QY`6`5&lLH?!w7hMtPtkvju3XWh2E zd5@*NzbBrur5y2j#jn+V(M!FT+2xDAEUmZyPts6DU0qvvpS^UIu6_T*w9>bCHhHhC zJtscxk6Pdl&5QUyLol+hdo=Qu4~h|Dscy>HCTPpj6?Lo3*?%y~wG~h}t{09#N$6|# zA!^MVeVZ%zpnwOlIM~6s$hc2Sh&%V;at8mtma0@TB ziHln+G$Q?z$|c>FGNsdXWh?QiXv)$%oWAsU1^c$_xc_qK9e{_frn&XW( z<2mISPB$5vEhjfSZ<%1M`BhPf59nNuIdXiP*VnzXv_8m4BPE{A8RboJkRfjBiT}dZ z|IMt4)#&C&U4HuGcKRL_*~P7z{WRwlaSsp2Y&A7@8hssKE=R;mbw*CNRQ=-H!u*3W zi)$v&&Px&uAp60a{50Nqz9sU@K9Mmlz$AIHi4$ z(02sIZzRsj(ZMn)-WMi>3bgw%KQ9?%p!le!VuzAJu4SL}DvVm8(FaH|R`5!=4lW*c z#2FXG=4ZA-N28(}q8kcj_*~!GBh{sLxx*wAZNsys5nm6K(YVMD`>u}e_p~Q2Hiej9 zi_m=GJGo0v-pW#KS;0EUDvr0UhHB_hFIV(7kPGV`EH$`_vG1^lY=CZTRC6WuDu|rV z!L%ZNAiQkxtj&b4HTb|#MQRqB;^dsJ{zLTY3%rc(_5C&7MUj0K<{&zncya&pWEq&g zvaL?5)?;txWCnhhf1GD8%8FMiQP_gIs-`}PYv%!5X&Wy8Ocysr>16&@aL$1&C~THWqP6TcR{y&8eyqB_&e7f=29;3Hq$)N0$o zS6{wpUb@LcgFyOh7$*-T#u_b_=!FD$gcRtbbE)?@8axxW<%F95-{Tq*rb~ zfEx5bFN^gq)rC?_ujZ$IoP3I{WaQS!x5qH*9EnQfmY}R0jpz|0q;Dpxc9yBLy&t7G zzMjW$oyp$OmQL;xTwdEwIDVLTcRa$6{W7<2japQVzTF`_AT@B%4vbT^-3RLal-61N zS~-)QB4~pYYs_*W`7D)gvA$?*S=$KI5lWF2Wtwj9FU&@d5O1>1lf8}lFrS-oXR#^p z-qU*t+rG4+T`57m(iq){(Mh^^!w+yV-0wfW`AODKSTG6KX9Ys4Y=~=Ld=cL=`U){o zFEgQ(iIDe(EwAO851E#T`K6Ymy1z+Z1D!ad{PWChVs?mDJ!<3;h|j#1DK%`;RS_)IW5 z%=>xDlgu5v7UZH}`+V?9zF(5Ijic|w`=-DGo&#oWi@Z- zQS&Den!*m+xP%*U(^&1#yA2+#n$Hx|+lj9eCzSN;3@-702FBLCV@ViWA#Wx=T!`t~ zEuGs+_Nh_stzf8X=d+aW z*`d##K4oaE-hSvUrYHaq*BlP{f?JKki2}B zvTvvy(TW5LReFtz0qk@lM|~mQRC*#q*2H`SSqg$=-{%lZSVAFAArZ8gd?&ANhZp z+kd}9VMcl3pDO;X;nffNPx+>;O}oiAKi2;y^Pfh^UE~auKU3$j52pdd2j zJ)~c!iQ*vgKUf~b^z(!d1b_kHnJsX0Vd>_?@#bFGO^HL+8~RrZiGK>9A}Io7_09qR zmWH_JKz?Ho4A}=rY0D_xT$9tbK)~TnZZ^*D2C5oV?~s;6y+ynoT^!-=W>nse4o+?& z-eNRnmd@sI5hT80bJ9@#6mho~qq$L%aYn$Y1UR@jxM;*NsHmt!5tddWTC(#0sv{{e z8XI?a7ZFZQFE1|+FJ2C3gf%C(u&^*E7Y`>74?9wV-Ob0z-OQWa$&L1xk>7S?kvA_9 zwl40r&Q4S}cFoM4J>11;Xl@++DZj=E_qP4($;pl5=b$+(oE5)c3thcdc}HcQ;ZZ-KD_Nxxg+hr3lhWr-FdAh=_!ANJvS8fFMYxNawrg zqtElb-#_0U-|RK_{LYyZGiUGF>&(vRsi~+$asq&{@@*X>9dQ$E006j=H3S790s(4@ ziaI)YND{!)fqHnjf(Ze@4dw;cQ@u@ZVroW@u>oKKgvbvjKnk@%cqr)TXxvEuX>ahq zPKPz_mj1>3wV*kaloGk(eK5 z>jXpMN+gzbb91*v;yom0N6L60<8otP-1mNnunj^H z8Oz_g2v>czKiC$kr2Yrn!4wt#V0$N(zcMgat($k^mtQ9@HDs)RV>^Vh{vQl?*ZVsL zd-%V0pm3zbKl0u#hJWol+Nu4u8Q^GO{71&e$w=!DM!4wz9b15-;$J@8Tkr3@>|m<5 z|H#|JRsP1r4T0qTiP$I)7v64841^9)9Tp`hX1p2kej^7(kDt z904ejc0y7PNZJUA;D8t4jpVu_X(c3$06dTw3ix~3`61tT08n)I@P|7&IC{}5AXlgz zy&BAhmz!RYUr-bPZr1ya3;_Jp{k4ukr2YT$!sY=$rsewjy5V2m-4+0ND+U1A_5bqN z#Q}f_2LO8NZM@+=zwO;DR{#yb1_%HMKmpJKOaME;0|)}5fD|APCUp9 z2Z2BsAUqHWhyp|hVgYf11VQ2;S&%YF1EdEs1zCX{KroOuC=e6|iUB2pGC?mvC7`#U zdQcmv7c>l-27LpqgZ4pZU=%Pe7y_mNvx51+;$Q`^I@kbwAM6131P6d0gX6*J;5=|S zxCYz??gNj57r>j~Llgi72Za=c0fh%e97PdD8^sL89tDmPj1rBKijs#?f${;R8)Xz_ z0c8v26crtn1eG3@2UQC74yqxl4XP(jTyh)-u*PHW4-(whXobwlnra>~!o3?2p*9*gtV_ za2RnUaCC8;a6)m?aVl|oaK7Q3;u7O>;ws|a!}Z3E$1TEb#hu3eiHC>BiYJd}hUbMB zk5_`%f%g^f1fK+-7hetE7C!_(3%>?`1b>GBi-3hdfxvlJJm-gh+r$o5+nQmZ+4dmuQU`gP4_Anb?;2F>yX|2k{aK3JDX5B8d%2 z7)b%iN0Ma-I)n|P262YOKwd)zA$zxoZwcQry5)B(>sHgP1yU4JR#G)mSJJ1XRiqQ7 zXJj;F3S@R23O*-%AORZ)GR22*oV>rp?T&Zq9DKBS?gQKj*q$)M?=*`g(-m8W&4O{Q(8 zU8f_VlcjT_OQvg~+n~QiuR!lgpHAONzsEq$aEHO0;U&W$!#N`xqaouX#y5;}OxR4~ zO!iF4Ozlj2%yi6}%z?~h%wJfrSj1TzS<+a#S&muRSdCequ-3A!v5~W>u?4V|vCXpM zvCFZ0vgfgnaiDXEbGUFk=lIMC<`m&{HJI-wuJT*7w3FNCK=NJKP6o`|%IT#AZ`!bK}Y*TtB{ti-a#CdDD*I^wb7 zJrZaVw1C~Cb7dFg z804UGd2);LO!Bt!h4QNk916|~6 z{8fcf#X+S^WlvQ^^?_>Z9ke^@cM|SQs?n&~sFkSg-4(kVbhlF-S6yE{Q+-i`Qv3Hfi=%VZD=w|7z=n3cr>UHar=v(TS>K_^0 zHh5|yC1csg7GticXnMKb-G4=Qtm`XuA}-T)P^(zH!5J zvvRA45yMme(u8_Tpke~3!ajmDV}?9b$B5Hgt(8W^MW7~tA1~G?{M#LKC(Vp zJ}16LzVG~q{9u0l{+#|%{;L5h0k0mQKCpSv9>@^*Fz{QDLeR@#P_T7ydk9m=oS-#o@HEQI%bY%-OhTGO`RQ;ef-?^`N#|T7Zo`) zIWakBxlXxLFI8XG&a`g0{%(Ey2dNM58+aRv8W|e1nr<~cZN_eX+<(6-cW z**?=@(lOSl+d24A{bNs;N>@j>LU&7#OiyF4WN-Z^@lUmVqJ1^}BK_|NL0AGz{^HD%&C=#~#P^Hk$18X%sjGCWC2N9fjq57w zpEt}mmNz{%&$lABiMF$M*mtUT<#+q{O!k(4z<*rt$Nr@FS#%(L(0-_M`1Q!`==?bP zgyN+5RQ$C2%=m2e-1h?GBK?x%^23$-)$Fy~^|c2S4*iu2pdg=MdwT%bFGA+lrT{?l z8JRzr|IWvMNq~OuA&?mKPrYIPFZ?@azv)2c5I_Y40CcyI+07&XR2BdLE7Cr}Jpj1b z*%(LwU?HKu^_L2AkMk?f2LLGaW}iYV?B?@3A^fNNZ}WQ(fF%En`+v8{*$4><-^l+T zEpn%&QAY^?d?AWTfJn?@jT^Pg_1jUzG7S+)Ylw>*3E%kH+Dl1_g;

qMyvQYS^hb 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 MIM?6bOcL#X0Qsu_B>(^b literal 0 HcmV?d00001 diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 2b8e09b9b..010c91875 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -430,6 +430,64 @@ headerStyle: clean headerStyle: boxedWidgets ``` +## Card Style + +Service and bookmark cards use a drop shadow by default. The `hairline` style replaces it with a thin border that brightens on hover. + +default cards + +```yaml +# default, shadowed cards +``` + +--- + +hairline cards + +```yaml +cardStyle: hairline +``` + +## Block Style + +Widget blocks (the value / label pairs inside a service card) can use the `refined` style to make values heavier and easier to read. + +default blocks + +```yaml +# default, standard blocks +``` + +--- + +refined blocks + +```yaml +blockStyle: refined +``` + +## Font + +Homepage uses Manrope by default. You can switch to IBM Plex Mono instead, either everywhere or for data only. + +IBM Plex Mono everywhere + +```yaml +font: plex # the whole dashboard +``` + +--- + +IBM Plex Mono for data only + +```yaml +font: plexData # only values, stats, the clock and status tags +``` + +With `plexData`, labels and names stay in Manrope while numbers line up in columns. + +Both fonts are bundled with Homepage, so no external requests are made. + ## Base URL In some proxy configurations, it may be necessary to set the documents base URL. You can do this by providing a `base` value, like so: diff --git a/src/components/bookmarks/item.jsx b/src/components/bookmarks/item.jsx index 6d2c427bc..51479f2a6 100644 --- a/src/components/bookmarks/item.jsx +++ b/src/components/bookmarks/item.jsx @@ -7,6 +7,10 @@ import { SettingsContext } from "utils/contexts/settings"; export default function Item({ bookmark, iconOnly = false }) { const description = bookmark.description ?? new URL(bookmark.href).hostname; const { settings } = useContext(SettingsContext); + const cardStyle = + settings.cardStyle === "hairline" + ? "shadow-xs inset-ring inset-ring-black/5 dark:inset-ring-white/5 hover:inset-ring-black/10 dark:hover:inset-ring-white/10" + : "shadow-md shadow-theme-900/10 dark:shadow-theme-900/20"; return (

  • diff --git a/src/components/bookmarks/item.test.jsx b/src/components/bookmarks/item.test.jsx index 2309bbc18..945f3c6e8 100644 --- a/src/components/bookmarks/item.test.jsx +++ b/src/components/bookmarks/item.test.jsx @@ -21,6 +21,16 @@ describe("components/bookmarks/item", () => { expect(screen.getByRole("link").getAttribute("target")).toBe("_self"); }); + it("applies hairline card styles when cardStyle is set", () => { + renderWithProviders(, { + settings: { cardStyle: "hairline" }, + }); + + const className = screen.getByRole("link").className; + expect(className).toContain("inset-ring"); + expect(className).not.toContain("shadow-md"); + }); + it("renders icon-only layout with icon when provided", () => { renderWithProviders( , diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx index 88c6383ae..05757fddf 100644 --- a/src/components/services/item.jsx +++ b/src/components/services/item.jsx @@ -19,6 +19,10 @@ export default function Item({ service, groupName, useEqualHeights }) { const { settings } = useContext(SettingsContext); const showStats = service.showStats === false ? false : settings.showStats; const statusStyle = service.statusStyle !== undefined ? service.statusStyle : settings.statusStyle; + const cardStyle = + settings.cardStyle === "hairline" + ? "shadow-xs inset-ring inset-ring-black/5 dark:inset-ring-white/5 hover:inset-ring-black/10 dark:hover:inset-ring-white/10" + : "shadow-md shadow-theme-900/10 dark:shadow-theme-900/20"; const [statsOpen, setStatsOpen] = useState(service.showStats); const [statsClosing, setStatsClosing] = useState(false); @@ -39,7 +43,8 @@ export default function Item({ service, groupName, useEqualHeights }) { className={classNames( settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`, useEqualHeights && "h-[calc(100%-0.5rem)]", - "transition-all mb-2 p-1 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10 relative overflow-clip service-card", + cardStyle, + "transition-all mb-2 p-1 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10 relative overflow-clip service-card", )} >
    diff --git a/src/components/services/widget/block.jsx b/src/components/services/widget/block.jsx index a7dbda19f..078dd6d84 100644 --- a/src/components/services/widget/block.jsx +++ b/src/components/services/widget/block.jsx @@ -4,11 +4,14 @@ import { useContext, useMemo } from "react"; import { BlockHighlightContext } from "./highlight-context"; +import { SettingsContext } from "utils/contexts/settings"; import { evaluateHighlight, getHighlightClass } from "utils/highlights"; export default function Block({ value, highlightValue, label, field }) { const { t } = useTranslation(); const highlightConfig = useContext(BlockHighlightContext); + const { settings } = useContext(SettingsContext); + const refined = settings?.blockStyle === "refined"; const highlight = useMemo(() => { if (!highlightConfig) return null; @@ -45,9 +48,20 @@ export default function Block({ value, highlightValue, label, field }) { data-highlight-level={highlight?.level} data-highlight-source={highlight?.source} > -
    {value === undefined || value === null ? "-" : value}
    + {value === undefined || value === null ? "-" : value} +
    +
    {t(label)}
    diff --git a/src/components/services/widget/block.test.jsx b/src/components/services/widget/block.test.jsx index 38ee0d137..fdd0ace41 100644 --- a/src/components/services/widget/block.test.jsx +++ b/src/components/services/widget/block.test.jsx @@ -39,6 +39,24 @@ describe("components/services/widget/block", () => { expect(el.className).toContain("danger-class"); }); + it("uses the standard block styles by default", () => { + const { container } = renderWithProviders(, { settings: {} }); + + expect(container.querySelector(".service-block-value").className).toContain("font-thin"); + expect(container.querySelector(".service-block-label").className).toContain("font-bold"); + }); + + it("applies refined block styles when blockStyle is set", () => { + const { container } = renderWithProviders(, { + settings: { blockStyle: "refined" }, + }); + + const value = container.querySelector(".service-block-value"); + expect(value.className).toContain("tabular-nums"); + expect(value.className).not.toContain("font-thin"); + expect(container.querySelector(".service-block-label").className).toContain("tracking-wider"); + }); + it("prefers highlightValue over the rendered value for numeric highlighting", () => { const highlightConfig = { levels: { warn: "warn-class" }, diff --git a/src/components/widgets/widget/resource.jsx b/src/components/widgets/widget/resource.jsx index e80324b21..249fd3960 100644 --- a/src/components/widgets/widget/resource.jsx +++ b/src/components/widgets/widget/resource.jsx @@ -25,12 +25,12 @@ export default function Resource({ }`} >
    -
    {value}
    +
    {value}
    {label}
    {expanded && (
    -
    {expandedValue}
    +
    {expandedValue}
    {expandedLabel}
    )} diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index 7c7216660..14ce3b869 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -3,6 +3,7 @@ import { appWithTranslation } from "next-i18next/pages"; import Head from "next/head"; import "styles/globals.css"; import "styles/manrope.css"; +import "styles/plex-mono.css"; import "styles/theme.css"; import { SWRConfig } from "swr"; diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 31b095bf1..304e2ffa5 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -552,7 +552,9 @@ export default function Wrapper({ initialSettings, fallback }) { const html = document.documentElement; const body = document.body; - html.classList.remove("dark", "scheme-dark", "scheme-light"); + html.classList.remove("dark", "scheme-dark", "scheme-light", "font-plex", "font-plex-data"); + if (initialSettings.font === "plex") html.classList.add("font-plex"); + if (initialSettings.font === "plexData") html.classList.add("font-plex-data"); html.classList.toggle("dark", theme === "dark"); html.classList.add(theme === "dark" ? "scheme-dark" : "scheme-light"); @@ -571,7 +573,7 @@ export default function Wrapper({ initialSettings, fallback }) { body.style.backgroundImage = ""; body.style.backgroundColor = ""; body.style.backgroundAttachment = ""; - }, [backgroundImage, opacity, theme, color, initialSettings.color]); + }, [backgroundImage, opacity, theme, color, initialSettings.color, initialSettings.font]); return ( <> diff --git a/src/styles/font/IBMPlexMono-Bold.woff2 b/src/styles/font/IBMPlexMono-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6200c4928ec25283ed6f4d1e3fa847d736e4fb03 GIT binary patch literal 50380 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