From ed4a8b267a3da1ecf4b8e3c08591014d8895770d Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Tue, 17 Jun 2025 11:38:49 +0200 Subject: [PATCH 01/55] Initial commit --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8461975 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# paymentIQ +Payment IQ Back Office From 2fee3669b6013899115cedb87bfe6a4f3c7022e3 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Tue, 17 Jun 2025 13:30:47 +0200 Subject: [PATCH 02/55] First commit --- payment-iq/.gitignore | 41 + payment-iq/README.md | 36 + payment-iq/app/favicon.ico | Bin 0 -> 25931 bytes payment-iq/app/globals.css | 42 + payment-iq/app/layout.tsx | 32 + payment-iq/app/page.module.css | 168 + payment-iq/app/page.tsx | 95 + payment-iq/eslint.config.mjs | 16 + payment-iq/next.config.ts | 7 + payment-iq/package-lock.json | 5405 ++++++++++++++++++++++++++++++++ payment-iq/package.json | 25 + payment-iq/public/file.svg | 1 + payment-iq/public/globe.svg | 1 + payment-iq/public/next.svg | 1 + payment-iq/public/vercel.svg | 1 + payment-iq/public/window.svg | 1 + payment-iq/tsconfig.json | 27 + 17 files changed, 5899 insertions(+) create mode 100644 payment-iq/.gitignore create mode 100644 payment-iq/README.md create mode 100644 payment-iq/app/favicon.ico create mode 100644 payment-iq/app/globals.css create mode 100644 payment-iq/app/layout.tsx create mode 100644 payment-iq/app/page.module.css create mode 100644 payment-iq/app/page.tsx create mode 100644 payment-iq/eslint.config.mjs create mode 100644 payment-iq/next.config.ts create mode 100644 payment-iq/package-lock.json create mode 100644 payment-iq/package.json create mode 100644 payment-iq/public/file.svg create mode 100644 payment-iq/public/globe.svg create mode 100644 payment-iq/public/next.svg create mode 100644 payment-iq/public/vercel.svg create mode 100644 payment-iq/public/window.svg create mode 100644 payment-iq/tsconfig.json diff --git a/payment-iq/.gitignore b/payment-iq/.gitignore new file mode 100644 index 0000000..5ef6a52 --- /dev/null +++ b/payment-iq/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/payment-iq/README.md b/payment-iq/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/payment-iq/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/payment-iq/app/favicon.ico b/payment-iq/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 zcmeHv30#a{`}aL_*G&7qml|y<+KVaDM2m#dVr!KsA!#An?kSQM(q<_dDNCpjEux83 zLb9Z^XxbDl(w>%i@8hT6>)&Gu{h#Oeyszu?xtw#Zb1mO{pgX9699l+Qppw7jXaYf~-84xW z)w4x8?=youko|}Vr~(D$UXIbiXABHh`p1?nn8Po~fxRJv}|0e(BPs|G`(TT%kKVJAdg5*Z|x0leQq0 zkdUBvb#>9F()jo|T~kx@OM8$9wzs~t2l;K=woNssA3l6|sx2r3+kdfVW@e^8e*E}v zA1y5{bRi+3Z`uD3{F7LgFJDdvm;nJilkzDku>BwXH(8ItVCXk*-lSJnR?-2UN%hJ){&rlvg`CDTj z)Bzo!3v7Ou#83zEDEFcKt(f1E0~=rqeEbTnMvWR#{+9pg%7G8y>u1OVRUSoox-ovF z2Ydma(;=YuBY(eI|04{hXzZD6_f(v~H;C~y5=DhAC{MMS>2fm~1H_t2$56pc$NH8( z5bH|<)71dV-_oCHIrzrT`2s-5w_+2CM0$95I6X8p^r!gHp+j_gd;9O<1~CEQQGS8) zS9Qh3#p&JM-G8rHekNmKVewU;pJRcTAog68KYo^dRo}(M>36U4Us zfgYWSiHZL3;lpWT=zNAW>Dh#mB!_@Lg%$ms8N-;aPqMn+C2HqZgz&9~Eu z4|Kp<`$q)Uw1R?y(~S>ePdonHxpV1#eSP1B;Ogo+-Pk}6#0GsZZ5!||ev2MGdh}_m z{DeR7?0-1^zVs&`AV6Vt;r3`I`OI_wgs*w=eO%_#7Kepl{B@xiyCANc(l zzIyd4y|c6PXWq9-|KM8(zIk8LPk(>a)zyFWjhT!$HJ$qX1vo@d25W<fvZQ2zUz5WRc(UnFMKHwe1| zWmlB1qdbiA(C0jmnV<}GfbKtmcu^2*P^O?MBLZKt|As~ge8&AAO~2K@zbXelK|4T<{|y4`raF{=72kC2Kn(L4YyenWgrPiv z@^mr$t{#X5VuIMeL!7Ab6_kG$&#&5p*Z{+?5U|TZ`B!7llpVmp@skYz&n^8QfPJzL z0G6K_OJM9x+Wu2gfN45phANGt{7=C>i34CV{Xqlx(fWpeAoj^N0Biu`w+MVcCUyU* zDZuzO0>4Z6fbu^T_arWW5n!E45vX8N=bxTVeFoep_G#VmNlQzAI_KTIc{6>c+04vr zx@W}zE5JNSU>!THJ{J=cqjz+4{L4A{Ob9$ZJ*S1?Ggg3klFp!+Y1@K+pK1DqI|_gq z5ZDXVpge8-cs!o|;K73#YXZ3AShj50wBvuq3NTOZ`M&qtjj#GOFfgExjg8Gn8>Vq5 z`85n+9|!iLCZF5$HJ$Iu($dm?8~-ofu}tEc+-pyke=3!im#6pk_Wo8IA|fJwD&~~F zc16osQ)EBo58U7XDuMexaPRjU@h8tXe%S{fA0NH3vGJFhuyyO!Uyl2^&EOpX{9As0 zWj+P>{@}jxH)8|r;2HdupP!vie{sJ28b&bo!8`D^x}TE$%zXNb^X1p@0PJ86`dZyj z%ce7*{^oo+6%&~I!8hQy-vQ7E)0t0ybH4l%KltWOo~8cO`T=157JqL(oq_rC%ea&4 z2NcTJe-HgFjNg-gZ$6!Y`SMHrlj}Etf7?r!zQTPPSv}{so2e>Fjs1{gzk~LGeesX%r(Lh6rbhSo_n)@@G-FTQy93;l#E)hgP@d_SGvyCp0~o(Y;Ee8{ zdVUDbHm5`2taPUOY^MAGOw*>=s7=Gst=D+p+2yON!0%Hk` zz5mAhyT4lS*T3LS^WSxUy86q&GnoHxzQ6vm8)VS}_zuqG?+3td68_x;etQAdu@sc6 zQJ&5|4(I?~3d-QOAODHpZ=hlSg(lBZ!JZWCtHHSj`0Wh93-Uk)_S%zsJ~aD>{`A0~ z9{AG(e|q3g5B%wYKRxiL2Y$8(4w6bzchKuloQW#e&S3n+P- z8!ds-%f;TJ1>)v)##>gd{PdS2Oc3VaR`fr=`O8QIO(6(N!A?pr5C#6fc~Ge@N%Vvu zaoAX2&(a6eWy_q&UwOhU)|P3J0Qc%OdhzW=F4D|pt0E4osw;%<%Dn58hAWD^XnZD= z>9~H(3bmLtxpF?a7su6J7M*x1By7YSUbxGi)Ot0P77`}P3{)&5Un{KD?`-e?r21!4vTTnN(4Y6Lin?UkSM z`MXCTC1@4A4~mvz%Rh2&EwY))LeoT=*`tMoqcEXI>TZU9WTP#l?uFv+@Dn~b(>xh2 z;>B?;Tz2SR&KVb>vGiBSB`@U7VIWFSo=LDSb9F{GF^DbmWAfpms8Sx9OX4CnBJca3 zlj9(x!dIjN?OG1X4l*imJNvRCk}F%!?SOfiOq5y^mZW)jFL@a|r-@d#f7 z2gmU8L3IZq0ynIws=}~m^#@&C%J6QFo~Mo4V`>v7MI-_!EBMMtb%_M&kvAaN)@ZVw z+`toz&WG#HkWDjnZE!6nk{e-oFdL^$YnbOCN}JC&{$#$O27@|Tn-skXr)2ml2~O!5 zX+gYoxhoc7qoU?C^3~&!U?kRFtnSEecWuH0B0OvLodgUAi}8p1 zrO6RSXHH}DMc$&|?D004DiOVMHV8kXCP@7NKB zgaZq^^O<7PoKEp72kby@W0Z!Y*Ay{&vfg#C&gG@YVR9g?FEocMUi1gSN$+V+ayF45{a zuDZDTN}mS|;BO%gEf}pjBfN2-gIrU#G5~cucA;dokXW89%>AyXJJI z9X4UlIWA|ZYHgbI z5?oFk@A=Ik7lrEQPDH!H+b`7_Y~aDb_qa=B2^Y&Ow41cU=4WDd40dp5(QS-WMN-=Y z9g;6_-JdNU;|6cPwf$ak*aJIcwL@1n$#l~zi{c{EW?T;DaW*E8DYq?Umtz{nJ&w-M zEMyTDrC&9K$d|kZe2#ws6)L=7K+{ zQw{XnV6UC$6-rW0emqm8wJoeZK)wJIcV?dST}Z;G0Arq{dVDu0&4kd%N!3F1*;*pW zR&qUiFzK=@44#QGw7k1`3t_d8&*kBV->O##t|tonFc2YWrL7_eqg+=+k;!F-`^b8> z#KWCE8%u4k@EprxqiV$VmmtiWxDLgnGu$Vs<8rppV5EajBXL4nyyZM$SWVm!wnCj-B!Wjqj5-5dNXukI2$$|Bu3Lrw}z65Lc=1G z^-#WuQOj$hwNGG?*CM_TO8Bg-1+qc>J7k5c51U8g?ZU5n?HYor;~JIjoWH-G>AoUP ztrWWLbRNqIjW#RT*WqZgPJXU7C)VaW5}MiijYbABmzoru6EmQ*N8cVK7a3|aOB#O& zBl8JY2WKfmj;h#Q!pN%9o@VNLv{OUL?rixHwOZuvX7{IJ{(EdPpuVFoQqIOa7giLVkBOKL@^smUA!tZ1CKRK}#SSM)iQHk)*R~?M!qkCruaS!#oIL1c z?J;U~&FfH#*98^G?i}pA{ z9Jg36t4=%6mhY(quYq*vSxptes9qy|7xSlH?G=S@>u>Ebe;|LVhs~@+06N<4CViBk zUiY$thvX;>Tby6z9Y1edAMQaiH zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V zG#-?gKlr}Eeqifb{|So?HM&g91P8|av8hQoCmQXkd?7wIJwb z_^v8bbg`SAn{I*4bH$u(RZ6*xUhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq36!pV6Az&m{O8$wGFD? zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH( zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x z);_{lY<;);XzT`dBFpRmGrr}z5u1=pC^S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a( z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F= zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk($?Qw({erA$^bC;q33hv!d!>%wRhj# zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?- zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvhCL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ zy|Qn`hxx(58c70$E;L(X0uZZ72M1!6oeg)(cdKO ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC> z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl z8H5(Q?l#wzazujH!8o>1xtn8#_w+397*_cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111aH}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+ z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{ z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^ zb&uBN!Ja3UzYHK-CTyA5=L zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*IcmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$ z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G; zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8 zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU&68iRikRrHRW|ZxzRR^`eIGt zIeiDgVS>IeExKVRWW8-=A=yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_ zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v#ix45EVrcEhr>!NMhprl$InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~&^=4?PL&nd8)`OfG#n zwAMN$1&>K++c{^|7<4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C zI@}scZlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7 zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S zb+9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2`1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc- zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I zgg{b=Iz}WkhCGj1M=hu4#Aw173YxIVbISaoc z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S(O(a0e7oY=E( zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/payment-iq/app/globals.css b/payment-iq/app/globals.css new file mode 100644 index 0000000..e3734be --- /dev/null +++ b/payment-iq/app/globals.css @@ -0,0 +1,42 @@ +:root { + --background: #ffffff; + --foreground: #171717; +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +html, +body { + max-width: 100vw; + overflow-x: hidden; +} + +body { + color: var(--foreground); + background: var(--background); + font-family: Arial, Helvetica, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +a { + color: inherit; + text-decoration: none; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } +} diff --git a/payment-iq/app/layout.tsx b/payment-iq/app/layout.tsx new file mode 100644 index 0000000..42fc323 --- /dev/null +++ b/payment-iq/app/layout.tsx @@ -0,0 +1,32 @@ +import type { Metadata } from "next"; +import { Geist, Geist_Mono } from "next/font/google"; +import "./globals.css"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "Create Next App", + description: "Generated by create next app", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} diff --git a/payment-iq/app/page.module.css b/payment-iq/app/page.module.css new file mode 100644 index 0000000..a11c8f3 --- /dev/null +++ b/payment-iq/app/page.module.css @@ -0,0 +1,168 @@ +.page { + --gray-rgb: 0, 0, 0; + --gray-alpha-200: rgba(var(--gray-rgb), 0.08); + --gray-alpha-100: rgba(var(--gray-rgb), 0.05); + + --button-primary-hover: #383838; + --button-secondary-hover: #f2f2f2; + + display: grid; + grid-template-rows: 20px 1fr 20px; + align-items: center; + justify-items: center; + min-height: 100svh; + padding: 80px; + gap: 64px; + font-family: var(--font-geist-sans); +} + +@media (prefers-color-scheme: dark) { + .page { + --gray-rgb: 255, 255, 255; + --gray-alpha-200: rgba(var(--gray-rgb), 0.145); + --gray-alpha-100: rgba(var(--gray-rgb), 0.06); + + --button-primary-hover: #ccc; + --button-secondary-hover: #1a1a1a; + } +} + +.main { + display: flex; + flex-direction: column; + gap: 32px; + grid-row-start: 2; +} + +.main ol { + font-family: var(--font-geist-mono); + padding-left: 0; + margin: 0; + font-size: 14px; + line-height: 24px; + letter-spacing: -0.01em; + list-style-position: inside; +} + +.main li:not(:last-of-type) { + margin-bottom: 8px; +} + +.main code { + font-family: inherit; + background: var(--gray-alpha-100); + padding: 2px 4px; + border-radius: 4px; + font-weight: 600; +} + +.ctas { + display: flex; + gap: 16px; +} + +.ctas a { + appearance: none; + border-radius: 128px; + height: 48px; + padding: 0 20px; + border: none; + border: 1px solid transparent; + transition: + background 0.2s, + color 0.2s, + border-color 0.2s; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 16px; + line-height: 20px; + font-weight: 500; +} + +a.primary { + background: var(--foreground); + color: var(--background); + gap: 8px; +} + +a.secondary { + border-color: var(--gray-alpha-200); + min-width: 158px; +} + +.footer { + grid-row-start: 3; + display: flex; + gap: 24px; +} + +.footer a { + display: flex; + align-items: center; + gap: 8px; +} + +.footer img { + flex-shrink: 0; +} + +/* Enable hover only on non-touch devices */ +@media (hover: hover) and (pointer: fine) { + a.primary:hover { + background: var(--button-primary-hover); + border-color: transparent; + } + + a.secondary:hover { + background: var(--button-secondary-hover); + border-color: transparent; + } + + .footer a:hover { + text-decoration: underline; + text-underline-offset: 4px; + } +} + +@media (max-width: 600px) { + .page { + padding: 32px; + padding-bottom: 80px; + } + + .main { + align-items: center; + } + + .main ol { + text-align: center; + } + + .ctas { + flex-direction: column; + } + + .ctas a { + font-size: 14px; + height: 40px; + padding: 0 16px; + } + + a.secondary { + min-width: auto; + } + + .footer { + flex-wrap: wrap; + align-items: center; + justify-content: center; + } +} + +@media (prefers-color-scheme: dark) { + .logo { + filter: invert(); + } +} diff --git a/payment-iq/app/page.tsx b/payment-iq/app/page.tsx new file mode 100644 index 0000000..52bd15e --- /dev/null +++ b/payment-iq/app/page.tsx @@ -0,0 +1,95 @@ +import Image from "next/image"; +import styles from "./page.module.css"; + +export default function Home() { + return ( +
+
+ Next.js logo +
    +
  1. + Get started by editing app/page.tsx. +
  2. +
  3. Save and see your changes instantly.
  4. +
+ + +
+ +
+ ); +} diff --git a/payment-iq/eslint.config.mjs b/payment-iq/eslint.config.mjs new file mode 100644 index 0000000..c85fb67 --- /dev/null +++ b/payment-iq/eslint.config.mjs @@ -0,0 +1,16 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), +]; + +export default eslintConfig; diff --git a/payment-iq/next.config.ts b/payment-iq/next.config.ts new file mode 100644 index 0000000..e9ffa30 --- /dev/null +++ b/payment-iq/next.config.ts @@ -0,0 +1,7 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + /* config options here */ +}; + +export default nextConfig; diff --git a/payment-iq/package-lock.json b/payment-iq/package-lock.json new file mode 100644 index 0000000..543d4ec --- /dev/null +++ b/payment-iq/package-lock.json @@ -0,0 +1,5405 @@ +{ + "name": "payment-iq", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "payment-iq", + "version": "0.1.0", + "dependencies": { + "next": "15.3.3", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "15.3.3", + "typescript": "^5" + } + }, + "node_modules/@emnapi/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", + "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz", + "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", + "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", + "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", + "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", + "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", + "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", + "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", + "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", + "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", + "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", + "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", + "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", + "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", + "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", + "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", + "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", + "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", + "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", + "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", + "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", + "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", + "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.4.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", + "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", + "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", + "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", + "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@next/env": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz", + "integrity": "sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.3.tgz", + "integrity": "sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz", + "integrity": "sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz", + "integrity": "sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz", + "integrity": "sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz", + "integrity": "sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz", + "integrity": "sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz", + "integrity": "sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz", + "integrity": "sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz", + "integrity": "sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.1.tgz", + "integrity": "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", + "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", + "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", + "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/type-utils": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.34.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", + "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", + "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.34.1", + "@typescript-eslint/types": "^8.34.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", + "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", + "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", + "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", + "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", + "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.34.1", + "@typescript-eslint/tsconfig-utils": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", + "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", + "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.34.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.0.tgz", + "integrity": "sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.0.tgz", + "integrity": "sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz", + "integrity": "sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.0.tgz", + "integrity": "sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.0.tgz", + "integrity": "sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.0.tgz", + "integrity": "sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.0.tgz", + "integrity": "sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.0.tgz", + "integrity": "sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.0.tgz", + "integrity": "sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.0.tgz", + "integrity": "sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.0.tgz", + "integrity": "sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.0.tgz", + "integrity": "sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.0.tgz", + "integrity": "sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.0.tgz", + "integrity": "sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.0.tgz", + "integrity": "sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.0.tgz", + "integrity": "sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.0.tgz", + "integrity": "sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.0.tgz", + "integrity": "sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.0.tgz", + "integrity": "sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001723", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", + "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", + "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.1", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.29.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.3.tgz", + "integrity": "sha512-QJLv/Ouk2vZnxL4b67njJwTLjTf7uZRltI0LL4GERYR4qMF5z08+gxkfODAeaK7TiC6o+cER91bDaEnwrTWV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "15.3.3", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT", + "optional": true + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz", + "integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.3.3.tgz", + "integrity": "sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==", + "license": "MIT", + "dependencies": { + "@next/env": "15.3.3", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.15", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.3.3", + "@next/swc-darwin-x64": "15.3.3", + "@next/swc-linux-arm64-gnu": "15.3.3", + "@next/swc-linux-arm64-musl": "15.3.3", + "@next/swc-linux-x64-gnu": "15.3.3", + "@next/swc-linux-x64-musl": "15.3.3", + "@next/swc-win32-arm64-msvc": "15.3.3", + "@next/swc-win32-x64-msvc": "15.3.3", + "sharp": "^0.34.1" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "devOptional": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", + "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.4", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.2", + "@img/sharp-darwin-x64": "0.34.2", + "@img/sharp-libvips-darwin-arm64": "1.1.0", + "@img/sharp-libvips-darwin-x64": "1.1.0", + "@img/sharp-libvips-linux-arm": "1.1.0", + "@img/sharp-libvips-linux-arm64": "1.1.0", + "@img/sharp-libvips-linux-ppc64": "1.1.0", + "@img/sharp-libvips-linux-s390x": "1.1.0", + "@img/sharp-libvips-linux-x64": "1.1.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", + "@img/sharp-libvips-linuxmusl-x64": "1.1.0", + "@img/sharp-linux-arm": "0.34.2", + "@img/sharp-linux-arm64": "0.34.2", + "@img/sharp-linux-s390x": "0.34.2", + "@img/sharp-linux-x64": "0.34.2", + "@img/sharp-linuxmusl-arm64": "0.34.2", + "@img/sharp-linuxmusl-x64": "0.34.2", + "@img/sharp-wasm32": "0.34.2", + "@img/sharp-win32-arm64": "0.34.2", + "@img/sharp-win32-ia32": "0.34.2", + "@img/sharp-win32-x64": "0.34.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unrs-resolver": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.0.tgz", + "integrity": "sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.2.2" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.9.0", + "@unrs/resolver-binding-android-arm64": "1.9.0", + "@unrs/resolver-binding-darwin-arm64": "1.9.0", + "@unrs/resolver-binding-darwin-x64": "1.9.0", + "@unrs/resolver-binding-freebsd-x64": "1.9.0", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.9.0", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.9.0", + "@unrs/resolver-binding-linux-arm64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-arm64-musl": "1.9.0", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-riscv64-musl": "1.9.0", + "@unrs/resolver-binding-linux-s390x-gnu": "1.9.0", + "@unrs/resolver-binding-linux-x64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-x64-musl": "1.9.0", + "@unrs/resolver-binding-wasm32-wasi": "1.9.0", + "@unrs/resolver-binding-win32-arm64-msvc": "1.9.0", + "@unrs/resolver-binding-win32-ia32-msvc": "1.9.0", + "@unrs/resolver-binding-win32-x64-msvc": "1.9.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/payment-iq/package.json b/payment-iq/package.json new file mode 100644 index 0000000..7d16961 --- /dev/null +++ b/payment-iq/package.json @@ -0,0 +1,25 @@ +{ + "name": "payment-iq", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "react": "^19.0.0", + "react-dom": "^19.0.0", + "next": "15.3.3" + }, + "devDependencies": { + "typescript": "^5", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "15.3.3", + "@eslint/eslintrc": "^3" + } +} diff --git a/payment-iq/public/file.svg b/payment-iq/public/file.svg new file mode 100644 index 0000000..004145c --- /dev/null +++ b/payment-iq/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/payment-iq/public/globe.svg b/payment-iq/public/globe.svg new file mode 100644 index 0000000..567f17b --- /dev/null +++ b/payment-iq/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/payment-iq/public/next.svg b/payment-iq/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/payment-iq/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/payment-iq/public/vercel.svg b/payment-iq/public/vercel.svg new file mode 100644 index 0000000..7705396 --- /dev/null +++ b/payment-iq/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/payment-iq/public/window.svg b/payment-iq/public/window.svg new file mode 100644 index 0000000..b2b2a44 --- /dev/null +++ b/payment-iq/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/payment-iq/tsconfig.json b/payment-iq/tsconfig.json new file mode 100644 index 0000000..d8b9323 --- /dev/null +++ b/payment-iq/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} From e14f63684f3e109994df7cfbb6b817eda09d9353 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Tue, 17 Jun 2025 16:43:39 +0200 Subject: [PATCH 03/55] s --- README.md | 2 - payment-iq/README.md | 38 +- payment-iq/app/components/Sidebar.tsx | 80 + payment-iq/app/page.tsx | 93 +- payment-iq/config/theme.ts | 75 + payment-iq/package.json | 5 +- payment-iq/yarn.lock | 3163 +++++++++++++++++++++++++ 7 files changed, 3326 insertions(+), 130 deletions(-) delete mode 100644 README.md create mode 100644 payment-iq/app/components/Sidebar.tsx create mode 100644 payment-iq/config/theme.ts create mode 100644 payment-iq/yarn.lock diff --git a/README.md b/README.md deleted file mode 100644 index 8461975..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# paymentIQ -Payment IQ Back Office diff --git a/payment-iq/README.md b/payment-iq/README.md index e215bc4..8461975 100644 --- a/payment-iq/README.md +++ b/payment-iq/README.md @@ -1,36 +1,2 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. +# paymentIQ +Payment IQ Back Office diff --git a/payment-iq/app/components/Sidebar.tsx b/payment-iq/app/components/Sidebar.tsx new file mode 100644 index 0000000..4cdc34b --- /dev/null +++ b/payment-iq/app/components/Sidebar.tsx @@ -0,0 +1,80 @@ +// components/SidebarLayout.tsx +import React from 'react'; +import { styled } from '@mui/system'; +import { Box, Typography, Button } from '@mui/material'; + +// Sidebar Container (styled using MUI System) +export const Sidebar = styled('div')(({ theme }) => ({ + width: '240px', + backgroundColor: theme.palette.primary.main, + color: theme.palette.common.white, + padding: theme.spacing(2), + height: '100vh', + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between', +})); + +// Main Content Area +export const MainContent = styled('div')(({ theme }) => ({ + marginLeft: '240px', + padding: theme.spacing(3), + backgroundColor: theme.palette.background.paper, + minHeight: '100vh', +})); + +// Sidebar Navigation Items +export const SidebarItem = styled('div')(({ theme }) => ({ + padding: theme.spacing(1.5), + cursor: 'pointer', + '&:hover': { + backgroundColor: theme.palette.primary.dark, + }, +})); + +// Page Wrapper that holds Sidebar and Content +export const LayoutWrapper = styled('div')({ + display: 'flex', + flexDirection: 'row', + height: '100vh', +}); + +// Sidebar Header +export const SidebarHeader = styled('div')(({ theme }) => ({ + marginBottom: theme.spacing(2), + fontSize: '20px', + fontWeight: 600, +})); + +const SidebarLayout = () => { + return ( + + + Dashboard + + Home + + + Settings + + + Profile + + + + + + + Welcome to the Dashboard! + + + This is your main content area. + + + + ); +} + +export default SidebarLayout; diff --git a/payment-iq/app/page.tsx b/payment-iq/app/page.tsx index 52bd15e..c251ee2 100644 --- a/payment-iq/app/page.tsx +++ b/payment-iq/app/page.tsx @@ -1,95 +1,6 @@ import Image from "next/image"; -import styles from "./page.module.css"; +import SidebarLayout from '@/app/components/Sidebar'; export default function Home() { - return ( -
-
- Next.js logo -
    -
  1. - Get started by editing app/page.tsx. -
  2. -
  3. Save and see your changes instantly.
  4. -
- - -
- -
- ); + return ; } diff --git a/payment-iq/config/theme.ts b/payment-iq/config/theme.ts new file mode 100644 index 0000000..f8f151f --- /dev/null +++ b/payment-iq/config/theme.ts @@ -0,0 +1,75 @@ +import { createTheme } from '@mui/material/styles'; + +// Define your color palette +const lightPalette = { + primary: { + main: '#1976d2', // Blue color + }, + secondary: { + main: '#d32f2f', // Red color + }, + background: { + default: '#fafafa', + paper: '#ffffff', + }, + text: { + primary: '#000000', + secondary: '#555555', + }, +}; + +const darkPalette = { + primary: { + main: '#90caf9', // Light blue + }, + secondary: { + main: '#f48fb1', // Light pink + }, + background: { + default: '#121212', + paper: '#1d1d1d', + }, + text: { + primary: '#ffffff', + secondary: '#bbbbbb', + }, +}; + +// Typography customization +const typography = { + fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif', + h1: { + fontSize: '3rem', + fontWeight: 700, + }, + h2: { + fontSize: '2.5rem', + fontWeight: 700, + }, + body1: { + fontSize: '1rem', + fontWeight: 400, + }, +}; + +// Create the theme based on the light or dark mode preference +const theme = createTheme({ + palette: { + mode: 'light', // Change this to 'dark' for dark mode + ...(process.env.NODE_ENV === 'development' // Switch for dev mode + ? lightPalette + : darkPalette), + }, + typography, + breakpoints: { + values: { + xs: 0, + sm: 600, + md: 960, + lg: 1280, + xl: 1920, + }, + }, +}); + +export default theme; diff --git a/payment-iq/package.json b/payment-iq/package.json index 7d16961..d4c4495 100644 --- a/payment-iq/package.json +++ b/payment-iq/package.json @@ -11,7 +11,10 @@ "dependencies": { "react": "^19.0.0", "react-dom": "^19.0.0", - "next": "15.3.3" + "next": "15.3.3", + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@mui/material": "^7.1.1" }, "devDependencies": { "typescript": "^5", diff --git a/payment-iq/yarn.lock b/payment-iq/yarn.lock new file mode 100644 index 0000000..687a028 --- /dev/null +++ b/payment-iq/yarn.lock @@ -0,0 +1,3163 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/generator@^7.27.3": + version "7.27.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.5.tgz#3eb01866b345ba261b04911020cbe22dd4be8c8c" + integrity sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw== + dependencies: + "@babel/parser" "^7.27.5" + "@babel/types" "^7.27.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-module-imports@^7.16.7": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/parser@^7.27.2", "@babel/parser@^7.27.4", "@babel/parser@^7.27.5": + version "7.27.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.5.tgz#ed22f871f110aa285a6fd934a0efed621d118826" + integrity sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg== + dependencies: + "@babel/types" "^7.27.3" + +"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.27.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": + version "7.27.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.6.tgz#ec4070a04d76bae8ddbb10770ba55714a417b7c6" + integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q== + +"@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1": + version "7.27.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.4.tgz#b0045ac7023c8472c3d35effd7cc9ebd638da6ea" + integrity sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.3" + "@babel/parser" "^7.27.4" + "@babel/template" "^7.27.2" + "@babel/types" "^7.27.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.27.1", "@babel/types@^7.27.3": + version "7.27.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.6.tgz#a434ca7add514d4e646c80f7375c0aa2befc5535" + integrity sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + +"@emnapi/core@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" + integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== + dependencies: + "@emnapi/wasi-threads" "1.0.2" + tslib "^2.4.0" + +"@emnapi/runtime@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" + integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" + integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== + dependencies: + tslib "^2.4.0" + +"@emotion/babel-plugin@^11.13.5": + version "11.13.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" + integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/serialize" "^1.3.3" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.2.0" + +"@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== + dependencies: + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + stylis "4.2.0" + +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + +"@emotion/is-prop-valid@^1.3.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz#8d5cf1132f836d7adbe42cf0b49df7816fc88240" + integrity sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw== + dependencies: + "@emotion/memoize" "^0.9.0" + +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== + +"@emotion/react@^11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" + integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== + dependencies: + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.10.0" + "@emotion/utils" "^1.4.2" + csstype "^3.0.2" + +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== + +"@emotion/styled@^11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.0.tgz#f47ca7219b1a295186d7661583376fcea95f0ff3" + integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/is-prop-valid" "^1.3.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" + +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== + +"@emotion/use-insertion-effect-with-fallbacks@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" + integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== + +"@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== + +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.20.1": + version "0.20.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.20.1.tgz#454f89be82b0e5b1ae872c154c7e2f3dd42c3979" + integrity sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw== + dependencies: + "@eslint/object-schema" "^2.1.6" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.2.1": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.3.tgz#39d6da64ed05d7662659aa7035b54cd55a9f3672" + integrity sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg== + +"@eslint/core@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.14.0.tgz#326289380968eaf7e96f364e1e4cf8f3adf2d003" + integrity sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/core@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.0.tgz#8fc04709a7b9a179d9f7d93068fc000cb8c5603d" + integrity sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3", "@eslint/eslintrc@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.29.0": + version "9.29.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.29.0.tgz#dc6fd117c19825f8430867a662531da36320fe56" + integrity sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ== + +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== + +"@eslint/plugin-kit@^0.3.1": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz#0cad96b134d23a653348e3342f485636b5ef4732" + integrity sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg== + dependencies: + "@eslint/core" "^0.15.0" + levn "^0.4.1" + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + +"@img/sharp-darwin-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz#65049ef7c6be7857da742cd028f97602ce209635" + integrity sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.1.0" + +"@img/sharp-darwin-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz#d37ff7c75c46d5a68a3756e3f1924ef7ca7b285e" + integrity sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.1.0" + +"@img/sharp-libvips-darwin-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz#843f7c09c7245dc0d3cfec2b3c83bb08799a704f" + integrity sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA== + +"@img/sharp-libvips-darwin-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz#1239c24426c06a8e833815562f78047a3bfbaaf8" + integrity sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ== + +"@img/sharp-libvips-linux-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz#20d276cefd903ee483f0441ba35961679c286315" + integrity sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew== + +"@img/sharp-libvips-linux-arm@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz#067c0b566eae8063738cf1b1db8f8a8573b5465c" + integrity sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA== + +"@img/sharp-libvips-linux-ppc64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz#682334595f2ca00e0a07a675ba170af165162802" + integrity sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ== + +"@img/sharp-libvips-linux-s390x@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz#82fcd68444b3666384235279c145c2b28d8ee302" + integrity sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA== + +"@img/sharp-libvips-linux-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz#65b2b908bf47156b0724fde9095676c83a18cf5a" + integrity sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q== + +"@img/sharp-libvips-linuxmusl-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz#72accf924e80b081c8db83b900b444a67c203f01" + integrity sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w== + +"@img/sharp-libvips-linuxmusl-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz#1fa052737e203f46bf44192acd01f9faf11522d7" + integrity sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A== + +"@img/sharp-linux-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz#c9690fac5f3137eaab3f7ad6065390d10f66f1fa" + integrity sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.1.0" + +"@img/sharp-linux-arm@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz#771dd2ec645f85f98441359bfc118afaf38cbd8b" + integrity sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.1.0" + +"@img/sharp-linux-s390x@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz#82132d158abff57bd90b53574f2865f72f94e6c8" + integrity sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.1.0" + +"@img/sharp-linux-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz#d815fb87899d462b28b62a9252ad127f02fe0740" + integrity sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.1.0" + +"@img/sharp-linuxmusl-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz#cfac45b2abbc04628f676e123bfe3aeb300266c7" + integrity sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.1.0" + +"@img/sharp-linuxmusl-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz#b876c23ff51d0fb6d9f3b0a07e2f4d1436c203ad" + integrity sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.1.0" + +"@img/sharp-wasm32@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz#b1dd0bab547dccf517586eb1fa5852160bba3b82" + integrity sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ== + dependencies: + "@emnapi/runtime" "^1.4.3" + +"@img/sharp-win32-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz#f37bee0f60c167f825a09d2b8de6849b823e8b30" + integrity sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ== + +"@img/sharp-win32-ia32@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz#8fc30b6655bc6ff8910344a2020d334aa6361672" + integrity sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw== + +"@img/sharp-win32-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz#ecf19250f8fe35de684aa2b0ec6f773b3447247b" + integrity sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@mui/core-downloads-tracker@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-7.1.1.tgz#43532ccf57be19055eb20e7802508520293cf286" + integrity sha512-yBckQs4aQ8mqukLnPC6ivIRv6guhaXi8snVl00VtyojBbm+l6VbVhyTSZ68Abcx7Ah8B+GZhrB7BOli+e+9LkQ== + +"@mui/material@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-7.1.1.tgz#5f75b25936925be14cb34abe0489cda82a6f8413" + integrity sha512-mTpdmdZCaHCGOH3SrYM41+XKvNL0iQfM9KlYgpSjgadXx/fEKhhvOktxm8++Xw6FFeOHoOiV+lzOI8X1rsv71A== + dependencies: + "@babel/runtime" "^7.27.1" + "@mui/core-downloads-tracker" "^7.1.1" + "@mui/system" "^7.1.1" + "@mui/types" "^7.4.3" + "@mui/utils" "^7.1.1" + "@popperjs/core" "^2.11.8" + "@types/react-transition-group" "^4.4.12" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + react-is "^19.1.0" + react-transition-group "^4.4.5" + +"@mui/private-theming@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-7.1.1.tgz#c2ecc57a9b97fbfdd850430de500c42a0f2571fe" + integrity sha512-M8NbLUx+armk2ZuaxBkkMk11ultnWmrPlN0Xe3jUEaBChg/mcxa5HWIWS1EE4DF36WRACaAHVAvyekWlDQf0PQ== + dependencies: + "@babel/runtime" "^7.27.1" + "@mui/utils" "^7.1.1" + prop-types "^15.8.1" + +"@mui/styled-engine@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-7.1.1.tgz#2524e0f4e22782b42ea4c32f36f9e19a50ccf55a" + integrity sha512-R2wpzmSN127j26HrCPYVQ53vvMcT5DaKLoWkrfwUYq3cYytL6TQrCH8JBH3z79B6g4nMZZVoaXrxO757AlShaw== + dependencies: + "@babel/runtime" "^7.27.1" + "@emotion/cache" "^11.13.5" + "@emotion/serialize" "^1.3.3" + "@emotion/sheet" "^1.4.0" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/system@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-7.1.1.tgz#eff52e597b0bfed8ecf2e973f4575ef737430727" + integrity sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA== + dependencies: + "@babel/runtime" "^7.27.1" + "@mui/private-theming" "^7.1.1" + "@mui/styled-engine" "^7.1.1" + "@mui/types" "^7.4.3" + "@mui/utils" "^7.1.1" + clsx "^2.1.1" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/types@^7.4.3": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.4.3.tgz#b205ee3404db0478cd93227fc21967e2cb8630fe" + integrity sha512-2UCEiK29vtiZTeLdS2d4GndBKacVyxGvReznGXGr+CzW/YhjIX+OHUdCIczZjzcRAgKBGmE9zCIgoV9FleuyRQ== + dependencies: + "@babel/runtime" "^7.27.1" + +"@mui/utils@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-7.1.1.tgz#de315ec45ac9e16c637dcc2b32cd7912edb4e234" + integrity sha512-BkOt2q7MBYl7pweY2JWwfrlahhp+uGLR8S+EhiyRaofeRYUWL2YKbSGQvN4hgSN1i8poN0PaUiii1kEMrchvzg== + dependencies: + "@babel/runtime" "^7.27.1" + "@mui/types" "^7.4.3" + "@types/prop-types" "^15.7.14" + clsx "^2.1.1" + prop-types "^15.8.1" + react-is "^19.1.0" + +"@napi-rs/wasm-runtime@^0.2.11": + version "0.2.11" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz#192c1610e1625048089ab4e35bc0649ce478500e" + integrity sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.9.0" + +"@next/env@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/env/-/env-15.3.3.tgz#8c5548756df93efff1bf4bb4e9e430a763978155" + integrity sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw== + +"@next/eslint-plugin-next@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.3.tgz#04a378b405f65f61165085f84971ccb4bbcf2f0a" + integrity sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q== + dependencies: + fast-glob "3.3.1" + +"@next/swc-darwin-arm64@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz#994de8515cdfb74d337bdad645c33605de44c68b" + integrity sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg== + +"@next/swc-darwin-x64@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz#71588bad245180ffd1af1e1f894477287e739eb0" + integrity sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw== + +"@next/swc-linux-arm64-gnu@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz#66a15f749c14f04a89f8c7e21c7a8d343fc34e6e" + integrity sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw== + +"@next/swc-linux-arm64-musl@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz#14bd66213f7f33d6909574750bcb05037221a2ac" + integrity sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA== + +"@next/swc-linux-x64-gnu@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz#4a19434545e5e752d9a3ed71f9b34982725f6293" + integrity sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw== + +"@next/swc-linux-x64-musl@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz#41ab140dd0a04ab7291adbec5836c1ce251a588c" + integrity sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw== + +"@next/swc-win32-arm64-msvc@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz#fcd1d7e0007b7b73d1acdbf0ad6d91f7aa2deb15" + integrity sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ== + +"@next/swc-win32-x64-msvc@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz#c0e33e069d7922dd0546cac77a0247ad81d4a1aa" + integrity sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nolyfill/is-core-module@1.0.39": + version "1.0.39" + resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" + integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== + +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@rushstack/eslint-patch@^1.10.3": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz#75dce8e972f90bba488e2b0cc677fb233aa357ab" + integrity sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ== + +"@swc/counter@0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@0.5.15": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== + dependencies: + tslib "^2.8.0" + +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + +"@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/node@^20": + version "20.19.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.1.tgz#cef8bc04aaae86824b5bbe2570769358592bcc59" + integrity sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA== + dependencies: + undici-types "~6.21.0" + +"@types/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + +"@types/prop-types@^15.7.14": + version "15.7.15" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" + integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== + +"@types/react-dom@^19": + version "19.1.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.1.6.tgz#4af629da0e9f9c0f506fc4d1caa610399c595d64" + integrity sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw== + +"@types/react-transition-group@^4.4.12": + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== + +"@types/react@^19": + version "19.1.8" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.8.tgz#ff8395f2afb764597265ced15f8dddb0720ae1c3" + integrity sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g== + dependencies: + csstype "^3.0.2" + +"@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz#56cf35b89383eaf2bdcf602f5bbdac6dbb11e51b" + integrity sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.34.1" + "@typescript-eslint/type-utils" "8.34.1" + "@typescript-eslint/utils" "8.34.1" + "@typescript-eslint/visitor-keys" "8.34.1" + graphemer "^1.4.0" + ignore "^7.0.0" + natural-compare "^1.4.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.34.1.tgz#f102357ab3a02d5b8aa789655905662cc5093067" + integrity sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA== + dependencies: + "@typescript-eslint/scope-manager" "8.34.1" + "@typescript-eslint/types" "8.34.1" + "@typescript-eslint/typescript-estree" "8.34.1" + "@typescript-eslint/visitor-keys" "8.34.1" + debug "^4.3.4" + +"@typescript-eslint/project-service@8.34.1": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.34.1.tgz#20501f8b87202c45f5e70a5b24dcdcb8fe12d460" + integrity sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.34.1" + "@typescript-eslint/types" "^8.34.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.34.1": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz#727ea43441f4d23d5c73d34195427d85042e5117" + integrity sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA== + dependencies: + "@typescript-eslint/types" "8.34.1" + "@typescript-eslint/visitor-keys" "8.34.1" + +"@typescript-eslint/tsconfig-utils@8.34.1", "@typescript-eslint/tsconfig-utils@^8.34.1": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz#d6abb1b1e9f1f1c83ac92051c8fbf2dbc4dc9f5e" + integrity sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg== + +"@typescript-eslint/type-utils@8.34.1": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz#df860d8edefbfe142473ea4defb7408edb0c379e" + integrity sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g== + dependencies: + "@typescript-eslint/typescript-estree" "8.34.1" + "@typescript-eslint/utils" "8.34.1" + debug "^4.3.4" + ts-api-utils "^2.1.0" + +"@typescript-eslint/types@8.34.1", "@typescript-eslint/types@^8.34.1": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.34.1.tgz#565a46a251580dae674dac5aafa8eb14b8322a35" + integrity sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA== + +"@typescript-eslint/typescript-estree@8.34.1": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz#befdb042a6bc44fdad27429b2d3b679c80daad71" + integrity sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA== + dependencies: + "@typescript-eslint/project-service" "8.34.1" + "@typescript-eslint/tsconfig-utils" "8.34.1" + "@typescript-eslint/types" "8.34.1" + "@typescript-eslint/visitor-keys" "8.34.1" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/utils@8.34.1": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.34.1.tgz#f98c9b0c5cae407e34f5131cac0f3a74347a398e" + integrity sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ== + dependencies: + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.34.1" + "@typescript-eslint/types" "8.34.1" + "@typescript-eslint/typescript-estree" "8.34.1" + +"@typescript-eslint/visitor-keys@8.34.1": + version "8.34.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz#28a1987ea3542ccafb92aa792726a304b39531cf" + integrity sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw== + dependencies: + "@typescript-eslint/types" "8.34.1" + eslint-visitor-keys "^4.2.1" + +"@unrs/resolver-binding-android-arm-eabi@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.0.tgz#e91317973356eb845c9186db5f9ec43e8d0002eb" + integrity sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg== + +"@unrs/resolver-binding-android-arm64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.0.tgz#fbdd79b2a8e478e02e1c0751dfbc100017522161" + integrity sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA== + +"@unrs/resolver-binding-darwin-arm64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz#24bb42710227ae2f4fea191151f3acc6a75b50d6" + integrity sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A== + +"@unrs/resolver-binding-darwin-x64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.0.tgz#4a205940ec311ac8396c3f25043644b78cc98a20" + integrity sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw== + +"@unrs/resolver-binding-freebsd-x64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.0.tgz#ed82e000f7248011696ecc8894f574caa197b0be" + integrity sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.0.tgz#534a8b32118590f7fb9edd21c6576243a89a8aad" + integrity sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.0.tgz#b31718752e77cecbbcf7ba1e01dea97c1a5ee7e0" + integrity sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA== + +"@unrs/resolver-binding-linux-arm64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.0.tgz#0f11ba195020cfa869533fb74733d68162349d14" + integrity sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA== + +"@unrs/resolver-binding-linux-arm64-musl@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.0.tgz#8b6bc086cf9efaa22e8f2fef381786d6636b8e19" + integrity sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.0.tgz#5cd15899af31c2bbf90bfca5f798f64a16770e23" + integrity sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.0.tgz#4f2c75af52437eb10b48ea5b72750fb65fb174be" + integrity sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w== + +"@unrs/resolver-binding-linux-riscv64-musl@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.0.tgz#6a87e82e0dd39d34ff37ddba6accf73cdb396e86" + integrity sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw== + +"@unrs/resolver-binding-linux-s390x-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.0.tgz#6524cc3c01309022de86c4a7317fe7d9f9fb855c" + integrity sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA== + +"@unrs/resolver-binding-linux-x64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.0.tgz#85fb8a45dccf3823cd73ea4b61b2c3f2e8ab6653" + integrity sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA== + +"@unrs/resolver-binding-linux-x64-musl@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.0.tgz#235e539da5872df51c03e0e050a1c715e25044ca" + integrity sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg== + +"@unrs/resolver-binding-wasm32-wasi@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.0.tgz#1bc614ce2ba61330c16bffa1e50f41d95d25c0a6" + integrity sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.0.tgz#0d8704275a9f2634d81b35d8a00a2f4bd8dec7fa" + integrity sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ== + +"@unrs/resolver-binding-win32-ia32-msvc@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.0.tgz#46909cbeb9a38b3f31a64833fe03aa1aebb8da2b" + integrity sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A== + +"@unrs/resolver-binding-win32-x64-msvc@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.0.tgz#708b957d5d66543c45240b4c6b45ee63ed59b6b7" + integrity sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-includes@^3.1.6, array-includes@^3.1.8: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.findlastindex@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== + +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axe-core@^4.10.0: + version "4.10.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" + integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== + +axobject-query@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== + +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +busboy@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001579: + version "1.0.30001723" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz#c4f3174f02089720736e1887eab345e09bb10944" + integrity sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.5.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.2, csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + dependencies: + ms "^2.1.3" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +detect-libc@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" + integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.6" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.4" + safe-array-concat "^1.1.3" + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-next@15.3.3: + version "15.3.3" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-15.3.3.tgz#356ca4b8647a6024c332260addcd261d3b4b6c6d" + integrity sha512-QJLv/Ouk2vZnxL4b67njJwTLjTf7uZRltI0LL4GERYR4qMF5z08+gxkfODAeaK7TiC6o+cER91bDaEnwrTWV6Q== + dependencies: + "@next/eslint-plugin-next" "15.3.3" + "@rushstack/eslint-patch" "^1.10.3" + "@typescript-eslint/eslint-plugin" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.31.0" + eslint-plugin-jsx-a11y "^6.10.0" + eslint-plugin-react "^7.37.0" + eslint-plugin-react-hooks "^5.0.0" + +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.5.2: + version "3.10.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz#23dac32efa86a88e2b8232eb244ac499ad636db2" + integrity sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ== + dependencies: + "@nolyfill/is-core-module" "1.0.39" + debug "^4.4.0" + get-tsconfig "^4.10.0" + is-bun-module "^2.0.0" + stable-hash "^0.0.5" + tinyglobby "^0.2.13" + unrs-resolver "^1.6.2" + +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.31.0: + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" + semver "^6.3.1" + string.prototype.trimend "^1.0.8" + tsconfig-paths "^3.15.0" + +eslint-plugin-jsx-a11y@^6.10.0: + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== + dependencies: + aria-query "^5.3.2" + array-includes "^3.1.8" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "^4.10.0" + axobject-query "^4.1.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + hasown "^2.0.2" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.1" + +eslint-plugin-react-hooks@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3" + integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== + +eslint-plugin-react@^7.37.0: + version "7.37.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065" + integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" + doctrine "^2.1.0" + es-iterator-helpers "^1.2.1" + estraverse "^5.3.0" + hasown "^2.0.2" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.9" + object.fromentries "^2.0.8" + object.values "^1.2.1" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" + +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^9: + version "9.29.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.29.0.tgz#65e3db3b7e5a5b04a8af541741a0f3648d0a81a6" + integrity sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.20.1" + "@eslint/config-helpers" "^0.2.1" + "@eslint/core" "^0.14.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.29.0" + "@eslint/plugin-kit" "^0.3.1" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +fdir@^6.4.4: + version "6.4.6" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +get-tsconfig@^4.10.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" + integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== + dependencies: + resolve-pkg-maps "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hoist-non-react-statics@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +ignore@^7.0.0: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + +import-fresh@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-bun-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-2.0.0.tgz#4d7859a87c0fcac950c95e666730e745eae8bddd" + integrity sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ== + dependencies: + semver "^7.7.1" + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + +is-generator-function@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iterator.prototype@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== + dependencies: + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +language-subtag-registry@^0.3.20: + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== + +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== + dependencies: + language-subtag-registry "^0.3.20" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.6: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +napi-postinstall@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.2.4.tgz#419697d0288cb524623e422f919624f22a5e4028" + integrity sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next@15.3.3: + version "15.3.3" + resolved "https://registry.yarnpkg.com/next/-/next-15.3.3.tgz#90ee73600af106796989136827a7a40f61dadd1f" + integrity sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw== + dependencies: + "@next/env" "15.3.3" + "@swc/counter" "0.1.3" + "@swc/helpers" "0.5.15" + busboy "1.6.0" + caniuse-lite "^1.0.30001579" + postcss "8.4.31" + styled-jsx "5.1.6" + optionalDependencies: + "@next/swc-darwin-arm64" "15.3.3" + "@next/swc-darwin-x64" "15.3.3" + "@next/swc-linux-arm64-gnu" "15.3.3" + "@next/swc-linux-arm64-musl" "15.3.3" + "@next/swc-linux-x64-gnu" "15.3.3" + "@next/swc-linux-x64-musl" "15.3.3" + "@next/swc-win32-arm64-msvc" "15.3.3" + "@next/swc-win32-x64-msvc" "15.3.3" + sharp "^0.34.1" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.entries@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +postcss@8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prop-types@^15.6.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-dom@^19.0.0: + version "19.1.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.0.tgz#133558deca37fa1d682708df8904b25186793623" + integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g== + dependencies: + scheduler "^0.26.0" + +react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^19.1.0: + version "19.1.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.0.tgz#805bce321546b7e14c084989c77022351bbdd11b" + integrity sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg== + +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^19.0.0: + version "19.1.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75" + integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve@^1.19.0, resolve@^1.22.4: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +scheduler@^0.26.0: + version "0.26.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337" + integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.6.0, semver@^7.7.1, semver@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +sharp@^0.34.1: + version "0.34.2" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.34.2.tgz#648bd639854dbe48047b0b420213c186d036b32d" + integrity sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg== + dependencies: + color "^4.2.3" + detect-libc "^2.0.4" + semver "^7.7.2" + optionalDependencies: + "@img/sharp-darwin-arm64" "0.34.2" + "@img/sharp-darwin-x64" "0.34.2" + "@img/sharp-libvips-darwin-arm64" "1.1.0" + "@img/sharp-libvips-darwin-x64" "1.1.0" + "@img/sharp-libvips-linux-arm" "1.1.0" + "@img/sharp-libvips-linux-arm64" "1.1.0" + "@img/sharp-libvips-linux-ppc64" "1.1.0" + "@img/sharp-libvips-linux-s390x" "1.1.0" + "@img/sharp-libvips-linux-x64" "1.1.0" + "@img/sharp-libvips-linuxmusl-arm64" "1.1.0" + "@img/sharp-libvips-linuxmusl-x64" "1.1.0" + "@img/sharp-linux-arm" "0.34.2" + "@img/sharp-linux-arm64" "0.34.2" + "@img/sharp-linux-s390x" "0.34.2" + "@img/sharp-linux-x64" "0.34.2" + "@img/sharp-linuxmusl-arm64" "0.34.2" + "@img/sharp-linuxmusl-x64" "0.34.2" + "@img/sharp-wasm32" "0.34.2" + "@img/sharp-win32-arm64" "0.34.2" + "@img/sharp-win32-ia32" "0.34.2" + "@img/sharp-win32-x64" "0.34.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +source-map-js@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +stable-hash@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" + integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== + +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499" + integrity sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA== + dependencies: + client-only "0.0.1" + +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tinyglobby@^0.2.13: + version "0.2.14" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-api-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.4.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typescript@^5: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +unrs-resolver@^1.6.2: + version "1.9.0" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.9.0.tgz#22877e2e0f1ba3f848f75f7be5ecb81b634066dc" + integrity sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg== + dependencies: + napi-postinstall "^0.2.2" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.9.0" + "@unrs/resolver-binding-android-arm64" "1.9.0" + "@unrs/resolver-binding-darwin-arm64" "1.9.0" + "@unrs/resolver-binding-darwin-x64" "1.9.0" + "@unrs/resolver-binding-freebsd-x64" "1.9.0" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.9.0" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.9.0" + "@unrs/resolver-binding-linux-arm64-gnu" "1.9.0" + "@unrs/resolver-binding-linux-arm64-musl" "1.9.0" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.9.0" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.9.0" + "@unrs/resolver-binding-linux-riscv64-musl" "1.9.0" + "@unrs/resolver-binding-linux-s390x-gnu" "1.9.0" + "@unrs/resolver-binding-linux-x64-gnu" "1.9.0" + "@unrs/resolver-binding-linux-x64-musl" "1.9.0" + "@unrs/resolver-binding-wasm32-wasi" "1.9.0" + "@unrs/resolver-binding-win32-arm64-msvc" "1.9.0" + "@unrs/resolver-binding-win32-ia32-msvc" "1.9.0" + "@unrs/resolver-binding-win32-x64-msvc" "1.9.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From afebe0e04d5977e229c528aa695fbfe0bd82b737 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Tue, 17 Jun 2025 21:10:16 +0200 Subject: [PATCH 04/55] Added initial Sidebar --- .../app/components/sidebar/SideBarLink.tsx | 39 +++++++++++++++++ .../app/components/{ => sidebar}/Sidebar.tsx | 42 +++++++------------ payment-iq/app/page.tsx | 2 +- payment-iq/constants/SidebarLink.constants.ts | 33 +++++++++++++++ .../interfaces/SidebarLink.interfaces.ts | 7 ++++ payment-iq/package.json | 13 +++--- payment-iq/yarn.lock | 7 ++++ 7 files changed, 110 insertions(+), 33 deletions(-) create mode 100644 payment-iq/app/components/sidebar/SideBarLink.tsx rename payment-iq/app/components/{ => sidebar}/Sidebar.tsx (58%) create mode 100644 payment-iq/constants/SidebarLink.constants.ts create mode 100644 payment-iq/interfaces/SidebarLink.interfaces.ts diff --git a/payment-iq/app/components/sidebar/SideBarLink.tsx b/payment-iq/app/components/sidebar/SideBarLink.tsx new file mode 100644 index 0000000..9be46a7 --- /dev/null +++ b/payment-iq/app/components/sidebar/SideBarLink.tsx @@ -0,0 +1,39 @@ +'use client'; + +import Link from 'next/link'; +import { styled } from '@mui/system'; +import { ISidebarLink } from '@/interfaces/SidebarLink.interfaces'; + +const LinkContainer = styled('div')(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + padding: '12px 16px', +// borderRadius: theme.shape.borderRadius, +// color: theme.palette.text.primary, + textDecoration: 'none', + transition: 'background 0.2s ease-in-out', + + '&:hover': { + backgroundColor: 'yellow', + // backgroundColor: theme.palette.action.hover, + cursor: 'pointer', + }, +})); + +const LinkText = styled('span')({ + marginLeft: '12px', + fontWeight: 500, +}); + +export default function SidebarLink({ title, path, icon: Icon }: ISidebarLink) { + return ( + + + + {Icon && } + {title} + + + + ); +} diff --git a/payment-iq/app/components/Sidebar.tsx b/payment-iq/app/components/sidebar/Sidebar.tsx similarity index 58% rename from payment-iq/app/components/Sidebar.tsx rename to payment-iq/app/components/sidebar/Sidebar.tsx index 4cdc34b..5c1ae28 100644 --- a/payment-iq/app/components/Sidebar.tsx +++ b/payment-iq/app/components/sidebar/Sidebar.tsx @@ -1,13 +1,16 @@ -// components/SidebarLayout.tsx +'use client' + import React from 'react'; import { styled } from '@mui/system'; import { Box, Typography, Button } from '@mui/material'; +import { SIDEBAR_LINKS } from '@/constants/SidebarLink.constants'; +import SidebarLink from './SideBarLink'; // Sidebar Container (styled using MUI System) export const Sidebar = styled('div')(({ theme }) => ({ width: '240px', - backgroundColor: theme.palette.primary.main, - color: theme.palette.common.white, + backgroundColor: 'black', + color: 'white', padding: theme.spacing(2), height: '100vh', display: 'flex', @@ -19,7 +22,7 @@ export const Sidebar = styled('div')(({ theme }) => ({ export const MainContent = styled('div')(({ theme }) => ({ marginLeft: '240px', padding: theme.spacing(3), - backgroundColor: theme.palette.background.paper, + backgroundColor: 'green', minHeight: '100vh', })); @@ -28,7 +31,7 @@ export const SidebarItem = styled('div')(({ theme }) => ({ padding: theme.spacing(1.5), cursor: 'pointer', '&:hover': { - backgroundColor: theme.palette.primary.dark, + backgroundColor: 'brown', }, })); @@ -51,28 +54,15 @@ const SidebarLayout = () => { Dashboard - - Home - - - Settings - - - Profile - - + {SIDEBAR_LINKS.map((link) => ( + + ))} - - - - Welcome to the Dashboard! - - - This is your main content area. - - ); } diff --git a/payment-iq/app/page.tsx b/payment-iq/app/page.tsx index c251ee2..b29a582 100644 --- a/payment-iq/app/page.tsx +++ b/payment-iq/app/page.tsx @@ -1,5 +1,5 @@ import Image from "next/image"; -import SidebarLayout from '@/app/components/Sidebar'; +import SidebarLayout from '@/app/components/sidebar/Sidebar'; export default function Home() { return ; diff --git a/payment-iq/constants/SidebarLink.constants.ts b/payment-iq/constants/SidebarLink.constants.ts new file mode 100644 index 0000000..a637279 --- /dev/null +++ b/payment-iq/constants/SidebarLink.constants.ts @@ -0,0 +1,33 @@ +import HomeIcon from '@mui/icons-material/Home'; +import AccountBalanceWalletIcon from '@mui/icons-material/AccountBalanceWallet'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import SearchIcon from '@mui/icons-material/Search'; +import VerifiedUserIcon from '@mui/icons-material/VerifiedUser'; +import PeopleIcon from '@mui/icons-material/People'; +import BarChartIcon from '@mui/icons-material/BarChart'; +import GavelIcon from '@mui/icons-material/Gavel'; +import HubIcon from '@mui/icons-material/Hub'; +import AdminPanelSettingsIcon from '@mui/icons-material/AdminPanelSettings'; +import InsightsIcon from '@mui/icons-material/Insights'; +import DescriptionIcon from '@mui/icons-material/Description'; +import SupportAgentIcon from '@mui/icons-material/SupportAgent'; +import WarningAmberIcon from '@mui/icons-material/WarningAmber'; +import { ISidebarLink } from '@/interfaces/SidebarLink.interfaces'; + + +export const SIDEBAR_LINKS: ISidebarLink[] = [ + { title: 'Home', path: '/', icon: HomeIcon }, + { title: 'Transaction', path: '/transaction', icon: AccountBalanceWalletIcon }, + { title: 'Approve', path: '/approve', icon: CheckCircleIcon }, + { title: 'Investigate', path: '/investigate', icon: SearchIcon }, + { title: 'KYC', path: '/kyc', icon: VerifiedUserIcon }, + { title: 'User Accounts', path: '/user-accounts', icon: PeopleIcon }, + { title: 'Analytics', path: '/analytics', icon: BarChartIcon }, + { title: 'Rules', path: '/rules', icon: GavelIcon }, + { title: 'Rules Hub', path: '/rules-hub', icon: HubIcon }, + { title: 'Admin', path: '/admin', icon: AdminPanelSettingsIcon }, + { title: 'Account IQ', path: '/account-iq', icon: InsightsIcon }, + { title: 'Documentation', path: '/documentation', icon: DescriptionIcon }, + { title: 'Support', path: '/support', icon: SupportAgentIcon }, + { title: 'System Status', path: '/system-status', icon: WarningAmberIcon }, +]; diff --git a/payment-iq/interfaces/SidebarLink.interfaces.ts b/payment-iq/interfaces/SidebarLink.interfaces.ts new file mode 100644 index 0000000..498ff08 --- /dev/null +++ b/payment-iq/interfaces/SidebarLink.interfaces.ts @@ -0,0 +1,7 @@ +import { ElementType } from "react"; + +export interface ISidebarLink { + title: string; + path: string; + icon?: ElementType; +} \ No newline at end of file diff --git a/payment-iq/package.json b/payment-iq/package.json index d4c4495..08877cf 100644 --- a/payment-iq/package.json +++ b/payment-iq/package.json @@ -9,20 +9,21 @@ "lint": "next lint" }, "dependencies": { - "react": "^19.0.0", - "react-dom": "^19.0.0", - "next": "15.3.3", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@mui/material": "^7.1.1" + "@mui/icons-material": "^7.1.1", + "@mui/material": "^7.1.1", + "next": "15.3.3", + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "devDependencies": { - "typescript": "^5", + "@eslint/eslintrc": "^3", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "15.3.3", - "@eslint/eslintrc": "^3" + "typescript": "^5" } } diff --git a/payment-iq/yarn.lock b/payment-iq/yarn.lock index 687a028..93734ad 100644 --- a/payment-iq/yarn.lock +++ b/payment-iq/yarn.lock @@ -472,6 +472,13 @@ resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-7.1.1.tgz#43532ccf57be19055eb20e7802508520293cf286" integrity sha512-yBckQs4aQ8mqukLnPC6ivIRv6guhaXi8snVl00VtyojBbm+l6VbVhyTSZ68Abcx7Ah8B+GZhrB7BOli+e+9LkQ== +"@mui/icons-material@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-7.1.1.tgz#0e0e9640579da5e4096f0449438337c448bc5a5c" + integrity sha512-X37+Yc8QpEnl0sYmz+WcLFy2dWgNRzbswDzLPXG7QU1XDVlP5TPp1HXjdmCupOWLL/I9m1fyhcyZl8/HPpp/Cg== + dependencies: + "@babel/runtime" "^7.27.1" + "@mui/material@^7.1.1": version "7.1.1" resolved "https://registry.yarnpkg.com/@mui/material/-/material-7.1.1.tgz#5f75b25936925be14cb34abe0489cda82a6f8413" From 63808c279e3cc7638fc3eb5ae91fa6370875b6ed Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Tue, 17 Jun 2025 21:28:35 +0200 Subject: [PATCH 05/55] Added Some Styling --- .../app/components/sidebar/SideBarLink.tsx | 5 +- payment-iq/app/components/sidebar/Sidebar.tsx | 4 +- payment-iq/app/favicon.ico | Bin 25931 -> 0 bytes payment-iq/app/page.module.css | 168 ------------------ 4 files changed, 5 insertions(+), 172 deletions(-) delete mode 100644 payment-iq/app/favicon.ico delete mode 100644 payment-iq/app/page.module.css diff --git a/payment-iq/app/components/sidebar/SideBarLink.tsx b/payment-iq/app/components/sidebar/SideBarLink.tsx index 9be46a7..15bb660 100644 --- a/payment-iq/app/components/sidebar/SideBarLink.tsx +++ b/payment-iq/app/components/sidebar/SideBarLink.tsx @@ -14,12 +14,13 @@ const LinkContainer = styled('div')(({ theme }) => ({ transition: 'background 0.2s ease-in-out', '&:hover': { - backgroundColor: 'yellow', + color: 'rgb(255, 255, 255)', + background: 'rgba(255, 255, 255, 0.08)', // backgroundColor: theme.palette.action.hover, cursor: 'pointer', }, })); - +// background-color: rgb(69, 190, 171); const LinkText = styled('span')({ marginLeft: '12px', fontWeight: 500, diff --git a/payment-iq/app/components/sidebar/Sidebar.tsx b/payment-iq/app/components/sidebar/Sidebar.tsx index 5c1ae28..3ae8cdf 100644 --- a/payment-iq/app/components/sidebar/Sidebar.tsx +++ b/payment-iq/app/components/sidebar/Sidebar.tsx @@ -9,7 +9,7 @@ import SidebarLink from './SideBarLink'; // Sidebar Container (styled using MUI System) export const Sidebar = styled('div')(({ theme }) => ({ width: '240px', - backgroundColor: 'black', + backgroundColor: 'rgb(69, 190, 171)', color: 'white', padding: theme.spacing(2), height: '100vh', @@ -53,7 +53,7 @@ const SidebarLayout = () => { return ( - Dashboard + PaymentIQ {SIDEBAR_LINKS.map((link) => ( %i@8hT6>)&Gu{h#Oeyszu?xtw#Zb1mO{pgX9699l+Qppw7jXaYf~-84xW z)w4x8?=youko|}Vr~(D$UXIbiXABHh`p1?nn8Po~fxRJv}|0e(BPs|G`(TT%kKVJAdg5*Z|x0leQq0 zkdUBvb#>9F()jo|T~kx@OM8$9wzs~t2l;K=woNssA3l6|sx2r3+kdfVW@e^8e*E}v zA1y5{bRi+3Z`uD3{F7LgFJDdvm;nJilkzDku>BwXH(8ItVCXk*-lSJnR?-2UN%hJ){&rlvg`CDTj z)Bzo!3v7Ou#83zEDEFcKt(f1E0~=rqeEbTnMvWR#{+9pg%7G8y>u1OVRUSoox-ovF z2Ydma(;=YuBY(eI|04{hXzZD6_f(v~H;C~y5=DhAC{MMS>2fm~1H_t2$56pc$NH8( z5bH|<)71dV-_oCHIrzrT`2s-5w_+2CM0$95I6X8p^r!gHp+j_gd;9O<1~CEQQGS8) zS9Qh3#p&JM-G8rHekNmKVewU;pJRcTAog68KYo^dRo}(M>36U4Us zfgYWSiHZL3;lpWT=zNAW>Dh#mB!_@Lg%$ms8N-;aPqMn+C2HqZgz&9~Eu z4|Kp<`$q)Uw1R?y(~S>ePdonHxpV1#eSP1B;Ogo+-Pk}6#0GsZZ5!||ev2MGdh}_m z{DeR7?0-1^zVs&`AV6Vt;r3`I`OI_wgs*w=eO%_#7Kepl{B@xiyCANc(l zzIyd4y|c6PXWq9-|KM8(zIk8LPk(>a)zyFWjhT!$HJ$qX1vo@d25W<fvZQ2zUz5WRc(UnFMKHwe1| zWmlB1qdbiA(C0jmnV<}GfbKtmcu^2*P^O?MBLZKt|As~ge8&AAO~2K@zbXelK|4T<{|y4`raF{=72kC2Kn(L4YyenWgrPiv z@^mr$t{#X5VuIMeL!7Ab6_kG$&#&5p*Z{+?5U|TZ`B!7llpVmp@skYz&n^8QfPJzL z0G6K_OJM9x+Wu2gfN45phANGt{7=C>i34CV{Xqlx(fWpeAoj^N0Biu`w+MVcCUyU* zDZuzO0>4Z6fbu^T_arWW5n!E45vX8N=bxTVeFoep_G#VmNlQzAI_KTIc{6>c+04vr zx@W}zE5JNSU>!THJ{J=cqjz+4{L4A{Ob9$ZJ*S1?Ggg3klFp!+Y1@K+pK1DqI|_gq z5ZDXVpge8-cs!o|;K73#YXZ3AShj50wBvuq3NTOZ`M&qtjj#GOFfgExjg8Gn8>Vq5 z`85n+9|!iLCZF5$HJ$Iu($dm?8~-ofu}tEc+-pyke=3!im#6pk_Wo8IA|fJwD&~~F zc16osQ)EBo58U7XDuMexaPRjU@h8tXe%S{fA0NH3vGJFhuyyO!Uyl2^&EOpX{9As0 zWj+P>{@}jxH)8|r;2HdupP!vie{sJ28b&bo!8`D^x}TE$%zXNb^X1p@0PJ86`dZyj z%ce7*{^oo+6%&~I!8hQy-vQ7E)0t0ybH4l%KltWOo~8cO`T=157JqL(oq_rC%ea&4 z2NcTJe-HgFjNg-gZ$6!Y`SMHrlj}Etf7?r!zQTPPSv}{so2e>Fjs1{gzk~LGeesX%r(Lh6rbhSo_n)@@G-FTQy93;l#E)hgP@d_SGvyCp0~o(Y;Ee8{ zdVUDbHm5`2taPUOY^MAGOw*>=s7=Gst=D+p+2yON!0%Hk` zz5mAhyT4lS*T3LS^WSxUy86q&GnoHxzQ6vm8)VS}_zuqG?+3td68_x;etQAdu@sc6 zQJ&5|4(I?~3d-QOAODHpZ=hlSg(lBZ!JZWCtHHSj`0Wh93-Uk)_S%zsJ~aD>{`A0~ z9{AG(e|q3g5B%wYKRxiL2Y$8(4w6bzchKuloQW#e&S3n+P- z8!ds-%f;TJ1>)v)##>gd{PdS2Oc3VaR`fr=`O8QIO(6(N!A?pr5C#6fc~Ge@N%Vvu zaoAX2&(a6eWy_q&UwOhU)|P3J0Qc%OdhzW=F4D|pt0E4osw;%<%Dn58hAWD^XnZD= z>9~H(3bmLtxpF?a7su6J7M*x1By7YSUbxGi)Ot0P77`}P3{)&5Un{KD?`-e?r21!4vTTnN(4Y6Lin?UkSM z`MXCTC1@4A4~mvz%Rh2&EwY))LeoT=*`tMoqcEXI>TZU9WTP#l?uFv+@Dn~b(>xh2 z;>B?;Tz2SR&KVb>vGiBSB`@U7VIWFSo=LDSb9F{GF^DbmWAfpms8Sx9OX4CnBJca3 zlj9(x!dIjN?OG1X4l*imJNvRCk}F%!?SOfiOq5y^mZW)jFL@a|r-@d#f7 z2gmU8L3IZq0ynIws=}~m^#@&C%J6QFo~Mo4V`>v7MI-_!EBMMtb%_M&kvAaN)@ZVw z+`toz&WG#HkWDjnZE!6nk{e-oFdL^$YnbOCN}JC&{$#$O27@|Tn-skXr)2ml2~O!5 zX+gYoxhoc7qoU?C^3~&!U?kRFtnSEecWuH0B0OvLodgUAi}8p1 zrO6RSXHH}DMc$&|?D004DiOVMHV8kXCP@7NKB zgaZq^^O<7PoKEp72kby@W0Z!Y*Ay{&vfg#C&gG@YVR9g?FEocMUi1gSN$+V+ayF45{a zuDZDTN}mS|;BO%gEf}pjBfN2-gIrU#G5~cucA;dokXW89%>AyXJJI z9X4UlIWA|ZYHgbI z5?oFk@A=Ik7lrEQPDH!H+b`7_Y~aDb_qa=B2^Y&Ow41cU=4WDd40dp5(QS-WMN-=Y z9g;6_-JdNU;|6cPwf$ak*aJIcwL@1n$#l~zi{c{EW?T;DaW*E8DYq?Umtz{nJ&w-M zEMyTDrC&9K$d|kZe2#ws6)L=7K+{ zQw{XnV6UC$6-rW0emqm8wJoeZK)wJIcV?dST}Z;G0Arq{dVDu0&4kd%N!3F1*;*pW zR&qUiFzK=@44#QGw7k1`3t_d8&*kBV->O##t|tonFc2YWrL7_eqg+=+k;!F-`^b8> z#KWCE8%u4k@EprxqiV$VmmtiWxDLgnGu$Vs<8rppV5EajBXL4nyyZM$SWVm!wnCj-B!Wjqj5-5dNXukI2$$|Bu3Lrw}z65Lc=1G z^-#WuQOj$hwNGG?*CM_TO8Bg-1+qc>J7k5c51U8g?ZU5n?HYor;~JIjoWH-G>AoUP ztrWWLbRNqIjW#RT*WqZgPJXU7C)VaW5}MiijYbABmzoru6EmQ*N8cVK7a3|aOB#O& zBl8JY2WKfmj;h#Q!pN%9o@VNLv{OUL?rixHwOZuvX7{IJ{(EdPpuVFoQqIOa7giLVkBOKL@^smUA!tZ1CKRK}#SSM)iQHk)*R~?M!qkCruaS!#oIL1c z?J;U~&FfH#*98^G?i}pA{ z9Jg36t4=%6mhY(quYq*vSxptes9qy|7xSlH?G=S@>u>Ebe;|LVhs~@+06N<4CViBk zUiY$thvX;>Tby6z9Y1edAMQaiH zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V zG#-?gKlr}Eeqifb{|So?HM&g91P8|av8hQoCmQXkd?7wIJwb z_^v8bbg`SAn{I*4bH$u(RZ6*xUhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq36!pV6Az&m{O8$wGFD? zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH( zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x z);_{lY<;);XzT`dBFpRmGrr}z5u1=pC^S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a( z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F= zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk($?Qw({erA$^bC;q33hv!d!>%wRhj# zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?- zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvhCL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ zy|Qn`hxx(58c70$E;L(X0uZZ72M1!6oeg)(cdKO ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC> z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl z8H5(Q?l#wzazujH!8o>1xtn8#_w+397*_cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111aH}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+ z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{ z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^ zb&uBN!Ja3UzYHK-CTyA5=L zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*IcmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$ z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G; zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8 zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU&68iRikRrHRW|ZxzRR^`eIGt zIeiDgVS>IeExKVRWW8-=A=yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_ zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v#ix45EVrcEhr>!NMhprl$InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~&^=4?PL&nd8)`OfG#n zwAMN$1&>K++c{^|7<4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C zI@}scZlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7 zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S zb+9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2`1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc- zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I zgg{b=Iz}WkhCGj1M=hu4#Aw173YxIVbISaoc z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S(O(a0e7oY=E( zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef LrJugUA?W`A8`#=m diff --git a/payment-iq/app/page.module.css b/payment-iq/app/page.module.css deleted file mode 100644 index a11c8f3..0000000 --- a/payment-iq/app/page.module.css +++ /dev/null @@ -1,168 +0,0 @@ -.page { - --gray-rgb: 0, 0, 0; - --gray-alpha-200: rgba(var(--gray-rgb), 0.08); - --gray-alpha-100: rgba(var(--gray-rgb), 0.05); - - --button-primary-hover: #383838; - --button-secondary-hover: #f2f2f2; - - display: grid; - grid-template-rows: 20px 1fr 20px; - align-items: center; - justify-items: center; - min-height: 100svh; - padding: 80px; - gap: 64px; - font-family: var(--font-geist-sans); -} - -@media (prefers-color-scheme: dark) { - .page { - --gray-rgb: 255, 255, 255; - --gray-alpha-200: rgba(var(--gray-rgb), 0.145); - --gray-alpha-100: rgba(var(--gray-rgb), 0.06); - - --button-primary-hover: #ccc; - --button-secondary-hover: #1a1a1a; - } -} - -.main { - display: flex; - flex-direction: column; - gap: 32px; - grid-row-start: 2; -} - -.main ol { - font-family: var(--font-geist-mono); - padding-left: 0; - margin: 0; - font-size: 14px; - line-height: 24px; - letter-spacing: -0.01em; - list-style-position: inside; -} - -.main li:not(:last-of-type) { - margin-bottom: 8px; -} - -.main code { - font-family: inherit; - background: var(--gray-alpha-100); - padding: 2px 4px; - border-radius: 4px; - font-weight: 600; -} - -.ctas { - display: flex; - gap: 16px; -} - -.ctas a { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - border: 1px solid transparent; - transition: - background 0.2s, - color 0.2s, - border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; -} - -a.primary { - background: var(--foreground); - color: var(--background); - gap: 8px; -} - -a.secondary { - border-color: var(--gray-alpha-200); - min-width: 158px; -} - -.footer { - grid-row-start: 3; - display: flex; - gap: 24px; -} - -.footer a { - display: flex; - align-items: center; - gap: 8px; -} - -.footer img { - flex-shrink: 0; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - a.primary:hover { - background: var(--button-primary-hover); - border-color: transparent; - } - - a.secondary:hover { - background: var(--button-secondary-hover); - border-color: transparent; - } - - .footer a:hover { - text-decoration: underline; - text-underline-offset: 4px; - } -} - -@media (max-width: 600px) { - .page { - padding: 32px; - padding-bottom: 80px; - } - - .main { - align-items: center; - } - - .main ol { - text-align: center; - } - - .ctas { - flex-direction: column; - } - - .ctas a { - font-size: 14px; - height: 40px; - padding: 0 16px; - } - - a.secondary { - min-width: auto; - } - - .footer { - flex-wrap: wrap; - align-items: center; - justify-content: center; - } -} - -@media (prefers-color-scheme: dark) { - .logo { - filter: invert(); - } -} From d2e7db54c25d60e4fc72c1fbbbcdf243309f3c21 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Tue, 17 Jun 2025 21:38:36 +0200 Subject: [PATCH 06/55] More styling --- payment-iq/app/components/sidebar/SideBarLink.tsx | 4 ++-- payment-iq/app/components/sidebar/Sidebar.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/payment-iq/app/components/sidebar/SideBarLink.tsx b/payment-iq/app/components/sidebar/SideBarLink.tsx index 15bb660..5d08673 100644 --- a/payment-iq/app/components/sidebar/SideBarLink.tsx +++ b/payment-iq/app/components/sidebar/SideBarLink.tsx @@ -7,8 +7,8 @@ import { ISidebarLink } from '@/interfaces/SidebarLink.interfaces'; const LinkContainer = styled('div')(({ theme }) => ({ display: 'flex', alignItems: 'center', - padding: '12px 16px', -// borderRadius: theme.shape.borderRadius, + padding: '12px 1px', +// borderRadius: theme.shape.borderRadius,s // color: theme.palette.text.primary, textDecoration: 'none', transition: 'background 0.2s ease-in-out', diff --git a/payment-iq/app/components/sidebar/Sidebar.tsx b/payment-iq/app/components/sidebar/Sidebar.tsx index 3ae8cdf..d74be7d 100644 --- a/payment-iq/app/components/sidebar/Sidebar.tsx +++ b/payment-iq/app/components/sidebar/Sidebar.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { styled } from '@mui/system'; -import { Box, Typography, Button } from '@mui/material'; +import DashboardIcon from '@mui/icons-material/Dashboard'; import { SIDEBAR_LINKS } from '@/constants/SidebarLink.constants'; import SidebarLink from './SideBarLink'; @@ -53,7 +53,7 @@ const SidebarLayout = () => { return ( - PaymentIQ + PaymentIQ {SIDEBAR_LINKS.map((link) => ( Date: Wed, 18 Jun 2025 18:24:37 +0200 Subject: [PATCH 07/55] s --- .../app/components/sidebar/SideBarLink.tsx | 13 ++--- payment-iq/app/components/sidebar/Sidebar.tsx | 47 ++++++++++--------- payment-iq/app/dashboard/approve/page.tsx | 13 +++++ payment-iq/app/dashboard/investigate/page.tsx | 13 +++++ payment-iq/app/dashboard/layout.tsx | 10 ++++ payment-iq/app/dashboard/page.tsx | 17 +++++++ .../app/dashboard/transactions/page.tsx | 13 +++++ payment-iq/app/layout.tsx | 29 +++--------- payment-iq/app/page.tsx | 1 - payment-iq/config/ThemeRegistry.tsx | 14 ++++++ payment-iq/config/theme.ts | 36 ++++---------- payment-iq/constants/SidebarLink.constants.ts | 6 +-- 12 files changed, 132 insertions(+), 80 deletions(-) create mode 100644 payment-iq/app/dashboard/approve/page.tsx create mode 100644 payment-iq/app/dashboard/investigate/page.tsx create mode 100644 payment-iq/app/dashboard/layout.tsx create mode 100644 payment-iq/app/dashboard/page.tsx create mode 100644 payment-iq/app/dashboard/transactions/page.tsx create mode 100644 payment-iq/config/ThemeRegistry.tsx diff --git a/payment-iq/app/components/sidebar/SideBarLink.tsx b/payment-iq/app/components/sidebar/SideBarLink.tsx index 5d08673..17601cf 100644 --- a/payment-iq/app/components/sidebar/SideBarLink.tsx +++ b/payment-iq/app/components/sidebar/SideBarLink.tsx @@ -8,23 +8,24 @@ const LinkContainer = styled('div')(({ theme }) => ({ display: 'flex', alignItems: 'center', padding: '12px 1px', -// borderRadius: theme.shape.borderRadius,s -// color: theme.palette.text.primary, + borderRadius: '4px', + color: theme.palette.text.tertiary, textDecoration: 'none', transition: 'background 0.2s ease-in-out', '&:hover': { color: 'rgb(255, 255, 255)', background: 'rgba(255, 255, 255, 0.08)', - // backgroundColor: theme.palette.action.hover, + backgroundColor: theme.palette.action.hover, cursor: 'pointer', }, })); -// background-color: rgb(69, 190, 171); -const LinkText = styled('span')({ + +const LinkText = styled('span')(({ theme }) => ({ + color: theme.palette.text.tertiary, marginLeft: '12px', fontWeight: 500, -}); +})); export default function SidebarLink({ title, path, icon: Icon }: ISidebarLink) { return ( diff --git a/payment-iq/app/components/sidebar/Sidebar.tsx b/payment-iq/app/components/sidebar/Sidebar.tsx index d74be7d..cff7d8e 100644 --- a/payment-iq/app/components/sidebar/Sidebar.tsx +++ b/payment-iq/app/components/sidebar/Sidebar.tsx @@ -1,4 +1,4 @@ -'use client' +'use client'; import React from 'react'; import { styled } from '@mui/system'; @@ -9,30 +9,32 @@ import SidebarLink from './SideBarLink'; // Sidebar Container (styled using MUI System) export const Sidebar = styled('div')(({ theme }) => ({ width: '240px', - backgroundColor: 'rgb(69, 190, 171)', + backgroundColor: theme.palette.background.primary, color: 'white', padding: theme.spacing(2), height: '100vh', display: 'flex', flexDirection: 'column', justifyContent: 'space-between', + transition: 'width 0.3s ease', // Transition for resizing })); // Main Content Area export const MainContent = styled('div')(({ theme }) => ({ - marginLeft: '240px', - padding: theme.spacing(3), - backgroundColor: 'green', + flexGrow: 1, + padding: theme.spacing(4), + backgroundColor: theme.palette.background.default, minHeight: '100vh', + overflowY: 'auto', })); -// Sidebar Navigation Items -export const SidebarItem = styled('div')(({ theme }) => ({ - padding: theme.spacing(1.5), - cursor: 'pointer', - '&:hover': { - backgroundColor: 'brown', - }, +// Sidebar Header +export const SidebarHeader = styled('div')(({ theme }) => ({ + marginBottom: theme.spacing(2), + fontSize: '20px', + fontWeight: 600, + display: 'flex', + alignItems: 'center', })); // Page Wrapper that holds Sidebar and Content @@ -42,18 +44,18 @@ export const LayoutWrapper = styled('div')({ height: '100vh', }); -// Sidebar Header -export const SidebarHeader = styled('div')(({ theme }) => ({ - marginBottom: theme.spacing(2), - fontSize: '20px', - fontWeight: 600, -})); +interface SidebarLayoutProps { + children: React.ReactNode; // Add children to accept passed content +} -const SidebarLayout = () => { - return ( +const SidebarLayout: React.FC = ({ children }) => { + return ( - PaymentIQ + + PaymentIQ + + {SIDEBAR_LINKS.map((link) => ( { /> ))} + {children} {/* Render children here */} ); -} +}; export default SidebarLayout; diff --git a/payment-iq/app/dashboard/approve/page.tsx b/payment-iq/app/dashboard/approve/page.tsx new file mode 100644 index 0000000..c496001 --- /dev/null +++ b/payment-iq/app/dashboard/approve/page.tsx @@ -0,0 +1,13 @@ +// This ensures this component is rendered only on the client side +'use client'; + +import React from 'react'; + +export default function ApprovePage() { + return ( +
+ {/* This page will now be rendered on the client-side */} +

Approve

+
+ ); +} \ No newline at end of file diff --git a/payment-iq/app/dashboard/investigate/page.tsx b/payment-iq/app/dashboard/investigate/page.tsx new file mode 100644 index 0000000..28fbef1 --- /dev/null +++ b/payment-iq/app/dashboard/investigate/page.tsx @@ -0,0 +1,13 @@ +// This ensures this component is rendered only on the client side +'use client'; + +import React from 'react'; + +export default function InvestigatePage() { + return ( +
+ {/* This page will now be rendered on the client-side */} +

Investigate

+
+ ); +} \ No newline at end of file diff --git a/payment-iq/app/dashboard/layout.tsx b/payment-iq/app/dashboard/layout.tsx new file mode 100644 index 0000000..e9aefe5 --- /dev/null +++ b/payment-iq/app/dashboard/layout.tsx @@ -0,0 +1,10 @@ +'use client'; + +import React from 'react'; +import SidebarLayout from '../components/sidebar/Sidebar'; + +const DashboardLayout: React.FC<{ children: React.ReactNode }> = ({ children }) => { + return {children}; // Ensure that the sidebar wraps all dashboard pages +}; + +export default DashboardLayout; diff --git a/payment-iq/app/dashboard/page.tsx b/payment-iq/app/dashboard/page.tsx new file mode 100644 index 0000000..4520b57 --- /dev/null +++ b/payment-iq/app/dashboard/page.tsx @@ -0,0 +1,17 @@ +'use client'; + +import React from 'react'; +import { Typography, Paper } from '@mui/material'; + +const DashboardPage = () => { + return ( +
+ + Dashboard Overview + + {/* Add your dashboard content here */} +
+ ); +}; + +export default DashboardPage; diff --git a/payment-iq/app/dashboard/transactions/page.tsx b/payment-iq/app/dashboard/transactions/page.tsx new file mode 100644 index 0000000..800d90d --- /dev/null +++ b/payment-iq/app/dashboard/transactions/page.tsx @@ -0,0 +1,13 @@ +// This ensures this component is rendered only on the client side +'use client'; + +import React from 'react'; + +export default function TransactionPage() { + return ( +
+ {/* This page will now be rendered on the client-side */} +

Transactions

+
+ ); +} \ No newline at end of file diff --git a/payment-iq/app/layout.tsx b/payment-iq/app/layout.tsx index 42fc323..e7709d0 100644 --- a/payment-iq/app/layout.tsx +++ b/payment-iq/app/layout.tsx @@ -1,31 +1,16 @@ -import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; - -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], -}); +import ThemeRegistry from '@/config/ThemeRegistry'; +import type { Metadata } from 'next'; export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: 'Your App', + description: 'Generated by Next.js', }; -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { +export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - - {children} + + {children} ); diff --git a/payment-iq/app/page.tsx b/payment-iq/app/page.tsx index b29a582..3915b26 100644 --- a/payment-iq/app/page.tsx +++ b/payment-iq/app/page.tsx @@ -1,4 +1,3 @@ -import Image from "next/image"; import SidebarLayout from '@/app/components/sidebar/Sidebar'; export default function Home() { diff --git a/payment-iq/config/ThemeRegistry.tsx b/payment-iq/config/ThemeRegistry.tsx new file mode 100644 index 0000000..19ddc63 --- /dev/null +++ b/payment-iq/config/ThemeRegistry.tsx @@ -0,0 +1,14 @@ + +'use client'; + +import { ThemeProvider, CssBaseline } from '@mui/material'; +import theme from './theme'; + +export default function ThemeRegistry({ children }: { children: React.ReactNode }) { + return ( + + + {children} + + ); +} diff --git a/payment-iq/config/theme.ts b/payment-iq/config/theme.ts index f8f151f..c1b46e5 100644 --- a/payment-iq/config/theme.ts +++ b/payment-iq/config/theme.ts @@ -1,41 +1,27 @@ import { createTheme } from '@mui/material/styles'; -// Define your color palette -const lightPalette = { +const palette = { primary: { - main: '#1976d2', // Blue color + main: '#1976d2', }, secondary: { - main: '#d32f2f', // Red color + main: '#d32f2f', }, background: { default: '#fafafa', paper: '#ffffff', + primary: 'rgb(69, 190, 171)', }, text: { primary: '#000000', secondary: '#555555', + tertiary: '#fff', + }, + action: { + hover: 'rgba(0, 0, 0, 0.08)', }, }; -const darkPalette = { - primary: { - main: '#90caf9', // Light blue - }, - secondary: { - main: '#f48fb1', // Light pink - }, - background: { - default: '#121212', - paper: '#1d1d1d', - }, - text: { - primary: '#ffffff', - secondary: '#bbbbbb', - }, -}; - -// Typography customization const typography = { fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif', h1: { @@ -56,11 +42,9 @@ const typography = { const theme = createTheme({ palette: { mode: 'light', // Change this to 'dark' for dark mode - ...(process.env.NODE_ENV === 'development' // Switch for dev mode - ? lightPalette - : darkPalette), + ...palette }, - typography, + // typography, breakpoints: { values: { xs: 0, diff --git a/payment-iq/constants/SidebarLink.constants.ts b/payment-iq/constants/SidebarLink.constants.ts index a637279..2a0e9aa 100644 --- a/payment-iq/constants/SidebarLink.constants.ts +++ b/payment-iq/constants/SidebarLink.constants.ts @@ -16,9 +16,9 @@ import { ISidebarLink } from '@/interfaces/SidebarLink.interfaces'; export const SIDEBAR_LINKS: ISidebarLink[] = [ - { title: 'Home', path: '/', icon: HomeIcon }, - { title: 'Transaction', path: '/transaction', icon: AccountBalanceWalletIcon }, - { title: 'Approve', path: '/approve', icon: CheckCircleIcon }, + { title: 'Home', path: '/dashboard', icon: HomeIcon }, + { title: 'Transaction', path: '/dashboard/transactions', icon: AccountBalanceWalletIcon }, + { title: 'Approve', path: '/dashboard/approve', icon: CheckCircleIcon }, { title: 'Investigate', path: '/investigate', icon: SearchIcon }, { title: 'KYC', path: '/kyc', icon: VerifiedUserIcon }, { title: 'User Accounts', path: '/user-accounts', icon: PeopleIcon }, From 1f7b2dc188c68e5c42c440ab221f8173a05b0b7f Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Wed, 18 Jun 2025 20:56:14 +0300 Subject: [PATCH 08/55] Transactions page --- .../pages/transactions/Transactions.tsx | 110 + .../pages/transactions/constants.ts | 80 + .../components/pages/transactions/mockData.ts | 2134 +++++++++++++++++ .../app/dashboard/transactions/page.tsx | 6 +- payment-iq/package.json | 6 +- payment-iq/yarn.lock | 101 +- 6 files changed, 2432 insertions(+), 5 deletions(-) create mode 100644 payment-iq/app/components/pages/transactions/Transactions.tsx create mode 100644 payment-iq/app/components/pages/transactions/constants.ts create mode 100644 payment-iq/app/components/pages/transactions/mockData.ts diff --git a/payment-iq/app/components/pages/transactions/Transactions.tsx b/payment-iq/app/components/pages/transactions/Transactions.tsx new file mode 100644 index 0000000..43ad416 --- /dev/null +++ b/payment-iq/app/components/pages/transactions/Transactions.tsx @@ -0,0 +1,110 @@ +'use client'; +import { useState } from 'react'; +import { + Button, Dialog, DialogTitle, DialogContent, DialogActions, + FormControl, Select, MenuItem, FormControlLabel, Checkbox, + Stack, Paper, styled, + TextField +} from '@mui/material'; +import FileUploadIcon from '@mui/icons-material/FileUpload'; +import * as XLSX from 'xlsx'; +import { saveAs } from 'file-saver'; +import { DataGrid } from '@mui/x-data-grid'; +import { columns } from './constants'; +import { rows } from './mockData'; + +const paginationModel = { page: 0, pageSize: 50 }; + +export default function TransactionTable() { + const [open, setOpen] = useState(false); + const [fileType, setFileType] = useState<'csv' | 'xls' | 'xlsx'>('csv'); + const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); + + const handleExport = () => { + const exportRows = onlyCurrentTable ? rows.slice(0, 5) : rows; + const exportData = [ + columns.map(col => col.headerName), + // @ts-expect-error - Dynamic field access from DataGrid columns + ...exportRows.map(row => columns.map(col => row[col.field] ?? '')), + ]; + + const worksheet = XLSX.utils.aoa_to_sheet(exportData); + const workbook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(workbook, worksheet, 'Transactions'); + + if (fileType === 'csv') { + const csv = XLSX.utils.sheet_to_csv(worksheet); + const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); + saveAs(blob, 'transactions.csv'); + } else { + XLSX.writeFile(workbook, `transactions.${fileType}`, { bookType: fileType }); + } + + setOpen(false); + }; + + return ( + + + console.log(`setSearchQuery(${e.target.value})`)} + sx={{ width: 300 }} + /> + + + + + + {/* Export Dialog */} + setOpen(false)}> + Export Transactions + + + + + setOnlyCurrentTable(e.target.checked)} + /> + } + label="Only export the results in the current table" + sx={{ mt: 2 }} + /> + + + + + + + + ); +} + +const StyledPaper = styled(Paper)(() => ({ + height: '90vh', +})); diff --git a/payment-iq/app/components/pages/transactions/constants.ts b/payment-iq/app/components/pages/transactions/constants.ts new file mode 100644 index 0000000..3a64c16 --- /dev/null +++ b/payment-iq/app/components/pages/transactions/constants.ts @@ -0,0 +1,80 @@ +import { GridColDef } from "@mui/x-data-grid"; + +export const columns: GridColDef[] = [ + { field: 'merchandId', headerName: 'Merchant ID', width: 130 }, + { field: 'transactionID', headerName: 'Transaction ID', width: 130 }, + { field: 'user', headerName: 'User', width: 75 }, + { field: 'created', headerName: 'Created', type: 'number', width: 130 }, + { field: 'state', headerName: 'State', type: 'number', width: 130 }, + { field: 'statusDescription', headerName: 'Status Description', type: 'number', width: 130 }, + { field: 'pspStatusCode', headerName: 'PSP Status Code', type: 'number', width: 130 }, + { field: 'pspStatusMessage', headerName: 'PSP Status Message', type: 'number', width: 90 }, + { field: 'psp', headerName: 'PSP', type: 'number', width: 90 }, + { field: 'pspAccount', headerName: 'PSP Account', type: 'number', width: 90 }, + { field: 'initPSP', headerName: 'Init PSP', type: 'number', width: 90 }, + { field: 'initPSPAccout', headerName: 'Init PSP Account', type: 'number', width: 90 }, + { field: 'pspService', headerName: 'PSP Service', type: 'number', width: 90 }, + { field: 'transactionType', headerName: 'Transaction Type', type: 'number', width: 90 }, + { field: 'paymentMethod', headerName: 'Payment Method', type: 'number', width: 90 }, + { field: 'rules', headerName: 'Rules', type: 'number', width: 90 }, + { field: 'amount', headerName: 'Amount', type: 'number', width: 90 }, + { field: 'fee', headerName: 'Fee', type: 'number', width: 90 }, + { field: 'transactionAmount', headerName: 'Transaction Amount', type: 'number', width: 90 }, + { field: 'baseAmount', headerName: 'Base Amount', type: 'number', width: 90 }, + { field: 'baseFee', headerName: 'Base Fee', type: 'number', width: 90 }, + { field: 'baseTransaction', headerName: 'Base Transaction', type: 'number', width: 90 }, + { field: 'pspFee', headerName: 'PSP Fee', type: 'number', width: 90 }, + { field: 'basePspFee', headerName: 'Base PSP Fee', type: 'number', width: 90 }, + { field: 'authAmount', headerName: 'Auth Amount', type: 'number', width: 90 }, + { field: 'baseAuthAmount', headerName: 'Base Auth Amount', type: 'number', width: 90 }, + { field: 'userBalance', headerName: 'User Balance', type: 'number', width: 90 }, + { field: 'updated', headerName: 'Updated', type: 'number', width: 90 }, + { field: 'userIp', headerName: 'User IP', type: 'number', width: 90 }, + { field: 'channel', headerName: 'Channel', type: 'number', width: 90 }, + { field: 'depositType', headerName: 'Deposit Type', type: 'number', width: 90 }, + { field: 'userEmal', headerName: 'User Emal', type: 'number', width: 90 }, + { field: 'userCategory', headerName: 'User Category', type: 'number', width: 90 }, + { field: 'userCountry', headerName: 'User Country', type: 'number', width: 90 }, + { field: 'userAccount', headerName: 'User Account', type: 'number', width: 90 }, + { field: 'bankName', headerName: 'Bank Name', type: 'number', width: 90 }, + { field: 'pspUserReference', headerName: 'PSP User Reference', type: 'number', width: 90 }, + { field: 'pspFraudScore', headerName: 'PSP Fraud Score', type: 'number', width: 90 }, + { field: 'fraudStatus', headerName: 'FraudStatus', type: 'number', width: 90 }, + { field: 'blocked', headerName: 'Blocked', type: 'number', width: 90 }, + { field: 'abuse', headerName: 'Abuse', type: 'number', width: 90 }, + { field: 'kycStatus', headerName: 'KYC Status', type: 'number', width: 90 }, + { field: 'kycPSPName', headerName: 'KYC PSP Name', type: 'number', width: 90 }, + { field: 'kycPSPStatus', headerName: 'KYC PSP Status', type: 'number', width: 90 }, + { field: 'kycIdStatus', headerName: 'KYC ID Status', type: 'number', width: 90 }, + { field: 'kycAddressStatus', headerName: 'KYC Address Status', type: 'number', width: 90 }, + { field: 'kycAgeStatus', headerName: 'KYC Age Status', type: 'number', width: 90 }, + { field: 'kycPEPAndSanction', headerName: 'KYC PEP And Sanction', type: 'number', width: 90 }, + { field: 'pspReferenceId', headerName: 'PSPReferenceID', type: 'number', width: 90 }, + { field: 'siteReferenceId', headerName: 'Site Reference ID', type: 'number', width: 90 }, + { field: 'info', headerName: 'Info', type: 'number', width: 90 }, + { field: 'accountHolder', headerName: 'Account Holder', type: 'number', width: 90 }, + { field: 'firstName', headerName: 'First Name', type: 'number', width: 90 }, + { field: 'lastName', headerName: 'Last Name', type: 'number', width: 90 }, + { field: 'street', headerName: 'Street', type: 'number', width: 90 }, + { field: 'city', headerName: 'City', type: 'number', width: 90 }, + { field: 'zip', headerName: 'ZIP', type: 'number', width: 90 }, + { field: 'dob', headerName: 'DOB', type: 'number', width: 90 }, + { field: 'mobile', headerName: 'Mobile', type: 'number', width: 90 }, + { field: 'lastUpdatedBy', headerName: 'Last Updated By', type: 'number', width: 90 }, + { field: 'ipCity', headerName: 'IP City', type: 'number', width: 90 }, + { field: 'ipRegion', headerName: 'IP Region', type: 'number', width: 90 }, + { field: 'ipCountry', headerName: 'IP Country', type: 'number', width: 90 }, + { field: 'cardIssuerCountry', headerName: 'Card Issuer Country', type: 'number', width: 90 }, + { field: 'cardBand', headerName: 'Card Band', type: 'number', width: 90 }, + { field: 'cardCategory', headerName: 'Card Category', type: 'number', width: 90 }, + { field: 'cardIssuerName', headerName: 'Card Issuer Name', type: 'number', width: 90 }, + { field: 'inn', headerName: 'INN', type: 'number', width: 90 }, + { field: 'cardType', headerName: 'Card Type', type: 'number', width: 90 }, + { field: 'firstAttempt', headerName: 'First Attempt', type: 'number', width: 90 }, + { field: 'firstSuccessful', headerName: 'First Successful', type: 'number', width: 90 }, + { field: 'firstTransaction', headerName: 'First Transaction', type: 'number', width: 90 }, + { field: 'firstPspAcountAttempt', headerName: 'First PSP Acount Attempt', type: 'number', width: 90 }, + { field: 'firstPspAcountSuccessful', headerName: 'First PSP Acount Successful', type: 'number', width: 90 }, + { field: 'originTransactionId', headerName: 'Origin Transaction ID', type: 'number', width: 90 }, + { field: 'transactionReferenceId', headerName: 'Transaction Reference ID', type: 'number', width: 90 }, +]; \ No newline at end of file diff --git a/payment-iq/app/components/pages/transactions/mockData.ts b/payment-iq/app/components/pages/transactions/mockData.ts new file mode 100644 index 0000000..2643f10 --- /dev/null +++ b/payment-iq/app/components/pages/transactions/mockData.ts @@ -0,0 +1,2134 @@ +export const rows = [ +{ + id:1, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:2, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:3, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:4, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:5, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:6, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:7, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:8, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:9, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:10, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:11, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:12, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:13, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:14, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:15, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:16, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:17, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:18, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:19, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:20, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:21, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:22, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:23, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:24, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:25, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:26, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}, +{ + id:27, + merchandId: 100987998, + transactionID: 1049131973, + user: 17, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + pspStatusMessage: "", + psp: "BestPay", + pspAccount: "LUQAPAY_MANUALPAPARA_FTD", + initPSP: "BestPay", + initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", + pspService: "MWALLET_PAPARA", + transactionType: "BankDeposit", + paymentMethod: "Deposit", + rules: ["100987998_PM_01_01", "100987998_RO_02_01", "100987998_LI_06_01", "100987998_FO_01_01"], + amount: 50.00, + fee: 0.00, + transactionAmount: 1, + baseAmount: 43.43, + baseFee: 0.00, + baseTransaction: 43.43, + pspFee: "", // value was missing + basePspFee: "", // value was missing + authAmount: 0.00, + baseAuthAmount: 0.00, + userBalance: 1, + updated: "2025-06-18 10:10:31", + userIp: "213.217.206.91", + channel: "Windows", + depositType: "Standard", + userEmal: "dhkheni1@yopmail.com", + userCategory: "", + userCountry: "TUR", + userAccount: "", + bankName: "", + pspUserReference: "N/A", + pspFraudScore: "", + fraudStatus: "", + blocked: "", + abuse: "", + kycStatus: "", + kycPSPName: "", + kycPSPStatus: "", + kycIdStatus: "", + kycAddressStatus: "", + kycAgeStatus: "", + kycPEPAndSanction: "", + pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", + info: "Drashti 1", + accountHolder: "Prabhudarshan", + firstName: "Surat", + lastName: 395010, + street: "2007-01-03", + city: 15125898569, + zip: "", + dob: "Msida", + mobile: "L-Imsida", + lastUpdatedBy: "MLT", + ipCity: "", + ipRegion: "", + ipCountry: "", + cardIssuerCountry: "FALSE", + cardBand: "FALSE", + cardCategory: "FALSE", + cardIssuerName: "FALSE", + inn: "FALSE", + cardType: "FALSE", + firstAttempt: 1049131973, + firstSuccessful: "", // no value provided + firstTransaction: "", // no value provided + firstPspAcountAttempt: "", // no value provided + firstPspAcountSuccessful: "", // no value provided + originTransactionId: "", // no value provided + transactionReferenceId: "" // no value provided +}]; \ No newline at end of file diff --git a/payment-iq/app/dashboard/transactions/page.tsx b/payment-iq/app/dashboard/transactions/page.tsx index 800d90d..711a3dc 100644 --- a/payment-iq/app/dashboard/transactions/page.tsx +++ b/payment-iq/app/dashboard/transactions/page.tsx @@ -1,13 +1,13 @@ // This ensures this component is rendered only on the client side 'use client'; -import React from 'react'; +import TransactionTable from '@/app/components/pages/transactions/Transactions'; export default function TransactionPage() { return ( -
+
{/* This page will now be rendered on the client-side */} -

Transactions

+
); } \ No newline at end of file diff --git a/payment-iq/package.json b/payment-iq/package.json index 08877cf..f550ca2 100644 --- a/payment-iq/package.json +++ b/payment-iq/package.json @@ -13,12 +13,16 @@ "@emotion/styled": "^11.14.0", "@mui/icons-material": "^7.1.1", "@mui/material": "^7.1.1", + "@mui/x-data-grid": "^8.5.2", + "file-saver": "^2.0.5", "next": "15.3.3", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "xlsx": "^0.18.5" }, "devDependencies": { "@eslint/eslintrc": "^3", + "@types/file-saver": "^2.0.7", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", diff --git a/payment-iq/yarn.lock b/payment-iq/yarn.lock index 93734ad..fba1828 100644 --- a/payment-iq/yarn.lock +++ b/payment-iq/yarn.lock @@ -47,7 +47,7 @@ dependencies: "@babel/types" "^7.27.3" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.27.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.27.1", "@babel/runtime@^7.27.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.27.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.6.tgz#ec4070a04d76bae8ddbb10770ba55714a417b7c6" integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q== @@ -551,6 +551,27 @@ prop-types "^15.8.1" react-is "^19.1.0" +"@mui/x-data-grid@^8.5.2": + version "8.5.2" + resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-8.5.2.tgz#1788587711d2e49fabe3b8f6ccd5e38ef762f4b1" + integrity sha512-4KzawLZqRKp3KcGKsTDVz7zkEjACllQD5Zb8ds1QKlA6C3/oIoSU7PsemFLj+RL3rT5aORsLMBl97/egQ5tUhA== + dependencies: + "@babel/runtime" "^7.27.6" + "@mui/utils" "^7.1.1" + "@mui/x-internals" "8.5.2" + clsx "^2.1.1" + prop-types "^15.8.1" + use-sync-external-store "^1.5.0" + +"@mui/x-internals@8.5.2": + version "8.5.2" + resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-8.5.2.tgz#fba1bbbff2866ed118761c8fc4fcc7909d167f53" + integrity sha512-5YhB2AekK7G8d0YrAjg3WNf0uy3V73JD98WNxJhbIlCraQgl8QOQzr2zNO7MAf/X7mZQtjpjuAsiG3+gI2NVyg== + dependencies: + "@babel/runtime" "^7.27.6" + "@mui/utils" "^7.1.1" + reselect "^5.1.1" + "@napi-rs/wasm-runtime@^0.2.11": version "0.2.11" resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz#192c1610e1625048089ab4e35bc0649ce478500e" @@ -677,6 +698,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== +"@types/file-saver@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/file-saver/-/file-saver-2.0.7.tgz#8dbb2f24bdc7486c54aa854eb414940bbd056f7d" + integrity sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A== + "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -925,6 +951,11 @@ acorn@^8.15.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +adler-32@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.3.1.tgz#1dbf0b36dda0012189a32b3679061932df1821e2" + integrity sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A== + ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1149,6 +1180,14 @@ caniuse-lite@^1.0.30001579: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz#c4f3174f02089720736e1887eab345e09bb10944" integrity sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw== +cfb@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.2.tgz#94e687628c700e5155436dac05f74e08df23bc44" + integrity sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA== + dependencies: + adler-32 "~1.3.0" + crc-32 "~1.2.0" + chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -1167,6 +1206,11 @@ clsx@^2.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== +codepage@~1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.15.0.tgz#2e00519024b39424ec66eeb3ec07227e692618ab" + integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA== + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1216,6 +1260,11 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +crc-32@~1.2.0, crc-32@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -1738,6 +1787,11 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" +file-saver@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" + integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -1778,6 +1832,11 @@ for-each@^0.3.3, for-each@^0.3.5: dependencies: is-callable "^1.2.7" +frac@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" + integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -2619,6 +2678,11 @@ regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: gopd "^1.2.0" set-function-name "^2.0.2" +reselect@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" + integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2833,6 +2897,13 @@ source-map@^0.5.7: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +ssf@~0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/ssf/-/ssf-0.11.2.tgz#0b99698b237548d088fc43cdf2b70c1a7512c06c" + integrity sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g== + dependencies: + frac "~1.1.2" + stable-hash@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" @@ -3094,6 +3165,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +use-sync-external-store@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" + integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== + which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" @@ -3154,11 +3230,34 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wmf@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" + integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== + word-wrap@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +word@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961" + integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA== + +xlsx@^0.18.5: + version "0.18.5" + resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.18.5.tgz#16711b9113c848076b8a177022799ad356eba7d0" + integrity sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ== + dependencies: + adler-32 "~1.3.0" + cfb "~1.2.1" + codepage "~1.15.0" + crc-32 "~1.2.1" + ssf "~0.11.2" + wmf "~1.0.1" + word "~0.3.0" + yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" From 48764c779c1a0a25f79d76d2c4fc1c174ac2d7fa Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Fri, 20 Jun 2025 08:16:39 +0200 Subject: [PATCH 09/55] Change page routing structure and added header --- .../components/dashboard/header/Header.tsx | 46 ++++++++++++++++ .../dashboard/layout/layoutWrapper.ts | 8 +++ .../dashboard/layout/mainContent.ts | 8 +++ .../dashboard/sidebar/SideBarLink.tsx | 41 ++++++++++++++ .../components/dashboard/sidebar/Sidebar.tsx | 55 +++++++++++++++++++ payment-iq/app/dashboard/kyc/page.tsx | 15 +++++ payment-iq/app/dashboard/layout.tsx | 17 +++++- payment-iq/app/dashboard/page.tsx | 2 +- payment-iq/app/page.tsx | 5 -- 9 files changed, 189 insertions(+), 8 deletions(-) create mode 100644 payment-iq/app/components/dashboard/header/Header.tsx create mode 100644 payment-iq/app/components/dashboard/layout/layoutWrapper.ts create mode 100644 payment-iq/app/components/dashboard/layout/mainContent.ts create mode 100644 payment-iq/app/components/dashboard/sidebar/SideBarLink.tsx create mode 100644 payment-iq/app/components/dashboard/sidebar/Sidebar.tsx create mode 100644 payment-iq/app/dashboard/kyc/page.tsx delete mode 100644 payment-iq/app/page.tsx diff --git a/payment-iq/app/components/dashboard/header/Header.tsx b/payment-iq/app/components/dashboard/header/Header.tsx new file mode 100644 index 0000000..12ccf6b --- /dev/null +++ b/payment-iq/app/components/dashboard/header/Header.tsx @@ -0,0 +1,46 @@ +import React, { useState } from 'react'; +import { AppBar, Toolbar, IconButton, Menu, MenuItem, Button } from '@mui/material'; +import MenuIcon from '@mui/icons-material/Menu'; + +const Header = () => { + const [anchorEl, setAnchorEl] = useState(null); + + // Handle menu open + const handleMenuClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + // Handle menu close + const handleMenuClose = () => { + setAnchorEl(null); + }; + + return ( + + + {/* Burger Menu */} + + + + + {/* Dropdown Button */} + + + {/* Dropdown Menu */} + + Option 1 + Option 2 + Option 3 + + + + ); +}; + +export default Header; diff --git a/payment-iq/app/components/dashboard/layout/layoutWrapper.ts b/payment-iq/app/components/dashboard/layout/layoutWrapper.ts new file mode 100644 index 0000000..7da683a --- /dev/null +++ b/payment-iq/app/components/dashboard/layout/layoutWrapper.ts @@ -0,0 +1,8 @@ +import { styled } from '@mui/system'; + +export const LayoutWrapper = styled('div')({ + display: 'flex', + width: '100%', + height: '100vh', + overflow: 'hidden', +}); \ No newline at end of file diff --git a/payment-iq/app/components/dashboard/layout/mainContent.ts b/payment-iq/app/components/dashboard/layout/mainContent.ts new file mode 100644 index 0000000..39b1395 --- /dev/null +++ b/payment-iq/app/components/dashboard/layout/mainContent.ts @@ -0,0 +1,8 @@ +import { styled } from '@mui/system'; + +export const MainContent = styled('div')(({ theme }) => ({ + marginLeft: '240px', + padding: theme.spacing(3), + minHeight: '100vh', + width: 'calc(100% - 240px)', +})); \ No newline at end of file diff --git a/payment-iq/app/components/dashboard/sidebar/SideBarLink.tsx b/payment-iq/app/components/dashboard/sidebar/SideBarLink.tsx new file mode 100644 index 0000000..17601cf --- /dev/null +++ b/payment-iq/app/components/dashboard/sidebar/SideBarLink.tsx @@ -0,0 +1,41 @@ +'use client'; + +import Link from 'next/link'; +import { styled } from '@mui/system'; +import { ISidebarLink } from '@/interfaces/SidebarLink.interfaces'; + +const LinkContainer = styled('div')(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + padding: '12px 1px', + borderRadius: '4px', + color: theme.palette.text.tertiary, + textDecoration: 'none', + transition: 'background 0.2s ease-in-out', + + '&:hover': { + color: 'rgb(255, 255, 255)', + background: 'rgba(255, 255, 255, 0.08)', + backgroundColor: theme.palette.action.hover, + cursor: 'pointer', + }, +})); + +const LinkText = styled('span')(({ theme }) => ({ + color: theme.palette.text.tertiary, + marginLeft: '12px', + fontWeight: 500, +})); + +export default function SidebarLink({ title, path, icon: Icon }: ISidebarLink) { + return ( + + + + {Icon && } + {title} + + + + ); +} diff --git a/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx b/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx new file mode 100644 index 0000000..527f341 --- /dev/null +++ b/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx @@ -0,0 +1,55 @@ +'use client'; + +import React from 'react'; +import DashboardIcon from '@mui/icons-material/Dashboard'; +import { styled } from '@mui/system'; +import { SIDEBAR_LINKS } from '@/constants/SidebarLink.constants'; +import SidebarLink from './SideBarLink'; + +const SidebarContainer = styled('aside')(({ theme }) => ({ + position: 'fixed', + top: 0, + left: 0, + width: 240, + height: '100vh', + backgroundColor: theme.palette.background.primary, + color: theme.palette.text.primary, + display: 'flex', + flexDirection: 'column', + padding: theme.spacing(2), + zIndex: 1100, + borderRight: `1px solid ${theme.palette.divider}`, +})); + +const SidebarHeader = styled('div')(({ theme }) => ({ + fontSize: '20px', + fontWeight: 600, + marginBottom: theme.spacing(3), + display: 'flex', + alignItems: 'center', + color: theme.palette.text.primary, +})); + +const IconSpacing = styled(DashboardIcon)(({ theme }) => ({ + marginLeft: theme.spacing(1), +})); + +const Sidebar = () => { + return ( + + + PaymentIQ + + {SIDEBAR_LINKS.map((link) => ( + + ))} + + ); +}; + +export default Sidebar; diff --git a/payment-iq/app/dashboard/kyc/page.tsx b/payment-iq/app/dashboard/kyc/page.tsx new file mode 100644 index 0000000..367259b --- /dev/null +++ b/payment-iq/app/dashboard/kyc/page.tsx @@ -0,0 +1,15 @@ +// This ensures this component is rendered only on the client side +// 'use client'; + +import Typography from '@mui/material/Typography'; +import React from 'react'; + +export default function KycPage() { + return ( +
+ + KYC Overview + +
+ ); +} \ No newline at end of file diff --git a/payment-iq/app/dashboard/layout.tsx b/payment-iq/app/dashboard/layout.tsx index e9aefe5..77a0a24 100644 --- a/payment-iq/app/dashboard/layout.tsx +++ b/payment-iq/app/dashboard/layout.tsx @@ -1,10 +1,23 @@ 'use client'; import React from 'react'; -import SidebarLayout from '../components/sidebar/Sidebar'; +import { MainContent } from '../components/dashboard/layout/mainContent'; +import Header from '../components/dashboard/header/Header'; +import { LayoutWrapper } from '../components/dashboard/layout/layoutWrapper'; +import Sidebar from '@/app/components/dashboard/sidebar/Sidebar'; const DashboardLayout: React.FC<{ children: React.ReactNode }> = ({ children }) => { - return {children}; // Ensure that the sidebar wraps all dashboard pages + return ( + + +
+ +
+ {children} + +
+
+ ); }; export default DashboardLayout; diff --git a/payment-iq/app/dashboard/page.tsx b/payment-iq/app/dashboard/page.tsx index 4520b57..31b5ea4 100644 --- a/payment-iq/app/dashboard/page.tsx +++ b/payment-iq/app/dashboard/page.tsx @@ -1,7 +1,7 @@ 'use client'; import React from 'react'; -import { Typography, Paper } from '@mui/material'; +import { Typography } from '@mui/material'; const DashboardPage = () => { return ( diff --git a/payment-iq/app/page.tsx b/payment-iq/app/page.tsx deleted file mode 100644 index 3915b26..0000000 --- a/payment-iq/app/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import SidebarLayout from '@/app/components/sidebar/Sidebar'; - -export default function Home() { - return ; -} From 8633f8f4b4c17d19fbea4ae1f707591ff8257745 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Fri, 20 Jun 2025 17:05:26 +0300 Subject: [PATCH 10/55] add Transactions Overview --- .../app/components/PieCharts/PieCharts.tsx | 69 ++++++ .../TransactionsOverViewTable.tsx | 205 +++++++++++++++++ .../TransactionsOverview.tsx | 47 ++++ .../components/dashboard/sidebar/Sidebar.tsx | 10 +- .../components/pages/homepage/homepage.tsx | 7 + .../{Sidebar.tsx => SidebarLayout.tsx} | 0 payment-iq/app/dashboard/layout.tsx | 10 +- payment-iq/app/dashboard/page.tsx | 13 +- .../app/dashboard/transactions/page.tsx | 2 +- payment-iq/package.json | 1 + payment-iq/yarn.lock | 209 +++++++++++++++++- 11 files changed, 553 insertions(+), 20 deletions(-) create mode 100644 payment-iq/app/components/PieCharts/PieCharts.tsx create mode 100644 payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx create mode 100644 payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx create mode 100644 payment-iq/app/components/pages/homepage/homepage.tsx rename payment-iq/app/components/sidebar/{Sidebar.tsx => SidebarLayout.tsx} (100%) diff --git a/payment-iq/app/components/PieCharts/PieCharts.tsx b/payment-iq/app/components/PieCharts/PieCharts.tsx new file mode 100644 index 0000000..4b59f89 --- /dev/null +++ b/payment-iq/app/components/PieCharts/PieCharts.tsx @@ -0,0 +1,69 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { Box } from "@mui/material"; +import { PieChart, Pie, Cell, ResponsiveContainer } from "recharts"; + +const data = [ + { name: "Group A", value: 100 }, + { name: "Group B", value: 200 }, + { name: "Group C", value: 400 }, + { name: "Group D", value: 300 } +]; + +const COLORS = ["#4caf50", "#ff9800", "#f44336", "#9e9e9e"]; + +const RADIAN = Math.PI / 180; +const renderCustomizedLabel = ({ + cx, + cy, + midAngle, + innerRadius, + outerRadius, + percent, +// index +}: any) => { + const radius = innerRadius + (outerRadius - innerRadius) * 0.5; + const x = cx + radius * Math.cos(-midAngle * RADIAN); + const y = cy + radius * Math.sin(-midAngle * RADIAN); + + return ( + cx ? "start" : "end"} + dominantBaseline="central" + > + {`${(percent * 100).toFixed(0)}%`} + + ); +}; +export const PieCharts = () => { + return ( + + + + + {data.map((entry, index) => ( + + ))} + + + + + ); +} + diff --git a/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx b/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx new file mode 100644 index 0000000..379a972 --- /dev/null +++ b/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx @@ -0,0 +1,205 @@ +// import React from 'react'; +// import { +// Table, +// TableBody, +// TableCell, +// TableContainer, +// TableHead, +// TableRow, +// Paper, +// Typography, +// Button, +// Box +// } from '@mui/material'; +// import { data1 } from './constants'; + +// export const TransactionsOverview = () => { +// const data = [ +// { state: 'Successful', count: 0, percentage: '0%', color: '#4caf50' }, // green +// { state: 'Waiting', count: 0, percentage: '0%', color: '#ff9800' }, // orange +// { state: 'Failed', count: 0, percentage: '0%', color: '#f44336' }, // red +// { state: 'Cancelled', count: 0, percentage: '0%', color: '#9e9e9e' }, // grey +// ]; + +// return ( +// +// +// +// +// State +// Count +// Percentage +// Action +// +// +// +// {data1.map((row) => ( +// +// +// +// +// {row.state} +// +// +// {row.count} +// {row.percentage} +// +// +// +// +// ))} +// +//
+//
+// ); +// }; +// import React from 'react'; +// import { +// Table, +// TableBody, +// TableCell, +// TableContainer, +// TableHead, +// TableRow, +// Paper, +// Box, +// Button +// } from '@mui/material'; +// import { data1 } from './constants'; + + +// export const TransactionsOverview = () => { +// return ( +// +// +// +// +// State +// Count +// Percentage +// Action +// +// +// +// {data1.map((row) => ( +// +// +// +// +// {row.state} +// +// +// {row.count} +// {row.percentage} +// +// +// +// +// ))} +// +//
+//
+// ); +// }; + + + + +import React from 'react'; +import { + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Paper, + Box, + Button +} from '@mui/material'; + +const data1 = [ + { state: 'Success', count: 120, percentage: '60%', color: 'green' }, + { state: 'Pending', count: 50, percentage: '25%', color: 'orange' }, + { state: 'Failed', count: 20, percentage: '10%', color: 'red' }, + { state: 'Other', count: 10, percentage: '5%', color: 'gray' } +]; + +export const TransactionsOverviewTable = () => { + return ( + + + + + State + Count + Percentage + Action + + + + {data1.map((row) => ( + + + + + {row.state} + + + {row.count} + {row.percentage} + + + + + ))} + +
+
+ ); +}; + diff --git a/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx b/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx new file mode 100644 index 0000000..7b4b77e --- /dev/null +++ b/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx @@ -0,0 +1,47 @@ +import { useRouter } from 'next/navigation'; +import { Box, Button, Paper, Typography } from "@mui/material" +import { PieCharts } from "../PieCharts/PieCharts" + +import { TransactionsOverviewTable } from "./TransactionsOverViewTable"; + +export const TransactionsOverview = () => { + const router = useRouter(); + return ( + + + + + + {/* Title and All Transactions Button */} + + + Transactions Overview (Last 24h) + + + + + {/* Chart and Table */} + + + + + + ) +} \ No newline at end of file diff --git a/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx b/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx index 527f341..8914eb1 100644 --- a/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx +++ b/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx @@ -6,7 +6,7 @@ import { styled } from '@mui/system'; import { SIDEBAR_LINKS } from '@/constants/SidebarLink.constants'; import SidebarLink from './SideBarLink'; -const SidebarContainer = styled('aside')(({ theme }) => ({ +const SideBarContainer = styled('aside')(({ theme }) => ({ position: 'fixed', top: 0, left: 0, @@ -34,9 +34,9 @@ const IconSpacing = styled(DashboardIcon)(({ theme }) => ({ marginLeft: theme.spacing(1), })); -const Sidebar = () => { +const SideBar = () => { return ( - + PaymentIQ @@ -48,8 +48,8 @@ const Sidebar = () => { icon={link.icon} /> ))} - + ); }; -export default Sidebar; +export default SideBar; diff --git a/payment-iq/app/components/pages/homepage/homepage.tsx b/payment-iq/app/components/pages/homepage/homepage.tsx new file mode 100644 index 0000000..2d2cda4 --- /dev/null +++ b/payment-iq/app/components/pages/homepage/homepage.tsx @@ -0,0 +1,7 @@ +import { TransactionsOverview } from "../../TransactionsOverview/TransactionsOverview" + +export const HomePage = () => { + return ( + + ) +} \ No newline at end of file diff --git a/payment-iq/app/components/sidebar/Sidebar.tsx b/payment-iq/app/components/sidebar/SidebarLayout.tsx similarity index 100% rename from payment-iq/app/components/sidebar/Sidebar.tsx rename to payment-iq/app/components/sidebar/SidebarLayout.tsx diff --git a/payment-iq/app/dashboard/layout.tsx b/payment-iq/app/dashboard/layout.tsx index 77a0a24..b3b6348 100644 --- a/payment-iq/app/dashboard/layout.tsx +++ b/payment-iq/app/dashboard/layout.tsx @@ -1,15 +1,15 @@ 'use client'; import React from 'react'; -import { MainContent } from '../components/dashboard/layout/mainContent'; -import Header from '../components/dashboard/header/Header'; -import { LayoutWrapper } from '../components/dashboard/layout/layoutWrapper'; -import Sidebar from '@/app/components/dashboard/sidebar/Sidebar'; +import { MainContent } from '../components/Dashboard/Layout/mainContent'; +import Header from '../components/Dashboard/Header/Header'; +import { LayoutWrapper } from '../components/Dashboard/Layout/layoutWrapper'; +import SideBar from '../components/Dashboard/SideBar/SideBar'; const DashboardLayout: React.FC<{ children: React.ReactNode }> = ({ children }) => { return ( - +
diff --git a/payment-iq/app/dashboard/page.tsx b/payment-iq/app/dashboard/page.tsx index 31b5ea4..69588e4 100644 --- a/payment-iq/app/dashboard/page.tsx +++ b/payment-iq/app/dashboard/page.tsx @@ -1,16 +1,13 @@ 'use client'; -import React from 'react'; -import { Typography } from '@mui/material'; +import { HomePage } from "../components/Pages/HomePage/HomePage"; + const DashboardPage = () => { return ( -
- - Dashboard Overview - - {/* Add your dashboard content here */} -
+
+ +
); }; diff --git a/payment-iq/app/dashboard/transactions/page.tsx b/payment-iq/app/dashboard/transactions/page.tsx index 711a3dc..796f0c0 100644 --- a/payment-iq/app/dashboard/transactions/page.tsx +++ b/payment-iq/app/dashboard/transactions/page.tsx @@ -1,7 +1,7 @@ // This ensures this component is rendered only on the client side 'use client'; -import TransactionTable from '@/app/components/pages/transactions/Transactions'; +import TransactionTable from '@/app/components/Pages/Transactions/Transactions'; export default function TransactionPage() { return ( diff --git a/payment-iq/package.json b/payment-iq/package.json index f550ca2..e819d09 100644 --- a/payment-iq/package.json +++ b/payment-iq/package.json @@ -18,6 +18,7 @@ "next": "15.3.3", "react": "^19.0.0", "react-dom": "^19.0.0", + "recharts": "^2.15.3", "xlsx": "^0.18.5" }, "devDependencies": { diff --git a/payment-iq/yarn.lock b/payment-iq/yarn.lock index fba1828..1d30529 100644 --- a/payment-iq/yarn.lock +++ b/payment-iq/yarn.lock @@ -693,6 +693,57 @@ dependencies: tslib "^2.4.0" +"@types/d3-array@^3.0.3": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.2.1.tgz#1f6658e3d2006c4fceac53fde464166859f8b8c5" + integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg== + +"@types/d3-color@*": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2" + integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== + +"@types/d3-ease@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b" + integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== + +"@types/d3-interpolate@^3.0.1": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c" + integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== + dependencies: + "@types/d3-color" "*" + +"@types/d3-path@*": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.1.tgz#f632b380c3aca1dba8e34aa049bcd6a4af23df8a" + integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg== + +"@types/d3-scale@^4.0.2": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.9.tgz#57a2f707242e6fe1de81ad7bfcccaaf606179afb" + integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw== + dependencies: + "@types/d3-time" "*" + +"@types/d3-shape@^3.1.0": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.7.tgz#2b7b423dc2dfe69c8c93596e673e37443348c555" + integrity sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg== + dependencies: + "@types/d3-path" "*" + +"@types/d3-time@*", "@types/d3-time@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.4.tgz#8472feecd639691450dd8000eb33edd444e1323f" + integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g== + +"@types/d3-timer@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" + integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== + "@types/estree@^1.0.6": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" @@ -1201,7 +1252,7 @@ client-only@0.0.1: resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== -clsx@^2.1.1: +clsx@^2.0.0, clsx@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== @@ -1279,6 +1330,77 @@ csstype@^3.0.2, csstype@^3.1.3: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +"d3-array@2 - 3", "d3-array@2.10.0 - 3", d3-array@^3.1.6: + version "3.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== + dependencies: + internmap "1 - 2" + +"d3-color@1 - 3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" + integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== + +d3-ease@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" + integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== + +"d3-format@1 - 3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" + integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== + +"d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" + integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== + dependencies: + d3-color "1 - 3" + +d3-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + +d3-scale@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" + integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== + dependencies: + d3-array "2.10.0 - 3" + d3-format "1 - 3" + d3-interpolate "1.2.0 - 3" + d3-time "2.1.1 - 3" + d3-time-format "2 - 4" + +d3-shape@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== + dependencies: + d3-path "^3.1.0" + +"d3-time-format@2 - 4": + version "4.1.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" + integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== + dependencies: + d3-time "1 - 3" + +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" + integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== + dependencies: + d3-array "2 - 3" + +d3-timer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" + integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== + damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" @@ -1325,6 +1447,11 @@ debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: dependencies: ms "^2.1.3" +decimal.js-light@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" + integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1731,11 +1858,21 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +eventemitter3@^4.0.1: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-equals@^5.0.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.2.2.tgz#885d7bfb079fac0ce0e8450374bce29e9b742484" + integrity sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw== + fast-glob@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" @@ -2023,6 +2160,11 @@ internal-slot@^1.1.0: hasown "^2.0.2" side-channel "^1.1.0" +"internmap@1 - 2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" + integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== + is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" @@ -2342,6 +2484,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -2632,11 +2779,25 @@ react-is@^16.13.1, react-is@^16.7.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + react-is@^19.1.0: version "19.1.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.0.tgz#805bce321546b7e14c084989c77022351bbdd11b" integrity sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg== +react-smooth@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-4.0.4.tgz#a5875f8bb61963ca61b819cedc569dc2453894b4" + integrity sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q== + dependencies: + fast-equals "^5.0.1" + prop-types "^15.8.1" + react-transition-group "^4.4.5" + react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" @@ -2652,6 +2813,27 @@ react@^19.0.0: resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75" integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== +recharts-scale@^0.4.4: + version "0.4.5" + resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.5.tgz#0969271f14e732e642fcc5bd4ab270d6e87dd1d9" + integrity sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w== + dependencies: + decimal.js-light "^2.4.1" + +recharts@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.15.3.tgz#b94d05e91e3a5df1b02368ef64400dec9e9a77d4" + integrity sha512-EdOPzTwcFSuqtvkDoaM5ws/Km1+WTAO2eizL7rqiG0V2UVhTnz0m7J2i0CjVPUCdEkZImaWvXLbZDS2H5t6GFQ== + dependencies: + clsx "^2.0.0" + eventemitter3 "^4.0.1" + lodash "^4.17.21" + react-is "^18.3.1" + react-smooth "^4.0.4" + recharts-scale "^0.4.4" + tiny-invariant "^1.3.1" + victory-vendor "^36.6.8" + reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" @@ -3024,6 +3206,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +tiny-invariant@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + tinyglobby@^0.2.13: version "0.2.14" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" @@ -3170,6 +3357,26 @@ use-sync-external-store@^1.5.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== +victory-vendor@^36.6.8: + version "36.9.2" + resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.9.2.tgz#668b02a448fa4ea0f788dbf4228b7e64669ff801" + integrity sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ== + dependencies: + "@types/d3-array" "^3.0.3" + "@types/d3-ease" "^3.0.0" + "@types/d3-interpolate" "^3.0.1" + "@types/d3-scale" "^4.0.2" + "@types/d3-shape" "^3.1.0" + "@types/d3-time" "^3.0.0" + "@types/d3-timer" "^3.0.0" + d3-array "^3.1.6" + d3-ease "^3.0.1" + d3-interpolate "^3.0.1" + d3-scale "^4.0.2" + d3-shape "^3.1.0" + d3-time "^3.0.0" + d3-timer "^3.0.1" + which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" From 394cb684894d63e9947fd88ccfb706e5096a3f76 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Fri, 20 Jun 2025 17:07:51 +0300 Subject: [PATCH 11/55] change div --- payment-iq/app/dashboard/page.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/payment-iq/app/dashboard/page.tsx b/payment-iq/app/dashboard/page.tsx index 69588e4..99c60f5 100644 --- a/payment-iq/app/dashboard/page.tsx +++ b/payment-iq/app/dashboard/page.tsx @@ -1,13 +1,14 @@ 'use client'; +import { Box } from "@mui/material"; import { HomePage } from "../components/Pages/HomePage/HomePage"; const DashboardPage = () => { return ( -
+ -
+ ); }; From d144876b72953485dce8ce1a135a21a9c01d978c Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Fri, 20 Jun 2025 17:34:19 +0300 Subject: [PATCH 12/55] capital --- .../app/components/sidebar/SidebarLayout.tsx | 28 +++++++++---------- payment-iq/app/dashboard/layout.tsx | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/payment-iq/app/components/sidebar/SidebarLayout.tsx b/payment-iq/app/components/sidebar/SidebarLayout.tsx index cff7d8e..1d5e544 100644 --- a/payment-iq/app/components/sidebar/SidebarLayout.tsx +++ b/payment-iq/app/components/sidebar/SidebarLayout.tsx @@ -4,10 +4,10 @@ import React from 'react'; import { styled } from '@mui/system'; import DashboardIcon from '@mui/icons-material/Dashboard'; import { SIDEBAR_LINKS } from '@/constants/SidebarLink.constants'; -import SidebarLink from './SideBarLink'; +import SideBarLink from './SideBarLink'; -// Sidebar Container (styled using MUI System) -export const Sidebar = styled('div')(({ theme }) => ({ +// SideBar Container (styled using MUI System) +export const SideBar = styled('div')(({ theme }) => ({ width: '240px', backgroundColor: theme.palette.background.primary, color: 'white', @@ -28,8 +28,8 @@ export const MainContent = styled('div')(({ theme }) => ({ overflowY: 'auto', })); -// Sidebar Header -export const SidebarHeader = styled('div')(({ theme }) => ({ +// SideBar Header +export const SideBarHeader = styled('div')(({ theme }) => ({ marginBottom: theme.spacing(2), fontSize: '20px', fontWeight: 600, @@ -37,37 +37,37 @@ export const SidebarHeader = styled('div')(({ theme }) => ({ alignItems: 'center', })); -// Page Wrapper that holds Sidebar and Content +// Page Wrapper that holds SideBar and Content export const LayoutWrapper = styled('div')({ display: 'flex', flexDirection: 'row', height: '100vh', }); -interface SidebarLayoutProps { +interface SideBarLayoutProps { children: React.ReactNode; // Add children to accept passed content } -const SidebarLayout: React.FC = ({ children }) => { +const SideBarLayout: React.FC = ({ children }) => { return ( - - + + PaymentIQ - + {SIDEBAR_LINKS.map((link) => ( - ))} - + {children} {/* Render children here */} ); }; -export default SidebarLayout; +export default SideBarLayout; diff --git a/payment-iq/app/dashboard/layout.tsx b/payment-iq/app/dashboard/layout.tsx index b3b6348..f3f31b0 100644 --- a/payment-iq/app/dashboard/layout.tsx +++ b/payment-iq/app/dashboard/layout.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { MainContent } from '../components/Dashboard/Layout/mainContent'; import Header from '../components/Dashboard/Header/Header'; import { LayoutWrapper } from '../components/Dashboard/Layout/layoutWrapper'; -import SideBar from '../components/Dashboard/SideBar/SideBar'; +import SideBar from '../components/Dashboard/SideBar/Sidebar'; const DashboardLayout: React.FC<{ children: React.ReactNode }> = ({ children }) => { return ( From b85b3294c50e0a32ab7d5bc9e03980483b0f8832 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Fri, 20 Jun 2025 19:31:34 +0300 Subject: [PATCH 13/55] add items at homepage --- .../GeneralHealthCard/GeneralHealthCard.tsx | 66 +++++++++ .../TransactionsOverViewTable.tsx | 134 ------------------ .../TransactionsOverview.tsx | 69 ++++----- .../TransactionsWaitingApproval.tsx | 111 +++++++++++++++ .../dashboard/layout/layoutWrapper.ts | 4 +- .../components/pages/homepage/homepage.tsx | 15 +- payment-iq/app/dashboard/layout.tsx | 11 +- payment-iq/app/dashboard/page.tsx | 6 +- 8 files changed, 234 insertions(+), 182 deletions(-) create mode 100644 payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx create mode 100644 payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx diff --git a/payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx b/payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx new file mode 100644 index 0000000..da4de86 --- /dev/null +++ b/payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx @@ -0,0 +1,66 @@ +import { + Box, + Card, + CardContent, + Typography, + IconButton, + Divider, +} from '@mui/material'; +import MoreVertIcon from '@mui/icons-material/MoreVert'; +import CalendarTodayIcon from '@mui/icons-material/CalendarToday'; +import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'; +// import { ArrowDropUp } from '@mui/icons-material'; + +const stats = [ + { label: 'TOTAL', value: 5, change: '-84.85%' }, + { label: 'SUCCESSFUL', value: 10, change: '100%' }, + { label: 'ACCEPTANCE RATE', value: '0%', change: '-100%' }, + { label: 'AMOUNT', value: '€0.00', change: '-100%' }, + { label: 'ATV', value: '€0.00', change: '-100%' }, +]; + +const StatItem = ({ label, value, change }: { label: string, value: string | number, change: string }) => ( + + + {label} + + + {value} + + + + {/* */} + {change} + + +); + +export const GeneralHealthCard = () => { + return ( + + + + + General Health + + + + Last 24h + + + + + + + + + + {stats.map((item) => ( + + ))} + + + + ); +} + diff --git a/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx b/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx index 379a972..2fef14c 100644 --- a/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx +++ b/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx @@ -1,137 +1,3 @@ -// import React from 'react'; -// import { -// Table, -// TableBody, -// TableCell, -// TableContainer, -// TableHead, -// TableRow, -// Paper, -// Typography, -// Button, -// Box -// } from '@mui/material'; -// import { data1 } from './constants'; - -// export const TransactionsOverview = () => { -// const data = [ -// { state: 'Successful', count: 0, percentage: '0%', color: '#4caf50' }, // green -// { state: 'Waiting', count: 0, percentage: '0%', color: '#ff9800' }, // orange -// { state: 'Failed', count: 0, percentage: '0%', color: '#f44336' }, // red -// { state: 'Cancelled', count: 0, percentage: '0%', color: '#9e9e9e' }, // grey -// ]; - -// return ( -// -// -// -// -// State -// Count -// Percentage -// Action -// -// -// -// {data1.map((row) => ( -// -// -// -// -// {row.state} -// -// -// {row.count} -// {row.percentage} -// -// -// -// -// ))} -// -//
-//
-// ); -// }; -// import React from 'react'; -// import { -// Table, -// TableBody, -// TableCell, -// TableContainer, -// TableHead, -// TableRow, -// Paper, -// Box, -// Button -// } from '@mui/material'; -// import { data1 } from './constants'; - - -// export const TransactionsOverview = () => { -// return ( -// -// -// -// -// State -// Count -// Percentage -// Action -// -// -// -// {data1.map((row) => ( -// -// -// -// -// {row.state} -// -// -// {row.count} -// {row.percentage} -// -// -// -// -// ))} -// -//
-//
-// ); -// }; - - - - -import React from 'react'; import { Table, TableBody, diff --git a/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx b/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx index 7b4b77e..9085762 100644 --- a/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx +++ b/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx @@ -1,47 +1,50 @@ import { useRouter } from 'next/navigation'; -import { Box, Button, Paper, Typography } from "@mui/material" +import { Box, Button, IconButton, Paper, Typography } from "@mui/material" import { PieCharts } from "../PieCharts/PieCharts" +import MoreVertIcon from '@mui/icons-material/MoreVert'; import { TransactionsOverviewTable } from "./TransactionsOverViewTable"; export const TransactionsOverview = () => { - const router = useRouter(); - return ( + const router = useRouter(); + return ( + - - - - - {/* Title and All Transactions Button */} - - - Transactions Overview (Last 24h) - + {/* Title and All Transactions Button */} + + + Transactions Overview (Last 24h) + + + + + + - {/* Chart and Table */} - + {/* Chart and Table */} + - - - ) -} \ No newline at end of file + + + ) +} diff --git a/payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx b/payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx new file mode 100644 index 0000000..18eb247 --- /dev/null +++ b/payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx @@ -0,0 +1,111 @@ +import { + Box, + Button, + IconButton, + Paper, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Typography +} from '@mui/material'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import CancelIcon from '@mui/icons-material/Cancel'; + +import MoreVertIcon from '@mui/icons-material/MoreVert'; + +const transactions = [ + + { + id: '1049078821', + user: '17', + created: '2025-06-17 16:45', + type: 'BestPayWithdrawal', + amount: '-787.49 TRY', + psp: 'BestPay' + }, + { + id: '1049078822', + user: '17', + created: '2025-06-17 16:45', + type: 'BestPayWithdrawal', + amount: '-787.49 TRY', + psp: 'BestPay' + }, + { + id: '1049078823', + user: '17', + created: '2025-06-17 16:45', + type: 'BestPayWithdrawal', + amount: '-787.49 TRY', + psp: 'BestPay' + }, + { + id: '1049078824', + user: '17', + created: '2025-06-17 16:45', + type: 'BestPayWithdrawal', + amount: '-787.49 TRY', + psp: 'BestPay' + } +]; + +export const TransactionsWaitingApproval = () => { + return ( + + + + + + + Transactions Waiting for Approval + + + + + + + + + + + + + + ID + User + Created + Type + Amount + PSP + Action + + + + {transactions.map((tx) => ( + + {tx.id} + {tx.user} + {tx.created} + {tx.type} + {tx.amount} + {tx.psp} + + + + + + + + + + ))} + +
+
+
+
+ ); +} diff --git a/payment-iq/app/components/dashboard/layout/layoutWrapper.ts b/payment-iq/app/components/dashboard/layout/layoutWrapper.ts index 7da683a..3a9a999 100644 --- a/payment-iq/app/components/dashboard/layout/layoutWrapper.ts +++ b/payment-iq/app/components/dashboard/layout/layoutWrapper.ts @@ -4,5 +4,5 @@ export const LayoutWrapper = styled('div')({ display: 'flex', width: '100%', height: '100vh', - overflow: 'hidden', -}); \ No newline at end of file + // overflow: 'hidden', +}); diff --git a/payment-iq/app/components/pages/homepage/homepage.tsx b/payment-iq/app/components/pages/homepage/homepage.tsx index 2d2cda4..a2498ad 100644 --- a/payment-iq/app/components/pages/homepage/homepage.tsx +++ b/payment-iq/app/components/pages/homepage/homepage.tsx @@ -1,7 +1,16 @@ +import { Box } from "@mui/material" +import { GeneralHealthCard } from "../../GeneralHealthCard/GeneralHealthCard" import { TransactionsOverview } from "../../TransactionsOverview/TransactionsOverview" +import { TransactionsWaitingApproval } from "../../TransactionsWaitingApproval/TransactionsWaitingApproval" -export const HomePage = () => { +export const HomePage = () => { return ( - + <> + + + + + + ) -} \ No newline at end of file +} diff --git a/payment-iq/app/dashboard/layout.tsx b/payment-iq/app/dashboard/layout.tsx index f3f31b0..3cba5b7 100644 --- a/payment-iq/app/dashboard/layout.tsx +++ b/payment-iq/app/dashboard/layout.tsx @@ -6,16 +6,17 @@ import Header from '../components/Dashboard/Header/Header'; import { LayoutWrapper } from '../components/Dashboard/Layout/layoutWrapper'; import SideBar from '../components/Dashboard/SideBar/Sidebar'; + const DashboardLayout: React.FC<{ children: React.ReactNode }> = ({ children }) => { return (
- -
- {children} - -
+ +
+ {children} + +
); }; diff --git a/payment-iq/app/dashboard/page.tsx b/payment-iq/app/dashboard/page.tsx index 99c60f5..fa06e89 100644 --- a/payment-iq/app/dashboard/page.tsx +++ b/payment-iq/app/dashboard/page.tsx @@ -1,14 +1,10 @@ 'use client'; -import { Box } from "@mui/material"; import { HomePage } from "../components/Pages/HomePage/HomePage"; - const DashboardPage = () => { return ( - - - + ); }; From 449044eb7a3ca7f35fef6e8c0c72c55a745a534d Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Fri, 20 Jun 2025 19:39:13 +0300 Subject: [PATCH 14/55] fix naming --- .../homepage.tsx => DashboardHomePage/DashboardHomePage.tsx} | 4 +++- payment-iq/app/dashboard/page.tsx | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) rename payment-iq/app/components/pages/{homepage/homepage.tsx => DashboardHomePage/DashboardHomePage.tsx} (91%) diff --git a/payment-iq/app/components/pages/homepage/homepage.tsx b/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx similarity index 91% rename from payment-iq/app/components/pages/homepage/homepage.tsx rename to payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx index a2498ad..635d135 100644 --- a/payment-iq/app/components/pages/homepage/homepage.tsx +++ b/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx @@ -3,7 +3,9 @@ import { GeneralHealthCard } from "../../GeneralHealthCard/GeneralHealthCard" import { TransactionsOverview } from "../../TransactionsOverview/TransactionsOverview" import { TransactionsWaitingApproval } from "../../TransactionsWaitingApproval/TransactionsWaitingApproval" -export const HomePage = () => { + + +export const DashboardHomePage = () => { return ( <> diff --git a/payment-iq/app/dashboard/page.tsx b/payment-iq/app/dashboard/page.tsx index fa06e89..37d5286 100644 --- a/payment-iq/app/dashboard/page.tsx +++ b/payment-iq/app/dashboard/page.tsx @@ -1,10 +1,10 @@ 'use client'; -import { HomePage } from "../components/Pages/HomePage/HomePage"; +import { DashboardHomePage } from "../components/Pages/DashboardHomePage/DashboardHomePage"; const DashboardPage = () => { return ( - + ); }; From 88c5e2123edb5e1f0b20028c8acfde6d5fc063dd Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Mon, 23 Jun 2025 10:04:40 +0200 Subject: [PATCH 15/55] s --- payment-iq/app/dashboard/page.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/payment-iq/app/dashboard/page.tsx b/payment-iq/app/dashboard/page.tsx index fa06e89..153d5c1 100644 --- a/payment-iq/app/dashboard/page.tsx +++ b/payment-iq/app/dashboard/page.tsx @@ -1,6 +1,7 @@ 'use client'; -import { HomePage } from "../components/Pages/HomePage/HomePage"; +import { HomePage } from "@/app/components/pages/homepage/homepage"; + const DashboardPage = () => { return ( From 6eba583e13e717f80d9619ed9a22893fdff5834e Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Tue, 24 Jun 2025 16:56:24 +0300 Subject: [PATCH 16/55] homepage --- .../app/components/AccountIQ/AccountIQ.tsx | 26 +++ .../Documentation/Documentation.tsx | 18 ++ .../components/FetchReports/FetchReports.tsx | 155 +++++++++++++++++ .../app/components/Pages/Approve/Approve.tsx | 162 ++++++++++++++++++ .../components/SectionCard/SectionCard.tsx | 37 ++++ .../app/components/WhatsNew/WhatsNew.tsx | 17 ++ .../DashboardHomePage/DashboardHomePage.tsx | 8 + payment-iq/app/dashboard/approve/page.tsx | 6 +- payment-iq/app/dashboard/investigate/page.tsx | 2 +- payment-iq/constants/SidebarLink.constants.ts | 2 +- 10 files changed, 428 insertions(+), 5 deletions(-) create mode 100644 payment-iq/app/components/AccountIQ/AccountIQ.tsx create mode 100644 payment-iq/app/components/Documentation/Documentation.tsx create mode 100644 payment-iq/app/components/FetchReports/FetchReports.tsx create mode 100644 payment-iq/app/components/Pages/Approve/Approve.tsx create mode 100644 payment-iq/app/components/SectionCard/SectionCard.tsx create mode 100644 payment-iq/app/components/WhatsNew/WhatsNew.tsx diff --git a/payment-iq/app/components/AccountIQ/AccountIQ.tsx b/payment-iq/app/components/AccountIQ/AccountIQ.tsx new file mode 100644 index 0000000..bc5e5df --- /dev/null +++ b/payment-iq/app/components/AccountIQ/AccountIQ.tsx @@ -0,0 +1,26 @@ +import { styled } from "@mui/material" +import { SectionCard } from "../SectionCard/SectionCard" + +const AccountIQIcon = styled('div')(({ theme }) => ({ + fontWeight: 'bold', + color: '#4ecdc4', + fontSize: '1rem', + marginRight: theme.spacing(1), +})); + +export const AccountIQ = () => { + + return ( + AIQ + } + items={[ + { title: 'Automatically reconcile your transactions' }, + { title: 'Live wallet balances from providers' }, + { title: 'Gaming provider financial overviews' }, + { title: 'Learn more' }, + ]} + /> + ) +} diff --git a/payment-iq/app/components/Documentation/Documentation.tsx b/payment-iq/app/components/Documentation/Documentation.tsx new file mode 100644 index 0000000..74c98e7 --- /dev/null +++ b/payment-iq/app/components/Documentation/Documentation.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import DescriptionIcon from '@mui/icons-material/Description'; +import { SectionCard } from '../SectionCard/SectionCard'; + +export const Documentation = () => { + return ( + } + items={[ + { title: 'Provider Integration Overview' }, + { title: 'APIs Introduction' }, + { title: 'Documentation Overview' }, + { title: 'How-Tos' }, + ]} + /> + ); +}; diff --git a/payment-iq/app/components/FetchReports/FetchReports.tsx b/payment-iq/app/components/FetchReports/FetchReports.tsx new file mode 100644 index 0000000..5f46031 --- /dev/null +++ b/payment-iq/app/components/FetchReports/FetchReports.tsx @@ -0,0 +1,155 @@ +import React, { useState } from 'react'; +import { + Typography, + FormControl, + InputLabel, + Select, + MenuItem, + Button, + Stack, + Box, + Paper, + IconButton, +} from '@mui/material'; +import CalendarTodayIcon from '@mui/icons-material/CalendarToday'; + +import MoreVertIcon from '@mui/icons-material/MoreVert'; + +export const FetchReport = () => { + const [state, setState] = useState(''); + const [psp, setPsp] = useState(''); + const [reportType, setReportType] = useState(''); + + const handleDownload = () => { + // Download logic goes here + alert('Report downloaded'); + }; + + const isDownloadEnabled = state && psp && reportType; + + return ( + + + + Fetch Report + + + + Last 30 days + + + + + + + + + + + + Select state (defaults to All) + + + + + Select PSPs (defaults to All) + + + + + Select report type + + + + + + + + + ); +}; + diff --git a/payment-iq/app/components/Pages/Approve/Approve.tsx b/payment-iq/app/components/Pages/Approve/Approve.tsx new file mode 100644 index 0000000..374bb1b --- /dev/null +++ b/payment-iq/app/components/Pages/Approve/Approve.tsx @@ -0,0 +1,162 @@ +import React, { useState } from 'react'; +import { + Box, + TextField, + IconButton, + InputAdornment, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Checkbox, + Paper, + MenuItem, + InputLabel, + Select, + FormControl, + SelectChangeEvent +} from '@mui/material'; +import SearchIcon from '@mui/icons-material/Search'; + +const rows = [ + { + merchantId: '100987998', + txId: '1049078821', + userId: 17, + userEmail: 'dhkheni1@yopmail.com', + kycStatus: 'N/A', + }, + { + merchantId: '100987998', + txId: '1049078821', + userId: 18, + userEmail: 'dhkheni1@yopmail.com', + kycStatus: 'N/A', + }, + { + merchantId: '100987998', + txId: '1049078821', + userId: 19, + userEmail: 'dhkheni1@yopmail.com', + kycStatus: 'N/A', + }, +]; + +export const Approve = () => { + const [age, setAge] = useState(''); + const [selectedRows, setSelectedRows] = useState([]); + + + + const handleCheckboxChange = (userId: number) => (event: React.ChangeEvent) => { + const isChecked = event.target.checked; + setSelectedRows((prevSelected: number[]) => + isChecked + ? [...prevSelected, userId] + : prevSelected.filter((id) => id !== userId) + ); + console.log('Selected IDs:', isChecked + ? [...selectedRows, userId] + : selectedRows.filter((id) => id !== userId)); + }; + + const handleChangeAge = (event: SelectChangeEvent) => { + setAge(event.target.value as string); + }; + + return ( + + + + + + + + ), + }} + /> + + {/* */} + {/* */} + {/* */} + {/* */} + {/* Action 1 */} + {/* Action 2 */} + {/* */} + + Action + + + + + + + + + + + Merchant-id + Tx-id + User + User email + KYC Status + KYC PSP + KYC PSP status + KYC ID status + KYC address status + KYC liveness status + KYC age status + KYC peps and sanctions + Suspected + + + + {rows.map((row, idx) => ( + + + + {row.merchantId} + {row.txId} + + + {row.userId} + + + {row.userEmail} + {row.kycStatus} + + + + + + + + + + ))} + +
+
+
+ ); +} + diff --git a/payment-iq/app/components/SectionCard/SectionCard.tsx b/payment-iq/app/components/SectionCard/SectionCard.tsx new file mode 100644 index 0000000..5f1ce79 --- /dev/null +++ b/payment-iq/app/components/SectionCard/SectionCard.tsx @@ -0,0 +1,37 @@ +import { CardContent, Typography, Divider, List, ListItem, ListItemText, Paper, Box, IconButton } from "@mui/material"; + + +import MoreVertIcon from '@mui/icons-material/MoreVert'; + +export const SectionCard = ({ title, icon, items }) => ( + + + + + {icon} + {title} + + + + + + + + + + {items.map((item, index) => ( + + + + ))} + + + +); + + diff --git a/payment-iq/app/components/WhatsNew/WhatsNew.tsx b/payment-iq/app/components/WhatsNew/WhatsNew.tsx new file mode 100644 index 0000000..30555f8 --- /dev/null +++ b/payment-iq/app/components/WhatsNew/WhatsNew.tsx @@ -0,0 +1,17 @@ +import { SectionCard } from "../SectionCard/SectionCard"; +import WifiIcon from '@mui/icons-material/Wifi'; + +export const WhatsNew = () => { + return ( + } + items={[ + { title: 'Sneak Peek – Discover the New Rules Hub Feature', date: '13 May 2025' }, + { title: 'New security measures for anonymizing sensitive configuration values, effective December 2nd', date: '31 Oct 2024' }, + { title: 'Introducing Our New Transactions and Rule Views', date: '23 Oct 2024' }, + { title: 'Introducing Our New Status Page', date: '09 Sept 2024' }, + ]} + /> + ); +}; diff --git a/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx b/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx index 635d135..5b1316f 100644 --- a/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx +++ b/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx @@ -2,6 +2,10 @@ import { Box } from "@mui/material" import { GeneralHealthCard } from "../../GeneralHealthCard/GeneralHealthCard" import { TransactionsOverview } from "../../TransactionsOverview/TransactionsOverview" import { TransactionsWaitingApproval } from "../../TransactionsWaitingApproval/TransactionsWaitingApproval" +import { FetchReport } from "../../FetchReports/FetchReports" +import { Documentation } from "../../Documentation/Documentation" +import { AccountIQ } from "../../AccountIQ/AccountIQ" +import { WhatsNew } from "../../WhatsNew/WhatsNew" @@ -13,6 +17,10 @@ export const DashboardHomePage = () => {
+ + + + ) } diff --git a/payment-iq/app/dashboard/approve/page.tsx b/payment-iq/app/dashboard/approve/page.tsx index c496001..e71ddaf 100644 --- a/payment-iq/app/dashboard/approve/page.tsx +++ b/payment-iq/app/dashboard/approve/page.tsx @@ -1,13 +1,13 @@ // This ensures this component is rendered only on the client side 'use client'; -import React from 'react'; +import { Approve } from '@/app/components/Pages/Approve/Approve'; export default function ApprovePage() { return (
{/* This page will now be rendered on the client-side */} -

Approve

+
); -} \ No newline at end of file +} diff --git a/payment-iq/app/dashboard/investigate/page.tsx b/payment-iq/app/dashboard/investigate/page.tsx index 28fbef1..7decb87 100644 --- a/payment-iq/app/dashboard/investigate/page.tsx +++ b/payment-iq/app/dashboard/investigate/page.tsx @@ -10,4 +10,4 @@ export default function InvestigatePage() {

Investigate

); -} \ No newline at end of file +} diff --git a/payment-iq/constants/SidebarLink.constants.ts b/payment-iq/constants/SidebarLink.constants.ts index 2a0e9aa..d30dacd 100644 --- a/payment-iq/constants/SidebarLink.constants.ts +++ b/payment-iq/constants/SidebarLink.constants.ts @@ -19,7 +19,7 @@ export const SIDEBAR_LINKS: ISidebarLink[] = [ { title: 'Home', path: '/dashboard', icon: HomeIcon }, { title: 'Transaction', path: '/dashboard/transactions', icon: AccountBalanceWalletIcon }, { title: 'Approve', path: '/dashboard/approve', icon: CheckCircleIcon }, - { title: 'Investigate', path: '/investigate', icon: SearchIcon }, + { title: 'Investigate', path: '/dashboard/investigate', icon: SearchIcon }, { title: 'KYC', path: '/kyc', icon: VerifiedUserIcon }, { title: 'User Accounts', path: '/user-accounts', icon: PeopleIcon }, { title: 'Analytics', path: '/analytics', icon: BarChartIcon }, From c9a56fe1551154da6de3d862e6e9dc5a20a4e009 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Wed, 25 Jun 2025 16:10:43 +0200 Subject: [PATCH 17/55] Added Navigate to --- payment-iq/README.md | 29 ++++++++++++- .../components/dashboard/header/DropDown.tsx | 42 +++++++++++++++++++ .../components/dashboard/header/Header.tsx | 8 ++-- .../components/dashboard/sidebar/Sidebar.tsx | 2 +- payment-iq/app/dashboard/layout.tsx | 9 ++-- 5 files changed, 79 insertions(+), 11 deletions(-) create mode 100644 payment-iq/app/components/dashboard/header/DropDown.tsx diff --git a/payment-iq/README.md b/payment-iq/README.md index 8461975..c90f384 100644 --- a/payment-iq/README.md +++ b/payment-iq/README.md @@ -1,2 +1,27 @@ -# paymentIQ -Payment IQ Back Office +# 🛠️ Backoffice Admin Panel + +A modern backoffice admin panel built with [Next.js](https://nextjs.org/) and [React](https://react.dev), providing a scalable and maintainable foundation for managing internal tools, content, and operations. + +--- + +## 🚀 Tech Stack + +- [Next.js](https://nextjs.org/) – App Router with SSR support +- [React](https://reactjs.org/) +- [TypeScript](https://www.typescriptlang.org/) +- [Material UI](https://mui.com/) – UI component library +- [Axios](https://axios-http.com/) – API client +- [Jest](https://jestjs.io/) / [React Testing Library](https://testing-library.com/) – Unit & integration testing +- [ESLint](https://eslint.org/) / [Prettier](https://prettier.io/) – Code quality & formatting +- [dotenv](https://github.com/motdotla/dotenv) – Environment variable management + +--- + +## 📦 Getting Started + + +```bash +git clone https://git.luckyigaming.com/Mitchell/payment-backoffice.git +cd backoffice + +yarn run dev diff --git a/payment-iq/app/components/dashboard/header/DropDown.tsx b/payment-iq/app/components/dashboard/header/DropDown.tsx new file mode 100644 index 0000000..aaff10d --- /dev/null +++ b/payment-iq/app/components/dashboard/header/DropDown.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { + FormControl, + InputLabel, + Select, + MenuItem, + SelectChangeEvent, + ListItemIcon, + ListItemText, +} from '@mui/material'; +import { SIDEBAR_LINKS } from '@/constants/SidebarLink.constants'; + +interface Props { + onChange?: (event: SelectChangeEvent) => void; +} + +export default function SidebarDropdown({ onChange }: Props) { + const [value, setValue] = React.useState(''); + + const handleChange = (event: SelectChangeEvent) => { + setValue(event.target.value); + onChange?.(event); + }; + + return ( + + Navigate To + + + ); +} diff --git a/payment-iq/app/components/dashboard/header/Header.tsx b/payment-iq/app/components/dashboard/header/Header.tsx index 12ccf6b..875a926 100644 --- a/payment-iq/app/components/dashboard/header/Header.tsx +++ b/payment-iq/app/components/dashboard/header/Header.tsx @@ -1,6 +1,7 @@ import React, { useState } from 'react'; import { AppBar, Toolbar, IconButton, Menu, MenuItem, Button } from '@mui/material'; import MenuIcon from '@mui/icons-material/Menu'; +import Dropdown from './DropDown'; const Header = () => { const [anchorEl, setAnchorEl] = useState(null); @@ -15,6 +16,9 @@ const Header = () => { setAnchorEl(null); }; + const handleChange = (e:any) => { + }; + return ( @@ -24,9 +28,7 @@ const Header = () => { {/* Dropdown Button */} - + {/* Dropdown Menu */} { return ( - PaymentIQ + Betrise cashir {SIDEBAR_LINKS.map((link) => ( = ({ children }) => { return ( From 0bd5aeec1ab1b1440b5931e945919839387b8be4 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Wed, 25 Jun 2025 21:39:54 +0300 Subject: [PATCH 18/55] add date rate --- .../app/components/AccountIQ/AccountIQ.tsx | 29 +- .../DateRangePicker/DateRangePicker.tsx | 84 + .../Documentation/Documentation.tsx | 16 +- .../components/FetchReports/FetchReports.tsx | 70 +- .../GeneralHealthCard/GeneralHealthCard.tsx | 67 +- .../components/SectionCard/SectionCard.tsx | 37 +- .../app/components/SectionCard/types.ts | 12 + .../TransactionsOverViewTable.tsx | 27 +- .../TransactionsOverview.tsx | 54 +- .../TransactionsWaitingApproval.tsx | 178 +- .../app/components/WhatsNew/WhatsNew.tsx | 22 +- .../DashboardHomePage/DashboardHomePage.tsx | 4 +- payment-iq/package-lock.json | 1460 ++++++++++++++++- payment-iq/package.json | 7 +- payment-iq/yarn.lock | 1255 ++++++-------- 15 files changed, 2386 insertions(+), 936 deletions(-) create mode 100644 payment-iq/app/components/DateRangePicker/DateRangePicker.tsx create mode 100644 payment-iq/app/components/SectionCard/types.ts diff --git a/payment-iq/app/components/AccountIQ/AccountIQ.tsx b/payment-iq/app/components/AccountIQ/AccountIQ.tsx index bc5e5df..b909bc9 100644 --- a/payment-iq/app/components/AccountIQ/AccountIQ.tsx +++ b/payment-iq/app/components/AccountIQ/AccountIQ.tsx @@ -1,26 +1,23 @@ -import { styled } from "@mui/material" -import { SectionCard } from "../SectionCard/SectionCard" +import { styled } from "@mui/material"; +import { SectionCard } from "../SectionCard/SectionCard"; -const AccountIQIcon = styled('div')(({ theme }) => ({ - fontWeight: 'bold', - color: '#4ecdc4', - fontSize: '1rem', - marginRight: theme.spacing(1), +const AccountIQIcon = styled("div")(() => ({ + fontWeight: "bold", + color: "#4ecdc4", + marginTop: "4px", })); export const AccountIQ = () => { - return ( AIQ - } + icon={AIQ} items={[ - { title: 'Automatically reconcile your transactions' }, - { title: 'Live wallet balances from providers' }, - { title: 'Gaming provider financial overviews' }, - { title: 'Learn more' }, + { title: "Automatically reconcile your transactions" }, + { title: "Live wallet balances from providers" }, + { title: "Gaming provider financial overviews" }, + { title: "Learn more" }, ]} /> - ) -} + ); +}; diff --git a/payment-iq/app/components/DateRangePicker/DateRangePicker.tsx b/payment-iq/app/components/DateRangePicker/DateRangePicker.tsx new file mode 100644 index 0000000..afb9fa8 --- /dev/null +++ b/payment-iq/app/components/DateRangePicker/DateRangePicker.tsx @@ -0,0 +1,84 @@ +import { useState } from "react"; +import { Box, Typography, Paper, Popover } from "@mui/material"; +import { DateRange, Range, DateRangeProps } from "react-date-range"; +import { format } from "date-fns"; + +import "react-date-range/dist/styles.css"; +import "react-date-range/dist/theme/default.css"; + +export const DateRangePicker = () => { + const [range, setRange] = useState([ + { + startDate: new Date(), + endDate: new Date(), + key: "selection" + } + ]); + + const [anchorEl, setAnchorEl] = useState(null); + + const handleSelect: DateRangeProps['onChange'] = (ranges) => { + if (ranges.selection) { + setRange([ranges.selection]); + if (ranges.selection.endDate !== ranges.selection.startDate) { + setAnchorEl(null); + } + } + }; + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + const open = Boolean(anchorEl); + const id = open ? 'date-range-popover' : undefined; + + return ( + + + + + + + + + + {format(range[0].startDate ?? new Date(), "PPP")} - {format(range[0].endDate ?? new Date(), "PPP")} + + + + ); +} \ No newline at end of file diff --git a/payment-iq/app/components/Documentation/Documentation.tsx b/payment-iq/app/components/Documentation/Documentation.tsx index 74c98e7..5932444 100644 --- a/payment-iq/app/components/Documentation/Documentation.tsx +++ b/payment-iq/app/components/Documentation/Documentation.tsx @@ -1,17 +1,17 @@ -import React from 'react'; -import DescriptionIcon from '@mui/icons-material/Description'; -import { SectionCard } from '../SectionCard/SectionCard'; +import React from "react"; +import DescriptionIcon from "@mui/icons-material/Description"; +import { SectionCard } from "../SectionCard/SectionCard"; export const Documentation = () => { return ( } + icon={} items={[ - { title: 'Provider Integration Overview' }, - { title: 'APIs Introduction' }, - { title: 'Documentation Overview' }, - { title: 'How-Tos' }, + { title: "Provider Integration Overview" }, + { title: "APIs Introduction" }, + { title: "Documentation Overview" }, + { title: "How-Tos" }, ]} /> ); diff --git a/payment-iq/app/components/FetchReports/FetchReports.tsx b/payment-iq/app/components/FetchReports/FetchReports.tsx index 5f46031..e79f79b 100644 --- a/payment-iq/app/components/FetchReports/FetchReports.tsx +++ b/payment-iq/app/components/FetchReports/FetchReports.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState } from "react"; import { Typography, FormControl, @@ -10,45 +10,57 @@ import { Box, Paper, IconButton, -} from '@mui/material'; -import CalendarTodayIcon from '@mui/icons-material/CalendarToday'; +} from "@mui/material"; +import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; -import MoreVertIcon from '@mui/icons-material/MoreVert'; +import MoreVertIcon from "@mui/icons-material/MoreVert"; +import { DateRangePicker } from "../DateRangePicker/DateRangePicker"; export const FetchReport = () => { - const [state, setState] = useState(''); - const [psp, setPsp] = useState(''); - const [reportType, setReportType] = useState(''); + const [state, setState] = useState(""); + const [psp, setPsp] = useState(""); + const [reportType, setReportType] = useState(""); const handleDownload = () => { // Download logic goes here - alert('Report downloaded'); + alert("Report downloaded"); }; const isDownloadEnabled = state && psp && reportType; return ( - - + + Fetch Report - + - Last 30 days + + + - - - Select state (defaults to All) - setState(e.target.value)} + label="Select state (defaults to All)" + > Successful Failed Canceled @@ -59,7 +71,11 @@ export const FetchReport = () => { Select PSPs (defaults to All) - setPsp(e.target.value)} + label="Select PSPs (defaults to All)" + > A1 AHUB AIBMS @@ -105,12 +121,6 @@ export const FetchReport = () => { AHUB AIBMS - - A1 - AHUB - AIBMS - - A1 AHUB AIBMS @@ -123,6 +133,9 @@ export const FetchReport = () => { AHUB AIBMS + A1 + AHUB + AIBMS {/* Add more PSPs */} @@ -130,8 +143,14 @@ export const FetchReport = () => { Select report type - setReportType(e.target.value)} + label="Select report type" + > + + All Transactions Report + Deposit Report WithDraw Report {/* Add more types */} @@ -152,4 +171,3 @@ export const FetchReport = () => { ); }; - diff --git a/payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx b/payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx index da4de86..fc9a446 100644 --- a/payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx +++ b/payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx @@ -1,33 +1,42 @@ -import { - Box, - Card, - CardContent, - Typography, - IconButton, - Divider, -} from '@mui/material'; -import MoreVertIcon from '@mui/icons-material/MoreVert'; -import CalendarTodayIcon from '@mui/icons-material/CalendarToday'; -import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'; +import { Box, Card, CardContent, Typography, IconButton } from "@mui/material"; +import MoreVertIcon from "@mui/icons-material/MoreVert"; +import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; +import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; +import { DateRangePicker } from "../DateRangePicker/DateRangePicker"; // import { ArrowDropUp } from '@mui/icons-material'; const stats = [ - { label: 'TOTAL', value: 5, change: '-84.85%' }, - { label: 'SUCCESSFUL', value: 10, change: '100%' }, - { label: 'ACCEPTANCE RATE', value: '0%', change: '-100%' }, - { label: 'AMOUNT', value: '€0.00', change: '-100%' }, - { label: 'ATV', value: '€0.00', change: '-100%' }, + { label: "TOTAL", value: 5, change: "-84.85%" }, + { label: "SUCCESSFUL", value: 10, change: "100%" }, + { label: "ACCEPTANCE RATE", value: "0%", change: "-100%" }, + { label: "AMOUNT", value: "€0.00", change: "-100%" }, + { label: "ATV", value: "€0.00", change: "-100%" }, ]; -const StatItem = ({ label, value, change }: { label: string, value: string | number, change: string }) => ( - +const StatItem = ({ + label, + value, + change, +}: { + label: string; + value: string | number; + change: string; +}) => ( + {label} {value} - + {/* */} {change} @@ -38,23 +47,22 @@ const StatItem = ({ label, value, change }: { label: string, value: string | num export const GeneralHealthCard = () => { return ( - - - + + + General Health - + - Last 24h + + + - - - - + {stats.map((item) => ( ))} @@ -62,5 +70,4 @@ export const GeneralHealthCard = () => { ); -} - +}; diff --git a/payment-iq/app/components/SectionCard/SectionCard.tsx b/payment-iq/app/components/SectionCard/SectionCard.tsx index 5f1ce79..7e08dda 100644 --- a/payment-iq/app/components/SectionCard/SectionCard.tsx +++ b/payment-iq/app/components/SectionCard/SectionCard.tsx @@ -1,22 +1,37 @@ -import { CardContent, Typography, Divider, List, ListItem, ListItemText, Paper, Box, IconButton } from "@mui/material"; +import { + CardContent, + Typography, + Divider, + List, + ListItem, + ListItemText, + Paper, + Box, + IconButton, +} from "@mui/material"; +import MoreVertIcon from "@mui/icons-material/MoreVert"; +import { ISectionCardProps } from "./types"; -import MoreVertIcon from '@mui/icons-material/MoreVert'; - -export const SectionCard = ({ title, icon, items }) => ( - +export const SectionCard = ({ title, icon, items }: ISectionCardProps) => ( + - - + + {icon} - {title} + + {title} + - + - + {items.map((item, index) => ( @@ -33,5 +48,3 @@ export const SectionCard = ({ title, icon, items }) => ( ); - - diff --git a/payment-iq/app/components/SectionCard/types.ts b/payment-iq/app/components/SectionCard/types.ts new file mode 100644 index 0000000..e3ea00c --- /dev/null +++ b/payment-iq/app/components/SectionCard/types.ts @@ -0,0 +1,12 @@ +import { ReactNode } from "react"; + +export interface ISectionItem { + title: string; + date?: string; +} + +export interface ISectionCardProps { + title: string; + icon: ReactNode; + items: ISectionItem[]; +} diff --git a/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx b/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx index 2fef14c..1803885 100644 --- a/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx +++ b/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx @@ -7,14 +7,14 @@ import { TableRow, Paper, Box, - Button -} from '@mui/material'; + Button, +} from "@mui/material"; const data1 = [ - { state: 'Success', count: 120, percentage: '60%', color: 'green' }, - { state: 'Pending', count: 50, percentage: '25%', color: 'orange' }, - { state: 'Failed', count: 20, percentage: '10%', color: 'red' }, - { state: 'Other', count: 10, percentage: '5%', color: 'gray' } + { state: "Success", count: 120, percentage: "60%", color: "green" }, + { state: "Pending", count: 50, percentage: "25%", color: "orange" }, + { state: "Failed", count: 20, percentage: "10%", color: "red" }, + { state: "Other", count: 10, percentage: "5%", color: "gray" }, ]; export const TransactionsOverviewTable = () => { @@ -35,20 +35,20 @@ export const TransactionsOverviewTable = () => { {row.state} @@ -68,4 +68,3 @@ export const TransactionsOverviewTable = () => { ); }; - diff --git a/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx b/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx index 9085762..0c705c0 100644 --- a/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx +++ b/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx @@ -1,22 +1,40 @@ -import { useRouter } from 'next/navigation'; -import { Box, Button, IconButton, Paper, Typography } from "@mui/material" -import { PieCharts } from "../PieCharts/PieCharts" +import { useRouter } from "next/navigation"; +import { Box, Button, IconButton, Paper, Typography } from "@mui/material"; +import { PieCharts } from "../PieCharts/PieCharts"; -import MoreVertIcon from '@mui/icons-material/MoreVert'; +import MoreVertIcon from "@mui/icons-material/MoreVert"; import { TransactionsOverviewTable } from "./TransactionsOverViewTable"; export const TransactionsOverview = () => { const router = useRouter(); return ( - - + {/* Title and All Transactions Button */} - - + + Transactions Overview (Last 24h) - @@ -30,21 +48,21 @@ export const TransactionsOverview = () => { sx={{ padding: 2, margin: 2, - display: 'flex', - flexDirection: 'row', + display: "flex", + flexDirection: "row", flexWrap: { - xs: 'wrap', // Wrap on small screens - md: 'nowrap' // No wrap on medium and up + xs: "wrap", // Wrap on small screens + md: "nowrap", // No wrap on medium and up }, gap: { - xs: 4, // Add spacing on small screens - md: 0 // No spacing on larger screens - } + xs: 4, // Add spacing on small screens + md: 0, // No spacing on larger screens + }, }} > - ) -} + ); +}; diff --git a/payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx b/payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx index 18eb247..6848aab 100644 --- a/payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx +++ b/payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx @@ -9,78 +9,162 @@ import { TableContainer, TableHead, TableRow, - Typography -} from '@mui/material'; -import CheckCircleIcon from '@mui/icons-material/CheckCircle'; -import CancelIcon from '@mui/icons-material/Cancel'; + Typography, +} from "@mui/material"; +import CheckCircleIcon from "@mui/icons-material/CheckCircle"; +import CancelIcon from "@mui/icons-material/Cancel"; -import MoreVertIcon from '@mui/icons-material/MoreVert'; +import MoreVertIcon from "@mui/icons-material/MoreVert"; const transactions = [ - { - id: '1049078821', - user: '17', - created: '2025-06-17 16:45', - type: 'BestPayWithdrawal', - amount: '-787.49 TRY', - psp: 'BestPay' + id: "1049078821", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", }, { - id: '1049078822', - user: '17', - created: '2025-06-17 16:45', - type: 'BestPayWithdrawal', - amount: '-787.49 TRY', - psp: 'BestPay' + id: "1049078822", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", }, { - id: '1049078823', - user: '17', - created: '2025-06-17 16:45', - type: 'BestPayWithdrawal', - amount: '-787.49 TRY', - psp: 'BestPay' + id: "1049078823", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", }, { - id: '1049078824', - user: '17', - created: '2025-06-17 16:45', - type: 'BestPayWithdrawal', - amount: '-787.49 TRY', - psp: 'BestPay' - } + id: "1049078824", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", + }, + { + id: "1049078821", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", + }, + { + id: "1049078822", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", + }, + { + id: "1049078823", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", + }, + { + id: "1049078824", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", + }, + { + id: "1049078821", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", + }, + { + id: "1049078822", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", + }, + { + id: "1049078823", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", + }, + { + id: "1049078824", + user: "17", + created: "2025-06-17 16:45", + type: "BestPayWithdrawal", + amount: "-787.49 TRY", + psp: "BestPay", + }, ]; export const TransactionsWaitingApproval = () => { return ( - - - + - - + + Transactions Waiting for Approval - - + {" "} + - + - ID - User - Created - Type - Amount - PSP - Action + + ID + + + User + + + Created + + + Type + + + Amount + + + PSP + + + Action + @@ -108,4 +192,4 @@ export const TransactionsWaitingApproval = () => { ); -} +}; diff --git a/payment-iq/app/components/WhatsNew/WhatsNew.tsx b/payment-iq/app/components/WhatsNew/WhatsNew.tsx index 30555f8..1f3aed3 100644 --- a/payment-iq/app/components/WhatsNew/WhatsNew.tsx +++ b/payment-iq/app/components/WhatsNew/WhatsNew.tsx @@ -1,16 +1,26 @@ import { SectionCard } from "../SectionCard/SectionCard"; -import WifiIcon from '@mui/icons-material/Wifi'; +import WifiIcon from "@mui/icons-material/Wifi"; export const WhatsNew = () => { return ( } + icon={} items={[ - { title: 'Sneak Peek – Discover the New Rules Hub Feature', date: '13 May 2025' }, - { title: 'New security measures for anonymizing sensitive configuration values, effective December 2nd', date: '31 Oct 2024' }, - { title: 'Introducing Our New Transactions and Rule Views', date: '23 Oct 2024' }, - { title: 'Introducing Our New Status Page', date: '09 Sept 2024' }, + { + title: "Sneak Peek – Discover the New Rules Hub Feature", + date: "13 May 2025", + }, + { + title: + "New security measures for anonymizing sensitive configuration values, effective December 2nd", + date: "31 Oct 2024", + }, + { + title: "Introducing Our New Transactions and Rule Views", + date: "23 Oct 2024", + }, + { title: "Introducing Our New Status Page", date: "09 Sept 2024" }, ]} /> ); diff --git a/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx b/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx index 5b1316f..5b59237 100644 --- a/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx +++ b/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx @@ -7,8 +7,6 @@ import { Documentation } from "../../Documentation/Documentation" import { AccountIQ } from "../../AccountIQ/AccountIQ" import { WhatsNew } from "../../WhatsNew/WhatsNew" - - export const DashboardHomePage = () => { return ( <> @@ -16,8 +14,8 @@ export const DashboardHomePage = () => { - + diff --git a/payment-iq/package-lock.json b/payment-iq/package-lock.json index 543d4ec..cc25ad0 100644 --- a/payment-iq/package-lock.json +++ b/payment-iq/package-lock.json @@ -8,20 +8,173 @@ "name": "payment-iq", "version": "0.1.0", "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@mui/icons-material": "^7.1.1", + "@mui/material": "^7.1.2", + "@mui/x-data-grid": "^8.5.2", + "@mui/x-date-pickers": "^8.5.3", + "date-fns": "^4.1.0", + "dayjs": "^1.11.13", + "file-saver": "^2.0.5", "next": "15.3.3", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-date-range": "^2.0.1", + "react-dom": "^19.0.0", + "recharts": "^2.15.3", + "xlsx": "^0.18.5" }, "devDependencies": { "@eslint/eslintrc": "^3", + "@types/file-saver": "^2.0.7", "@types/node": "^20", "@types/react": "^19", + "@types/react-date-range": "^1.4.10", "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "15.3.3", "typescript": "^5" } }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@emnapi/core": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", @@ -55,6 +208,152 @@ "tslib": "^2.4.0" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", + "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", @@ -671,6 +970,424 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.1.2.tgz", + "integrity": "sha512-0gLO1PvbJwSYe5ji021tGj6HFqrtEPMGKK4L1zWwRbhzrWWUumUJvMvJUsIgWQIYQsgOnhq9k2Fc1BxLGHDsAg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.1.2.tgz", + "integrity": "sha512-slqJByDub7Y1UcokrM17BoMBMvn8n7daXFXVoTv0MEH5k3sHjmsH8ql/Mt3s9vQ20cORDr83UZ448TEGcbrXtw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^7.1.2", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.1.2.tgz", + "integrity": "sha512-Z5PYKkA6Kd8vS04zKxJNpwuvt6IoMwqpbidV7RCrRQQKwczIwcNcS8L6GnN4pzFYfEs+N9v6co27DmG07rcnoA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.1", + "@mui/core-downloads-tracker": "^7.1.2", + "@mui/system": "^7.1.1", + "@mui/types": "^7.4.3", + "@mui/utils": "^7.1.1", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.1.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^7.1.1", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", + "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==", + "license": "MIT" + }, + "node_modules/@mui/private-theming": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.1.1.tgz", + "integrity": "sha512-M8NbLUx+armk2ZuaxBkkMk11ultnWmrPlN0Xe3jUEaBChg/mcxa5HWIWS1EE4DF36WRACaAHVAvyekWlDQf0PQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.1", + "@mui/utils": "^7.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.1.1.tgz", + "integrity": "sha512-R2wpzmSN127j26HrCPYVQ53vvMcT5DaKLoWkrfwUYq3cYytL6TQrCH8JBH3z79B6g4nMZZVoaXrxO757AlShaw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.1", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.1.1.tgz", + "integrity": "sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.1", + "@mui/private-theming": "^7.1.1", + "@mui/styled-engine": "^7.1.1", + "@mui/types": "^7.4.3", + "@mui/utils": "^7.1.1", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.3.tgz", + "integrity": "sha512-2UCEiK29vtiZTeLdS2d4GndBKacVyxGvReznGXGr+CzW/YhjIX+OHUdCIczZjzcRAgKBGmE9zCIgoV9FleuyRQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.1" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.1.1.tgz", + "integrity": "sha512-BkOt2q7MBYl7pweY2JWwfrlahhp+uGLR8S+EhiyRaofeRYUWL2YKbSGQvN4hgSN1i8poN0PaUiii1kEMrchvzg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.1", + "@mui/types": "^7.4.3", + "@types/prop-types": "^15.7.14", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", + "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==", + "license": "MIT" + }, + "node_modules/@mui/x-data-grid": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-8.5.3.tgz", + "integrity": "sha512-rA+de5yre16KFIGKRBUwb8kYIdn7SPPrZsBy1P3QxisqhC+Wz2AQg/W6WWv71aFHwplmGwsFUjU6d47Fy/wvXg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/utils": "^7.1.1", + "@mui/x-internals": "8.5.3", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "use-sync-external-store": "^1.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/x-date-pickers": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.5.3.tgz", + "integrity": "sha512-rToJOgIfVN/mG8QPX5RSPcP7QdnNN4yk+37fBztVUnmR7mhiWdUNSHlazGpnRGRqDdr4lXRkJbTjtJLviWkhKg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/utils": "^7.1.1", + "@mui/x-internals": "8.5.3", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", + "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0", + "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0", + "dayjs": "^1.10.7", + "luxon": "^3.0.2", + "moment": "^2.29.4", + "moment-hijri": "^2.1.2 || ^3.0.0", + "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "date-fns": { + "optional": true + }, + "date-fns-jalali": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-hijri": { + "optional": true + }, + "moment-jalaali": { + "optional": true + } + } + }, + "node_modules/@mui/x-internals": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.5.3.tgz", + "integrity": "sha512-ImCg4E3DT3XoDIZO0pNCbB7iw14N+YCFY3J1V28POwCD7P2f3HSIz4jwzM006oYxI6bqeE6LMfpdPRDW6s6dQw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.6", + "@mui/utils": "^7.1.1", + "reselect": "^5.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", @@ -876,6 +1593,16 @@ "node": ">=12.4.0" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -916,6 +1643,69 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -923,6 +1713,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -947,16 +1744,55 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, "node_modules/@types/react": { "version": "19.1.8", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", - "dev": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" } }, + "node_modules/@types/react-date-range": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@types/react-date-range/-/react-date-range-1.4.10.tgz", + "integrity": "sha512-1g3SUKak9ShCH8ZAcLrYT/Ln3t5sI0iDKesAkuAuAXtagpgoI89RTh1APH4RV1IQ0YZQSBQvcQGC2oYaZ++2jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*", + "date-fns": "^2.16.1" + } + }, + "node_modules/@types/react-date-range/node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/@types/react-dom": { "version": "19.1.6", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", @@ -967,6 +1803,15 @@ "@types/react": "^19.0.0" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.34.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", @@ -1546,6 +2391,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1809,6 +2663,21 @@ "node": ">= 0.4" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1905,7 +2774,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -1931,6 +2799,19 @@ ], "license": "CC-BY-4.0" }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1948,12 +2829,36 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -2006,6 +2911,40 @@ "dev": true, "license": "MIT" }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2025,9 +2964,129 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, "license": "MIT" }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -2089,11 +3148,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2107,6 +3181,12 @@ } } }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2173,6 +3253,16 @@ "node": ">=0.10.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2195,6 +3285,21 @@ "dev": true, "license": "MIT" }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-ex/node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, "node_modules/es-abstract": { "version": "1.24.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", @@ -2376,7 +3481,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2811,6 +3915,12 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2818,6 +3928,15 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-equals": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -2885,6 +4004,12 @@ "node": ">=16.0.0" } }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==", + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -2898,6 +4023,12 @@ "node": ">=8" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2952,11 +4083,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3211,7 +4350,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -3220,6 +4358,15 @@ "node": ">= 0.4" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -3234,7 +4381,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -3272,6 +4418,15 @@ "node": ">= 0.4" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -3377,7 +4532,6 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -3716,7 +4870,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -3732,6 +4885,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -3739,6 +4904,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3826,6 +4997,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3842,6 +5019,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -3853,7 +5036,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -3923,7 +5105,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -4025,7 +5206,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4216,7 +5396,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -4225,6 +5404,24 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4249,9 +5446,17 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -4323,7 +5528,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -4371,6 +5575,22 @@ "node": ">=0.10.0" } }, + "node_modules/react-date-range": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-date-range/-/react-date-range-2.0.1.tgz", + "integrity": "sha512-jwKYc9zcjYMg2hWbPht+6BF2wjGG5DkRVNJLRXn2Y0B/QCOOnvQX6YXziZVujVADWmgsBaoQnILdmzYw+Bwh0g==", + "license": "MIT", + "dependencies": { + "classnames": "^2.2.6", + "prop-types": "^15.7.2", + "react-list": "^0.8.13", + "shallow-equal": "^1.2.1" + }, + "peerDependencies": { + "date-fns": "3.0.6 || >=3.0.0", + "react": "^0.14 || ^15.0.0-rc || >=15.0" + } + }, "node_modules/react-dom": { "version": "19.1.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", @@ -4387,7 +5607,84 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, + "license": "MIT" + }, + "node_modules/react-list": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/react-list/-/react-list-0.8.18.tgz", + "integrity": "sha512-1OSdDvzuKuwDJvQNuhXxxL+jTmmdtKg1i6KtYgxI9XR98kbOql1FcSGP+Lcvo91fk3cYng+Z6YkC6X9HRJwxfw==", + "license": "MIT", + "peerDependencies": { + "react": "0.14 || 15 - 19" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/recharts": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/recharts/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, "node_modules/reflect.getprototypeof": { @@ -4434,11 +5731,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", @@ -4459,7 +5761,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -4633,6 +5934,12 @@ "node": ">= 0.4" } }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==", + "license": "MIT" + }, "node_modules/sharp": { "version": "0.34.2", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", @@ -4784,6 +6091,15 @@ "is-arrayish": "^0.3.1" } }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4793,6 +6109,18 @@ "node": ">=0.10.0" } }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "license": "Apache-2.0", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/stable-hash": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", @@ -4981,6 +6309,12 @@ } } }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4998,7 +6332,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5007,6 +6340,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", @@ -5273,6 +6612,37 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5378,6 +6748,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -5388,6 +6776,36 @@ "node": ">=0.10.0" } }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/payment-iq/package.json b/payment-iq/package.json index e819d09..91b50ab 100644 --- a/payment-iq/package.json +++ b/payment-iq/package.json @@ -12,11 +12,15 @@ "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", "@mui/icons-material": "^7.1.1", - "@mui/material": "^7.1.1", + "@mui/material": "^7.1.2", "@mui/x-data-grid": "^8.5.2", + "@mui/x-date-pickers": "^8.5.3", + "date-fns": "^4.1.0", + "dayjs": "^1.11.13", "file-saver": "^2.0.5", "next": "15.3.3", "react": "^19.0.0", + "react-date-range": "^2.0.1", "react-dom": "^19.0.0", "recharts": "^2.15.3", "xlsx": "^0.18.5" @@ -26,6 +30,7 @@ "@types/file-saver": "^2.0.7", "@types/node": "^20", "@types/react": "^19", + "@types/react-date-range": "^1.4.10", "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "15.3.3", diff --git a/payment-iq/yarn.lock b/payment-iq/yarn.lock index 1d30529..cf6b981 100644 --- a/payment-iq/yarn.lock +++ b/payment-iq/yarn.lock @@ -4,7 +4,7 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz" integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: "@babel/helper-validator-identifier" "^7.27.1" @@ -13,7 +13,7 @@ "@babel/generator@^7.27.3": version "7.27.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.5.tgz#3eb01866b345ba261b04911020cbe22dd4be8c8c" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz" integrity sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw== dependencies: "@babel/parser" "^7.27.5" @@ -24,7 +24,7 @@ "@babel/helper-module-imports@^7.16.7": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz" integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== dependencies: "@babel/traverse" "^7.27.1" @@ -32,29 +32,29 @@ "@babel/helper-string-parser@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== "@babel/helper-validator-identifier@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz" integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== "@babel/parser@^7.27.2", "@babel/parser@^7.27.4", "@babel/parser@^7.27.5": version "7.27.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.5.tgz#ed22f871f110aa285a6fd934a0efed621d118826" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz" integrity sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg== dependencies: "@babel/types" "^7.27.3" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.27.1", "@babel/runtime@^7.27.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.27.1", "@babel/runtime@^7.27.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.27.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.6.tgz#ec4070a04d76bae8ddbb10770ba55714a417b7c6" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz" integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q== "@babel/template@^7.27.2": version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz" integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== dependencies: "@babel/code-frame" "^7.27.1" @@ -63,7 +63,7 @@ "@babel/traverse@^7.27.1": version "7.27.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.4.tgz#b0045ac7023c8472c3d35effd7cc9ebd638da6ea" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz" integrity sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA== dependencies: "@babel/code-frame" "^7.27.1" @@ -76,37 +76,15 @@ "@babel/types@^7.27.1", "@babel/types@^7.27.3": version "7.27.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.6.tgz#a434ca7add514d4e646c80f7375c0aa2befc5535" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz" integrity sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" -"@emnapi/core@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" - integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== - dependencies: - "@emnapi/wasi-threads" "1.0.2" - tslib "^2.4.0" - -"@emnapi/runtime@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" - integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== - dependencies: - tslib "^2.4.0" - -"@emnapi/wasi-threads@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" - integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== - dependencies: - tslib "^2.4.0" - "@emotion/babel-plugin@^11.13.5": version "11.13.5" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" + resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz" integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== dependencies: "@babel/helper-module-imports" "^7.16.7" @@ -123,7 +101,7 @@ "@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0": version "11.14.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz" integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== dependencies: "@emotion/memoize" "^0.9.0" @@ -134,24 +112,24 @@ "@emotion/hash@^0.9.2": version "0.9.2" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz" integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== "@emotion/is-prop-valid@^1.3.0": version "1.3.1" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz#8d5cf1132f836d7adbe42cf0b49df7816fc88240" + resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz" integrity sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw== dependencies: "@emotion/memoize" "^0.9.0" "@emotion/memoize@^0.9.0": version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz" integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== -"@emotion/react@^11.14.0": +"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.14.0", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0", "@emotion/react@^11.9.0": version "11.14.0" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" + resolved "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz" integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== dependencies: "@babel/runtime" "^7.18.3" @@ -165,7 +143,7 @@ "@emotion/serialize@^1.3.3": version "1.3.3" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz" integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== dependencies: "@emotion/hash" "^0.9.2" @@ -176,12 +154,12 @@ "@emotion/sheet@^1.4.0": version "1.4.0" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz" integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/styled@^11.14.0": +"@emotion/styled@^11.14.0", "@emotion/styled@^11.3.0", "@emotion/styled@^11.8.1": version "11.14.0" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.0.tgz#f47ca7219b1a295186d7661583376fcea95f0ff3" + resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz" integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA== dependencies: "@babel/runtime" "^7.18.3" @@ -193,39 +171,39 @@ "@emotion/unitless@^0.10.0": version "0.10.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz" integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== "@emotion/use-insertion-effect-with-fallbacks@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" + resolved "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz" integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== "@emotion/utils@^1.4.2": version "1.4.2" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz" integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== "@emotion/weak-memoize@^0.4.0": version "0.4.0" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz" integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": version "4.7.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz" integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== dependencies: eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz" integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/config-array@^0.20.1": version "0.20.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.20.1.tgz#454f89be82b0e5b1ae872c154c7e2f3dd42c3979" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz" integrity sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw== dependencies: "@eslint/object-schema" "^2.1.6" @@ -234,26 +212,26 @@ "@eslint/config-helpers@^0.2.1": version "0.2.3" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.3.tgz#39d6da64ed05d7662659aa7035b54cd55a9f3672" + resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz" integrity sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg== "@eslint/core@^0.14.0": version "0.14.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.14.0.tgz#326289380968eaf7e96f364e1e4cf8f3adf2d003" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz" integrity sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg== dependencies: "@types/json-schema" "^7.0.15" "@eslint/core@^0.15.0": version "0.15.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.0.tgz#8fc04709a7b9a179d9f7d93068fc000cb8c5603d" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz" integrity sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw== dependencies: "@types/json-schema" "^7.0.15" "@eslint/eslintrc@^3", "@eslint/eslintrc@^3.3.1": version "3.3.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz" integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== dependencies: ajv "^6.12.4" @@ -268,17 +246,17 @@ "@eslint/js@9.29.0": version "9.29.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.29.0.tgz#dc6fd117c19825f8430867a662531da36320fe56" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz" integrity sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ== "@eslint/object-schema@^2.1.6": version "2.1.6" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz" integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== "@eslint/plugin-kit@^0.3.1": version "0.3.2" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz#0cad96b134d23a653348e3342f485636b5ef4732" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz" integrity sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg== dependencies: "@eslint/core" "^0.15.0" @@ -286,12 +264,12 @@ "@humanfs/core@^0.19.1": version "0.19.1" - resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz" integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== "@humanfs/node@^0.16.6": version "0.16.6" - resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz" integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== dependencies: "@humanfs/core" "^0.19.1" @@ -299,145 +277,34 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/retry@^0.3.0": version "0.3.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz" integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== "@humanwhocodes/retry@^0.4.2": version "0.4.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== "@img/sharp-darwin-arm64@0.34.2": version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz#65049ef7c6be7857da742cd028f97602ce209635" + resolved "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz" integrity sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg== optionalDependencies: "@img/sharp-libvips-darwin-arm64" "1.1.0" -"@img/sharp-darwin-x64@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz#d37ff7c75c46d5a68a3756e3f1924ef7ca7b285e" - integrity sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g== - optionalDependencies: - "@img/sharp-libvips-darwin-x64" "1.1.0" - "@img/sharp-libvips-darwin-arm64@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz#843f7c09c7245dc0d3cfec2b3c83bb08799a704f" + resolved "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz" integrity sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA== -"@img/sharp-libvips-darwin-x64@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz#1239c24426c06a8e833815562f78047a3bfbaaf8" - integrity sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ== - -"@img/sharp-libvips-linux-arm64@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz#20d276cefd903ee483f0441ba35961679c286315" - integrity sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew== - -"@img/sharp-libvips-linux-arm@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz#067c0b566eae8063738cf1b1db8f8a8573b5465c" - integrity sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA== - -"@img/sharp-libvips-linux-ppc64@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz#682334595f2ca00e0a07a675ba170af165162802" - integrity sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ== - -"@img/sharp-libvips-linux-s390x@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz#82fcd68444b3666384235279c145c2b28d8ee302" - integrity sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA== - -"@img/sharp-libvips-linux-x64@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz#65b2b908bf47156b0724fde9095676c83a18cf5a" - integrity sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q== - -"@img/sharp-libvips-linuxmusl-arm64@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz#72accf924e80b081c8db83b900b444a67c203f01" - integrity sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w== - -"@img/sharp-libvips-linuxmusl-x64@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz#1fa052737e203f46bf44192acd01f9faf11522d7" - integrity sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A== - -"@img/sharp-linux-arm64@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz#c9690fac5f3137eaab3f7ad6065390d10f66f1fa" - integrity sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q== - optionalDependencies: - "@img/sharp-libvips-linux-arm64" "1.1.0" - -"@img/sharp-linux-arm@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz#771dd2ec645f85f98441359bfc118afaf38cbd8b" - integrity sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ== - optionalDependencies: - "@img/sharp-libvips-linux-arm" "1.1.0" - -"@img/sharp-linux-s390x@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz#82132d158abff57bd90b53574f2865f72f94e6c8" - integrity sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw== - optionalDependencies: - "@img/sharp-libvips-linux-s390x" "1.1.0" - -"@img/sharp-linux-x64@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz#d815fb87899d462b28b62a9252ad127f02fe0740" - integrity sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ== - optionalDependencies: - "@img/sharp-libvips-linux-x64" "1.1.0" - -"@img/sharp-linuxmusl-arm64@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz#cfac45b2abbc04628f676e123bfe3aeb300266c7" - integrity sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA== - optionalDependencies: - "@img/sharp-libvips-linuxmusl-arm64" "1.1.0" - -"@img/sharp-linuxmusl-x64@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz#b876c23ff51d0fb6d9f3b0a07e2f4d1436c203ad" - integrity sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA== - optionalDependencies: - "@img/sharp-libvips-linuxmusl-x64" "1.1.0" - -"@img/sharp-wasm32@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz#b1dd0bab547dccf517586eb1fa5852160bba3b82" - integrity sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ== - dependencies: - "@emnapi/runtime" "^1.4.3" - -"@img/sharp-win32-arm64@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz#f37bee0f60c167f825a09d2b8de6849b823e8b30" - integrity sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ== - -"@img/sharp-win32-ia32@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz#8fc30b6655bc6ff8910344a2020d334aa6361672" - integrity sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw== - -"@img/sharp-win32-x64@0.34.2": - version "0.34.2" - resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz#ecf19250f8fe35de684aa2b0ec6f773b3447247b" - integrity sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw== - "@jridgewell/gen-mapping@^0.3.5": version "0.3.8" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz" integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== dependencies: "@jridgewell/set-array" "^1.2.1" @@ -446,46 +313,46 @@ "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@mui/core-downloads-tracker@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-7.1.1.tgz#43532ccf57be19055eb20e7802508520293cf286" - integrity sha512-yBckQs4aQ8mqukLnPC6ivIRv6guhaXi8snVl00VtyojBbm+l6VbVhyTSZ68Abcx7Ah8B+GZhrB7BOli+e+9LkQ== +"@mui/core-downloads-tracker@^7.1.2": + version "7.1.2" + resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.1.2.tgz" + integrity sha512-0gLO1PvbJwSYe5ji021tGj6HFqrtEPMGKK4L1zWwRbhzrWWUumUJvMvJUsIgWQIYQsgOnhq9k2Fc1BxLGHDsAg== "@mui/icons-material@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-7.1.1.tgz#0e0e9640579da5e4096f0449438337c448bc5a5c" - integrity sha512-X37+Yc8QpEnl0sYmz+WcLFy2dWgNRzbswDzLPXG7QU1XDVlP5TPp1HXjdmCupOWLL/I9m1fyhcyZl8/HPpp/Cg== + version "7.1.2" + resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.1.2.tgz" + integrity sha512-slqJByDub7Y1UcokrM17BoMBMvn8n7daXFXVoTv0MEH5k3sHjmsH8ql/Mt3s9vQ20cORDr83UZ448TEGcbrXtw== dependencies: "@babel/runtime" "^7.27.1" -"@mui/material@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-7.1.1.tgz#5f75b25936925be14cb34abe0489cda82a6f8413" - integrity sha512-mTpdmdZCaHCGOH3SrYM41+XKvNL0iQfM9KlYgpSjgadXx/fEKhhvOktxm8++Xw6FFeOHoOiV+lzOI8X1rsv71A== +"@mui/material@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/material@^7.1.2": + version "7.1.2" + resolved "https://registry.npmjs.org/@mui/material/-/material-7.1.2.tgz" + integrity sha512-Z5PYKkA6Kd8vS04zKxJNpwuvt6IoMwqpbidV7RCrRQQKwczIwcNcS8L6GnN4pzFYfEs+N9v6co27DmG07rcnoA== dependencies: "@babel/runtime" "^7.27.1" - "@mui/core-downloads-tracker" "^7.1.1" + "@mui/core-downloads-tracker" "^7.1.2" "@mui/system" "^7.1.1" "@mui/types" "^7.4.3" "@mui/utils" "^7.1.1" @@ -499,7 +366,7 @@ "@mui/private-theming@^7.1.1": version "7.1.1" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-7.1.1.tgz#c2ecc57a9b97fbfdd850430de500c42a0f2571fe" + resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.1.1.tgz" integrity sha512-M8NbLUx+armk2ZuaxBkkMk11ultnWmrPlN0Xe3jUEaBChg/mcxa5HWIWS1EE4DF36WRACaAHVAvyekWlDQf0PQ== dependencies: "@babel/runtime" "^7.27.1" @@ -508,7 +375,7 @@ "@mui/styled-engine@^7.1.1": version "7.1.1" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-7.1.1.tgz#2524e0f4e22782b42ea4c32f36f9e19a50ccf55a" + resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.1.1.tgz" integrity sha512-R2wpzmSN127j26HrCPYVQ53vvMcT5DaKLoWkrfwUYq3cYytL6TQrCH8JBH3z79B6g4nMZZVoaXrxO757AlShaw== dependencies: "@babel/runtime" "^7.27.1" @@ -518,9 +385,9 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^7.1.1": +"@mui/system@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/system@^7.1.1": version "7.1.1" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-7.1.1.tgz#eff52e597b0bfed8ecf2e973f4575ef737430727" + resolved "https://registry.npmjs.org/@mui/system/-/system-7.1.1.tgz" integrity sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA== dependencies: "@babel/runtime" "^7.27.1" @@ -534,14 +401,14 @@ "@mui/types@^7.4.3": version "7.4.3" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.4.3.tgz#b205ee3404db0478cd93227fc21967e2cb8630fe" + resolved "https://registry.npmjs.org/@mui/types/-/types-7.4.3.tgz" integrity sha512-2UCEiK29vtiZTeLdS2d4GndBKacVyxGvReznGXGr+CzW/YhjIX+OHUdCIczZjzcRAgKBGmE9zCIgoV9FleuyRQ== dependencies: "@babel/runtime" "^7.27.1" "@mui/utils@^7.1.1": version "7.1.1" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-7.1.1.tgz#de315ec45ac9e16c637dcc2b32cd7912edb4e234" + resolved "https://registry.npmjs.org/@mui/utils/-/utils-7.1.1.tgz" integrity sha512-BkOt2q7MBYl7pweY2JWwfrlahhp+uGLR8S+EhiyRaofeRYUWL2YKbSGQvN4hgSN1i8poN0PaUiii1kEMrchvzg== dependencies: "@babel/runtime" "^7.27.1" @@ -552,103 +419,72 @@ react-is "^19.1.0" "@mui/x-data-grid@^8.5.2": - version "8.5.2" - resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-8.5.2.tgz#1788587711d2e49fabe3b8f6ccd5e38ef762f4b1" - integrity sha512-4KzawLZqRKp3KcGKsTDVz7zkEjACllQD5Zb8ds1QKlA6C3/oIoSU7PsemFLj+RL3rT5aORsLMBl97/egQ5tUhA== + version "8.5.3" + resolved "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-8.5.3.tgz" + integrity sha512-rA+de5yre16KFIGKRBUwb8kYIdn7SPPrZsBy1P3QxisqhC+Wz2AQg/W6WWv71aFHwplmGwsFUjU6d47Fy/wvXg== dependencies: "@babel/runtime" "^7.27.6" "@mui/utils" "^7.1.1" - "@mui/x-internals" "8.5.2" + "@mui/x-internals" "8.5.3" clsx "^2.1.1" prop-types "^15.8.1" use-sync-external-store "^1.5.0" -"@mui/x-internals@8.5.2": - version "8.5.2" - resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-8.5.2.tgz#fba1bbbff2866ed118761c8fc4fcc7909d167f53" - integrity sha512-5YhB2AekK7G8d0YrAjg3WNf0uy3V73JD98WNxJhbIlCraQgl8QOQzr2zNO7MAf/X7mZQtjpjuAsiG3+gI2NVyg== +"@mui/x-date-pickers@^8.5.3": + version "8.5.3" + resolved "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.5.3.tgz" + integrity sha512-rToJOgIfVN/mG8QPX5RSPcP7QdnNN4yk+37fBztVUnmR7mhiWdUNSHlazGpnRGRqDdr4lXRkJbTjtJLviWkhKg== + dependencies: + "@babel/runtime" "^7.27.6" + "@mui/utils" "^7.1.1" + "@mui/x-internals" "8.5.3" + "@types/react-transition-group" "^4.4.12" + clsx "^2.1.1" + prop-types "^15.8.1" + react-transition-group "^4.4.5" + +"@mui/x-internals@8.5.3": + version "8.5.3" + resolved "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.5.3.tgz" + integrity sha512-ImCg4E3DT3XoDIZO0pNCbB7iw14N+YCFY3J1V28POwCD7P2f3HSIz4jwzM006oYxI6bqeE6LMfpdPRDW6s6dQw== dependencies: "@babel/runtime" "^7.27.6" "@mui/utils" "^7.1.1" reselect "^5.1.1" -"@napi-rs/wasm-runtime@^0.2.11": - version "0.2.11" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz#192c1610e1625048089ab4e35bc0649ce478500e" - integrity sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA== - dependencies: - "@emnapi/core" "^1.4.3" - "@emnapi/runtime" "^1.4.3" - "@tybys/wasm-util" "^0.9.0" - "@next/env@15.3.3": version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/env/-/env-15.3.3.tgz#8c5548756df93efff1bf4bb4e9e430a763978155" + resolved "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz" integrity sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw== "@next/eslint-plugin-next@15.3.3": version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.3.tgz#04a378b405f65f61165085f84971ccb4bbcf2f0a" + resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.3.tgz" integrity sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q== dependencies: fast-glob "3.3.1" "@next/swc-darwin-arm64@15.3.3": version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz#994de8515cdfb74d337bdad645c33605de44c68b" + resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz" integrity sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg== -"@next/swc-darwin-x64@15.3.3": - version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz#71588bad245180ffd1af1e1f894477287e739eb0" - integrity sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw== - -"@next/swc-linux-arm64-gnu@15.3.3": - version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz#66a15f749c14f04a89f8c7e21c7a8d343fc34e6e" - integrity sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw== - -"@next/swc-linux-arm64-musl@15.3.3": - version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz#14bd66213f7f33d6909574750bcb05037221a2ac" - integrity sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA== - -"@next/swc-linux-x64-gnu@15.3.3": - version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz#4a19434545e5e752d9a3ed71f9b34982725f6293" - integrity sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw== - -"@next/swc-linux-x64-musl@15.3.3": - version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz#41ab140dd0a04ab7291adbec5836c1ce251a588c" - integrity sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw== - -"@next/swc-win32-arm64-msvc@15.3.3": - version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz#fcd1d7e0007b7b73d1acdbf0ad6d91f7aa2deb15" - integrity sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ== - -"@next/swc-win32-x64-msvc@15.3.3": - version "15.3.3" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz#c0e33e069d7922dd0546cac77a0247ad81d4a1aa" - integrity sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -656,151 +492,152 @@ "@nolyfill/is-core-module@1.0.39": version "1.0.39" - resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" + resolved "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz" integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== "@popperjs/core@^2.11.8": version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== "@rtsao/scc@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + resolved "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== "@rushstack/eslint-patch@^1.10.3": version "1.11.0" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz#75dce8e972f90bba488e2b0cc677fb233aa357ab" + resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz" integrity sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ== "@swc/counter@0.1.3": version "0.1.3" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== "@swc/helpers@0.5.15": version "0.5.15" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz" integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== dependencies: tslib "^2.8.0" -"@tybys/wasm-util@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" - integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== - dependencies: - tslib "^2.4.0" - "@types/d3-array@^3.0.3": version "3.2.1" - resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.2.1.tgz#1f6658e3d2006c4fceac53fde464166859f8b8c5" + resolved "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz" integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg== "@types/d3-color@*": version "3.1.3" - resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2" + resolved "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz" integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== "@types/d3-ease@^3.0.0": version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b" + resolved "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz" integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== "@types/d3-interpolate@^3.0.1": version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c" + resolved "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz" integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== dependencies: "@types/d3-color" "*" "@types/d3-path@*": version "3.1.1" - resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.1.tgz#f632b380c3aca1dba8e34aa049bcd6a4af23df8a" + resolved "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz" integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg== "@types/d3-scale@^4.0.2": version "4.0.9" - resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.9.tgz#57a2f707242e6fe1de81ad7bfcccaaf606179afb" + resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz" integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw== dependencies: "@types/d3-time" "*" "@types/d3-shape@^3.1.0": version "3.1.7" - resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.7.tgz#2b7b423dc2dfe69c8c93596e673e37443348c555" + resolved "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz" integrity sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg== dependencies: "@types/d3-path" "*" "@types/d3-time@*", "@types/d3-time@^3.0.0": version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.4.tgz#8472feecd639691450dd8000eb33edd444e1323f" + resolved "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz" integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g== "@types/d3-timer@^3.0.0": version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" + resolved "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz" integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== "@types/estree@^1.0.6": version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/file-saver@^2.0.7": version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/file-saver/-/file-saver-2.0.7.tgz#8dbb2f24bdc7486c54aa854eb414940bbd056f7d" + resolved "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz" integrity sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A== "@types/json-schema@^7.0.15": version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/node@^20": version "20.19.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.1.tgz#cef8bc04aaae86824b5bbe2570769358592bcc59" + resolved "https://registry.npmjs.org/@types/node/-/node-20.19.1.tgz" integrity sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA== dependencies: undici-types "~6.21.0" "@types/parse-json@^4.0.0": version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/prop-types@^15.7.14": version "15.7.15" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz" integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== +"@types/react-date-range@^1.4.10": + version "1.4.10" + resolved "https://registry.npmjs.org/@types/react-date-range/-/react-date-range-1.4.10.tgz" + integrity sha512-1g3SUKak9ShCH8ZAcLrYT/Ln3t5sI0iDKesAkuAuAXtagpgoI89RTh1APH4RV1IQ0YZQSBQvcQGC2oYaZ++2jw== + dependencies: + "@types/react" "*" + date-fns "^2.16.1" + "@types/react-dom@^19": version "19.1.6" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.1.6.tgz#4af629da0e9f9c0f506fc4d1caa610399c595d64" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz" integrity sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw== "@types/react-transition-group@^4.4.12": version "4.4.12" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@^19": +"@types/react@*", "@types/react@^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react@^19", "@types/react@^19.0.0": version "19.1.8" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.8.tgz#ff8395f2afb764597265ced15f8dddb0720ae1c3" + resolved "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz" integrity sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g== dependencies: csstype "^3.0.2" "@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz#56cf35b89383eaf2bdcf602f5bbdac6dbb11e51b" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz" integrity sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ== dependencies: "@eslint-community/regexpp" "^4.10.0" @@ -813,9 +650,9 @@ natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser@^8.34.1": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.34.1.tgz#f102357ab3a02d5b8aa789655905662cc5093067" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz" integrity sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA== dependencies: "@typescript-eslint/scope-manager" "8.34.1" @@ -826,7 +663,7 @@ "@typescript-eslint/project-service@8.34.1": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.34.1.tgz#20501f8b87202c45f5e70a5b24dcdcb8fe12d460" + resolved "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz" integrity sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA== dependencies: "@typescript-eslint/tsconfig-utils" "^8.34.1" @@ -835,20 +672,20 @@ "@typescript-eslint/scope-manager@8.34.1": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz#727ea43441f4d23d5c73d34195427d85042e5117" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz" integrity sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA== dependencies: "@typescript-eslint/types" "8.34.1" "@typescript-eslint/visitor-keys" "8.34.1" -"@typescript-eslint/tsconfig-utils@8.34.1", "@typescript-eslint/tsconfig-utils@^8.34.1": +"@typescript-eslint/tsconfig-utils@^8.34.1", "@typescript-eslint/tsconfig-utils@8.34.1": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz#d6abb1b1e9f1f1c83ac92051c8fbf2dbc4dc9f5e" + resolved "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz" integrity sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg== "@typescript-eslint/type-utils@8.34.1": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz#df860d8edefbfe142473ea4defb7408edb0c379e" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz" integrity sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g== dependencies: "@typescript-eslint/typescript-estree" "8.34.1" @@ -856,14 +693,14 @@ debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.34.1", "@typescript-eslint/types@^8.34.1": +"@typescript-eslint/types@^8.34.1", "@typescript-eslint/types@8.34.1": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.34.1.tgz#565a46a251580dae674dac5aafa8eb14b8322a35" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz" integrity sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA== "@typescript-eslint/typescript-estree@8.34.1": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz#befdb042a6bc44fdad27429b2d3b679c80daad71" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz" integrity sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA== dependencies: "@typescript-eslint/project-service" "8.34.1" @@ -879,7 +716,7 @@ "@typescript-eslint/utils@8.34.1": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.34.1.tgz#f98c9b0c5cae407e34f5131cac0f3a74347a398e" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz" integrity sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ== dependencies: "@eslint-community/eslint-utils" "^4.7.0" @@ -889,127 +726,35 @@ "@typescript-eslint/visitor-keys@8.34.1": version "8.34.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz#28a1987ea3542ccafb92aa792726a304b39531cf" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz" integrity sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw== dependencies: "@typescript-eslint/types" "8.34.1" eslint-visitor-keys "^4.2.1" -"@unrs/resolver-binding-android-arm-eabi@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.0.tgz#e91317973356eb845c9186db5f9ec43e8d0002eb" - integrity sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg== - -"@unrs/resolver-binding-android-arm64@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.0.tgz#fbdd79b2a8e478e02e1c0751dfbc100017522161" - integrity sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA== - "@unrs/resolver-binding-darwin-arm64@1.9.0": version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz#24bb42710227ae2f4fea191151f3acc6a75b50d6" + resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz" integrity sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A== -"@unrs/resolver-binding-darwin-x64@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.0.tgz#4a205940ec311ac8396c3f25043644b78cc98a20" - integrity sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw== - -"@unrs/resolver-binding-freebsd-x64@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.0.tgz#ed82e000f7248011696ecc8894f574caa197b0be" - integrity sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA== - -"@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.0.tgz#534a8b32118590f7fb9edd21c6576243a89a8aad" - integrity sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg== - -"@unrs/resolver-binding-linux-arm-musleabihf@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.0.tgz#b31718752e77cecbbcf7ba1e01dea97c1a5ee7e0" - integrity sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA== - -"@unrs/resolver-binding-linux-arm64-gnu@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.0.tgz#0f11ba195020cfa869533fb74733d68162349d14" - integrity sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA== - -"@unrs/resolver-binding-linux-arm64-musl@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.0.tgz#8b6bc086cf9efaa22e8f2fef381786d6636b8e19" - integrity sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ== - -"@unrs/resolver-binding-linux-ppc64-gnu@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.0.tgz#5cd15899af31c2bbf90bfca5f798f64a16770e23" - integrity sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ== - -"@unrs/resolver-binding-linux-riscv64-gnu@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.0.tgz#4f2c75af52437eb10b48ea5b72750fb65fb174be" - integrity sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w== - -"@unrs/resolver-binding-linux-riscv64-musl@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.0.tgz#6a87e82e0dd39d34ff37ddba6accf73cdb396e86" - integrity sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw== - -"@unrs/resolver-binding-linux-s390x-gnu@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.0.tgz#6524cc3c01309022de86c4a7317fe7d9f9fb855c" - integrity sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA== - -"@unrs/resolver-binding-linux-x64-gnu@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.0.tgz#85fb8a45dccf3823cd73ea4b61b2c3f2e8ab6653" - integrity sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA== - -"@unrs/resolver-binding-linux-x64-musl@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.0.tgz#235e539da5872df51c03e0e050a1c715e25044ca" - integrity sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg== - -"@unrs/resolver-binding-wasm32-wasi@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.0.tgz#1bc614ce2ba61330c16bffa1e50f41d95d25c0a6" - integrity sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ== - dependencies: - "@napi-rs/wasm-runtime" "^0.2.11" - -"@unrs/resolver-binding-win32-arm64-msvc@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.0.tgz#0d8704275a9f2634d81b35d8a00a2f4bd8dec7fa" - integrity sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ== - -"@unrs/resolver-binding-win32-ia32-msvc@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.0.tgz#46909cbeb9a38b3f31a64833fe03aa1aebb8da2b" - integrity sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A== - -"@unrs/resolver-binding-win32-x64-msvc@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.0.tgz#708b957d5d66543c45240b4c6b45ee63ed59b6b7" - integrity sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw== - acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.15.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.15.0: version "8.15.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== adler-32@~1.3.0: version "1.3.1" - resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.3.1.tgz#1dbf0b36dda0012189a32b3679061932df1821e2" + resolved "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz" integrity sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A== ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1019,24 +764,24 @@ ajv@^6.12.4: ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-query@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz" integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz" integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: call-bound "^1.0.3" @@ -1044,7 +789,7 @@ array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: array-includes@^3.1.6, array-includes@^3.1.8: version "3.1.9" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz" integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== dependencies: call-bind "^1.0.8" @@ -1058,7 +803,7 @@ array-includes@^3.1.6, array-includes@^3.1.8: array.prototype.findlast@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + resolved "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz" integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: call-bind "^1.0.7" @@ -1070,7 +815,7 @@ array.prototype.findlast@^1.2.5: array.prototype.findlastindex@^1.2.5: version "1.2.6" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz" integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== dependencies: call-bind "^1.0.8" @@ -1083,7 +828,7 @@ array.prototype.findlastindex@^1.2.5: array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz" integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== dependencies: call-bind "^1.0.8" @@ -1093,7 +838,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz" integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== dependencies: call-bind "^1.0.8" @@ -1103,7 +848,7 @@ array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: array.prototype.tosorted@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz" integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: call-bind "^1.0.7" @@ -1114,7 +859,7 @@ array.prototype.tosorted@^1.1.4: arraybuffer.prototype.slice@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz" integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: array-buffer-byte-length "^1.0.1" @@ -1127,34 +872,34 @@ arraybuffer.prototype.slice@^1.0.4: ast-types-flow@^0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== async-function@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + resolved "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz" integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== available-typed-arrays@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: possible-typed-array-names "^1.0.0" axe-core@^4.10.0: version "4.10.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz" integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== axobject-query@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz" integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== babel-plugin-macros@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz" integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== dependencies: "@babel/runtime" "^7.12.5" @@ -1163,12 +908,12 @@ babel-plugin-macros@^3.1.0: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== brace-expansion@^1.1.7: version "1.1.12" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz" integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" @@ -1176,28 +921,28 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz" integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" braces@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" busboy@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== dependencies: streamsearch "^1.1.0" call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" @@ -1205,7 +950,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- call-bind@^1.0.7, call-bind@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: call-bind-apply-helpers "^1.0.0" @@ -1215,7 +960,7 @@ call-bind@^1.0.7, call-bind@^1.0.8: call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: call-bind-apply-helpers "^1.0.2" @@ -1223,17 +968,17 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001579: version "1.0.30001723" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz#c4f3174f02089720736e1887eab345e09bb10944" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz" integrity sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw== cfb@~1.2.1: version "1.2.2" - resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.2.tgz#94e687628c700e5155436dac05f74e08df23bc44" + resolved "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz" integrity sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA== dependencies: adler-32 "~1.3.0" @@ -1241,42 +986,47 @@ cfb@~1.2.1: chalk@^4.0.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +classnames@^2.2.6: + version "2.5.1" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + client-only@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== clsx@^2.0.0, clsx@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== codepage@~1.15.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.15.0.tgz#2e00519024b39424ec66eeb3ec07227e692618ab" + resolved "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz" integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA== color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.9.0: version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -1284,7 +1034,7 @@ color-string@^1.9.0: color@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== dependencies: color-convert "^2.0.1" @@ -1292,17 +1042,17 @@ color@^4.2.3: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== convert-source-map@^1.5.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== cosmiconfig@^7.0.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" @@ -1313,12 +1063,12 @@ cosmiconfig@^7.0.0: crc-32@~1.2.0, crc-32@~1.2.1: version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== cross-spawn@^7.0.6: version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -1327,46 +1077,46 @@ cross-spawn@^7.0.6: csstype@^3.0.2, csstype@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -"d3-array@2 - 3", "d3-array@2.10.0 - 3", d3-array@^3.1.6: +d3-array@^3.1.6, "d3-array@2 - 3", "d3-array@2.10.0 - 3": version "3.2.4" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" + resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== dependencies: internmap "1 - 2" "d3-color@1 - 3": version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" + resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz" integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== d3-ease@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" + resolved "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz" integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== "d3-format@1 - 3": version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" + resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== -"d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: +d3-interpolate@^3.0.1, "d3-interpolate@1.2.0 - 3": version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" + resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz" integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== dependencies: d3-color "1 - 3" d3-path@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz" integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== d3-scale@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" + resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz" integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== dependencies: d3-array "2.10.0 - 3" @@ -1377,38 +1127,38 @@ d3-scale@^4.0.2: d3-shape@^3.1.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz" integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== dependencies: d3-path "^3.1.0" "d3-time-format@2 - 4": version "4.1.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" + resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz" integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== dependencies: d3-time "1 - 3" -"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.0.0: +d3-time@^3.0.0, "d3-time@1 - 3", "d3-time@2.1.1 - 3": version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" + resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz" integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== dependencies: d3-array "2 - 3" d3-timer@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" + resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== damerau-levenshtein@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== data-view-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz" integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== dependencies: call-bound "^1.0.3" @@ -1417,7 +1167,7 @@ data-view-buffer@^1.0.2: data-view-byte-length@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz" integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== dependencies: call-bound "^1.0.3" @@ -1426,40 +1176,57 @@ data-view-byte-length@^1.0.2: data-view-byte-offset@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz" integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== dependencies: call-bound "^1.0.2" es-errors "^1.3.0" is-data-view "^1.0.1" +date-fns@^2.16.1: + version "2.30.0" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +"date-fns@^2.25.0 || ^3.2.0 || ^4.0.0", date-fns@^4.1.0, "date-fns@3.0.6 || >=3.0.0": + version "4.1.0" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz" + integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== + +dayjs@^1.10.7, dayjs@^1.11.13: + version "1.11.13" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz" integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" decimal.js-light@^2.4.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" + resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -1468,7 +1235,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" @@ -1477,19 +1244,19 @@ define-properties@^1.1.3, define-properties@^1.2.1: detect-libc@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz" integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" dom-helpers@^5.0.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz" integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: "@babel/runtime" "^7.8.7" @@ -1497,7 +1264,7 @@ dom-helpers@^5.0.1: dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" @@ -1506,19 +1273,19 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0: version "1.24.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz" integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== dependencies: array-buffer-byte-length "^1.0.2" @@ -1578,17 +1345,17 @@ es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23 es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-iterator-helpers@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz" integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== dependencies: call-bind "^1.0.8" @@ -1610,14 +1377,14 @@ es-iterator-helpers@^1.2.1: es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: es-errors "^1.3.0" @@ -1627,14 +1394,14 @@ es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz" integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== dependencies: hasown "^2.0.2" es-to-primitive@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz" integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: is-callable "^1.2.7" @@ -1643,12 +1410,12 @@ es-to-primitive@^1.3.0: escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-next@15.3.3: version "15.3.3" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-15.3.3.tgz#356ca4b8647a6024c332260addcd261d3b4b6c6d" + resolved "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.3.tgz" integrity sha512-QJLv/Ouk2vZnxL4b67njJwTLjTf7uZRltI0LL4GERYR4qMF5z08+gxkfODAeaK7TiC6o+cER91bDaEnwrTWV6Q== dependencies: "@next/eslint-plugin-next" "15.3.3" @@ -1664,7 +1431,7 @@ eslint-config-next@15.3.3: eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" @@ -1673,7 +1440,7 @@ eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: eslint-import-resolver-typescript@^3.5.2: version "3.10.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz#23dac32efa86a88e2b8232eb244ac499ad636db2" + resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz" integrity sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ== dependencies: "@nolyfill/is-core-module" "1.0.39" @@ -1686,14 +1453,14 @@ eslint-import-resolver-typescript@^3.5.2: eslint-module-utils@^2.12.0: version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz" integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== dependencies: debug "^3.2.7" -eslint-plugin-import@^2.31.0: +eslint-plugin-import@*, eslint-plugin-import@^2.31.0: version "2.31.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz" integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== dependencies: "@rtsao/scc" "^1.1.0" @@ -1718,7 +1485,7 @@ eslint-plugin-import@^2.31.0: eslint-plugin-jsx-a11y@^6.10.0: version "6.10.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz" integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== dependencies: aria-query "^5.3.2" @@ -1739,12 +1506,12 @@ eslint-plugin-jsx-a11y@^6.10.0: eslint-plugin-react-hooks@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz" integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== eslint-plugin-react@^7.37.0: version "7.37.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz" integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== dependencies: array-includes "^3.1.8" @@ -1768,7 +1535,7 @@ eslint-plugin-react@^7.37.0: eslint-scope@^8.4.0: version "8.4.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz" integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" @@ -1776,17 +1543,17 @@ eslint-scope@^8.4.0: eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint-visitor-keys@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@^9: +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.23.0 || ^8.0.0 || ^9.0.0", "eslint@^8.57.0 || ^9.0.0", eslint@^9: version "9.29.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.29.0.tgz#65e3db3b7e5a5b04a8af541741a0f3648d0a81a6" + resolved "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz" integrity sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -1827,7 +1594,7 @@ eslint@^9: espree@^10.0.1, espree@^10.4.0: version "10.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + resolved "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz" integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: acorn "^8.15.0" @@ -1836,57 +1603,46 @@ espree@^10.0.1, espree@^10.4.0: esquery@^1.5.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== eventemitter3@^4.0.1: version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-equals@^5.0.1: version "5.2.2" - resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.2.2.tgz#885d7bfb079fac0ce0e8450374bce29e9b742484" + resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz" integrity sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw== -fast-glob@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-glob@^3.3.2: version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -1895,55 +1651,66 @@ fast-glob@^3.3.2: merge2 "^1.3.0" micromatch "^4.0.8" +fast-glob@3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" fdir@^6.4.4: version "6.4.6" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz" integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== file-entry-cache@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: flat-cache "^4.0.0" file-saver@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" + resolved "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz" integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-root@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -1951,7 +1718,7 @@ find-up@^5.0.0: flat-cache@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" @@ -1959,29 +1726,29 @@ flat-cache@^4.0.0: flatted@^3.2.9: version "3.3.3" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== for-each@^0.3.3, for-each@^0.3.5: version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz" integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: is-callable "^1.2.7" frac@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" + resolved "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz" integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: version "1.1.8" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz" integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: call-bind "^1.0.8" @@ -1993,12 +1760,12 @@ function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: call-bind-apply-helpers "^1.0.2" @@ -2014,7 +1781,7 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@ get-proto@^1.0.0, get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" @@ -2022,7 +1789,7 @@ get-proto@^1.0.0, get-proto@^1.0.1: get-symbol-description@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz" integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: call-bound "^1.0.3" @@ -2031,38 +1798,38 @@ get-symbol-description@^1.1.0: get-tsconfig@^4.10.0: version "4.10.1" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz" integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== dependencies: resolve-pkg-maps "^1.0.0" glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^14.0.0: version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== globalthis@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: define-properties "^1.2.1" @@ -2070,77 +1837,77 @@ globalthis@^1.0.4: gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-bigints@^1.0.2: version "1.1.0" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz" integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-proto@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz" integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== dependencies: dunder-proto "^1.0.0" has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" hasown@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" hoist-non-react-statics@^3.3.1: version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" ignore@^5.2.0: version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== ignore@^7.0.0: version "7.0.5" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz" integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== import-fresh@^3.2.1: version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" @@ -2148,12 +1915,12 @@ import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== internal-slot@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz" integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: es-errors "^1.3.0" @@ -2162,12 +1929,12 @@ internal-slot@^1.1.0: "internmap@1 - 2": version "2.0.3" - resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" + resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz" integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz" integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: call-bind "^1.0.8" @@ -2176,17 +1943,17 @@ is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-async-function@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz" integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== dependencies: async-function "^1.0.0" @@ -2197,14 +1964,14 @@ is-async-function@^2.0.0: is-bigint@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz" integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: has-bigints "^1.0.2" is-boolean-object@^1.2.1: version "1.2.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz" integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: call-bound "^1.0.3" @@ -2212,26 +1979,26 @@ is-boolean-object@^1.2.1: is-bun-module@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-2.0.0.tgz#4d7859a87c0fcac950c95e666730e745eae8bddd" + resolved "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz" integrity sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ== dependencies: semver "^7.7.1" is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" is-data-view@^1.0.1, is-data-view@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz" integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== dependencies: call-bound "^1.0.2" @@ -2240,7 +2007,7 @@ is-data-view@^1.0.1, is-data-view@^1.0.2: is-date-object@^1.0.5, is-date-object@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz" integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: call-bound "^1.0.2" @@ -2248,19 +2015,19 @@ is-date-object@^1.0.5, is-date-object@^1.1.0: is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finalizationregistry@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz" integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== dependencies: call-bound "^1.0.3" is-generator-function@^1.0.10: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz" integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: call-bound "^1.0.3" @@ -2270,24 +2037,24 @@ is-generator-function@^1.0.10: is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-map@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== is-negative-zero@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz" integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: call-bound "^1.0.3" @@ -2295,12 +2062,12 @@ is-number-object@^1.1.1: is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-regex@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: call-bound "^1.0.2" @@ -2310,19 +2077,19 @@ is-regex@^1.2.1: is-set@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== is-shared-array-buffer@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz" integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: call-bound "^1.0.3" is-string@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz" integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: call-bound "^1.0.3" @@ -2330,7 +2097,7 @@ is-string@^1.1.1: is-symbol@^1.0.4, is-symbol@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz" integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: call-bound "^1.0.2" @@ -2339,26 +2106,26 @@ is-symbol@^1.0.4, is-symbol@^1.1.1: is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: which-typed-array "^1.1.16" is-weakmap@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz" integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2, is-weakref@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz" integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: call-bound "^1.0.3" is-weakset@^2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz" integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: call-bound "^1.0.3" @@ -2366,17 +2133,17 @@ is-weakset@^2.0.3: isarray@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== iterator.prototype@^1.1.4: version "1.1.5" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz" integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== dependencies: define-data-property "^1.1.4" @@ -2388,51 +2155,51 @@ iterator.prototype@^1.1.4: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsesc@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== dependencies: array-includes "^3.1.6" @@ -2442,26 +2209,26 @@ json5@^1.0.2: keyv@^4.5.4: version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" language-subtag-registry@^0.3.20: version "0.3.23" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz" integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== language-tags@^1.0.9: version "1.0.9" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz" integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== dependencies: language-subtag-registry "^0.3.20" levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -2469,46 +2236,46 @@ levn@^0.4.1: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== merge2@^1.3.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" @@ -2516,46 +2283,46 @@ micromatch@^4.0.4, micromatch@^4.0.8: minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^9.0.4: version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== ms@^2.1.1, ms@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nanoid@^3.3.6: version "3.3.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== napi-postinstall@^0.2.2: version "0.2.4" - resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.2.4.tgz#419697d0288cb524623e422f919624f22a5e4028" + resolved "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz" integrity sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== next@15.3.3: version "15.3.3" - resolved "https://registry.yarnpkg.com/next/-/next-15.3.3.tgz#90ee73600af106796989136827a7a40f61dadd1f" + resolved "https://registry.npmjs.org/next/-/next-15.3.3.tgz" integrity sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw== dependencies: "@next/env" "15.3.3" @@ -2578,22 +2345,22 @@ next@15.3.3: object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4, object.assign@^4.1.7: version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz" integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: call-bind "^1.0.8" @@ -2605,7 +2372,7 @@ object.assign@^4.1.4, object.assign@^4.1.7: object.entries@^1.1.9: version "1.1.9" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz" integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== dependencies: call-bind "^1.0.8" @@ -2615,7 +2382,7 @@ object.entries@^1.1.9: object.fromentries@^2.0.8: version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: call-bind "^1.0.7" @@ -2625,7 +2392,7 @@ object.fromentries@^2.0.8: object.groupby@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: call-bind "^1.0.7" @@ -2634,7 +2401,7 @@ object.groupby@^1.0.3: object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz" integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: call-bind "^1.0.8" @@ -2644,7 +2411,7 @@ object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: optionator@^0.9.3: version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" @@ -2656,7 +2423,7 @@ optionator@^0.9.3: own-keys@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + resolved "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz" integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== dependencies: get-intrinsic "^1.2.6" @@ -2665,28 +2432,28 @@ own-keys@^1.0.1: p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -2696,47 +2463,47 @@ parse-json@^5.0.0: path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2: +"picomatch@^3 || ^4", picomatch@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== possible-typed-array-names@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== postcss@8.4.31: version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" @@ -2745,12 +2512,12 @@ postcss@8.4.31: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -2759,39 +2526,54 @@ prop-types@^15.6.2, prop-types@^15.8.1: punycode@^2.1.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-dom@^19.0.0: +react-date-range@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/react-date-range/-/react-date-range-2.0.1.tgz" + integrity sha512-jwKYc9zcjYMg2hWbPht+6BF2wjGG5DkRVNJLRXn2Y0B/QCOOnvQX6YXziZVujVADWmgsBaoQnILdmzYw+Bwh0g== + dependencies: + classnames "^2.2.6" + prop-types "^15.7.2" + react-list "^0.8.13" + shallow-equal "^1.2.1" + +"react-dom@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react-dom@^19.0.0, react-dom@>=16.6.0: version "19.1.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.0.tgz#133558deca37fa1d682708df8904b25186793623" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz" integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g== dependencies: scheduler "^0.26.0" react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^18.3.1: version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== react-is@^19.1.0: version "19.1.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.0.tgz#805bce321546b7e14c084989c77022351bbdd11b" + resolved "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz" integrity sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg== +react-list@^0.8.13: + version "0.8.18" + resolved "https://registry.npmjs.org/react-list/-/react-list-0.8.18.tgz" + integrity sha512-1OSdDvzuKuwDJvQNuhXxxL+jTmmdtKg1i6KtYgxI9XR98kbOql1FcSGP+Lcvo91fk3cYng+Z6YkC6X9HRJwxfw== + react-smooth@^4.0.4: version "4.0.4" - resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-4.0.4.tgz#a5875f8bb61963ca61b819cedc569dc2453894b4" + resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz" integrity sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q== dependencies: fast-equals "^5.0.1" @@ -2800,7 +2582,7 @@ react-smooth@^4.0.4: react-transition-group@^4.4.5: version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" @@ -2808,22 +2590,22 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -react@^19.0.0: +"react@^0.14 || ^15.0.0-rc || >=15.0", "react@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react@^19.0.0, react@^19.1.0, "react@>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0", react@>=16.6.0, react@>=16.8.0, "react@0.14 || 15 - 19": version "19.1.0" - resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75" + resolved "https://registry.npmjs.org/react/-/react-19.1.0.tgz" integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== recharts-scale@^0.4.4: version "0.4.5" - resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.5.tgz#0969271f14e732e642fcc5bd4ab270d6e87dd1d9" + resolved "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz" integrity sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w== dependencies: decimal.js-light "^2.4.1" recharts@^2.15.3: - version "2.15.3" - resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.15.3.tgz#b94d05e91e3a5df1b02368ef64400dec9e9a77d4" - integrity sha512-EdOPzTwcFSuqtvkDoaM5ws/Km1+WTAO2eizL7rqiG0V2UVhTnz0m7J2i0CjVPUCdEkZImaWvXLbZDS2H5t6GFQ== + version "2.15.4" + resolved "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz" + integrity sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw== dependencies: clsx "^2.0.0" eventemitter3 "^4.0.1" @@ -2836,7 +2618,7 @@ recharts@^2.15.3: reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz" integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: call-bind "^1.0.8" @@ -2850,7 +2632,7 @@ reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz" integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: call-bind "^1.0.8" @@ -2862,22 +2644,22 @@ regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: reselect@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" + resolved "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz" integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-pkg-maps@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== resolve@^1.19.0, resolve@^1.22.4: version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: is-core-module "^2.16.0" @@ -2886,7 +2668,7 @@ resolve@^1.19.0, resolve@^1.22.4: resolve@^2.0.0-next.5: version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: is-core-module "^2.13.0" @@ -2895,19 +2677,19 @@ resolve@^2.0.0-next.5: reusify@^1.0.4: version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-array-concat@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz" integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: call-bind "^1.0.8" @@ -2918,7 +2700,7 @@ safe-array-concat@^1.1.3: safe-push-apply@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + resolved "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz" integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== dependencies: es-errors "^1.3.0" @@ -2926,7 +2708,7 @@ safe-push-apply@^1.0.0: safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz" integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: call-bound "^1.0.2" @@ -2935,22 +2717,22 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: scheduler@^0.26.0: version "0.26.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz" integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== semver@^6.3.1: version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.6.0, semver@^7.7.1, semver@^7.7.2: version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== set-function-length@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -2962,7 +2744,7 @@ set-function-length@^1.2.2: set-function-name@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: define-data-property "^1.1.4" @@ -2972,16 +2754,21 @@ set-function-name@^2.0.2: set-proto@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + resolved "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz" integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== dependencies: dunder-proto "^1.0.1" es-errors "^1.3.0" es-object-atoms "^1.0.0" +shallow-equal@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz" + integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== + sharp@^0.34.1: version "0.34.2" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.34.2.tgz#648bd639854dbe48047b0b420213c186d036b32d" + resolved "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz" integrity sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg== dependencies: color "^4.2.3" @@ -3012,19 +2799,19 @@ sharp@^0.34.1: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel-list@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: es-errors "^1.3.0" @@ -3032,7 +2819,7 @@ side-channel-list@^1.0.0: side-channel-map@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: call-bound "^1.0.2" @@ -3042,7 +2829,7 @@ side-channel-map@^1.0.1: side-channel-weakmap@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: call-bound "^1.0.2" @@ -3053,7 +2840,7 @@ side-channel-weakmap@^1.0.2: side-channel@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: es-errors "^1.3.0" @@ -3064,36 +2851,36 @@ side-channel@^1.1.0: simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" source-map-js@^1.0.2: version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map@^0.5.7: version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== ssf@~0.11.2: version "0.11.2" - resolved "https://registry.yarnpkg.com/ssf/-/ssf-0.11.2.tgz#0b99698b237548d088fc43cdf2b70c1a7512c06c" + resolved "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz" integrity sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g== dependencies: frac "~1.1.2" stable-hash@^0.0.5: version "0.0.5" - resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" + resolved "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz" integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== stop-iteration-iterator@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz" integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== dependencies: es-errors "^1.3.0" @@ -3101,12 +2888,12 @@ stop-iteration-iterator@^1.1.0: streamsearch@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== string.prototype.includes@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + resolved "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz" integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== dependencies: call-bind "^1.0.7" @@ -3115,7 +2902,7 @@ string.prototype.includes@^2.0.1: string.prototype.matchall@^4.0.12: version "4.0.12" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz" integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== dependencies: call-bind "^1.0.8" @@ -3134,7 +2921,7 @@ string.prototype.matchall@^4.0.12: string.prototype.repeat@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + resolved "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz" integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== dependencies: define-properties "^1.1.3" @@ -3142,7 +2929,7 @@ string.prototype.repeat@^1.0.0: string.prototype.trim@^1.2.10: version "1.2.10" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz" integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== dependencies: call-bind "^1.0.8" @@ -3155,7 +2942,7 @@ string.prototype.trim@^1.2.10: string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: version "1.0.9" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz" integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: call-bind "^1.0.8" @@ -3165,7 +2952,7 @@ string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: string.prototype.trimstart@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: call-bind "^1.0.7" @@ -3174,46 +2961,46 @@ string.prototype.trimstart@^1.0.8: strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== styled-jsx@5.1.6: version "5.1.6" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499" + resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz" integrity sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA== dependencies: client-only "0.0.1" stylis@4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + resolved "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== tiny-invariant@^1.3.1: version "1.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== tinyglobby@^0.2.13: version "0.2.14" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz" integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== dependencies: fdir "^6.4.4" @@ -3221,19 +3008,19 @@ tinyglobby@^0.2.13: to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" ts-api-utils@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz" integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== tsconfig-paths@^3.15.0: version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" @@ -3243,19 +3030,19 @@ tsconfig-paths@^3.15.0: tslib@^2.4.0, tslib@^2.8.0: version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" typed-array-buffer@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz" integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: call-bound "^1.0.3" @@ -3264,7 +3051,7 @@ typed-array-buffer@^1.0.3: typed-array-byte-length@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz" integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: call-bind "^1.0.8" @@ -3275,7 +3062,7 @@ typed-array-byte-length@^1.0.3: typed-array-byte-offset@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz" integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: available-typed-arrays "^1.0.7" @@ -3288,7 +3075,7 @@ typed-array-byte-offset@^1.0.4: typed-array-length@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz" integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: call-bind "^1.0.7" @@ -3298,14 +3085,14 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" -typescript@^5: +typescript@^5, typescript@>=3.3.1, typescript@>=4.8.4, "typescript@>=4.8.4 <5.9.0": version "5.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== unbox-primitive@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz" integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: call-bound "^1.0.3" @@ -3315,12 +3102,12 @@ unbox-primitive@^1.1.0: undici-types@~6.21.0: version "6.21.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== unrs-resolver@^1.6.2: version "1.9.0" - resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.9.0.tgz#22877e2e0f1ba3f848f75f7be5ecb81b634066dc" + resolved "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.0.tgz" integrity sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg== dependencies: napi-postinstall "^0.2.2" @@ -3347,19 +3134,19 @@ unrs-resolver@^1.6.2: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" use-sync-external-store@^1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" + resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz" integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== victory-vendor@^36.6.8: version "36.9.2" - resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.9.2.tgz#668b02a448fa4ea0f788dbf4228b7e64669ff801" + resolved "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz" integrity sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ== dependencies: "@types/d3-array" "^3.0.3" @@ -3379,7 +3166,7 @@ victory-vendor@^36.6.8: which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz" integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: is-bigint "^1.1.0" @@ -3390,7 +3177,7 @@ which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: which-builtin-type@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz" integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== dependencies: call-bound "^1.0.2" @@ -3409,7 +3196,7 @@ which-builtin-type@^1.2.1: which-collection@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: is-map "^2.0.3" @@ -3419,7 +3206,7 @@ which-collection@^1.0.2: which-typed-array@^1.1.16, which-typed-array@^1.1.19: version "1.1.19" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz" integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" @@ -3432,29 +3219,29 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.19: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wmf@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" + resolved "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz" integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== word-wrap@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== word@~0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961" + resolved "https://registry.npmjs.org/word/-/word-0.3.0.tgz" integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA== xlsx@^0.18.5: version "0.18.5" - resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.18.5.tgz#16711b9113c848076b8a177022799ad356eba7d0" + resolved "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz" integrity sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ== dependencies: adler-32 "~1.3.0" @@ -3467,10 +3254,10 @@ xlsx@^0.18.5: yaml@^1.10.0: version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 26e97a0c4478304a2678ae150627deaba5804b49 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Fri, 27 Jun 2025 16:47:13 +0200 Subject: [PATCH 19/55] Adding routing to navigate to --- .../app/components/PageLinks/PageLinks.tsx | 41 +++ .../components/dashboard/header/DropDown.tsx | 42 --- .../components/dashboard/sidebar/Sidebar.tsx | 55 --- .../app/components/sidebar/SideBarLink.tsx | 41 --- payment-iq/app/dashboard/approve/page.tsx | 4 +- payment-iq/app/dashboard/layout.tsx | 18 +- payment-iq/app/dashboard/page.tsx | 8 +- .../AccountIQ/AccountIQ.tsx | 0 .../DateRangePicker/DateRangePicker.tsx | 0 .../Documentation/Documentation.tsx | 0 .../FetchReports/FetchReports.tsx | 0 .../GeneralHealthCard/GeneralHealthCard.tsx | 0 .../Pages/Approve/Approve.tsx | 0 .../DashboardHomePage/DashboardHomePage.tsx | 0 .../Pages}/transactions/Transactions.tsx | 0 .../Pages}/transactions/constants.ts | 0 .../Pages}/transactions/mockData.ts | 0 .../PieCharts/PieCharts.tsx | 0 .../SectionCard/SectionCard.tsx | 0 .../SectionCard/types.ts | 0 .../TransactionsOverViewTable.tsx | 0 .../TransactionsOverview.tsx | 0 .../TransactionsWaitingApproval.tsx | 0 .../WhatsNew/WhatsNew.tsx | 0 .../dashboard/header/Header.tsx | 20 +- .../header/dropDown/DropDown.styled.ts | 8 + .../dashboard/header/dropDown/DropDown.tsx | 60 ++++ .../dashboard/layout/layoutWrapper.ts | 0 .../dashboard/layout/mainContent.ts | 0 .../features/dashboard/sidebar/Sidebar.tsx | 57 +++ .../sidebar/SideBarLink.tsx | 0 .../sidebar/SidebarLayout.tsx | 0 payment-iq/constants/SidebarLink.constants.ts | 59 ++- payment-iq/yarn.lock | 340 ++++++++++++++++-- 34 files changed, 530 insertions(+), 223 deletions(-) create mode 100644 payment-iq/app/components/PageLinks/PageLinks.tsx delete mode 100644 payment-iq/app/components/dashboard/header/DropDown.tsx delete mode 100644 payment-iq/app/components/dashboard/sidebar/Sidebar.tsx delete mode 100644 payment-iq/app/components/sidebar/SideBarLink.tsx rename payment-iq/app/{components => features}/AccountIQ/AccountIQ.tsx (100%) rename payment-iq/app/{components => features}/DateRangePicker/DateRangePicker.tsx (100%) rename payment-iq/app/{components => features}/Documentation/Documentation.tsx (100%) rename payment-iq/app/{components => features}/FetchReports/FetchReports.tsx (100%) rename payment-iq/app/{components => features}/GeneralHealthCard/GeneralHealthCard.tsx (100%) rename payment-iq/app/{components => features}/Pages/Approve/Approve.tsx (100%) rename payment-iq/app/{components/pages => features/Pages}/DashboardHomePage/DashboardHomePage.tsx (100%) rename payment-iq/app/{components/pages => features/Pages}/transactions/Transactions.tsx (100%) rename payment-iq/app/{components/pages => features/Pages}/transactions/constants.ts (100%) rename payment-iq/app/{components/pages => features/Pages}/transactions/mockData.ts (100%) rename payment-iq/app/{components => features}/PieCharts/PieCharts.tsx (100%) rename payment-iq/app/{components => features}/SectionCard/SectionCard.tsx (100%) rename payment-iq/app/{components => features}/SectionCard/types.ts (100%) rename payment-iq/app/{components => features}/TransactionsOverview/TransactionsOverViewTable.tsx (100%) rename payment-iq/app/{components => features}/TransactionsOverview/TransactionsOverview.tsx (100%) rename payment-iq/app/{components => features}/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx (100%) rename payment-iq/app/{components => features}/WhatsNew/WhatsNew.tsx (100%) rename payment-iq/app/{components => features}/dashboard/header/Header.tsx (68%) create mode 100644 payment-iq/app/features/dashboard/header/dropDown/DropDown.styled.ts create mode 100644 payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx rename payment-iq/app/{components => features}/dashboard/layout/layoutWrapper.ts (100%) rename payment-iq/app/{components => features}/dashboard/layout/mainContent.ts (100%) create mode 100644 payment-iq/app/features/dashboard/sidebar/Sidebar.tsx rename payment-iq/app/{components/dashboard => features}/sidebar/SideBarLink.tsx (100%) rename payment-iq/app/{components => features}/sidebar/SidebarLayout.tsx (100%) diff --git a/payment-iq/app/components/PageLinks/PageLinks.tsx b/payment-iq/app/components/PageLinks/PageLinks.tsx new file mode 100644 index 0000000..12962d8 --- /dev/null +++ b/payment-iq/app/components/PageLinks/PageLinks.tsx @@ -0,0 +1,41 @@ +"use client"; + +import Link from "next/link"; +import { styled } from "@mui/system"; +import { ISidebarLink } from "@/interfaces/SidebarLink.interfaces"; + +const LinkContainer = styled("div")(({ theme }) => ({ + display: "flex", + alignItems: "center", + padding: "12px 1px", + borderRadius: "4px", + color: theme.palette.text.tertiary, + textDecoration: "none", + transition: "background 0.2s ease-in-out", + + "&:hover": { + color: "rgb(255, 255, 255)", + background: "rgba(255, 255, 255, 0.08)", + backgroundColor: theme.palette.action.hover, + cursor: "pointer", + }, +})); + +const LinkText = styled("span")(({ theme }) => ({ + color: theme.palette.text.tertiary, + marginLeft: "12px", + fontWeight: 500, +})); + +export default function PageLinks({ title, path, icon: Icon }: ISidebarLink) { + return ( + + + + {Icon && } + {title} + + + + ); +} diff --git a/payment-iq/app/components/dashboard/header/DropDown.tsx b/payment-iq/app/components/dashboard/header/DropDown.tsx deleted file mode 100644 index aaff10d..0000000 --- a/payment-iq/app/components/dashboard/header/DropDown.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { - FormControl, - InputLabel, - Select, - MenuItem, - SelectChangeEvent, - ListItemIcon, - ListItemText, -} from '@mui/material'; -import { SIDEBAR_LINKS } from '@/constants/SidebarLink.constants'; - -interface Props { - onChange?: (event: SelectChangeEvent) => void; -} - -export default function SidebarDropdown({ onChange }: Props) { - const [value, setValue] = React.useState(''); - - const handleChange = (event: SelectChangeEvent) => { - setValue(event.target.value); - onChange?.(event); - }; - - return ( - - Navigate To - - - ); -} diff --git a/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx b/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx deleted file mode 100644 index 512714d..0000000 --- a/payment-iq/app/components/dashboard/sidebar/Sidebar.tsx +++ /dev/null @@ -1,55 +0,0 @@ -'use client'; - -import React from 'react'; -import DashboardIcon from '@mui/icons-material/Dashboard'; -import { styled } from '@mui/system'; -import { SIDEBAR_LINKS } from '@/constants/SidebarLink.constants'; -import SidebarLink from './SideBarLink'; - -const SideBarContainer = styled('aside')(({ theme }) => ({ - position: 'fixed', - top: 0, - left: 0, - width: 240, - height: '100vh', - backgroundColor: theme.palette.background.primary, - color: theme.palette.text.primary, - display: 'flex', - flexDirection: 'column', - padding: theme.spacing(2), - zIndex: 1100, - borderRight: `1px solid ${theme.palette.divider}`, -})); - -const SidebarHeader = styled('div')(({ theme }) => ({ - fontSize: '20px', - fontWeight: 600, - marginBottom: theme.spacing(3), - display: 'flex', - alignItems: 'center', - color: theme.palette.text.primary, -})); - -const IconSpacing = styled(DashboardIcon)(({ theme }) => ({ - marginLeft: theme.spacing(1), -})); - -const SideBar = () => { - return ( - - - Betrise cashir - - {SIDEBAR_LINKS.map((link) => ( - - ))} - - ); -}; - -export default SideBar; diff --git a/payment-iq/app/components/sidebar/SideBarLink.tsx b/payment-iq/app/components/sidebar/SideBarLink.tsx deleted file mode 100644 index 17601cf..0000000 --- a/payment-iq/app/components/sidebar/SideBarLink.tsx +++ /dev/null @@ -1,41 +0,0 @@ -'use client'; - -import Link from 'next/link'; -import { styled } from '@mui/system'; -import { ISidebarLink } from '@/interfaces/SidebarLink.interfaces'; - -const LinkContainer = styled('div')(({ theme }) => ({ - display: 'flex', - alignItems: 'center', - padding: '12px 1px', - borderRadius: '4px', - color: theme.palette.text.tertiary, - textDecoration: 'none', - transition: 'background 0.2s ease-in-out', - - '&:hover': { - color: 'rgb(255, 255, 255)', - background: 'rgba(255, 255, 255, 0.08)', - backgroundColor: theme.palette.action.hover, - cursor: 'pointer', - }, -})); - -const LinkText = styled('span')(({ theme }) => ({ - color: theme.palette.text.tertiary, - marginLeft: '12px', - fontWeight: 500, -})); - -export default function SidebarLink({ title, path, icon: Icon }: ISidebarLink) { - return ( - - - - {Icon && } - {title} - - - - ); -} diff --git a/payment-iq/app/dashboard/approve/page.tsx b/payment-iq/app/dashboard/approve/page.tsx index e71ddaf..dab8077 100644 --- a/payment-iq/app/dashboard/approve/page.tsx +++ b/payment-iq/app/dashboard/approve/page.tsx @@ -1,7 +1,7 @@ // This ensures this component is rendered only on the client side -'use client'; +"use client"; -import { Approve } from '@/app/components/Pages/Approve/Approve'; +import { Approve } from "@/app/features/Pages/Approve/Approve"; export default function ApprovePage() { return ( diff --git a/payment-iq/app/dashboard/layout.tsx b/payment-iq/app/dashboard/layout.tsx index 333b9d1..31835d6 100644 --- a/payment-iq/app/dashboard/layout.tsx +++ b/payment-iq/app/dashboard/layout.tsx @@ -1,16 +1,18 @@ -'use client'; +"use client"; -import React from 'react'; -import { LayoutWrapper } from '../components/dashboard/layout/layoutWrapper'; -import { MainContent } from '../components/dashboard/layout/mainContent'; -import SideBar from '../components/dashboard/sidebar/Sidebar'; -import Header from '../components/dashboard/header/Header'; +import React from "react"; +import { LayoutWrapper } from "../features/dashboard/layout/layoutWrapper"; +import { MainContent } from "../features/dashboard/layout/mainContent"; +import SideBar from "../features/dashboard/sidebar/Sidebar"; +import Header from "../features/dashboard/header/Header"; -const DashboardLayout: React.FC<{ children: React.ReactNode }> = ({ children }) => { +const DashboardLayout: React.FC<{ children: React.ReactNode }> = ({ + children, +}) => { return ( -
+
{children} diff --git a/payment-iq/app/dashboard/page.tsx b/payment-iq/app/dashboard/page.tsx index 37d5286..707967c 100644 --- a/payment-iq/app/dashboard/page.tsx +++ b/payment-iq/app/dashboard/page.tsx @@ -1,11 +1,9 @@ -'use client'; +"use client"; -import { DashboardHomePage } from "../components/Pages/DashboardHomePage/DashboardHomePage"; +import { DashboardHomePage } from "../features/Pages/DashboardHomePage/DashboardHomePage"; const DashboardPage = () => { - return ( - - ); + return ; }; export default DashboardPage; diff --git a/payment-iq/app/components/AccountIQ/AccountIQ.tsx b/payment-iq/app/features/AccountIQ/AccountIQ.tsx similarity index 100% rename from payment-iq/app/components/AccountIQ/AccountIQ.tsx rename to payment-iq/app/features/AccountIQ/AccountIQ.tsx diff --git a/payment-iq/app/components/DateRangePicker/DateRangePicker.tsx b/payment-iq/app/features/DateRangePicker/DateRangePicker.tsx similarity index 100% rename from payment-iq/app/components/DateRangePicker/DateRangePicker.tsx rename to payment-iq/app/features/DateRangePicker/DateRangePicker.tsx diff --git a/payment-iq/app/components/Documentation/Documentation.tsx b/payment-iq/app/features/Documentation/Documentation.tsx similarity index 100% rename from payment-iq/app/components/Documentation/Documentation.tsx rename to payment-iq/app/features/Documentation/Documentation.tsx diff --git a/payment-iq/app/components/FetchReports/FetchReports.tsx b/payment-iq/app/features/FetchReports/FetchReports.tsx similarity index 100% rename from payment-iq/app/components/FetchReports/FetchReports.tsx rename to payment-iq/app/features/FetchReports/FetchReports.tsx diff --git a/payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx similarity index 100% rename from payment-iq/app/components/GeneralHealthCard/GeneralHealthCard.tsx rename to payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx diff --git a/payment-iq/app/components/Pages/Approve/Approve.tsx b/payment-iq/app/features/Pages/Approve/Approve.tsx similarity index 100% rename from payment-iq/app/components/Pages/Approve/Approve.tsx rename to payment-iq/app/features/Pages/Approve/Approve.tsx diff --git a/payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx similarity index 100% rename from payment-iq/app/components/pages/DashboardHomePage/DashboardHomePage.tsx rename to payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx diff --git a/payment-iq/app/components/pages/transactions/Transactions.tsx b/payment-iq/app/features/Pages/transactions/Transactions.tsx similarity index 100% rename from payment-iq/app/components/pages/transactions/Transactions.tsx rename to payment-iq/app/features/Pages/transactions/Transactions.tsx diff --git a/payment-iq/app/components/pages/transactions/constants.ts b/payment-iq/app/features/Pages/transactions/constants.ts similarity index 100% rename from payment-iq/app/components/pages/transactions/constants.ts rename to payment-iq/app/features/Pages/transactions/constants.ts diff --git a/payment-iq/app/components/pages/transactions/mockData.ts b/payment-iq/app/features/Pages/transactions/mockData.ts similarity index 100% rename from payment-iq/app/components/pages/transactions/mockData.ts rename to payment-iq/app/features/Pages/transactions/mockData.ts diff --git a/payment-iq/app/components/PieCharts/PieCharts.tsx b/payment-iq/app/features/PieCharts/PieCharts.tsx similarity index 100% rename from payment-iq/app/components/PieCharts/PieCharts.tsx rename to payment-iq/app/features/PieCharts/PieCharts.tsx diff --git a/payment-iq/app/components/SectionCard/SectionCard.tsx b/payment-iq/app/features/SectionCard/SectionCard.tsx similarity index 100% rename from payment-iq/app/components/SectionCard/SectionCard.tsx rename to payment-iq/app/features/SectionCard/SectionCard.tsx diff --git a/payment-iq/app/components/SectionCard/types.ts b/payment-iq/app/features/SectionCard/types.ts similarity index 100% rename from payment-iq/app/components/SectionCard/types.ts rename to payment-iq/app/features/SectionCard/types.ts diff --git a/payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx b/payment-iq/app/features/TransactionsOverview/TransactionsOverViewTable.tsx similarity index 100% rename from payment-iq/app/components/TransactionsOverview/TransactionsOverViewTable.tsx rename to payment-iq/app/features/TransactionsOverview/TransactionsOverViewTable.tsx diff --git a/payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx b/payment-iq/app/features/TransactionsOverview/TransactionsOverview.tsx similarity index 100% rename from payment-iq/app/components/TransactionsOverview/TransactionsOverview.tsx rename to payment-iq/app/features/TransactionsOverview/TransactionsOverview.tsx diff --git a/payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx b/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx similarity index 100% rename from payment-iq/app/components/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx rename to payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx diff --git a/payment-iq/app/components/WhatsNew/WhatsNew.tsx b/payment-iq/app/features/WhatsNew/WhatsNew.tsx similarity index 100% rename from payment-iq/app/components/WhatsNew/WhatsNew.tsx rename to payment-iq/app/features/WhatsNew/WhatsNew.tsx diff --git a/payment-iq/app/components/dashboard/header/Header.tsx b/payment-iq/app/features/dashboard/header/Header.tsx similarity index 68% rename from payment-iq/app/components/dashboard/header/Header.tsx rename to payment-iq/app/features/dashboard/header/Header.tsx index 875a926..6c40362 100644 --- a/payment-iq/app/components/dashboard/header/Header.tsx +++ b/payment-iq/app/features/dashboard/header/Header.tsx @@ -1,7 +1,7 @@ -import React, { useState } from 'react'; -import { AppBar, Toolbar, IconButton, Menu, MenuItem, Button } from '@mui/material'; -import MenuIcon from '@mui/icons-material/Menu'; -import Dropdown from './DropDown'; +import React, { useState } from "react"; +import { AppBar, Toolbar, IconButton, Menu, MenuItem } from "@mui/material"; +import MenuIcon from "@mui/icons-material/Menu"; +import Dropdown from "./dropDown/DropDown"; const Header = () => { const [anchorEl, setAnchorEl] = useState(null); @@ -16,11 +16,15 @@ const Header = () => { setAnchorEl(null); }; - const handleChange = (e:any) => { - }; + const handleChange = (e: any) => {}; return ( - + {/* Burger Menu */} @@ -28,7 +32,7 @@ const Header = () => { {/* Dropdown Button */} - + {/* Dropdown Menu */} ({ + display: "flex", + alignItems: "center", + opacity: 0.7, + fontStyle: "normal", +})); diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx new file mode 100644 index 0000000..adb6138 --- /dev/null +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx @@ -0,0 +1,60 @@ +import React from "react"; +import { + FormControl, + InputLabel, + Select, + MenuItem, + SelectChangeEvent, +} from "@mui/material"; +import ChevronRightIcon from "@mui/icons-material/ChevronRight"; +import { SIDEBAR_LINKS } from "@/constants/SidebarLink.constants"; +import { ISidebarLink } from "@/interfaces/SidebarLink.interfaces"; +import { Em } from "./DropDown.styled"; +import PageLinks from "../../../../components/PageLinks/PageLinks"; + +interface Props { + onChange?: (event: SelectChangeEvent) => void; +} + +export default function SidebarDropdown({ onChange }: Props) { + const [value, setValue] = React.useState(""); + + const handleChange = (event: SelectChangeEvent) => { + setValue(event.target.value); + onChange?.(event); + }; + + return ( + + Navigate To + + + ); +} diff --git a/payment-iq/app/components/dashboard/layout/layoutWrapper.ts b/payment-iq/app/features/dashboard/layout/layoutWrapper.ts similarity index 100% rename from payment-iq/app/components/dashboard/layout/layoutWrapper.ts rename to payment-iq/app/features/dashboard/layout/layoutWrapper.ts diff --git a/payment-iq/app/components/dashboard/layout/mainContent.ts b/payment-iq/app/features/dashboard/layout/mainContent.ts similarity index 100% rename from payment-iq/app/components/dashboard/layout/mainContent.ts rename to payment-iq/app/features/dashboard/layout/mainContent.ts diff --git a/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx new file mode 100644 index 0000000..11fcd40 --- /dev/null +++ b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx @@ -0,0 +1,57 @@ +"use client"; + +import React from "react"; +import DashboardIcon from "@mui/icons-material/Dashboard"; +import { styled } from "@mui/system"; +import { SIDEBAR_LINKS } from "@/constants/SidebarLink.constants"; +import PageLinks from "../../../components/PageLinks/PageLinks"; + +const SideBarContainer = styled("aside")(({ theme }) => ({ + position: "fixed", + top: 0, + left: 0, + width: 240, + height: "100vh", + backgroundColor: theme.palette.background.primary, + color: theme.palette.text.primary, + display: "flex", + flexDirection: "column", + padding: theme.spacing(2), + zIndex: 1100, + borderRight: `1px solid ${theme.palette.divider}`, +})); + +const SidebarHeader = styled("div")(({ theme }) => ({ + fontSize: "20px", + fontWeight: 600, + marginBottom: theme.spacing(3), + display: "flex", + alignItems: "center", + color: theme.palette.text.primary, +})); + +const IconSpacing = styled(DashboardIcon)(({ theme }) => ({ + marginLeft: theme.spacing(1), +})); + +const SideBar = () => { + return ( + + + + Betrise cashir + + + {SIDEBAR_LINKS.map((link) => ( + + ))} + + ); +}; + +export default SideBar; diff --git a/payment-iq/app/components/dashboard/sidebar/SideBarLink.tsx b/payment-iq/app/features/sidebar/SideBarLink.tsx similarity index 100% rename from payment-iq/app/components/dashboard/sidebar/SideBarLink.tsx rename to payment-iq/app/features/sidebar/SideBarLink.tsx diff --git a/payment-iq/app/components/sidebar/SidebarLayout.tsx b/payment-iq/app/features/sidebar/SidebarLayout.tsx similarity index 100% rename from payment-iq/app/components/sidebar/SidebarLayout.tsx rename to payment-iq/app/features/sidebar/SidebarLayout.tsx diff --git a/payment-iq/constants/SidebarLink.constants.ts b/payment-iq/constants/SidebarLink.constants.ts index d30dacd..2fadf07 100644 --- a/payment-iq/constants/SidebarLink.constants.ts +++ b/payment-iq/constants/SidebarLink.constants.ts @@ -1,33 +1,32 @@ -import HomeIcon from '@mui/icons-material/Home'; -import AccountBalanceWalletIcon from '@mui/icons-material/AccountBalanceWallet'; -import CheckCircleIcon from '@mui/icons-material/CheckCircle'; -import SearchIcon from '@mui/icons-material/Search'; -import VerifiedUserIcon from '@mui/icons-material/VerifiedUser'; -import PeopleIcon from '@mui/icons-material/People'; -import BarChartIcon from '@mui/icons-material/BarChart'; -import GavelIcon from '@mui/icons-material/Gavel'; -import HubIcon from '@mui/icons-material/Hub'; -import AdminPanelSettingsIcon from '@mui/icons-material/AdminPanelSettings'; -import InsightsIcon from '@mui/icons-material/Insights'; -import DescriptionIcon from '@mui/icons-material/Description'; -import SupportAgentIcon from '@mui/icons-material/SupportAgent'; -import WarningAmberIcon from '@mui/icons-material/WarningAmber'; -import { ISidebarLink } from '@/interfaces/SidebarLink.interfaces'; - +import HomeIcon from "@mui/icons-material/Home"; +import AccountBalanceWalletIcon from "@mui/icons-material/AccountBalanceWallet"; +import CheckCircleIcon from "@mui/icons-material/CheckCircle"; +import SearchIcon from "@mui/icons-material/Search"; +import VerifiedUserIcon from "@mui/icons-material/VerifiedUser"; +import PeopleIcon from "@mui/icons-material/People"; +import GavelIcon from "@mui/icons-material/Gavel"; +import HubIcon from "@mui/icons-material/Hub"; +import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; +import InsightsIcon from "@mui/icons-material/Insights"; +import { ISidebarLink } from "@/interfaces/SidebarLink.interfaces"; export const SIDEBAR_LINKS: ISidebarLink[] = [ - { title: 'Home', path: '/dashboard', icon: HomeIcon }, - { title: 'Transaction', path: '/dashboard/transactions', icon: AccountBalanceWalletIcon }, - { title: 'Approve', path: '/dashboard/approve', icon: CheckCircleIcon }, - { title: 'Investigate', path: '/dashboard/investigate', icon: SearchIcon }, - { title: 'KYC', path: '/kyc', icon: VerifiedUserIcon }, - { title: 'User Accounts', path: '/user-accounts', icon: PeopleIcon }, - { title: 'Analytics', path: '/analytics', icon: BarChartIcon }, - { title: 'Rules', path: '/rules', icon: GavelIcon }, - { title: 'Rules Hub', path: '/rules-hub', icon: HubIcon }, - { title: 'Admin', path: '/admin', icon: AdminPanelSettingsIcon }, - { title: 'Account IQ', path: '/account-iq', icon: InsightsIcon }, - { title: 'Documentation', path: '/documentation', icon: DescriptionIcon }, - { title: 'Support', path: '/support', icon: SupportAgentIcon }, - { title: 'System Status', path: '/system-status', icon: WarningAmberIcon }, + { title: "Home", path: "/dashboard", icon: HomeIcon }, + { + title: "Transaction", + path: "/dashboard/transactions", + icon: AccountBalanceWalletIcon, + }, + { title: "Approve", path: "/dashboard/approve", icon: CheckCircleIcon }, + { title: "Investigate", path: "/dashboard/investigate", icon: SearchIcon }, + { title: "KYC", path: "/kyc", icon: VerifiedUserIcon }, + { title: "User Accounts", path: "/user-accounts", icon: PeopleIcon }, + // { title: 'Analytics', path: '/analytics', icon: BarChartIcon }, + { title: "Rules", path: "/rules", icon: GavelIcon }, + { title: "Rules Hub", path: "/rules-hub", icon: HubIcon }, + { title: "Admin", path: "/admin", icon: AdminPanelSettingsIcon }, + { title: "Account IQ", path: "/account-iq", icon: InsightsIcon }, + // { title: 'Documentation', path: '/documentation', icon: DescriptionIcon }, + // { title: 'Support', path: '/support', icon: SupportAgentIcon }, + // { title: 'System Status', path: '/system-status', icon: WarningAmberIcon }, ]; diff --git a/payment-iq/yarn.lock b/payment-iq/yarn.lock index cf6b981..691cc21 100644 --- a/payment-iq/yarn.lock +++ b/payment-iq/yarn.lock @@ -82,6 +82,28 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" +"@emnapi/core@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" + integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== + dependencies: + "@emnapi/wasi-threads" "1.0.2" + tslib "^2.4.0" + +"@emnapi/runtime@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" + integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" + integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== + dependencies: + tslib "^2.4.0" + "@emotion/babel-plugin@^11.13.5": version "11.13.5" resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz" @@ -127,7 +149,7 @@ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz" integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== -"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.14.0", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0", "@emotion/react@^11.9.0": +"@emotion/react@^11.14.0": version "11.14.0" resolved "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz" integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== @@ -157,7 +179,7 @@ resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz" integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/styled@^11.14.0", "@emotion/styled@^11.3.0", "@emotion/styled@^11.8.1": +"@emotion/styled@^11.14.0": version "11.14.0" resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz" integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA== @@ -297,11 +319,122 @@ optionalDependencies: "@img/sharp-libvips-darwin-arm64" "1.1.0" +"@img/sharp-darwin-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz#d37ff7c75c46d5a68a3756e3f1924ef7ca7b285e" + integrity sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.1.0" + "@img/sharp-libvips-darwin-arm64@1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz" integrity sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA== +"@img/sharp-libvips-darwin-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz#1239c24426c06a8e833815562f78047a3bfbaaf8" + integrity sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ== + +"@img/sharp-libvips-linux-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz#20d276cefd903ee483f0441ba35961679c286315" + integrity sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew== + +"@img/sharp-libvips-linux-arm@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz#067c0b566eae8063738cf1b1db8f8a8573b5465c" + integrity sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA== + +"@img/sharp-libvips-linux-ppc64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz#682334595f2ca00e0a07a675ba170af165162802" + integrity sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ== + +"@img/sharp-libvips-linux-s390x@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz#82fcd68444b3666384235279c145c2b28d8ee302" + integrity sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA== + +"@img/sharp-libvips-linux-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz#65b2b908bf47156b0724fde9095676c83a18cf5a" + integrity sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q== + +"@img/sharp-libvips-linuxmusl-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz#72accf924e80b081c8db83b900b444a67c203f01" + integrity sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w== + +"@img/sharp-libvips-linuxmusl-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz#1fa052737e203f46bf44192acd01f9faf11522d7" + integrity sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A== + +"@img/sharp-linux-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz#c9690fac5f3137eaab3f7ad6065390d10f66f1fa" + integrity sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.1.0" + +"@img/sharp-linux-arm@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz#771dd2ec645f85f98441359bfc118afaf38cbd8b" + integrity sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.1.0" + +"@img/sharp-linux-s390x@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz#82132d158abff57bd90b53574f2865f72f94e6c8" + integrity sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.1.0" + +"@img/sharp-linux-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz#d815fb87899d462b28b62a9252ad127f02fe0740" + integrity sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.1.0" + +"@img/sharp-linuxmusl-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz#cfac45b2abbc04628f676e123bfe3aeb300266c7" + integrity sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.1.0" + +"@img/sharp-linuxmusl-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz#b876c23ff51d0fb6d9f3b0a07e2f4d1436c203ad" + integrity sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.1.0" + +"@img/sharp-wasm32@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz#b1dd0bab547dccf517586eb1fa5852160bba3b82" + integrity sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ== + dependencies: + "@emnapi/runtime" "^1.4.3" + +"@img/sharp-win32-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz#f37bee0f60c167f825a09d2b8de6849b823e8b30" + integrity sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ== + +"@img/sharp-win32-ia32@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz#8fc30b6655bc6ff8910344a2020d334aa6361672" + integrity sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw== + +"@img/sharp-win32-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz#ecf19250f8fe35de684aa2b0ec6f773b3447247b" + integrity sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw== + "@jridgewell/gen-mapping@^0.3.5": version "0.3.8" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz" @@ -346,7 +479,7 @@ dependencies: "@babel/runtime" "^7.27.1" -"@mui/material@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/material@^7.1.2": +"@mui/material@^7.1.2": version "7.1.2" resolved "https://registry.npmjs.org/@mui/material/-/material-7.1.2.tgz" integrity sha512-Z5PYKkA6Kd8vS04zKxJNpwuvt6IoMwqpbidV7RCrRQQKwczIwcNcS8L6GnN4pzFYfEs+N9v6co27DmG07rcnoA== @@ -385,7 +518,7 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/system@^7.1.1": +"@mui/system@^7.1.1": version "7.1.1" resolved "https://registry.npmjs.org/@mui/system/-/system-7.1.1.tgz" integrity sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA== @@ -452,6 +585,15 @@ "@mui/utils" "^7.1.1" reselect "^5.1.1" +"@napi-rs/wasm-runtime@^0.2.11": + version "0.2.11" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz#192c1610e1625048089ab4e35bc0649ce478500e" + integrity sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.9.0" + "@next/env@15.3.3": version "15.3.3" resolved "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz" @@ -469,6 +611,41 @@ resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz" integrity sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg== +"@next/swc-darwin-x64@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz#71588bad245180ffd1af1e1f894477287e739eb0" + integrity sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw== + +"@next/swc-linux-arm64-gnu@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz#66a15f749c14f04a89f8c7e21c7a8d343fc34e6e" + integrity sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw== + +"@next/swc-linux-arm64-musl@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz#14bd66213f7f33d6909574750bcb05037221a2ac" + integrity sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA== + +"@next/swc-linux-x64-gnu@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz#4a19434545e5e752d9a3ed71f9b34982725f6293" + integrity sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw== + +"@next/swc-linux-x64-musl@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz#41ab140dd0a04ab7291adbec5836c1ce251a588c" + integrity sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw== + +"@next/swc-win32-arm64-msvc@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz#fcd1d7e0007b7b73d1acdbf0ad6d91f7aa2deb15" + integrity sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ== + +"@next/swc-win32-x64-msvc@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz#c0e33e069d7922dd0546cac77a0247ad81d4a1aa" + integrity sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -477,7 +654,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -522,6 +699,13 @@ dependencies: tslib "^2.8.0" +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + "@types/d3-array@^3.0.3": version "3.2.1" resolved "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz" @@ -628,7 +812,7 @@ resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@*", "@types/react@^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react@^19", "@types/react@^19.0.0": +"@types/react@*", "@types/react@^19": version "19.1.8" resolved "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz" integrity sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g== @@ -650,7 +834,7 @@ natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser@^8.34.1": +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": version "8.34.1" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz" integrity sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA== @@ -678,7 +862,7 @@ "@typescript-eslint/types" "8.34.1" "@typescript-eslint/visitor-keys" "8.34.1" -"@typescript-eslint/tsconfig-utils@^8.34.1", "@typescript-eslint/tsconfig-utils@8.34.1": +"@typescript-eslint/tsconfig-utils@8.34.1", "@typescript-eslint/tsconfig-utils@^8.34.1": version "8.34.1" resolved "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz" integrity sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg== @@ -693,7 +877,7 @@ debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@^8.34.1", "@typescript-eslint/types@8.34.1": +"@typescript-eslint/types@8.34.1", "@typescript-eslint/types@^8.34.1": version "8.34.1" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz" integrity sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA== @@ -732,17 +916,109 @@ "@typescript-eslint/types" "8.34.1" eslint-visitor-keys "^4.2.1" +"@unrs/resolver-binding-android-arm-eabi@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.0.tgz#e91317973356eb845c9186db5f9ec43e8d0002eb" + integrity sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg== + +"@unrs/resolver-binding-android-arm64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.0.tgz#fbdd79b2a8e478e02e1c0751dfbc100017522161" + integrity sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA== + "@unrs/resolver-binding-darwin-arm64@1.9.0": version "1.9.0" resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz" integrity sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A== +"@unrs/resolver-binding-darwin-x64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.0.tgz#4a205940ec311ac8396c3f25043644b78cc98a20" + integrity sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw== + +"@unrs/resolver-binding-freebsd-x64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.0.tgz#ed82e000f7248011696ecc8894f574caa197b0be" + integrity sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.0.tgz#534a8b32118590f7fb9edd21c6576243a89a8aad" + integrity sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.0.tgz#b31718752e77cecbbcf7ba1e01dea97c1a5ee7e0" + integrity sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA== + +"@unrs/resolver-binding-linux-arm64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.0.tgz#0f11ba195020cfa869533fb74733d68162349d14" + integrity sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA== + +"@unrs/resolver-binding-linux-arm64-musl@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.0.tgz#8b6bc086cf9efaa22e8f2fef381786d6636b8e19" + integrity sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.0.tgz#5cd15899af31c2bbf90bfca5f798f64a16770e23" + integrity sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.0.tgz#4f2c75af52437eb10b48ea5b72750fb65fb174be" + integrity sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w== + +"@unrs/resolver-binding-linux-riscv64-musl@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.0.tgz#6a87e82e0dd39d34ff37ddba6accf73cdb396e86" + integrity sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw== + +"@unrs/resolver-binding-linux-s390x-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.0.tgz#6524cc3c01309022de86c4a7317fe7d9f9fb855c" + integrity sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA== + +"@unrs/resolver-binding-linux-x64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.0.tgz#85fb8a45dccf3823cd73ea4b61b2c3f2e8ab6653" + integrity sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA== + +"@unrs/resolver-binding-linux-x64-musl@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.0.tgz#235e539da5872df51c03e0e050a1c715e25044ca" + integrity sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg== + +"@unrs/resolver-binding-wasm32-wasi@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.0.tgz#1bc614ce2ba61330c16bffa1e50f41d95d25c0a6" + integrity sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.0.tgz#0d8704275a9f2634d81b35d8a00a2f4bd8dec7fa" + integrity sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ== + +"@unrs/resolver-binding-win32-ia32-msvc@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.0.tgz#46909cbeb9a38b3f31a64833fe03aa1aebb8da2b" + integrity sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A== + +"@unrs/resolver-binding-win32-x64-msvc@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.0.tgz#708b957d5d66543c45240b4c6b45ee63ed59b6b7" + integrity sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.15.0: +acorn@^8.15.0: version "8.15.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== @@ -1080,7 +1356,7 @@ csstype@^3.0.2, csstype@^3.1.3: resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -d3-array@^3.1.6, "d3-array@2 - 3", "d3-array@2.10.0 - 3": +"d3-array@2 - 3", "d3-array@2.10.0 - 3", d3-array@^3.1.6: version "3.2.4" resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== @@ -1102,7 +1378,7 @@ d3-ease@^3.0.1: resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== -d3-interpolate@^3.0.1, "d3-interpolate@1.2.0 - 3": +"d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz" integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== @@ -1139,7 +1415,7 @@ d3-shape@^3.1.0: dependencies: d3-time "1 - 3" -d3-time@^3.0.0, "d3-time@1 - 3", "d3-time@2.1.1 - 3": +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz" integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== @@ -1190,12 +1466,12 @@ date-fns@^2.16.1: dependencies: "@babel/runtime" "^7.21.0" -"date-fns@^2.25.0 || ^3.2.0 || ^4.0.0", date-fns@^4.1.0, "date-fns@3.0.6 || >=3.0.0": +date-fns@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz" integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== -dayjs@^1.10.7, dayjs@^1.11.13: +dayjs@^1.11.13: version "1.11.13" resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== @@ -1458,7 +1734,7 @@ eslint-module-utils@^2.12.0: dependencies: debug "^3.2.7" -eslint-plugin-import@*, eslint-plugin-import@^2.31.0: +eslint-plugin-import@^2.31.0: version "2.31.0" resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz" integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== @@ -1551,7 +1827,7 @@ eslint-visitor-keys@^4.2.1: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.23.0 || ^8.0.0 || ^9.0.0", "eslint@^8.57.0 || ^9.0.0", eslint@^9: +eslint@^9: version "9.29.0" resolved "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz" integrity sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ== @@ -1640,17 +1916,6 @@ fast-equals@^5.0.1: resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz" integrity sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw== -fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - fast-glob@3.3.1: version "3.3.1" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" @@ -1662,6 +1927,17 @@ fast-glob@3.3.1: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" @@ -2491,7 +2767,7 @@ picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -"picomatch@^3 || ^4", picomatch@^4.0.2: +picomatch@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== @@ -2544,7 +2820,7 @@ react-date-range@^2.0.1: react-list "^0.8.13" shallow-equal "^1.2.1" -"react-dom@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react-dom@^19.0.0, react-dom@>=16.6.0: +react-dom@^19.0.0: version "19.1.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz" integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g== @@ -2590,7 +2866,7 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -"react@^0.14 || ^15.0.0-rc || >=15.0", "react@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react@^19.0.0, react@^19.1.0, "react@>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0", react@>=16.6.0, react@>=16.8.0, "react@0.14 || 15 - 19": +react@^19.0.0: version "19.1.0" resolved "https://registry.npmjs.org/react/-/react-19.1.0.tgz" integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== @@ -3085,7 +3361,7 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" -typescript@^5, typescript@>=3.3.1, typescript@>=4.8.4, "typescript@>=4.8.4 <5.9.0": +typescript@^5: version "5.8.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== From c4692e22228048b47cea338be745eceefcac56fb Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Sun, 29 Jun 2025 08:49:58 +0200 Subject: [PATCH 20/55] Fixed a bunch of stuff --- .../app/components/PageLinks/PageLinks.tsx | 2 +- payment-iq/app/dashboard/loading.tsx | 20 ++ .../app/dashboard/transactions/page.tsx | 8 +- .../GeneralHealthCard/GeneralHealthCard.tsx | 5 +- .../Pages/transactions/Transactions.tsx | 209 ++++++++++-------- .../app/features/SectionCard/SectionCard.tsx | 2 +- .../TransactionsOverViewTable.tsx | 4 +- .../TransactionsWaitingApproval.tsx | 4 +- .../header/dropDown/DropDown.styled.ts | 1 + .../dashboard/header/dropDown/DropDown.tsx | 5 +- .../dashboard/layout/layoutWrapper.ts | 11 +- .../features/dashboard/sidebar/Sidebar.tsx | 2 +- .../sidebar}/SidebarLink.constants.ts | 2 +- .../sidebar}/SidebarLink.interfaces.ts | 0 .../app/features/sidebar/SideBarLink.tsx | 41 ---- .../app/features/sidebar/SidebarLayout.tsx | 73 ------ payment-iq/app/utils/defineStyles.ts | 11 + payment-iq/config/ThemeRegistry.tsx | 13 +- 18 files changed, 177 insertions(+), 236 deletions(-) create mode 100644 payment-iq/app/dashboard/loading.tsx rename payment-iq/{constants => app/features/dashboard/sidebar}/SidebarLink.constants.ts (94%) rename payment-iq/{interfaces => app/features/dashboard/sidebar}/SidebarLink.interfaces.ts (100%) delete mode 100644 payment-iq/app/features/sidebar/SideBarLink.tsx delete mode 100644 payment-iq/app/features/sidebar/SidebarLayout.tsx create mode 100644 payment-iq/app/utils/defineStyles.ts diff --git a/payment-iq/app/components/PageLinks/PageLinks.tsx b/payment-iq/app/components/PageLinks/PageLinks.tsx index 12962d8..4f8f670 100644 --- a/payment-iq/app/components/PageLinks/PageLinks.tsx +++ b/payment-iq/app/components/PageLinks/PageLinks.tsx @@ -2,7 +2,7 @@ import Link from "next/link"; import { styled } from "@mui/system"; -import { ISidebarLink } from "@/interfaces/SidebarLink.interfaces"; +import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; const LinkContainer = styled("div")(({ theme }) => ({ display: "flex", diff --git a/payment-iq/app/dashboard/loading.tsx b/payment-iq/app/dashboard/loading.tsx new file mode 100644 index 0000000..eab1584 --- /dev/null +++ b/payment-iq/app/dashboard/loading.tsx @@ -0,0 +1,20 @@ +// app/dashboard/loading.tsx +"use client"; + +import CircularProgress from "@mui/material/CircularProgress"; +import { styled } from "@mui/system"; + +const LoaderWrapper = styled("div")({ + height: "100vh", + display: "flex", + alignItems: "center", + justifyContent: "center", +}); + +export default function Loading() { + return ( + + + + ); +} diff --git a/payment-iq/app/dashboard/transactions/page.tsx b/payment-iq/app/dashboard/transactions/page.tsx index 796f0c0..cd6af40 100644 --- a/payment-iq/app/dashboard/transactions/page.tsx +++ b/payment-iq/app/dashboard/transactions/page.tsx @@ -1,13 +1,13 @@ // This ensures this component is rendered only on the client side -'use client'; +"use client"; -import TransactionTable from '@/app/components/Pages/Transactions/Transactions'; +import TransactionTable from "@/app/features/Pages/transactions/Transactions"; export default function TransactionPage() { return ( -
+
{/* This page will now be rendered on the client-side */}
); -} \ No newline at end of file +} diff --git a/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx index fc9a446..df4778c 100644 --- a/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx +++ b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx @@ -3,7 +3,6 @@ import MoreVertIcon from "@mui/icons-material/MoreVert"; import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; import { DateRangePicker } from "../DateRangePicker/DateRangePicker"; -// import { ArrowDropUp } from '@mui/icons-material'; const stats = [ { label: "TOTAL", value: 5, change: "-84.85%" }, @@ -63,8 +62,8 @@ export const GeneralHealthCard = () => { - {stats.map((item) => ( - + {stats.map((item, i) => ( + ))} diff --git a/payment-iq/app/features/Pages/transactions/Transactions.tsx b/payment-iq/app/features/Pages/transactions/Transactions.tsx index 43ad416..58f7deb 100644 --- a/payment-iq/app/features/Pages/transactions/Transactions.tsx +++ b/payment-iq/app/features/Pages/transactions/Transactions.tsx @@ -1,110 +1,131 @@ -'use client'; -import { useState } from 'react'; +"use client"; +import { useState } from "react"; import { - Button, Dialog, DialogTitle, DialogContent, DialogActions, - FormControl, Select, MenuItem, FormControlLabel, Checkbox, - Stack, Paper, styled, - TextField -} from '@mui/material'; -import FileUploadIcon from '@mui/icons-material/FileUpload'; -import * as XLSX from 'xlsx'; -import { saveAs } from 'file-saver'; -import { DataGrid } from '@mui/x-data-grid'; -import { columns } from './constants'; -import { rows } from './mockData'; + Button, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + FormControl, + Select, + MenuItem, + FormControlLabel, + Checkbox, + Stack, + Paper, + styled, + TextField, +} from "@mui/material"; +import FileUploadIcon from "@mui/icons-material/FileUpload"; +import * as XLSX from "xlsx"; +import { saveAs } from "file-saver"; +import { DataGrid } from "@mui/x-data-grid"; +import { columns } from "./constants"; +import { rows } from "./mockData"; const paginationModel = { page: 0, pageSize: 50 }; export default function TransactionTable() { - const [open, setOpen] = useState(false); - const [fileType, setFileType] = useState<'csv' | 'xls' | 'xlsx'>('csv'); - const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); + const [open, setOpen] = useState(false); + const [fileType, setFileType] = useState<"csv" | "xls" | "xlsx">("csv"); + const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); - const handleExport = () => { - const exportRows = onlyCurrentTable ? rows.slice(0, 5) : rows; - const exportData = [ - columns.map(col => col.headerName), - // @ts-expect-error - Dynamic field access from DataGrid columns - ...exportRows.map(row => columns.map(col => row[col.field] ?? '')), - ]; + const handleExport = () => { + const exportRows = onlyCurrentTable ? rows.slice(0, 5) : rows; + const exportData = [ + columns.map((col) => col.headerName), + // @ts-expect-error - Dynamic field access from DataGrid columns + ...exportRows.map((row) => columns.map((col) => row[col.field] ?? "")), + ]; - const worksheet = XLSX.utils.aoa_to_sheet(exportData); - const workbook = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(workbook, worksheet, 'Transactions'); + const worksheet = XLSX.utils.aoa_to_sheet(exportData); + const workbook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(workbook, worksheet, "Transactions"); - if (fileType === 'csv') { - const csv = XLSX.utils.sheet_to_csv(worksheet); - const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); - saveAs(blob, 'transactions.csv'); - } else { - XLSX.writeFile(workbook, `transactions.${fileType}`, { bookType: fileType }); - } + if (fileType === "csv") { + const csv = XLSX.utils.sheet_to_csv(worksheet); + const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" }); + saveAs(blob, "transactions.csv"); + } else { + XLSX.writeFile(workbook, `transactions.${fileType}`, { + bookType: fileType, + }); + } - setOpen(false); - }; + setOpen(false); + }; - return ( - - - console.log(`setSearchQuery(${e.target.value})`)} - sx={{ width: 300 }} - /> - - + return ( + + + console.log(`setSearchQuery(${e.target.value})`)} + sx={{ width: 300 }} + /> + + - + - {/* Export Dialog */} - setOpen(false)}> - Export Transactions - - - - - setOnlyCurrentTable(e.target.checked)} - /> - } - label="Only export the results in the current table" - sx={{ mt: 2 }} - /> - - - - - - - - ); + {/* Export Dialog */} + setOpen(false)}> + Export Transactions + + + + + setOnlyCurrentTable(e.target.checked)} + /> + } + label="Only export the results in the current table" + sx={{ mt: 2 }} + /> + + + + + + + + ); } const StyledPaper = styled(Paper)(() => ({ - height: '90vh', + height: "90vh", })); diff --git a/payment-iq/app/features/SectionCard/SectionCard.tsx b/payment-iq/app/features/SectionCard/SectionCard.tsx index 7e08dda..add14c1 100644 --- a/payment-iq/app/features/SectionCard/SectionCard.tsx +++ b/payment-iq/app/features/SectionCard/SectionCard.tsx @@ -35,7 +35,7 @@ export const SectionCard = ({ title, icon, items }: ISectionCardProps) => ( {items.map((item, index) => ( - + { - {data1.map((row) => ( - + {data1.map((row, i) => ( + { - {transactions.map((tx) => ( - + {transactions.map((tx, i) => ( + {tx.id} {tx.user} {tx.created} diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.styled.ts b/payment-iq/app/features/dashboard/header/dropDown/DropDown.styled.ts index 8de5573..4c53e18 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.styled.ts +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.styled.ts @@ -5,4 +5,5 @@ export const Em = styled("em")(() => ({ alignItems: "center", opacity: 0.7, fontStyle: "normal", + color: "white", })); diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx index adb6138..baecdd4 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx @@ -7,8 +7,8 @@ import { SelectChangeEvent, } from "@mui/material"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; -import { SIDEBAR_LINKS } from "@/constants/SidebarLink.constants"; -import { ISidebarLink } from "@/interfaces/SidebarLink.interfaces"; +import { SIDEBAR_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; +import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; import { Em } from "./DropDown.styled"; import PageLinks from "../../../../components/PageLinks/PageLinks"; @@ -35,6 +35,7 @@ export default function SidebarDropdown({ onChange }: Props) { MenuProps={{ PaperProps: { style: { + backgroundColor: "rgba(30, 30, 30, 0.7)", // 0.9 opacity maxHeight: 200, }, }, diff --git a/payment-iq/app/features/dashboard/layout/layoutWrapper.ts b/payment-iq/app/features/dashboard/layout/layoutWrapper.ts index 3a9a999..f288979 100644 --- a/payment-iq/app/features/dashboard/layout/layoutWrapper.ts +++ b/payment-iq/app/features/dashboard/layout/layoutWrapper.ts @@ -1,8 +1,7 @@ -import { styled } from '@mui/system'; +import { styled } from "@mui/system"; -export const LayoutWrapper = styled('div')({ - display: 'flex', - width: '100%', - height: '100vh', - // overflow: 'hidden', +export const LayoutWrapper = styled("div")({ + display: "flex", + width: "100%", + height: "100vh", }); diff --git a/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx index 11fcd40..7271d47 100644 --- a/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx +++ b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx @@ -3,7 +3,7 @@ import React from "react"; import DashboardIcon from "@mui/icons-material/Dashboard"; import { styled } from "@mui/system"; -import { SIDEBAR_LINKS } from "@/constants/SidebarLink.constants"; +import { SIDEBAR_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; import PageLinks from "../../../components/PageLinks/PageLinks"; const SideBarContainer = styled("aside")(({ theme }) => ({ diff --git a/payment-iq/constants/SidebarLink.constants.ts b/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts similarity index 94% rename from payment-iq/constants/SidebarLink.constants.ts rename to payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts index 2fadf07..38b6a59 100644 --- a/payment-iq/constants/SidebarLink.constants.ts +++ b/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts @@ -8,7 +8,7 @@ import GavelIcon from "@mui/icons-material/Gavel"; import HubIcon from "@mui/icons-material/Hub"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; import InsightsIcon from "@mui/icons-material/Insights"; -import { ISidebarLink } from "@/interfaces/SidebarLink.interfaces"; +import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; export const SIDEBAR_LINKS: ISidebarLink[] = [ { title: "Home", path: "/dashboard", icon: HomeIcon }, diff --git a/payment-iq/interfaces/SidebarLink.interfaces.ts b/payment-iq/app/features/dashboard/sidebar/SidebarLink.interfaces.ts similarity index 100% rename from payment-iq/interfaces/SidebarLink.interfaces.ts rename to payment-iq/app/features/dashboard/sidebar/SidebarLink.interfaces.ts diff --git a/payment-iq/app/features/sidebar/SideBarLink.tsx b/payment-iq/app/features/sidebar/SideBarLink.tsx deleted file mode 100644 index 17601cf..0000000 --- a/payment-iq/app/features/sidebar/SideBarLink.tsx +++ /dev/null @@ -1,41 +0,0 @@ -'use client'; - -import Link from 'next/link'; -import { styled } from '@mui/system'; -import { ISidebarLink } from '@/interfaces/SidebarLink.interfaces'; - -const LinkContainer = styled('div')(({ theme }) => ({ - display: 'flex', - alignItems: 'center', - padding: '12px 1px', - borderRadius: '4px', - color: theme.palette.text.tertiary, - textDecoration: 'none', - transition: 'background 0.2s ease-in-out', - - '&:hover': { - color: 'rgb(255, 255, 255)', - background: 'rgba(255, 255, 255, 0.08)', - backgroundColor: theme.palette.action.hover, - cursor: 'pointer', - }, -})); - -const LinkText = styled('span')(({ theme }) => ({ - color: theme.palette.text.tertiary, - marginLeft: '12px', - fontWeight: 500, -})); - -export default function SidebarLink({ title, path, icon: Icon }: ISidebarLink) { - return ( - - - - {Icon && } - {title} - - - - ); -} diff --git a/payment-iq/app/features/sidebar/SidebarLayout.tsx b/payment-iq/app/features/sidebar/SidebarLayout.tsx deleted file mode 100644 index 1d5e544..0000000 --- a/payment-iq/app/features/sidebar/SidebarLayout.tsx +++ /dev/null @@ -1,73 +0,0 @@ -'use client'; - -import React from 'react'; -import { styled } from '@mui/system'; -import DashboardIcon from '@mui/icons-material/Dashboard'; -import { SIDEBAR_LINKS } from '@/constants/SidebarLink.constants'; -import SideBarLink from './SideBarLink'; - -// SideBar Container (styled using MUI System) -export const SideBar = styled('div')(({ theme }) => ({ - width: '240px', - backgroundColor: theme.palette.background.primary, - color: 'white', - padding: theme.spacing(2), - height: '100vh', - display: 'flex', - flexDirection: 'column', - justifyContent: 'space-between', - transition: 'width 0.3s ease', // Transition for resizing -})); - -// Main Content Area -export const MainContent = styled('div')(({ theme }) => ({ - flexGrow: 1, - padding: theme.spacing(4), - backgroundColor: theme.palette.background.default, - minHeight: '100vh', - overflowY: 'auto', -})); - -// SideBar Header -export const SideBarHeader = styled('div')(({ theme }) => ({ - marginBottom: theme.spacing(2), - fontSize: '20px', - fontWeight: 600, - display: 'flex', - alignItems: 'center', -})); - -// Page Wrapper that holds SideBar and Content -export const LayoutWrapper = styled('div')({ - display: 'flex', - flexDirection: 'row', - height: '100vh', -}); - -interface SideBarLayoutProps { - children: React.ReactNode; // Add children to accept passed content -} - -const SideBarLayout: React.FC = ({ children }) => { - return ( - - - - PaymentIQ - - - {SIDEBAR_LINKS.map((link) => ( - - ))} - - {children} {/* Render children here */} - - ); -}; - -export default SideBarLayout; diff --git a/payment-iq/app/utils/defineStyles.ts b/payment-iq/app/utils/defineStyles.ts new file mode 100644 index 0000000..3df26c0 --- /dev/null +++ b/payment-iq/app/utils/defineStyles.ts @@ -0,0 +1,11 @@ +// utils/defineStyles.ts +import type { SxProps, Theme } from "@mui/material/styles"; + +/** + * Helper to define style objects with full key/type inference as SxProps + */ +export function defineStyles>>( + styles: T +): T { + return styles; +} diff --git a/payment-iq/config/ThemeRegistry.tsx b/payment-iq/config/ThemeRegistry.tsx index 19ddc63..6c2b953 100644 --- a/payment-iq/config/ThemeRegistry.tsx +++ b/payment-iq/config/ThemeRegistry.tsx @@ -1,10 +1,13 @@ +"use client"; -'use client'; +import { ThemeProvider, CssBaseline } from "@mui/material"; +import theme from "./theme"; -import { ThemeProvider, CssBaseline } from '@mui/material'; -import theme from './theme'; - -export default function ThemeRegistry({ children }: { children: React.ReactNode }) { +export default function ThemeRegistry({ + children, +}: { + children: React.ReactNode; +}) { return ( From 76b9d78bd5d5e53ad475a8c5c7b006518a5ff8f1 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Sun, 29 Jun 2025 09:16:10 +0200 Subject: [PATCH 21/55] Initial commit --- .../features/dashboard/sidebar/Sidebar.tsx | 43 ++---- .../features/dashboard/sidebar/sideBar.scss | 29 ++++ payment-iq/package.json | 1 + payment-iq/yarn.lock | 131 +++++++++++++++++- 4 files changed, 167 insertions(+), 37 deletions(-) create mode 100644 payment-iq/app/features/dashboard/sidebar/sideBar.scss diff --git a/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx index 7271d47..203842b 100644 --- a/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx +++ b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx @@ -2,46 +2,19 @@ import React from "react"; import DashboardIcon from "@mui/icons-material/Dashboard"; -import { styled } from "@mui/system"; import { SIDEBAR_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; import PageLinks from "../../../components/PageLinks/PageLinks"; - -const SideBarContainer = styled("aside")(({ theme }) => ({ - position: "fixed", - top: 0, - left: 0, - width: 240, - height: "100vh", - backgroundColor: theme.palette.background.primary, - color: theme.palette.text.primary, - display: "flex", - flexDirection: "column", - padding: theme.spacing(2), - zIndex: 1100, - borderRight: `1px solid ${theme.palette.divider}`, -})); - -const SidebarHeader = styled("div")(({ theme }) => ({ - fontSize: "20px", - fontWeight: 600, - marginBottom: theme.spacing(3), - display: "flex", - alignItems: "center", - color: theme.palette.text.primary, -})); - -const IconSpacing = styled(DashboardIcon)(({ theme }) => ({ - marginLeft: theme.spacing(1), -})); +import "./sideBar.scss"; const SideBar = () => { return ( - - - - Betrise cashir + ); }; diff --git a/payment-iq/app/features/dashboard/sidebar/sideBar.scss b/payment-iq/app/features/dashboard/sidebar/sideBar.scss new file mode 100644 index 0000000..9649e9d --- /dev/null +++ b/payment-iq/app/features/dashboard/sidebar/sideBar.scss @@ -0,0 +1,29 @@ +/* styles/sidebar.scss */ + +.sidebar-container { + position: fixed; + top: 0; + left: 0; + width: 240px; + height: 100vh; + background-color: #121212; // or your theme color + color: white; + display: flex; + flex-direction: column; + padding: 16px; + z-index: 1100; + border-right: 1px solid #333; +} + +.sidebar-header { + font-size: 20px; + font-weight: 600; + margin-bottom: 24px; + display: flex; + align-items: center; + color: white; +} + +.sidebar-icon-spacing { + margin-left: 8px; +} diff --git a/payment-iq/package.json b/payment-iq/package.json index 91b50ab..39c6e4f 100644 --- a/payment-iq/package.json +++ b/payment-iq/package.json @@ -23,6 +23,7 @@ "react-date-range": "^2.0.1", "react-dom": "^19.0.0", "recharts": "^2.15.3", + "sass": "^1.89.2", "xlsx": "^0.18.5" }, "devDependencies": { diff --git a/payment-iq/yarn.lock b/payment-iq/yarn.lock index 691cc21..ff2afd4 100644 --- a/payment-iq/yarn.lock +++ b/payment-iq/yarn.lock @@ -672,6 +672,95 @@ resolved "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz" integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== +"@parcel/watcher-android-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" + integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== + +"@parcel/watcher-darwin-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" + integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== + +"@parcel/watcher-darwin-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" + integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== + +"@parcel/watcher-freebsd-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" + integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== + +"@parcel/watcher-linux-arm-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" + integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== + +"@parcel/watcher-linux-arm-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" + integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== + +"@parcel/watcher-linux-arm64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" + integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== + +"@parcel/watcher-linux-arm64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" + integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== + +"@parcel/watcher-linux-x64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" + integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== + +"@parcel/watcher-linux-x64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" + integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== + +"@parcel/watcher-win32-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" + integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== + +"@parcel/watcher-win32-ia32@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" + integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== + +"@parcel/watcher-win32-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947" + integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== + +"@parcel/watcher@^2.4.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200" + integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.1" + "@parcel/watcher-darwin-arm64" "2.5.1" + "@parcel/watcher-darwin-x64" "2.5.1" + "@parcel/watcher-freebsd-x64" "2.5.1" + "@parcel/watcher-linux-arm-glibc" "2.5.1" + "@parcel/watcher-linux-arm-musl" "2.5.1" + "@parcel/watcher-linux-arm64-glibc" "2.5.1" + "@parcel/watcher-linux-arm64-musl" "2.5.1" + "@parcel/watcher-linux-x64-glibc" "2.5.1" + "@parcel/watcher-linux-x64-musl" "2.5.1" + "@parcel/watcher-win32-arm64" "2.5.1" + "@parcel/watcher-win32-ia32" "2.5.1" + "@parcel/watcher-win32-x64" "2.5.1" + "@popperjs/core@^2.11.8": version "2.11.8" resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" @@ -1268,6 +1357,13 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + classnames@^2.2.6: version "2.5.1" resolved "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz" @@ -1518,6 +1614,11 @@ define-properties@^1.1.3, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-libc@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz" @@ -2181,6 +2282,11 @@ ignore@^7.0.0: resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz" integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== +immutable@^5.0.2: + version "5.1.3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.3.tgz#e6486694c8b76c37c063cca92399fa64098634d4" + integrity sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg== + import-fresh@^3.2.1: version "3.3.1" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" @@ -2549,7 +2655,7 @@ merge2@^1.3.0: resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4, micromatch@^4.0.8: +micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -2619,6 +2725,11 @@ next@15.3.3: "@next/swc-win32-x64-msvc" "15.3.3" sharp "^0.34.1" +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -2871,6 +2982,11 @@ react@^19.0.0: resolved "https://registry.npmjs.org/react/-/react-19.1.0.tgz" integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + recharts-scale@^0.4.4: version "0.4.5" resolved "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz" @@ -2991,6 +3107,17 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" +sass@^1.89.2: + version "1.89.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.89.2.tgz#a771716aeae774e2b529f72c0ff2dfd46c9de10e" + integrity sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA== + dependencies: + chokidar "^4.0.0" + immutable "^5.0.2" + source-map-js ">=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + scheduler@^0.26.0: version "0.26.0" resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz" @@ -3132,7 +3259,7 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.2.1" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== From e8f6324f8492d55d800d1638409da9c7ab2acdd2 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Sun, 29 Jun 2025 21:28:37 +0200 Subject: [PATCH 22/55] Added to default global.scss --- .../app/components/PageLinks/PageLinks.scss | 23 ++++++++++++ .../app/components/PageLinks/PageLinks.tsx | 35 ++++--------------- .../dashboard/header/dropDown/DropDown.tsx | 1 - .../features/dashboard/sidebar/sideBar.scss | 4 +-- payment-iq/app/layout.tsx | 15 +++++--- .../{app/globals.css => styles/globals.scss} | 6 ++-- payment-iq/styles/variables.scss | 21 +++++++++++ 7 files changed, 65 insertions(+), 40 deletions(-) create mode 100644 payment-iq/app/components/PageLinks/PageLinks.scss rename payment-iq/{app/globals.css => styles/globals.scss} (88%) create mode 100644 payment-iq/styles/variables.scss diff --git a/payment-iq/app/components/PageLinks/PageLinks.scss b/payment-iq/app/components/PageLinks/PageLinks.scss new file mode 100644 index 0000000..237f156 --- /dev/null +++ b/payment-iq/app/components/PageLinks/PageLinks.scss @@ -0,0 +1,23 @@ +/* PageLinks.scss */ + +.link-container { + display: flex; + align-items: center; + padding: 12px 1px; + border-radius: 4px; + color: var(--text-tertiary); + text-decoration: none; + transition: background 0.2s ease-in-out; + + &:hover { + color: #fff; + background-color: var(--hover-color); + cursor: pointer; + } +} + +.link-text { + color: var(--text-tertiary); + margin-left: 12px; + font-weight: 500; +} diff --git a/payment-iq/app/components/PageLinks/PageLinks.tsx b/payment-iq/app/components/PageLinks/PageLinks.tsx index 4f8f670..95196a6 100644 --- a/payment-iq/app/components/PageLinks/PageLinks.tsx +++ b/payment-iq/app/components/PageLinks/PageLinks.tsx @@ -1,40 +1,17 @@ +// PageLinks.tsx + "use client"; import Link from "next/link"; -import { styled } from "@mui/system"; import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; - -const LinkContainer = styled("div")(({ theme }) => ({ - display: "flex", - alignItems: "center", - padding: "12px 1px", - borderRadius: "4px", - color: theme.palette.text.tertiary, - textDecoration: "none", - transition: "background 0.2s ease-in-out", - - "&:hover": { - color: "rgb(255, 255, 255)", - background: "rgba(255, 255, 255, 0.08)", - backgroundColor: theme.palette.action.hover, - cursor: "pointer", - }, -})); - -const LinkText = styled("span")(({ theme }) => ({ - color: theme.palette.text.tertiary, - marginLeft: "12px", - fontWeight: 500, -})); +import "./PageLinks.scss"; export default function PageLinks({ title, path, icon: Icon }: ISidebarLink) { return ( - - - {Icon && } - {title} - + + {Icon && } + {title} ); diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx index baecdd4..6cf4784 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx @@ -35,7 +35,6 @@ export default function SidebarDropdown({ onChange }: Props) { MenuProps={{ PaperProps: { style: { - backgroundColor: "rgba(30, 30, 30, 0.7)", // 0.9 opacity maxHeight: 200, }, }, diff --git a/payment-iq/app/features/dashboard/sidebar/sideBar.scss b/payment-iq/app/features/dashboard/sidebar/sideBar.scss index 9649e9d..6f500ae 100644 --- a/payment-iq/app/features/dashboard/sidebar/sideBar.scss +++ b/payment-iq/app/features/dashboard/sidebar/sideBar.scss @@ -1,12 +1,10 @@ -/* styles/sidebar.scss */ - .sidebar-container { position: fixed; top: 0; left: 0; width: 240px; height: 100vh; - background-color: #121212; // or your theme color + background-color: var(--background-primary); color: white; display: flex; flex-direction: column; diff --git a/payment-iq/app/layout.tsx b/payment-iq/app/layout.tsx index e7709d0..2a6d7a1 100644 --- a/payment-iq/app/layout.tsx +++ b/payment-iq/app/layout.tsx @@ -1,12 +1,17 @@ -import ThemeRegistry from '@/config/ThemeRegistry'; -import type { Metadata } from 'next'; +import ThemeRegistry from "@/config/ThemeRegistry"; +import type { Metadata } from "next"; +import "../styles/globals.scss"; export const metadata: Metadata = { - title: 'Your App', - description: 'Generated by Next.js', + title: "Your App", + description: "Generated by Next.js", }; -export default function RootLayout({ children }: { children: React.ReactNode }) { +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { return ( diff --git a/payment-iq/app/globals.css b/payment-iq/styles/globals.scss similarity index 88% rename from payment-iq/app/globals.css rename to payment-iq/styles/globals.scss index e3734be..84ca7b5 100644 --- a/payment-iq/app/globals.css +++ b/payment-iq/styles/globals.scss @@ -1,6 +1,8 @@ +@import "./variables"; + :root { - --background: #ffffff; - --foreground: #171717; + --background: #0a0a0a; + --foreground: #ededed; } @media (prefers-color-scheme: dark) { diff --git a/payment-iq/styles/variables.scss b/payment-iq/styles/variables.scss new file mode 100644 index 0000000..44569de --- /dev/null +++ b/payment-iq/styles/variables.scss @@ -0,0 +1,21 @@ +// Declare SCSS variables +$primary-color: #1976d2; +$secondary-color: #d32f2f; +$background-primary: rgb(69, 190, 171); +$text-primary: #000000; +$text-secondary: #555555; +$text-tertiary: #ffffff; +$hover-color: rgba(0, 0, 0, 0.08); + +$font-family-base: "Roboto", "Helvetica", "Arial", sans-serif; + +:root { + --primary-color: #{$primary-color}; + --secondary-color: #{$secondary-color}; + --background-primary: #{$background-primary}; + --text-primary: #{$text-primary}; + --text-secondary: #{$text-secondary}; + --text-tertiary: #{$text-tertiary}; + --hover-color: #{$hover-color}; + --font-family-base: #{$font-family-base}; +} From 1b8b238d0967d7513d3b854f4965f13befdaabd8 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Sun, 29 Jun 2025 22:05:09 +0200 Subject: [PATCH 23/55] Managed to style dynamically --- .../app/components/PageLinks/PageLinks.tsx | 16 ++++++++++++---- .../dashboard/header/dropDown/DropDown.scss | 8 ++++++++ .../dashboard/header/dropDown/DropDown.styled.ts | 9 --------- .../dashboard/header/dropDown/DropDown.tsx | 8 +++++--- payment-iq/package.json | 1 + payment-iq/styles/globals.scss | 8 ++++++++ payment-iq/styles/variables.scss | 11 ----------- 7 files changed, 34 insertions(+), 27 deletions(-) create mode 100644 payment-iq/app/features/dashboard/header/dropDown/DropDown.scss delete mode 100644 payment-iq/app/features/dashboard/header/dropDown/DropDown.styled.ts diff --git a/payment-iq/app/components/PageLinks/PageLinks.tsx b/payment-iq/app/components/PageLinks/PageLinks.tsx index 95196a6..0061763 100644 --- a/payment-iq/app/components/PageLinks/PageLinks.tsx +++ b/payment-iq/app/components/PageLinks/PageLinks.tsx @@ -1,15 +1,23 @@ -// PageLinks.tsx - "use client"; import Link from "next/link"; import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; +import clsx from "clsx"; // Utility to merge class names import "./PageLinks.scss"; -export default function PageLinks({ title, path, icon: Icon }: ISidebarLink) { +interface PageLinksProps extends ISidebarLink { + className?: string; +} + +export default function PageLinks({ + title, + path, + icon: Icon, + className, +}: PageLinksProps) { return ( - + {Icon && } {title} diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss b/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss new file mode 100644 index 0000000..fd5a8c2 --- /dev/null +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss @@ -0,0 +1,8 @@ +/* DropDown.scss */ + +.link-container-text { + color: var(--text-primary); + span { + color: var(--text-primary); + } +} diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.styled.ts b/payment-iq/app/features/dashboard/header/dropDown/DropDown.styled.ts deleted file mode 100644 index 4c53e18..0000000 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.styled.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { styled } from "@mui/system"; - -export const Em = styled("em")(() => ({ - display: "flex", - alignItems: "center", - opacity: 0.7, - fontStyle: "normal", - color: "white", -})); diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx index 6cf4784..62fee2f 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx @@ -9,8 +9,9 @@ import { import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import { SIDEBAR_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; -import { Em } from "./DropDown.styled"; +import { Em } from "./Em"; // If you still want to create a component for the tag import PageLinks from "../../../../components/PageLinks/PageLinks"; +import "./DropDown.scss"; // Import the SCSS file interface Props { onChange?: (event: SelectChangeEvent) => void; @@ -41,10 +42,10 @@ export default function SidebarDropdown({ onChange }: Props) { }} > - + {/* Select a page - + */} {SIDEBAR_LINKS.map((link: ISidebarLink) => ( ))} diff --git a/payment-iq/package.json b/payment-iq/package.json index 39c6e4f..ea98c4e 100644 --- a/payment-iq/package.json +++ b/payment-iq/package.json @@ -15,6 +15,7 @@ "@mui/material": "^7.1.2", "@mui/x-data-grid": "^8.5.2", "@mui/x-date-pickers": "^8.5.3", + "clsx": "^2.1.1", "date-fns": "^4.1.0", "dayjs": "^1.11.13", "file-saver": "^2.0.5", diff --git a/payment-iq/styles/globals.scss b/payment-iq/styles/globals.scss index 84ca7b5..e75b9c3 100644 --- a/payment-iq/styles/globals.scss +++ b/payment-iq/styles/globals.scss @@ -3,6 +3,14 @@ :root { --background: #0a0a0a; --foreground: #ededed; + --primary-color: #{$primary-color}; + --secondary-color: #{$secondary-color}; + --background-primary: #{$background-primary}; + --text-primary: #{$text-primary}; + --text-secondary: #{$text-secondary}; + --text-tertiary: #{$text-tertiary}; + --hover-color: #{$hover-color}; + --font-family-base: #{$font-family-base}; } @media (prefers-color-scheme: dark) { diff --git a/payment-iq/styles/variables.scss b/payment-iq/styles/variables.scss index 44569de..148e55f 100644 --- a/payment-iq/styles/variables.scss +++ b/payment-iq/styles/variables.scss @@ -8,14 +8,3 @@ $text-tertiary: #ffffff; $hover-color: rgba(0, 0, 0, 0.08); $font-family-base: "Roboto", "Helvetica", "Arial", sans-serif; - -:root { - --primary-color: #{$primary-color}; - --secondary-color: #{$secondary-color}; - --background-primary: #{$background-primary}; - --text-primary: #{$text-primary}; - --text-secondary: #{$text-secondary}; - --text-tertiary: #{$text-tertiary}; - --hover-color: #{$hover-color}; - --font-family-base: #{$font-family-base}; -} From 6a879a747c75cf309d2ae75155b51d2953281289 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Sun, 29 Jun 2025 22:22:15 +0200 Subject: [PATCH 24/55] s --- .../app/components/PageLinks/PageLinks.tsx | 13 ++-------- .../dashboard/header/dropDown/DropDown.scss | 11 ++++---- .../dashboard/header/dropDown/DropDown.tsx | 26 ++++++++----------- 3 files changed, 19 insertions(+), 31 deletions(-) diff --git a/payment-iq/app/components/PageLinks/PageLinks.tsx b/payment-iq/app/components/PageLinks/PageLinks.tsx index 0061763..e9a5db6 100644 --- a/payment-iq/app/components/PageLinks/PageLinks.tsx +++ b/payment-iq/app/components/PageLinks/PageLinks.tsx @@ -5,19 +5,10 @@ import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.inter import clsx from "clsx"; // Utility to merge class names import "./PageLinks.scss"; -interface PageLinksProps extends ISidebarLink { - className?: string; -} - -export default function PageLinks({ - title, - path, - icon: Icon, - className, -}: PageLinksProps) { +export default function PageLinks({ title, path, icon: Icon }: ISidebarLink) { return ( - + {Icon && } {title} diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss b/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss index fd5a8c2..dedc3ff 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss @@ -1,8 +1,9 @@ /* DropDown.scss */ - -.link-container-text { - color: var(--text-primary); - span { - color: var(--text-primary); +.dropdown-container { + .link-container { + color: var(--text-secondary); + .link-text { + color: var(--text-primary); + } } } diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx index 62fee2f..6b037bd 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx @@ -41,21 +41,17 @@ export default function SidebarDropdown({ onChange }: Props) { }, }} > - - {/* - Select a page - - */} - - {SIDEBAR_LINKS.map((link: ISidebarLink) => ( - - ))} + +
+ {SIDEBAR_LINKS.map((link: ISidebarLink) => ( + + ))} +
); From cac8a2c680ba1a1cdcd4da8476fe0b7cc61a124e Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Mon, 30 Jun 2025 09:00:30 +0200 Subject: [PATCH 25/55] Added Account in navbar --- .../app/components/PageLinks/PageLinks.tsx | 10 ++- payment-iq/app/dashboard/kyc/page.tsx | 11 ++-- .../app/features/dashboard/header/Header.scss | 17 +++++ .../app/features/dashboard/header/Header.tsx | 30 ++++----- .../header/accountMenu/AccountMenu.tsx | 64 +++++++++++++++++++ .../dashboard/header/dropDown/DropDown.scss | 1 - .../dashboard/header/dropDown/DropDown.tsx | 14 ++-- payment-iq/styles/globals.scss | 2 +- payment-iq/styles/variables.scss | 2 +- 9 files changed, 113 insertions(+), 38 deletions(-) create mode 100644 payment-iq/app/features/dashboard/header/Header.scss create mode 100644 payment-iq/app/features/dashboard/header/accountMenu/AccountMenu.tsx diff --git a/payment-iq/app/components/PageLinks/PageLinks.tsx b/payment-iq/app/components/PageLinks/PageLinks.tsx index e9a5db6..a9785d7 100644 --- a/payment-iq/app/components/PageLinks/PageLinks.tsx +++ b/payment-iq/app/components/PageLinks/PageLinks.tsx @@ -5,7 +5,15 @@ import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.inter import clsx from "clsx"; // Utility to merge class names import "./PageLinks.scss"; -export default function PageLinks({ title, path, icon: Icon }: ISidebarLink) { +interface IPageLinksProps extends ISidebarLink { + isShowIcon?: boolean; +} + +export default function PageLinks({ + title, + path, + icon: Icon, +}: IPageLinksProps) { return ( diff --git a/payment-iq/app/dashboard/kyc/page.tsx b/payment-iq/app/dashboard/kyc/page.tsx index 367259b..e1e1102 100644 --- a/payment-iq/app/dashboard/kyc/page.tsx +++ b/payment-iq/app/dashboard/kyc/page.tsx @@ -1,15 +1,14 @@ -// This ensures this component is rendered only on the client side // 'use client'; -import Typography from '@mui/material/Typography'; -import React from 'react'; +import Typography from "@mui/material/Typography"; +import React from "react"; export default function KycPage() { return ( -
- +
+ KYC Overview
); -} \ No newline at end of file +} diff --git a/payment-iq/app/features/dashboard/header/Header.scss b/payment-iq/app/features/dashboard/header/Header.scss new file mode 100644 index 0000000..68bc362 --- /dev/null +++ b/payment-iq/app/features/dashboard/header/Header.scss @@ -0,0 +1,17 @@ +.header-toolbar { + display: flex; + align-items: center; + + .left-group { + width: 100px; + display: flex; + align-items: center; + gap: 12px; // optional spacing between menu and dropdown + } + + .right-group { + margin-left: auto; // pushes it to the far right + display: flex; + align-items: center; + } +} diff --git a/payment-iq/app/features/dashboard/header/Header.tsx b/payment-iq/app/features/dashboard/header/Header.tsx index 6c40362..6c2778f 100644 --- a/payment-iq/app/features/dashboard/header/Header.tsx +++ b/payment-iq/app/features/dashboard/header/Header.tsx @@ -2,6 +2,8 @@ import React, { useState } from "react"; import { AppBar, Toolbar, IconButton, Menu, MenuItem } from "@mui/material"; import MenuIcon from "@mui/icons-material/Menu"; import Dropdown from "./dropDown/DropDown"; +import AccountMenu from "./accountMenu/AccountMenu"; +import "./Header.scss"; const Header = () => { const [anchorEl, setAnchorEl] = useState(null); @@ -25,25 +27,17 @@ const Header = () => { elevation={0} sx={{ borderBottom: "1px solid #22242626" }} > - - {/* Burger Menu */} - - - + +
+ + + + +
- {/* Dropdown Button */} - - - {/* Dropdown Menu */} - - Option 1 - Option 2 - Option 3 - +
+ +
); diff --git a/payment-iq/app/features/dashboard/header/accountMenu/AccountMenu.tsx b/payment-iq/app/features/dashboard/header/accountMenu/AccountMenu.tsx new file mode 100644 index 0000000..7287199 --- /dev/null +++ b/payment-iq/app/features/dashboard/header/accountMenu/AccountMenu.tsx @@ -0,0 +1,64 @@ +"use client"; + +import React from "react"; +import { + Menu, + MenuItem, + IconButton, + ListItemIcon, + Typography, +} from "@mui/material"; +import AccountCircleIcon from "@mui/icons-material/AccountCircle"; +import SettingsIcon from "@mui/icons-material/Settings"; +import LogoutIcon from "@mui/icons-material/Logout"; + +export default function AccountMenu() { + const [anchorEl, setAnchorEl] = React.useState(null); + const open = Boolean(anchorEl); + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + return ( + <> + + + + + + + + + + Account + + + + + + + Settings + + + + + + + Sign out + + + + ); +} diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss b/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss index dedc3ff..e5f6908 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss @@ -1,4 +1,3 @@ -/* DropDown.scss */ .dropdown-container { .link-container { color: var(--text-secondary); diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx index 6b037bd..b4babda 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx @@ -6,12 +6,10 @@ import { MenuItem, SelectChangeEvent, } from "@mui/material"; -import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import { SIDEBAR_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; -import { Em } from "./Em"; // If you still want to create a component for the tag import PageLinks from "../../../../components/PageLinks/PageLinks"; -import "./DropDown.scss"; // Import the SCSS file +import "./DropDown.scss"; interface Props { onChange?: (event: SelectChangeEvent) => void; @@ -26,7 +24,7 @@ export default function SidebarDropdown({ onChange }: Props) { }; return ( - + Navigate To diff --git a/payment-iq/styles/globals.scss b/payment-iq/styles/globals.scss index e75b9c3..366294f 100644 --- a/payment-iq/styles/globals.scss +++ b/payment-iq/styles/globals.scss @@ -1,4 +1,4 @@ -@import "./variables"; +@use "./variables" as *; :root { --background: #0a0a0a; diff --git a/payment-iq/styles/variables.scss b/payment-iq/styles/variables.scss index 148e55f..d8311d9 100644 --- a/payment-iq/styles/variables.scss +++ b/payment-iq/styles/variables.scss @@ -1,4 +1,4 @@ -// Declare SCSS variables +// These Variable match thee MUI theme variables. For now they have to be updated manually. But can be done automatically also $primary-color: #1976d2; $secondary-color: #d32f2f; $background-primary: rgb(69, 190, 171); From 9a8d00e8ff481901b8bdfb4f9ba803b22159f18d Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Mon, 30 Jun 2025 09:17:45 +0200 Subject: [PATCH 26/55] Added more routing --- payment-iq/app/dashboard/rules/page.tsx | 7 +++++++ .../dashboard/header/dropDown/DropDown.tsx | 4 ++-- .../app/features/dashboard/sidebar/Sidebar.tsx | 4 ++-- .../dashboard/sidebar/SidebarLink.constants.ts | 18 +++++++++++------- 4 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 payment-iq/app/dashboard/rules/page.tsx diff --git a/payment-iq/app/dashboard/rules/page.tsx b/payment-iq/app/dashboard/rules/page.tsx new file mode 100644 index 0000000..a3178fe --- /dev/null +++ b/payment-iq/app/dashboard/rules/page.tsx @@ -0,0 +1,7 @@ +export default function RulesPage() { + return ( +
+

Rules Overview - SSR

+
+ ); +} diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx index b4babda..b1f4596 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx @@ -6,7 +6,7 @@ import { MenuItem, SelectChangeEvent, } from "@mui/material"; -import { SIDEBAR_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; +import { PAGE_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; import PageLinks from "../../../../components/PageLinks/PageLinks"; import "./DropDown.scss"; @@ -42,7 +42,7 @@ export default function SidebarDropdown({ onChange }: Props) { Select a page
- {SIDEBAR_LINKS.map((link: ISidebarLink) => ( + {PAGE_LINKS.map((link: ISidebarLink) => ( ))}
diff --git a/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx index 203842b..5c43b0f 100644 --- a/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx +++ b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx @@ -2,7 +2,7 @@ import React from "react"; import DashboardIcon from "@mui/icons-material/Dashboard"; -import { SIDEBAR_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; +import { PAGE_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; import PageLinks from "../../../components/PageLinks/PageLinks"; import "./sideBar.scss"; @@ -15,7 +15,7 @@ const SideBar = () => {
- {SIDEBAR_LINKS.map((link) => ( + {PAGE_LINKS.map((link) => ( Date: Mon, 30 Jun 2025 19:21:27 +0300 Subject: [PATCH 27/55] refactor scss --- .../app/features/AccountIQ/AccountIQ.scss | 7 +++ .../app/features/AccountIQ/AccountIQ.tsx | 31 ++++++------- .../DateRangePicker/DateRangePicker.scss | 12 +++++ .../DateRangePicker/DateRangePicker.tsx | 40 +++++++---------- .../features/Documentation/Documentation.scss | 5 +++ .../features/Documentation/Documentation.tsx | 24 +++++----- .../features/FetchReports/FetchReport.scss | 6 +++ .../features/FetchReports/FetchReports.tsx | 12 ++--- .../GeneralHealthCard/GeneralHealthCard.scss | 18 ++++++++ .../GeneralHealthCard/GeneralHealthCard.tsx | 43 +++--------------- .../components/StatItem.scss | 12 +++++ .../GeneralHealthCard/components/StatItem.tsx | 27 ++++++++++++ .../DashboardHomePage/DashboardHomePage.tsx | 22 +++++----- .../app/features/PieCharts/PieCharts.scss | 8 ++++ .../app/features/PieCharts/PieCharts.tsx | 25 +++++------ .../app/features/SectionCard/SectionCard.scss | 20 +++++++++ .../app/features/SectionCard/SectionCard.tsx | 20 +++------ .../TransactionsOverView.scss | 28 ++++++++++++ .../components/TransactionsOverViewTable.scss | 17 +++++++ .../components}/TransactionsOverViewTable.tsx | 24 ++++------ .../TransactionsOverview.tsx | 44 ++++--------------- .../TransactionsWaitingApproval.scss | 6 +++ .../TransactionsWaitingApproval.tsx | 4 +- .../app/features/WhatsNew/WhatsNew.scss | 5 +++ payment-iq/app/features/WhatsNew/WhatsNew.tsx | 44 ++++++++++--------- .../sidebar/SidebarLink.interfaces.ts | 2 +- .../features/dashboard/sidebar/sideBar.scss | 38 ++++++++-------- 27 files changed, 318 insertions(+), 226 deletions(-) create mode 100644 payment-iq/app/features/AccountIQ/AccountIQ.scss create mode 100644 payment-iq/app/features/DateRangePicker/DateRangePicker.scss create mode 100644 payment-iq/app/features/Documentation/Documentation.scss create mode 100644 payment-iq/app/features/FetchReports/FetchReport.scss create mode 100644 payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.scss create mode 100644 payment-iq/app/features/GeneralHealthCard/components/StatItem.scss create mode 100644 payment-iq/app/features/GeneralHealthCard/components/StatItem.tsx create mode 100644 payment-iq/app/features/PieCharts/PieCharts.scss create mode 100644 payment-iq/app/features/SectionCard/SectionCard.scss create mode 100644 payment-iq/app/features/TransactionsOverView/TransactionsOverView.scss create mode 100644 payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.scss rename payment-iq/app/features/{TransactionsOverview => TransactionsOverView/components}/TransactionsOverViewTable.tsx (72%) create mode 100644 payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.scss create mode 100644 payment-iq/app/features/WhatsNew/WhatsNew.scss diff --git a/payment-iq/app/features/AccountIQ/AccountIQ.scss b/payment-iq/app/features/AccountIQ/AccountIQ.scss new file mode 100644 index 0000000..8033663 --- /dev/null +++ b/payment-iq/app/features/AccountIQ/AccountIQ.scss @@ -0,0 +1,7 @@ +.account-iq-wrapper { + .icon { + font-weight: bold; + color: #4ecdc4; + margin-top: 4px; + } +} diff --git a/payment-iq/app/features/AccountIQ/AccountIQ.tsx b/payment-iq/app/features/AccountIQ/AccountIQ.tsx index b909bc9..93fcff4 100644 --- a/payment-iq/app/features/AccountIQ/AccountIQ.tsx +++ b/payment-iq/app/features/AccountIQ/AccountIQ.tsx @@ -1,23 +1,20 @@ -import { styled } from "@mui/material"; +import { Box } from "@mui/material"; import { SectionCard } from "../SectionCard/SectionCard"; - -const AccountIQIcon = styled("div")(() => ({ - fontWeight: "bold", - color: "#4ecdc4", - marginTop: "4px", -})); +import "./AccountIQ.scss"; export const AccountIQ = () => { return ( - AIQ} - items={[ - { title: "Automatically reconcile your transactions" }, - { title: "Live wallet balances from providers" }, - { title: "Gaming provider financial overviews" }, - { title: "Learn more" }, - ]} - /> + + AIQ
} + items={[ + { title: "Automatically reconcile your transactions" }, + { title: "Live wallet balances from providers" }, + { title: "Gaming provider financial overviews" }, + { title: "Learn more" }, + ]} + /> + ); }; diff --git a/payment-iq/app/features/DateRangePicker/DateRangePicker.scss b/payment-iq/app/features/DateRangePicker/DateRangePicker.scss new file mode 100644 index 0000000..2b67dcc --- /dev/null +++ b/payment-iq/app/features/DateRangePicker/DateRangePicker.scss @@ -0,0 +1,12 @@ +.date-range-picker-wrapper { + .date-typo { + font-size: 0.875rem; + cursor: pointer; + padding: 8px; + border-radius: 4px; + + &:hover { + background-color: rgba(0, 0, 0, 0.04); + } + } +} diff --git a/payment-iq/app/features/DateRangePicker/DateRangePicker.tsx b/payment-iq/app/features/DateRangePicker/DateRangePicker.tsx index afb9fa8..fda7ca1 100644 --- a/payment-iq/app/features/DateRangePicker/DateRangePicker.tsx +++ b/payment-iq/app/features/DateRangePicker/DateRangePicker.tsx @@ -6,18 +6,20 @@ import { format } from "date-fns"; import "react-date-range/dist/styles.css"; import "react-date-range/dist/theme/default.css"; +import "./DateRangePicker.scss"; + export const DateRangePicker = () => { const [range, setRange] = useState([ { startDate: new Date(), endDate: new Date(), - key: "selection" - } + key: "selection", + }, ]); - + const [anchorEl, setAnchorEl] = useState(null); - const handleSelect: DateRangeProps['onChange'] = (ranges) => { + const handleSelect: DateRangeProps["onChange"] = (ranges) => { if (ranges.selection) { setRange([ranges.selection]); if (ranges.selection.endDate !== ranges.selection.startDate) { @@ -35,22 +37,22 @@ export const DateRangePicker = () => { }; const open = Boolean(anchorEl); - const id = open ? 'date-range-popover' : undefined; + const id = open ? "date-range-popover" : undefined; return ( - + @@ -64,21 +66,11 @@ export const DateRangePicker = () => { - - {format(range[0].startDate ?? new Date(), "PPP")} - {format(range[0].endDate ?? new Date(), "PPP")} + + {format(range[0].startDate ?? new Date(), "PPP")} -{" "} + {format(range[0].endDate ?? new Date(), "PPP")} ); -} \ No newline at end of file +}; diff --git a/payment-iq/app/features/Documentation/Documentation.scss b/payment-iq/app/features/Documentation/Documentation.scss new file mode 100644 index 0000000..e35f626 --- /dev/null +++ b/payment-iq/app/features/Documentation/Documentation.scss @@ -0,0 +1,5 @@ +.documentation-wrapper { + .icon { + height: auto; + } +} diff --git a/payment-iq/app/features/Documentation/Documentation.tsx b/payment-iq/app/features/Documentation/Documentation.tsx index 5932444..c8bc994 100644 --- a/payment-iq/app/features/Documentation/Documentation.tsx +++ b/payment-iq/app/features/Documentation/Documentation.tsx @@ -1,18 +1,22 @@ import React from "react"; import DescriptionIcon from "@mui/icons-material/Description"; import { SectionCard } from "../SectionCard/SectionCard"; +import { Box } from "@mui/material"; +import "./Documentation.scss"; export const Documentation = () => { return ( - } - items={[ - { title: "Provider Integration Overview" }, - { title: "APIs Introduction" }, - { title: "Documentation Overview" }, - { title: "How-Tos" }, - ]} - /> + + } + items={[ + { title: "Provider Integration Overview" }, + { title: "APIs Introduction" }, + { title: "Documentation Overview" }, + { title: "How-Tos" }, + ]} + /> + ); }; diff --git a/payment-iq/app/features/FetchReports/FetchReport.scss b/payment-iq/app/features/FetchReports/FetchReport.scss new file mode 100644 index 0000000..90601ab --- /dev/null +++ b/payment-iq/app/features/FetchReports/FetchReport.scss @@ -0,0 +1,6 @@ +.fetch-report-paper { + padding: 23px; + margin: 16px; + display: flex; + flex-direction: column; +} diff --git a/payment-iq/app/features/FetchReports/FetchReports.tsx b/payment-iq/app/features/FetchReports/FetchReports.tsx index e79f79b..54cd7dc 100644 --- a/payment-iq/app/features/FetchReports/FetchReports.tsx +++ b/payment-iq/app/features/FetchReports/FetchReports.tsx @@ -16,6 +16,8 @@ import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; import MoreVertIcon from "@mui/icons-material/MoreVert"; import { DateRangePicker } from "../DateRangePicker/DateRangePicker"; +import "./FetchReport.scss"; + export const FetchReport = () => { const [state, setState] = useState(""); const [psp, setPsp] = useState(""); @@ -29,15 +31,7 @@ export const FetchReport = () => { const isDownloadEnabled = state && psp && reportType; return ( - + Fetch Report diff --git a/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.scss b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.scss new file mode 100644 index 0000000..742315e --- /dev/null +++ b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.scss @@ -0,0 +1,18 @@ +.general-health-card-wrapper { + .header { + display: flex; + justify-content: space-between; + margin-bottom: 16px; + + .right-side { + display: flex; + align-items: center; + } + } + + .stat-items { + display: flex; + justify-content: space-around; + margin-top: 16px; + } +} diff --git a/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx index df4778c..223183e 100644 --- a/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx +++ b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx @@ -1,8 +1,10 @@ import { Box, Card, CardContent, Typography, IconButton } from "@mui/material"; import MoreVertIcon from "@mui/icons-material/MoreVert"; import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; -import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; + import { DateRangePicker } from "../DateRangePicker/DateRangePicker"; +import { StatItem } from "./components/StatItem"; +import "./GeneralHealthCard.scss"; const stats = [ { label: "TOTAL", value: 5, change: "-84.85%" }, @@ -12,46 +14,15 @@ const stats = [ { label: "ATV", value: "€0.00", change: "-100%" }, ]; -const StatItem = ({ - label, - value, - change, -}: { - label: string; - value: string | number; - change: string; -}) => ( - - - {label} - - - {value} - - - - {/* */} - {change} - - -); - export const GeneralHealthCard = () => { return ( - + - + General Health - + @@ -61,7 +32,7 @@ export const GeneralHealthCard = () => { - + {stats.map((item, i) => ( ))} diff --git a/payment-iq/app/features/GeneralHealthCard/components/StatItem.scss b/payment-iq/app/features/GeneralHealthCard/components/StatItem.scss new file mode 100644 index 0000000..3282b07 --- /dev/null +++ b/payment-iq/app/features/GeneralHealthCard/components/StatItem.scss @@ -0,0 +1,12 @@ +.static-item-wrapper { + text-align: center; + padding-left: 16px; + padding-right: 16px; + + .percentage { + display: flex; + align-items: center; + justify-content: center; + color: red; + } +} diff --git a/payment-iq/app/features/GeneralHealthCard/components/StatItem.tsx b/payment-iq/app/features/GeneralHealthCard/components/StatItem.tsx new file mode 100644 index 0000000..6e176a1 --- /dev/null +++ b/payment-iq/app/features/GeneralHealthCard/components/StatItem.tsx @@ -0,0 +1,27 @@ +import { Box, Typography } from "@mui/material"; +import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; +import "./StatItem.scss"; + +export const StatItem = ({ + label, + value, + change, +}: { + label: string; + value: string | number; + change: string; +}) => ( + + + {label} + + + {value} + + + + {/* */} + {change} + + +); diff --git a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx index 5b59237..cd2aede 100644 --- a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx +++ b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx @@ -1,11 +1,11 @@ -import { Box } from "@mui/material" -import { GeneralHealthCard } from "../../GeneralHealthCard/GeneralHealthCard" -import { TransactionsOverview } from "../../TransactionsOverview/TransactionsOverview" -import { TransactionsWaitingApproval } from "../../TransactionsWaitingApproval/TransactionsWaitingApproval" -import { FetchReport } from "../../FetchReports/FetchReports" -import { Documentation } from "../../Documentation/Documentation" -import { AccountIQ } from "../../AccountIQ/AccountIQ" -import { WhatsNew } from "../../WhatsNew/WhatsNew" +import { Box } from "@mui/material"; +import { GeneralHealthCard } from "../../GeneralHealthCard/GeneralHealthCard"; +import { TransactionsOverView } from "../../TransactionsOverView/TransactionsOverView"; +import { TransactionsWaitingApproval } from "../../TransactionsWaitingApproval/TransactionsWaitingApproval"; +import { FetchReport } from "../../FetchReports/FetchReports"; +import { Documentation } from "../../Documentation/Documentation"; +import { AccountIQ } from "../../AccountIQ/AccountIQ"; +import { WhatsNew } from "../../WhatsNew/WhatsNew"; export const DashboardHomePage = () => { return ( @@ -13,12 +13,12 @@ export const DashboardHomePage = () => { - + - ) -} + ); +}; diff --git a/payment-iq/app/features/PieCharts/PieCharts.scss b/payment-iq/app/features/PieCharts/PieCharts.scss new file mode 100644 index 0000000..13ddf83 --- /dev/null +++ b/payment-iq/app/features/PieCharts/PieCharts.scss @@ -0,0 +1,8 @@ +.pie-charts-wrapper { + width: 100%; + height: 300px; + + @media (min-width: 960px) { + width: 60%; + } +} diff --git a/payment-iq/app/features/PieCharts/PieCharts.tsx b/payment-iq/app/features/PieCharts/PieCharts.tsx index 4b59f89..93d57b6 100644 --- a/payment-iq/app/features/PieCharts/PieCharts.tsx +++ b/payment-iq/app/features/PieCharts/PieCharts.tsx @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { Box } from "@mui/material"; import { PieChart, Pie, Cell, ResponsiveContainer } from "recharts"; - +import "./PieCharts.scss"; const data = [ { name: "Group A", value: 100 }, { name: "Group B", value: 200 }, { name: "Group C", value: 400 }, - { name: "Group D", value: 300 } + { name: "Group D", value: 300 }, ]; const COLORS = ["#4caf50", "#ff9800", "#f44336", "#9e9e9e"]; @@ -19,7 +19,7 @@ const renderCustomizedLabel = ({ innerRadius, outerRadius, percent, -// index + // index }: any) => { const radius = innerRadius + (outerRadius - innerRadius) * 0.5; const x = cx + radius * Math.cos(-midAngle * RADIAN); @@ -39,12 +39,7 @@ const renderCustomizedLabel = ({ }; export const PieCharts = () => { return ( - + { cy="50%" labelLine={false} label={renderCustomizedLabel} - outerRadius="80%" // Percentage-based radius + outerRadius="80%" // Percentage-based radius fill="#8884d8" dataKey="value" > {data.map((entry, index) => ( - + ))} - + ); -} - +}; diff --git a/payment-iq/app/features/SectionCard/SectionCard.scss b/payment-iq/app/features/SectionCard/SectionCard.scss new file mode 100644 index 0000000..d4743c4 --- /dev/null +++ b/payment-iq/app/features/SectionCard/SectionCard.scss @@ -0,0 +1,20 @@ +.section-card-paper { + padding: 16px; + margin: 16px; + display: flex; + flex-direction: column; + .header { + display: flex; + justify-content: space-between; + margin-bottom: 16px; + .title { + display: flex; + gap: 16px; + } + .icon-wrapper { + display: flex; + align-items: center; + gap: 16px; + } + } +} diff --git a/payment-iq/app/features/SectionCard/SectionCard.tsx b/payment-iq/app/features/SectionCard/SectionCard.tsx index add14c1..c67040a 100644 --- a/payment-iq/app/features/SectionCard/SectionCard.tsx +++ b/payment-iq/app/features/SectionCard/SectionCard.tsx @@ -13,20 +13,19 @@ import { import MoreVertIcon from "@mui/icons-material/MoreVert"; import { ISectionCardProps } from "./types"; +import "./SectionCard.scss"; + export const SectionCard = ({ title, icon, items }: ISectionCardProps) => ( - + - - + + {icon} {title} - + @@ -36,12 +35,7 @@ export const SectionCard = ({ title, icon, items }: ISectionCardProps) => ( {items.map((item, index) => ( - + ))} diff --git a/payment-iq/app/features/TransactionsOverView/TransactionsOverView.scss b/payment-iq/app/features/TransactionsOverView/TransactionsOverView.scss new file mode 100644 index 0000000..94c08e5 --- /dev/null +++ b/payment-iq/app/features/TransactionsOverView/TransactionsOverView.scss @@ -0,0 +1,28 @@ +.transaction-overview-paper { + padding: 23px; + margin: 16px; + display: flex; + flex-direction: column; + + .header { + display: flex; + justify-content: space-between; + align-items: center; + padding-left: 8px; + padding-right: 8px; + } + + .chart-table-wrapper { + padding: 16px; + margin: 16px; + display: flex; + flex-direction: row; + gap: 32px; + flex-wrap: wrap; + + @media (min-width: 960px) { + flex-wrap: nowrap; + gap: 0; + } + } +} diff --git a/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.scss b/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.scss new file mode 100644 index 0000000..0cddcae --- /dev/null +++ b/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.scss @@ -0,0 +1,17 @@ +.transactions-overview-table-wrapper { + .state-wrapper { + display: flex; + justify-content: flex-start; + align-items: center; + margin-left: auto; + margin-right: auto; + width: 73px; + + .state { + width: 10px; + height: 10px; + border-radius: 50%; + margin-right: 8px; + } + } +} diff --git a/payment-iq/app/features/TransactionsOverview/TransactionsOverViewTable.tsx b/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.tsx similarity index 72% rename from payment-iq/app/features/TransactionsOverview/TransactionsOverViewTable.tsx rename to payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.tsx index 7dac466..c45bfc1 100644 --- a/payment-iq/app/features/TransactionsOverview/TransactionsOverViewTable.tsx +++ b/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.tsx @@ -10,6 +10,8 @@ import { Button, } from "@mui/material"; +import "./TransactionsOverViewTable.scss"; + const data1 = [ { state: "Success", count: 120, percentage: "60%", color: "green" }, { state: "Pending", count: 50, percentage: "25%", color: "orange" }, @@ -17,9 +19,12 @@ const data1 = [ { state: "Other", count: 10, percentage: "5%", color: "gray" }, ]; -export const TransactionsOverviewTable = () => { +export const TransactionsOverViewTable = () => { return ( - +
@@ -33,22 +38,11 @@ export const TransactionsOverviewTable = () => { {data1.map((row, i) => ( - + {row.state} diff --git a/payment-iq/app/features/TransactionsOverview/TransactionsOverview.tsx b/payment-iq/app/features/TransactionsOverview/TransactionsOverview.tsx index 0c705c0..a737657 100644 --- a/payment-iq/app/features/TransactionsOverview/TransactionsOverview.tsx +++ b/payment-iq/app/features/TransactionsOverview/TransactionsOverview.tsx @@ -3,29 +3,16 @@ import { Box, Button, IconButton, Paper, Typography } from "@mui/material"; import { PieCharts } from "../PieCharts/PieCharts"; import MoreVertIcon from "@mui/icons-material/MoreVert"; -import { TransactionsOverviewTable } from "./TransactionsOverViewTable"; +import { TransactionsOverViewTable } from "./components/TransactionsOverViewTable"; -export const TransactionsOverview = () => { +import "./TransactionsOverView.scss"; + +export const TransactionsOverView = () => { const router = useRouter(); return ( - + {/* Title and All Transactions Button */} - + Transactions Overview (Last 24h) @@ -44,24 +31,9 @@ export const TransactionsOverview = () => { {/* Chart and Table */} - + - + ); diff --git a/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.scss b/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.scss new file mode 100644 index 0000000..6e68250 --- /dev/null +++ b/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.scss @@ -0,0 +1,6 @@ +.transactions-waiting-approval-paper { + padding: 16px; + margin: 16px; + display: flex; + flex-direction: column; +} diff --git a/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx b/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx index e3cfdb3..925e103 100644 --- a/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx +++ b/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx @@ -16,6 +16,7 @@ import CancelIcon from "@mui/icons-material/Cancel"; import MoreVertIcon from "@mui/icons-material/MoreVert"; +import "./TransactionsWaitingApproval.scss"; const transactions = [ { id: "1049078821", @@ -119,7 +120,8 @@ export const TransactionsWaitingApproval = () => { return ( diff --git a/payment-iq/app/features/WhatsNew/WhatsNew.scss b/payment-iq/app/features/WhatsNew/WhatsNew.scss new file mode 100644 index 0000000..6125718 --- /dev/null +++ b/payment-iq/app/features/WhatsNew/WhatsNew.scss @@ -0,0 +1,5 @@ +.whats-new-wrapper { + .icon { + height: auto; + } +} diff --git a/payment-iq/app/features/WhatsNew/WhatsNew.tsx b/payment-iq/app/features/WhatsNew/WhatsNew.tsx index 1f3aed3..d775d59 100644 --- a/payment-iq/app/features/WhatsNew/WhatsNew.tsx +++ b/payment-iq/app/features/WhatsNew/WhatsNew.tsx @@ -1,27 +1,31 @@ +import { Box } from "@mui/material"; import { SectionCard } from "../SectionCard/SectionCard"; import WifiIcon from "@mui/icons-material/Wifi"; +import "./WhatsNew.scss"; export const WhatsNew = () => { return ( - } - items={[ - { - title: "Sneak Peek – Discover the New Rules Hub Feature", - date: "13 May 2025", - }, - { - title: - "New security measures for anonymizing sensitive configuration values, effective December 2nd", - date: "31 Oct 2024", - }, - { - title: "Introducing Our New Transactions and Rule Views", - date: "23 Oct 2024", - }, - { title: "Introducing Our New Status Page", date: "09 Sept 2024" }, - ]} - /> + + } + items={[ + { + title: "Sneak Peek – Discover the New Rules Hub Feature", + date: "13 May 2025", + }, + { + title: + "New security measures for anonymizing sensitive configuration values, effective December 2nd", + date: "31 Oct 2024", + }, + { + title: "Introducing Our New Transactions and Rule Views", + date: "23 Oct 2024", + }, + { title: "Introducing Our New Status Page", date: "09 Sept 2024" }, + ]} + /> + ); }; diff --git a/payment-iq/app/features/dashboard/sidebar/SidebarLink.interfaces.ts b/payment-iq/app/features/dashboard/sidebar/SidebarLink.interfaces.ts index 498ff08..8de910e 100644 --- a/payment-iq/app/features/dashboard/sidebar/SidebarLink.interfaces.ts +++ b/payment-iq/app/features/dashboard/sidebar/SidebarLink.interfaces.ts @@ -4,4 +4,4 @@ export interface ISidebarLink { title: string; path: string; icon?: ElementType; -} \ No newline at end of file +} diff --git a/payment-iq/app/features/dashboard/sidebar/sideBar.scss b/payment-iq/app/features/dashboard/sidebar/sideBar.scss index 6f500ae..7fd02c4 100644 --- a/payment-iq/app/features/dashboard/sidebar/sideBar.scss +++ b/payment-iq/app/features/dashboard/sidebar/sideBar.scss @@ -1,27 +1,27 @@ .sidebar-container { - position: fixed; - top: 0; - left: 0; - width: 240px; - height: 100vh; - background-color: var(--background-primary); - color: white; - display: flex; - flex-direction: column; - padding: 16px; - z-index: 1100; - border-right: 1px solid #333; + position: fixed; + top: 0; + left: 0; + width: 240px; + height: 100vh; + background-color: var(--background-primary); + color: white; + display: flex; + flex-direction: column; + padding: 16px; + z-index: 1100; + border-right: 1px solid #333; } .sidebar-header { - font-size: 20px; - font-weight: 600; - margin-bottom: 24px; - display: flex; - align-items: center; - color: white; + font-size: 20px; + font-weight: 600; + margin-bottom: 24px; + display: flex; + align-items: center; + color: white; } .sidebar-icon-spacing { - margin-left: 8px; + margin-left: 8px; } From ae967a7e2d904d5c893604d1fc24d7512ad70928 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Wed, 2 Jul 2025 00:03:42 +0300 Subject: [PATCH 28/55] fix comments --- .../app/components/PageLinks/PageLinks.scss | 39 +++++++++---------- .../app/components/PageLinks/PageLinks.tsx | 6 +-- .../app/features/AccountIQ/AccountIQ.scss | 4 +- .../app/features/AccountIQ/AccountIQ.tsx | 4 +- .../DateRangePicker/DateRangePicker.scss | 4 +- .../DateRangePicker/DateRangePicker.tsx | 7 +++- .../features/Documentation/Documentation.scss | 4 +- .../features/Documentation/Documentation.tsx | 6 ++- .../features/FetchReports/FetchReport.scss | 2 +- .../features/FetchReports/FetchReports.tsx | 2 +- .../GeneralHealthCard/GeneralHealthCard.scss | 8 ++-- .../GeneralHealthCard/GeneralHealthCard.tsx | 8 ++-- .../components/StatItem.scss | 4 +- .../GeneralHealthCard/components/StatItem.tsx | 4 +- .../app/features/PieCharts/PieCharts.scss | 2 +- .../app/features/PieCharts/PieCharts.tsx | 2 +- .../app/features/SectionCard/SectionCard.scss | 8 ++-- .../app/features/SectionCard/SectionCard.tsx | 8 ++-- .../TransactionsOverView.scss | 6 +-- .../components/TransactionsOverViewTable.scss | 6 +-- .../components/TransactionsOverViewTable.tsx | 9 ++--- .../TransactionsOverview.tsx | 6 +-- .../TransactionsWaitingApproval.scss | 2 +- .../TransactionsWaitingApproval.tsx | 6 +-- .../app/features/WhatsNew/WhatsNew.scss | 4 +- payment-iq/app/features/WhatsNew/WhatsNew.tsx | 4 +- .../app/features/dashboard/header/Header.scss | 30 +++++++------- .../app/features/dashboard/header/Header.tsx | 9 +++-- .../dashboard/header/dropDown/DropDown.scss | 12 +++--- .../dashboard/header/dropDown/DropDown.tsx | 2 +- .../features/dashboard/sidebar/Sidebar.tsx | 7 ++-- .../features/dashboard/sidebar/sideBar.scss | 24 ++++++------ 32 files changed, 123 insertions(+), 126 deletions(-) diff --git a/payment-iq/app/components/PageLinks/PageLinks.scss b/payment-iq/app/components/PageLinks/PageLinks.scss index 237f156..59baa21 100644 --- a/payment-iq/app/components/PageLinks/PageLinks.scss +++ b/payment-iq/app/components/PageLinks/PageLinks.scss @@ -1,23 +1,20 @@ -/* PageLinks.scss */ +.page-link__container { + display: flex; + align-items: center; + padding: 12px 1px; + border-radius: 4px; + color: var(--text-tertiary); + text-decoration: none; + transition: background 0.2s ease-in-out; -.link-container { - display: flex; - align-items: center; - padding: 12px 1px; - border-radius: 4px; - color: var(--text-tertiary); - text-decoration: none; - transition: background 0.2s ease-in-out; - - &:hover { - color: #fff; - background-color: var(--hover-color); - cursor: pointer; - } -} - -.link-text { - color: var(--text-tertiary); - margin-left: 12px; - font-weight: 500; + &:hover { + color: #fff; + background-color: var(--hover-color); + cursor: pointer; + } + .page-link__text { + color: var(--text-tertiary); + margin-left: 12px; + font-weight: 500; + } } diff --git a/payment-iq/app/components/PageLinks/PageLinks.tsx b/payment-iq/app/components/PageLinks/PageLinks.tsx index a9785d7..d90e5f9 100644 --- a/payment-iq/app/components/PageLinks/PageLinks.tsx +++ b/payment-iq/app/components/PageLinks/PageLinks.tsx @@ -15,10 +15,10 @@ export default function PageLinks({ icon: Icon, }: IPageLinksProps) { return ( - - + + {Icon && } - {title} + {title} ); diff --git a/payment-iq/app/features/AccountIQ/AccountIQ.scss b/payment-iq/app/features/AccountIQ/AccountIQ.scss index 8033663..827351c 100644 --- a/payment-iq/app/features/AccountIQ/AccountIQ.scss +++ b/payment-iq/app/features/AccountIQ/AccountIQ.scss @@ -1,5 +1,5 @@ -.account-iq-wrapper { - .icon { +.account-iq { + .account-iq__icon { font-weight: bold; color: #4ecdc4; margin-top: 4px; diff --git a/payment-iq/app/features/AccountIQ/AccountIQ.tsx b/payment-iq/app/features/AccountIQ/AccountIQ.tsx index 93fcff4..c218a64 100644 --- a/payment-iq/app/features/AccountIQ/AccountIQ.tsx +++ b/payment-iq/app/features/AccountIQ/AccountIQ.tsx @@ -4,10 +4,10 @@ import "./AccountIQ.scss"; export const AccountIQ = () => { return ( - + AIQ} + icon={
AIQ
} items={[ { title: "Automatically reconcile your transactions" }, { title: "Live wallet balances from providers" }, diff --git a/payment-iq/app/features/DateRangePicker/DateRangePicker.scss b/payment-iq/app/features/DateRangePicker/DateRangePicker.scss index 2b67dcc..1c00089 100644 --- a/payment-iq/app/features/DateRangePicker/DateRangePicker.scss +++ b/payment-iq/app/features/DateRangePicker/DateRangePicker.scss @@ -1,5 +1,5 @@ -.date-range-picker-wrapper { - .date-typo { +.date-range-picker { + .date-range-picker__date-typo { font-size: 0.875rem; cursor: pointer; padding: 8px; diff --git a/payment-iq/app/features/DateRangePicker/DateRangePicker.tsx b/payment-iq/app/features/DateRangePicker/DateRangePicker.tsx index fda7ca1..e5e10e6 100644 --- a/payment-iq/app/features/DateRangePicker/DateRangePicker.tsx +++ b/payment-iq/app/features/DateRangePicker/DateRangePicker.tsx @@ -40,7 +40,7 @@ export const DateRangePicker = () => { const id = open ? "date-range-popover" : undefined; return ( - + { - + {format(range[0].startDate ?? new Date(), "PPP")} -{" "} {format(range[0].endDate ?? new Date(), "PPP")} diff --git a/payment-iq/app/features/Documentation/Documentation.scss b/payment-iq/app/features/Documentation/Documentation.scss index e35f626..71e4659 100644 --- a/payment-iq/app/features/Documentation/Documentation.scss +++ b/payment-iq/app/features/Documentation/Documentation.scss @@ -1,5 +1,5 @@ -.documentation-wrapper { - .icon { +.documentation { + .documentation__icon { height: auto; } } diff --git a/payment-iq/app/features/Documentation/Documentation.tsx b/payment-iq/app/features/Documentation/Documentation.tsx index c8bc994..f45683d 100644 --- a/payment-iq/app/features/Documentation/Documentation.tsx +++ b/payment-iq/app/features/Documentation/Documentation.tsx @@ -6,10 +6,12 @@ import "./Documentation.scss"; export const Documentation = () => { return ( - + } + icon={ + + } items={[ { title: "Provider Integration Overview" }, { title: "APIs Introduction" }, diff --git a/payment-iq/app/features/FetchReports/FetchReport.scss b/payment-iq/app/features/FetchReports/FetchReport.scss index 90601ab..25398d2 100644 --- a/payment-iq/app/features/FetchReports/FetchReport.scss +++ b/payment-iq/app/features/FetchReports/FetchReport.scss @@ -1,4 +1,4 @@ -.fetch-report-paper { +.fetch-report { padding: 23px; margin: 16px; display: flex; diff --git a/payment-iq/app/features/FetchReports/FetchReports.tsx b/payment-iq/app/features/FetchReports/FetchReports.tsx index 54cd7dc..fffcd60 100644 --- a/payment-iq/app/features/FetchReports/FetchReports.tsx +++ b/payment-iq/app/features/FetchReports/FetchReports.tsx @@ -31,7 +31,7 @@ export const FetchReport = () => { const isDownloadEnabled = state && psp && reportType; return ( - + Fetch Report diff --git a/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.scss b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.scss index 742315e..389d05b 100644 --- a/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.scss +++ b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.scss @@ -1,16 +1,16 @@ -.general-health-card-wrapper { - .header { +.general-health-card { + .general-health-card__header { display: flex; justify-content: space-between; margin-bottom: 16px; - .right-side { + .general-health-card__right-side { display: flex; align-items: center; } } - .stat-items { + .general-health-card__stat-items { display: flex; justify-content: space-around; margin-top: 16px; diff --git a/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx index 223183e..2a6a0f8 100644 --- a/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx +++ b/payment-iq/app/features/GeneralHealthCard/GeneralHealthCard.tsx @@ -16,13 +16,13 @@ const stats = [ export const GeneralHealthCard = () => { return ( - + - + General Health - + @@ -32,7 +32,7 @@ export const GeneralHealthCard = () => { - + {stats.map((item, i) => ( ))} diff --git a/payment-iq/app/features/GeneralHealthCard/components/StatItem.scss b/payment-iq/app/features/GeneralHealthCard/components/StatItem.scss index 3282b07..71aaa1f 100644 --- a/payment-iq/app/features/GeneralHealthCard/components/StatItem.scss +++ b/payment-iq/app/features/GeneralHealthCard/components/StatItem.scss @@ -1,9 +1,9 @@ -.static-item-wrapper { +.static-item { text-align: center; padding-left: 16px; padding-right: 16px; - .percentage { + .static-item__percentage { display: flex; align-items: center; justify-content: center; diff --git a/payment-iq/app/features/GeneralHealthCard/components/StatItem.tsx b/payment-iq/app/features/GeneralHealthCard/components/StatItem.tsx index 6e176a1..ccf619a 100644 --- a/payment-iq/app/features/GeneralHealthCard/components/StatItem.tsx +++ b/payment-iq/app/features/GeneralHealthCard/components/StatItem.tsx @@ -11,14 +11,14 @@ export const StatItem = ({ value: string | number; change: string; }) => ( - + {label} {value} - + {/* */} {change} diff --git a/payment-iq/app/features/PieCharts/PieCharts.scss b/payment-iq/app/features/PieCharts/PieCharts.scss index 13ddf83..aa280e7 100644 --- a/payment-iq/app/features/PieCharts/PieCharts.scss +++ b/payment-iq/app/features/PieCharts/PieCharts.scss @@ -1,4 +1,4 @@ -.pie-charts-wrapper { +.pie-charts { width: 100%; height: 300px; diff --git a/payment-iq/app/features/PieCharts/PieCharts.tsx b/payment-iq/app/features/PieCharts/PieCharts.tsx index 93d57b6..77a3ac8 100644 --- a/payment-iq/app/features/PieCharts/PieCharts.tsx +++ b/payment-iq/app/features/PieCharts/PieCharts.tsx @@ -39,7 +39,7 @@ const renderCustomizedLabel = ({ }; export const PieCharts = () => { return ( - + ( - + - - + + {icon} {title} - + diff --git a/payment-iq/app/features/TransactionsOverView/TransactionsOverView.scss b/payment-iq/app/features/TransactionsOverView/TransactionsOverView.scss index 94c08e5..9494eec 100644 --- a/payment-iq/app/features/TransactionsOverView/TransactionsOverView.scss +++ b/payment-iq/app/features/TransactionsOverView/TransactionsOverView.scss @@ -1,10 +1,10 @@ -.transaction-overview-paper { +.transaction-overview { padding: 23px; margin: 16px; display: flex; flex-direction: column; - .header { + .transaction-overview__header { display: flex; justify-content: space-between; align-items: center; @@ -12,7 +12,7 @@ padding-right: 8px; } - .chart-table-wrapper { + .transaction-overview__chart-table { padding: 16px; margin: 16px; display: flex; diff --git a/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.scss b/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.scss index 0cddcae..b58bd2b 100644 --- a/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.scss +++ b/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.scss @@ -1,5 +1,5 @@ -.transactions-overview-table-wrapper { - .state-wrapper { +.transactions-overview-table { + .transactions-overview-table__state-wrapper { display: flex; justify-content: flex-start; align-items: center; @@ -7,7 +7,7 @@ margin-right: auto; width: 73px; - .state { + .transactions-overview-table__state { width: 10px; height: 10px; border-radius: 50%; diff --git a/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.tsx b/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.tsx index c45bfc1..dd16547 100644 --- a/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.tsx +++ b/payment-iq/app/features/TransactionsOverView/components/TransactionsOverViewTable.tsx @@ -21,10 +21,7 @@ const data1 = [ export const TransactionsOverViewTable = () => { return ( - +
@@ -38,9 +35,9 @@ export const TransactionsOverViewTable = () => { {data1.map((row, i) => ( - + { const router = useRouter(); return ( - + {/* Title and All Transactions Button */} - + Transactions Overview (Last 24h) @@ -31,7 +31,7 @@ export const TransactionsOverView = () => { {/* Chart and Table */} - + diff --git a/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.scss b/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.scss index 6e68250..d59b128 100644 --- a/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.scss +++ b/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.scss @@ -1,4 +1,4 @@ -.transactions-waiting-approval-paper { +.transactions-waiting-approval { padding: 16px; margin: 16px; display: flex; diff --git a/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx b/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx index 925e103..34ddc01 100644 --- a/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx +++ b/payment-iq/app/features/TransactionsWaitingApproval/TransactionsWaitingApproval.tsx @@ -118,11 +118,7 @@ const transactions = [ export const TransactionsWaitingApproval = () => { return ( - + diff --git a/payment-iq/app/features/WhatsNew/WhatsNew.scss b/payment-iq/app/features/WhatsNew/WhatsNew.scss index 6125718..f90f636 100644 --- a/payment-iq/app/features/WhatsNew/WhatsNew.scss +++ b/payment-iq/app/features/WhatsNew/WhatsNew.scss @@ -1,5 +1,5 @@ -.whats-new-wrapper { - .icon { +.whats-new { + .whats-new__wifi-icon { height: auto; } } diff --git a/payment-iq/app/features/WhatsNew/WhatsNew.tsx b/payment-iq/app/features/WhatsNew/WhatsNew.tsx index d775d59..28584d1 100644 --- a/payment-iq/app/features/WhatsNew/WhatsNew.tsx +++ b/payment-iq/app/features/WhatsNew/WhatsNew.tsx @@ -5,10 +5,10 @@ import "./WhatsNew.scss"; export const WhatsNew = () => { return ( - + } + icon={} items={[ { title: "Sneak Peek – Discover the New Rules Hub Feature", diff --git a/payment-iq/app/features/dashboard/header/Header.scss b/payment-iq/app/features/dashboard/header/Header.scss index 68bc362..f6ba43f 100644 --- a/payment-iq/app/features/dashboard/header/Header.scss +++ b/payment-iq/app/features/dashboard/header/Header.scss @@ -1,17 +1,19 @@ -.header-toolbar { - display: flex; - align-items: center; +.header { + .header__toolbar { + display: flex; + align-items: center; - .left-group { - width: 100px; - display: flex; - align-items: center; - gap: 12px; // optional spacing between menu and dropdown - } + .header__left-group { + width: 100px; + display: flex; + align-items: center; + gap: 12px; // optional spacing between menu and dropdown + } - .right-group { - margin-left: auto; // pushes it to the far right - display: flex; - align-items: center; - } + .header__right-group { + margin-left: auto; // pushes it to the far right + display: flex; + align-items: center; + } + } } diff --git a/payment-iq/app/features/dashboard/header/Header.tsx b/payment-iq/app/features/dashboard/header/Header.tsx index 6c2778f..2da283a 100644 --- a/payment-iq/app/features/dashboard/header/Header.tsx +++ b/payment-iq/app/features/dashboard/header/Header.tsx @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { AppBar, Toolbar, IconButton, Menu, MenuItem } from "@mui/material"; +import { AppBar, Toolbar, IconButton } from "@mui/material"; import MenuIcon from "@mui/icons-material/Menu"; import Dropdown from "./dropDown/DropDown"; import AccountMenu from "./accountMenu/AccountMenu"; @@ -22,20 +22,21 @@ const Header = () => { return ( - -
+ +
-
+
diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss b/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss index e5f6908..447899b 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.scss @@ -1,8 +1,8 @@ -.dropdown-container { - .link-container { - color: var(--text-secondary); - .link-text { - color: var(--text-primary); +.sidebar-dropdown__container { + .page-link__container { + color: var(--text-secondary); + .page-link__text { + color: var(--text-primary); + } } - } } diff --git a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx index b1f4596..0e1c793 100644 --- a/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx +++ b/payment-iq/app/features/dashboard/header/dropDown/DropDown.tsx @@ -41,7 +41,7 @@ export default function SidebarDropdown({ onChange }: Props) { > Select a page -
+
{PAGE_LINKS.map((link: ISidebarLink) => ( ))} diff --git a/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx index 5c43b0f..381003f 100644 --- a/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx +++ b/payment-iq/app/features/dashboard/sidebar/Sidebar.tsx @@ -1,6 +1,5 @@ "use client"; -import React from "react"; import DashboardIcon from "@mui/icons-material/Dashboard"; import { PAGE_LINKS } from "@/app/features/dashboard/sidebar/SidebarLink.constants"; import PageLinks from "../../../components/PageLinks/PageLinks"; @@ -8,11 +7,11 @@ import "./sideBar.scss"; const SideBar = () => { return ( -
+ + + + + + + + + + + {transactions.map((tx) => ( + + + + + + + + ))} + +
IDUserStateStatus CodeCreated
{tx.id}{tx.user}{tx.state}{tx.pspStatusCode}{tx.created}
+ + ) : ( +
+ {loading ? 'Loading transactions...' : 'No transactions found'} +
+ )} + ); } + + +// mocks/handlers.ts +import { http, HttpResponse } from 'msw'; +import { transactionDummyData } from './transactionData'; + +export const handlers = [ + http.get('https://api.example.com/transactions', ({ request }) => { + const url = new URL(request.url); + + // Get query parameters + const userId = url.searchParams.get('userId'); + const state = url.searchParams.get('state'); + const statusCode = url.searchParams.get('statusCode'); + + // Filter transactions based on query parameters + let filteredTransactions = [...transactionDummyData]; + + if (userId) { + filteredTransactions = filteredTransactions.filter( + tx => tx.user.toString() === userId + ); + } + + if (state) { + filteredTransactions = filteredTransactions.filter( + tx => tx.state.toLowerCase() === state.toLowerCase() + ); + } + + if (statusCode) { + filteredTransactions = filteredTransactions.filter( + tx => tx.pspStatusCode.toString() === statusCode + ); + } + + return HttpResponse.json({ + transactions: filteredTransactions, + count: filteredTransactions.length + }); + }), +]; + + +// mocks/transactionData.ts +export const transactionDummyData = [ + { + id: 1, + merchandId: 100987998, + transactionID: 1049131973, + user: 1, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + }, + { + id: 2, + merchandId: 100987998, + transactionID: 1049131973, + user: 2, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + }, + { + id: 3, + merchandId: 100987998, + transactionID: 1049131973, + user: 3, + created: "2025-06-18 10:10:30", + state: "FAILED", + statusDescription: "ERR_ABOVE_LIMIT", + pspStatusCode: 100501, + } +]; diff --git a/payment-iq/app/dashboard/transactions/page.tsx b/payment-iq/app/dashboard/transactions/page.tsx index f2059f1..64e0f47 100644 --- a/payment-iq/app/dashboard/transactions/page.tsx +++ b/payment-iq/app/dashboard/transactions/page.tsx @@ -1,11 +1,11 @@ // This ensures this component is rendered only on the client side -"use client"; import TransactionTable from "@/app/features/Pages/Transactions/Transactions"; + export default function TransactionPage() { return ( -
+
{/* This page will now be rendered on the client-side */}
diff --git a/payment-iq/app/features/Pages/transactions/Transactions.tsx b/payment-iq/app/features/Pages/transactions/Transactions.tsx index a8629c5..37161ec 100644 --- a/payment-iq/app/features/Pages/transactions/Transactions.tsx +++ b/payment-iq/app/features/Pages/transactions/Transactions.tsx @@ -21,16 +21,12 @@ import * as XLSX from "xlsx"; import { saveAs } from "file-saver"; import { DataGrid } from "@mui/x-data-grid"; import { columns } from "./constants"; -import { rows } from "./mockData"; +// import { rows } from "./mockData"; import AdvancedSearch from "../../AdvancedSearch/AdvancedSearch"; const paginationModel = { page: 0, pageSize: 50 }; export default function TransactionTable() { - const [open, setOpen] = useState(false); - const [fileType, setFileType] = useState<"csv" | "xls" | "xlsx">("csv"); - const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); - const [filteredRows, setFilteredRows] = useState([]) const [form, setForm] = useState({ keyword: "", @@ -78,54 +74,14 @@ export default function TransactionTable() { }); }; - - const filterRows = (rows1, filters) => { - // debugger - return rows1.filter(row => { - const hasTransactionIdFilter = filters.transactionID !== ""; - const hasStateFilter = filters.state !== ""; - - - if (hasTransactionIdFilter && hasStateFilter) { - console.log(1234) - // Return rows that match BOTH filters - return row.transactionID == filters.transactionID && row.state.toLowerCase() === filters.state.toLowerCase(); - } else if (hasTransactionIdFilter) { - console.log(12345) - // Return rows that match merchandId only - return row.transactionID == filters.transactionID; - } else if (hasStateFilter) { - // Return rows that match state only - console.log(123456) - return row.state.toLowerCase() === filters.state.toLowerCase(); - } else { - console.log(1234567) - // No filters applied, return all rows - return rows; - } - }); - }; - - - useEffect(() => { - console.log(form) - console.log(filterRows(rows, { transactionID: form.transactionID, state: form.state })) - setFilteredRows(filterRows(rows, { transactionID: form.transactionID, state: form.state })); - }, [form]) - - // useEffect(()=>{ - // if(form?.transactionId){ - // setFilteredRows(rows.filter(row => (row.merchandId.toString() === form.transactionId) && (row.state !== "" && (row.state === form.state)))); - // } else{ - // setFilteredRows(rows) - // } - // },[form]) + const [open, setOpen] = useState(false); + const [fileType, setFileType] = useState<"csv" | "xls" | "xlsx">("csv"); + const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); const handleExport = () => { - const exportRows = onlyCurrentTable ? rows.slice(0, 5) : rows; + const exportRows = onlyCurrentTable ? transactions.slice(0, 5) : transactions; const exportData = [ columns.map((col) => col.headerName), - // @ts-expect-error - Dynamic field access from DataGrid columns ...exportRows.map((row) => columns.map((col) => row[col.field] ?? "")), ]; @@ -146,6 +102,30 @@ export default function TransactionTable() { setOpen(false); }; + + const [transactions, setTransactions] = useState([]); + // const [filters, setFilters] = useState({ + // state: '', + // user: '', + // }) + + + useEffect(() => { + const fetchTransactions = async () => { + try { + const query = new URLSearchParams(form as any).toString(); + const res = await fetch(`/api/transactions?${query}`); + const data = await res.json(); + setTransactions(data); + } catch (error) { + console.error('Error fetching transactions:', error); + } + }; + + fetchTransactions(); + }, [form]); + + return ( {children}; diff --git a/payment-iq/app/features/AdvancedSearch/store/advancedSearchSlice.ts b/payment-iq/app/redux/advanedSearch/advancedSearchSlice.ts similarity index 100% rename from payment-iq/app/features/AdvancedSearch/store/advancedSearchSlice.ts rename to payment-iq/app/redux/advanedSearch/advancedSearchSlice.ts diff --git a/payment-iq/app/redux/store.ts b/payment-iq/app/redux/store.ts new file mode 100644 index 0000000..59a6f77 --- /dev/null +++ b/payment-iq/app/redux/store.ts @@ -0,0 +1,11 @@ +import { configureStore } from '@reduxjs/toolkit'; +import advancedSearchReducer from './advanedSearch/advancedSearchSlice'; +import transactionsReducer from './transactions/transactionsSlice'; + +export const store = configureStore({ + reducer: { + advancedSearch: advancedSearchReducer, + transactions: transactionsReducer, + }, +}); + diff --git a/payment-iq/app/redux/transactions/selectors.ts b/payment-iq/app/redux/transactions/selectors.ts new file mode 100644 index 0000000..1ee7436 --- /dev/null +++ b/payment-iq/app/redux/transactions/selectors.ts @@ -0,0 +1,3 @@ +import { RootState } from "../types"; + +export const selectTransactions = (state: RootState) => state.transactions.data; diff --git a/payment-iq/app/redux/transactions/transactionsSlice.ts b/payment-iq/app/redux/transactions/transactionsSlice.ts new file mode 100644 index 0000000..6fcd7a9 --- /dev/null +++ b/payment-iq/app/redux/transactions/transactionsSlice.ts @@ -0,0 +1,83 @@ +import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; + +interface ITransactionsData { + id: number; + merchandId: number; + transactionID: number; + user: number; + created: string; + state: string; + statusDescription: string; + pspStatusCode: number; + +} +interface ITransactionsState { + data: ITransactionsData[]; + loading: boolean; + error: null | string; + totalTransactions: number +} + + + +const initialState: ITransactionsState = { + data: [], + loading: false, + error: null, + totalTransactions: 0, +} + +const transactionsSlice = createSlice({ + name: 'transactions', + initialState, + reducers: { + }, + extraReducers: (builder) => { + builder + .addCase(getTransactions.pending, (state) => { + state.loading = true; + state.error = null; + }) + .addCase(getTransactions.fulfilled, (state, action) => { + state.data = action.payload.transactions; + state.totalTransactions = action.payload.count; + state.loading = false; + }) + .addCase(getTransactions.rejected, (state, action) => { + state.error = action.error.message || "Failed to fetch categories"; + state.loading = false; + state.data = []; + }) + } +}, +); + +export default transactionsSlice.reducer; + + +export const getTransactions = createAsyncThunk( + 'transactions/getTransactions', + async ( + { + userId = '', + state = '', + statusCode = '', + }: { userId?: string; state?: string; statusCode?: string } = {} + ) => { + const url = new URL('https://api.example.com/transactions'); + + if (userId) url.searchParams.append('userId', userId); + if (state) url.searchParams.append('state', state); + if (statusCode) url.searchParams.append('statusCode', statusCode); + + const response = await fetch(url.toString()); + + if (!response.ok) { + throw new Error('Failed to fetch transactions'); + } + + const data = await response.json(); + return data; // Let the reducer store this + } +); + diff --git a/payment-iq/app/redux/types.ts b/payment-iq/app/redux/types.ts new file mode 100644 index 0000000..574261a --- /dev/null +++ b/payment-iq/app/redux/types.ts @@ -0,0 +1,5 @@ +import { store } from "./store"; + +export type RootState = ReturnType; +export type AppDispatch = typeof store.dispatch; + diff --git a/payment-iq/app/test1/page.tsx b/payment-iq/app/test1/page.tsx new file mode 100644 index 0000000..67a44e9 --- /dev/null +++ b/payment-iq/app/test1/page.tsx @@ -0,0 +1,29 @@ +'use client' +import React, { useState } from 'react'; +import SearchFilters from '../components/searchFilter/SearchFilters'; + +export default function Home() { + const [filters, setFilters] = useState({ + user: '42', + state: 'FAILED', + startDate: '2025-06-28 23:25', + }); + + const handleDeleteFilter = (key) => { + setFilters((prev) => ({ ...prev, [key]: null })); + }; + + const handleClearAll = () => { + setFilters({ user: null, state: null, startDate: null }); + }; + + return ( +
+ +
+ ); +} diff --git a/payment-iq/lib/store.ts b/payment-iq/lib/store.ts deleted file mode 100644 index 812f9b7..0000000 --- a/payment-iq/lib/store.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { configureStore } from '@reduxjs/toolkit'; -import advancedSearchReducer from '@/app/features/AdvancedSearch/store/advancedSearchSlice'; - -export const store = configureStore({ - reducer: { - advancedSearch: advancedSearchReducer, - }, -}); - -export type RootState = ReturnType; -export type AppDispatch = typeof store.dispatch; - diff --git a/payment-iq/mock/handlers.ts b/payment-iq/mock/handlers.ts index 902d618..d80ae73 100644 --- a/payment-iq/mock/handlers.ts +++ b/payment-iq/mock/handlers.ts @@ -21,6 +21,7 @@ // ]; +import { transactionDummyData } from '@/app/features/Pages/transactions/mockData'; import { http, HttpResponse } from 'msw'; export const handlers = [ @@ -78,8 +79,6 @@ export const handlers = [ category: category || 'general', })); - console.log(1234, mockProducts) - // Sort products if sort parameter provided if (sort === 'price') { mockProducts.sort((a, b) => a.price - b.price); @@ -95,4 +94,38 @@ export const handlers = [ sortBy: sort, }); }), + http.get('https://api.example.com/transactions', ({ request }) => { + const url = new URL(request.url); + + // Get query parameters + const userId = url.searchParams.get('userId'); + const state = url.searchParams.get('state'); + const statusCode = url.searchParams.get('statusCode'); + + // Filter transactions based on query parameters + let filteredTransactions = [...transactionDummyData]; + + if (userId) { + filteredTransactions = filteredTransactions.filter( + tx => tx.user.toString() === userId + ); + } + + if (state) { + filteredTransactions = filteredTransactions.filter( + tx => tx.state.toLowerCase() === state.toLowerCase() + ); + } + + if (statusCode) { + filteredTransactions = filteredTransactions.filter( + tx => tx.pspStatusCode.toString() === statusCode + ); + } + + return HttpResponse.json({ + transactions: filteredTransactions, + count: filteredTransactions.length + }); + }), ]; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..fb57ccd --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + From 1766d1abf4f4d8724102df29ee6a2caec06d67b5 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Mon, 7 Jul 2025 14:07:06 +0300 Subject: [PATCH 37/55] add filtering functionality --- node_modules/.yarn-integrity | 10 ---- .../AdvancedSearch/AdvancedSearch.tsx | 6 +- .../Pages/transactions/Transactions.tsx | 56 +++++++++++++------ yarn.lock | 4 -- 4 files changed, 43 insertions(+), 33 deletions(-) delete mode 100644 node_modules/.yarn-integrity delete mode 100644 yarn.lock diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity deleted file mode 100644 index b9eb206..0000000 --- a/node_modules/.yarn-integrity +++ /dev/null @@ -1,10 +0,0 @@ -{ - "systemParams": "darwin-arm64-131", - "modulesFolders": [], - "flags": [], - "linkedModules": [], - "topLevelPatterns": [], - "lockfileEntries": {}, - "files": [], - "artifacts": {} -} \ No newline at end of file diff --git a/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx b/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx index a51dd10..9c03417 100644 --- a/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx +++ b/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx @@ -21,7 +21,7 @@ const states = ["Pending", "Completed", "Failed"]; const transactionTypes = ["Credit", "Debit"]; const paymentMethods = ["Card", "Bank Transfer"]; -export default function AdvancedSearch({setForm, form, resetForm}) { +export default function AdvancedSearch({ setForm, form, resetForm }) { const [open, setOpen] = useState(false); const handleChange = (field: string, value: any) => { @@ -172,7 +172,7 @@ export default function AdvancedSearch({setForm, form, resetForm}) { ); return ( - +
@@ -104,86 +138,49 @@ export default function TransactionsPage() { ) : (
- {loading ? 'Loading transactions...' : 'No transactions found'} + {loading ? "Loading transactions..." : "No transactions found"}
)} ); } - // mocks/handlers.ts -import { http, HttpResponse } from 'msw'; -import { transactionDummyData } from './transactionData'; +import { http, HttpResponse } from "msw"; export const handlers = [ - http.get('https://api.example.com/transactions', ({ request }) => { + http.get("https://api.example.com/transactions", ({ request }) => { const url = new URL(request.url); - + // Get query parameters - const userId = url.searchParams.get('userId'); - const state = url.searchParams.get('state'); - const statusCode = url.searchParams.get('statusCode'); + const userId = url.searchParams.get("userId"); + const state = url.searchParams.get("state"); + const statusCode = url.searchParams.get("statusCode"); // Filter transactions based on query parameters let filteredTransactions = [...transactionDummyData]; if (userId) { filteredTransactions = filteredTransactions.filter( - tx => tx.user.toString() === userId + (tx) => tx.user.toString() === userId ); } if (state) { filteredTransactions = filteredTransactions.filter( - tx => tx.state.toLowerCase() === state.toLowerCase() + (tx) => tx.state.toLowerCase() === state.toLowerCase() ); } if (statusCode) { filteredTransactions = filteredTransactions.filter( - tx => tx.pspStatusCode.toString() === statusCode + (tx) => tx.pspStatusCode.toString() === statusCode ); } return HttpResponse.json({ transactions: filteredTransactions, - count: filteredTransactions.length + count: filteredTransactions.length, }); }), ]; - - -// mocks/transactionData.ts -export const transactionDummyData = [ - { - id: 1, - merchandId: 100987998, - transactionID: 1049131973, - user: 1, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, - { - id: 2, - merchandId: 100987998, - transactionID: 1049131973, - user: 2, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, - { - id: 3, - merchandId: 100987998, - transactionID: 1049131973, - user: 3, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - } -]; diff --git a/payment-iq/app/dashboard/admin/users/page.tsx b/payment-iq/app/dashboard/admin/users/page.tsx index 9a8be75..c5625e4 100644 --- a/payment-iq/app/dashboard/admin/users/page.tsx +++ b/payment-iq/app/dashboard/admin/users/page.tsx @@ -1,12 +1,15 @@ -// This ensures this component is rendered only on the client side -"use client"; - import Users from "@/app/features/Pages/Admin/Users/users"; -export default function BackOfficeUsersPage() { +export default async function BackOfficeUsersPage() { + const res = await fetch("http://localhost:3000/api/dashboard/admin/users", { + cache: "no-store", // 👈 disables caching for SSR freshness + }); + const users = await res.json(); + + console.log("[USERS]", users); return (
- +
); } diff --git a/payment-iq/app/features/Pages/Admin/Users/users.tsx b/payment-iq/app/features/Pages/Admin/Users/users.tsx index 7e00e63..e829d7d 100644 --- a/payment-iq/app/features/Pages/Admin/Users/users.tsx +++ b/payment-iq/app/features/Pages/Admin/Users/users.tsx @@ -1,92 +1,17 @@ "use client"; -import React, { useEffect, useState } from "react"; -import { Card, CardContent, Typography, Chip, Stack } from "@mui/material"; +import React from "react"; +import { Card, CardContent, Typography, Stack } from "@mui/material"; import { IUser } from "./interfaces"; -import UserRoleCard from "@/app/features/UserRoles/userRoleCard"; +import UserRoleCard from "@/app/features/UserRoles/UserRoleCard"; -const Users = () => { - const [data, setData] = useState([ - { - merchantId: 100987998, - id: "bc6a8a55-13bc-4538-8255-cd0cec3bb4e9", - mame: "Jacob", - username: "lspaddy", - firstName: "Paddy", - lastName: "Man", - email: "patrick@omegasys.eu", - phone: "", - jobTitle: "", - enabled: true, - authorities: [ - "ROLE_IIN", - "ROLE_FIRST_APPROVER", - "ROLE_RULES_ADMIN", - "ROLE_TRANSACTION_VIEWER", - "ROLE_IIN_ADMIN", - "ROLE_USER_PSP_ACCOUNT", - ], - allowedMerchantIds: [100987998], - created: "2025-05-04T15:32:48.432Z", - disabledBy: null, - disabledDate: null, - disabledReason: null, - incidentNotes: false, - lastLogin: "", - lastMandatoryUpdated: "2025-05-04T15:32:48.332Z", - marketingNewsletter: false, - releaseNotes: false, - requiredActions: ["CONFIGURE_TOTP", "UPDATE_PASSWORD"], - twoFactorCondition: "required", - twoFactorCredentials: [], - }, - { - merchantId: 100987998, - mame: "Jacob", - id: "382eed15-1e21-41fa-b1f3-0c1adb3af714", - username: "lsterence", - firstName: "Terence", - lastName: "User", - email: "terence@omegasys.eu", - phone: "", - jobTitle: "", - enabled: true, - authorities: ["ROLE_IIN", "ROLE_FIRST_APPROVER", "ROLE_RULES_ADMIN"], - allowedMerchantIds: [100987998], - created: "2025-05-04T15:32:48.432Z", - disabledBy: null, - disabledDate: null, - disabledReason: null, - incidentNotes: false, - lastLogin: "", - lastMandatoryUpdated: "2025-05-04T15:32:48.332Z", - marketingNewsletter: false, - releaseNotes: false, - requiredActions: ["CONFIGURE_TOTP", "UPDATE_PASSWORD"], - twoFactorCondition: "required", - twoFactorCredentials: [], - }, - // Add more users if needed - ]); - - useEffect(() => { - // Only run MSW in the browser environment - if (typeof window !== "undefined") { - const fetchData = async () => { - const response = await fetch( - "https://test-bo.paymentiq.io/paymentiq/backoffice/api/v2/users/?includeSubMids=false&size=20&page=0&merchantId=100987998" - ); // This would be intercepted by MSW in the browser - const data = await response.json(); - console.log("[DATA]", data); - // setData(data); - }; - - fetchData(); - } - }, []); +interface UsersProps { + users: IUser[]; +} +const Users: React.FC = ({ users }) => { return (
- {data.map((user: IUser) => ( + {users.map((user: IUser) => ( {user.username} @@ -103,7 +28,7 @@ const Users = () => { isAdmin={true} lastLogin="small" roles={user.authorities} - // merchants={Numberuser.allowedMerchantIds} + merchants={[]} // merchants={Numberuser.allowedMerchantIds} /> {/* Add more chips or UI elements for other data */} @@ -113,19 +38,4 @@ const Users = () => {
); }; - -// Fetch data server-side using getServerSideProps -// export async function getServerSideProps() { -// // Replace this with your actual API call -// const res = await fetch("https://api.example.com/users"); -// const data = await res.json(); - -// // Return the fetched data as props -// return { -// props: { -// result: data, // Assuming data is an array of users -// }, -// }; -// } - export default Users; diff --git a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx index 4eaf208..d36e1ad 100644 --- a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx +++ b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx @@ -1,3 +1,4 @@ +"use client"; import { Box } from "@mui/material"; import { GeneralHealthCard } from "../../GeneralHealthCard/GeneralHealthCard"; import { TransactionsWaitingApproval } from "../../TransactionsWaitingApproval/TransactionsWaitingApproval"; @@ -6,53 +7,8 @@ import { Documentation } from "../../Documentation/Documentation"; import { AccountIQ } from "../../AccountIQ/AccountIQ"; import { WhatsNew } from "../../WhatsNew/WhatsNew"; import { TransactionsOverView } from "../../TransactionsOverview/TransactionsOverview"; -import { useEffect } from "react"; export const DashboardHomePage = () => { - // useEffect to fetch data when the component mounts - useEffect(() => { - // Construct the URL with query parameters - const url = - "https://test-bo.paymentiq.io/paymentiq/backoffice/api/v2/metrics/txsummary?merchantId=100987998&fromDate=2025-06-29+19%3A10&toDate=2025-07-01+19%3A09"; - - // Perform the fetch request inside useEffect - const fetchData = async () => { - try { - // Start loading - - // Make the API request - const response = await fetch(url, { - method: "GET", // You can change this to 'POST' if necessary - headers: { - "Content-Type": "application/json", - // Add any other headers you need here - }, - }); - - // Check if the response is OK (status code 200-299) - if (!response.ok) { - throw new Error(`Failed to fetch: ${response.status}`); - } - - // Parse the JSON response - const data = await response.json(); - console.log("[DATA]", data); - - // Update the state with the fetched data - // setTransactions(data.result || []); - } catch (err) { - // Handle any errors that occurred during the fetch - // setError("Failed to load data, please try again."); - console.error("Fetch error:", err); - } finally { - // Set loading to false when the request is complete - // setLoading(false); - } - }; - - // Call the fetch function - fetchData(); - }, []); // Empty dependency return ( <> diff --git a/payment-iq/app/features/Pages/transactions/Transactions.tsx b/payment-iq/app/features/Pages/transactions/Transactions.tsx index 473908d..fe594ab 100644 --- a/payment-iq/app/features/Pages/transactions/Transactions.tsx +++ b/payment-iq/app/features/Pages/transactions/Transactions.tsx @@ -28,7 +28,6 @@ import SearchFilters from "@/app/components/searchFilter/SearchFilters"; const paginationModel = { page: 0, pageSize: 50 }; export default function TransactionTable() { - const [form, setForm] = useState({ keyword: "", transactionID: "", @@ -80,7 +79,9 @@ export default function TransactionTable() { const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); const handleExport = () => { - const exportRows = onlyCurrentTable ? transactions.slice(0, 5) : transactions; + const exportRows = onlyCurrentTable + ? transactions.slice(0, 5) + : transactions; const exportData = [ columns.map((col) => col.headerName), ...exportRows.map((row) => columns.map((col) => row[col.field] ?? "")), @@ -103,7 +104,6 @@ export default function TransactionTable() { setOpen(false); }; - const [transactions, setTransactions] = useState([]); const fetchTransactions = async () => { @@ -113,33 +113,27 @@ export default function TransactionTable() { const data = await res.json(); setTransactions(data); } catch (error) { - console.error('Error fetching transactions:', error); + console.error("Error fetching transactions:", error); } }; - - useEffect(() => { fetchTransactions(); }, [form]); const handleDeleteFilter = (key) => { - setForm((prev) => ({ ...prev, [key]: '' })); + setForm((prev) => ({ ...prev, [key]: "" })); }; const handleClearAll = () => { - resetForm() - fetchTransactions() + resetForm(); + fetchTransactions(); }; - const handleClickField = (field: string, value: any) => { setForm((prev) => ({ ...prev, [field]: value })); }; - - - return ( - + {/* */} {/* */} + + + + ); +}; + +export default EditUser; diff --git a/payment-iq/app/features/UserRoles/User.scss b/payment-iq/app/features/UserRoles/User.scss new file mode 100644 index 0000000..5e0384d --- /dev/null +++ b/payment-iq/app/features/UserRoles/User.scss @@ -0,0 +1,6 @@ +.edit-user { + display: flex; + justify-content: center; + align-items: center; + width: 100%; +} diff --git a/payment-iq/app/features/UserRoles/userRoleCard.tsx b/payment-iq/app/features/UserRoles/userRoleCard.tsx index 43828bb..a6dfc5e 100644 --- a/payment-iq/app/features/UserRoles/userRoleCard.tsx +++ b/payment-iq/app/features/UserRoles/userRoleCard.tsx @@ -18,6 +18,8 @@ import { AdminPanelSettings, History, } from "@mui/icons-material"; +import { useState } from "react"; +import EditUser from "./EditUser/EditUser"; interface Props { username: string; @@ -40,12 +42,18 @@ export default function UserRoleCard({ roles, extraRolesCount, }: Props) { + const [isEditing, setIsEditing] = useState(false); + + const handleEditClick = () => { + setIsEditing(!isEditing); + }; + return ( {/* Header */} - {username.slice(0, 2).toUpperCase()} + {username?.slice(0, 2).toUpperCase()} {username} {name} @@ -58,7 +66,7 @@ export default function UserRoleCard({ - + @@ -105,13 +113,13 @@ export default function UserRoleCard({ {extraRolesCount && } - + {isEditing && } {/* Footer */} - + {/* {lastLogin} - + */} ); diff --git a/payment-iq/app/providers/msw-provider.tsx b/payment-iq/app/providers/msw-provider.tsx index 9f3bf55..d186b21 100644 --- a/payment-iq/app/providers/msw-provider.tsx +++ b/payment-iq/app/providers/msw-provider.tsx @@ -1,11 +1,12 @@ -'use client'; -import { useEffect } from 'react'; +"use client"; +import { useEffect } from "react"; export function MSWProvider({ children }: { children: React.ReactNode }) { useEffect(() => { - if (process.env.NEXT_PUBLIC_API_MOCKING === 'enabled') { - const { worker } = require('../../mock/browser.ts'); - worker.start(); + if (process.env.NEXT_PUBLIC_API_MOCKING === "enabled") { + import("../../mock/browser").then(({ worker }) => { + // worker.start(); + }); } }, []); diff --git a/payment-iq/config/theme.ts b/payment-iq/config/theme.ts index c1b46e5..2d17df3 100644 --- a/payment-iq/config/theme.ts +++ b/payment-iq/config/theme.ts @@ -1,39 +1,43 @@ -import { createTheme } from '@mui/material/styles'; +import { createTheme } from "@mui/material/styles"; const palette = { primary: { - main: '#1976d2', + main: "#1976d2", }, secondary: { - main: '#d32f2f', + main: "#d32f2f", }, background: { - default: '#fafafa', - paper: '#ffffff', - primary: 'rgb(69, 190, 171)', + default: "#fafafa", + paper: "#ffffff", + primary: "rgb(69, 190, 171)", }, text: { - primary: '#000000', - secondary: '#555555', - tertiary: '#fff', + primary: "#000000", + secondary: "#555555", + tertiary: "#fff", + }, + button: { + primary: "#0070f3", + secondary: "##FF00FF", }, action: { - hover: 'rgba(0, 0, 0, 0.08)', + hover: "rgba(0, 0, 0, 0.08)", }, }; const typography = { fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif', h1: { - fontSize: '3rem', + fontSize: "3rem", fontWeight: 700, }, h2: { - fontSize: '2.5rem', + fontSize: "2.5rem", fontWeight: 700, }, body1: { - fontSize: '1rem', + fontSize: "1rem", fontWeight: 400, }, }; @@ -41,8 +45,8 @@ const typography = { // Create the theme based on the light or dark mode preference const theme = createTheme({ palette: { - mode: 'light', // Change this to 'dark' for dark mode - ...palette + mode: "light", // Change this to 'dark' for dark mode + ...palette, }, // typography, breakpoints: { diff --git a/payment-iq/mock/browser.ts b/payment-iq/mock/browser.ts index 2845183..bcd82e4 100644 --- a/payment-iq/mock/browser.ts +++ b/payment-iq/mock/browser.ts @@ -1,9 +1,4 @@ -// // mocks/browser.ts import { setupWorker } from "msw/browser"; -// import { handlers } from "./handlers"; -// -// export const worker = setupWorker(...handlers); - -import { setupWorker } from 'msw/browser'; -import { handlers } from './handlers'; +import { setupWorker } from "msw/browser"; +import { handlers } from "./handlers"; export const worker = setupWorker(...handlers); diff --git a/payment-iq/mock/constants.ts b/payment-iq/mock/constants.ts new file mode 100644 index 0000000..5e64ec5 --- /dev/null +++ b/payment-iq/mock/constants.ts @@ -0,0 +1,61 @@ +export const users = [ + { + merchantId: 100987998, + id: "bc6a8a55-13bc-4538-8255-cd0cec3bb4e9", + mame: "Jacob", + username: "lspaddy", + firstName: "Paddy", + lastName: "Man", + email: "patrick@omegasys.eu", + phone: "", + jobTitle: "", + enabled: true, + authorities: [ + "ROLE_IIN", + "ROLE_FIRST_APPROVER", + "ROLE_RULES_ADMIN", + "ROLE_TRANSACTION_VIEWER", + "ROLE_IIN_ADMIN", + "ROLE_USER_PSP_ACCOUNT", + ], + allowedMerchantIds: [100987998], + created: "2025-05-04T15:32:48.432Z", + disabledBy: null, + disabledDate: null, + disabledReason: null, + incidentNotes: false, + lastLogin: "", + lastMandatoryUpdated: "2025-05-04T15:32:48.332Z", + marketingNewsletter: false, + releaseNotes: false, + requiredActions: ["CONFIGURE_TOTP", "UPDATE_PASSWORD"], + twoFactorCondition: "required", + twoFactorCredentials: [], + }, + { + merchantId: 100987998, + mame: "Jacob", + id: "382eed15-1e21-41fa-b1f3-0c1adb3af714", + username: "lsterence", + firstName: "Terence", + lastName: "User", + email: "terence@omegasys.eu", + phone: "", + jobTitle: "", + enabled: true, + authorities: ["ROLE_IIN", "ROLE_FIRST_APPROVER", "ROLE_RULES_ADMIN"], + allowedMerchantIds: [100987998], + created: "2025-05-04T15:32:48.432Z", + disabledBy: null, + disabledDate: null, + disabledReason: null, + incidentNotes: false, + lastLogin: "", + lastMandatoryUpdated: "2025-05-04T15:32:48.332Z", + marketingNewsletter: false, + releaseNotes: false, + requiredActions: ["CONFIGURE_TOTP", "UPDATE_PASSWORD"], + twoFactorCondition: "required", + twoFactorCredentials: [], + }, +]; diff --git a/payment-iq/mock/handlers.ts b/payment-iq/mock/handlers.ts index d80ae73..b67318f 100644 --- a/payment-iq/mock/handlers.ts +++ b/payment-iq/mock/handlers.ts @@ -1,72 +1,49 @@ -// import { http, HttpResponse } from "msw"; -// -// export const handlers = [ -// http.get( -// "https://test-bo.paymentiq.io/paymentiq/backoffice/api/v2/metrics/txsummary", -// (req, _res, _ctx) => { -// const merchantId = req.url.searchParams.get("merchantId"); -// const fromDate = req.url.searchParams.get("fromDate"); -// const toDate = req.url.searchParams.get("toDate"); -// -// console.log(merchantId, fromDate, toDate); -// -// return HttpResponse.json({ -// result: { -// txCount: { total: 0, successful: 0 }, -// amount: { value: "0", currency: "EUR" }, -// }, -// }); -// } -// ), -// ]; - - -import { transactionDummyData } from '@/app/features/Pages/transactions/mockData'; -import { http, HttpResponse } from 'msw'; +import { http, HttpResponse } from "msw"; export const handlers = [ // Simple GET endpoint - http.get('https://api.example.com/user', () => { - return HttpResponse.json({ - id: 'usr_123', - name: 'John Doe', - email: 'john@example.com' - }); + http.get("https://api.example.com/user", () => { + return HttpResponse.json([ + { + id: "usr_123", + name: "John Doe", + email: "john@example.com", + }, + ]); }), // POST endpoint with request validation - http.post('https://api.example.com/login', async ({ request }) => { - const { username, password } = await request.json() as { username: string; password: string }; + http.post("https://api.example.com/login", async ({ request }) => { + const { username, password } = (await request.json()) as { + username: string; + password: string; + }; - if (username === 'admin' && password === 'password123') { + if (username === "admin" && password === "password123") { return HttpResponse.json({ - token: 'mock-jwt-token', - user: { id: 'usr_123', name: 'Admin User' } + token: "mock-jwt-token", + user: { id: "usr_123", name: "Admin User" }, }); } - return HttpResponse.json( - { error: 'Invalid credentials' }, - { status: 401 } - ); + return HttpResponse.json({ error: "Invalid credentials" }, { status: 401 }); }), - // Example with query parameters - http.get('https://api.example.com/products', ({ request }) => { + http.get("https://api.example.com/products", ({ request }) => { // Parse the URL to access query parameters const url = new URL(request.url); // Get query parameters - const category = url.searchParams.get('category'); - const sort = url.searchParams.get('sort') || 'price'; - const page = url.searchParams.get('page') || '1'; - const limit = url.searchParams.get('limit') || '10'; + const category = url.searchParams.get("category"); + const sort = url.searchParams.get("sort") || "price"; + const page = url.searchParams.get("page") || "1"; + const limit = url.searchParams.get("limit") || "10"; // Validate parameters if (limit && parseInt(limit) > 100) { return HttpResponse.json( - { error: 'Limit cannot exceed 100' }, + { error: "Limit cannot exceed 100" }, { status: 400 } ); } @@ -74,15 +51,15 @@ export const handlers = [ // Generate mock response based on parameters const mockProducts = Array.from({ length: parseInt(limit) }, (_, i) => ({ id: i + 1, - name: `Product ${i + 1}${category ? ` in ${category}` : ''}`, + name: `Product ${i + 1}${category ? ` in ${category}` : ""}`, price: Math.floor(Math.random() * 100), - category: category || 'general', + category: category || "general", })); // Sort products if sort parameter provided - if (sort === 'price') { + if (sort === "price") { mockProducts.sort((a, b) => a.price - b.price); - } else if (sort === 'name') { + } else if (sort === "name") { mockProducts.sort((a, b) => a.name.localeCompare(b.name)); } @@ -94,38 +71,38 @@ export const handlers = [ sortBy: sort, }); }), - http.get('https://api.example.com/transactions', ({ request }) => { + http.get("https://api.example.com/transactions", ({ request }) => { const url = new URL(request.url); // Get query parameters - const userId = url.searchParams.get('userId'); - const state = url.searchParams.get('state'); - const statusCode = url.searchParams.get('statusCode'); + const userId = url.searchParams.get("userId"); + const state = url.searchParams.get("state"); + const statusCode = url.searchParams.get("statusCode"); // Filter transactions based on query parameters let filteredTransactions = [...transactionDummyData]; if (userId) { filteredTransactions = filteredTransactions.filter( - tx => tx.user.toString() === userId + (tx) => tx.user.toString() === userId ); } if (state) { filteredTransactions = filteredTransactions.filter( - tx => tx.state.toLowerCase() === state.toLowerCase() + (tx) => tx.state.toLowerCase() === state.toLowerCase() ); } if (statusCode) { filteredTransactions = filteredTransactions.filter( - tx => tx.pspStatusCode.toString() === statusCode + (tx) => tx.pspStatusCode.toString() === statusCode ); } return HttpResponse.json({ transactions: filteredTransactions, - count: filteredTransactions.length + count: filteredTransactions.length, }); }), ]; diff --git a/payment-iq/next.config.ts b/payment-iq/next.config.ts index b9172f5..0030107 100644 --- a/payment-iq/next.config.ts +++ b/payment-iq/next.config.ts @@ -3,8 +3,8 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { /* config options here */ webpack: (config) => { - if (process.env.NEXT_PUBLIC_API_MOCKING === 'enabled') { - config.resolve.alias['@mswjs/interceptors'] = false; + if (process.env.NEXT_PUBLIC_API_MOCKING === "enabled") { + config.resolve.alias["@mswjs/interceptors"] = false; } return config; }, diff --git a/payment-iq/styles/globals.scss b/payment-iq/styles/globals.scss index 366294f..940adbe 100644 --- a/payment-iq/styles/globals.scss +++ b/payment-iq/styles/globals.scss @@ -11,6 +11,8 @@ --text-tertiary: #{$text-tertiary}; --hover-color: #{$hover-color}; --font-family-base: #{$font-family-base}; + --button-primary: #{$button-primary}; + --button-secondary: #{$button-secondary}; } @media (prefers-color-scheme: dark) { diff --git a/payment-iq/styles/variables.scss b/payment-iq/styles/variables.scss index d8311d9..5b4eca0 100644 --- a/payment-iq/styles/variables.scss +++ b/payment-iq/styles/variables.scss @@ -5,6 +5,8 @@ $background-primary: rgb(69, 190, 171); $text-primary: #000000; $text-secondary: #555555; $text-tertiary: #ffffff; +$button-primary: #0070f3; +$button-secondary: #ff00ff; $hover-color: rgba(0, 0, 0, 0.08); $font-family-base: "Roboto", "Helvetica", "Arial", sans-serif; From 16d51f30b5ad7cae487f6399a4839a4bf75fdbc1 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Wed, 9 Jul 2025 18:57:00 +0200 Subject: [PATCH 39/55] Push with router.refresh --- .../app/api/dashboard/admin/users/route.ts | 185 ++++++++++++------ payment-iq/app/dashboard/admin/users/page.tsx | 7 +- .../features/UserRoles/EditUser/EditUser.tsx | 36 ++-- .../app/features/UserRoles/User.interfaces.ts | 14 ++ payment-iq/app/features/UserRoles/User.scss | 21 +- .../app/features/UserRoles/User.types.ts | 0 .../app/features/UserRoles/userRoleCard.tsx | 19 +- payment-iq/services/roles.services.ts | 15 ++ 8 files changed, 201 insertions(+), 96 deletions(-) create mode 100644 payment-iq/app/features/UserRoles/User.interfaces.ts create mode 100644 payment-iq/app/features/UserRoles/User.types.ts create mode 100644 payment-iq/services/roles.services.ts diff --git a/payment-iq/app/api/dashboard/admin/users/route.ts b/payment-iq/app/api/dashboard/admin/users/route.ts index 594c580..b64d0f0 100644 --- a/payment-iq/app/api/dashboard/admin/users/route.ts +++ b/payment-iq/app/api/dashboard/admin/users/route.ts @@ -1,66 +1,127 @@ // app/api/user/route.ts -import { NextResponse } from "next/server"; +import { NextRequest, NextResponse } from "next/server"; + +export const users = [ + { + merchantId: 100987998, + id: "bc6a8a55-13bc-4538-8255-cd0cec3bb4e9", + mame: "Jacob", + username: "lspaddy", + firstName: "Paddy", + lastName: "Man", + email: "patrick@omegasys.eu", + phone: "", + jobTitle: "", + enabled: true, + authorities: [ + "ROLE_IIN", + "ROLE_FIRST_APPROVER", + "ROLE_RULES_ADMIN", + "ROLE_TRANSACTION_VIEWER", + "ROLE_IIN_ADMIN", + "ROLE_USER_PSP_ACCOUNT", + ], + allowedMerchantIds: [100987998], + created: "2025-05-04T15:32:48.432Z", + disabledBy: null, + disabledDate: null, + disabledReason: null, + incidentNotes: false, + lastLogin: "", + lastMandatoryUpdated: "2025-05-04T15:32:48.332Z", + marketingNewsletter: false, + releaseNotes: false, + requiredActions: ["CONFIGURE_TOTP", "UPDATE_PASSWORD"], + twoFactorCondition: "required", + twoFactorCredentials: [], + }, + { + merchantId: 100987998, + mame: "Jacob", + id: "382eed15-1e21-41fa-b1f3-0c1adb3af714", + username: "lsterence", + firstName: "Terence", + lastName: "User", + email: "terence@omegasys.eu", + phone: "", + jobTitle: "", + enabled: true, + authorities: ["ROLE_IIN", "ROLE_FIRST_APPROVER", "ROLE_RULES_ADMIN"], + allowedMerchantIds: [100987998], + created: "2025-05-04T15:32:48.432Z", + disabledBy: null, + disabledDate: null, + disabledReason: null, + incidentNotes: false, + lastLogin: "", + lastMandatoryUpdated: "2025-05-04T15:32:48.332Z", + marketingNewsletter: false, + releaseNotes: false, + requiredActions: ["CONFIGURE_TOTP", "UPDATE_PASSWORD"], + twoFactorCondition: "required", + twoFactorCredentials: [], + }, +]; export async function GET() { - return NextResponse.json([ - { - merchantId: 100987998, - id: "bc6a8a55-13bc-4538-8255-cd0cec3bb4e9", - mame: "Jacob", - username: "lspaddy", - firstName: "Paddy", - lastName: "Man", - email: "patrick@omegasys.eu", - phone: "", - jobTitle: "", - enabled: true, - authorities: [ - "ROLE_IIN", - "ROLE_FIRST_APPROVER", - "ROLE_RULES_ADMIN", - "ROLE_TRANSACTION_VIEWER", - "ROLE_IIN_ADMIN", - "ROLE_USER_PSP_ACCOUNT", - ], - allowedMerchantIds: [100987998], - created: "2025-05-04T15:32:48.432Z", - disabledBy: null, - disabledDate: null, - disabledReason: null, - incidentNotes: false, - lastLogin: "", - lastMandatoryUpdated: "2025-05-04T15:32:48.332Z", - marketingNewsletter: false, - releaseNotes: false, - requiredActions: ["CONFIGURE_TOTP", "UPDATE_PASSWORD"], - twoFactorCondition: "required", - twoFactorCredentials: [], - }, - { - merchantId: 100987998, - mame: "Jacob", - id: "382eed15-1e21-41fa-b1f3-0c1adb3af714", - username: "lsterence", - firstName: "Terence", - lastName: "User", - email: "terence@omegasys.eu", - phone: "", - jobTitle: "", - enabled: true, - authorities: ["ROLE_IIN", "ROLE_FIRST_APPROVER", "ROLE_RULES_ADMIN"], - allowedMerchantIds: [100987998], - created: "2025-05-04T15:32:48.432Z", - disabledBy: null, - disabledDate: null, - disabledReason: null, - incidentNotes: false, - lastLogin: "", - lastMandatoryUpdated: "2025-05-04T15:32:48.332Z", - marketingNewsletter: false, - releaseNotes: false, - requiredActions: ["CONFIGURE_TOTP", "UPDATE_PASSWORD"], - twoFactorCondition: "required", - twoFactorCredentials: [], - }, - ]); + return NextResponse.json(users); } + +export async function POST(request: NextRequest) { + const body = await request.json(); + + // Use the first user as a template + const templateUser = users[0]; + + // Create the new user by spreading the template and then the body (body fields override template) + const newUser = { + ...templateUser, + ...body, + id: + typeof crypto !== "undefined" && crypto.randomUUID + ? crypto.randomUUID() + : Math.random().toString(36).substring(2, 15), + created: new Date().toISOString(), + }; + + users.push(newUser); + + return NextResponse.json(newUser, { status: 201 }); +} + +// To call the POST function from the client side, you can use fetch like this: + +/* +Example usage in a React component or any client-side JS: + +const createUser = async (userData) => { + const res = await fetch('/api/dashboard/admin/users', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(userData), + }); + + if (!res.ok) { + // handle error + throw new Error('Failed to create user'); + } + + const newUser = await res.json(); + return newUser; +}; + +// Usage: +createUser({ + username: "newuser", + firstName: "New", + lastName: "User", + email: "newuser@example.com", + // ...other fields as needed +}).then(user => { + console.log('Created user:', user); +}).catch(err => { + console.error(err); +}); +*/ diff --git a/payment-iq/app/dashboard/admin/users/page.tsx b/payment-iq/app/dashboard/admin/users/page.tsx index c5625e4..a3a3654 100644 --- a/payment-iq/app/dashboard/admin/users/page.tsx +++ b/payment-iq/app/dashboard/admin/users/page.tsx @@ -1,12 +1,15 @@ import Users from "@/app/features/Pages/Admin/Users/users"; export default async function BackOfficeUsersPage() { - const res = await fetch("http://localhost:3000/api/dashboard/admin/users", { + const baseUrl = + process.env.NEXT_PUBLIC_BASE_URL || process.env.VERCEL_URL + ? `https://${process.env.VERCEL_URL}` + : "http://localhost:3000"; + const res = await fetch(`${baseUrl}/api/dashboard/admin/users`, { cache: "no-store", // 👈 disables caching for SSR freshness }); const users = await res.json(); - console.log("[USERS]", users); return (
diff --git a/payment-iq/app/features/UserRoles/EditUser/EditUser.tsx b/payment-iq/app/features/UserRoles/EditUser/EditUser.tsx index 5c779cf..9f384ff 100644 --- a/payment-iq/app/features/UserRoles/EditUser/EditUser.tsx +++ b/payment-iq/app/features/UserRoles/EditUser/EditUser.tsx @@ -1,23 +1,11 @@ import React from "react"; -import "./editUser.scss"; - -// Union type for form field names -export type EditUserField = - | "firstName" - | "lastName" - | "email" - | "role" - | "phone"; - -interface IEditUserForm { - firstName: string; - lastName: string; - email: string; - role: string; - phone: string; -} +import { useRouter } from "next/navigation"; +import { IEditUserForm, EditUserField } from "../User.interfaces"; +import { createRole } from "@/services/roles.services"; +import "./EditUser.scss"; const EditUser = () => { + const router = useRouter(); const [form, setForm] = React.useState({ firstName: "", lastName: "", @@ -53,8 +41,20 @@ const EditUser = () => { }); }; + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + try { + await createRole(form); + router.refresh(); // <- refreshes the page (SSR re-runs) + } catch (err: any) { + console.log(err.message || "Error creating role"); + // setError(err.message || "Error creating role"); + } + }; + return ( -
+ - Roles{" "} + Roles @@ -113,13 +114,13 @@ export default function UserRoleCard({ {extraRolesCount && } - {isEditing && } - {/* Footer */} - {/* - - {lastLogin} - - */} +
+ {isEditing && } +
); diff --git a/payment-iq/services/roles.services.ts b/payment-iq/services/roles.services.ts new file mode 100644 index 0000000..4f14b61 --- /dev/null +++ b/payment-iq/services/roles.services.ts @@ -0,0 +1,15 @@ +import { IEditUserForm } from "@/app/features/UserRoles/User.interfaces"; + +export async function createRole(data: IEditUserForm) { + const res = await fetch("/api/dashboard/admin/users", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(data), + }); + + if (!res.ok) { + throw new Error("Failed to create role"); + } + + return res.json(); // or return type depending on your backend +} From b27bef26f2f780e8f386219e9f090053b8b5a5ec Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Wed, 9 Jul 2025 21:05:22 +0300 Subject: [PATCH 40/55] transactions page --- .../app/api/transactions/deposit/route.ts | 55 ++++++ .../dashboard/transactions/deposits/page.tsx | 7 + .../transactions/{ => history}/page.tsx | 0 .../AdvancedSearch/AdvancedSearch1.tsx | 172 +++++++++++++++++ .../transactions/DepositTransactionsTable.tsx | 176 ++++++++++++++++++ .../features/Pages/transactions/constants.ts | 47 +++++ .../features/Pages/transactions/mockData.ts | 157 +++++++++++++++- .../app/features/Pages/transactions/types.ts | 3 + .../sidebar/SidebarLink.constants.ts | 24 ++- payment-iq/app/utils/exportData.ts | 37 ++++ payment-iq/app/utils/formatDate.ts | 13 ++ 11 files changed, 685 insertions(+), 6 deletions(-) create mode 100644 payment-iq/app/api/transactions/deposit/route.ts create mode 100644 payment-iq/app/dashboard/transactions/deposits/page.tsx rename payment-iq/app/dashboard/transactions/{ => history}/page.tsx (100%) create mode 100644 payment-iq/app/features/AdvancedSearch/AdvancedSearch1.tsx create mode 100644 payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx create mode 100644 payment-iq/app/features/Pages/transactions/types.ts create mode 100644 payment-iq/app/utils/exportData.ts create mode 100644 payment-iq/app/utils/formatDate.ts diff --git a/payment-iq/app/api/transactions/deposit/route.ts b/payment-iq/app/api/transactions/deposit/route.ts new file mode 100644 index 0000000..69369bd --- /dev/null +++ b/payment-iq/app/api/transactions/deposit/route.ts @@ -0,0 +1,55 @@ +import { depositTransactionDummyData } from "@/app/features/Pages/transactions/mockData"; +import { formatToDateTimeString } from "@/app/utils/formatDate"; +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(request: NextRequest) { + const { searchParams } = new URL(request.url); + + const status = searchParams.get("status"); + const userId = searchParams.get("userId"); + const depositMethod = searchParams.get("depositMethod"); + const merchandId = searchParams.get("merchandId"); + const transactionId = searchParams.get("transactionId"); + const dateTime = searchParams.get("dateTime"); + + + let filteredTransactions = [...depositTransactionDummyData]; + + console.log(12345, dateTime?.split(" ")[0]); + if (userId) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.userId.toString() === userId + ); + } + + if (status) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.status.toLowerCase() === status.toLowerCase() + ); + } + + if (depositMethod) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.depositMethod.toLowerCase() === depositMethod.toLowerCase() + ); + } + if (merchandId) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.merchandId.toString() === merchandId + ); + } + if (transactionId) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.transactionId.toString() === transactionId + ); + } + + console.log(777, dateTime); + if (dateTime) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.dateTime.split(" ")[0] === formatToDateTimeString(dateTime).split(" ")[0] + ); + } + + return NextResponse.json(filteredTransactions); +} diff --git a/payment-iq/app/dashboard/transactions/deposits/page.tsx b/payment-iq/app/dashboard/transactions/deposits/page.tsx new file mode 100644 index 0000000..7ed98ea --- /dev/null +++ b/payment-iq/app/dashboard/transactions/deposits/page.tsx @@ -0,0 +1,7 @@ +import DepositsTransactionsTable from "@/app/features/Pages/transactions/DepositTransactionsTable"; + +export default function DepositTransactionPage() { + return ( + + ); +} diff --git a/payment-iq/app/dashboard/transactions/page.tsx b/payment-iq/app/dashboard/transactions/history/page.tsx similarity index 100% rename from payment-iq/app/dashboard/transactions/page.tsx rename to payment-iq/app/dashboard/transactions/history/page.tsx diff --git a/payment-iq/app/features/AdvancedSearch/AdvancedSearch1.tsx b/payment-iq/app/features/AdvancedSearch/AdvancedSearch1.tsx new file mode 100644 index 0000000..1050817 --- /dev/null +++ b/payment-iq/app/features/AdvancedSearch/AdvancedSearch1.tsx @@ -0,0 +1,172 @@ +import { useState } from "react"; +import { + Box, + TextField, + MenuItem, + Button, + Drawer, + FormControl, + Select, + Typography, + Stack, +} from "@mui/material"; +import { DatePicker } from "@mui/x-date-pickers/DatePicker"; +import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; +import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; +import SearchIcon from "@mui/icons-material/Search"; +import RefreshIcon from "@mui/icons-material/Refresh"; + + +interface IForm { + userId: string; + transactionId: string; + transactionReferenceId: string; + currency: string; + state: string; + depositMethod: string; + dateTime: string +} + +interface ILabel { + label: string; + field: string; + type: string; + options?: string[]; +} + +interface IAdvancedSearch { + setForm: () => void; + form: IForm[]; + resetForm: () => void; + labels: ILabel[] +} + +export default function AdvancedSearch1({ setForm, form, resetForm, labels }: IAdvancedSearch) { + const [open, setOpen] = useState(false); + + const handleChange = (field: string, value: any) => { + setForm((prev) => ({ ...prev, [field]: value })); + }; + + const toggleDrawer = + (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { + if ( + event.type === "keydown" && + ((event as React.KeyboardEvent).key === "Tab" || + (event as React.KeyboardEvent).key === "Shift") + ) { + return; + } + + setOpen(open); + }; + + const list = () => ( + + + + + + Search + + {/* Buttons */} + + + + + + + {labels.map(({ label, field, type, options }) => ( + + + {label} + + {type === "text" && ( + handleChange(field, e.target.value)} + /> + )} + {type === "select" && ( + + + + )} + {type === "date" && ( + handleChange(field, newValue)} + renderInput={(params) => ( + + )} + /> + )} + + ))} + + + + + ); + return ( + + + {/* */} + + {list()} + + + ); +} diff --git a/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx b/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx new file mode 100644 index 0000000..ea55be8 --- /dev/null +++ b/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx @@ -0,0 +1,176 @@ +"use client"; +import { useCallback, useEffect, useState } from "react"; +import { + Button, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + FormControl, + Select, + MenuItem, + FormControlLabel, + Checkbox, + Stack, + Paper, + styled, + TextField, +} from "@mui/material"; +import FileUploadIcon from "@mui/icons-material/FileUpload"; +import { DataGrid } from "@mui/x-data-grid"; +import { depositTransactionsColumns, Labels } from "./constants"; +import AdvancedSearch1 from "../../AdvancedSearch/AdvancedSearch1"; +import SearchFilters from "@/app/components/searchFilter/SearchFilters"; +import { exportData } from "@/app/utils/exportData"; +import { ITransaction } from "./types"; + +const paginationModel = { page: 0, pageSize: 50 }; + +export default function DepositsTransactionsTable() { + const [form, setForm] = useState({ + userId: "", + transactionId: "", + transactionReferenceId: "", + currency: "", + state: "", + depositMethod: "", + dateTime: "", + }); + + const [open, setOpen] = useState(false); + const [fileType, setFileType] = useState<"csv" | "xls" | "xlsx">("csv"); + const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); + const [transactions, setTransactions] = useState([]); + + + console.log(777, form) + + + + + const fetchTransactions = useCallback(async () => { + try { + const stringForm: Record = Object.fromEntries( + Object.entries(form).map(([key, value]) => [key, value === null ? "" : String(value)]) + ); + const query = new URLSearchParams(stringForm).toString(); + const res = await fetch(`/api/transactions/deposit?${query}`); + const data = await res.json(); + setTransactions(data); + } catch (error) { + console.error('Error fetching transactions:', error); + } + }, [form]); + + + const resetForm = () => { + setForm({ + userId: "", + transactionId: "", + transactionReferenceId: "", + currency: "", + state: "", + depositMethod: "", + dateTime: "", + }); + }; + + useEffect(() => { + fetchTransactions(); + }, [form, fetchTransactions]); + + const handleDeleteFilter = (key: string) => { + setForm((prev) => ({ ...prev, [key]: '' })); + }; + + const handleClearAll = () => { + resetForm() + fetchTransactions() + }; + + + const handleClickField = (field: string, value: string) => { + setForm((prev) => ({ ...prev, [field]: value })); + }; + + + return ( + + + console.log(`setSearchQuery(${e.target.value})`)} + sx={{ width: 300 }} + /> + + + + + + { + handleClickField(params.field, params.value as string) + }} + /> + + {/* Export Dialog */} + setOpen(false)}> + Export Transactions + + + + + setOnlyCurrentTable(e.target.checked)} + /> + } + label="Only export the results in the current table" + sx={{ mt: 2 }} + /> + + + + + + + + ); +} + +const StyledPaper = styled(Paper)(() => ({ + height: "90vh", + width: "80vw" +})); diff --git a/payment-iq/app/features/Pages/transactions/constants.ts b/payment-iq/app/features/Pages/transactions/constants.ts index ccccd1b..40be306 100644 --- a/payment-iq/app/features/Pages/transactions/constants.ts +++ b/payment-iq/app/features/Pages/transactions/constants.ts @@ -119,3 +119,50 @@ export const columns: GridColDef[] = [ // { field: 'originTransactionId', headerName: 'Origin Transaction ID', type: 'number', width: 90 }, // { field: 'transactionReferenceId', headerName: 'Transaction Reference ID', type: 'number', width: 90 }, ]; + +export const depositTransactionsColumns = [ + { field: "userId", headerName: "User ID", width: 130 }, + { field: "merchandId", headerName: "Merchant ID", width: 130 }, + { field: "transactionId", headerName: "Transaction ID", width: 130 }, + { field: "depositMethod", headerName: "Deposit Method", width: 130 }, + { field: "status", headerName: "Status", width: 130 }, + { field: "amount", headerName: "Amount", width: 130 }, + { field: "currency", headerName: "Currency", width: 130 }, + { field: "dateTime", headerName: "Date / Time", width: 130 }, + { field: "errorInfo", headerName: "Error Info", width: 130 }, + { field: "fraudScore", headerName: "Fraud Score", width: 130 }, +] + + +export const currencies = ["USD", "EUR", "GBP"]; +export const states = ["Pending", "Completed", "Failed"]; +export const depositMethod = ["Card", "Bank Transfer"]; + +export const Labels = [ + { label: "User", field: "userId", type: "text" }, + { label: "Transaction ID", field: "transactionId", type: "text" }, + { + label: "Transaction Reference ID", + field: "transactionReferenceId", + type: "text", + }, + { + label: "Currency", + field: "currency", + type: "select", + options: currencies, + }, + { + label: "State", + field: "state", + type: "select", + options: states, + }, + { + label: "Payment Method", + field: "depositMethod", + type: "select", + options: depositMethod, + }, + { label: "Date / Time", field: "dateTime", type: "date" }, +] diff --git a/payment-iq/app/features/Pages/transactions/mockData.ts b/payment-iq/app/features/Pages/transactions/mockData.ts index 6fac954..8699d2c 100644 --- a/payment-iq/app/features/Pages/transactions/mockData.ts +++ b/payment-iq/app/features/Pages/transactions/mockData.ts @@ -2691,11 +2691,12 @@ export const rows = [ // transactionReferenceId: "", // no value provided // }, // ]; + export const transactionDummyData = [ { id: 1, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049136973, user: 1, created: "2025-06-18 10:10:30", state: "FAILED", @@ -2705,7 +2706,7 @@ export const transactionDummyData = [ { id: 2, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049131975, user: 2, created: "2025-06-18 10:10:30", state: "FAILED", @@ -2715,7 +2716,7 @@ export const transactionDummyData = [ { id: 3, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049131975, user: 3, created: "2025-06-18 10:10:30", state: "Completed", @@ -2725,7 +2726,7 @@ export const transactionDummyData = [ { id: 4, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049131975, user: 4, created: "2025-06-18 10:10:30", state: "FAILED", @@ -2735,7 +2736,7 @@ export const transactionDummyData = [ { id: 5, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049131975, user: 5, created: "2025-06-18 10:10:30", state: "FAILED", @@ -2743,3 +2744,149 @@ export const transactionDummyData = [ pspStatusCode: 100501, }, ]; + +export const depositTransactionDummyData = [ + { + id: 1, + userId: 17, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 2, + userId: 17, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 3, + userId: 17, + merchandId: 100987997, + transactionId: 1049131973, + depositMethod: "Card", + status: "Complete", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 4, + userId: 19, + merchandId: 100987997, + transactionId: 1049136973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 5, + userId: 19, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 6, + userId: 27, + merchandId: 100987997, + transactionId: 1049131973, + depositMethod: "Card", + status: "Pending", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 7, + userId: 175, + merchandId: 100987938, + transactionId: 1049136973, + depositMethod: "Card", + status: "Pending", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 8, + userId: 172, + merchandId: 100987938, + transactionId: 1049131973, + depositMethod: "Card", + status: "Pending", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-12 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 9, + userId: 174, + merchandId: 100987938, + transactionId: 1049131973, + depositMethod: "Bank Transfer", + status: "Inprogress", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 10, + userId: 7, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Bank Transfer", + status: "Inprogress", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 11, + userId: 1, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Bank Transfer", + status: "Error", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, +]; diff --git a/payment-iq/app/features/Pages/transactions/types.ts b/payment-iq/app/features/Pages/transactions/types.ts new file mode 100644 index 0000000..eb53823 --- /dev/null +++ b/payment-iq/app/features/Pages/transactions/types.ts @@ -0,0 +1,3 @@ + export interface ITransaction { + [key: string]: string | number; // Replace with actual fields if known, e.g. id: string, amount: number, etc. + } diff --git a/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts b/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts index c732888..f7bb406 100644 --- a/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts +++ b/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts @@ -10,14 +10,36 @@ import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; import InsightsIcon from "@mui/icons-material/Insights"; import ListAltIcon from "@mui/icons-material/ListAlt"; import SettingsIcon from "@mui/icons-material/Settings"; + +import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward'; +import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward'; +import HistoryIcon from '@mui/icons-material/History'; + import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; export const PAGE_LINKS: ISidebarLink[] = [ { title: "Home", path: "/dashboard", icon: HomeIcon }, + { title: "Transaction", path: "/dashboard/transactions", - icon: AccountBalanceWalletIcon, + icon: AccountBalanceWalletIcon, children: [ + { + title: "Deposits", + path: "/dashboard/transactions/deposits", + icon: ArrowDownwardIcon, + }, + { + title: "Withdrawals", + path: "/dashboard/transactions/withdrawals", + icon: ArrowUpwardIcon, + }, + { + title: "Transaction History", + path: "/dashboard/transactions/history", + icon: HistoryIcon, + }, + ], }, { title: "Approve", path: "/dashboard/approve", icon: CheckCircleIcon }, { title: "Investigate", path: "/dashboard/investigate", icon: SearchIcon }, diff --git a/payment-iq/app/utils/exportData.ts b/payment-iq/app/utils/exportData.ts new file mode 100644 index 0000000..d68b8b5 --- /dev/null +++ b/payment-iq/app/utils/exportData.ts @@ -0,0 +1,37 @@ +import * as XLSX from "xlsx"; +import { GridColDef } from "@mui/x-data-grid"; +export type FileType = "csv" | "xls" | "xlsx"; +import { saveAs } from "file-saver"; + +import type { ITransaction } from "../features/Pages/transactions/types"; + + +export const exportData = ( + transactions: ITransaction[], + columns: GridColDef[], + fileType: FileType = "csv", + onlyCurrentTable = false, + setOpen: (open: boolean) => void +) => { + const exportRows = onlyCurrentTable ? transactions.slice(0, 5) : transactions; + const exportData = [ + columns.map((col) => col.headerName), + ...exportRows.map((row) => columns.map((col) => row[col.field] ?? "")), + ]; + + const worksheet = XLSX.utils.aoa_to_sheet(exportData); + const workbook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(workbook, worksheet, "Transactions"); + + if (fileType === "csv") { + const csv = XLSX.utils.sheet_to_csv(worksheet); + const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" }); + saveAs(blob, "transactions.csv"); + } else { + XLSX.writeFile(workbook, `transactions.${fileType}`, { + bookType: fileType, + }); + } + + setOpen(false); + }; diff --git a/payment-iq/app/utils/formatDate.ts b/payment-iq/app/utils/formatDate.ts new file mode 100644 index 0000000..93c2071 --- /dev/null +++ b/payment-iq/app/utils/formatDate.ts @@ -0,0 +1,13 @@ +export const formatToDateTimeString = (dateString: string): string => { + const date = new Date(dateString); + + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); // months are 0-indexed + const day = String(date.getDate()).padStart(2, '0'); + + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; +} \ No newline at end of file From 05df45910ae9b58919c422f4b0a4059c76481f96 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Wed, 9 Jul 2025 21:05:22 +0300 Subject: [PATCH 41/55] transactions page --- .../app/api/transactions/deposit/route.ts | 55 ++++++ .../dashboard/transactions/deposits/page.tsx | 7 + .../transactions/{ => history}/page.tsx | 0 .../AdvancedSearch/AdvancedSearch1.tsx | 172 +++++++++++++++++ .../transactions/DepositTransactionsTable.tsx | 176 ++++++++++++++++++ .../features/Pages/transactions/constants.ts | 47 +++++ .../features/Pages/transactions/mockData.ts | 157 +++++++++++++++- .../app/features/Pages/transactions/types.ts | 3 + .../sidebar/SidebarLink.constants.ts | 24 ++- payment-iq/app/utils/exportData.ts | 37 ++++ payment-iq/app/utils/formatDate.ts | 13 ++ 11 files changed, 685 insertions(+), 6 deletions(-) create mode 100644 payment-iq/app/api/transactions/deposit/route.ts create mode 100644 payment-iq/app/dashboard/transactions/deposits/page.tsx rename payment-iq/app/dashboard/transactions/{ => history}/page.tsx (100%) create mode 100644 payment-iq/app/features/AdvancedSearch/AdvancedSearch1.tsx create mode 100644 payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx create mode 100644 payment-iq/app/features/Pages/transactions/types.ts create mode 100644 payment-iq/app/utils/exportData.ts create mode 100644 payment-iq/app/utils/formatDate.ts diff --git a/payment-iq/app/api/transactions/deposit/route.ts b/payment-iq/app/api/transactions/deposit/route.ts new file mode 100644 index 0000000..69369bd --- /dev/null +++ b/payment-iq/app/api/transactions/deposit/route.ts @@ -0,0 +1,55 @@ +import { depositTransactionDummyData } from "@/app/features/Pages/transactions/mockData"; +import { formatToDateTimeString } from "@/app/utils/formatDate"; +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(request: NextRequest) { + const { searchParams } = new URL(request.url); + + const status = searchParams.get("status"); + const userId = searchParams.get("userId"); + const depositMethod = searchParams.get("depositMethod"); + const merchandId = searchParams.get("merchandId"); + const transactionId = searchParams.get("transactionId"); + const dateTime = searchParams.get("dateTime"); + + + let filteredTransactions = [...depositTransactionDummyData]; + + console.log(12345, dateTime?.split(" ")[0]); + if (userId) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.userId.toString() === userId + ); + } + + if (status) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.status.toLowerCase() === status.toLowerCase() + ); + } + + if (depositMethod) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.depositMethod.toLowerCase() === depositMethod.toLowerCase() + ); + } + if (merchandId) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.merchandId.toString() === merchandId + ); + } + if (transactionId) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.transactionId.toString() === transactionId + ); + } + + console.log(777, dateTime); + if (dateTime) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.dateTime.split(" ")[0] === formatToDateTimeString(dateTime).split(" ")[0] + ); + } + + return NextResponse.json(filteredTransactions); +} diff --git a/payment-iq/app/dashboard/transactions/deposits/page.tsx b/payment-iq/app/dashboard/transactions/deposits/page.tsx new file mode 100644 index 0000000..7ed98ea --- /dev/null +++ b/payment-iq/app/dashboard/transactions/deposits/page.tsx @@ -0,0 +1,7 @@ +import DepositsTransactionsTable from "@/app/features/Pages/transactions/DepositTransactionsTable"; + +export default function DepositTransactionPage() { + return ( + + ); +} diff --git a/payment-iq/app/dashboard/transactions/page.tsx b/payment-iq/app/dashboard/transactions/history/page.tsx similarity index 100% rename from payment-iq/app/dashboard/transactions/page.tsx rename to payment-iq/app/dashboard/transactions/history/page.tsx diff --git a/payment-iq/app/features/AdvancedSearch/AdvancedSearch1.tsx b/payment-iq/app/features/AdvancedSearch/AdvancedSearch1.tsx new file mode 100644 index 0000000..1050817 --- /dev/null +++ b/payment-iq/app/features/AdvancedSearch/AdvancedSearch1.tsx @@ -0,0 +1,172 @@ +import { useState } from "react"; +import { + Box, + TextField, + MenuItem, + Button, + Drawer, + FormControl, + Select, + Typography, + Stack, +} from "@mui/material"; +import { DatePicker } from "@mui/x-date-pickers/DatePicker"; +import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; +import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; +import SearchIcon from "@mui/icons-material/Search"; +import RefreshIcon from "@mui/icons-material/Refresh"; + + +interface IForm { + userId: string; + transactionId: string; + transactionReferenceId: string; + currency: string; + state: string; + depositMethod: string; + dateTime: string +} + +interface ILabel { + label: string; + field: string; + type: string; + options?: string[]; +} + +interface IAdvancedSearch { + setForm: () => void; + form: IForm[]; + resetForm: () => void; + labels: ILabel[] +} + +export default function AdvancedSearch1({ setForm, form, resetForm, labels }: IAdvancedSearch) { + const [open, setOpen] = useState(false); + + const handleChange = (field: string, value: any) => { + setForm((prev) => ({ ...prev, [field]: value })); + }; + + const toggleDrawer = + (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { + if ( + event.type === "keydown" && + ((event as React.KeyboardEvent).key === "Tab" || + (event as React.KeyboardEvent).key === "Shift") + ) { + return; + } + + setOpen(open); + }; + + const list = () => ( + + + + + + Search + + {/* Buttons */} + + + + + + + {labels.map(({ label, field, type, options }) => ( + + + {label} + + {type === "text" && ( + handleChange(field, e.target.value)} + /> + )} + {type === "select" && ( + + + + )} + {type === "date" && ( + handleChange(field, newValue)} + renderInput={(params) => ( + + )} + /> + )} + + ))} + + + + + ); + return ( + + + {/* */} + + {list()} + + + ); +} diff --git a/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx b/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx new file mode 100644 index 0000000..ea55be8 --- /dev/null +++ b/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx @@ -0,0 +1,176 @@ +"use client"; +import { useCallback, useEffect, useState } from "react"; +import { + Button, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + FormControl, + Select, + MenuItem, + FormControlLabel, + Checkbox, + Stack, + Paper, + styled, + TextField, +} from "@mui/material"; +import FileUploadIcon from "@mui/icons-material/FileUpload"; +import { DataGrid } from "@mui/x-data-grid"; +import { depositTransactionsColumns, Labels } from "./constants"; +import AdvancedSearch1 from "../../AdvancedSearch/AdvancedSearch1"; +import SearchFilters from "@/app/components/searchFilter/SearchFilters"; +import { exportData } from "@/app/utils/exportData"; +import { ITransaction } from "./types"; + +const paginationModel = { page: 0, pageSize: 50 }; + +export default function DepositsTransactionsTable() { + const [form, setForm] = useState({ + userId: "", + transactionId: "", + transactionReferenceId: "", + currency: "", + state: "", + depositMethod: "", + dateTime: "", + }); + + const [open, setOpen] = useState(false); + const [fileType, setFileType] = useState<"csv" | "xls" | "xlsx">("csv"); + const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); + const [transactions, setTransactions] = useState([]); + + + console.log(777, form) + + + + + const fetchTransactions = useCallback(async () => { + try { + const stringForm: Record = Object.fromEntries( + Object.entries(form).map(([key, value]) => [key, value === null ? "" : String(value)]) + ); + const query = new URLSearchParams(stringForm).toString(); + const res = await fetch(`/api/transactions/deposit?${query}`); + const data = await res.json(); + setTransactions(data); + } catch (error) { + console.error('Error fetching transactions:', error); + } + }, [form]); + + + const resetForm = () => { + setForm({ + userId: "", + transactionId: "", + transactionReferenceId: "", + currency: "", + state: "", + depositMethod: "", + dateTime: "", + }); + }; + + useEffect(() => { + fetchTransactions(); + }, [form, fetchTransactions]); + + const handleDeleteFilter = (key: string) => { + setForm((prev) => ({ ...prev, [key]: '' })); + }; + + const handleClearAll = () => { + resetForm() + fetchTransactions() + }; + + + const handleClickField = (field: string, value: string) => { + setForm((prev) => ({ ...prev, [field]: value })); + }; + + + return ( + + + console.log(`setSearchQuery(${e.target.value})`)} + sx={{ width: 300 }} + /> + + + + + + { + handleClickField(params.field, params.value as string) + }} + /> + + {/* Export Dialog */} + setOpen(false)}> + Export Transactions + + + + + setOnlyCurrentTable(e.target.checked)} + /> + } + label="Only export the results in the current table" + sx={{ mt: 2 }} + /> + + + + + + + + ); +} + +const StyledPaper = styled(Paper)(() => ({ + height: "90vh", + width: "80vw" +})); diff --git a/payment-iq/app/features/Pages/transactions/constants.ts b/payment-iq/app/features/Pages/transactions/constants.ts index ccccd1b..40be306 100644 --- a/payment-iq/app/features/Pages/transactions/constants.ts +++ b/payment-iq/app/features/Pages/transactions/constants.ts @@ -119,3 +119,50 @@ export const columns: GridColDef[] = [ // { field: 'originTransactionId', headerName: 'Origin Transaction ID', type: 'number', width: 90 }, // { field: 'transactionReferenceId', headerName: 'Transaction Reference ID', type: 'number', width: 90 }, ]; + +export const depositTransactionsColumns = [ + { field: "userId", headerName: "User ID", width: 130 }, + { field: "merchandId", headerName: "Merchant ID", width: 130 }, + { field: "transactionId", headerName: "Transaction ID", width: 130 }, + { field: "depositMethod", headerName: "Deposit Method", width: 130 }, + { field: "status", headerName: "Status", width: 130 }, + { field: "amount", headerName: "Amount", width: 130 }, + { field: "currency", headerName: "Currency", width: 130 }, + { field: "dateTime", headerName: "Date / Time", width: 130 }, + { field: "errorInfo", headerName: "Error Info", width: 130 }, + { field: "fraudScore", headerName: "Fraud Score", width: 130 }, +] + + +export const currencies = ["USD", "EUR", "GBP"]; +export const states = ["Pending", "Completed", "Failed"]; +export const depositMethod = ["Card", "Bank Transfer"]; + +export const Labels = [ + { label: "User", field: "userId", type: "text" }, + { label: "Transaction ID", field: "transactionId", type: "text" }, + { + label: "Transaction Reference ID", + field: "transactionReferenceId", + type: "text", + }, + { + label: "Currency", + field: "currency", + type: "select", + options: currencies, + }, + { + label: "State", + field: "state", + type: "select", + options: states, + }, + { + label: "Payment Method", + field: "depositMethod", + type: "select", + options: depositMethod, + }, + { label: "Date / Time", field: "dateTime", type: "date" }, +] diff --git a/payment-iq/app/features/Pages/transactions/mockData.ts b/payment-iq/app/features/Pages/transactions/mockData.ts index 6fac954..8699d2c 100644 --- a/payment-iq/app/features/Pages/transactions/mockData.ts +++ b/payment-iq/app/features/Pages/transactions/mockData.ts @@ -2691,11 +2691,12 @@ export const rows = [ // transactionReferenceId: "", // no value provided // }, // ]; + export const transactionDummyData = [ { id: 1, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049136973, user: 1, created: "2025-06-18 10:10:30", state: "FAILED", @@ -2705,7 +2706,7 @@ export const transactionDummyData = [ { id: 2, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049131975, user: 2, created: "2025-06-18 10:10:30", state: "FAILED", @@ -2715,7 +2716,7 @@ export const transactionDummyData = [ { id: 3, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049131975, user: 3, created: "2025-06-18 10:10:30", state: "Completed", @@ -2725,7 +2726,7 @@ export const transactionDummyData = [ { id: 4, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049131975, user: 4, created: "2025-06-18 10:10:30", state: "FAILED", @@ -2735,7 +2736,7 @@ export const transactionDummyData = [ { id: 5, merchandId: 100987998, - transactionID: 1049131973, + transactionID: 1049131975, user: 5, created: "2025-06-18 10:10:30", state: "FAILED", @@ -2743,3 +2744,149 @@ export const transactionDummyData = [ pspStatusCode: 100501, }, ]; + +export const depositTransactionDummyData = [ + { + id: 1, + userId: 17, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 2, + userId: 17, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 3, + userId: 17, + merchandId: 100987997, + transactionId: 1049131973, + depositMethod: "Card", + status: "Complete", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 4, + userId: 19, + merchandId: 100987997, + transactionId: 1049136973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 5, + userId: 19, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 6, + userId: 27, + merchandId: 100987997, + transactionId: 1049131973, + depositMethod: "Card", + status: "Pending", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 7, + userId: 175, + merchandId: 100987938, + transactionId: 1049136973, + depositMethod: "Card", + status: "Pending", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 8, + userId: 172, + merchandId: 100987938, + transactionId: 1049131973, + depositMethod: "Card", + status: "Pending", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-12 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 9, + userId: 174, + merchandId: 100987938, + transactionId: 1049131973, + depositMethod: "Bank Transfer", + status: "Inprogress", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 10, + userId: 7, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Bank Transfer", + status: "Inprogress", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 11, + userId: 1, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Bank Transfer", + status: "Error", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, +]; diff --git a/payment-iq/app/features/Pages/transactions/types.ts b/payment-iq/app/features/Pages/transactions/types.ts new file mode 100644 index 0000000..eb53823 --- /dev/null +++ b/payment-iq/app/features/Pages/transactions/types.ts @@ -0,0 +1,3 @@ + export interface ITransaction { + [key: string]: string | number; // Replace with actual fields if known, e.g. id: string, amount: number, etc. + } diff --git a/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts b/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts index c732888..f7bb406 100644 --- a/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts +++ b/payment-iq/app/features/dashboard/sidebar/SidebarLink.constants.ts @@ -10,14 +10,36 @@ import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; import InsightsIcon from "@mui/icons-material/Insights"; import ListAltIcon from "@mui/icons-material/ListAlt"; import SettingsIcon from "@mui/icons-material/Settings"; + +import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward'; +import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward'; +import HistoryIcon from '@mui/icons-material/History'; + import { ISidebarLink } from "@/app/features/dashboard/sidebar/SidebarLink.interfaces"; export const PAGE_LINKS: ISidebarLink[] = [ { title: "Home", path: "/dashboard", icon: HomeIcon }, + { title: "Transaction", path: "/dashboard/transactions", - icon: AccountBalanceWalletIcon, + icon: AccountBalanceWalletIcon, children: [ + { + title: "Deposits", + path: "/dashboard/transactions/deposits", + icon: ArrowDownwardIcon, + }, + { + title: "Withdrawals", + path: "/dashboard/transactions/withdrawals", + icon: ArrowUpwardIcon, + }, + { + title: "Transaction History", + path: "/dashboard/transactions/history", + icon: HistoryIcon, + }, + ], }, { title: "Approve", path: "/dashboard/approve", icon: CheckCircleIcon }, { title: "Investigate", path: "/dashboard/investigate", icon: SearchIcon }, diff --git a/payment-iq/app/utils/exportData.ts b/payment-iq/app/utils/exportData.ts new file mode 100644 index 0000000..d68b8b5 --- /dev/null +++ b/payment-iq/app/utils/exportData.ts @@ -0,0 +1,37 @@ +import * as XLSX from "xlsx"; +import { GridColDef } from "@mui/x-data-grid"; +export type FileType = "csv" | "xls" | "xlsx"; +import { saveAs } from "file-saver"; + +import type { ITransaction } from "../features/Pages/transactions/types"; + + +export const exportData = ( + transactions: ITransaction[], + columns: GridColDef[], + fileType: FileType = "csv", + onlyCurrentTable = false, + setOpen: (open: boolean) => void +) => { + const exportRows = onlyCurrentTable ? transactions.slice(0, 5) : transactions; + const exportData = [ + columns.map((col) => col.headerName), + ...exportRows.map((row) => columns.map((col) => row[col.field] ?? "")), + ]; + + const worksheet = XLSX.utils.aoa_to_sheet(exportData); + const workbook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(workbook, worksheet, "Transactions"); + + if (fileType === "csv") { + const csv = XLSX.utils.sheet_to_csv(worksheet); + const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" }); + saveAs(blob, "transactions.csv"); + } else { + XLSX.writeFile(workbook, `transactions.${fileType}`, { + bookType: fileType, + }); + } + + setOpen(false); + }; diff --git a/payment-iq/app/utils/formatDate.ts b/payment-iq/app/utils/formatDate.ts new file mode 100644 index 0000000..93c2071 --- /dev/null +++ b/payment-iq/app/utils/formatDate.ts @@ -0,0 +1,13 @@ +export const formatToDateTimeString = (dateString: string): string => { + const date = new Date(dateString); + + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); // months are 0-indexed + const day = String(date.getDate()).padStart(2, '0'); + + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; +} \ No newline at end of file From 299c40787ef45d3ae2c0c8a6d04a64f753f9e44d Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Wed, 9 Jul 2025 23:52:58 +0300 Subject: [PATCH 42/55] render transactions from serverside without state --- .../app/api/transactions/deposit/route.ts | 6 +- .../dashboard/transactions/deposits/page.tsx | 23 +++- .../transactions/DepositTransactionsTable.tsx | 107 ++++++++++-------- payment-iq/app/services/transactions.ts | 13 +++ 4 files changed, 95 insertions(+), 54 deletions(-) create mode 100644 payment-iq/app/services/transactions.ts diff --git a/payment-iq/app/api/transactions/deposit/route.ts b/payment-iq/app/api/transactions/deposit/route.ts index 69369bd..2e9ca95 100644 --- a/payment-iq/app/api/transactions/deposit/route.ts +++ b/payment-iq/app/api/transactions/deposit/route.ts @@ -12,10 +12,9 @@ export async function GET(request: NextRequest) { const transactionId = searchParams.get("transactionId"); const dateTime = searchParams.get("dateTime"); - + let filteredTransactions = [...depositTransactionDummyData]; - - console.log(12345, dateTime?.split(" ")[0]); + if (userId) { filteredTransactions = filteredTransactions.filter( (tx) => tx.userId.toString() === userId @@ -44,7 +43,6 @@ export async function GET(request: NextRequest) { ); } - console.log(777, dateTime); if (dateTime) { filteredTransactions = filteredTransactions.filter( (tx) => tx.dateTime.split(" ")[0] === formatToDateTimeString(dateTime).split(" ")[0] diff --git a/payment-iq/app/dashboard/transactions/deposits/page.tsx b/payment-iq/app/dashboard/transactions/deposits/page.tsx index 7ed98ea..8f14822 100644 --- a/payment-iq/app/dashboard/transactions/deposits/page.tsx +++ b/payment-iq/app/dashboard/transactions/deposits/page.tsx @@ -1,7 +1,22 @@ import DepositsTransactionsTable from "@/app/features/Pages/transactions/DepositTransactionsTable"; +import { getTransactions } from "@/app/services/transactions"; -export default function DepositTransactionPage() { - return ( - - ); +export default async function DepositTransactionPage({ + searchParams, +}: { + searchParams: Promise>; +}) { + // Await searchParams before processing + const params = await searchParams; + // Create a safe query string by filtering only string values + const safeParams: Record = {}; + for (const [key, value] of Object.entries(params)) { + if (typeof value === "string") { + safeParams[key] = value; + } + } + const query = new URLSearchParams(safeParams).toString(); + const transactions = await getTransactions({ query }); + + return ; } diff --git a/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx b/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx index ea55be8..a7c6181 100644 --- a/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx +++ b/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx @@ -23,19 +23,28 @@ import AdvancedSearch1 from "../../AdvancedSearch/AdvancedSearch1"; import SearchFilters from "@/app/components/searchFilter/SearchFilters"; import { exportData } from "@/app/utils/exportData"; import { ITransaction } from "./types"; +import { useSearchParams, useRouter } from "next/navigation"; + const paginationModel = { page: 0, pageSize: 50 }; -export default function DepositsTransactionsTable() { - const [form, setForm] = useState({ - userId: "", - transactionId: "", - transactionReferenceId: "", - currency: "", - state: "", - depositMethod: "", - dateTime: "", - }); +interface DepositProps { + data: any +} + +const DepositsTransactionsTable: React.FC = ({ data }) => { + const router = useRouter() + const searchParams = useSearchParams() + + // const [form, setForm] = useState({ + // userId: "", + // transactionId: "", + // transactionReferenceId: "", + // currency: "", + // state: "", + // depositMethod: "", + // dateTime: "", + // }); const [open, setOpen] = useState(false); const [fileType, setFileType] = useState<"csv" | "xls" | "xlsx">("csv"); @@ -43,54 +52,58 @@ export default function DepositsTransactionsTable() { const [transactions, setTransactions] = useState([]); - console.log(777, form) + // console.log(777, form) - - - const fetchTransactions = useCallback(async () => { - try { - const stringForm: Record = Object.fromEntries( - Object.entries(form).map(([key, value]) => [key, value === null ? "" : String(value)]) - ); - const query = new URLSearchParams(stringForm).toString(); - const res = await fetch(`/api/transactions/deposit?${query}`); - const data = await res.json(); - setTransactions(data); - } catch (error) { - console.error('Error fetching transactions:', error); - } - }, [form]); + // const fetchTransactions = useCallback(async () => { + // try { + // const stringForm: Record = Object.fromEntries( + // Object.entries(form).map(([key, value]) => [key, value === null ? "" : String(value)]) + // ); + // const query = new URLSearchParams(stringForm).toString(); + // const res = await fetch(`/api/transactions/deposit?${query}`); + // const data = await res.json(); + // setTransactions(data); + // } catch (error) { + // console.error('Error fetching transactions:', error); + // } + // }, [form]); const resetForm = () => { - setForm({ - userId: "", - transactionId: "", - transactionReferenceId: "", - currency: "", - state: "", - depositMethod: "", - dateTime: "", - }); + // setForm({ + // userId: "", + // transactionId: "", + // transactionReferenceId: "", + // currency: "", + // state: "", + // depositMethod: "", + // dateTime: "", + // }); }; - useEffect(() => { - fetchTransactions(); - }, [form, fetchTransactions]); + // useEffect(() => { + // fetchTransactions(); + // }, [form, fetchTransactions]); const handleDeleteFilter = (key: string) => { - setForm((prev) => ({ ...prev, [key]: '' })); + // setForm((prev) => ({ ...prev, [key]: '' })); }; const handleClearAll = () => { - resetForm() - fetchTransactions() + // resetForm() + // fetchTransactions() }; const handleClickField = (field: string, value: string) => { - setForm((prev) => ({ ...prev, [field]: value })); + // setForm((prev) => ({ ...prev, [field]: value })); + + const params = new URLSearchParams(searchParams.toString()) + params.set(field, value) + router.push(`?${params.toString()}`) + router.refresh() + }; @@ -109,8 +122,8 @@ export default function DepositsTransactionsTable() { onChange={(e) => console.log(`setSearchQuery(${e.target.value})`)} sx={{ width: 300 }} /> - - + {/* */} + {/* */} - @@ -174,3 +187,5 @@ const StyledPaper = styled(Paper)(() => ({ height: "90vh", width: "80vw" })); + +export default DepositsTransactionsTable diff --git a/payment-iq/app/services/transactions.ts b/payment-iq/app/services/transactions.ts new file mode 100644 index 0000000..71827d3 --- /dev/null +++ b/payment-iq/app/services/transactions.ts @@ -0,0 +1,13 @@ +export async function getTransactions({ query }: { query: string }) { + const res = await fetch(`http://localhost:3000/api/transactions/deposit?${query}`, { + cache: "no-store", + }); + + if (!res.ok) { + // You can parse the error message from the response if your API sends one + const errorData = await res.json().catch(() => ({ message: 'Unknown error' })); + throw new Error(errorData.message || `HTTP error! status: ${res.status}`); + } + + return res.json(); +} \ No newline at end of file From 69c572d70c6014c4265eb55725329c1a09a4001e Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Sat, 12 Jul 2025 18:24:43 +0300 Subject: [PATCH 43/55] make transactions dynamic --- .../app/api/transactions/deposit/mockData.ts | 191 ++ .../app/api/transactions/deposit/route.ts | 10 +- .../api/transactions/withdrawal/mockData.ts | 176 + .../app/api/transactions/withdrawal/route.ts | 45 + .../components/searchFilter/SearchFilters.tsx | 47 +- .../app/dashboard/transactions/constants.ts | 4 + .../dashboard/transactions/deposits/page.tsx | 7 +- .../dashboard/transactions/history/page.tsx | 30 +- .../transactions/withdrawals/page.tsx | 23 + .../AdvancedSearch/AdvancedSearch.tsx | 282 +- .../AdvancedSearch/AdvancedSearch1.tsx | 172 - .../Pages/transactions/Transactions.tsx | 226 -- ...actionsTable.tsx => TransactionsTable.tsx} | 93 +- .../features/Pages/transactions/constants.ts | 6 +- .../features/Pages/transactions/mockData.ts | 2892 ----------------- .../app/features/Pages/transactions/types.ts | 35 +- payment-iq/app/services/transactions.ts | 8 +- payment-iq/app/utils/exportData.ts | 2 +- 18 files changed, 693 insertions(+), 3556 deletions(-) create mode 100644 payment-iq/app/api/transactions/deposit/mockData.ts create mode 100644 payment-iq/app/api/transactions/withdrawal/mockData.ts create mode 100644 payment-iq/app/api/transactions/withdrawal/route.ts create mode 100644 payment-iq/app/dashboard/transactions/constants.ts create mode 100644 payment-iq/app/dashboard/transactions/withdrawals/page.tsx delete mode 100644 payment-iq/app/features/AdvancedSearch/AdvancedSearch1.tsx delete mode 100644 payment-iq/app/features/Pages/transactions/Transactions.tsx rename payment-iq/app/features/Pages/transactions/{DepositTransactionsTable.tsx => TransactionsTable.tsx} (57%) delete mode 100644 payment-iq/app/features/Pages/transactions/mockData.ts diff --git a/payment-iq/app/api/transactions/deposit/mockData.ts b/payment-iq/app/api/transactions/deposit/mockData.ts new file mode 100644 index 0000000..18c0faf --- /dev/null +++ b/payment-iq/app/api/transactions/deposit/mockData.ts @@ -0,0 +1,191 @@ +import { GridColDef } from "@mui/x-data-grid"; + + +export const depositTransactionDummyData = [ + { + id: 1, + userId: 17, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 2, + userId: 17, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 3, + userId: 17, + merchandId: 100987997, + transactionId: 1049131973, + depositMethod: "Card", + status: "Complete", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 4, + userId: 19, + merchandId: 100987997, + transactionId: 1049136973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 5, + userId: 19, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Card", + status: "Completed", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 6, + userId: 27, + merchandId: 100987997, + transactionId: 1049131973, + depositMethod: "Card", + status: "Pending", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 7, + userId: 175, + merchandId: 100987938, + transactionId: 1049136973, + depositMethod: "Card", + status: "Pending", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 8, + userId: 172, + merchandId: 100987938, + transactionId: 1049131973, + depositMethod: "Card", + status: "Pending", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-12 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 9, + userId: 174, + merchandId: 100987938, + transactionId: 1049131973, + depositMethod: "Bank Transfer", + status: "Inprogress", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 10, + userId: 7, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Bank Transfer", + status: "Inprogress", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 11, + userId: 1, + merchandId: 100987998, + transactionId: 1049131973, + depositMethod: "Bank Transfer", + status: "Error", + amount: 4000, + currency: "EUR", + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, +]; + +export const depositTransactionsColumns: GridColDef[] = [ + { field: "userId", headerName: "User ID", width: 130 }, + { field: "merchandId", headerName: "Merchant ID", width: 130 }, + { field: "transactionId", headerName: "Transaction ID", width: 130 }, + { field: "depositMethod", headerName: "Deposit Method", width: 130 }, + { field: "status", headerName: "Status", width: 130 }, + { field: "amount", headerName: "Amount", width: 130 }, + { field: "currency", headerName: "Currency", width: 130 }, + { field: "dateTime", headerName: "Date / Time", width: 130 }, + { field: "errorInfo", headerName: "Error Info", width: 130 }, + { field: "fraudScore", headerName: "Fraud Score", width: 130 }, +] + + +export const depositTransactionsSearchLabels = [ + { label: "User", field: "userId", type: "text" }, + { label: "Transaction ID", field: "transactionId", type: "text" }, + { + label: "Transaction Reference ID", + field: "transactionReferenceId", + type: "text", + }, + { + label: "Currency", + field: "currency", + type: "select", + options: ["USD", "EUR", "GBP"] + }, + { + label: "Status", + field: "status", + type: "select", + options: ["Pending","Inprogress", "Completed", "Failed"] + }, + { + label: "Payment Method", + field: "depositMethod", + type: "select", + options: ["Card", "Bank Transfer"] + }, + { label: "Date / Time", field: "dateTime", type: "date" }, +] \ No newline at end of file diff --git a/payment-iq/app/api/transactions/deposit/route.ts b/payment-iq/app/api/transactions/deposit/route.ts index 2e9ca95..1f8d62b 100644 --- a/payment-iq/app/api/transactions/deposit/route.ts +++ b/payment-iq/app/api/transactions/deposit/route.ts @@ -1,6 +1,6 @@ -import { depositTransactionDummyData } from "@/app/features/Pages/transactions/mockData"; -import { formatToDateTimeString } from "@/app/utils/formatDate"; import { NextRequest, NextResponse } from "next/server"; +import { depositTransactionDummyData, depositTransactionsColumns, depositTransactionsSearchLabels } from "./mockData"; +import { formatToDateTimeString } from "@/app/utils/formatDate"; export async function GET(request: NextRequest) { const { searchParams } = new URL(request.url); @@ -49,5 +49,9 @@ export async function GET(request: NextRequest) { ); } - return NextResponse.json(filteredTransactions); + return NextResponse.json({ + filteredTransactions: filteredTransactions, + transactionsSearchLabels: depositTransactionsSearchLabels, + transactionsColumns: depositTransactionsColumns + }); } diff --git a/payment-iq/app/api/transactions/withdrawal/mockData.ts b/payment-iq/app/api/transactions/withdrawal/mockData.ts new file mode 100644 index 0000000..3c7918c --- /dev/null +++ b/payment-iq/app/api/transactions/withdrawal/mockData.ts @@ -0,0 +1,176 @@ +import { GridColDef } from "@mui/x-data-grid"; + +export const withdrawalTransactionDummyData = [ + { + id: 1, + userId: 17, + transactionId: 1049131973, + withdrawalMethod: "Bank Transfer", + status: "Error", + amount: 4000, + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + manualCorrectionFlag: "-", + informationWhoApproved: "-", + }, + { + id: 2, + userId: 17, + transactionId: 1049131973, + withdrawalMethod: "Bank Transfer", + status: "Error", + amount: 4000, + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + manualCorrectionFlag: "-", + informationWhoApproved: "-", + }, + { + id: 3, + userId: 17, + transactionId: 1049131973, + withdrawalMethod: "Bank Transfer", + status: "Complete", + amount: 4000, + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 4, + userId: 19, + transactionId: 1049136973, + withdrawalMethod: "Bank Transfer", + status: "Completed", + amount: 4000, + dateTime: "2025-06-18 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 5, + userId: 19, + transactionId: 1049131973, + withdrawalMethod: "Bank Transfer", + status: "Error", + amount: 4000, + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + manualCorrectionFlag: "-", + informationWhoApproved: "-", + }, + { + id: 6, + userId: 27, + transactionId: 1049131973, + withdrawalMethod: "Bank Transfer", + status: "Error", + amount: 4000, + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + manualCorrectionFlag: "-", + informationWhoApproved: "-", + }, + { + id: 7, + userId: 1, + transactionId: 1049131973, + withdrawalMethod: "Bank Transfer", + status: "Error", + amount: 4000, + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + manualCorrectionFlag: "-", + informationWhoApproved: "-", + }, + { + id: 8, + userId: 172, + transactionId: 1049131973, + withdrawalMethod: "Card", + status: "Pending", + amount: 4000, + dateTime: "2025-06-12 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 9, + userId: 174, + transactionId: 1049131973, + withdrawalMethod: "Bank Transfer", + status: "Inprogress", + amount: 4000, + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + }, + { + id: 10, + userId: 1, + transactionId: 1049131973, + withdrawalMethod: "Bank Transfer", + status: "Error", + amount: 4000, + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + manualCorrectionFlag: "-", + informationWhoApproved: "-", + }, + { + id: 11, + userId: 1, + transactionId: 1049131973, + withdrawalMethod: "Bank Transfer", + status: "Error", + amount: 4000, + dateTime: "2025-06-17 10:10:30", + errorInfo: "-", + fraudScore: "frad score 1234", + manualCorrectionFlag: "-", + informationWhoApproved: "-", + }, +]; + +export const withdrawalTransactionsColumns: GridColDef[] = [ + { field: "userId", headerName: "User ID", width: 130 }, + { field: "transactionId", headerName: "Transaction ID", width: 130 }, + { field: "withdrawalMethod", headerName: "Withdrawal Method", width: 130 }, + { field: "status", headerName: "Status", width: 130 }, + { field: "amount", headerName: "Amount", width: 130 }, + { field: "dateTime", headerName: "Date / Time", width: 130 }, + { field: "errorInfo", headerName: "Error Info", width: 130 }, + { field: "fraudScore", headerName: "Fraud Score", width: 130 }, + { + field: "manualCorrectionFlag", + headerName: "Manual Correction Flag", + width: 130, + }, + { + field: "informationWhoApproved", + headerName: "Information who approved", + width: 130, + }, +]; + +export const withdrawalTransactionsSearchLabels = [ + { + label: "Status", + field: "status", + type: "select", + options: ["Pending", "Inprogress", "Completed", "Failed"], + }, + { + label: "Payment Method", + field: "depositMethod", + type: "select", + options: ["Card", "Bank Transfer"], + }, + { label: "Date / Time", field: "dateTime", type: "date" }, +]; diff --git a/payment-iq/app/api/transactions/withdrawal/route.ts b/payment-iq/app/api/transactions/withdrawal/route.ts new file mode 100644 index 0000000..d0f22cd --- /dev/null +++ b/payment-iq/app/api/transactions/withdrawal/route.ts @@ -0,0 +1,45 @@ +import { NextRequest, NextResponse } from "next/server"; +import { withdrawalTransactionDummyData, withdrawalTransactionsColumns, withdrawalTransactionsSearchLabels } from "./mockData" +import { formatToDateTimeString } from "@/app/utils/formatDate"; + +export async function GET(request: NextRequest) { + const { searchParams } = new URL(request.url); + + const userId = searchParams.get("userId"); + const status = searchParams.get("status"); + const dateTime = searchParams.get("dateTime"); + const withdrawalMethod = searchParams.get("withdrawalMethod"); + + + let filteredTransactions = [...withdrawalTransactionDummyData]; + + if (userId) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.userId.toString() === userId + ); + } + + if (status) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.status.toLowerCase() === status.toLowerCase() + ); + } + + if (withdrawalMethod) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.withdrawalMethod.toLowerCase() === withdrawalMethod.toLowerCase() + ); + } + + if (dateTime) { + filteredTransactions = filteredTransactions.filter( + (tx) => tx.dateTime.split(" ")[0] === formatToDateTimeString(dateTime).split(" ")[0] + ); + } + + return NextResponse.json({ + filteredTransactions: filteredTransactions, + transactionsColumns: withdrawalTransactionsColumns, + transactionsSearchLabels: withdrawalTransactionsSearchLabels + }); +} diff --git a/payment-iq/app/components/searchFilter/SearchFilters.tsx b/payment-iq/app/components/searchFilter/SearchFilters.tsx index 82f5692..bacce04 100644 --- a/payment-iq/app/components/searchFilter/SearchFilters.tsx +++ b/payment-iq/app/components/searchFilter/SearchFilters.tsx @@ -1,31 +1,57 @@ -// components/SearchFilters.js import React from 'react'; import { Box, Chip, Typography, Button } from '@mui/material'; +import { useRouter, useSearchParams } from 'next/navigation'; -const SearchFilters = ({ filters, onDeleteFilter, onClearAll }) => { - const renderChip = (label, value, key) => ( +interface SearchFiltersProps { + filters: Record; +} + +const SearchFilters = ({ filters }: SearchFiltersProps) => { + const router = useRouter(); + const filterLabels: Record = { + userId: "User", + state: "State", + startDate: "Start Date", + // Add others here + }; + const searchParams = useSearchParams() + const handleDeleteFilter = (key: string) => { + const params = new URLSearchParams(searchParams.toString()); + params.delete(key); + router.push(`?${params.toString()}`); + }; + + + const onClearAll = () => { + router.push("?"); + } + + const renderChip = (label: string, value: string, key: string) => ( - {label} {value} + + {label}: {value} } - onDelete={() => onDeleteFilter(key)} + onDelete={() => handleDeleteFilter(key)} sx={{ mr: 1, mb: 1 }} /> ); return ( - {filters.user && renderChip('User', filters.user, 'user')} - {filters.state && renderChip('State', filters.state, 'state')} - {filters.startDate && renderChip('Start Date', filters.startDate, 'startDate')} + {Object.entries(filters).map(([key, value]) => + value ? renderChip(filterLabels[key] ?? key, value, key) : null + )} {Object.values(filters).some(Boolean) && ( @@ -34,4 +60,5 @@ const SearchFilters = ({ filters, onDeleteFilter, onClearAll }) => { ); }; + export default SearchFilters; diff --git a/payment-iq/app/dashboard/transactions/constants.ts b/payment-iq/app/dashboard/transactions/constants.ts new file mode 100644 index 0000000..982d5cc --- /dev/null +++ b/payment-iq/app/dashboard/transactions/constants.ts @@ -0,0 +1,4 @@ +export enum TransactionType { + Deposit = "deposit", + Withdraw = "withdraw" +} \ No newline at end of file diff --git a/payment-iq/app/dashboard/transactions/deposits/page.tsx b/payment-iq/app/dashboard/transactions/deposits/page.tsx index 8f14822..922a508 100644 --- a/payment-iq/app/dashboard/transactions/deposits/page.tsx +++ b/payment-iq/app/dashboard/transactions/deposits/page.tsx @@ -1,4 +1,4 @@ -import DepositsTransactionsTable from "@/app/features/Pages/transactions/DepositTransactionsTable"; +import TransactionsTable from "@/app/features/Pages/Transactions/TransactionsTable"; import { getTransactions } from "@/app/services/transactions"; export default async function DepositTransactionPage({ @@ -16,7 +16,8 @@ export default async function DepositTransactionPage({ } } const query = new URLSearchParams(safeParams).toString(); - const transactions = await getTransactions({ query }); + const transactionType = 'deposit'; + const data = await getTransactions({ transactionType, query }); - return ; + return ; } diff --git a/payment-iq/app/dashboard/transactions/history/page.tsx b/payment-iq/app/dashboard/transactions/history/page.tsx index 64e0f47..922a508 100644 --- a/payment-iq/app/dashboard/transactions/history/page.tsx +++ b/payment-iq/app/dashboard/transactions/history/page.tsx @@ -1,13 +1,23 @@ -// This ensures this component is rendered only on the client side +import TransactionsTable from "@/app/features/Pages/Transactions/TransactionsTable"; +import { getTransactions } from "@/app/services/transactions"; -import TransactionTable from "@/app/features/Pages/Transactions/Transactions"; +export default async function DepositTransactionPage({ + searchParams, +}: { + searchParams: Promise>; +}) { + // Await searchParams before processing + const params = await searchParams; + // Create a safe query string by filtering only string values + const safeParams: Record = {}; + for (const [key, value] of Object.entries(params)) { + if (typeof value === "string") { + safeParams[key] = value; + } + } + const query = new URLSearchParams(safeParams).toString(); + const transactionType = 'deposit'; + const data = await getTransactions({ transactionType, query }); - -export default function TransactionPage() { - return ( -
- {/* This page will now be rendered on the client-side */} - -
- ); + return ; } diff --git a/payment-iq/app/dashboard/transactions/withdrawals/page.tsx b/payment-iq/app/dashboard/transactions/withdrawals/page.tsx new file mode 100644 index 0000000..2800942 --- /dev/null +++ b/payment-iq/app/dashboard/transactions/withdrawals/page.tsx @@ -0,0 +1,23 @@ +import TransactionsTable from "@/app/features/Pages/Transactions/TransactionsTable"; +import { getTransactions } from "@/app/services/transactions"; + +export default async function DepositTransactionPage({ + searchParams, +}: { + searchParams: Promise>; +}) { + // Await searchParams before processing + const params = await searchParams; + // Create a safe query string by filtering only string values + const safeParams: Record = {}; + for (const [key, value] of Object.entries(params)) { + if (typeof value === "string") { + safeParams[key] = value; + } + } + const query = new URLSearchParams(safeParams).toString(); +const transactionType = 'withdrawal'; +const data = await getTransactions({ transactionType, query }); + + return ; +} diff --git a/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx b/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx index 9c03417..79db3d2 100644 --- a/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx +++ b/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx @@ -1,4 +1,3 @@ -import { useState } from "react"; import { Box, TextField, @@ -9,168 +8,70 @@ import { Select, Typography, Stack, + debounce, } from "@mui/material"; import { DatePicker } from "@mui/x-date-pickers/DatePicker"; import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import SearchIcon from "@mui/icons-material/Search"; import RefreshIcon from "@mui/icons-material/Refresh"; +import { useSearchParams, useRouter } from "next/navigation"; +import { useState, useEffect, useMemo } from "react"; -const currencies = ["USD", "EUR", "GBP"]; -const states = ["Pending", "Completed", "Failed"]; -const transactionTypes = ["Credit", "Debit"]; -const paymentMethods = ["Card", "Bank Transfer"]; -export default function AdvancedSearch({ setForm, form, resetForm }) { +interface ILabel { + label: string; + field: string; + type: string; + options?: string[]; +} + +export default function AdvancedSearch({ labels }: { labels: ILabel[] }) { + const searchParams = useSearchParams(); + const router = useRouter(); const [open, setOpen] = useState(false); + const [formValues, setFormValues] = useState>({}); - const handleChange = (field: string, value: any) => { - setForm((prev) => ({ ...prev, [field]: value })); + useEffect(() => { + const initialParams = Object.fromEntries(searchParams.entries()); + setFormValues(initialParams); + }, [searchParams]); + + + const updateURL = useMemo( + () => + debounce((newValues: Record) => { + const updatedParams = new URLSearchParams(); + Object.entries(newValues).forEach(([key, value]) => { + if (value) updatedParams.set(key, value); + }); + router.push(`?${updatedParams.toString()}`); + }, 500), + [router] + ); + + const handleFieldChange = (field: string, value: string) => { + const updatedValues = { ...formValues, [field]: value }; + setFormValues(updatedValues); + updateURL(updatedValues); }; - const toggleDrawer = - (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { - if ( - event.type === "keydown" && - ((event as React.KeyboardEvent).key === "Tab" || - (event as React.KeyboardEvent).key === "Shift") - ) { - return; - } + const resetForm = () => { + setFormValues({}); + router.push("?"); + }; - setOpen(open); - }; + const toggleDrawer = (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { + if ( + event.type === "keydown" && + ((event as React.KeyboardEvent).key === "Tab" || + (event as React.KeyboardEvent).key === "Shift") + ) { + return; + } + setOpen(open); + }; - const list = () => ( - - - - - - Search - - {/* Buttons */} - - - - - - - {[ - { label: "Keyword", field: "keyword", type: "text" }, - { label: "Transaction ID", field: "transactionID", type: "text" }, - { - label: "Transaction Reference ID", - field: "transactionReferenceId", - type: "text", - }, - { label: "User", field: "user", type: "text" }, - { - label: "Currency", - field: "currency", - type: "select", - options: currencies, - }, - { - label: "State", - field: "state", - type: "select", - options: states, - }, - { - label: "Status Description", - field: "statusDescription", - type: "text", - }, - { - label: "Transaction Type", - field: "transactionType", - type: "select", - options: transactionTypes, - }, - { - label: "Payment Method", - field: "paymentMethod", - type: "select", - options: paymentMethods, - }, - { label: "PSPs", field: "psps", type: "text" }, - { label: "Initial PSPs", field: "initialPsps", type: "text" }, - { label: "Merchants", field: "merchants", type: "text" }, - { label: "Start Date", field: "startDate", type: "date" }, - { label: "End Date", field: "endDate", type: "date" }, - { - label: "Last Updated From", - field: "lastUpdatedFrom", - type: "date", - }, - { - label: "Last Updated To", - field: "lastUpdatedTo", - type: "date", - }, - { label: "Min Amount", field: "minAmount", type: "text" }, - { label: "Max Amount", field: "maxAmount", type: "text" }, - { label: "Channel", field: "channel", type: "text" }, - ].map(({ label, field, type, options }) => ( - - - {label} - - {type === "text" && ( - handleChange(field, e.target.value)} - /> - )} - {type === "select" && ( - - - - )} - {type === "date" && ( - handleChange(field, newValue)} - renderInput={(params) => ( - - )} - /> - )} - - ))} - - - - - ); return ( - {/* */} + - {list()} + + + + + + Search + + + + - - - - - {labels.map(({ label, field, type, options }) => ( - - - {label} - - {type === "text" && ( - handleChange(field, e.target.value)} - /> - )} - {type === "select" && ( - - - - )} - {type === "date" && ( - handleChange(field, newValue)} - renderInput={(params) => ( - - )} - /> - )} - - ))} - - - - - ); - return ( - - - {/* */} - - {list()} - - - ); -} diff --git a/payment-iq/app/features/Pages/transactions/Transactions.tsx b/payment-iq/app/features/Pages/transactions/Transactions.tsx deleted file mode 100644 index fe594ab..0000000 --- a/payment-iq/app/features/Pages/transactions/Transactions.tsx +++ /dev/null @@ -1,226 +0,0 @@ -"use client"; -import { useEffect, useState } from "react"; -import { - Button, - Dialog, - DialogTitle, - DialogContent, - DialogActions, - FormControl, - Select, - MenuItem, - FormControlLabel, - Checkbox, - Stack, - Paper, - styled, - TextField, -} from "@mui/material"; -import FileUploadIcon from "@mui/icons-material/FileUpload"; -import * as XLSX from "xlsx"; -import { saveAs } from "file-saver"; -import { DataGrid } from "@mui/x-data-grid"; -import { columns } from "./constants"; -// import { rows } from "./mockData"; -import AdvancedSearch from "../../AdvancedSearch/AdvancedSearch"; -import SearchFilters from "@/app/components/searchFilter/SearchFilters"; - -const paginationModel = { page: 0, pageSize: 50 }; - -export default function TransactionTable() { - const [form, setForm] = useState({ - keyword: "", - transactionID: "", - transactionReferenceId: "", - user: "", - currency: "", - state: "", - statusDescription: "", - transactionType: "", - paymentMethod: "", - psps: "", - initialPsps: "", - merchants: "", - startDate: null, - endDate: null, - lastUpdatedFrom: null, - lastUpdatedTo: null, - minAmount: "", - maxAmount: "", - channel: "", - }); - - const resetForm = () => { - setForm({ - keyword: "", - transactionID: "", - transactionReferenceId: "", - user: "", - currency: "", - state: "", - statusDescription: "", - transactionType: "", - paymentMethod: "", - psps: "", - initialPsps: "", - merchants: "", - startDate: null, - endDate: null, - lastUpdatedFrom: null, - lastUpdatedTo: null, - minAmount: "", - maxAmount: "", - channel: "", - }); - }; - - const [open, setOpen] = useState(false); - const [fileType, setFileType] = useState<"csv" | "xls" | "xlsx">("csv"); - const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); - - const handleExport = () => { - const exportRows = onlyCurrentTable - ? transactions.slice(0, 5) - : transactions; - const exportData = [ - columns.map((col) => col.headerName), - ...exportRows.map((row) => columns.map((col) => row[col.field] ?? "")), - ]; - - const worksheet = XLSX.utils.aoa_to_sheet(exportData); - const workbook = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(workbook, worksheet, "Transactions"); - - if (fileType === "csv") { - const csv = XLSX.utils.sheet_to_csv(worksheet); - const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" }); - saveAs(blob, "transactions.csv"); - } else { - XLSX.writeFile(workbook, `transactions.${fileType}`, { - bookType: fileType, - }); - } - - setOpen(false); - }; - - const [transactions, setTransactions] = useState([]); - - const fetchTransactions = async () => { - try { - const query = new URLSearchParams(form as any).toString(); - const res = await fetch(`/api/transactions?${query}`); - const data = await res.json(); - setTransactions(data); - } catch (error) { - console.error("Error fetching transactions:", error); - } - }; - - useEffect(() => { - fetchTransactions(); - }, [form]); - - const handleDeleteFilter = (key) => { - setForm((prev) => ({ ...prev, [key]: "" })); - }; - - const handleClearAll = () => { - resetForm(); - fetchTransactions(); - }; - - const handleClickField = (field: string, value: any) => { - setForm((prev) => ({ ...prev, [field]: value })); - }; - - return ( - - - console.log(`setSearchQuery(${e.target.value})`)} - sx={{ width: 300 }} - /> - - - {/* */} - {/* */} - - - - { - // Check if the click is on a specific column - // Do something when this specific column is clicked - handleClickField(params.field, params.value); - console.log("Clicked cell value:", params.value); // The cell's value - console.log("Column field:", params.field); // The column's field name (from your columns definition) - console.log("Column header:", params.colDef.headerName); // The column's display name // Your custom logic here - }} - /> - - {/* Export Dialog */} - setOpen(false)}> - Export Transactions - - - - - setOnlyCurrentTable(e.target.checked)} - /> - } - label="Only export the results in the current table" - sx={{ mt: 2 }} - /> - - - - - - - - ); -} - -const StyledPaper = styled(Paper)(() => ({ - height: "90vh", -})); diff --git a/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx b/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx similarity index 57% rename from payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx rename to payment-iq/app/features/Pages/transactions/TransactionsTable.tsx index a7c6181..95bbc8e 100644 --- a/payment-iq/app/features/Pages/transactions/DepositTransactionsTable.tsx +++ b/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx @@ -1,5 +1,6 @@ "use client"; -import { useCallback, useEffect, useState } from "react"; +import { useState } from "react"; +import { useSearchParams, useRouter } from "next/navigation"; import { Button, Dialog, @@ -13,102 +14,45 @@ import { Checkbox, Stack, Paper, - styled, TextField, } from "@mui/material"; import FileUploadIcon from "@mui/icons-material/FileUpload"; import { DataGrid } from "@mui/x-data-grid"; -import { depositTransactionsColumns, Labels } from "./constants"; -import AdvancedSearch1 from "../../AdvancedSearch/AdvancedSearch1"; +import AdvancedSearch from "../../AdvancedSearch/AdvancedSearch"; import SearchFilters from "@/app/components/searchFilter/SearchFilters"; import { exportData } from "@/app/utils/exportData"; import { ITransaction } from "./types"; -import { useSearchParams, useRouter } from "next/navigation"; const paginationModel = { page: 0, pageSize: 50 }; -interface DepositProps { - data: any +interface IDepositProps { + res: ITransaction } -const DepositsTransactionsTable: React.FC = ({ data }) => { +const TransactionsTable = ({ res }: IDepositProps) => { + const {filteredTransactions, transactionsColumns, transactionsSearchLabels} = res; const router = useRouter() const searchParams = useSearchParams() - // const [form, setForm] = useState({ - // userId: "", - // transactionId: "", - // transactionReferenceId: "", - // currency: "", - // state: "", - // depositMethod: "", - // dateTime: "", - // }); const [open, setOpen] = useState(false); const [fileType, setFileType] = useState<"csv" | "xls" | "xlsx">("csv"); const [onlyCurrentTable, setOnlyCurrentTable] = useState(false); - const [transactions, setTransactions] = useState([]); - - // console.log(777, form) - - - // const fetchTransactions = useCallback(async () => { - // try { - // const stringForm: Record = Object.fromEntries( - // Object.entries(form).map(([key, value]) => [key, value === null ? "" : String(value)]) - // ); - // const query = new URLSearchParams(stringForm).toString(); - // const res = await fetch(`/api/transactions/deposit?${query}`); - // const data = await res.json(); - // setTransactions(data); - // } catch (error) { - // console.error('Error fetching transactions:', error); - // } - // }, [form]); - - - const resetForm = () => { - // setForm({ - // userId: "", - // transactionId: "", - // transactionReferenceId: "", - // currency: "", - // state: "", - // depositMethod: "", - // dateTime: "", - // }); - }; - - // useEffect(() => { - // fetchTransactions(); - // }, [form, fetchTransactions]); - - const handleDeleteFilter = (key: string) => { - // setForm((prev) => ({ ...prev, [key]: '' })); - }; - - const handleClearAll = () => { - // resetForm() - // fetchTransactions() - }; + const filters = Object.fromEntries(searchParams.entries()); const handleClickField = (field: string, value: string) => { - // setForm((prev) => ({ ...prev, [field]: value })); - const params = new URLSearchParams(searchParams.toString()) params.set(field, value) router.push(`?${params.toString()}`) router.refresh() - }; return ( - + = ({ data }) => { onChange={(e) => console.log(`setSearchQuery(${e.target.value})`)} sx={{ width: 300 }} /> - {/* */} - {/* */} + + - - + ); } -const StyledPaper = styled(Paper)(() => ({ - height: "90vh", - width: "80vw" -})); - -export default DepositsTransactionsTable +export default TransactionsTable diff --git a/payment-iq/app/features/Pages/transactions/constants.ts b/payment-iq/app/features/Pages/transactions/constants.ts index 40be306..e34fa3b 100644 --- a/payment-iq/app/features/Pages/transactions/constants.ts +++ b/payment-iq/app/features/Pages/transactions/constants.ts @@ -135,7 +135,7 @@ export const depositTransactionsColumns = [ export const currencies = ["USD", "EUR", "GBP"]; -export const states = ["Pending", "Completed", "Failed"]; +export const states = ["Pending","Inprogress", "Completed", "Failed"]; export const depositMethod = ["Card", "Bank Transfer"]; export const Labels = [ @@ -153,8 +153,8 @@ export const Labels = [ options: currencies, }, { - label: "State", - field: "state", + label: "Status", + field: "status", type: "select", options: states, }, diff --git a/payment-iq/app/features/Pages/transactions/mockData.ts b/payment-iq/app/features/Pages/transactions/mockData.ts deleted file mode 100644 index 8699d2c..0000000 --- a/payment-iq/app/features/Pages/transactions/mockData.ts +++ /dev/null @@ -1,2892 +0,0 @@ -export const rows = [ - { - id: 1, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 2, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 3, - merchandId: 100987995, - transactionID: 1049131975, - user: 17, - created: "2025-06-18 10:10:30", - state: "Completed", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 4, - merchandId: 100987995, - transactionID: 1049131975, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 5, - merchandId: 100987995, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 6, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 7, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 8, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 9, - merchandId: 100987998, - transactionID: 1049131975, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 10, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 11, - merchandId: 100987998, - transactionID: 1049131975, - user: 17, - created: "2025-06-18 10:10:30", - state: "Pending", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 12, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 13, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 14, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 15, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 16, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 17, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 18, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 19, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 20, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 21, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 22, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 23, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 24, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 25, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 26, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, - { - id: 27, - merchandId: 100987998, - transactionID: 1049131973, - user: 17, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - pspStatusMessage: "", - psp: "BestPay", - pspAccount: "LUQAPAY_MANUALPAPARA_FTD", - initPSP: "BestPay", - initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", - pspService: "MWALLET_PAPARA", - transactionType: "BankDeposit", - paymentMethod: "Deposit", - rules: [ - "100987998_PM_01_01", - "100987998_RO_02_01", - "100987998_LI_06_01", - "100987998_FO_01_01", - ], - amount: 50.0, - fee: 0.0, - transactionAmount: 1, - baseAmount: 43.43, - baseFee: 0.0, - baseTransaction: 43.43, - pspFee: "", // value was missing - basePspFee: "", // value was missing - authAmount: 0.0, - baseAuthAmount: 0.0, - userBalance: 1, - updated: "2025-06-18 10:10:31", - userIp: "213.217.206.91", - channel: "Windows", - depositType: "Standard", - userEmal: "dhkheni1@yopmail.com", - userCategory: "", - userCountry: "TUR", - userAccount: "", - bankName: "", - pspUserReference: "N/A", - pspFraudScore: "", - fraudStatus: "", - blocked: "", - abuse: "", - kycStatus: "", - kycPSPName: "", - kycPSPStatus: "", - kycIdStatus: "", - kycAddressStatus: "", - kycAgeStatus: "", - kycPEPAndSanction: "", - pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", - info: "Drashti 1", - accountHolder: "Prabhudarshan", - firstName: "Surat", - lastName: 395010, - street: "2007-01-03", - city: 15125898569, - zip: "", - dob: "Msida", - mobile: "L-Imsida", - lastUpdatedBy: "MLT", - ipCity: "", - ipRegion: "", - ipCountry: "", - cardIssuerCountry: "FALSE", - cardBand: "FALSE", - cardCategory: "FALSE", - cardIssuerName: "FALSE", - inn: "FALSE", - cardType: "FALSE", - firstAttempt: 1049131973, - firstSuccessful: "", // no value provided - firstTransaction: "", // no value provided - firstPspAcountAttempt: "", // no value provided - firstPspAcountSuccessful: "", // no value provided - originTransactionId: "", // no value provided - transactionReferenceId: "", // no value provided - }, -]; - -// export const transactionDummyData = [ -// { -// id: 1, -// merchandId: 100987998, -// transactionID: 1049131973, -// user: 17, -// created: "2025-06-18 10:10:30", -// state: "FAILED", -// statusDescription: "ERR_ABOVE_LIMIT", -// pspStatusCode: 100501, -// pspStatusMessage: "", -// psp: "BestPay", -// pspAccount: "LUQAPAY_MANUALPAPARA_FTD", -// initPSP: "BestPay", -// initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", -// pspService: "MWALLET_PAPARA", -// transactionType: "BankDeposit", -// paymentMethod: "Deposit", -// rules: [ -// "100987998_PM_01_01", -// "100987998_RO_02_01", -// "100987998_LI_06_01", -// "100987998_FO_01_01", -// ], -// amount: 50.0, -// fee: 0.0, -// transactionAmount: 1, -// baseAmount: 43.43, -// baseFee: 0.0, -// baseTransaction: 43.43, -// pspFee: "", // value was missing -// basePspFee: "", // value was missing -// authAmount: 0.0, -// baseAuthAmount: 0.0, -// userBalance: 1, -// updated: "2025-06-18 10:10:31", -// userIp: "213.217.206.91", -// channel: "Windows", -// depositType: "Standard", -// userEmal: "dhkheni1@yopmail.com", -// userCategory: "", -// userCountry: "TUR", -// userAccount: "", -// bankName: "", -// pspUserReference: "N/A", -// pspFraudScore: "", -// fraudStatus: "", -// blocked: "", -// abuse: "", -// kycStatus: "", -// kycPSPName: "", -// kycPSPStatus: "", -// kycIdStatus: "", -// kycAddressStatus: "", -// kycAgeStatus: "", -// kycPEPAndSanction: "", -// pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// info: "Drashti 1", -// accountHolder: "Prabhudarshan", -// firstName: "Surat", -// lastName: 395010, -// street: "2007-01-03", -// city: 15125898569, -// zip: "", -// dob: "Msida", -// mobile: "L-Imsida", -// lastUpdatedBy: "MLT", -// ipCity: "", -// ipRegion: "", -// ipCountry: "", -// cardIssuerCountry: "FALSE", -// cardBand: "FALSE", -// cardCategory: "FALSE", -// cardIssuerName: "FALSE", -// inn: "FALSE", -// cardType: "FALSE", -// firstAttempt: 1049131973, -// firstSuccessful: "", // no value provided -// firstTransaction: "", // no value provided -// firstPspAcountAttempt: "", // no value provided -// firstPspAcountSuccessful: "", // no value provided -// originTransactionId: "", // no value provided -// transactionReferenceId: "", // no value provided -// }, -// { -// id: 2, -// merchandId: 100987998, -// transactionID: 1049131973, -// user: 17, -// created: "2025-06-18 10:10:30", -// state: "FAILED", -// statusDescription: "ERR_ABOVE_LIMIT", -// pspStatusCode: 100501, -// pspStatusMessage: "", -// psp: "BestPay", -// pspAccount: "LUQAPAY_MANUALPAPARA_FTD", -// initPSP: "BestPay", -// initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", -// pspService: "MWALLET_PAPARA", -// transactionType: "BankDeposit", -// paymentMethod: "Deposit", -// rules: [ -// "100987998_PM_01_01", -// "100987998_RO_02_01", -// "100987998_LI_06_01", -// "100987998_FO_01_01", -// ], -// amount: 50.0, -// fee: 0.0, -// transactionAmount: 1, -// baseAmount: 43.43, -// baseFee: 0.0, -// baseTransaction: 43.43, -// pspFee: "", // value was missing -// basePspFee: "", // value was missing -// authAmount: 0.0, -// baseAuthAmount: 0.0, -// userBalance: 1, -// updated: "2025-06-18 10:10:31", -// userIp: "213.217.206.91", -// channel: "Windows", -// depositType: "Standard", -// userEmal: "dhkheni1@yopmail.com", -// userCategory: "", -// userCountry: "TUR", -// userAccount: "", -// bankName: "", -// pspUserReference: "N/A", -// pspFraudScore: "", -// fraudStatus: "", -// blocked: "", -// abuse: "", -// kycStatus: "", -// kycPSPName: "", -// kycPSPStatus: "", -// kycIdStatus: "", -// kycAddressStatus: "", -// kycAgeStatus: "", -// kycPEPAndSanction: "", -// pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// info: "Drashti 1", -// accountHolder: "Prabhudarshan", -// firstName: "Surat", -// lastName: 395010, -// street: "2007-01-03", -// city: 15125898569, -// zip: "", -// dob: "Msida", -// mobile: "L-Imsida", -// lastUpdatedBy: "MLT", -// ipCity: "", -// ipRegion: "", -// ipCountry: "", -// cardIssuerCountry: "FALSE", -// cardBand: "FALSE", -// cardCategory: "FALSE", -// cardIssuerName: "FALSE", -// inn: "FALSE", -// cardType: "FALSE", -// firstAttempt: 1049131973, -// firstSuccessful: "", // no value provided -// firstTransaction: "", // no value provided -// firstPspAcountAttempt: "", // no value provided -// firstPspAcountSuccessful: "", // no value provided -// originTransactionId: "", // no value provided -// transactionReferenceId: "", // no value provided -// }, -// { -// id: 3, -// merchandId: 100987995, -// transactionID: 1049131975, -// user: 17, -// created: "2025-06-18 10:10:30", -// state: "Completed", -// statusDescription: "ERR_ABOVE_LIMIT", -// pspStatusCode: 100501, -// pspStatusMessage: "", -// psp: "BestPay", -// pspAccount: "LUQAPAY_MANUALPAPARA_FTD", -// initPSP: "BestPay", -// initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", -// pspService: "MWALLET_PAPARA", -// transactionType: "BankDeposit", -// paymentMethod: "Deposit", -// rules: [ -// "100987998_PM_01_01", -// "100987998_RO_02_01", -// "100987998_LI_06_01", -// "100987998_FO_01_01", -// ], -// amount: 50.0, -// fee: 0.0, -// transactionAmount: 1, -// baseAmount: 43.43, -// baseFee: 0.0, -// baseTransaction: 43.43, -// pspFee: "", // value was missing -// basePspFee: "", // value was missing -// authAmount: 0.0, -// baseAuthAmount: 0.0, -// userBalance: 1, -// updated: "2025-06-18 10:10:31", -// userIp: "213.217.206.91", -// channel: "Windows", -// depositType: "Standard", -// userEmal: "dhkheni1@yopmail.com", -// userCategory: "", -// userCountry: "TUR", -// userAccount: "", -// bankName: "", -// pspUserReference: "N/A", -// pspFraudScore: "", -// fraudStatus: "", -// blocked: "", -// abuse: "", -// kycStatus: "", -// kycPSPName: "", -// kycPSPStatus: "", -// kycIdStatus: "", -// kycAddressStatus: "", -// kycAgeStatus: "", -// kycPEPAndSanction: "", -// pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// info: "Drashti 1", -// accountHolder: "Prabhudarshan", -// firstName: "Surat", -// lastName: 395010, -// street: "2007-01-03", -// city: 15125898569, -// zip: "", -// dob: "Msida", -// mobile: "L-Imsida", -// lastUpdatedBy: "MLT", -// ipCity: "", -// ipRegion: "", -// ipCountry: "", -// cardIssuerCountry: "FALSE", -// cardBand: "FALSE", -// cardCategory: "FALSE", -// cardIssuerName: "FALSE", -// inn: "FALSE", -// cardType: "FALSE", -// firstAttempt: 1049131973, -// firstSuccessful: "", // no value provided -// firstTransaction: "", // no value provided -// firstPspAcountAttempt: "", // no value provided -// firstPspAcountSuccessful: "", // no value provided -// originTransactionId: "", // no value provided -// transactionReferenceId: "", // no value provided -// }, -// { -// id: 4, -// merchandId: 100987995, -// transactionID: 1049131975, -// user: 17, -// created: "2025-06-18 10:10:30", -// state: "FAILED", -// statusDescription: "ERR_ABOVE_LIMIT", -// pspStatusCode: 100501, -// pspStatusMessage: "", -// psp: "BestPay", -// pspAccount: "LUQAPAY_MANUALPAPARA_FTD", -// initPSP: "BestPay", -// initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", -// pspService: "MWALLET_PAPARA", -// transactionType: "BankDeposit", -// paymentMethod: "Deposit", -// rules: [ -// "100987998_PM_01_01", -// "100987998_RO_02_01", -// "100987998_LI_06_01", -// "100987998_FO_01_01", -// ], -// amount: 50.0, -// fee: 0.0, -// transactionAmount: 1, -// baseAmount: 43.43, -// baseFee: 0.0, -// baseTransaction: 43.43, -// pspFee: "", // value was missing -// basePspFee: "", // value was missing -// authAmount: 0.0, -// baseAuthAmount: 0.0, -// userBalance: 1, -// updated: "2025-06-18 10:10:31", -// userIp: "213.217.206.91", -// channel: "Windows", -// depositType: "Standard", -// userEmal: "dhkheni1@yopmail.com", -// userCategory: "", -// userCountry: "TUR", -// userAccount: "", -// bankName: "", -// pspUserReference: "N/A", -// pspFraudScore: "", -// fraudStatus: "", -// blocked: "", -// abuse: "", -// kycStatus: "", -// kycPSPName: "", -// kycPSPStatus: "", -// kycIdStatus: "", -// kycAddressStatus: "", -// kycAgeStatus: "", -// kycPEPAndSanction: "", -// pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// info: "Drashti 1", -// accountHolder: "Prabhudarshan", -// firstName: "Surat", -// lastName: 395010, -// street: "2007-01-03", -// city: 15125898569, -// zip: "", -// dob: "Msida", -// mobile: "L-Imsida", -// lastUpdatedBy: "MLT", -// ipCity: "", -// ipRegion: "", -// ipCountry: "", -// cardIssuerCountry: "FALSE", -// cardBand: "FALSE", -// cardCategory: "FALSE", -// cardIssuerName: "FALSE", -// inn: "FALSE", -// cardType: "FALSE", -// firstAttempt: 1049131973, -// firstSuccessful: "", // no value provided -// firstTransaction: "", // no value provided -// firstPspAcountAttempt: "", // no value provided -// firstPspAcountSuccessful: "", // no value provided -// originTransactionId: "", // no value provided -// transactionReferenceId: "", // no value provided -// }, -// { -// id: 5, -// merchandId: 100987995, -// transactionID: 1049131973, -// user: 17, -// created: "2025-06-18 10:10:30", -// state: "FAILED", -// statusDescription: "ERR_ABOVE_LIMIT", -// pspStatusCode: 100501, -// pspStatusMessage: "", -// psp: "BestPay", -// pspAccount: "LUQAPAY_MANUALPAPARA_FTD", -// initPSP: "BestPay", -// initPSPAccout: "LUQAPAY_MANUALPAPARA_FTD", -// pspService: "MWALLET_PAPARA", -// transactionType: "BankDeposit", -// paymentMethod: "Deposit", -// rules: [ -// "100987998_PM_01_01", -// "100987998_RO_02_01", -// "100987998_LI_06_01", -// "100987998_FO_01_01", -// ], -// amount: 50.0, -// fee: 0.0, -// transactionAmount: 1, -// baseAmount: 43.43, -// baseFee: 0.0, -// baseTransaction: 43.43, -// pspFee: "", // value was missing -// basePspFee: "", // value was missing -// authAmount: 0.0, -// baseAuthAmount: 0.0, -// userBalance: 1, -// updated: "2025-06-18 10:10:31", -// userIp: "213.217.206.91", -// channel: "Windows", -// depositType: "Standard", -// userEmal: "dhkheni1@yopmail.com", -// userCategory: "", -// userCountry: "TUR", -// userAccount: "", -// bankName: "", -// pspUserReference: "N/A", -// pspFraudScore: "", -// fraudStatus: "", -// blocked: "", -// abuse: "", -// kycStatus: "", -// kycPSPName: "", -// kycPSPStatus: "", -// kycIdStatus: "", -// kycAddressStatus: "", -// kycAgeStatus: "", -// kycPEPAndSanction: "", -// pspReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// siteReferenceId: "Merchant: Reached deposit limit max. MaxLimit is 3.57", -// info: "Drashti 1", -// accountHolder: "Prabhudarshan", -// firstName: "Surat", -// lastName: 395010, -// street: "2007-01-03", -// city: 15125898569, -// zip: "", -// dob: "Msida", -// mobile: "L-Imsida", -// lastUpdatedBy: "MLT", -// ipCity: "", -// ipRegion: "", -// ipCountry: "", -// cardIssuerCountry: "FALSE", -// cardBand: "FALSE", -// cardCategory: "FALSE", -// cardIssuerName: "FALSE", -// inn: "FALSE", -// cardType: "FALSE", -// firstAttempt: 1049131973, -// firstSuccessful: "", // no value provided -// firstTransaction: "", // no value provided -// firstPspAcountAttempt: "", // no value provided -// firstPspAcountSuccessful: "", // no value provided -// originTransactionId: "", // no value provided -// transactionReferenceId: "", // no value provided -// }, -// ]; - -export const transactionDummyData = [ - { - id: 1, - merchandId: 100987998, - transactionID: 1049136973, - user: 1, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, - { - id: 2, - merchandId: 100987998, - transactionID: 1049131975, - user: 2, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, - { - id: 3, - merchandId: 100987998, - transactionID: 1049131975, - user: 3, - created: "2025-06-18 10:10:30", - state: "Completed", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, - { - id: 4, - merchandId: 100987998, - transactionID: 1049131975, - user: 4, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, - { - id: 5, - merchandId: 100987998, - transactionID: 1049131975, - user: 5, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, -]; - -export const depositTransactionDummyData = [ - { - id: 1, - userId: 17, - merchandId: 100987998, - transactionId: 1049131973, - depositMethod: "Card", - status: "Completed", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-18 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 2, - userId: 17, - merchandId: 100987998, - transactionId: 1049131973, - depositMethod: "Card", - status: "Completed", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-18 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 3, - userId: 17, - merchandId: 100987997, - transactionId: 1049131973, - depositMethod: "Card", - status: "Complete", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-18 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 4, - userId: 19, - merchandId: 100987997, - transactionId: 1049136973, - depositMethod: "Card", - status: "Completed", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-18 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 5, - userId: 19, - merchandId: 100987998, - transactionId: 1049131973, - depositMethod: "Card", - status: "Completed", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-18 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 6, - userId: 27, - merchandId: 100987997, - transactionId: 1049131973, - depositMethod: "Card", - status: "Pending", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-18 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 7, - userId: 175, - merchandId: 100987938, - transactionId: 1049136973, - depositMethod: "Card", - status: "Pending", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-18 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 8, - userId: 172, - merchandId: 100987938, - transactionId: 1049131973, - depositMethod: "Card", - status: "Pending", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-12 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 9, - userId: 174, - merchandId: 100987938, - transactionId: 1049131973, - depositMethod: "Bank Transfer", - status: "Inprogress", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-17 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 10, - userId: 7, - merchandId: 100987998, - transactionId: 1049131973, - depositMethod: "Bank Transfer", - status: "Inprogress", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-17 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, - { - id: 11, - userId: 1, - merchandId: 100987998, - transactionId: 1049131973, - depositMethod: "Bank Transfer", - status: "Error", - amount: 4000, - currency: "EUR", - dateTime: "2025-06-17 10:10:30", - errorInfo: "-", - fraudScore: "frad score 1234", - }, -]; diff --git a/payment-iq/app/features/Pages/transactions/types.ts b/payment-iq/app/features/Pages/transactions/types.ts index eb53823..886eff4 100644 --- a/payment-iq/app/features/Pages/transactions/types.ts +++ b/payment-iq/app/features/Pages/transactions/types.ts @@ -1,3 +1,32 @@ - export interface ITransaction { - [key: string]: string | number; // Replace with actual fields if known, e.g. id: string, amount: number, etc. - } +interface IDepositTransactionsColumns { + field: string; + headerName: string; + width: number; +} + +interface IFilteredTransactions { + id: number; + userId: number; + merchandId: number; + transactionId: number; + depositMethod: string; + status: string; + amount: number; + currency: string; + dateTime: string; + errorInfo: string; + fraudScore: string; +} + +interface IDepositTransactionsSearchLabels { + label: string; + field: string; + type: string; + options?: string[]; +} + +export interface ITransaction { + filteredTransactions: IFilteredTransactions[]; + transactionsColumns: IDepositTransactionsColumns[]; + transactionsSearchLabels: IDepositTransactionsSearchLabels[]; +} diff --git a/payment-iq/app/services/transactions.ts b/payment-iq/app/services/transactions.ts index 71827d3..08d73a4 100644 --- a/payment-iq/app/services/transactions.ts +++ b/payment-iq/app/services/transactions.ts @@ -1,13 +1,13 @@ -export async function getTransactions({ query }: { query: string }) { - const res = await fetch(`http://localhost:3000/api/transactions/deposit?${query}`, { +export async function getTransactions({ transactionType, query }: { transactionType: string, query: string }) { + const res = await fetch(`http://localhost:3000/api/transactions/${transactionType}?${query}`, { cache: "no-store", }); if (!res.ok) { - // You can parse the error message from the response if your API sends one + // Handle error from the API const errorData = await res.json().catch(() => ({ message: 'Unknown error' })); throw new Error(errorData.message || `HTTP error! status: ${res.status}`); } return res.json(); -} \ No newline at end of file +} diff --git a/payment-iq/app/utils/exportData.ts b/payment-iq/app/utils/exportData.ts index d68b8b5..17121fa 100644 --- a/payment-iq/app/utils/exportData.ts +++ b/payment-iq/app/utils/exportData.ts @@ -3,7 +3,7 @@ import { GridColDef } from "@mui/x-data-grid"; export type FileType = "csv" | "xls" | "xlsx"; import { saveAs } from "file-saver"; -import type { ITransaction } from "../features/Pages/transactions/types"; +import type { ITransaction } from "../features/Pages/Transactions/types"; export const exportData = ( From 39d08adbf359c56f864dfe6d84a4afa11f9bfccf Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Sat, 12 Jul 2025 18:27:19 +0300 Subject: [PATCH 44/55] remove enum --- payment-iq/app/dashboard/transactions/constants.ts | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 payment-iq/app/dashboard/transactions/constants.ts diff --git a/payment-iq/app/dashboard/transactions/constants.ts b/payment-iq/app/dashboard/transactions/constants.ts deleted file mode 100644 index 982d5cc..0000000 --- a/payment-iq/app/dashboard/transactions/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum TransactionType { - Deposit = "deposit", - Withdraw = "withdraw" -} \ No newline at end of file From f0ddb809d72d7cb9d0d61c66f6be2aa4b39083d5 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Mon, 14 Jul 2025 18:56:59 +0200 Subject: [PATCH 45/55] Added more to add user --- .../app/api/dashboard/admin/users/route.ts | 86 ++++--------------- payment-iq/app/components/Modal/Modal.scss | 53 ++++++++++++ payment-iq/app/components/Modal/Modal.tsx | 48 +++++++++++ .../app/features/Pages/Admin/Users/users.tsx | 16 +++- .../features/UserRoles/AddUser/AddUser.scss | 64 ++++++-------- .../features/UserRoles/AddUser/AddUser.tsx | 32 +++++++ 6 files changed, 193 insertions(+), 106 deletions(-) create mode 100644 payment-iq/app/components/Modal/Modal.scss create mode 100644 payment-iq/app/components/Modal/Modal.tsx diff --git a/payment-iq/app/api/dashboard/admin/users/route.ts b/payment-iq/app/api/dashboard/admin/users/route.ts index b64d0f0..6352b69 100644 --- a/payment-iq/app/api/dashboard/admin/users/route.ts +++ b/payment-iq/app/api/dashboard/admin/users/route.ts @@ -35,16 +35,28 @@ export const users = [ twoFactorCondition: "required", twoFactorCredentials: [], }, - { +]; + +export async function GET() { + return NextResponse.json(users); +} + +export async function POST(request: NextRequest) { + const body = await request.json(); + const { firstName, lastName, email, phone, role } = body; + + // Add the new user to the existing users array (in-memory, not persistent) + const bodytoAdd = { merchantId: 100987998, mame: "Jacob", id: "382eed15-1e21-41fa-b1f3-0c1adb3af714", username: "lsterence", - firstName: "Terence", - lastName: "User", - email: "terence@omegasys.eu", - phone: "", + firstName, + lastName, + email, + phone, jobTitle: "", + role, enabled: true, authorities: ["ROLE_IIN", "ROLE_FIRST_APPROVER", "ROLE_RULES_ADMIN"], allowedMerchantIds: [100987998], @@ -60,68 +72,8 @@ export const users = [ requiredActions: ["CONFIGURE_TOTP", "UPDATE_PASSWORD"], twoFactorCondition: "required", twoFactorCredentials: [], - }, -]; - -export async function GET() { - return NextResponse.json(users); -} - -export async function POST(request: NextRequest) { - const body = await request.json(); - - // Use the first user as a template - const templateUser = users[0]; - - // Create the new user by spreading the template and then the body (body fields override template) - const newUser = { - ...templateUser, - ...body, - id: - typeof crypto !== "undefined" && crypto.randomUUID - ? crypto.randomUUID() - : Math.random().toString(36).substring(2, 15), - created: new Date().toISOString(), }; + users.push(bodytoAdd); - users.push(newUser); - - return NextResponse.json(newUser, { status: 201 }); + return NextResponse.json(users, { status: 201 }); } - -// To call the POST function from the client side, you can use fetch like this: - -/* -Example usage in a React component or any client-side JS: - -const createUser = async (userData) => { - const res = await fetch('/api/dashboard/admin/users', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(userData), - }); - - if (!res.ok) { - // handle error - throw new Error('Failed to create user'); - } - - const newUser = await res.json(); - return newUser; -}; - -// Usage: -createUser({ - username: "newuser", - firstName: "New", - lastName: "User", - email: "newuser@example.com", - // ...other fields as needed -}).then(user => { - console.log('Created user:', user); -}).catch(err => { - console.error(err); -}); -*/ diff --git a/payment-iq/app/components/Modal/Modal.scss b/payment-iq/app/components/Modal/Modal.scss new file mode 100644 index 0000000..8dedc7f --- /dev/null +++ b/payment-iq/app/components/Modal/Modal.scss @@ -0,0 +1,53 @@ +.modal__overlay { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.5); + z-index: 1000; + display: flex; + align-items: center; + justify-content: center; +} + +.modal { + background: #fff; + border-radius: 8px; + box-shadow: 0 2px 16px rgba(0, 0, 0, 0.2); + position: relative; + min-width: 320px; + max-width: 90vw; + max-height: 90vh; + overflow: auto; + padding: 2rem 1.5rem 1.5rem 1.5rem; + display: flex; + flex-direction: column; +} + +.modal__close { + position: absolute; + top: 1rem; + right: 1rem; + background: transparent; + border: none; + font-size: 2rem; + line-height: 1; + cursor: pointer; + color: #888; + transition: color 0.2s; + + &:hover, + &:focus { + color: #333; + outline: none; + } +} + +.modal__body { + // Example element block for modal content + margin-top: 1rem; + font-size: 1rem; + color: #222; + width: 500px; +} diff --git a/payment-iq/app/components/Modal/Modal.tsx b/payment-iq/app/components/Modal/Modal.tsx new file mode 100644 index 0000000..7a5a2c6 --- /dev/null +++ b/payment-iq/app/components/Modal/Modal.tsx @@ -0,0 +1,48 @@ +import React from "react"; +import "./Modal.scss"; + +interface ModalProps { + open: boolean; + onClose: () => void; + children: React.ReactNode; + className?: string; + overlayClassName?: string; + title?: string; +} + +const Modal: React.FC = ({ + open, + onClose, + children, + title, + className = "", +}) => { + if (!open) return null; + + return ( +
+
e.stopPropagation()} + data-testid="modal-content" + > + + {title &&

{title}

} +
{children}
+
+
+ ); +}; + +export default Modal; diff --git a/payment-iq/app/features/Pages/Admin/Users/users.tsx b/payment-iq/app/features/Pages/Admin/Users/users.tsx index e829d7d..df5dc8e 100644 --- a/payment-iq/app/features/Pages/Admin/Users/users.tsx +++ b/payment-iq/app/features/Pages/Admin/Users/users.tsx @@ -1,16 +1,22 @@ "use client"; -import React from "react"; +import React, { useState } from "react"; import { Card, CardContent, Typography, Stack } from "@mui/material"; import { IUser } from "./interfaces"; import UserRoleCard from "@/app/features/UserRoles/UserRoleCard"; +import UserTopBar from "@/app/features/UserRoles/AddUser/AddUser"; +import EditUser from "@/app/features/UserRoles/EditUser/EditUser"; +import Modal from "@/app/components/Modal/Modal"; interface UsersProps { users: IUser[]; } const Users: React.FC = ({ users }) => { + const [showAddUser, setShowAddUser] = useState(false); + return (
+ setShowAddUser(true)} /> {users.map((user: IUser) => ( @@ -35,6 +41,14 @@ const Users: React.FC = ({ users }) => { ))} + + setShowAddUser(false)} + title="Add User" + > + +
); }; diff --git a/payment-iq/app/features/UserRoles/AddUser/AddUser.scss b/payment-iq/app/features/UserRoles/AddUser/AddUser.scss index 7e2e617..d6fc563 100644 --- a/payment-iq/app/features/UserRoles/AddUser/AddUser.scss +++ b/payment-iq/app/features/UserRoles/AddUser/AddUser.scss @@ -1,46 +1,34 @@ -.edit-user { - margin-top: 30px; +.add-user { + position: sticky; + top: 40px; + width: 100%; + background: #fff; + z-index: 10; display: flex; - flex-wrap: wrap; - gap: 16px; + justify-content: flex-end; + align-items: center; + gap: 1rem; + padding: 1rem 0.5rem; + border-bottom: 1px solid #eee; - input { - flex: 1 1 20%; - min-width: 150px; - box-sizing: border-box; - padding: 8px; - font-size: 1rem; + &__button { + padding: 0.5rem 1rem; + border: none; border-radius: 4px; - border: 1px solid #ccc; - outline: none; - transition: border-color 0.3s ease; - - &:focus { - border-color: #0070f3; - } + cursor: pointer; + font-size: 1rem; + display: flex; + align-items: center; + gap: 0.5rem; } - &__button-container { - flex-basis: 100%; - width: 100%; - button { - flex-basis: 100%; - margin-top: 16px; - padding: 10px 0; - font-size: 1rem; - border-radius: 4px; - width: 100px; - cursor: pointer; - } + &__button--primary { + background: #1976d2; + color: #fff; + } - button:first-child { - color: var(--button-primary); - border-color: var(--button-primary); - } - button:last-child { - color: var(--button-secondary); - border-color: var(--button-secondary); - margin-left: 8; - } + &__button--secondary { + background: #e0e0e0; + color: #333; } } diff --git a/payment-iq/app/features/UserRoles/AddUser/AddUser.tsx b/payment-iq/app/features/UserRoles/AddUser/AddUser.tsx index e69de29..9f79eb7 100644 --- a/payment-iq/app/features/UserRoles/AddUser/AddUser.tsx +++ b/payment-iq/app/features/UserRoles/AddUser/AddUser.tsx @@ -0,0 +1,32 @@ +import { Add } from "@mui/icons-material"; +import React from "react"; +import "./AddUser.scss"; + +const AddUser: React.FC<{ + onAddUser?: () => void; + onExport?: () => void; +}> = ({ onAddUser, onExport }) => { + return ( +
+ + +
+ ); +}; + +export default AddUser; From 830606e1a7446b466be83f2f1260f176510c3eef Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Mon, 14 Jul 2025 19:45:17 +0200 Subject: [PATCH 46/55] merging --- payment-iq/app/features/Pages/Admin/Users/users.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/payment-iq/app/features/Pages/Admin/Users/users.tsx b/payment-iq/app/features/Pages/Admin/Users/users.tsx index df5dc8e..8a9d423 100644 --- a/payment-iq/app/features/Pages/Admin/Users/users.tsx +++ b/payment-iq/app/features/Pages/Admin/Users/users.tsx @@ -2,10 +2,10 @@ import React, { useState } from "react"; import { Card, CardContent, Typography, Stack } from "@mui/material"; import { IUser } from "./interfaces"; -import UserRoleCard from "@/app/features/UserRoles/UserRoleCard"; import UserTopBar from "@/app/features/UserRoles/AddUser/AddUser"; import EditUser from "@/app/features/UserRoles/EditUser/EditUser"; import Modal from "@/app/components/Modal/Modal"; +import UserRoleCard from "@/app/features/UserRoles/userRoleCard"; interface UsersProps { users: IUser[]; From 845913e94bedf16027a5b4e079711a4aed0585eb Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Thu, 17 Jul 2025 20:31:45 +0300 Subject: [PATCH 47/55] build versiion --- .../app/api/dashboard/admin/users/route.ts | 14 +- payment-iq/app/api/transactions/route.ts | 25 --- payment-iq/app/components/test/test1.tsx | 103 ---------- payment-iq/app/components/test/test2.tsx | 186 ------------------ payment-iq/app/dashboard/admin/page.tsx | 3 - payment-iq/app/dashboard/admin/users/page.tsx | 2 +- payment-iq/app/dashboard/approve/page.tsx | 2 +- payment-iq/app/dashboard/page.tsx | 2 +- .../dashboard/transactions/deposits/page.tsx | 3 +- .../dashboard/transactions/history/page.tsx | 2 +- .../transactions/withdrawals/page.tsx | 4 +- .../features/Pages/Admin/Users/interfaces.ts | 1 + .../DashboardHomePage/DashboardHomePage.tsx | 2 +- .../features/UserRoles/EditUser/EditUser.tsx | 1 + .../app/features/UserRoles/userRoleCard.tsx | 2 - .../app/features/dashboard/header/Header.tsx | 22 +-- payment-iq/app/layout.tsx | 6 - payment-iq/app/page.tsx | 2 +- payment-iq/app/providers/msw-provider.tsx | 14 -- payment-iq/app/providers/providers.tsx | 10 - payment-iq/app/test/page.tsx | 50 ----- payment-iq/app/test1/page.tsx | 29 --- payment-iq/app/testWithParams/page.tsx | 97 --------- payment-iq/app/utils/exportData.ts | 4 +- payment-iq/mock/handlers.ts | 2 + 25 files changed, 35 insertions(+), 553 deletions(-) delete mode 100644 payment-iq/app/api/transactions/route.ts delete mode 100644 payment-iq/app/components/test/test1.tsx delete mode 100644 payment-iq/app/components/test/test2.tsx delete mode 100644 payment-iq/app/providers/msw-provider.tsx delete mode 100644 payment-iq/app/providers/providers.tsx delete mode 100644 payment-iq/app/test/page.tsx delete mode 100644 payment-iq/app/test1/page.tsx delete mode 100644 payment-iq/app/testWithParams/page.tsx diff --git a/payment-iq/app/api/dashboard/admin/users/route.ts b/payment-iq/app/api/dashboard/admin/users/route.ts index 6352b69..4f57d83 100644 --- a/payment-iq/app/api/dashboard/admin/users/route.ts +++ b/payment-iq/app/api/dashboard/admin/users/route.ts @@ -1,11 +1,11 @@ -// app/api/user/route.ts +// app/api/dashboard/admin/users/route.ts import { NextRequest, NextResponse } from "next/server"; -export const users = [ +const users = [ { merchantId: 100987998, id: "bc6a8a55-13bc-4538-8255-cd0cec3bb4e9", - mame: "Jacob", + name: "Jacob", username: "lspaddy", firstName: "Paddy", lastName: "Man", @@ -46,9 +46,9 @@ export async function POST(request: NextRequest) { const { firstName, lastName, email, phone, role } = body; // Add the new user to the existing users array (in-memory, not persistent) - const bodytoAdd = { + const newUser = { merchantId: 100987998, - mame: "Jacob", + name: "Jacob", id: "382eed15-1e21-41fa-b1f3-0c1adb3af714", username: "lsterence", firstName, @@ -73,7 +73,7 @@ export async function POST(request: NextRequest) { twoFactorCondition: "required", twoFactorCredentials: [], }; - users.push(bodytoAdd); + users.push(newUser); return NextResponse.json(users, { status: 201 }); -} +} \ No newline at end of file diff --git a/payment-iq/app/api/transactions/route.ts b/payment-iq/app/api/transactions/route.ts deleted file mode 100644 index 03bdd3d..0000000 --- a/payment-iq/app/api/transactions/route.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { transactionDummyData } from "@/app/components/test/test2"; -import { NextRequest, NextResponse } from "next/server"; - -export async function GET(request: NextRequest) { - const { searchParams } = new URL(request.url); - - const state = searchParams.get("state"); - const user = searchParams.get("user"); - - let filteredTransactions = [...transactionDummyData]; - - if (user) { - filteredTransactions = filteredTransactions.filter( - (tx) => tx.user.toString() === user - ); - } - - if (state) { - filteredTransactions = filteredTransactions.filter( - (tx) => tx.state.toLowerCase() === state.toLowerCase() - ); - } - - return NextResponse.json(filteredTransactions); -} diff --git a/payment-iq/app/components/test/test1.tsx b/payment-iq/app/components/test/test1.tsx deleted file mode 100644 index 5a9accf..0000000 --- a/payment-iq/app/components/test/test1.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import * as React from "react"; -import Box from "@mui/material/Box"; -import Drawer from "@mui/material/Drawer"; -import Button from "@mui/material/Button"; -import List from "@mui/material/List"; -import Divider from "@mui/material/Divider"; -import ListItem from "@mui/material/ListItem"; -import ListItemButton from "@mui/material/ListItemButton"; -import ListItemIcon from "@mui/material/ListItemIcon"; -import ListItemText from "@mui/material/ListItemText"; -import InboxIcon from "@mui/icons-material/MoveToInbox"; -import MailIcon from "@mui/icons-material/Mail"; -import SearchIcon from "@mui/icons-material/Search"; - -export default function RightTemporaryDrawer() { - const [open, setOpen] = React.useState(false); - - const toggleDrawer = - (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { - if ( - event.type === "keydown" && - ((event as React.KeyboardEvent).key === "Tab" || - (event as React.KeyboardEvent).key === "Shift") - ) { - return; - } - - setOpen(open); - }; - - const list = () => ( - - - {["Inbox", "Starred", "Send email", "Drafts"].map((text, index) => ( - - - - {index % 2 === 0 ? : } - - - - - ))} - - - - {["All mail", "Trash", "Spam"].map((text, index) => ( - - - - {index % 2 === 0 ? : } - - - - - ))} - - - ); - - return ( -
- - {/* */} - - {list()} - -
- ); -} diff --git a/payment-iq/app/components/test/test2.tsx b/payment-iq/app/components/test/test2.tsx deleted file mode 100644 index 3db3076..0000000 --- a/payment-iq/app/components/test/test2.tsx +++ /dev/null @@ -1,186 +0,0 @@ -// app/transactions/page.tsx -"use client"; - -import { useState } from "react"; - -// mocks/transactionData.ts -export const transactionDummyData = [ - { - id: 1, - merchandId: 100987998, - transactionID: 1049131973, - user: 1, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, - { - id: 2, - merchandId: 100987998, - transactionID: 1049131973, - user: 2, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, - { - id: 3, - merchandId: 100987998, - transactionID: 1049131973, - user: 3, - created: "2025-06-18 10:10:30", - state: "FAILED", - statusDescription: "ERR_ABOVE_LIMIT", - pspStatusCode: 100501, - }, -]; - -export default function TransactionsPage() { - const [userId, setUserId] = useState(""); - const [state, setState] = useState(""); - const [statusCode, setStatusCode] = useState(""); - const [transactions, setTransactions] = useState([]); - const [loading, setLoading] = useState(false); - - const fetchTransactions = async () => { - setLoading(true); - try { - const url = new URL("https://api.example.com/transactions"); - if (userId) url.searchParams.append("userId", userId); - if (state) url.searchParams.append("state", state); - if (statusCode) url.searchParams.append("statusCode", statusCode); - - const response = await fetch(url.toString()); - const data = await response.json(); - setTransactions(data.transactions); - } catch (error) { - console.error("Error fetching transactions:", error); - } finally { - setLoading(false); - } - }; - - return ( -
-

Transaction Search

- -
-
- - setUserId(e.target.value)} - className="border p-2 rounded text-sm" - placeholder="Filter by user ID" - /> -
- -
- - setState(e.target.value)} - className="border p-2 rounded text-sm" - placeholder="Filter by state" - /> -
- -
- - setStatusCode(e.target.value)} - className="border p-2 rounded text-sm" - placeholder="Filter by status code" - /> -
- -
- -
-
- - {transactions.length > 0 ? ( -
- - - - - - - - - - - - {transactions.map((tx) => ( - - - - - - - - ))} - -
IDUserStateStatus CodeCreated
{tx.id}{tx.user}{tx.state}{tx.pspStatusCode}{tx.created}
-
- ) : ( -
- {loading ? "Loading transactions..." : "No transactions found"} -
- )} -
- ); -} - -// mocks/handlers.ts -import { http, HttpResponse } from "msw"; - -export const handlers = [ - http.get("https://api.example.com/transactions", ({ request }) => { - const url = new URL(request.url); - - // Get query parameters - const userId = url.searchParams.get("userId"); - const state = url.searchParams.get("state"); - const statusCode = url.searchParams.get("statusCode"); - - // Filter transactions based on query parameters - let filteredTransactions = [...transactionDummyData]; - - if (userId) { - filteredTransactions = filteredTransactions.filter( - (tx) => tx.user.toString() === userId - ); - } - - if (state) { - filteredTransactions = filteredTransactions.filter( - (tx) => tx.state.toLowerCase() === state.toLowerCase() - ); - } - - if (statusCode) { - filteredTransactions = filteredTransactions.filter( - (tx) => tx.pspStatusCode.toString() === statusCode - ); - } - - return HttpResponse.json({ - transactions: filteredTransactions, - count: filteredTransactions.length, - }); - }), -]; diff --git a/payment-iq/app/dashboard/admin/page.tsx b/payment-iq/app/dashboard/admin/page.tsx index e91d47b..4e7a55d 100644 --- a/payment-iq/app/dashboard/admin/page.tsx +++ b/payment-iq/app/dashboard/admin/page.tsx @@ -1,8 +1,5 @@ -// This ensures this component is rendered only on the client side "use client"; -import { Approve } from "@/app/features/Pages/Approve/Approve"; - export default function BackOfficeUsersPage() { return (
diff --git a/payment-iq/app/dashboard/admin/users/page.tsx b/payment-iq/app/dashboard/admin/users/page.tsx index a3a3654..24a6ad9 100644 --- a/payment-iq/app/dashboard/admin/users/page.tsx +++ b/payment-iq/app/dashboard/admin/users/page.tsx @@ -1,4 +1,4 @@ -import Users from "@/app/features/Pages/Admin/Users/users"; +import Users from "@/app/features/pages/Admin/Users/users"; export default async function BackOfficeUsersPage() { const baseUrl = diff --git a/payment-iq/app/dashboard/approve/page.tsx b/payment-iq/app/dashboard/approve/page.tsx index dab8077..7ed8b86 100644 --- a/payment-iq/app/dashboard/approve/page.tsx +++ b/payment-iq/app/dashboard/approve/page.tsx @@ -1,7 +1,7 @@ // This ensures this component is rendered only on the client side "use client"; -import { Approve } from "@/app/features/Pages/Approve/Approve"; +import { Approve } from "@/app/features/pages/Approve/Approve"; export default function ApprovePage() { return ( diff --git a/payment-iq/app/dashboard/page.tsx b/payment-iq/app/dashboard/page.tsx index 707967c..aad0b66 100644 --- a/payment-iq/app/dashboard/page.tsx +++ b/payment-iq/app/dashboard/page.tsx @@ -1,6 +1,6 @@ "use client"; -import { DashboardHomePage } from "../features/Pages/DashboardHomePage/DashboardHomePage"; +import { DashboardHomePage } from "../features/pages/DashboardHomePage/DashboardHomePage"; const DashboardPage = () => { return ; diff --git a/payment-iq/app/dashboard/transactions/deposits/page.tsx b/payment-iq/app/dashboard/transactions/deposits/page.tsx index 922a508..3b1a49f 100644 --- a/payment-iq/app/dashboard/transactions/deposits/page.tsx +++ b/payment-iq/app/dashboard/transactions/deposits/page.tsx @@ -1,4 +1,5 @@ -import TransactionsTable from "@/app/features/Pages/Transactions/TransactionsTable"; + +import TransactionsTable from "@/app/features/pages/transactions/TransactionsTable"; import { getTransactions } from "@/app/services/transactions"; export default async function DepositTransactionPage({ diff --git a/payment-iq/app/dashboard/transactions/history/page.tsx b/payment-iq/app/dashboard/transactions/history/page.tsx index 922a508..2db697d 100644 --- a/payment-iq/app/dashboard/transactions/history/page.tsx +++ b/payment-iq/app/dashboard/transactions/history/page.tsx @@ -1,4 +1,4 @@ -import TransactionsTable from "@/app/features/Pages/Transactions/TransactionsTable"; +import TransactionsTable from "@/app/features/pages/transactions/TransactionsTable"; import { getTransactions } from "@/app/services/transactions"; export default async function DepositTransactionPage({ diff --git a/payment-iq/app/dashboard/transactions/withdrawals/page.tsx b/payment-iq/app/dashboard/transactions/withdrawals/page.tsx index 2800942..20afed4 100644 --- a/payment-iq/app/dashboard/transactions/withdrawals/page.tsx +++ b/payment-iq/app/dashboard/transactions/withdrawals/page.tsx @@ -1,7 +1,7 @@ -import TransactionsTable from "@/app/features/Pages/Transactions/TransactionsTable"; +import TransactionsTable from "@/app/features/pages/transactions/TransactionsTable"; import { getTransactions } from "@/app/services/transactions"; -export default async function DepositTransactionPage({ +export default async function WithdrawalTransactionPage({ searchParams, }: { searchParams: Promise>; diff --git a/payment-iq/app/features/Pages/Admin/Users/interfaces.ts b/payment-iq/app/features/Pages/Admin/Users/interfaces.ts index c9ac346..f99b43e 100644 --- a/payment-iq/app/features/Pages/Admin/Users/interfaces.ts +++ b/payment-iq/app/features/Pages/Admin/Users/interfaces.ts @@ -22,5 +22,6 @@ export interface IUser { releaseNotes: boolean; requiredActions: string[]; twoFactorCondition: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any twoFactorCredentials: any[]; // Assuming this is an array that could contain any type of data } diff --git a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx index d36e1ad..b40cb60 100644 --- a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx +++ b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx @@ -6,7 +6,7 @@ import { FetchReport } from "../../FetchReports/FetchReports"; import { Documentation } from "../../Documentation/Documentation"; import { AccountIQ } from "../../AccountIQ/AccountIQ"; import { WhatsNew } from "../../WhatsNew/WhatsNew"; -import { TransactionsOverView } from "../../TransactionsOverview/TransactionsOverview"; +import { TransactionsOverView } from "../../TransactionsOverView/TransactionsOverview"; export const DashboardHomePage = () => { return ( diff --git a/payment-iq/app/features/UserRoles/EditUser/EditUser.tsx b/payment-iq/app/features/UserRoles/EditUser/EditUser.tsx index 9f384ff..b7bdbbf 100644 --- a/payment-iq/app/features/UserRoles/EditUser/EditUser.tsx +++ b/payment-iq/app/features/UserRoles/EditUser/EditUser.tsx @@ -47,6 +47,7 @@ const EditUser = () => { try { await createRole(form); router.refresh(); // <- refreshes the page (SSR re-runs) + // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (err: any) { console.log(err.message || "Error creating role"); // setError(err.message || "Error creating role"); diff --git a/payment-iq/app/features/UserRoles/userRoleCard.tsx b/payment-iq/app/features/UserRoles/userRoleCard.tsx index 32b3e93..4d544ba 100644 --- a/payment-iq/app/features/UserRoles/userRoleCard.tsx +++ b/payment-iq/app/features/UserRoles/userRoleCard.tsx @@ -38,8 +38,6 @@ export default function UserRoleCard({ name, email, isAdmin, - lastLogin, - // merchants, roles, extraRolesCount, }: Props) { diff --git a/payment-iq/app/features/dashboard/header/Header.tsx b/payment-iq/app/features/dashboard/header/Header.tsx index 2da283a..beccad7 100644 --- a/payment-iq/app/features/dashboard/header/Header.tsx +++ b/payment-iq/app/features/dashboard/header/Header.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React from "react"; import { AppBar, Toolbar, IconButton } from "@mui/material"; import MenuIcon from "@mui/icons-material/Menu"; import Dropdown from "./dropDown/DropDown"; @@ -6,19 +6,19 @@ import AccountMenu from "./accountMenu/AccountMenu"; import "./Header.scss"; const Header = () => { - const [anchorEl, setAnchorEl] = useState(null); + // const [anchorEl, setAnchorEl] = useState(null); - // Handle menu open - const handleMenuClick = (event: React.MouseEvent) => { - setAnchorEl(event.currentTarget); - }; + // // Handle menu open + // const handleMenuClick = (event: React.MouseEvent) => { + // setAnchorEl(event.currentTarget); + // }; - // Handle menu close - const handleMenuClose = () => { - setAnchorEl(null); - }; + // // Handle menu close + // const handleMenuClose = () => { + // setAnchorEl(null); + // }; - const handleChange = (e: any) => {}; + const handleChange = () => {}; return ( - - {children} - - ); diff --git a/payment-iq/app/page.tsx b/payment-iq/app/page.tsx index bb91a4b..cb6ddb3 100644 --- a/payment-iq/app/page.tsx +++ b/payment-iq/app/page.tsx @@ -1,6 +1,6 @@ "use client"; -import { DashboardHomePage } from "./features/Pages/DashboardHomePage/DashboardHomePage"; +import { DashboardHomePage } from "./features/pages/DashboardHomePage/DashboardHomePage"; const DashboardPage = () => { return ; diff --git a/payment-iq/app/providers/msw-provider.tsx b/payment-iq/app/providers/msw-provider.tsx deleted file mode 100644 index d186b21..0000000 --- a/payment-iq/app/providers/msw-provider.tsx +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; -import { useEffect } from "react"; - -export function MSWProvider({ children }: { children: React.ReactNode }) { - useEffect(() => { - if (process.env.NEXT_PUBLIC_API_MOCKING === "enabled") { - import("../../mock/browser").then(({ worker }) => { - // worker.start(); - }); - } - }, []); - - return <>{children}; -} diff --git a/payment-iq/app/providers/providers.tsx b/payment-iq/app/providers/providers.tsx deleted file mode 100644 index 3d205c8..0000000 --- a/payment-iq/app/providers/providers.tsx +++ /dev/null @@ -1,10 +0,0 @@ -'use client'; - -import { ReactNode } from 'react'; -import { Provider } from 'react-redux'; -import { store } from '../redux/store'; - -export function Providers({ children }: { children: ReactNode }) { - return {children}; -} - diff --git a/payment-iq/app/test/page.tsx b/payment-iq/app/test/page.tsx deleted file mode 100644 index 966a371..0000000 --- a/payment-iq/app/test/page.tsx +++ /dev/null @@ -1,50 +0,0 @@ -// app/test/page.tsx -'use client'; - -import { useEffect, useState } from 'react'; - -export default function TestPage() { - const [user, setUser] = useState(null); - const [loginStatus, setLoginStatus] = useState(''); - - useEffect(() => { - // Test GET request - fetch('https://api.example.com/user') - .then(res => res.json()) - .then(data => setUser(data)); - }, []); - - const handleLogin = async () => { - // Test POST request - const response = await fetch('https://api.example.com/login', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - username: 'admin', - password: 'password123' - }) - }); - - const result = await response.json(); - setLoginStatus(response.ok ? 'Login successful' : `Error: ${result.error}`); - }; - - return ( -
-

MSW Test Page

- -
-

User Data (GET)

-
{JSON.stringify(user, null, 2)}
-
- -
-

Login Test (POST)

- -

{loginStatus}

-
-
- ); -} diff --git a/payment-iq/app/test1/page.tsx b/payment-iq/app/test1/page.tsx deleted file mode 100644 index 67a44e9..0000000 --- a/payment-iq/app/test1/page.tsx +++ /dev/null @@ -1,29 +0,0 @@ -'use client' -import React, { useState } from 'react'; -import SearchFilters from '../components/searchFilter/SearchFilters'; - -export default function Home() { - const [filters, setFilters] = useState({ - user: '42', - state: 'FAILED', - startDate: '2025-06-28 23:25', - }); - - const handleDeleteFilter = (key) => { - setFilters((prev) => ({ ...prev, [key]: null })); - }; - - const handleClearAll = () => { - setFilters({ user: null, state: null, startDate: null }); - }; - - return ( -
- -
- ); -} diff --git a/payment-iq/app/testWithParams/page.tsx b/payment-iq/app/testWithParams/page.tsx deleted file mode 100644 index 71f1def..0000000 --- a/payment-iq/app/testWithParams/page.tsx +++ /dev/null @@ -1,97 +0,0 @@ -// app/products/page.tsx -'use client'; - -import { useState } from 'react'; - -export default function ProductsPage() { - const [category, setCategory] = useState(''); - const [sort, setSort] = useState('price'); - const [limit, setLimit] = useState('10'); - const [products, setProducts] = useState([]); - const [loading, setLoading] = useState(false); - - const fetchProducts = async () => { - setLoading(true); - try { - // Construct URL with query parameters - const url = new URL('https://api.example.com/products'); - if (category) url.searchParams.append('category', category); - if (sort) url.searchParams.append('sort', sort); - if (limit) url.searchParams.append('limit', limit); - - const response = await fetch(url.toString()); - const data = await response.json(); - setProducts(data.products); - } catch (error) { - console.error('Error fetching products:', error); - } finally { - setLoading(false); - } - }; - - return ( -
-

Product Search

- -
-
- - setCategory(e.target.value)} - className="border p-2 rounded" - placeholder="electronics, clothing, etc." - /> -
- -
- - -
- -
- - setLimit(e.target.value)} - className="border p-2 rounded" - min="1" - max="100" - /> -
- - -
- - {products.length > 0 && ( -
-

Results

-
- {products.map((product) => ( -
-

{product.name}

-

Category: {product.category}

-

Price: ${product.price}

-
- ))} -
-
- )} -
- ); -} diff --git a/payment-iq/app/utils/exportData.ts b/payment-iq/app/utils/exportData.ts index 17121fa..1f2b3f0 100644 --- a/payment-iq/app/utils/exportData.ts +++ b/payment-iq/app/utils/exportData.ts @@ -1,9 +1,11 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +// @ts-nocheck import * as XLSX from "xlsx"; import { GridColDef } from "@mui/x-data-grid"; export type FileType = "csv" | "xls" | "xlsx"; import { saveAs } from "file-saver"; -import type { ITransaction } from "../features/Pages/Transactions/types"; +import type { ITransaction } from "../features/pages/transactions/types"; export const exportData = ( diff --git a/payment-iq/mock/handlers.ts b/payment-iq/mock/handlers.ts index b67318f..f949d9b 100644 --- a/payment-iq/mock/handlers.ts +++ b/payment-iq/mock/handlers.ts @@ -80,6 +80,8 @@ export const handlers = [ const statusCode = url.searchParams.get("statusCode"); // Filter transactions based on query parameters + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore let filteredTransactions = [...transactionDummyData]; if (userId) { From 9e72c2b0a55bb3c558e4224ec7c9cc2fc3489002 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Thu, 17 Jul 2025 23:12:55 +0200 Subject: [PATCH 48/55] solving filnames issue --- payment-iq/app/dashboard/admin/users/page.tsx | 2 +- payment-iq/app/dashboard/approve/page.tsx | 1 + .../app/features/Pages/DashboardHomePage/DashboardHomePage.tsx | 2 +- .../app/features/Pages/transactions/TransactionsTable.tsx | 1 - payment-iq/app/features/Pages/transactions/types.ts | 3 ++- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/payment-iq/app/dashboard/admin/users/page.tsx b/payment-iq/app/dashboard/admin/users/page.tsx index 24a6ad9..de75e47 100644 --- a/payment-iq/app/dashboard/admin/users/page.tsx +++ b/payment-iq/app/dashboard/admin/users/page.tsx @@ -5,7 +5,7 @@ export default async function BackOfficeUsersPage() { process.env.NEXT_PUBLIC_BASE_URL || process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000"; - const res = await fetch(`${baseUrl}/api/dashboard/admin/users`, { + const res = await fetch(`${baseUrl}ss/api/dashboard/admin/users`, { cache: "no-store", // 👈 disables caching for SSR freshness }); const users = await res.json(); diff --git a/payment-iq/app/dashboard/approve/page.tsx b/payment-iq/app/dashboard/approve/page.tsx index 7ed8b86..07d1a0c 100644 --- a/payment-iq/app/dashboard/approve/page.tsx +++ b/payment-iq/app/dashboard/approve/page.tsx @@ -3,6 +3,7 @@ import { Approve } from "@/app/features/pages/Approve/Approve"; + export default function ApprovePage() { return (
diff --git a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx index b40cb60..d36e1ad 100644 --- a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx +++ b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx @@ -6,7 +6,7 @@ import { FetchReport } from "../../FetchReports/FetchReports"; import { Documentation } from "../../Documentation/Documentation"; import { AccountIQ } from "../../AccountIQ/AccountIQ"; import { WhatsNew } from "../../WhatsNew/WhatsNew"; -import { TransactionsOverView } from "../../TransactionsOverView/TransactionsOverview"; +import { TransactionsOverView } from "../../TransactionsOverview/TransactionsOverview"; export const DashboardHomePage = () => { return ( diff --git a/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx b/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx index 95bbc8e..e64b4cd 100644 --- a/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx +++ b/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx @@ -23,7 +23,6 @@ import SearchFilters from "@/app/components/searchFilter/SearchFilters"; import { exportData } from "@/app/utils/exportData"; import { ITransaction } from "./types"; - const paginationModel = { page: 0, pageSize: 50 }; interface IDepositProps { diff --git a/payment-iq/app/features/Pages/transactions/types.ts b/payment-iq/app/features/Pages/transactions/types.ts index 886eff4..7ef6a1f 100644 --- a/payment-iq/app/features/Pages/transactions/types.ts +++ b/payment-iq/app/features/Pages/transactions/types.ts @@ -25,8 +25,9 @@ interface IDepositTransactionsSearchLabels { options?: string[]; } + export interface ITransaction { filteredTransactions: IFilteredTransactions[]; transactionsColumns: IDepositTransactionsColumns[]; transactionsSearchLabels: IDepositTransactionsSearchLabels[]; -} +} \ No newline at end of file From 5dec15f6701541c36b570e663024d450dc96f9c8 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Fri, 18 Jul 2025 17:37:06 +0300 Subject: [PATCH 49/55] add actions on transactions table --- .../app/api/transactions/deposit/mockData.ts | 127 +++++++++++++----- .../Pages/transactions/TransactionsTable.tsx | 107 ++++++++++++--- .../app/features/Pages/transactions/types.ts | 9 +- 3 files changed, 189 insertions(+), 54 deletions(-) diff --git a/payment-iq/app/api/transactions/deposit/mockData.ts b/payment-iq/app/api/transactions/deposit/mockData.ts index 18c0faf..98a37ba 100644 --- a/payment-iq/app/api/transactions/deposit/mockData.ts +++ b/payment-iq/app/api/transactions/deposit/mockData.ts @@ -1,6 +1,5 @@ import { GridColDef } from "@mui/x-data-grid"; - export const depositTransactionDummyData = [ { id: 1, @@ -9,6 +8,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Completed", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -22,6 +27,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Completed", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -34,7 +45,13 @@ export const depositTransactionDummyData = [ merchandId: 100987997, transactionId: 1049131973, depositMethod: "Card", - status: "Complete", + status: "Completed", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -48,6 +65,12 @@ export const depositTransactionDummyData = [ transactionId: 1049136973, depositMethod: "Card", status: "Completed", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -61,6 +84,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Completed", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -74,6 +103,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Pending", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -87,6 +122,12 @@ export const depositTransactionDummyData = [ transactionId: 1049136973, depositMethod: "Card", status: "Pending", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -100,6 +141,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Pending", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-12 10:10:30", @@ -113,6 +160,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Bank Transfer", status: "Inprogress", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-17 10:10:30", @@ -126,6 +179,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Bank Transfer", status: "Inprogress", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-17 10:10:30", @@ -139,6 +198,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Bank Transfer", status: "Error", + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-17 10:10:30", @@ -153,39 +218,39 @@ export const depositTransactionsColumns: GridColDef[] = [ { field: "transactionId", headerName: "Transaction ID", width: 130 }, { field: "depositMethod", headerName: "Deposit Method", width: 130 }, { field: "status", headerName: "Status", width: 130 }, + { field: "actions", headerName: "Actions", width: 150 }, { field: "amount", headerName: "Amount", width: 130 }, { field: "currency", headerName: "Currency", width: 130 }, { field: "dateTime", headerName: "Date / Time", width: 130 }, { field: "errorInfo", headerName: "Error Info", width: 130 }, { field: "fraudScore", headerName: "Fraud Score", width: 130 }, -] - +]; export const depositTransactionsSearchLabels = [ - { label: "User", field: "userId", type: "text" }, - { label: "Transaction ID", field: "transactionId", type: "text" }, - { - label: "Transaction Reference ID", - field: "transactionReferenceId", - type: "text", - }, - { - label: "Currency", - field: "currency", - type: "select", - options: ["USD", "EUR", "GBP"] - }, - { - label: "Status", - field: "status", - type: "select", - options: ["Pending","Inprogress", "Completed", "Failed"] - }, - { - label: "Payment Method", - field: "depositMethod", - type: "select", - options: ["Card", "Bank Transfer"] - }, - { label: "Date / Time", field: "dateTime", type: "date" }, -] \ No newline at end of file + { label: "User", field: "userId", type: "text" }, + { label: "Transaction ID", field: "transactionId", type: "text" }, + { + label: "Transaction Reference ID", + field: "transactionReferenceId", + type: "text", + }, + { + label: "Currency", + field: "currency", + type: "select", + options: ["USD", "EUR", "GBP"], + }, + { + label: "Status", + field: "status", + type: "select", + options: ["Pending", "Inprogress", "Completed", "Failed"], + }, + { + label: "Payment Method", + field: "depositMethod", + type: "select", + options: ["Card", "Bank Transfer"], + }, + { label: "Date / Time", field: "dateTime", type: "date" }, +]; diff --git a/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx b/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx index e64b4cd..2c6d9a0 100644 --- a/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx +++ b/payment-iq/app/features/Pages/transactions/TransactionsTable.tsx @@ -17,23 +17,24 @@ import { TextField, } from "@mui/material"; import FileUploadIcon from "@mui/icons-material/FileUpload"; -import { DataGrid } from "@mui/x-data-grid"; +import { DataGrid, GridColDef, GridRenderCellParams } from "@mui/x-data-grid"; import AdvancedSearch from "../../AdvancedSearch/AdvancedSearch"; import SearchFilters from "@/app/components/searchFilter/SearchFilters"; import { exportData } from "@/app/utils/exportData"; import { ITransaction } from "./types"; -const paginationModel = { page: 0, pageSize: 50 }; - interface IDepositProps { - res: ITransaction + res: ITransaction; } const TransactionsTable = ({ res }: IDepositProps) => { - const {filteredTransactions, transactionsColumns, transactionsSearchLabels} = res; - const router = useRouter() - const searchParams = useSearchParams() - + const { + filteredTransactions, + transactionsColumns, + transactionsSearchLabels, + } = res; + const router = useRouter(); + const searchParams = useSearchParams(); const [open, setOpen] = useState(false); const [fileType, setFileType] = useState<"csv" | "xls" | "xlsx">("csv"); @@ -41,14 +42,58 @@ const TransactionsTable = ({ res }: IDepositProps) => { const filters = Object.fromEntries(searchParams.entries()); - const handleClickField = (field: string, value: string) => { - const params = new URLSearchParams(searchParams.toString()) - params.set(field, value) - router.push(`?${params.toString()}`) - router.refresh() + const params = new URLSearchParams(searchParams.toString()); + params.set(field, value); + router.push(`?${params.toString()}`); + router.refresh(); }; + const handleStatusChange = (id: number, newStatus: string) => { + setRows( + rows.map((row) => (row.id === id ? { ...row, status: newStatus } : row)), + ); + }; + + const [rows, setRows] = useState(filteredTransactions); + const getColumnsWithDropdown = (columns: GridColDef[]) => { + return columns.map((col) => { + if (col.field === "actions") { + return { + ...col, + renderCell: (params: GridRenderCellParams) => { + const row = filteredTransactions.find((r) => r.id === params.id); + const options = row?.options; + + if (!options) return params.value; + + return ( + + ); + }, + }; + } + return col; + }); + }; return ( @@ -78,13 +123,22 @@ const TransactionsTable = ({ res }: IDepositProps) => { { - handleClickField(params.field, params.value as string) + if (params.field !== "actions") { + handleClickField(params.field, params.value as string); + } }} /> @@ -117,13 +171,24 @@ const TransactionsTable = ({ res }: IDepositProps) => { - ); -} +}; -export default TransactionsTable +export default TransactionsTable; diff --git a/payment-iq/app/features/Pages/transactions/types.ts b/payment-iq/app/features/Pages/transactions/types.ts index 7ef6a1f..128c28e 100644 --- a/payment-iq/app/features/Pages/transactions/types.ts +++ b/payment-iq/app/features/Pages/transactions/types.ts @@ -4,6 +4,11 @@ interface IDepositTransactionsColumns { width: number; } +interface IOptions { + value: string; + label: string; +} + interface IFilteredTransactions { id: number; userId: number; @@ -11,6 +16,7 @@ interface IFilteredTransactions { transactionId: number; depositMethod: string; status: string; + options: IOptions[]; amount: number; currency: string; dateTime: string; @@ -25,9 +31,8 @@ interface IDepositTransactionsSearchLabels { options?: string[]; } - export interface ITransaction { filteredTransactions: IFilteredTransactions[]; transactionsColumns: IDepositTransactionsColumns[]; transactionsSearchLabels: IDepositTransactionsSearchLabels[]; -} \ No newline at end of file +} From b11039025330aa61cef6103f39b5c9187b0653d7 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Tue, 22 Jul 2025 17:51:44 +0300 Subject: [PATCH 50/55] add audits --- .../app/api/dashboard/audits/mockData.ts | 88 +++++++++ payment-iq/app/api/dashboard/audits/route.ts | 52 ++++++ .../transactions/deposits}/mockData.ts | 0 .../transactions/deposits}/route.ts | 27 +-- .../transactions/withdrawal/mockData.ts | 0 .../transactions/withdrawal/route.ts | 24 ++- payment-iq/app/dashboard/audits/page.tsx | 22 +++ .../dashboard/transactions/deposits/page.tsx | 7 +- .../dashboard/transactions/history/page.tsx | 24 +-- .../transactions/withdrawals/page.tsx | 8 +- .../AdvancedSearch/AdvancedSearch.tsx | 53 +++--- .../DataTable.tsx} | 51 +++--- payment-iq/app/features/DataTable/types.ts | 12 ++ .../features/Pages/transactions/constants.ts | 168 ------------------ .../app/features/Pages/transactions/types.ts | 38 ---- .../sidebar/SidebarLink.constants.ts | 3 + payment-iq/app/redux/store.ts | 7 +- .../app/redux/transactions/selectors.ts | 3 - .../redux/transactions/transactionsSlice.ts | 83 --------- payment-iq/app/services/audits.ts | 22 +++ payment-iq/app/services/transactions.ts | 22 ++- payment-iq/app/utils/exportData.ts | 53 +++--- 22 files changed, 336 insertions(+), 431 deletions(-) create mode 100644 payment-iq/app/api/dashboard/audits/mockData.ts create mode 100644 payment-iq/app/api/dashboard/audits/route.ts rename payment-iq/app/api/{transactions/deposit => dashboard/transactions/deposits}/mockData.ts (100%) rename payment-iq/app/api/{transactions/deposit => dashboard/transactions/deposits}/route.ts (66%) rename payment-iq/app/api/{ => dashboard}/transactions/withdrawal/mockData.ts (100%) rename payment-iq/app/api/{ => dashboard}/transactions/withdrawal/route.ts (59%) create mode 100644 payment-iq/app/dashboard/audits/page.tsx rename payment-iq/app/features/{Pages/transactions/TransactionsTable.tsx => DataTable/DataTable.tsx} (81%) create mode 100644 payment-iq/app/features/DataTable/types.ts delete mode 100644 payment-iq/app/features/Pages/transactions/constants.ts delete mode 100644 payment-iq/app/features/Pages/transactions/types.ts delete mode 100644 payment-iq/app/redux/transactions/selectors.ts delete mode 100644 payment-iq/app/redux/transactions/transactionsSlice.ts create mode 100644 payment-iq/app/services/audits.ts diff --git a/payment-iq/app/api/dashboard/audits/mockData.ts b/payment-iq/app/api/dashboard/audits/mockData.ts new file mode 100644 index 0000000..596c5cd --- /dev/null +++ b/payment-iq/app/api/dashboard/audits/mockData.ts @@ -0,0 +1,88 @@ +import { GridColDef } from "@mui/x-data-grid"; + +export const AuditColumns: GridColDef[] = [ + { field: "actionType", headerName: "Action Type", width: 130 }, + { + field: "timeStampOfTheAction", + headerName: "Timestamp of the action", + width: 130, + }, + { field: "adminUsername", headerName: "Admin username", width: 130 }, + { field: "adminId", headerName: "Admin ID", width: 130 }, + { field: "affectedUserId", headerName: "Affected user ID", width: 130 }, + { field: "adminIPAddress", headerName: "Admin IP address", width: 130 }, + { field: "reasonNote", headerName: "Reason/Note", width: 130 }, +]; + +export const AuditData = [ + { + id: "1", + actionType: "Create", + timeStampOfTheAction: "2023-03-01T12:00:00", + adminUsername: "admin1", + adminId: "12345", + affectedUserId: "67890", + adminIPAddress: "192.168.1.1", + reasonNote: "New user created", + }, + { + id: "2", + actionType: "Update", + timeStampOfTheAction: "2023-03-02T12:00:00", + adminUsername: "admin2", + adminId: "54321", + affectedUserId: "09876", + adminIPAddress: "192.168.2.2", + reasonNote: "User details updated", + }, + { + id: "3", + actionType: "Delete", + timeStampOfTheAction: "2023-03-03T12:00:00", + adminUsername: "admin3", + adminId: "98765", + affectedUserId: "45678", + adminIPAddress: "192.168.3.3", + reasonNote: "User deleted", + }, + { + id: "4", + actionType: "Create", + timeStampOfTheAction: "2023-03-04T12:00:00", + adminUsername: "admin4", + adminId: "98765", + affectedUserId: "45678", + adminIPAddress: "192.168.3.3", + reasonNote: "New user created", + }, + { + id: "5", + actionType: "Update", + timeStampOfTheAction: "2023-03-05T12:00:00", + adminUsername: "admin2", + adminId: "98765", + affectedUserId: "45678", + adminIPAddress: "192.168.3.3", + reasonNote: "User details updated", + }, +]; + +export const AuditSearchLabels = [ + { label: "Action Type", field: "actionType", type: "text" }, + { label: "Date / Time", field: "dateTime", type: "date" }, + { + label: "affectedUserId", + field: "Affected user ID", + type: "text", + }, + { + label: "Admin ID", + field: "adminId", + type: "text", + }, + { + label: "Admin username", + field: "adminUsername", + type: "text", + }, +]; diff --git a/payment-iq/app/api/dashboard/audits/route.ts b/payment-iq/app/api/dashboard/audits/route.ts new file mode 100644 index 0000000..c73fba3 --- /dev/null +++ b/payment-iq/app/api/dashboard/audits/route.ts @@ -0,0 +1,52 @@ +import { NextRequest, NextResponse } from "next/server"; +import { AuditColumns, AuditData, AuditSearchLabels } from "./mockData"; +import { formatToDateTimeString } from "@/app/utils/formatDate"; + +export async function GET(request: NextRequest) { + const { searchParams } = new URL(request.url); + + const actionType = searchParams.get("actionType"); + const affectedUserId = searchParams.get("affectedUserId"); + const adminId = searchParams.get("adminId"); + const adminUsername = searchParams.get("adminUsername"); + const timeStampOfTheAction = searchParams.get("dateTime"); + + let filteredRows = [...AuditData]; + + if (actionType) { + filteredRows = filteredRows.filter( + (tx) => tx.actionType.toLocaleLowerCase() === actionType.toLocaleLowerCase(), + ); + } + + if (affectedUserId) { + filteredRows = filteredRows.filter( + (tx) => tx.affectedUserId.toLowerCase() === affectedUserId.toLowerCase(), + ); + } + + if (adminId) { + filteredRows = filteredRows.filter( + (tx) => tx.adminId === adminId, + ); + } + if (adminUsername) { + filteredRows = filteredRows.filter( + (tx) => tx.adminUsername === adminUsername, + ); + } + + if (timeStampOfTheAction) { + filteredRows = filteredRows.filter( + (tx) => + tx.timeStampOfTheAction.split(" ")[0] === + formatToDateTimeString(timeStampOfTheAction).split(" ")[0], + ); + } + + return NextResponse.json({ + tableRows: filteredRows, + tableColumns: AuditColumns, + tableSearchLabels: AuditSearchLabels, + }); +} diff --git a/payment-iq/app/api/transactions/deposit/mockData.ts b/payment-iq/app/api/dashboard/transactions/deposits/mockData.ts similarity index 100% rename from payment-iq/app/api/transactions/deposit/mockData.ts rename to payment-iq/app/api/dashboard/transactions/deposits/mockData.ts diff --git a/payment-iq/app/api/transactions/deposit/route.ts b/payment-iq/app/api/dashboard/transactions/deposits/route.ts similarity index 66% rename from payment-iq/app/api/transactions/deposit/route.ts rename to payment-iq/app/api/dashboard/transactions/deposits/route.ts index 1f8d62b..91066cf 100644 --- a/payment-iq/app/api/transactions/deposit/route.ts +++ b/payment-iq/app/api/dashboard/transactions/deposits/route.ts @@ -1,5 +1,9 @@ import { NextRequest, NextResponse } from "next/server"; -import { depositTransactionDummyData, depositTransactionsColumns, depositTransactionsSearchLabels } from "./mockData"; +import { + depositTransactionDummyData, + depositTransactionsColumns, + depositTransactionsSearchLabels, +} from "./mockData"; import { formatToDateTimeString } from "@/app/utils/formatDate"; export async function GET(request: NextRequest) { @@ -12,46 +16,47 @@ export async function GET(request: NextRequest) { const transactionId = searchParams.get("transactionId"); const dateTime = searchParams.get("dateTime"); - let filteredTransactions = [...depositTransactionDummyData]; if (userId) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.userId.toString() === userId + (tx) => tx.userId.toString() === userId, ); } if (status) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.status.toLowerCase() === status.toLowerCase() + (tx) => tx.status.toLowerCase() === status.toLowerCase(), ); } if (depositMethod) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.depositMethod.toLowerCase() === depositMethod.toLowerCase() + (tx) => tx.depositMethod.toLowerCase() === depositMethod.toLowerCase(), ); } if (merchandId) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.merchandId.toString() === merchandId + (tx) => tx.merchandId.toString() === merchandId, ); } if (transactionId) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.transactionId.toString() === transactionId + (tx) => tx.transactionId.toString() === transactionId, ); } if (dateTime) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.dateTime.split(" ")[0] === formatToDateTimeString(dateTime).split(" ")[0] + (tx) => + tx.dateTime.split(" ")[0] === + formatToDateTimeString(dateTime).split(" ")[0], ); } return NextResponse.json({ - filteredTransactions: filteredTransactions, - transactionsSearchLabels: depositTransactionsSearchLabels, - transactionsColumns: depositTransactionsColumns + tableRows: filteredTransactions, + tableSearchLabels: depositTransactionsSearchLabels, + tableColumns: depositTransactionsColumns, }); } diff --git a/payment-iq/app/api/transactions/withdrawal/mockData.ts b/payment-iq/app/api/dashboard/transactions/withdrawal/mockData.ts similarity index 100% rename from payment-iq/app/api/transactions/withdrawal/mockData.ts rename to payment-iq/app/api/dashboard/transactions/withdrawal/mockData.ts diff --git a/payment-iq/app/api/transactions/withdrawal/route.ts b/payment-iq/app/api/dashboard/transactions/withdrawal/route.ts similarity index 59% rename from payment-iq/app/api/transactions/withdrawal/route.ts rename to payment-iq/app/api/dashboard/transactions/withdrawal/route.ts index d0f22cd..885b0fd 100644 --- a/payment-iq/app/api/transactions/withdrawal/route.ts +++ b/payment-iq/app/api/dashboard/transactions/withdrawal/route.ts @@ -1,5 +1,9 @@ import { NextRequest, NextResponse } from "next/server"; -import { withdrawalTransactionDummyData, withdrawalTransactionsColumns, withdrawalTransactionsSearchLabels } from "./mockData" +import { + withdrawalTransactionDummyData, + withdrawalTransactionsColumns, + withdrawalTransactionsSearchLabels, +} from "./mockData"; import { formatToDateTimeString } from "@/app/utils/formatDate"; export async function GET(request: NextRequest) { @@ -10,36 +14,38 @@ export async function GET(request: NextRequest) { const dateTime = searchParams.get("dateTime"); const withdrawalMethod = searchParams.get("withdrawalMethod"); - let filteredTransactions = [...withdrawalTransactionDummyData]; if (userId) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.userId.toString() === userId + (tx) => tx.userId.toString() === userId, ); } if (status) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.status.toLowerCase() === status.toLowerCase() + (tx) => tx.status.toLowerCase() === status.toLowerCase(), ); } if (withdrawalMethod) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.withdrawalMethod.toLowerCase() === withdrawalMethod.toLowerCase() + (tx) => + tx.withdrawalMethod.toLowerCase() === withdrawalMethod.toLowerCase(), ); } if (dateTime) { filteredTransactions = filteredTransactions.filter( - (tx) => tx.dateTime.split(" ")[0] === formatToDateTimeString(dateTime).split(" ")[0] + (tx) => + tx.dateTime.split(" ")[0] === + formatToDateTimeString(dateTime).split(" ")[0], ); } return NextResponse.json({ - filteredTransactions: filteredTransactions, - transactionsColumns: withdrawalTransactionsColumns, - transactionsSearchLabels: withdrawalTransactionsSearchLabels + tableRows: filteredTransactions, + tableSearchLabels: withdrawalTransactionsSearchLabels, + tableColumns: withdrawalTransactionsColumns, }); } diff --git a/payment-iq/app/dashboard/audits/page.tsx b/payment-iq/app/dashboard/audits/page.tsx new file mode 100644 index 0000000..9bec2b5 --- /dev/null +++ b/payment-iq/app/dashboard/audits/page.tsx @@ -0,0 +1,22 @@ +import DataTable from "@/app/features/DataTable/DataTable"; +import { getAudits } from "@/app/services/audits"; + +export default async function AuditPage({ + searchParams, +}: { + searchParams: Promise>; +}) { + // Await searchParams before processing + const params = await searchParams; + // Create a safe query string by filtering only string values + const safeParams: Record = {}; + for (const [key, value] of Object.entries(params)) { + if (typeof value === "string") { + safeParams[key] = value; + } + } + const query = new URLSearchParams(safeParams).toString(); + const data = await getAudits({ query }); + + return ; +} diff --git a/payment-iq/app/dashboard/transactions/deposits/page.tsx b/payment-iq/app/dashboard/transactions/deposits/page.tsx index 3b1a49f..aa589d0 100644 --- a/payment-iq/app/dashboard/transactions/deposits/page.tsx +++ b/payment-iq/app/dashboard/transactions/deposits/page.tsx @@ -1,5 +1,4 @@ - -import TransactionsTable from "@/app/features/pages/transactions/TransactionsTable"; +import DataTable from "@/app/features/DataTable/DataTable"; import { getTransactions } from "@/app/services/transactions"; export default async function DepositTransactionPage({ @@ -17,8 +16,8 @@ export default async function DepositTransactionPage({ } } const query = new URLSearchParams(safeParams).toString(); - const transactionType = 'deposit'; + const transactionType = "deposits"; const data = await getTransactions({ transactionType, query }); - return ; + return ; } diff --git a/payment-iq/app/dashboard/transactions/history/page.tsx b/payment-iq/app/dashboard/transactions/history/page.tsx index 2db697d..78e01bc 100644 --- a/payment-iq/app/dashboard/transactions/history/page.tsx +++ b/payment-iq/app/dashboard/transactions/history/page.tsx @@ -1,23 +1,3 @@ -import TransactionsTable from "@/app/features/pages/transactions/TransactionsTable"; -import { getTransactions } from "@/app/services/transactions"; - -export default async function DepositTransactionPage({ - searchParams, -}: { - searchParams: Promise>; -}) { - // Await searchParams before processing - const params = await searchParams; - // Create a safe query string by filtering only string values - const safeParams: Record = {}; - for (const [key, value] of Object.entries(params)) { - if (typeof value === "string") { - safeParams[key] = value; - } - } - const query = new URLSearchParams(safeParams).toString(); - const transactionType = 'deposit'; - const data = await getTransactions({ transactionType, query }); - - return ; +export default async function HistoryTransactionPage() { + return
History Transactions Page
; } diff --git a/payment-iq/app/dashboard/transactions/withdrawals/page.tsx b/payment-iq/app/dashboard/transactions/withdrawals/page.tsx index 20afed4..e61e9bd 100644 --- a/payment-iq/app/dashboard/transactions/withdrawals/page.tsx +++ b/payment-iq/app/dashboard/transactions/withdrawals/page.tsx @@ -1,4 +1,4 @@ -import TransactionsTable from "@/app/features/pages/transactions/TransactionsTable"; +import DataTable from "@/app/features/DataTable/DataTable"; import { getTransactions } from "@/app/services/transactions"; export default async function WithdrawalTransactionPage({ @@ -16,8 +16,8 @@ export default async function WithdrawalTransactionPage({ } } const query = new URLSearchParams(safeParams).toString(); -const transactionType = 'withdrawal'; -const data = await getTransactions({ transactionType, query }); + const transactionType = "withdrawal"; + const data = await getTransactions({ transactionType, query }); - return ; + return ; } diff --git a/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx b/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx index 79db3d2..78948a7 100644 --- a/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx +++ b/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx @@ -17,16 +17,9 @@ import SearchIcon from "@mui/icons-material/Search"; import RefreshIcon from "@mui/icons-material/Refresh"; import { useSearchParams, useRouter } from "next/navigation"; import { useState, useEffect, useMemo } from "react"; +import { ISearchLabel } from "../pages/transactions/types"; - -interface ILabel { - label: string; - field: string; - type: string; - options?: string[]; -} - -export default function AdvancedSearch({ labels }: { labels: ILabel[] }) { +export default function AdvancedSearch({ labels }: { labels: ISearchLabel[] }) { const searchParams = useSearchParams(); const router = useRouter(); const [open, setOpen] = useState(false); @@ -37,7 +30,6 @@ export default function AdvancedSearch({ labels }: { labels: ILabel[] }) { setFormValues(initialParams); }, [searchParams]); - const updateURL = useMemo( () => debounce((newValues: Record) => { @@ -47,7 +39,7 @@ export default function AdvancedSearch({ labels }: { labels: ILabel[] }) { }); router.push(`?${updatedParams.toString()}`); }, 500), - [router] + [router], ); const handleFieldChange = (field: string, value: string) => { @@ -61,19 +53,20 @@ export default function AdvancedSearch({ labels }: { labels: ILabel[] }) { router.push("?"); }; - const toggleDrawer = (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { - if ( - event.type === "keydown" && - ((event as React.KeyboardEvent).key === "Tab" || - (event as React.KeyboardEvent).key === "Shift") - ) { - return; - } - setOpen(open); - }; + const toggleDrawer = + (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { + if ( + event.type === "keydown" && + ((event as React.KeyboardEvent).key === "Tab" || + (event as React.KeyboardEvent).key === "Shift") + ) { + return; + } + setOpen(open); + }; return ( - +
+ + {/* Password input field */} +
+ + setPassword(e.target.value)} + required + disabled={isLoading} + /> +
+ + + + ); +} diff --git a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx index d36e1ad..cea093d 100644 --- a/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx +++ b/payment-iq/app/features/Pages/DashboardHomePage/DashboardHomePage.tsx @@ -11,6 +11,7 @@ import { TransactionsOverView } from "../../TransactionsOverview/TransactionsOve export const DashboardHomePage = () => { return ( <> + {/* Conditional rendering of the Generic Modal, passing LoginModal as children */} diff --git a/payment-iq/app/login/page.scss b/payment-iq/app/login/page.scss new file mode 100644 index 0000000..2e32ae3 --- /dev/null +++ b/payment-iq/app/login/page.scss @@ -0,0 +1,64 @@ +// Variables for consistent styling +$primary-color: #2563eb; // Blue-600 equivalent +$primary-hover-color: #1d4ed8; // Blue-700 equivalent +$success-color: #16a34a; // Green-600 equivalent +$error-color: #dc2626; // Red-600 equivalent +$text-color-dark: #1f2937; // Gray-800 equivalent +$text-color-medium: #4b5563; // Gray-700 equivalent +$text-color-light: #6b7280; // Gray-600 equivalent +$border-color: #d1d5db; // Gray-300 equivalent +$bg-color-light: #f3f4f6; // Gray-100 equivalent +$bg-color-white: #ffffff; + +.page-container { + min-height: 100vh; + background-color: $bg-color-light; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-family: "Inter", sans-serif; // Assuming Inter font is used + padding: 1rem; +} + +.page-container__content { + width: 100%; + max-width: 56rem; // max-w-4xl + background-color: $bg-color-white; + border-radius: 0.75rem; // rounded-xl + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), + 0 4px 6px -2px rgba(0, 0, 0, 0.05); // shadow-lg + padding: 2rem; // p-8 + text-align: center; +} + +.page-container__title { + font-size: 2.25rem; // text-4xl + font-weight: 700; // font-bold + color: $text-color-dark; + margin-bottom: 1.5rem; // mb-6 +} + +.page-container__message--logged-in { + font-size: 1.25rem; // text-xl + color: $success-color; + margin-bottom: 1rem; // mb-4 +} + +.page-container__text { + color: $text-color-medium; + margin-bottom: 1.5rem; // mb-6 +} + +.page-container__button--logout { + padding: 0.75rem 1.5rem; // px-6 py-3 + background-color: $error-color; + color: $bg-color-white; + font-weight: 600; // font-semibold + border-radius: 0.5rem; // rounded-lg + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); // shadow-md + transition: background-color 0.3s ease-in-out; + &:hover { + background-color: darken($error-color, 5%); // red-700 equivalent + } +} diff --git a/payment-iq/app/login/page.tsx b/payment-iq/app/login/page.tsx new file mode 100644 index 0000000..c185f15 --- /dev/null +++ b/payment-iq/app/login/page.tsx @@ -0,0 +1,103 @@ +"use client"; + +import React, { useState, useEffect } from "react"; +import { useRouter, useSearchParams } from "next/navigation"; +import LoginModal from "../features/Auth/LoginModal"; // Your LoginModal component + +import "./page.scss"; // Global styles for LoginModal and page +import Modal from "../components/Modal/Modal"; + +export default function LoginPage() { + const router = useRouter(); + const searchParams = useSearchParams(); + const redirectPath = searchParams.get("redirect") || "/dashboard"; + + const [authMessage, setAuthMessage] = useState(""); + const [isLoggedIn, setIsLoggedIn] = useState(false); + + useEffect(() => { + // Check if already logged in by trying to fetch a protected resource or checking a client-accessible flag + // For HTTP-only cookies, you can't directly read the token here. + // Instead, you'd rely on a server-side check (e.g., in middleware or a Server Component) + // or a simple client-side flag if your backend also sets one (less secure for token itself). + // For this example, we'll assume if they land here, they need to log in. + // A more robust check might involve a quick API call to /api/auth/status + // if the token is in an HTTP-only cookie. + const checkAuthStatus = async () => { + // In a real app, this might be a call to a /api/auth/status endpoint + // that checks the HTTP-only cookie on the server and returns a boolean. + // For now, we'll rely on the middleware to redirect if unauthenticated. + // If the user somehow lands on /login with a valid cookie, the middleware + // should have redirected them already. + }; + checkAuthStatus(); + }, []); + + const handleLogin = async (email: string, password: string) => { + setAuthMessage("Attempting login..."); + try { + const response = await fetch("/api/auth/login", { + // <--- CALLING YOUR INTERNAL ROUTE HANDLER + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ email, password }), + }); + + const data = await response.json(); + + if (response.ok) { + // Check if the response status is 2xx + // Backend has successfully set the HTTP-only cookie + setAuthMessage("Login successful!"); + setIsLoggedIn(true); + // Redirect to the intended path after successful login + router.replace(redirectPath); + } else { + // Handle login errors (e.g., invalid credentials) + setAuthMessage(data.message || "Login failed. Please try again."); + setIsLoggedIn(false); + } + } catch (error) { + console.error("Login failed:", error); + setAuthMessage("An error occurred during login. Please try again later."); + setIsLoggedIn(false); + } + return isLoggedIn; // Return the current login status + }; + + const clearAuthMessage = () => setAuthMessage(""); + + // If user is already logged in (e.g., redirected by middleware to dashboard), + // this page shouldn't be visible. The middleware should handle the primary redirect. + // This `isLoggedIn` state here is more for internal page logic if the user somehow + // bypasses middleware or lands on /login with a valid session. + // For a robust setup, the middleware is key. + + return ( +
+
+

Payment Backoffice

+

+ Please log in to access the backoffice. +

+
+ + {/* Always show the modal on the login page */} + { + /* No direct close for login modal, user must log in */ + }} + title="Login to Backoffice" + > + + +
+ ); +} diff --git a/payment-iq/app/page.tsx b/payment-iq/app/page.tsx index cb6ddb3..bb91a4b 100644 --- a/payment-iq/app/page.tsx +++ b/payment-iq/app/page.tsx @@ -1,6 +1,6 @@ "use client"; -import { DashboardHomePage } from "./features/pages/DashboardHomePage/DashboardHomePage"; +import { DashboardHomePage } from "./features/Pages/DashboardHomePage/DashboardHomePage"; const DashboardPage = () => { return ; diff --git a/payment-iq/middleware.ts b/payment-iq/middleware.ts new file mode 100644 index 0000000..99ed90d --- /dev/null +++ b/payment-iq/middleware.ts @@ -0,0 +1,30 @@ +// middleware.ts +import { NextResponse } from "next/server"; +import type { NextRequest } from "next/server"; + +export function middleware(request: NextRequest) { + const token = request.cookies.get("auth_token")?.value; // Get token from cookie + + // Define protected paths + const protectedPaths = ["/dashboard", "/settings", "/admin"]; + const isProtected = protectedPaths.some((path) => + request.nextUrl.pathname.startsWith(path) + ); + + // If accessing a protected path and no token + if (isProtected && !token) { + // Redirect to login page + const loginUrl = new URL("/login", request.url); + // Optional: Add a redirect query param to return to original page after login + loginUrl.searchParams.set("redirect", request.nextUrl.pathname); + return NextResponse.redirect(loginUrl); + } + + // Allow the request to proceed if not protected or token exists + return NextResponse.next(); +} + +// Configure matcher to run middleware on specific paths +export const config = { + matcher: ["/dashboard/:path*", "/settings/:path*", "/admin/:path*"], // Apply to dashboard and its sub-paths +}; From d4153065ddf9adbe95fd6c13e4048ef1ff490af3 Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Tue, 22 Jul 2025 22:55:25 +0300 Subject: [PATCH 52/55] redux provider --- payment-iq/app/layout.tsx | 3 +++ payment-iq/app/redux/ReduxProvider.tsx | 8 ++++++++ 2 files changed, 11 insertions(+) create mode 100644 payment-iq/app/redux/ReduxProvider.tsx diff --git a/payment-iq/app/layout.tsx b/payment-iq/app/layout.tsx index 561d14e..06637ec 100644 --- a/payment-iq/app/layout.tsx +++ b/payment-iq/app/layout.tsx @@ -1,5 +1,6 @@ import ThemeRegistry from "@/config/ThemeRegistry"; import type { Metadata } from "next"; +import ReduxProvider from "./redux/ReduxProvider"; import "../styles/globals.scss"; export const metadata: Metadata = { @@ -15,7 +16,9 @@ export default function RootLayout({ return ( + {children} + ); diff --git a/payment-iq/app/redux/ReduxProvider.tsx b/payment-iq/app/redux/ReduxProvider.tsx new file mode 100644 index 0000000..0a8cc4b --- /dev/null +++ b/payment-iq/app/redux/ReduxProvider.tsx @@ -0,0 +1,8 @@ +"use client"; + +import { Provider } from "react-redux"; +import { store } from "./store"; // Adjust the import path as necessary + +export default function ReduxProvider({ children }: { children: React.ReactNode }) { + return {children}; +} From c0c1a8309047a56391112d972b93874c6344a3fc Mon Sep 17 00:00:00 2001 From: Petropoulos Evangelos Date: Tue, 22 Jul 2025 22:56:11 +0300 Subject: [PATCH 53/55] Update ReduxProvider.tsx --- payment-iq/app/redux/ReduxProvider.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/payment-iq/app/redux/ReduxProvider.tsx b/payment-iq/app/redux/ReduxProvider.tsx index 0a8cc4b..ef50bf2 100644 --- a/payment-iq/app/redux/ReduxProvider.tsx +++ b/payment-iq/app/redux/ReduxProvider.tsx @@ -1,7 +1,6 @@ "use client"; - import { Provider } from "react-redux"; -import { store } from "./store"; // Adjust the import path as necessary +import { store } from "./store"; export default function ReduxProvider({ children }: { children: React.ReactNode }) { return {children}; From 7851a6fa24070ab9979cd7597839fa4b2187b2a8 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Wed, 23 Jul 2025 07:37:39 +0200 Subject: [PATCH 54/55] Added Logout --- payment-iq/app/api/auth/logout/route.tsx | 24 +++ payment-iq/app/components/Modal/Modal.tsx | 2 +- .../AdvancedSearch/AdvancedSearch.tsx | 6 +- payment-iq/app/features/DataTable/types.ts | 4 +- .../header/accountMenu/AccountMenu.tsx | 53 +++++- payment-iq/app/layout.tsx | 2 +- payment-iq/app/login/page.tsx | 121 ++++++-------- payment-iq/app/redux/ReduxProvider.tsx | 19 ++- payment-iq/app/redux/auth/authSlice.tsx | 152 ++++++++++++++++++ payment-iq/app/redux/auth/selectors.ts | 8 + payment-iq/app/redux/store.ts | 2 + 11 files changed, 314 insertions(+), 79 deletions(-) create mode 100644 payment-iq/app/api/auth/logout/route.tsx create mode 100644 payment-iq/app/redux/auth/authSlice.tsx create mode 100644 payment-iq/app/redux/auth/selectors.ts diff --git a/payment-iq/app/api/auth/logout/route.tsx b/payment-iq/app/api/auth/logout/route.tsx new file mode 100644 index 0000000..d5509d9 --- /dev/null +++ b/payment-iq/app/api/auth/logout/route.tsx @@ -0,0 +1,24 @@ +// app/api/auth/logout/route.ts +import { NextResponse } from "next/server"; +import { cookies } from "next/headers"; + +// This is your DELETE handler for the logout endpoint +export async function DELETE(request: Request) { + try { + // Clear the authentication cookie. + // This MUST match the name of the cookie set during login. + // In your login handler, the cookie is named "auth_token". + cookies().delete("auth_token"); + + return NextResponse.json( + { success: true, message: "Logged out successfully" }, + { status: 200 } + ); + } catch (error) { + console.error("Logout API error:", error); + return NextResponse.json( + { success: false, message: "Internal server error during logout" }, + { status: 500 } + ); + } +} diff --git a/payment-iq/app/components/Modal/Modal.tsx b/payment-iq/app/components/Modal/Modal.tsx index 7a5a2c6..e0d25ee 100644 --- a/payment-iq/app/components/Modal/Modal.tsx +++ b/payment-iq/app/components/Modal/Modal.tsx @@ -3,7 +3,7 @@ import "./Modal.scss"; interface ModalProps { open: boolean; - onClose: () => void; + onClose?: () => void; children: React.ReactNode; className?: string; overlayClassName?: string; diff --git a/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx b/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx index 78948a7..d082fb9 100644 --- a/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx +++ b/payment-iq/app/features/AdvancedSearch/AdvancedSearch.tsx @@ -17,7 +17,7 @@ import SearchIcon from "@mui/icons-material/Search"; import RefreshIcon from "@mui/icons-material/Refresh"; import { useSearchParams, useRouter } from "next/navigation"; import { useState, useEffect, useMemo } from "react"; -import { ISearchLabel } from "../pages/transactions/types"; +import { ISearchLabel } from "../DataTable/types"; export default function AdvancedSearch({ labels }: { labels: ISearchLabel[] }) { const searchParams = useSearchParams(); @@ -39,7 +39,7 @@ export default function AdvancedSearch({ labels }: { labels: ISearchLabel[] }) { }); router.push(`?${updatedParams.toString()}`); }, 500), - [router], + [router] ); const handleFieldChange = (field: string, value: string) => { @@ -165,7 +165,7 @@ export default function AdvancedSearch({ labels }: { labels: ISearchLabel[] }) { onChange={(newValue) => handleFieldChange( field, - newValue?.toISOString() || "", + newValue?.toISOString() || "" ) } slotProps={{ diff --git a/payment-iq/app/features/DataTable/types.ts b/payment-iq/app/features/DataTable/types.ts index 0327000..fb4c381 100644 --- a/payment-iq/app/features/DataTable/types.ts +++ b/payment-iq/app/features/DataTable/types.ts @@ -1,4 +1,4 @@ -interface ISearchLabel { +export interface ISearchLabel { label: string; field: string; type: string; @@ -9,4 +9,4 @@ export interface IDataTable { tableRows: TRow[]; tableColumns: TColumn[]; tableSearchLabels: ISearchLabel[]; -} \ No newline at end of file +} diff --git a/payment-iq/app/features/dashboard/header/accountMenu/AccountMenu.tsx b/payment-iq/app/features/dashboard/header/accountMenu/AccountMenu.tsx index 7287199..cb30633 100644 --- a/payment-iq/app/features/dashboard/header/accountMenu/AccountMenu.tsx +++ b/payment-iq/app/features/dashboard/header/accountMenu/AccountMenu.tsx @@ -7,10 +7,17 @@ import { IconButton, ListItemIcon, Typography, + Button, + CircularProgress, } from "@mui/material"; import AccountCircleIcon from "@mui/icons-material/AccountCircle"; import SettingsIcon from "@mui/icons-material/Settings"; import LogoutIcon from "@mui/icons-material/Logout"; +import { useDispatch, useSelector } from "react-redux"; +import { selectIsLoggedIn, selectStatus } from "@/app/redux/auth/selectors"; +import { logout } from "@/app/redux/auth/authSlice"; +import { AppDispatch, RootState } from "@/app/redux/types"; +import { useRouter } from "next/navigation"; export default function AccountMenu() { const [anchorEl, setAnchorEl] = React.useState(null); @@ -24,6 +31,38 @@ export default function AccountMenu() { setAnchorEl(null); }; + const dispatch = useDispatch(); + const router = useRouter(); + + // Select relevant state from your auth slice + const isLoggedIn = useSelector(selectIsLoggedIn); + const authStatus = useSelector(selectStatus); + + // Determine if we're currently in the process of logging out + const isLoggingOut = authStatus === "loading"; + + const handleLogout = async () => { + // Dispatch the logout thunk + const resultAction = await dispatch(logout()); + + // Check if logout was successful based on the action result + if (logout.fulfilled.match(resultAction)) { + console.log("Logout successful, redirecting..."); + router.push("/login"); // Redirect to your login page + } else { + // Handle logout failure (e.g., show an error message) + console.error("Logout failed:", resultAction.payload); + // You might want to display a toast or alert here + } + }; + + console.log("[isLoggedin]", isLoggedIn); + + // Only show the logout button if the user is logged in + if (!isLoggedIn) { + return null; + } + return ( <> @@ -56,7 +95,19 @@ export default function AccountMenu() { - Sign out +
diff --git a/payment-iq/app/layout.tsx b/payment-iq/app/layout.tsx index 06637ec..896ccb1 100644 --- a/payment-iq/app/layout.tsx +++ b/payment-iq/app/layout.tsx @@ -17,7 +17,7 @@ export default function RootLayout({ - {children} + {children} diff --git a/payment-iq/app/login/page.tsx b/payment-iq/app/login/page.tsx index c185f15..83b065a 100644 --- a/payment-iq/app/login/page.tsx +++ b/payment-iq/app/login/page.tsx @@ -1,79 +1,67 @@ "use client"; -import React, { useState, useEffect } from "react"; +import React, { useEffect } from "react"; import { useRouter, useSearchParams } from "next/navigation"; -import LoginModal from "../features/Auth/LoginModal"; // Your LoginModal component - -import "./page.scss"; // Global styles for LoginModal and page +import { useDispatch, useSelector } from "react-redux"; +import LoginModal from "../features/Auth/LoginModal"; import Modal from "../components/Modal/Modal"; +import { AppDispatch } from "../redux/types"; +import { + selectAuthMessage, + selectIsLoggedIn, + selectStatus, +} from "../redux/auth/selectors"; +import { clearAuthMessage, login } from "../redux/auth/authSlice"; +import "./page.scss"; export default function LoginPage() { const router = useRouter(); const searchParams = useSearchParams(); const redirectPath = searchParams.get("redirect") || "/dashboard"; + const isLoggedIn = useSelector(selectIsLoggedIn); + const status = useSelector(selectStatus); + const authMessage = useSelector(selectAuthMessage); - const [authMessage, setAuthMessage] = useState(""); - const [isLoggedIn, setIsLoggedIn] = useState(false); + const dispatch = useDispatch(); // Initialize useDispatch + // Effect to handle redirection after login or if already logged in useEffect(() => { - // Check if already logged in by trying to fetch a protected resource or checking a client-accessible flag - // For HTTP-only cookies, you can't directly read the token here. - // Instead, you'd rely on a server-side check (e.g., in middleware or a Server Component) - // or a simple client-side flag if your backend also sets one (less secure for token itself). - // For this example, we'll assume if they land here, they need to log in. - // A more robust check might involve a quick API call to /api/auth/status - // if the token is in an HTTP-only cookie. - const checkAuthStatus = async () => { - // In a real app, this might be a call to a /api/auth/status endpoint - // that checks the HTTP-only cookie on the server and returns a boolean. - // For now, we'll rely on the middleware to redirect if unauthenticated. - // If the user somehow lands on /login with a valid cookie, the middleware - // should have redirected them already. - }; - checkAuthStatus(); - }, []); - - const handleLogin = async (email: string, password: string) => { - setAuthMessage("Attempting login..."); - try { - const response = await fetch("/api/auth/login", { - // <--- CALLING YOUR INTERNAL ROUTE HANDLER - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ email, password }), - }); - - const data = await response.json(); - - if (response.ok) { - // Check if the response status is 2xx - // Backend has successfully set the HTTP-only cookie - setAuthMessage("Login successful!"); - setIsLoggedIn(true); - // Redirect to the intended path after successful login - router.replace(redirectPath); - } else { - // Handle login errors (e.g., invalid credentials) - setAuthMessage(data.message || "Login failed. Please try again."); - setIsLoggedIn(false); - } - } catch (error) { - console.error("Login failed:", error); - setAuthMessage("An error occurred during login. Please try again later."); - setIsLoggedIn(false); + if (isLoggedIn && status === "succeeded") { + router.replace(redirectPath); // Redirect to intended path on successful login + } + }, [isLoggedIn, status, router, redirectPath]); + + // Function to handle login attempt, now dispatches Redux thunk + const handleLogin = async (email: string, password: string) => { + // Dispatch the login async thunk + const resultAction = await dispatch(login({ email, password })); + + // Check if login was successful based on the thunk's result + if (login.fulfilled.match(resultAction)) { + return true; // Login successful + } else { + return false; // Login failed } - return isLoggedIn; // Return the current login status }; - const clearAuthMessage = () => setAuthMessage(""); + // Function to clear authentication message, now dispatches Redux action + const handleClearAuthMessage = () => { + dispatch(clearAuthMessage()); + }; - // If user is already logged in (e.g., redirected by middleware to dashboard), - // this page shouldn't be visible. The middleware should handle the primary redirect. - // This `isLoggedIn` state here is more for internal page logic if the user somehow - // bypasses middleware or lands on /login with a valid session. - // For a robust setup, the middleware is key. + // If user is already logged in, show a redirecting message + if (isLoggedIn) { + return ( +
+
+

Payment Backoffice

+

+ You are logged in. Redirecting to dashboard... +

+
+
+ ); + } return (
@@ -84,18 +72,11 @@ export default function LoginPage() {

- {/* Always show the modal on the login page */} - { - /* No direct close for login modal, user must log in */ - }} - title="Login to Backoffice" - > + diff --git a/payment-iq/app/redux/ReduxProvider.tsx b/payment-iq/app/redux/ReduxProvider.tsx index ef50bf2..f6dd9c9 100644 --- a/payment-iq/app/redux/ReduxProvider.tsx +++ b/payment-iq/app/redux/ReduxProvider.tsx @@ -1,7 +1,24 @@ +// app/redux/ReduxProvider.tsx "use client"; + +import React, { useEffect } from "react"; // Import useEffect import { Provider } from "react-redux"; import { store } from "./store"; +import { initializeAuth } from "./auth/authSlice"; + +export default function ReduxProvider({ + children, +}: { + children: React.ReactNode; +}) { + // Get the dispatch function directly from the store for initial dispatch + const dispatch = store.dispatch; + + useEffect(() => { + // Dispatch initializeAuth when the ReduxProvider component mounts on the client. + // This ensures your Redux isLoggedIn state is synced with localStorage after a page refresh. + dispatch(initializeAuth()); + }, [dispatch]); // Dependency array ensures it runs only once on mount -export default function ReduxProvider({ children }: { children: React.ReactNode }) { return {children}; } diff --git a/payment-iq/app/redux/auth/authSlice.tsx b/payment-iq/app/redux/auth/authSlice.tsx new file mode 100644 index 0000000..f040f2b --- /dev/null +++ b/payment-iq/app/redux/auth/authSlice.tsx @@ -0,0 +1,152 @@ +import { createSlice, createAsyncThunk, PayloadAction } from "@reduxjs/toolkit"; + +// Define the initial state for the authentication slice +interface AuthState { + isLoggedIn: boolean; + authMessage: string; + status: "idle" | "loading" | "succeeded" | "failed"; + error: string | null; +} + +const initialState: AuthState = { + isLoggedIn: false, + authMessage: "", + status: "idle", + error: null, +}; + +// Async Thunk for Login +// This handles the API call to your Next.js login Route Handler +export const login = createAsyncThunk( + "auth/login", + async ( + { email, password }: { email: string; password: string }, + { rejectWithValue } + ) => { + try { + const response = await fetch("/api/auth/login", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ email, password }), + }); + + const data = await response.json(); + + if (!response.ok) { + // If the server responded with an error status (e.g., 401, 400, 500) + return rejectWithValue(data.message || "Login failed"); + } + + // On successful login, the backend sets the HTTP-only cookie. + // We'll set a client-side flag (like localStorage) for immediate UI updates, + // though the primary source of truth for auth is the HTTP-only cookie. + if (typeof window !== "undefined") { + // Ensure localStorage access is client-side + localStorage.setItem("userToken", "mock-authenticated"); // For client-side state sync + } + return data.message || "Login successful"; + } catch (error: any) { + // Handle network errors or other unexpected issues + return rejectWithValue(error.message || "Network error during login"); + } + } +); + +// Async Thunk for Logout +// This handles the API call to your Next.js logout Route Handler +export const logout = createAsyncThunk( + "auth/logout", + async (_, { rejectWithValue }) => { + try { + const response = await fetch("/api/auth/logout", { + method: "DELETE", + }); + + const data = await response.json(); + + if (!response.ok) { + // If the server responded with an error status + return rejectWithValue(data.message || "Logout failed"); + } + + if (typeof window !== "undefined") { + // Ensure localStorage access is client-side + localStorage.removeItem("userToken"); // Clear client-side flag + } + return data.message || "Logged out successfully"; + } catch (error: any) { + // Handle network errors + return rejectWithValue(error.message || "Network error during logout"); + } + } +); + +// Create the authentication slice +const authSlice = createSlice({ + name: "auth", + initialState, + reducers: { + // Reducer to set an authentication message (e.g., from UI actions) + setAuthMessage: (state, action: PayloadAction) => { + state.authMessage = action.payload; + }, + // Reducer to clear the authentication message + clearAuthMessage: (state) => { + state.authMessage = ""; + }, + // Reducer to initialize login status from client-side storage (e.g., on app load) + // This is useful for cases where middleware might not redirect immediately, + // or for client-side rendering of protected content based on initial state. + initializeAuth: (state) => { + if (typeof window !== "undefined") { + // Ensure this runs only on the client + const userToken = localStorage.getItem("userToken"); + state.isLoggedIn = userToken === "mock-authenticated"; + } + }, + }, + extraReducers: (builder) => { + builder + // Login Thunk Reducers + .addCase(login.pending, (state) => { + state.status = "loading"; + state.error = null; + state.authMessage = "Attempting login..."; + }) + .addCase(login.fulfilled, (state, action) => { + state.status = "succeeded"; + state.isLoggedIn = true; + state.authMessage = action.payload; + }) + .addCase(login.rejected, (state, action) => { + state.status = "failed"; + state.isLoggedIn = false; + state.error = action.payload as string; + state.authMessage = action.payload as string; // Display error message + }) + // Logout Thunk Reducers + .addCase(logout.pending, (state) => { + state.status = "loading"; + state.error = null; + state.authMessage = "Logging out..."; + }) + .addCase(logout.fulfilled, (state, action) => { + state.status = "succeeded"; + state.isLoggedIn = false; + state.authMessage = action.payload; + }) + .addCase(logout.rejected, (state, action) => { + state.status = "failed"; + state.isLoggedIn = true; // Stay logged in if logout failed + state.error = action.payload as string; + state.authMessage = action.payload as string; // Display error message + }); + }, +}); + +export const { setAuthMessage, clearAuthMessage, initializeAuth } = + authSlice.actions; + +export default authSlice.reducer; diff --git a/payment-iq/app/redux/auth/selectors.ts b/payment-iq/app/redux/auth/selectors.ts new file mode 100644 index 0000000..a5bb736 --- /dev/null +++ b/payment-iq/app/redux/auth/selectors.ts @@ -0,0 +1,8 @@ +import { RootState } from "../types"; + +export const selectIsLoggedIn = (state: RootState) => + state.authSlice.isLoggedIn; +export const selectStatus = (state: RootState) => state.authSlice?.status; +export const selectError = (state: RootState) => state.authSlice?.error; +export const selectAuthMessage = (state: RootState) => + state.authSlice?.authMessage; diff --git a/payment-iq/app/redux/store.ts b/payment-iq/app/redux/store.ts index 9609be3..8906f07 100644 --- a/payment-iq/app/redux/store.ts +++ b/payment-iq/app/redux/store.ts @@ -1,8 +1,10 @@ import { configureStore } from "@reduxjs/toolkit"; import advancedSearchReducer from "./advanedSearch/advancedSearchSlice"; +import authReducer from "./auth/authSlice"; export const store = configureStore({ reducer: { advancedSearch: advancedSearchReducer, + authSlice: authReducer, }, }); From cfd796c1e941fdc598cdcb7d2bc7b0b481447939 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Fri, 25 Jul 2025 19:06:14 +0200 Subject: [PATCH 55/55] Fixing logout --- payment-iq/app/redux/ReduxProvider.tsx | 16 +++--- .../advanedSearch/advancedSearchSlice.ts | 49 +++++++++---------- payment-iq/app/redux/auth/selectors.ts | 10 ++-- payment-iq/app/redux/store.ts | 25 +++++++--- 4 files changed, 55 insertions(+), 45 deletions(-) diff --git a/payment-iq/app/redux/ReduxProvider.tsx b/payment-iq/app/redux/ReduxProvider.tsx index f6dd9c9..4eb6a55 100644 --- a/payment-iq/app/redux/ReduxProvider.tsx +++ b/payment-iq/app/redux/ReduxProvider.tsx @@ -1,9 +1,9 @@ // app/redux/ReduxProvider.tsx "use client"; -import React, { useEffect } from "react"; // Import useEffect +import React, { useEffect, useRef } from "react"; import { Provider } from "react-redux"; -import { store } from "./store"; +import { makeStore } from "./store"; import { initializeAuth } from "./auth/authSlice"; export default function ReduxProvider({ @@ -11,14 +11,16 @@ export default function ReduxProvider({ }: { children: React.ReactNode; }) { - // Get the dispatch function directly from the store for initial dispatch - const dispatch = store.dispatch; + // Create a store instance for this client-side session + const storeRef = useRef>(makeStore()); useEffect(() => { // Dispatch initializeAuth when the ReduxProvider component mounts on the client. // This ensures your Redux isLoggedIn state is synced with localStorage after a page refresh. - dispatch(initializeAuth()); - }, [dispatch]); // Dependency array ensures it runs only once on mount + if (storeRef.current) { + storeRef.current.dispatch(initializeAuth() as any); + } + }, []); - return {children}; + return {children}; } diff --git a/payment-iq/app/redux/advanedSearch/advancedSearchSlice.ts b/payment-iq/app/redux/advanedSearch/advancedSearchSlice.ts index 43b055c..b3f5dfc 100644 --- a/payment-iq/app/redux/advanedSearch/advancedSearchSlice.ts +++ b/payment-iq/app/redux/advanedSearch/advancedSearchSlice.ts @@ -1,25 +1,25 @@ -import { createSlice } from '@reduxjs/toolkit'; +import { createSlice } from "@reduxjs/toolkit"; interface AdvancedSearchState { - keyword: string, - transactionID: string, - transactionReferenceId: string, - user: string, - currency: string, - state: string, - statusDescription: string, - transactionType: string, - paymentMethod: string, - psps: string, - initialPsps: string, - merchants: string, - startDate: null | string, - endDate: null | string, - lastUpdatedFrom: null | string, - lastUpdatedTo: null | string, - minAmount: string, - maxAmount: string, - channel: string, + keyword: string; + transactionID: string; + transactionReferenceId: string; + user: string; + currency: string; + state: string; + statusDescription: string; + transactionType: string; + paymentMethod: string; + psps: string; + initialPsps: string; + merchants: string; + startDate: null | string; + endDate: null | string; + lastUpdatedFrom: null | string; + lastUpdatedTo: null | string; + minAmount: string; + maxAmount: string; + channel: string; } const initialState: AdvancedSearchState = { @@ -45,12 +45,9 @@ const initialState: AdvancedSearchState = { }; const advancedSearchSlice = createSlice({ - name: 'advancedSearch', + name: "advancedSearch", initialState, - reducers: { - }, -}, -); + reducers: {}, +}); export default advancedSearchSlice.reducer; - diff --git a/payment-iq/app/redux/auth/selectors.ts b/payment-iq/app/redux/auth/selectors.ts index a5bb736..c74bf40 100644 --- a/payment-iq/app/redux/auth/selectors.ts +++ b/payment-iq/app/redux/auth/selectors.ts @@ -1,8 +1,6 @@ import { RootState } from "../types"; -export const selectIsLoggedIn = (state: RootState) => - state.authSlice.isLoggedIn; -export const selectStatus = (state: RootState) => state.authSlice?.status; -export const selectError = (state: RootState) => state.authSlice?.error; -export const selectAuthMessage = (state: RootState) => - state.authSlice?.authMessage; +export const selectIsLoggedIn = (state: RootState) => state.auth.isLoggedIn; +export const selectStatus = (state: RootState) => state.auth?.status; +export const selectError = (state: RootState) => state.auth?.error; +export const selectAuthMessage = (state: RootState) => state.auth?.authMessage; diff --git a/payment-iq/app/redux/store.ts b/payment-iq/app/redux/store.ts index 8906f07..095a10d 100644 --- a/payment-iq/app/redux/store.ts +++ b/payment-iq/app/redux/store.ts @@ -2,9 +2,22 @@ import { configureStore } from "@reduxjs/toolkit"; import advancedSearchReducer from "./advanedSearch/advancedSearchSlice"; import authReducer from "./auth/authSlice"; -export const store = configureStore({ - reducer: { - advancedSearch: advancedSearchReducer, - authSlice: authReducer, - }, -}); +export const makeStore = () => { + return configureStore({ + reducer: { + advancedSearch: advancedSearchReducer, + auth: authReducer, + }, + // Enable Redux DevTools + devTools: process.env.NODE_ENV !== "production", + }); +}; + +// Create the store instance +export const store = makeStore(); + +// Infer the type of makeStore +export type AppStore = ReturnType; +// Infer the `RootState` and `AppDispatch` types from the store itself +export type RootState = ReturnType; +export type AppDispatch = AppStore["dispatch"];