From b8107c8f044d4c6f69c7ce63b58d0869ef52155a Mon Sep 17 00:00:00 2001 From: MasterGordon Date: Tue, 8 Jul 2025 22:51:27 +0200 Subject: [PATCH] update --- .gitignore | 1 + bun.lockb | Bin 8681 -> 21308 bytes bunfig.toml | 1 + package.json | 10 ++- src/components/Button.tsx | 0 src/components/Counter.state.ts | 22 ++++++ src/components/Counter.tsx | 14 ++++ src/components/Heading.tsx | 43 +++++++++++ src/components/Layout.tsx | 77 +++++++++++++++----- src/components/Link.tsx | 5 ++ src/components/Navigation.tsx | 12 +++- src/index.tsx | 41 ++++++----- src/jsx.d.ts | 111 +++++++++++++++++++++++++--- src/lib/Global.tsx | 16 ++--- src/lib/fast-web.ts | 68 ++++++++++++++---- src/lib/hooks.ts | 37 ++++++++++ src/lib/pokeapi.ts | 3 + src/lib/state.ts | 100 ++++++++++++++++++++++++++ src/middlewares/request-log.ts | 25 +++++++ src/myPlugin.ts | 52 ++++++++++++++ src/pages/index.tsx | 25 ++++++- src/scripts/navigation.ts | 14 ++++ src/system/crazyHash.ts | 13 ++++ src/system/css-utils.ts | 11 +++ src/system/style-rules.ts | 124 +++++++++++++++++++++----------- src/system/token-categories.ts | 66 +++++++++++++++-- src/theme.css | 35 ++++++++- src/types.ts | 51 +++++++++++++ 28 files changed, 857 insertions(+), 120 deletions(-) create mode 100644 bunfig.toml create mode 100644 src/components/Button.tsx create mode 100644 src/components/Counter.state.ts create mode 100644 src/components/Counter.tsx create mode 100644 src/components/Heading.tsx create mode 100644 src/components/Link.tsx create mode 100644 src/lib/hooks.ts create mode 100644 src/lib/pokeapi.ts create mode 100644 src/lib/state.ts create mode 100644 src/middlewares/request-log.ts create mode 100644 src/myPlugin.ts create mode 100644 src/scripts/navigation.ts create mode 100644 src/system/crazyHash.ts create mode 100644 src/types.ts diff --git a/.gitignore b/.gitignore index 9b1ee42..d83efe8 100644 --- a/.gitignore +++ b/.gitignore @@ -173,3 +173,4 @@ dist # Finder (MacOS) folder config .DS_Store +target diff --git a/bun.lockb b/bun.lockb index db61286e407072e276662950137e5e357cc77e5f..17015fe9f071558c7a09fc816a99745d8386ad0f 100755 GIT binary patch literal 21308 zcmeHP2{@I_+dp(HsT3(%6p0k)*rP%v?Te%oN*x@W;v6|gXpu-o8*NkyQBf)_+G(*= zqSA_bTb1h7Chg(7@5dP)-ojh|@B04N^)=V^m}lmm-*4`@XP$ZHnK?HNbv-|!ubvB! zugB%jQ*-g-%fZF+61dKB=Xr5i?gC$Lj)*l+Urv(2V06B6dQ)E3*mFsvouc)lulVhK zwp3})xHku6Mr}CuWMdES)JaeXLjT%`A=@Yp7N_r;DLihTC9Q zp->d)!$liVb_jt=QQs>Nqr9U+ZT&god?-ehyH`C|<#M;78Li4%6{U|>O{E8NJ!ZN51oYbE9guc^3D1gq^+Sc=h<~ z!S^~IIv~CNroo7n>h0d`_#&+uqY}4Z^XlZuhBp5F;!Fw;R4WApb?Y7fF!stmu3;i8 zGoo9sR&loR#!rKe`w1_a-7@5Q7QYNHy?=92Va*NyxmP_|o_(YoR!iOK!n$skd~)l_ z{d%rhw^n#FE=lWzwF$ne85EvbT6+9*;I<%!)r=kSvllZbX?%`aQE2MGbAOk>W_x~F z7|a};K61cEQQJ0w>!b3d`(}*QUsAcC+@oNH;@`cZ^c+`frCSVWEili0X}jfA;^mmY zxY^fvahk!pI$>NFcx-+v;8Txb9$X_~T;M&7GX}}WbW?$p%YZ^t#CRBo{~B)t4WZ*( z+AdQ6GXPja{qT5Evl7NF2?XB{ZV-<%8cZ>ae_KBv@V{ffbij`i+YhD|N{4@=e-+@z ziQ5mi|5|@LXf({Z!7zPM0d3HdfOTOA1AsZ;QFpW*$wygJfs{KZuAk^m@|(hrSK>t`J~*>Vp6Ufynn64`eXY^{?BkEpOl*c z_z_|}%1Ayb_p_Lk+Yfk4TKzvO-#DM(%W3+%MwnPb1 zwi56-eo5UVZjOWC2g1Zj*Z<$*apEQQ|BC%i0)EJE=>HY)_B1?cS4-PJ5hfjcen`7X z+){ij;EDYZ1M0LW5Ix@lp3Gk@0*VU}yfG{k%|L(5hN-BZ@MQgpYhaS!5)znt>*hPW$N3ZM$36hFP@$<9%XJi&!x;M??T7(ml;bxQ28@v( zzWu3kus1*jj4@vgF2t+Dg#lws_re4OjB!su7ZVWZF}9fv7naw93j@YjKYSZdHUS$` z0b?vjHhO*(!#)FJ2wWJ3P=Eh-V$@?OT&VvrxG-%E7Y2+mJscC_@Tb3i+;9J#{Z-w* z8awbm8GuiMQOirGW)7`XP01g{H0g8K+i`PevsM)mFRqQfS9H#7*ylpI<(sUBPIkXP zXvp%=RWCAcO;?Tx`I6HkXxH#ZNilDgc5h34I+4bUW03^rf(fl{tqzX2^siC9xp(?S zy*0xULN+d(`?>X&v?Vb%p<80CUj%NGz4h(Noa57Ty2SFo$b?NfVrOpbk$h&d_k>OX zKt}Y%XORSE)rm*^BUvB5-kc@s7#@CA*nRl`Mg2S5v#mRyoR?an)2*;Z^=g}CM*a^! z>|ED&Y-&O1oKJJkI$RGqwQ7E<)!LcUXuLRgkigWH@3OYFhwX`x_Hsw!75uekeqH`v za5(xs^R#LQ=RT*p_vR7Sr_Anm*+?Kn)Z&bpS|vM{sjMfo1NaCQ62GQYws!XMK!_4 z9~;DL%PGHFvv+v__b++6ec^MfE-?A#MZNM2YZmXVIi_+tZs$!wPHLZ%y-o`@%q+0Y zTpu+{w_n=s<&z>ZH%D~6$*s{cFHRl0_{mC*`C8%AH3xP~wV~Mo=YA5HR#VSbZL2hr z=05VfZFGHm#^>Fdimv(V6?85uGdh>JPKYT_dhLAs#_dHtDt6Dj`MGUbamo_y#hNB< zD`U!+4;}E1W(WFup4nwZ$(9SxH}C7Mk~r{TjehlmxZsEPI_fQQe5A1c(u>oI8XvzZ zz8JQ!YR$q-t?iKpda`c&9;CiWyk2=)nhw1aM_2HarK?VAyk@-?Ar(3ZT z(_b2AOyN)4dU0Yx*1C}quPdbGXuLSbkifk6>5S}*@p1Rn^AuHf4RT>CTg8ttx;8NK z+XM5CMOpzPC%QXo^!?}DWUi#feF!>Ve(v;|r+t$Z?cURPVfkGbnEPH! zCMR9uS@Q}GT{yDhq;uq(yEf;yZ@hBUcv{)p4G&ztFR|&d{+4XSr=A&_2VxTXgm9hq zjkVc%?d>#^mE}ewGiki^bp*40dFg--TU*`vkbWyl$J(*AYOZCq$R~gL0ZZkI31i1= zwz@e$|H+An-XkXVe{nHgsnki9#j{Sn)oHl(k_>J@7;e^*=a{}eVlMS~R(*+IxM^$b z-GGE7hnJ<+m)<5mukLB{=`j*5A_W%ZUQxoG%epsZtiP`;>x%V=OE>q+5*Vas-dBW{xZFzQlh0 zb@|Lks{1uUHLT1l(tP}`cH5-4O}$`u^h%n(Wc`BV%(M??C!GIsae6f^)+b9L>)N*+ zVRkMZk5ot;88F&wm~2mX+m%;BPIee1-C@Y%wSCU6@Ulr)FyRgiNuS8tZ5NH>4^-rEIVbEkZd&Xvg=G%oN^kJvLEv_nUnd89m}Xy4a-jZRM=2i5#NK{7yL&;|Ln zS@zzOXV^O|<4S(yuqsC8UZl?ta0XKsnAa62e^6VS>1w2=?9e&UW`_I8dC3bL3M+j= zEG|DhG&V2yzVGL^%9{HQjEqU1GG%Cmh3m+tYu>eINW41saLfQD1DYMkIt|I0ujUqH z2fdtmZ^Sbf{oGOf%>xa-pI0!+ikClapLTg(lHA9?I4_>(6>hknBc;xh+ftoicSJeU zEPRy0d)_63cSlFjc*%N?;_V;bN+!qEd{Tb#j83QhdStcL%^G1ZwL>*z?T&y2WA1lO z)wApu(A$-h7bg?nAyq}qdJj)~W}7m>t(03{gVtn4(|9}8SpoFDb+*7?a-QZM_01XO zp`p9_CQ6)tc)TLF&&sHqS+m}x>9twqc3Gz=C@^E{i|+f){EvrODCugRtmvn;%tX8I zn4K0hUO2<63(OCdiKF-ER#lFg91)b$i`y|}=6MCh^26SJEJ8k~fBKj$3_ZA^m+p*11T|{2um7Akn*2boJsm!@fZYT}LQq zU-jTy9+!E(bMof%RXvtmkNVOr%wI5OidSZqv?Xg@hatN*U7IxZtMbmLl?Pwnrs)f3 zY;}RjwTfDPpmd@mBV3;~KD4+`fX}B^b1ys`#eAN)-8RE={-v}&ifamdE~|Y#y~WX` zs89aDJdV^cq3q#j_F;mU{h8kd)zNpQ?&XA;-?327lW!9mx-j8EwnNHw8ZUkWk-${)lqu*o&zZ*zka;rxcrF!30xsh>5FxcH**Ge*5KJjY@Eh9tCyx8M8XJ_56 z*cjK-!igpAt(UYoTEDgJ@Pcb$%emKO?IyF>v4?5A~Uq)Gd>2%8Xa)17SC;M)gIuC!XFdc0V=BU=78jq%J3IC0 zt*pK=3v32xC%!$fsD>FAKX(0q6Z`4UaSuWYF>^s+VUWyCkB9=5jAJEIYBMK9n(A)9 zIzeup!5rnsH%5d;Z#f*V6#wvHhi!*UPAiJOet5ZU7B4C(wwHx{yHu@B_i6g}r1N%a z6=0zJTJzC^S7)7==Z8Bhu9H7-G?Jks?GPpXNl$6QP#N3ez6&NPF+;YV<+X!xPWOjGUfepXThF z^-AqgQW5KTNPo}PYOnTR8@t*yyK?iLlL1o-ck2h5((Ry5=N<4o!z_q3LRBSYd~R;1 zZy#<9-YPXKr<9T={hLs-u~EDlYe8=li<+wWe1GP zGvCY(t#UjXy`@+YUQfRyybl%RK8_{WNANCIGZ`uCEA^8s%Up)R; zKJ7xUfrgWYojE0c+s$I8l#}r=}=5bl(&+vvRV^(vbAL+(#5ILl)O&z3IG# znw{@@ys5dQ8Rt@_ej{YFPIR1#!DQB{7yL0SbM5&mYp!>9~quuH+WYx9}nY=7&3Nk@e%8ewt4rn3Y?SJfOH z`ug!VzsOVJmnmLJinkA)H_hT>lGD?Xqg!p-EAQ^!uV?k?F+1Cu7gb;18rx0j`HYz3 zGh(`I*&Y48*uXe`?V)_ejPW-ESF{=vm2hf;vt-#5d78f3blw|(pWmq1~RCYT9b@p8k zT?a8QezWwY^Y*wIIDPw&>rUrWg0;s~Mfz>>jTd?!>FQWItjhE5VJVr2E*~p;#%+jL zcROSHi@{-9(b0(yJL{IN9qYT6f9sv(UNLVlaQ36~T7_=hZpG~M@%EFBkH3`62zv0I zkrK~tqo7*hxM5h)@yII<)%RF!i$aHFFTYwIm+`IB?p1vhiia0?N*~*CE;4Zk#mkUI zUL88Gsdjg7v++`|TPxaC@0h+`Q?H3p7I$B_&Ua{icJrHw3(L;S>?}T| zXa9;@F6#VtmyvUh&I6UoY~NdAUL0p+9|!4~rzU6S+z7q=Y3Wh@R(txLeUoW;-|*hn zY@75|ug)nibzU~c-%M9E^y&30Q_9@Rk3EXGl6;>(yp7G3Xaim6wWb%xih0q#EF=^M z=K4jsm8tfTSk`h zMntVxY9b1oH)Q~4{za~g>a(Ohm3<$dwol2|*O_Hna_tz6*MQDDIIYK}K|OTi^_J|K zZFTC!UtPnD7Ot-RGM!zze!-FC-etv+)(h^t{ADvI+e%OA@1^N3?+0(Z(=J@Ltg!F5 zp2Z_VXuP;zM*{QUrL3}>yjg?&aszaRO6Eq|oSby<=3vtZt|w=e(w2Lor1Sl+2^U-L z6?v-L>gPyAWeF|U#_)_=S#FZ@pX;czg~n?{NFiowO-pwx7|6$=loQ~&hn%-BxuFXt!Gc*(vZ z(ld8t4PG+K&OBLWYEJ2d7iIIAg}pB4yj-QVIM!0@TF*i9gNjSM=XtAcnDaSXXMQ)P zf)6Wt^51W)Z7RLwI{0KnM$&l6z9hxFa_jsT3h(4UjDIrpLA$?f(ySk;6hGD1=y=~q z>Ewz(OGt^fT^5$~|?z(EmY8)?~2VdY`cf?y=QyY*8zn5nbR#VJ@-wT=h85vpv@Fx_w zR>k!<{x$*Eym;o1>t8%e$Gz1daKUfOD6g@>5X0}R7=z$~-@D^)*70|9i~(@L?@y`v zaX$;s1@R0I&$m%gJU6z2YbacJR)*(Vcm{>%arm1bJU7BK9z2i1vlHA;z%vOvKft|y z+?U6*k6v)$9y0FB;vOpQcjDe8?jz#f9PXpd61Q7~3PEV9{b(=T8^V1jY#7g-)!{yBMMrae1V>!fNjAbxJj2c|HH;4OvXbZFn?uDX#&`xMCv>V#5H(a=X zg|^21CL?j2EVkPo>}&{f=1zwFXZV@HFzjD9h7A5O3@QJ!II&+-2MK2rwkaEE(K>Ji z6VE7FNiU9wD-^-+O~pQL#CJ+o!r6#zzy>wYI$+sg;CVpxl zF=iWrfNB9)IGA{{fkdBef^0bM!2ZF+*Nu`Gnt*b)Ac5WpCSG#25+jg!h%v;Et{y`? z9f=1WNX$S3XsH?u7U=t6;$sIAV>Za3M?ix05HCDZk3rp@kkj`B4b^c|*C?UZh6ZeX z#;?>vc9Q_3TrVaAzqinn-3)VY(Oy> z#6Oex{ZSZwHjG^2DM~yLK?36gF~p~o_$rDe28ImcWlFpkB_#~lCWeS1exk(xkgCTB zCB)N|cra2DLue?2_@okFM@j;{%3u)hRpJ#%X+TMcKP&N*q%c%35YJZPF)3z)ULZcJ z#22!@9^%DHyd%XDcuIcW9^x5GJTAo=0Oseq5wBX}tyy0W@w+AdoRoyJ=nvaN_0P|( zL%ey3m#A1b=mp}xOZ-CXHTYqBsPXo58~ntgP1^0}E&X{tKes6HHzt0pk`h5+8ys(B zcZ_(PidzcffcOp*pHwD{UTU&r5bt8*wOTJB{>Q|xwO&Fzl!@nSy@dEM6W`c+3Gs3! z-m~=*;s;IqYwIP%Q<`|-)=P*lHSy7{mk@7j;>BApA^y?C?-rk6L!7D@#6y~R-hxHV z;Jsj=&mg|k#79?B0^gJvh<7#d+64@}F8Z^Lo4|Y)zb#{iP!#ai6mq@iaedjt14LY3 zKF7;WWku5CQTx( z#r1)~PnQSi%r12G<@tz)P`7&UUkqRw>nY-cO<*D5BbdW=;|8#Ndq(l?A0mun=Ymc_J_-3rRrz_=wbjK79jvTzwk=}X;# zya}}$LP4E|87y2W88>5W3Q}h>!cmvOGGpWVvE>~G!>Ey6Ag5*h-gtBZPva~gg5_s3 z>il!u1Jgen|o@g|M~$4DrOn52f!;1+U73s@)G#7e7SBsU#_c2i2vM#<;D?lU{(kSWVyrK zz=HpR(p1A66hsR&$bhQwZQAq*sjC&>b@$K#@aQ7aRp1SiCD#q6CSNYcn=51qxgwTG z07;n2L>v!lF-gq@O(ztm3_g5KLWU?1as)23;aOpEL;`QBpFjk+9Fb>zk2TevMkPU~ zMma5O7yO$YYz{+#3Nf zwWGWiUwaQoabGl1KV3}#)06dWX#(&1<8B73pGYXy=7v19r_m^>ZCInsmTA~KD84PV@EW@mT@=jT>Zp@%VlLn9K6u`!$e2 zX(K~Q;w_xlkgHb2@%0ASKZN3nC}{)2+Nx?%jVr5@p&DF{3(wR2r&w=4q1O+D*oJ?I z++hXpB6P!MG%-9Hu+bomtxOZqEZ$P$dQ+pCjkz02f0D{6oY@N0>6S)67A-6CUVV)(vgw)me{H9iStqwQTgakGtDiNm{LRiE>#1zCMhz}vwBBE`e3^5hagqVb=Mx^=& z=uhqE5t9+ah>3_(hzdlP&*yJ1ec4T7a04k&CL=_S2#D0+dqkQ*Ph=m>c)L5R&Fr<5 zl21e2`)~NP7w4f|{G-TBASkto+7OgB=`7~pgpe{{xYvAMV2eNErnp5O{2zKbLb}KN+}i= z#6}pB$f+X#KZ*=qp_4?5PRpQPZ4)iZAc&9=1xpC-DA=xfM1w~VN_0_Fz#)whj%wHl zspa$#4Uz~#nnXSQ`nRAc|4)A@?+;U({ZN=#0c{B?_(4~}h+&)F!ARgRaw*Iqmw{!g zgNcG}3@4kiYAkt^UHawU|cI~Wz5Om{$kk_!G#uXr*Ja}t*1Y+q%UJ(OQJ zI5T%kdTY;{+ZD2-Py2UG1-p|QG8aa^yfI!^2@RcDG{G{rUOBA9$~4)HrV|%wK(U@(+(|pmR%~J?n1bTjAl_x!#aAZL%l) z#O@0}O^gR8)T#C7;vYZny7at0Z8Xq`f6S28xK%_A{F&i^m1GrE8!DJhaKYe!;S?39 zi~!5VanMO5YT@yA;mu-$1Yp6~21CYZ$WlHG%VPD| zkkz&IMX!Oj*wu&)s|8z5P8oI{-w^m*2)!+A0NM;hg%pJpi-b)=qLFBIMJkp$vOzbQ*%X;EU(qBMl>jq>$AY+X+={6lr}asjMlWxbDf^L-_LNIgt2g$d7Ooic>={YHs=8v(7EtV2YIym z>`?uNfiO8bx<6Z7oLp(&(3luFj;_L}8Qtmn;%3(YvSA<$qa@SpGsDxTrZ+T47`TIJ z3DfJ)%-XlD&DUStFqmdQUBuQ4)92M+_kYtB|I1bp=5672SNld}r5Oa4;9l_mSzAEPFl%go`j&j%} z&| ({ + onClick: () => { + const { value } = ctx.get(); + ctx.set({ value: value + 1 }); + ctx.$counter.innerText = String(value + 1); + }, + }), + counter: (_ctx) => ({}), + sub: (ctx) => ({ + onClick: () => { + const { value } = ctx.get(); + ctx.set({ value: value - 1 }); + ctx.$counter.innerText = String(value - 1); + }, + }), + }, +); diff --git a/src/components/Counter.tsx b/src/components/Counter.tsx new file mode 100644 index 0000000..c119070 --- /dev/null +++ b/src/components/Counter.tsx @@ -0,0 +1,14 @@ +import { useState } from "~/lib/hooks"; +import counterState from "./Counter.state"; + +export const Counter = () => { + const { sub, counter, add } = useState(counterState); + + return ( +
+ + 0 + +
+ ); +}; diff --git a/src/components/Heading.tsx b/src/components/Heading.tsx new file mode 100644 index 0000000..ab68473 --- /dev/null +++ b/src/components/Heading.tsx @@ -0,0 +1,43 @@ +import type { Styles } from "~/types"; + +interface HeadingProps { + children: JSX.Children; + as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div" | "span"; + size?: + | "xs" + | "sm" + | "base" + | "lg" + | "xl" + | "2xl" + | "3xl" + | "4xl" + | "5xl" + | "6xl" + | "7xl" + | "8xl" + | "9xl"; + style?: Styles; +} + +const Heading = ({ + children, + as = "span", + size = "base", + style, +}: HeadingProps) => { + const Tag = as; + return ( + + {children} + + ); +}; + +export default Heading; diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 48f1e80..c2c477b 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -1,5 +1,7 @@ import Global from "~/lib/Global"; import Navigation from "./Navigation"; +import Heading from "./Heading"; +import { Link } from "./Link"; interface LayoutProps { children: JSX.Element | JSX.Element[]; @@ -7,29 +9,72 @@ interface LayoutProps { export default function Layout({ children }: LayoutProps) { return ( -
+ <> -
Header
- - {children} -
+
+
+
+ + + +
+ +
+
+
{children}
+
+
+ ); } diff --git a/src/components/Link.tsx b/src/components/Link.tsx new file mode 100644 index 0000000..1218308 --- /dev/null +++ b/src/components/Link.tsx @@ -0,0 +1,5 @@ +type Props = JSX.IntrinsicElements["a"]; + +export const Link = (props: Props) => { + return ; +}; diff --git a/src/components/Navigation.tsx b/src/components/Navigation.tsx index d880f42..f8038ab 100644 --- a/src/components/Navigation.tsx +++ b/src/components/Navigation.tsx @@ -13,13 +13,21 @@ export default function Navigation() {